feat(nabavka): brzi unos dobavljača i artikla iz forme nabavke

Dugmad otvaraju modale koji preko AJAX-a (X-Requested-With: fetch) čuvaju
novi zapis i vraćaju JSON; novi dobavljač se odmah ubacuje u listu i bira.
Modal artikla proširen na sva polja kao puna stranica. Centriranje modala
prebačeno u .modal-overlay klasu (x-show je brisao inline display:flex).
This commit is contained in:
2026-06-14 08:16:51 +02:00
parent 7fc2e9bcc3
commit dfad0ff1f4
3 changed files with 215 additions and 5 deletions
+18 -1
View File
@@ -1,6 +1,7 @@
package handler
import (
"fmt"
"net/http"
"strings"
@@ -85,7 +86,15 @@ func (h *Handler) SacuvajDobavljaca(w http.ResponseWriter, r *http.Request) {
}
dobavljac, greska := parseFormuDobavljaca(r)
jeAjax := r.Header.Get("X-Requested-With") == "fetch"
if greska != "" {
// fetch zahtev (iz modala u nabavci) dobija JSON grešku
if jeAjax {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(w, `{"greska":%q}`, greska)
return
}
podesavanja, _ := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB)
ps := h.popuniPodaciStranice(r, podesavanja)
ps.Stranica = "dobavljaci"
@@ -99,11 +108,19 @@ func (h *Handler) SacuvajDobavljaca(w http.ResponseWriter, r *http.Request) {
return
}
if _, err := h.DobavljaciRepo.Kreiraj(r.Context(), &dobavljac); err != nil {
id, err := h.DobavljaciRepo.Kreiraj(r.Context(), &dobavljac)
if err != nil {
http.Error(w, "Greška pri čuvanju dobavljača", http.StatusInternalServerError)
return
}
// fetch zahtev (iz modala) dobija JSON sa ID-em i nazivom novog dobavljača
if jeAjax {
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"id":%d,"naziv":%q}`, id, dobavljac.Naziv)
return
}
http.Redirect(w, r, "/dobavljaci?sacuvano=1", http.StatusSeeOther)
}