package handler import ( "encoding/json" "fmt" "html/template" "io/fs" "log/slog" "math" "net/http" "strings" ) var bazniSabloni = []string{ "web/templates/teme/podrazumevana/base.html", "web/templates/komponente/sidebar.html", "web/templates/komponente/topbar.html", } // saSidebar su šabloni koji koriste base layout (sidebar + topbar) var saSidebar = []string{ "admin_korisnici", "admin_profil", "admin_login_istorija", "admin_dozvole", "dashboard", "dobavljaci", "dobavljac_forma", "izvestaji", "prometni_list", "stanje_zaliha", "popis", "kategorije", "klijenti", "klijent_forma", "magacin", "magacin_forma", "magacin_kartica", "nabavke", "nabavka_forma", "nabavka_detalji", "podesavanja", "podesavanja_opste", "podesavanja_izgled", "podesavanja_sistem", "podesavanja_servis", "podesavanja_fiskalizacija", "fiskal_pazar", "pdv_stope", "pdv_kir", "pdv_kir_forma", "pdv_kir_dnevni_pazar", "pdv_kpr", "pdv_kpr_forma", "pdv_obracun", "kpo", "kpo_forma", "nivelacije", "podsetnici", "podsetnik_forma", "profil_tema", "prodaja", "prodaja_detalji", "prodaja_forma", "servis", "servis_arhiva", "servis_forma", "servis_detalji", "usluge", "usluge_forma", "troskovi", "troskovi_forma", } // 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", "servis_eskalacioni_list", "fiskal_verifikacija", "popis_stampa", } // sablonskeFunkcije su pomoćne funkcije dostupne u svim šablonima. // dict gradi mapu iz parova ključ/vrednost — koristi se da se jednom partialu // prosledi više vrednosti (npr. {{template "x" (dict "ID" .ID "Lista" $.Lista)}}). var sablonskeFunkcije = template.FuncMap{ // formatBroj formatira float pointer kao ceo broj (zaokružen) — nil vraca "" "formatBroj": func(v *float64) string { if v == nil { return "" } 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"; prihvata float64 i int64 "dinari": func(v any) string { switch val := v.(type) { case int64: return formatirajDinare(float64(val), 2) case int: return formatirajDinare(float64(val), 2) case float64: return formatirajDinare(val, 2) default: return fmt.Sprintf("%v", v) } }, // dinariCeli formatira iznos sa separatorom hiljada, bez decimala: 1234567 → "1.234.567" // Prihvata float64 i int64 (PPPDV polja su int64). "dinariCeli": func(v any) string { switch val := v.(type) { case int64: return formatirajDinare(float64(val), 0) case int: return formatirajDinare(float64(val), 0) case float64: return formatirajDinare(val, 0) default: return fmt.Sprintf("%v", v) } }, // telefon formatira srpski broj telefona radi lakšeg čitanja: "0641234567" → "064 123 4567" "telefon": formatirajTelefon, // garancijaTekst prikazuje trajanje garancije (dani) na srpskom: 45 → „1 mesec i 15 dana" "garancijaTekst": garancijaTekst, // json serijalizuje vrednost u JSON za ugradnju u