Slika 3: Savez 3 KPI (ukupna potpora, sportaša, dokumenata)

Endpoint:
- /api/v2/savez/{id}/kpi (ukupna_potpora, broj_sportasa, broj_klubova, najvisi_rang, broj_dokumenata, broj_manifestacija)

Frontend sport2.html:
- loadSavezKpi() function
- Auto-call after openSavez(id) panel render
This commit is contained in:
2026-05-05 18:24:05 +02:00
parent 7608839473
commit 8127e2ef22
3 changed files with 31 additions and 8 deletions
+23 -1
View File
@@ -2531,7 +2531,9 @@ def sportasi_filtered(sport: str = None, klub_id: int = None, kategorija: str =
rows = fetch(f"""
SELECT c.id, c.ime, c.prezime, c.spol, c.datum_rodenja, c.godina_rodenja,
c.kategorija, c.pozicija, c.sport, c.klub_id, k.naziv AS klub_naziv,
c.hns_igrac_id, c.source, c.source_url
c.hns_igrac_id, c.source, c.source_url, c.slika_url,
c.reprezentativac, c.kategoriziran, c.stipendiran, c.aktivan,
c.hoo_kategorija, c.broj_dresa
FROM pgz_sport.clanovi c
LEFT JOIN pgz_sport.klubovi k ON k.id = c.klub_id
{where_sql}
@@ -2762,6 +2764,26 @@ def export_klubovi_roster_xlsx(klub_id: Optional[int] = None, sport: Optional[st
)
@app.get("/api/v2/savez/{savez_id}/kpi")
def savez_kpi(savez_id: int, godina: int = None):
"""KPI metrike za savez: ukupna potpora, broj sportaša, najviši rang."""
rows = fetch("""
SELECT
(SELECT COALESCE(SUM(pn.iznos), 0)::numeric(12,2) FROM pgz_sport.potpore_nositelji pn
JOIN pgz_sport.klubovi k ON k.id = pn.klub_id
WHERE k.savez_id = %s) AS ukupna_potpora,
(SELECT count(DISTINCT c.id) FROM pgz_sport.clanovi c
JOIN pgz_sport.klubovi k ON k.id = c.klub_id
WHERE k.savez_id = %s AND c.aktivan = true) AS broj_sportasa,
(SELECT count(DISTINCT k.id) FROM pgz_sport.klubovi k WHERE k.savez_id = %s AND k.aktivan = true) AS broj_klubova,
(SELECT COALESCE(MIN(k.razina), 'n/a') FROM pgz_sport.klubovi k
WHERE k.savez_id = %s AND k.razina IS NOT NULL AND k.razina <> '') AS najvisi_rang,
(SELECT count(*) FROM pgz_sport.dokumenti d WHERE d.savez_id = %s) AS broj_dokumenata,
(SELECT count(*) FROM pgz_sport.manifestacije m WHERE m.savez_id = %s) AS broj_manifestacija
""", (savez_id, savez_id, savez_id, savez_id, savez_id, savez_id))
return rows[0] if rows else {}
@app.get("/")
def root(request: Request):
host = request.headers.get("host", "")