diff --git a/cmd/ntech/main.go b/cmd/ntech/main.go index a896961..7fa0d0b 100644 --- a/cmd/ntech/main.go +++ b/cmd/ntech/main.go @@ -357,6 +357,7 @@ func main() { r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis/{id}", h.DetaljiNaloga) r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis/{id}/stampa", h.StampaServisa) r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis/{id}/otpremnica", h.StampaOtpremnice) + r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis/{id}/nalepnica", h.StampaNalepnice) r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis/{id}/predracun", h.StampaPredracuna) r.With(doz("servis.izmeni")).Post("/servis/{id}/status", h.PromeniStatus) r.With(doz("servis.izmeni")).Post("/servis/{id}/garancija", h.AzurirajGaranciju) diff --git a/internal/handler/kes.go b/internal/handler/kes.go index 8d50737..a4afad2 100644 --- a/internal/handler/kes.go +++ b/internal/handler/kes.go @@ -43,7 +43,7 @@ var saSidebar = []string{ // standalone su šabloni bez base layouta var standaloneIme = []string{ - "prijava", "setup", "totp_provera", "prodaja_stampa", "servis_stampa", "servis_otpremnica", "servis_predracun", "servis_status_javni", + "prijava", "setup", "totp_provera", "prodaja_stampa", "servis_stampa", "servis_otpremnica", "servis_predracun", "servis_nalepnica", "servis_status_javni", } // sablonskeFunkcije su pomoćne funkcije dostupne u svim šablonima. diff --git a/internal/handler/servis.go b/internal/handler/servis.go index 2bfc60e..e552ef0 100644 --- a/internal/handler/servis.go +++ b/internal/handler/servis.go @@ -1298,6 +1298,52 @@ func (h *Handler) StampaOtpremnice(w http.ResponseWriter, r *http.Request) { }) } +// PodaciNalepnice su podaci za malu nalepnicu (70×40 mm) koja se lepi na uređaj +type PodaciNalepnice struct { + Nalog model.ServisniNalog + KlijentNaziv string + QRKod string // base64 PNG QR koda sa URL-om naloga +} + +// StampaNalepnice renderuje malu nalepnicu sa brojem naloga, klijentom, uređajem i QR kodom +func (h *Handler) StampaNalepnice(w http.ResponseWriter, r *http.Request) { + id, err := parseID(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "Neispravan ID naloga", http.StatusBadRequest) + return + } + + nalog, err := h.ServisRepo.DohvatiID(r.Context(), id) + if err != nil { + http.Error(w, "Nalog nije pronađen", http.StatusNotFound) + return + } + + klijentNaziv := "" + if nalog.KlijentID != nil { + k, err := h.KlijentiRepo.DohvatiID(r.Context(), *nalog.KlijentID) + if err == nil { + if k.NazivFirme != "" { + klijentNaziv = k.NazivFirme + } else { + klijentNaziv = strings.TrimSpace(k.Ime + " " + k.Prezime) + } + } + } + + nalogURL := qrNalogURL(r, nalog.JavniToken) + var qrKod string + if png, err := qrcode.Encode(nalogURL, qrcode.Medium, 160); err == nil { + qrKod = base64.StdEncoding.EncodeToString(png) + } + + h.renderujStandalone(w, "servis_nalepnica", PodaciNalepnice{ + Nalog: *nalog, + KlijentNaziv: klijentNaziv, + QRKod: qrKod, + }) +} + // PodaciPredracuna su podaci za predračun/ponudu koja se šalje klijentu pre rada type PodaciPredracuna struct { Nalog model.ServisniNalog diff --git a/web/templates/stranice/servis_detalji.html b/web/templates/stranice/servis_detalji.html index 566fee5..718653a 100644 --- a/web/templates/stranice/servis_detalji.html +++ b/web/templates/stranice/servis_detalji.html @@ -60,6 +60,9 @@ Otpremnica {{end}} + + Nalepnica + Izmeni nalog diff --git a/web/templates/stranice/servis_nalepnica.html b/web/templates/stranice/servis_nalepnica.html new file mode 100644 index 0000000..5917426 --- /dev/null +++ b/web/templates/stranice/servis_nalepnica.html @@ -0,0 +1,64 @@ + + + + + + Nalepnica — {{.Nalog.BrojNaloga}} + + + +
+
+
{{.Nalog.BrojNaloga}}
+
+
Klijent
+
{{if .KlijentNaziv}}{{.KlijentNaziv}}{{else}}{{end}}
+
+
+
Uređaj
+
{{if .Nalog.Uredjaj}}{{.Nalog.Uredjaj}}{{else}}{{end}}
+
+
+ {{if .QRKod}} +
QR
+ {{end}} +
+ + +