Magacin: razdvojeni Magacin/Usluge/Troškovi i izbačen Tip iz forme

ArtikalFilter dobija polje Tip; zajednički magacinPrikaz parametrizovan tipom
servi listu proizvoda (/magacin), usluga (/usluge) i troškova (/troskovi) preko
istog šablona (OsnovniUrl za HTMX). Sidebar dobija stavke Usluge i Troškovi.
Magacin forma više ne nudi izbor tipa — artikal je uvek proizvod.
This commit is contained in:
2026-06-21 22:31:19 +02:00
parent 2f4caabcdb
commit 9cfc1cc4f3
8 changed files with 86 additions and 51 deletions
+27 -6
View File
@@ -33,10 +33,28 @@ type PodaciMagacina struct {
StranicaPrev int
StranicaNext int
StranicaQueryUrl string // čuva filtere za linkove paginacije
Tip string // tip prikaza: 'proizvod' | 'usluga' | 'trosak'
OsnovniUrl string // bazna ruta liste ('/magacin' | '/usluge' | '/troskovi') — za HTMX i forme
}
// Magacin renderuje listu artikala
// Magacin renderuje listu artikala (proizvoda)
func (h *Handler) Magacin(w http.ResponseWriter, r *http.Request) {
h.magacinPrikaz(w, r, model.TipProizvod, "magacin", "Magacin", "/magacin")
}
// Usluge renderuje listu usluga (tip 'usluga')
func (h *Handler) Usluge(w http.ResponseWriter, r *http.Request) {
h.magacinPrikaz(w, r, model.TipUsluga, "usluge", "Usluge", "/usluge")
}
// Troskovi renderuje listu troškova (tip 'trosak')
func (h *Handler) Troskovi(w http.ResponseWriter, r *http.Request) {
h.magacinPrikaz(w, r, model.TipTrosak, "troskovi", "Troškovi", "/troskovi")
}
// magacinPrikaz je zajednička logika liste artikala, parametrizovana tipom; isti
// šablon služi za proizvode, usluge i troškove (razlikuju se samo tip i bazna ruta)
func (h *Handler) magacinPrikaz(w http.ResponseWriter, r *http.Request, tip, stranica, naslov, osnovniUrl string) {
podesavanja, err := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB)
if err != nil {
http.Error(w, "Greška pri učitavanju podešavanja", http.StatusInternalServerError)
@@ -45,6 +63,7 @@ func (h *Handler) Magacin(w http.ResponseWriter, r *http.Request) {
filter := db.ArtikalFilter{
Pretraga: r.URL.Query().Get("pretraga"),
Tip: tip,
SamoKriticni: r.URL.Query().Get("kriticni") == "1",
Arhivirani: r.URL.Query().Get("arhivirani") == "1",
}
@@ -89,8 +108,8 @@ func (h *Handler) Magacin(w http.ResponseWriter, r *http.Request) {
}
ps := h.popuniPodaciStranice(r, podesavanja)
ps.Stranica = "magacin"
ps.NaslovStranice = "Magacin"
ps.Stranica = stranica
ps.NaslovStranice = naslov
// izgradi query string za paginaciju (čuva filtere)
queryDelići := ""
@@ -135,6 +154,8 @@ func (h *Handler) Magacin(w http.ResponseWriter, r *http.Request) {
StranicaPrev: stranicaPrev,
StranicaNext: stranicaNext,
StranicaQueryUrl: queryDelići,
Tip: tip,
OsnovniUrl: osnovniUrl,
}
h.renderujTemplate(w, "magacin", podaci)
@@ -221,9 +242,9 @@ func (h *Handler) VratiArtikal(w http.ResponseWriter, r *http.Request) {
// PodaciMagacinskeKartice su podaci za karticu jednog artikla
type PodaciMagacinskeKartice struct {
model.PodaciStranice
Artikal model.Artikal
Promene []model.MagacinskaPromenaSaDetaljem
Dobavljaci []model.Dobavljac // dobavljači vezani za artikal
Artikal model.Artikal
Promene []model.MagacinskaPromenaSaDetaljem
Dobavljaci []model.Dobavljac // dobavljači vezani za artikal
DostupniDobavljaci []model.Dobavljac // dobavljači koji još nisu vezani (za dodavanje)
}