- konstantno-vremensko poređenje CSRF tokena i kartica-PIN-a
- CSRF grupa proširena na /prijava, /prijava/totp, /setup
- router-level dozvola na svim /admin/podesavanja/* i modul("fiskalizacija")
na fiskal.pazar rutama
- KlijentRepo.Pronadji razlikuje sql.ErrNoRows od stvarnih DB grešaka
- izdvojen zajednički vratiStavkeNaStanje umesto 4 duplirana bloka
(ProdajaRepo/ServisRepo Storno/Obrisi)
- datumi u KIR/KPR sada se upisuju/porede kao "2006-01-02", usklađeno sa KPO
- ArtikalRepo.DohvatiVise (batch dohvat) — ukida N+1 upite u SacuvajNabavku
- KategorijaRepo.Obrisi umesto direktnog SQL-a u handleru, sa
ErrKategorijaUUpotrebi porukom
- KolicinMin -> KolicinaMin (tipfeler), Trosak/Usluga.DatumUnosa string -> time.Time
- dedup OznakaPoreskogBroja (KIR/KPR)
- inicijali() template funkcija (rune, ne bajtovi) za avatar inicijale
85 lines
5.0 KiB
HTML
85 lines
5.0 KiB
HTML
{{template "base" .}}
|
|
|
|
{{define "naslov"}}Stanje zaliha — NTech{{end}}
|
|
|
|
{{define "sadrzaj"}}
|
|
<div class="kolona" style="gap:16px;">
|
|
|
|
<!-- zaglavlje -->
|
|
<div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;">
|
|
<div style="display:flex;align-items:center;gap:12px;">
|
|
<a href="/izvestaji" class="nazad-link" hx-boost="true" hx-target="#glavni-sadrzaj" hx-select="#glavni-sadrzaj" hx-swap="outerHTML" style="margin-bottom:0;">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>
|
|
Izveštaji
|
|
</a>
|
|
</div>
|
|
<div style="display:flex;gap:16px;flex-wrap:wrap;">
|
|
<div style="text-align:right;background:rgba(0,0,0,0.35);padding:8px 14px;border-radius:8px;backdrop-filter:blur(4px);">
|
|
<div style="font-size:12px;color:rgba(255,255,255,0.8);">Broj artikala</div>
|
|
<div style="font-size:18px;font-weight:600;color:#fff;">{{.BrojArtikala}}</div>
|
|
</div>
|
|
<div style="text-align:right;background:rgba(0,0,0,0.35);padding:8px 14px;border-radius:8px;backdrop-filter:blur(4px);">
|
|
<div style="font-size:12px;color:rgba(255,255,255,0.8);">Ukupna vrednost zalihe</div>
|
|
<div style="font-size:18px;font-weight:600;color:#fff;">{{dinari .UkupnaVrednost}} din</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- tabela -->
|
|
<div class="kartica animiraj" style="padding:0;overflow:hidden;">
|
|
<div style="padding:14px 20px;border-bottom:0.5px solid var(--ivica);">
|
|
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Stanje zaliha</span>
|
|
</div>
|
|
|
|
{{if not .Zalihe}}
|
|
<div style="padding:40px;text-align:center;color:var(--tekst-slabi);font-size:14px;">
|
|
Nema artikala u magacinu.
|
|
</div>
|
|
{{else}}
|
|
<div style="overflow-x:auto;">
|
|
<table class="tabela">
|
|
<thead>
|
|
<tr>
|
|
<th>Artikal</th>
|
|
<th>Šifra</th>
|
|
<th>Kategorija</th>
|
|
<th style="text-align:right;">Stanje</th>
|
|
<th style="text-align:right;">Min.</th>
|
|
<th style="text-align:right;">Nab. cena</th>
|
|
<th style="text-align:right;">Prod. cena</th>
|
|
{{if index .Moduli "pdv"}}<th style="text-align:right;">Cena sa PDV</th>{{end}}
|
|
<th style="text-align:right;">Vrednost</th>
|
|
{{if index .Moduli "pdv"}}<th style="text-align:right;">Vred. sa PDV</th>{{end}}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{{range .Zalihe}}
|
|
<tr {{if le .Kolicina .KolicinaMin}}style="background:rgba(220,38,38,0.05);"{{end}}>
|
|
<td style="font-weight:500;{{if le .Kolicina .KolicinaMin}}color:#dc2626;{{end}}">{{.Naziv}}</td>
|
|
<td style="font-family:monospace;font-size:12px;color:var(--tekst-slabi);">{{if .Sifra}}{{.Sifra}}{{else}}—{{end}}</td>
|
|
<td style="font-size:12px;color:var(--tekst-slabi);">{{if .Kategorija}}{{.Kategorija}}{{else}}—{{end}}</td>
|
|
<td style="text-align:right;font-weight:600;{{if le .Kolicina .KolicinaMin}}color:#dc2626;{{end}}">{{.Kolicina}}</td>
|
|
<td style="text-align:right;font-size:12px;color:var(--tekst-slabi);">{{.KolicinaMin}}</td>
|
|
<td style="text-align:right;font-family:monospace;font-size:12px;">{{dinari .NabavnaCena}}</td>
|
|
<td style="text-align:right;font-family:monospace;font-size:12px;">{{dinari .ProdajnaCena}}</td>
|
|
{{if index $.Moduli "pdv"}}<td style="text-align:right;font-family:monospace;font-size:12px;">{{dinari .CenaSaPdv}}</td>{{end}}
|
|
<td style="text-align:right;font-family:monospace;font-weight:500;">{{dinari .VrednostZalihe}}</td>
|
|
{{if index $.Moduli "pdv"}}<td style="text-align:right;font-family:monospace;font-weight:500;">{{dinari .VrednostSaPdv}}</td>{{end}}
|
|
</tr>
|
|
{{end}}
|
|
</tbody>
|
|
<tfoot>
|
|
<tr style="border-top:1.5px solid var(--ivica);font-weight:600;">
|
|
<td colspan="{{if index .Moduli "pdv"}}8{{else}}7{{end}}" style="padding:10px 12px;font-size:13px;">Ukupna vrednost zalihe</td>
|
|
<td style="text-align:right;padding:10px 12px;font-family:monospace;">{{dinari .UkupnaVrednost}} din</td>
|
|
{{if index .Moduli "pdv"}}<td style="text-align:right;padding:10px 12px;font-family:monospace;">{{dinari .UkupnaVrednostSaPdv}} din</td>{{end}}
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
</div>
|
|
{{end}}
|