From 2cc9c24aa9012f09b7fc89d1225439bc2d377f88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Thu, 2 Jul 2026 10:42:01 +0200 Subject: [PATCH] Servis: garancija po trajanju (dana) umesto fiksnog datuma MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Garancija se sad čuva kao broj dana (GarancijaDana), a konkretan datum (GarancijaDo) se računa tek kad nalog pređe u Završeno/Preuzeto — na osnovu stvarnog datuma završetka, ne datuma prijema. Ranije se datum računao odmah pri prijemu naloga, pa je garancija krenula da teče pre nego što je popravka uopšte gotova. --- internal/handler/servis.go | 54 +++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/internal/handler/servis.go b/internal/handler/servis.go index 831c8a9..841e00b 100644 --- a/internal/handler/servis.go +++ b/internal/handler/servis.go @@ -188,12 +188,13 @@ func (h *Handler) NoviNalog(w http.ResponseWriter, r *http.Request) { ps := h.popuniPodaciStranice(r, podesavanja) ps.Stranica = "servis" ps.NaslovStranice = "Novi nalog" + dana := defaultGarancijaDana(podesavanja) noviNalog := model.ServisniNalog{ BrojNaloga: brojNaloga, Status: model.StatusPrimljeno, DatumPrijema: time.Now(), } - noviNalog.GarancijaDo = defaultGarancija(noviNalog.DatumPrijema, podesavanja) + noviNalog.GarancijaDana = &dana h.renderujFormuNaloga(w, PodaciFormeNaloga{ PodaciStranice: ps, Nalog: noviNalog, @@ -236,9 +237,10 @@ func (h *Handler) SacuvajNalog(w http.ResponseWriter, r *http.Request) { // forma novog naloga ne sadrži polje garancije — primeni podrazumevanu // garanciju iz podešavanja, osim ako je korisnik izričito izabrao „bez garancije" - if nalog.GarancijaDo == nil && r.FormValue("bez_garancije") != "1" { + if nalog.GarancijaDana == nil && r.FormValue("bez_garancije") != "1" { podesavanja, _ := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB) - nalog.GarancijaDo = defaultGarancija(nalog.DatumPrijema, podesavanja) + dana := defaultGarancijaDana(podesavanja) + nalog.GarancijaDana = &dana } // garancija ne sme da bude pre datuma prijema @@ -337,14 +339,12 @@ func (h *Handler) IzmeniNalog(w http.ResponseWriter, r *http.Request) { return } - garancijaDefault := "" - if d := defaultGarancija(nalog.DatumPrijema, podesavanja); d != nil { - garancijaDefault = d.Format("2006-01-02") - } + garancijaDefault := strconv.Itoa(defaultGarancijaDana(podesavanja)) // stanje „bez garancije" čitamo iz baze pre nego što popunimo default za prikaz - bezGarancije := nalog.GarancijaDo == nil - if nalog.GarancijaDo == nil { - nalog.GarancijaDo = defaultGarancija(nalog.DatumPrijema, podesavanja) + bezGarancije := nalog.GarancijaDana == nil || *nalog.GarancijaDana <= 0 + if nalog.GarancijaDana == nil { + dana := defaultGarancijaDana(podesavanja) + nalog.GarancijaDana = &dana } ps := h.popuniPodaciStranice(r, podesavanja) ps.Stranica = "servis" @@ -1230,17 +1230,6 @@ func (h *Handler) mozdaKreirajKlijenta(ctx context.Context, r *http.Request, nal return "" } -// defaultGarancija vraća datum garancije na osnovu datuma prijema i podešavanja; -// vraća nil ako je rok 0 ili podešavanje nedostaje -func defaultGarancija(datumPrijema time.Time, podesavanja map[string]string) *time.Time { - meseci, err := strconv.Atoi(vrednostIliDefault(podesavanja, "servis_garancija_meseci", "2")) - if err != nil || meseci <= 0 { - return nil - } - t := datumPrijema.AddDate(0, meseci, 0) - return &t -} - // defaultPredvidjenDatum računa predviđen rok popravke kao datum prijema + broj // dana iz podešavanja (predvidjen_rok_dana, podrazumevano 15) func defaultPredvidjenDatum(datumPrijema time.Time, podesavanja map[string]string) *time.Time { @@ -2154,6 +2143,17 @@ func (h *Handler) PromeniStatus(w http.ResponseWriter, r *http.Request) { _ = h.ServisniLogRepo.Kreiraj(r.Context(), id, "status:"+noviStatus, nil) } + // pri prelasku u Završeno ili Preuzeto — auto-izračunaj garancija_do ako je postavljeno trajanje + if noviStatus == model.StatusZavrseno || noviStatus == model.StatusPreuzeto { + nalog, _ := h.ServisRepo.DohvatiID(r.Context(), id) + if nalog != nil && nalog.GarancijaDana != nil && *nalog.GarancijaDana > 0 && nalog.GarancijaDo == nil { + if nalog.DatumZavrsetka != nil { + garancijaDo := nalog.DatumZavrsetka.AddDate(0, 0, *nalog.GarancijaDana) + _ = h.ServisRepo.AzurirajGaranciju(r.Context(), id, &garancijaDo) + } + } + } + // pri prelasku u Preuzeto — auto-izračunaj cenu_konacnu ako nije uneta, pa sačuvaj naplatu i fiskalizuj if noviStatus == model.StatusPreuzeto { nalog, _ := h.ServisRepo.DohvatiID(r.Context(), id) @@ -2565,6 +2565,18 @@ func (h *Handler) AzurirajGarancijaDana(w http.ResponseWriter, r *http.Request) http.Error(w, "Greška pri ažuriranju garancije", http.StatusInternalServerError) return } + + // ako je nalog već završen/preuzet, odmah preračunaj i garancija_do + if dana != nil && *dana > 0 { + nalog, _ := h.ServisRepo.DohvatiID(r.Context(), id) + if nalog != nil && (nalog.Status == model.StatusZavrseno || nalog.Status == model.StatusPreuzeto) { + if nalog.DatumZavrsetka != nil { + garancijaDo := nalog.DatumZavrsetka.AddDate(0, 0, *dana) + _ = h.ServisRepo.AzurirajGaranciju(r.Context(), id, &garancijaDo) + } + } + } + http.Redirect(w, r, "/servis/"+strconv.FormatInt(id, 10), http.StatusSeeOther) }