PDF link target=_blank + nginx timeouts + priority filteri (samo s podacima)

nginx (sport.rinet.one):
- proxy_read_timeout 60s → 300s
- proxy_send_timeout 300s
- proxy_buffering off (PDF stream)
- client_max_body_size 50M → 100M

Endpoints:
- /api/v2/klubovi/financirani: +with_data filter (samo s potporama/godišnjakom/HNS)
- /api/v2/sportasi/filtered: +samo_priority +samo_s_hns

Frontend:
- PDF link target=_blank rel=noopener
- window._klub_only_priority = true (default)
- window._sportas_only_priority = true (default)

DB View:
- pgz_sport.v_nogomet_priority (prima_potpore, u_godisnjaku, ima_hns_roster)
This commit is contained in:
2026-05-05 13:51:07 +02:00
parent c6a5ec62aa
commit f7b5114f58
289 changed files with 37204 additions and 363 deletions
+104
View File
@@ -103,6 +103,21 @@ table tr.sel td { background:rgba(26,115,232,.15); }
.chip.high { background:#3a2e1a; color:#fbbf24; }
.chip.normal { background:#1e293b; color:#94a3b8; }
.chip.low { background:#1f1f1f; color:#71717a; }
.chip.nepodmireno { background:#3a1e1e; color:#f87171; }
.chip.djelomicno { background:#3a2e1a; color:#fbbf24; }
.chip.podmireno { background:#1a3a2a; color:#4ade80; }
.chip.storno { background:#1f1f1f; color:#71717a; }
.chip.draft { background:#1e293b; color:#94a3b8; }
.chip.submitted { background:#1e3a5f; color:#60a5fa; }
.chip.approved { background:#1a3a2a; color:#4ade80; }
.chip.rejected { background:#3a1e1e; color:#f87171; }
.chip.spreman { background:#1a3a2a; color:#4ade80; }
.chip.nije-spreman{ background:#3a1e1e; color:#f87171; }
.tpl-row { padding:9px 12px; border-bottom:1px solid var(--rim); cursor:pointer; }
.tpl-row:hover { background:var(--bg3); }
.tpl-row.sel { background:rgba(26,115,232,.18); border-left:3px solid var(--pgz-blue); padding-left:9px; }
.tpl-row .tpl-n { font-weight:600; font-size:12px; color:var(--t1); }
.tpl-row .tpl-c { font-size:10px; color:var(--t3); margin-top:2px; text-transform:uppercase; letter-spacing:.4px; }
/* Kanban */
.kanban { display:grid; grid-template-columns:repeat(6,1fr); gap:10px; min-height:60vh; }
@@ -190,6 +205,9 @@ footer { height:36px; background:var(--bg2); border-top:1px solid var(--rim);
<div class="tab" data-tab="opportunities">Opportunities <span class="count" id="cnt-opps">·</span></div>
<div class="tab" data-tab="activities">Activities <span class="count" id="cnt-activities">·</span></div>
<div class="tab" data-tab="cases">Cases <span class="count" id="cnt-cases">·</span></div>
<div class="tab" data-tab="clanarine">Članarine <span class="count" id="cnt-clanarine">·</span></div>
<div class="tab" data-tab="lijecnicki">Liječnički <span class="count" id="cnt-lijecnicki">·</span></div>
<div class="tab" data-tab="obrasci">Obrasci <span class="count" id="cnt-obrasci">·</span></div>
</div>
<div class="main">
@@ -364,6 +382,89 @@ footer { height:36px; background:var(--bg2); border-top:1px solid var(--rim);
</div></div>
</div>
<!-- ────── ČLANARINE ────── -->
<div class="tab-c" id="tc-clanarine">
<div class="toolbar">
<input id="cln-klub" type="number" placeholder="Klub ID" style="max-width:120px">
<input id="cln-clan" type="number" placeholder="Član ID" style="max-width:120px">
<input id="cln-godina" type="number" placeholder="Godina" style="max-width:120px">
<select id="cln-status">
<option value="">— Svi statusi —</option>
<option value="nepodmireno">nepodmireno</option>
<option value="djelomicno">djelomično</option>
<option value="podmireno">podmireno</option>
<option value="storno">storno</option>
</select>
<button class="btn" onclick="loadClanarine()">Filtriraj</button>
<span class="grow"></span>
<button class="btn primary" onclick="openClanarinaModal()">+ Nova članarina</button>
</div>
<div class="card"><div class="card-b" style="padding:0">
<table id="t-clanarine"><thead><tr>
<th>Član</th><th>Klub</th><th>Godina</th><th>Razdoblje</th>
<th>Propisan</th><th>Plaćen</th><th>Datum uplate</th><th>Status</th><th></th>
</tr></thead><tbody></tbody></table>
</div></div>
</div>
<!-- ────── LIJEČNIČKI ────── -->
<div class="tab-c" id="tc-lijecnicki">
<div class="toolbar">
<input id="lij-klub" type="number" placeholder="Klub ID" style="max-width:120px">
<input id="lij-clan" type="number" placeholder="Član ID" style="max-width:120px">
<select id="lij-expiring">
<option value="">— Svi —</option>
<option value="true">Ističu (≤30d) ili istekli</option>
</select>
<button class="btn" onclick="loadLijecnicki()">Filtriraj</button>
<span class="grow"></span>
<button class="btn primary" onclick="openLijecnickiModal()">+ Novi pregled</button>
</div>
<div class="card"><div class="card-b" style="padding:0">
<table id="t-lijecnicki"><thead><tr>
<th>Član</th><th>Klub</th><th>Datum</th><th>Vrsta</th>
<th>Vrijedi do</th><th>Liječnik</th><th>Spreman</th><th>Plaćeno</th><th></th>
</tr></thead><tbody></tbody></table>
</div></div>
</div>
<!-- ────── OBRASCI ────── -->
<div class="tab-c" id="tc-obrasci">
<div style="display:grid; grid-template-columns:300px 1fr; gap:12px; align-items:start;">
<!-- Templates list (left) -->
<div class="card">
<div class="card-h"><div class="card-t">Predlošci</div>
<button class="btn sm" onclick="loadObrasciTemplates()"></button>
</div>
<div class="card-b" style="padding:0; max-height:70vh; overflow:auto;" id="obr-tpl-list">
<div class="empty">Učitavanje…</div>
</div>
</div>
<!-- Submissions / detail (right) -->
<div>
<div class="toolbar">
<strong id="obr-right-title">Podnešeni obrasci</strong>
<span class="grow"></span>
<select id="obr-status">
<option value="">— Svi statusi —</option>
<option value="draft">draft</option>
<option value="submitted">submitted</option>
<option value="approved">approved</option>
<option value="rejected">rejected</option>
</select>
<input id="obr-klub" type="number" placeholder="Klub ID" style="max-width:120px">
<button class="btn" onclick="loadObrasciSubmissions()">Filtriraj</button>
</div>
<div class="card"><div class="card-b" style="padding:0" id="obr-right-body">
<table id="t-obr-sub"><thead><tr>
<th>ID</th><th>Predložak</th><th>Klub</th><th>Član</th>
<th>Status</th><th>Submitted</th><th>Approved</th><th></th>
</tr></thead><tbody></tbody></table>
</div></div>
</div>
</div>
</div>
</div><!-- /main -->
<footer>
@@ -439,6 +540,9 @@ function switchTab(name) {
if (name==='opportunities') loadOpps();
if (name==='activities') loadActivities();
if (name==='cases') loadCases();
if (name==='clanarine') loadClanarine();
if (name==='lijecnicki') loadLijecnicki();
if (name==='obrasci') { loadObrasciTemplates(); loadObrasciSubmissions(); }
}
// ────── /me ──────