Servis: Garancija i Serviser se ne mogu menjati nakon preuzimanja

Dugme 'Promeni' za oba polja se sad krije kad je nalog u statusu Preuzeto —
garantni list je već izdat na osnovu garancije, a nalog je zatvoren pa nema
razloga za promenu servisera. Dodata i server-side provera u
AzurirajGarancijaDana/AzurirajTehnicar (ne samo skrivanje dugmeta u UI).
This commit is contained in:
2026-07-02 12:24:04 +02:00
parent 5b39dfd222
commit ca1c8c8241
2 changed files with 12 additions and 2 deletions
+10
View File
@@ -2766,6 +2766,11 @@ func (h *Handler) AzurirajGarancijaDana(w http.ResponseWriter, r *http.Request)
http.Error(w, "Neispravan ID naloga", http.StatusBadRequest) http.Error(w, "Neispravan ID naloga", http.StatusBadRequest)
return return
} }
// garancija se ne menja posle preuzimanja — garantni list je već izdat na osnovu nje
if nalog, e := h.ServisRepo.DohvatiID(r.Context(), id); e == nil && nalog.Status == model.StatusPreuzeto {
http.Error(w, "Garancija se ne može menjati nakon preuzimanja uređaja.", http.StatusBadRequest)
return
}
if err := r.ParseForm(); err != nil { if err := r.ParseForm(); err != nil {
http.Error(w, "Greška pri čitanju forme", http.StatusBadRequest) http.Error(w, "Greška pri čitanju forme", http.StatusBadRequest)
return return
@@ -2845,6 +2850,11 @@ func (h *Handler) AzurirajTehnicar(w http.ResponseWriter, r *http.Request) {
http.Error(w, "Neispravan ID naloga", http.StatusBadRequest) http.Error(w, "Neispravan ID naloga", http.StatusBadRequest)
return return
} }
// serviser se ne menja posle preuzimanja — nalog je zatvoren
if nalog, e := h.ServisRepo.DohvatiID(r.Context(), id); e == nil && nalog.Status == model.StatusPreuzeto {
http.Error(w, "Serviser se ne može menjati nakon preuzimanja uređaja.", http.StatusBadRequest)
return
}
if err := r.ParseForm(); err != nil { if err := r.ParseForm(); err != nil {
http.Error(w, "Greška pri čitanju forme", http.StatusBadRequest) http.Error(w, "Greška pri čitanju forme", http.StatusBadRequest)
return return
+2 -2
View File
@@ -330,7 +330,7 @@
<div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Garancija</div> <div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Garancija</div>
<div style="font-size:14px;{{if not .BezGarancije}}color:#16a34a;font-weight:500;{{else}}color:var(--tekst-sporedni);{{end}}"> <div style="font-size:14px;{{if not .BezGarancije}}color:#16a34a;font-weight:500;{{else}}color:var(--tekst-sporedni);{{end}}">
{{garancijaTekst .Nalog.GarancijaDana}} {{garancijaTekst .Nalog.GarancijaDana}}
{{if index .Dozvole "servis.izmeni"}} {{if and (index .Dozvole "servis.izmeni") (ne .Nalog.Status "Preuzeto")}}
<button type="button" class="izmeni-polje" onclick="ntechOtvoriModal(this)">Promeni</button> <button type="button" class="izmeni-polje" onclick="ntechOtvoriModal(this)">Promeni</button>
<dialog class="premesti-modal" onclick="if(event.target===this)this.close()"> <dialog class="premesti-modal" onclick="if(event.target===this)this.close()">
<form method="dialog" class="premesti-zaglavlje"> <form method="dialog" class="premesti-zaglavlje">
@@ -371,7 +371,7 @@
<div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Serviser</div> <div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Serviser</div>
<div style="font-size:14px;font-weight:500;color:var(--tekst-glavni);"> <div style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">
{{if .TehnicarNaziv}}{{.TehnicarNaziv}}{{else}}<span style="color:var(--tekst-sporedni);font-weight:normal;">— nedodeljen —</span>{{end}} {{if .TehnicarNaziv}}{{.TehnicarNaziv}}{{else}}<span style="color:var(--tekst-sporedni);font-weight:normal;">— nedodeljen —</span>{{end}}
{{if index .Dozvole "servis.izmeni"}} {{if and (index .Dozvole "servis.izmeni") (ne .Nalog.Status "Preuzeto")}}
<button type="button" class="izmeni-polje" onclick="ntechOtvoriModal(this)">Promeni</button> <button type="button" class="izmeni-polje" onclick="ntechOtvoriModal(this)">Promeni</button>
<dialog class="premesti-modal" onclick="if(event.target===this)this.close()"> <dialog class="premesti-modal" onclick="if(event.target===this)this.close()">
<form method="dialog" class="premesti-zaglavlje"> <form method="dialog" class="premesti-zaglavlje">