From b8c918e42749c2682cfe9989739a7f7e4a78f2f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Fri, 19 Jun 2026 19:46:05 +0200 Subject: [PATCH] =?UTF-8?q?Servis:=20dodata=20=C5=A1tampa=20servisnog=20na?= =?UTF-8?q?loga=20-=20Nova=20stranica=20/servis/{id}/stampa=20=E2=80=94=20?= =?UTF-8?q?print-friendly=20A4=20dokument=20-=20Prikazuje:=20zaglavlje=20f?= =?UTF-8?q?irme,=20broj=20naloga,=20status,=20klijent,=20tehni=C4=8Dar,=20?= =?UTF-8?q?ure=C4=91aj=20sa=20opisom=20kvara=20i=20prib=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=BC,=20ugra=C4=91ene=20delove=20sa=20ukupnim=20iznosom,=20ce?= =?UTF-8?q?ne=20usluge=20i=20prostor=20za=20potpise=20-=20Dugme=20=C5=A0ta?= =?UTF-8?q?mpaj=20nalog=20dodata=20na=20stranicu=20detalja=20naloga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/ntech/main.go | 1 + internal/handler/kes.go | 2 +- internal/handler/servis.go | 79 +++++++ web/templates/stranice/servis_detalji.html | 11 +- web/templates/stranice/servis_stampa.html | 246 +++++++++++++++++++++ 5 files changed, 335 insertions(+), 4 deletions(-) create mode 100644 web/templates/stranice/servis_stampa.html diff --git a/cmd/ntech/main.go b/cmd/ntech/main.go index 473b1b3..15dd383 100644 --- a/cmd/ntech/main.go +++ b/cmd/ntech/main.go @@ -337,6 +337,7 @@ func main() { r.With(doz("servis.izmeni")).Post("/servis/izmeni/{id}", h.SacuvajIzmenaNaloga) r.With(doz("servis.obrisi")).Post("/servis/obrisi/{id}", h.ObrisiNalog) 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(doz("servis.izmeni")).Post("/servis/{id}/delovi", h.DodajDeloNalogu) r.With(doz("servis.izmeni")).Post("/servis/{id}/delovi/{deo_id}/obrisi", h.ObrisiDeloNaloga) r.Get("/izvestaji", h.Izvestaji) diff --git a/internal/handler/kes.go b/internal/handler/kes.go index d4ed4ae..fe6cac8 100644 --- a/internal/handler/kes.go +++ b/internal/handler/kes.go @@ -38,7 +38,7 @@ var saSidebar = []string{ // standalone su šabloni bez base layouta var standaloneIme = []string{ - "prijava", "setup", "totp_provera", "prodaja_stampa", + "prijava", "setup", "totp_provera", "prodaja_stampa", "servis_stampa", } // sablonskeFunkcije su pomoćne funkcije dostupne u svim šablonima. diff --git a/internal/handler/servis.go b/internal/handler/servis.go index 6cfe5cb..d3183ab 100644 --- a/internal/handler/servis.go +++ b/internal/handler/servis.go @@ -553,3 +553,82 @@ func parseOpcionuCenu(s string) *float64 { func (h *Handler) renderujFormuNaloga(w http.ResponseWriter, podaci PodaciFormeNaloga) { h.renderujTemplate(w, "servis_forma", podaci) } + +// PodaciStampeServisa su podaci za print-friendly prikaz servisnog naloga +type PodaciStampeServisa struct { + Nalog model.ServisniNalog + ServisniDelovi []model.ServisniDeoSaArtiklom + UkupnoDelovi float64 + KlijentNaziv string + TehnicarNaziv string + NazivFirme string + Podnazlov string + Adresa string + Telefon string + PIB string +} + +// StampaServisa renderuje print-friendly stranicu za servisni nalog +func (h *Handler) StampaServisa(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 + } + + delovi, err := h.ServisniDeloviRepo.DohvatiZaNalog(r.Context(), id) + if err != nil { + http.Error(w, "Greška pri učitavanju delova", http.StatusInternalServerError) + return + } + + podesavanja, err := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB) + if err != nil { + http.Error(w, "Greška pri učitavanju podešavanja", http.StatusInternalServerError) + return + } + + klijentNaziv := "" + if nalog.KlijentID != nil { + klijent, err := h.KlijentiRepo.DohvatiID(r.Context(), *nalog.KlijentID) + if err == nil { + if klijent.NazivFirme != "" { + klijentNaziv = klijent.NazivFirme + } else { + klijentNaziv = strings.TrimSpace(klijent.Ime + " " + klijent.Prezime) + } + } + } + + tehnicarNaziv := "" + if nalog.TehnicarID != nil { + tehnicar, err := h.KorisniciRepo.DohvatiPoID(r.Context(), *nalog.TehnicarID) + if err == nil { + tehnicarNaziv = tehnicar.KorisnickoIme + } + } + + var ukupnoDelovi float64 + for _, d := range delovi { + ukupnoDelovi += d.Ukupno() + } + + h.renderujStandalone(w, "servis_stampa", PodaciStampeServisa{ + Nalog: *nalog, + ServisniDelovi: delovi, + UkupnoDelovi: ukupnoDelovi, + KlijentNaziv: klijentNaziv, + TehnicarNaziv: tehnicarNaziv, + NazivFirme: podesavanja["naziv_firme"], + Podnazlov: podesavanja["podnazlov"], + Adresa: podesavanja["adresa"], + Telefon: podesavanja["telefon"], + PIB: podesavanja["pib"], + }) +} diff --git a/web/templates/stranice/servis_detalji.html b/web/templates/stranice/servis_detalji.html index 263bef5..96294f3 100644 --- a/web/templates/stranice/servis_detalji.html +++ b/web/templates/stranice/servis_detalji.html @@ -45,9 +45,14 @@ {{template "status-badge-detalji" .Nalog.Status}} - - Izmeni nalog - +
+ + Štampaj nalog + + + Izmeni nalog + +
diff --git a/web/templates/stranice/servis_stampa.html b/web/templates/stranice/servis_stampa.html new file mode 100644 index 0000000..71d50f6 --- /dev/null +++ b/web/templates/stranice/servis_stampa.html @@ -0,0 +1,246 @@ + + + + + + Servisni nalog {{.Nalog.BrojNaloga}} + + + +
+ + +
+
+
{{if .NazivFirme}}{{.NazivFirme}}{{else}}— naziv firme —{{end}}
+
+ {{if .Podnazlov}}{{.Podnazlov}}
{{end}} + {{if .Adresa}}{{.Adresa}}
{{end}} + {{if .Telefon}}Tel: {{.Telefon}}
{{end}} + {{if .PIB}}PIB: {{.PIB}}{{end}} +
+
+
+
Servisni nalog
+
{{.Nalog.BrojNaloga}}
+
{{.Nalog.Status}}
+
+
+ + +
+
Osnovni podaci
+
+
+
Datum prijema
+
{{.Nalog.DatumPrijema.Format "02.01.2006. u 15:04"}}
+
+ {{if .Nalog.DatumZavrsetka}} +
+
Datum završetka
+
{{.Nalog.DatumZavrsetka.Format "02.01.2006."}}
+
+ {{end}} + {{if .Nalog.GarancijaDo}} +
+
Garancija do
+
{{.Nalog.GarancijaDo.Format "02.01.2006."}}
+
+ {{end}} +
+
Klijent
+
{{if .KlijentNaziv}}{{.KlijentNaziv}}{{else}}{{end}}
+
+ {{if .TehnicarNaziv}} +
+
Tehničar
+
{{.TehnicarNaziv}}
+
+ {{end}} +
+
+ + +
+
Uređaj
+
+
+
Naziv uređaja
+
{{.Nalog.Uredjaj}}
+
+
+
Serijski broj
+
{{if .Nalog.SerijskiBroj}}{{.Nalog.SerijskiBroj}}{{else}}{{end}}
+
+ {{if .Nalog.PinUredjaja}} +
+
PIN / lozinka
+
{{.Nalog.PinUredjaja}}
+
+ {{end}} +
+
+
Opis kvara
+
{{if .Nalog.OpisKvara}}{{.Nalog.OpisKvara}}{{else}}{{end}}
+
+ {{if or .Nalog.Ostecenja .Nalog.Pribor}} +
+ {{if .Nalog.Ostecenja}} +
+
Oštećenja pri prijemu
+
{{.Nalog.Ostecenja}}
+
+ {{end}} + {{if .Nalog.Pribor}} +
+
Pribor i oprema
+
{{.Nalog.Pribor}}
+
+ {{end}} +
+ {{end}} +
+ + + {{if .ServisniDelovi}} +
+
Ugrađeni delovi
+ + + + + + + + + + + {{range .ServisniDelovi}} + + + + + + + {{end}} + + + + + +
ArtikalKol.Cena/komUkupno
{{.ArtikalNaziv}}{{.Kolicina}}{{printf "%.2f" .CenaKomada}} din{{printf "%.2f" .Ukupno}} din
Ukupno delovi{{printf "%.2f" .UkupnoDelovi}} din
+
+ {{end}} + + +
+
Cene usluge
+
+
+
Procena od
+
{{if .Nalog.CenaOd}}{{.Nalog.CenaOdStr}} din{{else}}—{{end}}
+
+
+
Procena do
+
{{if .Nalog.CenaDo}}{{.Nalog.CenaDoStr}} din{{else}}—{{end}}
+
+
+
Avans
+
{{if .Nalog.Avans}}{{.Nalog.AvansStr}} din{{else}}—{{end}}
+
+
+
Konačna cena
+
{{if .Nalog.CenaKonacna}}{{.Nalog.CenaKonacnaStr}} din{{else}}—{{end}}
+
+
+ {{if .Nalog.PreostaloZaNaplatu}} +
+ Preostalo za naplatu: + {{.Nalog.PreostaloZaNaplatuStr}} din +
+ {{end}} +
+ + {{if .Nalog.Napomena}} +
+
Napomena
+
{{.Nalog.Napomena}}
+
+ {{end}} + + +
+
+
Predao klijent
+
+
+
Primio tehničar
+
+
+ +
+ + + + +