Klijent: validacija JMBG (13 cifara) i kontakt osoba za pravno lice

parseFormuKlijenta i mozdaKreirajKlijenta proveravaju JMBG kad je izabran taj
tip identifikacije. Forma pravnog lica dobija sekciju Kontakt osoba (ime/prezime);
neaktivna sekcija se onemogućava da server ne dobije duplu vrednost. renderujStandalone
parsira šablon sa root imenom i šablonskim funkcijama (kao kreirajKes).
This commit is contained in:
2026-06-21 19:07:38 +02:00
parent fa2b3b2b12
commit 5bef804dfa
4 changed files with 57 additions and 10 deletions
+2 -1
View File
@@ -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
+26 -1
View File
@@ -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")),
+8 -1
View File
@@ -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")),