Dashboard top primatelji wired to live endpoint (default 2025, year filter)

- Frontend (sport2.html): refreshDashNositelji() koristi /api/dashboard/top-primatelji
  umjesto /v2/potpore/by-year (koji je za 2025 vraćao samo 1 agregirani redak).
  Dropdown proširen na "Sve godine" + 2021..2026. Dodana kolona "Platitelj".
- Backend (pgz_sport_api.py): top-primatelji endpoint sada parsira napomena
  'doc_id=N' i JOIN-a pgz_sport.dokumenti za pdf_url; godina<=0 → sve godine;
  dodane kolone vrsta + pdf_url + doc_title.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Damir Radulić
2026-05-05 09:11:47 +02:00
parent 49ac2c0dc8
commit 31e0374465
3 changed files with 167 additions and 21 deletions
+35 -7
View File
@@ -307,8 +307,28 @@ def api_kpi():
@app.get("/api/dashboard/top-primatelji")
def dashboard_top_primatelji(godina: int = 2025, limit: int = 50):
"""Top primatelji javnih potreba — svi klubovi sa primljenim potporama u godini."""
rows = fetch("""
"""Top primatelji javnih potreba — svi klubovi sa primljenim potporama.
godina<=0 znači sve godine. Napomena 'doc_id=N' joinira pgz_sport.dokumenti za PDF link."""
if godina and godina > 0:
where_god = "WHERE pn.godina = %s"
params = (godina, limit)
else:
where_god = "WHERE TRUE"
params = (limit,)
rows = fetch(f"""
WITH pn_e AS (
SELECT
pn.id,
pn.naziv_kluba,
pn.klub_id,
pn.iznos,
pn.napomena,
pn.godina,
NULLIF((regexp_match(COALESCE(pn.napomena, ''), 'doc_id=(\\d+)'))[1], '')::int AS doc_id
FROM pgz_sport.potpore_nositelji pn
{where_god}
)
SELECT
pn.naziv_kluba,
pn.klub_id,
@@ -324,15 +344,23 @@ def dashboard_top_primatelji(godina: int = 2025, limit: int = 50):
WHEN pn.napomena ILIKE '%%riječki%%' OR pn.napomena ILIKE '%%RSS%%' THEN 'Riječki sportski savez'
WHEN pn.napomena ILIKE '%%grad rijeka%%' THEN 'Grad Rijeka'
ELSE 'Riječki sportski savez'
END AS davatelj_naziv
FROM pgz_sport.potpore_nositelji pn
END AS davatelj_naziv,
CASE
WHEN pn.napomena ILIKE '%%JPS%%' OR pn.napomena ILIKE '%%javn%%' THEN 'Javne potrebe u sportu'
WHEN pn.napomena ILIKE '%%manifestacij%%' THEN 'Manifestacija'
WHEN pn.napomena ILIKE '%%objekt%%' THEN 'Sportski objekti'
ELSE 'Javne potrebe'
END AS vrsta,
COALESCE(d.pdf_url, d.url, d.izvor_url) AS pdf_url,
d.title AS doc_title
FROM pn_e pn
LEFT JOIN pgz_sport.klubovi k ON k.id = pn.klub_id
LEFT JOIN pgz_sport.savezi s ON s.id = k.savez_id
WHERE pn.godina = %s
LEFT JOIN pgz_sport.dokumenti d ON d.id = pn.doc_id
ORDER BY pn.iznos DESC NULLS LAST
LIMIT %s
""", (godina, limit))
""", params)
return {
"godina": godina,
"count": len(rows),