Servis: predviđen datum popravke (prijem + rok iz podešavanja, readonly)

This commit is contained in:
2026-06-22 23:55:20 +02:00
parent 4c38897408
commit cd836d09c4
5 changed files with 49 additions and 0 deletions
+15
View File
@@ -51,6 +51,7 @@ type PodaciPodesavanja struct {
KalkulacijaMarza string
ServisGarancijaMeseci string
PredracunRokDana string
PredvidjenRokDana string
LoginPozadina string
LoginPozadinaOpacity string
LoginPozadinaBlurPozadine string
@@ -393,6 +394,19 @@ func (h *Handler) SacuvajPodesavanja(w http.ResponseWriter, r *http.Request) {
}
}
if v := strings.TrimSpace(r.FormValue("predvidjen_rok_dana")); v != "" {
n, err := strconv.Atoi(v)
if err != nil || n < 1 || n > 365 {
middleware.SetFlash(w, r, h.DB, "greska", "Predviđen rok popravke mora biti broj između 1 i 365 dana.")
http.Redirect(w, r, sledeci, http.StatusSeeOther)
return
}
if err := ntechsqlite.SacuvajPodesavanje(r.Context(), h.DB, "predvidjen_rok_dana", strconv.Itoa(n)); err != nil {
http.Error(w, "Greška pri čuvanju podešavanja", http.StatusInternalServerError)
return
}
}
http.Redirect(w, r, sledeci+"?sacuvano=1", http.StatusSeeOther)
}
@@ -767,6 +781,7 @@ func (h *Handler) napuniPodaciPodesavanja(r *http.Request, naslov string) (Podac
KalkulacijaMarza: vrednostIliDefault(podesavanja, "kalkulacija_marza", "20"),
ServisGarancijaMeseci: vrednostIliDefault(podesavanja, "servis_garancija_meseci", "2"),
PredracunRokDana: vrednostIliDefault(podesavanja, "predracun_rok_dana", "7"),
PredvidjenRokDana: vrednostIliDefault(podesavanja, "predvidjen_rok_dana", "15"),
}, nil
}
+15
View File
@@ -451,6 +451,10 @@ func (h *Handler) DetaljiNaloga(w http.ResponseWriter, r *http.Request) {
return
}
// predviđen datum popravke je izvedena vrednost (samo prikaz):
// datum prijema + broj dana iz podešavanja (predvidjen_rok_dana)
nalog.PredvidjenDatum = defaultPredvidjenDatum(nalog.DatumPrijema, podesavanja)
klijentNaziv := ""
if nalog.KlijentID != nil {
klijent, err := h.KlijentiRepo.DohvatiID(r.Context(), *nalog.KlijentID)
@@ -908,6 +912,17 @@ func defaultGarancija(datumPrijema time.Time, podesavanja map[string]string) *ti
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 {
dana, err := strconv.Atoi(vrednostIliDefault(podesavanja, "predvidjen_rok_dana", "15"))
if err != nil || dana <= 0 {
return nil
}
t := datumPrijema.AddDate(0, 0, dana)
return &t
}
// parseOpcionuCenu pretvara string u *float64 — prazno polje ili neispravna vrednost vraća nil
func parseOpcionuCenu(s string) *float64 {
s = strings.TrimSpace(s)
+1
View File
@@ -41,6 +41,7 @@ type ServisniNalog struct {
Napomena string
GarancijaDo *time.Time
DatumPrijema time.Time
PredvidjenDatum *time.Time
DatumZavrsetka *time.Time
Ostecenja string
PinUredjaja string
@@ -45,6 +45,18 @@
</div>
</div>
<div style="max-width:280px;">
<label for="predvidjen_rok_dana" class="polje-labela">
Predviđen rok popravke (dana)
</label>
<input type="number" id="predvidjen_rok_dana" name="predvidjen_rok_dana"
min="1" max="365" value="{{.PredvidjenRokDana}}"
style="width:100%;">
<div class="pomocni-tekst" style="margin-top:6px;">
Automatski se upisuje pri prijemu (datum prijema + ovaj broj dana). Možeš ga promeniti na svakom nalogu.
</div>
</div>
</div>
<div style="display:flex;justify-content:flex-end;margin-top:20px;">
@@ -86,6 +86,12 @@
<div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Datum prijema</div>
<div style="font-size:14px;color:var(--tekst-glavni);">{{.Nalog.DatumPrijema.Format "02.01.2006. u 15:04"}}</div>
</div>
{{if .Nalog.PredvidjenDatum}}
<div>
<div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Predviđen datum popravke</div>
<div style="font-size:14px;color:var(--tekst-glavni);">{{.Nalog.PredvidjenDatum.Format "02.01.2006."}}</div>
</div>
{{end}}
{{if .Nalog.DatumZavrsetka}}
<div>
<div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Datum završetka</div>