diff --git a/internal/handler/kes.go b/internal/handler/kes.go index db55756..c69d733 100644 --- a/internal/handler/kes.go +++ b/internal/handler/kes.go @@ -182,7 +182,8 @@ func (h *Handler) renderujStandalone(w http.ResponseWriter, ime string, podaci a tmpl = t } else { var err error - if tmpl, err = template.ParseFS(h.TemplatesFS, "web/templates/stranice/"+ime+".html"); err != nil { + // kao u kreirajKes: root mora biti ime+".html" i moraju biti registrovane šablonske funkcije + if tmpl, err = template.New(ime+".html").Funcs(sablonskeFunkcije).ParseFS(h.TemplatesFS, "web/templates/stranice/"+ime+".html"); err != nil { slog.Error("greška pri parsiranju šablona", "ime", ime, "error", err) http.Error(w, "Greška pri učitavanju stranice", http.StatusInternalServerError) return diff --git a/internal/handler/klijent.go b/internal/handler/klijent.go index 06bfd8b..fbcb1e1 100644 --- a/internal/handler/klijent.go +++ b/internal/handler/klijent.go @@ -278,6 +278,24 @@ func (h *Handler) ObrisiKlijenta(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/klijenti?obrisan=1", http.StatusSeeOther) } +// validirajJMBG proverava da li uneti JMBG ima tačno 13 cifara. Prazan broj je +// dozvoljen (polje nije obavezno). Vraća srpsku poruku o grešci ili prazan string. +// Broj lične karte se ne proverava jer mu se format razlikuje između izdanja. +func validirajJMBG(broj string) string { + if broj == "" { + return "" + } + if len(broj) != 13 { + return "JMBG mora imati tačno 13 cifara." + } + for _, c := range broj { + if c < '0' || c > '9' { + return "JMBG sme sadržati samo cifre." + } + } + return "" +} + // parseFormuKlijenta čita polja iz HTTP forme, validira ih i vraća model i eventualnu grešku func parseFormuKlijenta(r *http.Request) (model.Klijent, string) { tip := r.FormValue("tip") @@ -306,11 +324,18 @@ func parseFormuKlijenta(r *http.Request) (model.Klijent, string) { tipIdent = "jmbg" } + jmbg := strings.TrimSpace(r.FormValue("jmbg")) + if tipIdent == "jmbg" { + if greska := validirajJMBG(jmbg); greska != "" { + return model.Klijent{Tip: tip}, greska + } + } + return model.Klijent{ Tip: tip, Ime: ime, Prezime: strings.TrimSpace(r.FormValue("prezime")), - JMBG: strings.TrimSpace(r.FormValue("jmbg")), + JMBG: jmbg, TipIdentifikacije: tipIdent, NazivFirme: nazivFirme, PIB: strings.TrimSpace(r.FormValue("pib")), diff --git a/internal/handler/servis.go b/internal/handler/servis.go index 3f3900b..5da939f 100644 --- a/internal/handler/servis.go +++ b/internal/handler/servis.go @@ -625,11 +625,18 @@ func (h *Handler) mozdaKreirajKlijenta(ctx context.Context, r *http.Request, nal tipIdent = "jmbg" } + jmbg := strings.TrimSpace(r.FormValue("jmbg")) + if tipIdent == "jmbg" { + if greska := validirajJMBG(jmbg); greska != "" { + return greska + } + } + klijent := model.Klijent{ Tip: tip, Ime: ime, Prezime: strings.TrimSpace(r.FormValue("prezime")), - JMBG: strings.TrimSpace(r.FormValue("jmbg")), + JMBG: jmbg, TipIdentifikacije: tipIdent, NazivFirme: nazivFirme, PIB: strings.TrimSpace(r.FormValue("pib")), diff --git a/web/templates/stranice/klijent_forma.html b/web/templates/stranice/klijent_forma.html index 9f60727..915c5ed 100644 --- a/web/templates/stranice/klijent_forma.html +++ b/web/templates/stranice/klijent_forma.html @@ -110,6 +110,20 @@ placeholder="npr. 123456789"> + +