Dinari: formatiranje iznosa sa separatorom hiljada (helper dinari/dinariCeli); nabavka po dobavljaču (auto-veza, filter artikala, izbor dobavljača u formi artikla); UI doterivanja stavki nabavke

This commit is contained in:
2026-06-21 01:00:56 +02:00
parent 91998a7736
commit f4a9c1eefe
21 changed files with 333 additions and 88 deletions
+47
View File
@@ -53,6 +53,15 @@ var sablonskeFunkcije = template.FuncMap{
}
return fmt.Sprintf("%d", int64(math.Round(*v)))
},
// dinari formatira iznos sa separatorom hiljada (tačka) i 2 decimale (zarez):
// 1234567.5 → "1.234.567,50"
"dinari": func(v float64) string {
return formatirajDinare(v, 2)
},
// dinariCeli formatira iznos sa separatorom hiljada, bez decimala: 1234567 → "1.234.567"
"dinariCeli": func(v float64) string {
return formatirajDinare(v, 0)
},
// statusPre vraća true ako je `a` pre `b` u redosledu statusa
"statusPre": func(a, b string, statusi []string) bool {
ia, ib := -1, -1
@@ -172,3 +181,41 @@ func (h *Handler) renderujStandalone(w http.ResponseWriter, ime string, podaci a
http.Error(w, "Greška pri prikazu stranice", http.StatusInternalServerError)
}
}
// formatirajDinare formatira broj sa tačkom kao separatorom hiljada i zarezom
// za decimale (srpski format). decimale = broj decimalnih mesta (0 ili 2).
func formatirajDinare(v float64, decimale int) string {
negativan := v < 0
if negativan {
v = -v
}
var ceoStr, decStr string
if decimale == 2 {
// radi u stotinkama da zaokruživanje pravilno prenese (npr. 1234567.999 → 1.234.568,00)
stotinke := int64(math.Round(v * 100))
ceoStr = fmt.Sprintf("%d", stotinke/100)
decStr = fmt.Sprintf("%02d", stotinke%100)
} else {
ceoStr = fmt.Sprintf("%d", int64(math.Round(v)))
}
// ubaci tačke na svake 3 cifre s desna
var sb []byte
n := len(ceoStr)
for i, c := range ceoStr {
if i > 0 && (n-i)%3 == 0 {
sb = append(sb, '.')
}
sb = append(sb, byte(c))
}
rezultat := string(sb)
if decimale == 2 {
rezultat += "," + decStr
}
if negativan {
rezultat = "-" + rezultat
}
return rezultat
}