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:
+35
-7
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user