diff --git a/cmd/ntech/main.go b/cmd/ntech/main.go index 62b9121..7a3e0ae 100644 --- a/cmd/ntech/main.go +++ b/cmd/ntech/main.go @@ -336,6 +336,7 @@ func main() { r.With(doz("klijent.izmeni")).Post("/klijenti/izmeni/{id}", h.SacuvajIzmenuKlijenta) r.With(doz("klijent.obrisi")).Post("/klijenti/obrisi/{id}", h.ObrisiKlijenta) r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis", h.Servis) + r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis/arhiva", h.ArhivaServisa) r.Get("/servis/novi", h.NoviNalog) r.With(doz("servis.dodaj")).Post("/servis/novi", h.SacuvajNalog) r.Get("/servis/izmeni/{id}", h.IzmeniNalog) diff --git a/internal/handler/kes.go b/internal/handler/kes.go index c69d733..3279e0d 100644 --- a/internal/handler/kes.go +++ b/internal/handler/kes.go @@ -36,7 +36,7 @@ var saSidebar = []string{ "podsetnici", "podsetnik_forma", "profil_tema", "prodaja", "prodaja_detalji", "prodaja_forma", - "servis", "servis_forma", "servis_detalji", + "servis", "servis_arhiva", "servis_forma", "servis_detalji", } // standalone su šabloni bez base layouta diff --git a/internal/handler/servis.go b/internal/handler/servis.go index 9b7e3fb..684a35f 100644 --- a/internal/handler/servis.go +++ b/internal/handler/servis.go @@ -88,6 +88,35 @@ func (h *Handler) Servis(w http.ResponseWriter, r *http.Request) { h.renderujTemplate(w, "servis", podaci) } +// ArhivaServisa prikazuje preuzete naloge — oni napuštaju kanban tablu i ovde se +// pretražuju, da tabla ostane pregledna i pokazuje samo aktivan rad +func (h *Handler) ArhivaServisa(w http.ResponseWriter, r *http.Request) { + podesavanja, err := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB) + if err != nil { + http.Error(w, "Greška pri učitavanju podešavanja", http.StatusInternalServerError) + return + } + + pretraga := r.URL.Query().Get("pretraga") + nalozi, err := h.ServisRepo.Lista(r.Context(), pretraga, model.StatusPreuzeto) + if err != nil { + http.Error(w, "Greška pri učitavanju naloga", http.StatusInternalServerError) + return + } + + ps := h.popuniPodaciStranice(r, podesavanja) + ps.Stranica = "servis" + ps.NaslovStranice = "Arhiva servisa" + podaci := PodaciServisa{ + PodaciStranice: ps, + Nalozi: nalozi, + Pretraga: pretraga, + SviStatusi: model.SviStatusi, + } + + h.renderujTemplate(w, "servis_arhiva", podaci) +} + // NoviNalog generiše broj naloga i prikazuje praznu formu za unos func (h *Handler) NoviNalog(w http.ResponseWriter, r *http.Request) { podesavanja, err := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB) diff --git a/web/static/css/main.css b/web/static/css/main.css index 52fe18e..f19ef6f 100644 --- a/web/static/css/main.css +++ b/web/static/css/main.css @@ -1227,6 +1227,49 @@ select { .pod-kartice { display: none; flex-direction: column; gap: 12px; } .stavke-kartice { display: none; flex-direction: column; gap: 10px; } +/* === servis kanban tabla === */ +.servis-kanban { + display: flex; + gap: 12px; + overflow-x: auto; + padding-bottom: 10px; + align-items: flex-start; +} +.kanban-kolona { + flex: 0 0 250px; + display: flex; + flex-direction: column; + gap: 10px; + background: var(--pozadina-hover); + border: 0.5px solid var(--ivica); + border-radius: 12px; + padding: 10px; +} +.kanban-naslov { + display: flex; + align-items: center; + padding: 2px 2px 8px; + border-bottom: 0.5px solid var(--ivica); +} +.kanban-kartice { + display: flex; + flex-direction: column; + gap: 10px; + min-height: 16px; +} +/* kartica naloga u koloni — nasleđuje .kartica, dodaje kompaktan padding i hover */ +.kanban-karta { + display: block; + text-decoration: none; + padding: 12px; + cursor: pointer; + transition: transform 0.1s ease, box-shadow 0.1s ease; +} +.kanban-karta:hover { + transform: translateY(-1px); + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12); +} + @media (max-width: 768px) { .nabavke-tabela { display: none; } .nabavke-kartice { display: flex; } .dobavljaci-tabela { display: none; } .dobavljaci-kartice { display: flex; } @@ -1237,6 +1280,10 @@ select { .pod-tabela { display: none; } .pod-kartice { display: flex; } .stavke-tabela-wrapper { display: none; } .stavke-kartice { display: flex; } .forma-grid-4 { grid-template-columns: 1fr 1fr !important; } + + /* kanban: na telefonu kolone idu vertikalno (jedna ispod druge), bez scrola */ + .servis-kanban { flex-direction: column; overflow-x: visible; } + .kanban-kolona { flex: 1 1 auto; width: 100%; } } /* podešavanja — raspored pozadine */ diff --git a/web/templates/stranice/servis.html b/web/templates/stranice/servis.html index d369353..4c489cc 100644 --- a/web/templates/stranice/servis.html +++ b/web/templates/stranice/servis.html @@ -29,126 +29,49 @@ - + + Arhiva + Novi nalog -
- -
- -
-
- - - - - - - - - - - - - {{range .Nalozi}} - - - - - - - - - {{else}} - - - - {{end}} - -
Broj nalogaKlijentUređajStatusDatum prijemaAkcije
- - {{.BrojNaloga}} - - - {{if .KlijentNaziv}}{{.KlijentNaziv}}{{else}}—{{end}} - {{.Uredjaj}} - {{template "status-badge" .Status}} - - {{.DatumPrijema.Format "02.01.2006."}} - -
- - Izmeni - - {{if index $.Dozvole "servis.obrisi"}} -
- -
- {{end}} -
-
- {{if or $.Pretraga $.FilterStatus}}Za datu pretragu nema servisnih naloga u bazi.{{else}}Nema servisnih naloga. Dodaj prvi nalog.{{end}} -
-
-
- - -
- {{range .Nalozi}} -
-
-
- + + {{if .Nalozi}} +
+ {{range $status := .SviStatusi}} + {{if ne $status "Preuzeto"}} +
+
+ {{template "status-badge" $status}} +
+
+ {{range $.Nalozi}} + {{if eq .Status $status}} + +
{{.BrojNaloga}} - -
{{.Uredjaj}}
-
-
- {{template "status-badge" .Status}} -
-
-
- {{if .KlijentNaziv}} -
- Klijent: {{.KlijentNaziv}} -
- {{end}} -
- Primljeno: {{.DatumPrijema.Format "02.01.2006."}} -
-
- +
{{.Uredjaj}}
+ {{if .KlijentNaziv}} +
{{.KlijentNaziv}}
+ {{end}} +
+ {{.DatumPrijema.Format "02.01.2006."}} +
- {{if index $.Dozvole "servis.obrisi"}} -
- -
+ {{end}} {{end}}
- {{else}} -
- {{if or $.Pretraga $.FilterStatus}}Za datu pretragu nema servisnih naloga u bazi.{{else}}Nema servisnih naloga. Dodaj prvi nalog.{{end}} -
+ {{end}} {{end}}
+ {{else}} +
+ {{if .Pretraga}}Za datu pretragu nema servisnih naloga u bazi.{{else}}Nema servisnih naloga. Dodaj prvi nalog.{{end}} +
+ {{end}}
{{end}} diff --git a/web/templates/stranice/servis_arhiva.html b/web/templates/stranice/servis_arhiva.html new file mode 100644 index 0000000..7b4e577 --- /dev/null +++ b/web/templates/stranice/servis_arhiva.html @@ -0,0 +1,107 @@ +{{template "base" .}} + +{{define "naslov"}}Arhiva servisa — NTech{{end}} + +{{define "status-badge"}} +{{if eq . "Primljeno"}}{{.}} +{{else if eq . "U dijagnostici"}}{{.}} +{{else if eq . "Čeka delove"}}{{.}} +{{else if eq . "U popravci"}}{{.}} +{{else if eq . "Završeno"}}{{.}} +{{else if eq . "Preuzeto"}}{{.}} +{{else}}{{.}} +{{end}} +{{end}} + +{{define "sadrzaj"}} +
+ + +
+
+ + + ← Tabla +
+
+ + +
+
+ + + + + + + + + + + + + {{range .Nalozi}} + + + + + + + + + {{else}} + + + + {{end}} + +
Broj nalogaKlijentUređajPrimljenoZavršenoAkcije
+ + {{.BrojNaloga}} + + + {{if .KlijentNaziv}}{{.KlijentNaziv}}{{else}}—{{end}} + {{.Uredjaj}} + {{.DatumPrijema.Format "02.01.2006."}} + + {{if .DatumZavrsetka}}{{.DatumZavrsetka.Format "02.01.2006."}}{{else}}—{{end}} + + Otvori +
+ {{if .Pretraga}}Za datu pretragu nema preuzetih naloga u bazi.{{else}}Još nema preuzetih naloga u arhivi.{{end}} +
+
+
+ + + + +
+{{end}} diff --git a/web/templates/stranice/servis_forma.html b/web/templates/stranice/servis_forma.html index 48dc5b3..40ca9c5 100644 --- a/web/templates/stranice/servis_forma.html +++ b/web/templates/stranice/servis_forma.html @@ -244,6 +244,9 @@
+ + {{if .Izmena}}
Status i datumi
@@ -290,10 +293,13 @@
+ {{end}}
-
Cene (din)
+
{{if .Izmena}}Cene (din){{else}}Avans i napomena{{end}}
+ {{if .Izmena}} +
@@ -320,6 +326,17 @@ placeholder="0" style="width:100%;">
+ {{else}} + +
+
+ + +
+
+ {{end}}