diff --git a/internal/db/sqlite/servis.go b/internal/db/sqlite/servis.go index 6254fee..7c265b8 100644 --- a/internal/db/sqlite/servis.go +++ b/internal/db/sqlite/servis.go @@ -131,7 +131,7 @@ func (r *ServisRepo) Kreiraj(ctx context.Context, n *model.ServisniNalog) (int64 ostecenja, pin_uredjaja, pribor, datum_prijema, javni_token) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, nullInt64(n.KlijentID), nullInt64(n.TehnicarID), n.BrojNaloga, n.Uredjaj, - nullString(n.SerijskiBroj), n.OpisKvara, nullString(n.TrazeneNadogradnje), n.Status, + nullString(n.SerijskiBroj), n.OpisKvara, n.TrazeneNadogradnje, n.Status, nullFloat64(n.CenaOd), nullFloat64(n.CenaDo), nullFloat64(n.CenaKonacna), nullFloat64(n.Avans), nullString(n.Napomena), nullTime(n.GarancijaDo), nullTime(n.DatumZavrsetka), @@ -176,7 +176,7 @@ func (r *ServisRepo) Izmeni(ctx context.Context, n *model.ServisniNalog) error { avans = ?, napomena = ?, garancija_do = ?, datum_zavrsetka = ?, ostecenja = ?, pin_uredjaja = ?, pribor = ? WHERE id = ?`, - nullInt64(n.KlijentID), nullInt64(n.TehnicarID), n.Uredjaj, nullString(n.SerijskiBroj), n.OpisKvara, nullString(n.TrazeneNadogradnje), + nullInt64(n.KlijentID), nullInt64(n.TehnicarID), n.Uredjaj, nullString(n.SerijskiBroj), n.OpisKvara, n.TrazeneNadogradnje, n.Status, nullFloat64(n.CenaOd), nullFloat64(n.CenaDo), nullFloat64(n.CenaKonacna), nullFloat64(n.Avans), nullString(n.Napomena), nullTime(n.GarancijaDo), nullTime(n.DatumZavrsetka), nullString(n.Ostecenja), nullString(n.PinUredjaja), nullString(n.Pribor), diff --git a/internal/handler/servis.go b/internal/handler/servis.go index f1bc06b..a21acbb 100644 --- a/internal/handler/servis.go +++ b/internal/handler/servis.go @@ -304,8 +304,16 @@ func (h *Handler) SacuvajIzmenaNaloga(w http.ResponseWriter, r *http.Request) { return } + // auto-snimanje (forma se snima u realnom vremenu): umesto redirecta vraćamo 204, + // a greške kao kratak tekst sa statusom — JS na stranici to prikaže korisniku + autosave := r.Header.Get("X-Autosave") == "1" + nalog, greska := parseFormuNaloga(r) if greska != "" { + if autosave { + http.Error(w, greska, http.StatusBadRequest) + return + } podesavanja, _ := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB) klijenti, _ := h.KlijentiRepo.Lista(r.Context(), "") tehnicari, _ := h.KorisniciRepo.Lista(r.Context()) @@ -342,6 +350,10 @@ func (h *Handler) SacuvajIzmenaNaloga(w http.ResponseWriter, r *http.Request) { // ako nije izabran postojeći klijent, eventualno kreiraj novog iz polja forme if greska := h.mozdaKreirajKlijenta(r.Context(), r, &nalog); greska != "" { + if autosave { + http.Error(w, greska, http.StatusBadRequest) + return + } podesavanja, _ := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB) klijenti, _ := h.KlijentiRepo.Lista(r.Context(), "") tehnicari, _ := h.KorisniciRepo.Lista(r.Context()) @@ -362,6 +374,10 @@ func (h *Handler) SacuvajIzmenaNaloga(w http.ResponseWriter, r *http.Request) { if err := h.ServisRepo.Izmeni(r.Context(), &nalog); err != nil { slog.Error("greška pri čuvanju izmene naloga", "error", err) + if autosave { + http.Error(w, "Došlo je do greške pri čuvanju.", http.StatusInternalServerError) + return + } podesavanja, _ := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB) klijenti, _ := h.KlijentiRepo.Lista(r.Context(), "") tehnicari, _ := h.KorisniciRepo.Lista(r.Context()) @@ -380,6 +396,10 @@ func (h *Handler) SacuvajIzmenaNaloga(w http.ResponseWriter, r *http.Request) { return } + if autosave { + w.WriteHeader(http.StatusNoContent) + return + } http.Redirect(w, r, "/servis/"+strconv.FormatInt(id, 10)+"?sacuvano=1", http.StatusSeeOther) } diff --git a/web/templates/stranice/kategorije.html b/web/templates/stranice/kategorije.html index 437d2c6..3da31dc 100644 --- a/web/templates/stranice/kategorije.html +++ b/web/templates/stranice/kategorije.html @@ -27,7 +27,7 @@ {{end}} - + Nazad na magacin diff --git a/web/templates/stranice/magacin.html b/web/templates/stranice/magacin.html index 8312ab0..70e2bd4 100644 --- a/web/templates/stranice/magacin.html +++ b/web/templates/stranice/magacin.html @@ -30,7 +30,7 @@ + {{if eq .Tip "usluga"}}Nova usluga{{else if eq .Tip "trosak"}}Novi trošak{{else}}Novi artikal{{end}} {{end}} {{if and (eq .Tip "proizvod") (index .Dozvole "kategorija.pregled")}} - Kategorije + Kategorije {{end}} diff --git a/web/templates/stranice/servis_detalji.html b/web/templates/stranice/servis_detalji.html index 4374222..9a91d96 100644 --- a/web/templates/stranice/servis_detalji.html +++ b/web/templates/stranice/servis_detalji.html @@ -30,7 +30,7 @@ {{end}} - + Nazad na servis @@ -44,22 +44,6 @@
{{template "status-badge-detalji" .Nalog.Status}} -
- - - {{if .ZakljucanStatus}} - 🔒 Status zaključan — obrišite delove koji nedostaju - {{else}} - - {{end}} -
@@ -76,7 +60,7 @@ Otpremnica {{end}} - + Izmeni nalog
@@ -92,12 +76,6 @@
{{.Nalog.PredvidjenDatum.Format "02.01.2006."}}
{{end}} - {{if .Nalog.DatumZavrsetka}} -
-
Datum završetka
-
{{.Nalog.DatumZavrsetka.Format "02.01.2006."}}
-
- {{end}}
Garancija do
diff --git a/web/templates/stranice/servis_forma.html b/web/templates/stranice/servis_forma.html index 143687b..3577cbc 100644 --- a/web/templates/stranice/servis_forma.html +++ b/web/templates/stranice/servis_forma.html @@ -5,14 +5,18 @@ {{define "sadrzaj"}}
- + {{if not .Izmena}} + + {{end}} - + {{if .Izmena}}Nazad na nalog{{else}}Nazad na servis{{end}} @@ -21,7 +25,7 @@
{{.Greska}}
{{end}} -
+ @@ -304,18 +308,75 @@ style="width:100%;resize:vertical;">{{.Nalog.Napomena}}
- -
- Odustani - + {{if .Izmena}} + +
+
+ {{else}} + +
+ Odustani + +
+ {{end}}
+ +