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 -