Popis: štampa u novom tabu — standalone A4 stranica sa zaglavljem i sumarima

This commit is contained in:
2026-06-30 16:47:50 +02:00
parent 0a1995222b
commit 4daac1eed6
5 changed files with 314 additions and 2 deletions
+146
View File
@@ -452,3 +452,149 @@ func (h *Handler) SacuvajPopis(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/izvestaji/popis?sacuvano=1", http.StatusSeeOther)
}
// PodaciPopisStampa su podaci za štampu popisa (standalone template)
type PodaciPopisStampa struct {
NazivFirme string
KorisnikIme string
TipPopisaNaziv string
DatumPopisa string
Redovi []PopisStampaRed
UkupnoKnjiznoKol int
UkupnoKnjiznoVredStr string
UkupnoStvarnoKol int
UkupnoRazlikaKolStr string
UkupnoRazlikaVredStr string
ManjakKol int
ManjakVredStr string
VisakKol int
VisakVredStr string
}
// PopisStampaRed je jedan red u štampi popisa
type PopisStampaRed struct {
Naziv string
Sifra string
KategorijaNaziv string
JedinicaMere string
NabavnaCenaStr string
Kolicina int
KnjiznaVrednostStr string
StvarnaKolicina int
Razlika int
RazlikaStr string
RazlikaVrednost float64
RazlikaVrednostStr string
}
// PopisStampa prikazuje standalone stranicu za štampu popisa
func (h *Handler) PopisStampa(w http.ResponseWriter, r *http.Request) {
if _, ok := h.zahtevajDozvolu(w, r, "artikal.izmeni"); !ok {
return
}
artikli, err := h.Artikli.Lista(r.Context(), appdbPkg.ArtikalFilter{Tip: model.TipProizvod})
if err != nil {
http.Error(w, "Greška pri učitavanju artikala", http.StatusInternalServerError)
return
}
podesavanja, _ := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB)
tip := "godišnji"
var redovi []PopisStampaRed
var ukKnjKol, ukStvKol, ukRazKol, manjakKol, visakKol int
var ukKnjVred, ukRazVred, manjakVred, visakVred float64
for _, a := range artikli {
knjKol := a.Kolicina
cena := a.NabavnaCena
knjVred := cena * float64(knjKol)
stvKol := knjKol
razlika := stvKol - knjKol
razlikaVred := cena * float64(razlika)
ukKnjKol += knjKol
ukKnjVred += knjVred
ukStvKol += stvKol
ukRazKol += razlika
ukRazVred += razlikaVred
if razlika < 0 {
manjakKol += -razlika
manjakVred += -razlikaVred
} else if razlika > 0 {
visakKol += razlika
visakVred += razlikaVred
}
jm := a.JedinicaMere
if jm == "" {
jm = "kom"
}
razlikaStr := "—"
if razlika > 0 {
razlikaStr = fmt.Sprintf("+%d", razlika)
} else if razlika < 0 {
razlikaStr = fmt.Sprintf("%d", razlika)
}
razlikaVredStr := "—"
if razlikaVred != 0 {
predznak := ""
if razlikaVred > 0 {
predznak = "+"
}
razlikaVredStr = predznak + formatirajDinare(razlikaVred, 2)
}
redovi = append(redovi, PopisStampaRed{
Naziv: a.Naziv,
Sifra: a.Sifra,
KategorijaNaziv: a.KategorijaNaziv,
JedinicaMere: jm,
NabavnaCenaStr: formatirajDinare(cena, 0),
Kolicina: knjKol,
KnjiznaVrednostStr: formatirajDinare(knjVred, 2),
StvarnaKolicina: stvKol,
Razlika: razlika,
RazlikaStr: razlikaStr,
RazlikaVrednost: razlikaVred,
RazlikaVrednostStr: razlikaVredStr,
})
}
ukRazKolStr := "—"
if ukRazKol > 0 {
ukRazKolStr = fmt.Sprintf("+%d", ukRazKol)
} else if ukRazKol < 0 {
ukRazKolStr = fmt.Sprintf("%d", ukRazKol)
}
ukRazVredStr := "—"
if ukRazVred != 0 {
predznak := ""
if ukRazVred > 0 {
predznak = "+"
}
ukRazVredStr = predznak + formatirajDinare(ukRazVred, 2)
}
h.renderujStandalone(w, "popis_stampa", PodaciPopisStampa{
NazivFirme: podesavanja["naziv_firme"],
KorisnikIme: middleware.KorisnikIzKonteksta(r.Context()).KorisnickoIme,
TipPopisaNaziv: tipPopisaNaziv(tip),
DatumPopisa: time.Now().Format("02.01.2006."),
Redovi: redovi,
UkupnoKnjiznoKol: ukKnjKol,
UkupnoKnjiznoVredStr: formatirajDinare(ukKnjVred, 2),
UkupnoStvarnoKol: ukStvKol,
UkupnoRazlikaKolStr: ukRazKolStr,
UkupnoRazlikaVredStr: ukRazVredStr,
ManjakKol: manjakKol,
ManjakVredStr: formatirajDinare(manjakVred, 2),
VisakKol: visakKol,
VisakVredStr: formatirajDinare(visakVred, 2),
})
}
+1 -1
View File
@@ -43,7 +43,7 @@ var saSidebar = []string{
// standalone su šabloni bez base layouta
var standaloneIme = []string{
"prijava", "setup", "totp_provera", "prodaja_stampa", "servis_radni_nalog", "servis_otpremnica", "servis_revers", "servis_predracun", "servis_nalepnica", "servis_status_javni", "servis_garantni_list", "fiskal_verifikacija",
"prijava", "setup", "totp_provera", "prodaja_stampa", "servis_radni_nalog", "servis_otpremnica", "servis_revers", "servis_predracun", "servis_nalepnica", "servis_status_javni", "servis_garantni_list", "fiskal_verifikacija", "popis_stampa",
}
// sablonskeFunkcije su pomoćne funkcije dostupne u svim šablonima.