Crisis V7 MEGA: sufinanciranje_sport + panel + CRM auth

DB:
- pgz_sport.sufinanciranje_sport.je_klub flag (RSS programi/totals false)
- pgz_sport.sufinanciranje_sport.klub_id matched

Endpoints:
- /v2/potpore/by-year: samo_klubovi=True default + davatelj filter

Frontend:
- sport2.html PANEL FORCE HIDE CSS (right:-100vw default)
- crm_v2.html: redirect to /login only on actual 401, not on page load
This commit is contained in:
2026-05-05 15:02:47 +02:00
parent 007825acee
commit f07fdad919
18 changed files with 1235 additions and 65 deletions
+19 -7
View File
@@ -4960,19 +4960,31 @@ def proracun_sport(godina: int = None):
# POTPORE — by year filter
# ═══════════════════════════════════════════════════════
@router.get("/potpore/by-year")
def potpore_by_year(godina: int = None, q: str = ""):
"""Sufinanciranje za specifičnu godinu."""
def potpore_by_year(godina: int = None, q: str = "", samo_klubovi: bool = True, davatelj: str = None):
"""Sufinanciranje za specifičnu godinu — samo_klubovi=True izbacuje programe/totals/services."""
import datetime
yr = godina or datetime.date.today().year
like = f"%{q}%" if q else "%"
rows = db_query("""
SELECT korisnik, sport, iznos_eur, vrsta, napomena, izvor, source_url, godina,
(SELECT k.id FROM pgz_sport.klubovi k WHERE LOWER(k.naziv) LIKE LOWER('%%'||LEFT(korisnik,20)||'%%') AND k.aktivan=true LIMIT 1) as klub_id
where = ["godina = %s", "LOWER(COALESCE(korisnik,'')) LIKE LOWER(%s)"]
params = [yr, like]
if samo_klubovi:
where.append("(je_klub IS NULL OR je_klub = true)")
if davatelj == 'rijeka':
where.append("izvor ILIKE '%%rijeka.hr%%'")
elif davatelj == 'pgz':
where.append("izvor ILIKE '%%sport-pgz%%'")
sql = f"""
SELECT id, korisnik, sport, iznos_eur, vrsta, napomena, izvor, source_url, godina, klub_id, je_klub
FROM pgz_sport.sufinanciranje_sport
WHERE godina = %s AND LOWER(COALESCE(korisnik,'')) LIKE LOWER(%s)
WHERE {' AND '.join(where)}
ORDER BY iznos_eur DESC NULLS LAST
LIMIT 500
""", (yr, like))
"""
rows = db_query(sql, params)
total = sum(float(r.get('iznos_eur') or 0) for r in rows)
return {"godina": yr, "count": len(rows), "total": total, "results": rows}