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 - +
| Artikal | +Kol. | +Cena/kom | +Ukupno | +
|---|---|---|---|
| {{.ArtikalNaziv}} | +{{.Kolicina}} | +{{printf "%.2f" .CenaKomada}} din | +{{printf "%.2f" .Ukupno}} din | +
| Ukupno delovi | +{{printf "%.2f" .UkupnoDelovi}} din | +||