Servis: garancija kao trajanje u danima + Tehničar → Serviser

- Garancija se u detaljima prikazuje kao trajanje na srpskom (npr. „1 mesec i 15 dana",
  „2 meseca", „20 dana"); helper garancijaTekst + srpska deklinacija
- Nova kolona garancija_dana (trajanje od završetka); garancija_do ostaje za fazu Završeno
- Modal: textbox „Trajanje garancije (dana)" umesto kalendara; Podrazumevano i Bez garancije
- Nova ruta/handler AzurirajGarancijaDana; forma izmene čuva trajanje (ne briše)
- Podešavanja → Servis: rok garancije prebačen iz meseci u dane (servis_garancija_dana, default 60)
- „Garancija do" uklonjena iz forme Izmeni nalog (kod arhiviran u docs/garancija-buduca-logika.md);
  SacuvajIzmenaNaloga čuva garanciju iz baze da je auto-snimanje ne pregazi
- Prikazni tekst „Tehničar" → „Serviser" svuda (identifikatori Tehnicar/tehnicar_id netaknuti)
This commit is contained in:
2026-06-23 02:35:49 +02:00
parent 7b4f3ea355
commit 6f1d63a3ca
16 changed files with 255 additions and 83 deletions
+66
View File
@@ -0,0 +1,66 @@
# Garancija — buduća logika (arhiva koda)
## Plan (zašto)
Trenutno se „Garancija do" unosi kao konkretan datum. To nema smisla dok je uređaj
tek primljen (status **Primljeno**) — popravka još nije ni počela, pa ni datum
garancije nije poznat.
**Buduća logika:**
- Garancija se izražava kao **broj dana od datuma završetka** (podesivo, kao i sada
preko `servis_garancija_meseci` / mogući novi `servis_garancija_dana`).
- Dok je nalog u radu (Primljeno, U popravci…), klijentu se prikazuje samo
**podrazumevana garancija** kao informacija (npr. „garancija: 12 meseci od završetka").
- **Pravi datum garancije** (`garancija_do`) upisuje se tek kad nalog pređe u
**Završeno**`datum_zavrsetka + garantni period`.
Zbog toga je „Garancija do" uklonjena iz forme **Izmeni nalog** (vidi commit), a
ovde je arhiviran kod da se kasnije ponovo upotrebi / prilagodi.
## Arhivirani kod — „Garancija do" blok iz `servis_forma.html` (Izmeni nalog)
```html
{{if .Izmena}}
<!-- garancija — isti izgled kao popup „Garancija do" u detaljima naloga;
„Bez garancije" isključuje datum, „Podrazumevano" vraća prijem + meseci -->
<div>
<label class="polje-labela">Garancija do</label>
<div style="display:flex;align-items:center;gap:10px;">
<input type="date" name="garancija_do"
value="{{if .Nalog.GarancijaDo}}{{.Nalog.GarancijaDo.Format "2006-01-02"}}{{else}}{{.GarancijaDefault}}{{end}}"
min="{{.Nalog.DatumPrijema.Format "2006-01-02"}}"
{{if .BezGarancije}}disabled{{end}}
style="flex:1;min-width:0;{{if .BezGarancije}}opacity:.5;{{end}}">
<label class="tip-opcija{{if .BezGarancije}} tip-opcija-akt{{end}}" style="white-space:nowrap;">
<input type="checkbox" name="bez_garancije" value="1"{{if .BezGarancije}} checked{{end}} style="margin:0;width:auto;"
onchange="var d=this.closest('div').querySelector('[name=garancija_do]'); d.disabled=this.checked; d.style.opacity=this.checked?'.5':''; this.closest('label').classList.toggle('tip-opcija-akt',this.checked);">
Bez garancije
</label>
</div>
<button type="button" class="btn-sekundarno" style="margin-top:8px;"
onclick="var f=this.closest('form'); var d=f.querySelector('[name=garancija_do]'); d.disabled=false; d.style.opacity=''; d.value='{{.GarancijaDefault}}'; var c=f.querySelector('[name=bez_garancije]'); c.checked=false; c.closest('label').classList.remove('tip-opcija-akt'); d.dispatchEvent(new Event('change',{bubbles:true}));">Podrazumevano</button>
</div>
{{end}}
```
## Backend koji OSTAJE (i dalje koristi modal „Garancija do" u detaljima)
Nije uklonjeno — ovo su delovi koje treba znati pri ponovnoj upotrebi:
- `internal/handler/servis.go`:
- `defaultGarancija(datumPrijema, podesavanja)` — prijem + `servis_garancija_meseci`.
Za buduću logiku zameniti osnovicu `datum_zavrsetka` umesto `datum_prijema`.
- `garancijaPrePrijema(garancija, prijem)` — validacija da garancija nije pre prijema.
- `AzurirajGaranciju` (ruta `POST /servis/{id}/garancija`) — snima `garancija_do`,
prazno / „bez garancije" → NULL.
- U `parseFormuNaloga`: blok koji čita `garancija_do` + `bez_garancije`.
- `BezGarancije` flag (čita NULL stanje iz baze) i `GarancijaDefault` (prijem + meseci)
u `PodaciDetaljiNaloga` / `PodaciFormeNaloga`.
- `internal/db/sqlite/servis.go`: `AzurirajGaranciju` repo metoda; kolona `garancija_do`.
- Podešavanje: `servis_garancija_meseci` (Podešavanja → Servis).
## TODO kad se vraća
1. Dodati prikaz „podrazumevana garancija" (informativno) na nalogu u statusu Primljeno.
2. Pri prelasku u **Završeno** automatski izračunati `garancija_do = datum_zavrsetka + period`.
3. Razmotriti period u danima umesto/pored meseci.