Frontend Financije: 4 dropdown (godina, davatelj, sport, vrsta) + listeners

sport2.html:
- loadFinancije: dynamic dropdown options from /v2/potpore/meta
- refreshFinancije: sport/vrsta/davatelj filter params
- 4 dropdown change listeners
This commit is contained in:
2026-05-05 18:11:45 +02:00
parent a428363d42
commit 80ed621683
+34 -6
View File
@@ -2355,14 +2355,28 @@ function switchPlayerTab(el, tabId){
//=========== FINANCIJE ===========
async function loadFinancije(){
const root = $('#pg-financije');
// Učitaj meta options
let meta = {sportovi: [], vrste: [], davatelji: [], godine: []};
try { meta = await api('/v2/potpore/meta'); } catch(e) { console.warn('meta fail', e); }
root.innerHTML = `
<div class="toolbar">
<div class="toolbar" style="flex-wrap:wrap;gap:8px">
<select id="fi-god">
<option value="2026">2026</option>
<option value="2025">2025</option>
<option value="2024">2024</option>
${meta.godine.map(g => `<option value="${g.godina}">${g.godina} (${g.broj}, ${fmtEur(g.suma||0)})</option>`).join('')}
</select>
<input type="search" id="fi-q" placeholder="🔍 Pretraži korisnika ili sport…">
<select id="fi-davatelj" title="Platitelj">
<option value="all">Svi platitelji</option>
${meta.davatelji.map(d => `<option value="${d}">${d.includes('rijeka') ? '🌆 Grad Rijeka' : '🏛 PGŽ'} (${d})</option>`).join('')}
</select>
<select id="fi-sport" title="Sport">
<option value="">Svi sportovi</option>
${meta.sportovi.map(s => `<option value="${s}">${s}</option>`).join('')}
</select>
<select id="fi-vrsta" title="Vrsta">
<option value="">Sve vrste</option>
${meta.vrste.map(v => `<option value="${v}">${v.replace('_',' ')}</option>`).join('')}
</select>
<input type="search" id="fi-q" placeholder="🔍 Pretraži korisnika…">
<div class="toggle">
<button id="fi-card" class="${_state.viewFinancije==='card'?'active':''}" onclick="setFinancijeView('card')">Kartice</button>
<button id="fi-table-btn" class="${_state.viewFinancije==='table'?'active':''}" onclick="setFinancijeView('table')">Tablica</button>
@@ -2383,15 +2397,29 @@ async function loadFinancije(){
</div>
`;
$('#fi-god').addEventListener('change', refreshFinancije);
if($('#fi-davatelj')) $('#fi-davatelj').addEventListener('change', refreshFinancije);
if($('#fi-sport')) $('#fi-sport').addEventListener('change', refreshFinancije);
if($('#fi-vrsta')) $('#fi-vrsta').addEventListener('change', refreshFinancije);
$('#fi-q').addEventListener('input', debounce(refreshFinancije, 200));
refreshFinancije();
}
async function refreshFinancije(){
const god = $('#fi-god').value;
const dav = $('#fi-davatelj') ? $('#fi-davatelj').value : 'all';
const sport = $('#fi-sport') ? $('#fi-sport').value : '';
const vrsta = $('#fi-vrsta') ? $('#fi-vrsta').value : '';
const q = ($('#fi-q').value || '').toLowerCase().trim();
// Map davatelj 'rijeka.hr' → 'rijeka', 'www2.pgz.hr' → 'pgz'
let davParam = '';
if(dav.includes('rijeka')) davParam = '&davatelj=rijeka';
else if(dav.includes('pgz')) davParam = '&davatelj=pgz';
const params = `?godina=${god}${davParam}${sport?'&sport='+encodeURIComponent(sport):''}${vrsta?'&vrsta='+encodeURIComponent(vrsta):''}`;
const [analytics, byyear] = await Promise.all([
api('/v2/analytics/proracun-sport?godina='+god),
api('/v2/potpore/by-year?godina='+god)
api('/v2/potpore/by-year'+params)
]);
const total = (analytics && analytics.total) || (byyear && byyear.total) || 0;
const poSportu = (analytics && analytics.po_sportu) || [];