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:
@@ -301,6 +301,8 @@ func main() {
|
|||||||
r.With(modul("pdv"), doz("pdv.obrisi")).Post("/pdv/kpr/obrisi/{id}", h.ObrisiPdvKpr)
|
r.With(modul("pdv"), doz("pdv.obrisi")).Post("/pdv/kpr/obrisi/{id}", h.ObrisiPdvKpr)
|
||||||
r.With(modul("pdv")).Get("/pdv/obracun", h.PdvObracunStranica)
|
r.With(modul("pdv")).Get("/pdv/obracun", h.PdvObracunStranica)
|
||||||
r.Get("/magacin", h.Magacin)
|
r.Get("/magacin", h.Magacin)
|
||||||
|
r.Get("/usluge", h.Usluge)
|
||||||
|
r.Get("/troskovi", h.Troskovi)
|
||||||
r.Get("/magacin/kartica/{id}", h.MagacinskaKartica)
|
r.Get("/magacin/kartica/{id}", h.MagacinskaKartica)
|
||||||
r.Get("/magacin/novi", h.NoviArtikal)
|
r.Get("/magacin/novi", h.NoviArtikal)
|
||||||
r.With(doz("artikal.dodaj")).Post("/magacin/novi", h.SacuvajArtikal)
|
r.With(doz("artikal.dodaj")).Post("/magacin/novi", h.SacuvajArtikal)
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ type NivelacijaRepository interface {
|
|||||||
type ArtikalFilter struct {
|
type ArtikalFilter struct {
|
||||||
Pretraga string
|
Pretraga string
|
||||||
KategorijaID *int64
|
KategorijaID *int64
|
||||||
|
Tip string // 'proizvod' | 'usluga' | 'trosak'; prazno → svi tipovi
|
||||||
SamoKriticni bool
|
SamoKriticni bool
|
||||||
Arhivirani bool // true → vrati samo arhivirane; false (podrazumevano) → samo aktivne
|
Arhivirani bool // true → vrati samo arhivirane; false (podrazumevano) → samo aktivne
|
||||||
Limit int
|
Limit int
|
||||||
|
|||||||
@@ -49,6 +49,11 @@ func (r *ArtikalRepo) Lista(ctx context.Context, filter db.ArtikalFilter) ([]mod
|
|||||||
args = append(args, *filter.KategorijaID)
|
args = append(args, *filter.KategorijaID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if filter.Tip != "" {
|
||||||
|
upit += " AND a.tip = ?"
|
||||||
|
args = append(args, filter.Tip)
|
||||||
|
}
|
||||||
|
|
||||||
if filter.SamoKriticni {
|
if filter.SamoKriticni {
|
||||||
upit += " AND (a.tip = 'proizvod' OR a.tip = '') AND a.kolicina <= a.kolicina_min"
|
upit += " AND (a.tip = 'proizvod' OR a.tip = '') AND a.kolicina <= a.kolicina_min"
|
||||||
}
|
}
|
||||||
@@ -442,6 +447,11 @@ func (r *ArtikalRepo) PrebrojiPoFilteru(ctx context.Context, filter db.ArtikalFi
|
|||||||
args = append(args, *filter.KategorijaID)
|
args = append(args, *filter.KategorijaID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if filter.Tip != "" {
|
||||||
|
upit += " AND a.tip = ?"
|
||||||
|
args = append(args, filter.Tip)
|
||||||
|
}
|
||||||
|
|
||||||
if filter.SamoKriticni {
|
if filter.SamoKriticni {
|
||||||
upit += " AND (a.tip = 'proizvod' OR a.tip = '') AND a.kolicina <= a.kolicina_min"
|
upit += " AND (a.tip = 'proizvod' OR a.tip = '') AND a.kolicina <= a.kolicina_min"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,10 +33,28 @@ type PodaciMagacina struct {
|
|||||||
StranicaPrev int
|
StranicaPrev int
|
||||||
StranicaNext int
|
StranicaNext int
|
||||||
StranicaQueryUrl string // čuva filtere za linkove paginacije
|
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) {
|
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)
|
podesavanja, err := sqlite.DohvatiSvaPodesavanja(r.Context(), h.DB)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "Greška pri učitavanju podešavanja", http.StatusInternalServerError)
|
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{
|
filter := db.ArtikalFilter{
|
||||||
Pretraga: r.URL.Query().Get("pretraga"),
|
Pretraga: r.URL.Query().Get("pretraga"),
|
||||||
|
Tip: tip,
|
||||||
SamoKriticni: r.URL.Query().Get("kriticni") == "1",
|
SamoKriticni: r.URL.Query().Get("kriticni") == "1",
|
||||||
Arhivirani: r.URL.Query().Get("arhivirani") == "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 := h.popuniPodaciStranice(r, podesavanja)
|
||||||
ps.Stranica = "magacin"
|
ps.Stranica = stranica
|
||||||
ps.NaslovStranice = "Magacin"
|
ps.NaslovStranice = naslov
|
||||||
|
|
||||||
// izgradi query string za paginaciju (čuva filtere)
|
// izgradi query string za paginaciju (čuva filtere)
|
||||||
queryDelići := ""
|
queryDelići := ""
|
||||||
@@ -135,6 +154,8 @@ func (h *Handler) Magacin(w http.ResponseWriter, r *http.Request) {
|
|||||||
StranicaPrev: stranicaPrev,
|
StranicaPrev: stranicaPrev,
|
||||||
StranicaNext: stranicaNext,
|
StranicaNext: stranicaNext,
|
||||||
StranicaQueryUrl: queryDelići,
|
StranicaQueryUrl: queryDelići,
|
||||||
|
Tip: tip,
|
||||||
|
OsnovniUrl: osnovniUrl,
|
||||||
}
|
}
|
||||||
|
|
||||||
h.renderujTemplate(w, "magacin", podaci)
|
h.renderujTemplate(w, "magacin", podaci)
|
||||||
|
|||||||
@@ -49,6 +49,12 @@ func (h *Handler) NoviArtikal(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
dobavljaci, _ := h.DobavljaciRepo.Lista(r.Context(), "")
|
dobavljaci, _ := h.DobavljaciRepo.Lista(r.Context(), "")
|
||||||
|
|
||||||
|
// tip se može predodabrati iz query-ja (dolazak sa stranice Usluge/Troškovi)
|
||||||
|
tip := r.URL.Query().Get("tip")
|
||||||
|
if tip != model.TipUsluga && tip != model.TipTrosak {
|
||||||
|
tip = model.TipProizvod
|
||||||
|
}
|
||||||
|
|
||||||
ps := h.popuniPodaciStranice(r, podesavanja)
|
ps := h.popuniPodaciStranice(r, podesavanja)
|
||||||
ps.Stranica = "magacin"
|
ps.Stranica = "magacin"
|
||||||
ps.NaslovStranice = "Novi artikal"
|
ps.NaslovStranice = "Novi artikal"
|
||||||
@@ -56,7 +62,7 @@ func (h *Handler) NoviArtikal(w http.ResponseWriter, r *http.Request) {
|
|||||||
PodaciStranice: ps,
|
PodaciStranice: ps,
|
||||||
Kategorije: kategorije,
|
Kategorije: kategorije,
|
||||||
Dobavljaci: dobavljaci,
|
Dobavljaci: dobavljaci,
|
||||||
Artikal: model.Artikal{Sifra: predlogSifre, Tip: model.TipProizvod, JedinicaMere: "kom"},
|
Artikal: model.Artikal{Sifra: predlogSifre, Tip: tip, JedinicaMere: "kom"},
|
||||||
Izmena: false,
|
Izmena: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,18 @@
|
|||||||
<span class="nav-tooltip">Magacin</span>
|
<span class="nav-tooltip">Magacin</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
<a href="/usluge" class="nav-stavka {{if eq .Stranica "usluge"}}aktivan{{end}}">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><rect x="8" y="2" width="8" height="4" rx="1" ry="1"/><path d="M9 14l2 2 4-4"/></svg>
|
||||||
|
<span>Usluge</span>
|
||||||
|
<span class="nav-tooltip">Usluge</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/troskovi" class="nav-stavka {{if eq .Stranica "troskovi"}}aktivan{{end}}">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>
|
||||||
|
<span>Troškovi</span>
|
||||||
|
<span class="nav-tooltip">Troškovi</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
{{if index .Dozvole "nabavka.pregled"}}
|
{{if index .Dozvole "nabavka.pregled"}}
|
||||||
<a href="/nabavke" class="nav-stavka {{if eq .Stranica "nabavke"}}aktivan{{end}}">
|
<a href="/nabavke" class="nav-stavka {{if eq .Stranica "nabavke"}}aktivan{{end}}">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><polyline points="10 9 9 9 8 9"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><polyline points="10 9 9 9 8 9"/></svg>
|
||||||
|
|||||||
@@ -27,25 +27,25 @@
|
|||||||
<!-- dugmad -->
|
<!-- dugmad -->
|
||||||
<div style="display:flex;gap:10px;flex-wrap:wrap;">
|
<div style="display:flex;gap:10px;flex-wrap:wrap;">
|
||||||
{{if index .Dozvole "artikal.dodaj"}}
|
{{if index .Dozvole "artikal.dodaj"}}
|
||||||
<a href="/magacin/novi" class="btn-primarno">+ Novi artikal</a>
|
<a href="/magacin/novi?tip={{.Tip}}" class="btn-primarno">+ {{if eq .Tip "usluga"}}Nova usluga{{else if eq .Tip "trosak"}}Novi trošak{{else}}Novi artikal{{end}}</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{if index .Dozvole "kategorija.pregled"}}
|
{{if and (eq .Tip "proizvod") (index .Dozvole "kategorija.pregled")}}
|
||||||
<a href="/magacin/kategorije" class="btn-primarno">Kategorije</a>
|
<a href="/magacin/kategorije" class="btn-primarno">Kategorije</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- pretraga i filteri — interaktivna pretraga (hx-trigger) -->
|
<!-- pretraga i filteri — interaktivna pretraga (hx-trigger) -->
|
||||||
<form method="GET" action="/magacin" class="kolona" style="gap:10px;" id="magacin-filteri"
|
<form method="GET" action="{{.OsnovniUrl}}" class="kolona" style="gap:10px;" id="magacin-filteri"
|
||||||
hx-get="/magacin" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
hx-get="{{.OsnovniUrl}}" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
||||||
<input type="text" name="pretraga" value="{{.Filter.Pretraga}}"
|
<input type="text" name="pretraga" value="{{.Filter.Pretraga}}"
|
||||||
placeholder="Pretraži po nazivu, šifri, barkodu, lokaciji..."
|
placeholder="Pretraži po nazivu, šifri, barkodu, lokaciji..."
|
||||||
style="width:100%;"
|
style="width:100%;"
|
||||||
hx-trigger="keyup[target.value.length==0||target.value.length>=3] changed delay:150ms, search"
|
hx-trigger="keyup[target.value.length==0||target.value.length>=3] changed delay:150ms, search"
|
||||||
hx-get="/magacin" hx-include="closest form" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
hx-get="{{.OsnovniUrl}}" hx-include="closest form" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
||||||
<div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center;">
|
<div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center;">
|
||||||
<select name="kategorija" style="flex:1;min-width:140px;"
|
<select name="kategorija" style="flex:1;min-width:140px;"
|
||||||
hx-trigger="change"
|
hx-trigger="change"
|
||||||
hx-get="/magacin" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
hx-get="{{.OsnovniUrl}}" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
||||||
<option value="">Sve kategorije</option>
|
<option value="">Sve kategorije</option>
|
||||||
{{range .Kategorije}}
|
{{range .Kategorije}}
|
||||||
<option value="{{.ID}}" {{if eq (printf "%d" .ID) $.KategorijaIDStr}}selected{{end}}>{{.Naziv}}</option>
|
<option value="{{.ID}}" {{if eq (printf "%d" .ID) $.KategorijaIDStr}}selected{{end}}>{{.Naziv}}</option>
|
||||||
@@ -54,13 +54,13 @@
|
|||||||
<label style="display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--tekst-sporedni);cursor:pointer;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;background:var(--kartica);white-space:nowrap;">
|
<label style="display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--tekst-sporedni);cursor:pointer;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;background:var(--kartica);white-space:nowrap;">
|
||||||
<input type="checkbox" name="kriticni" value="1" {{if .Filter.SamoKriticni}}checked{{end}}
|
<input type="checkbox" name="kriticni" value="1" {{if .Filter.SamoKriticni}}checked{{end}}
|
||||||
hx-trigger="change"
|
hx-trigger="change"
|
||||||
hx-get="/magacin" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
hx-get="{{.OsnovniUrl}}" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
||||||
Samo kritični
|
Samo kritični
|
||||||
</label>
|
</label>
|
||||||
<label style="display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--tekst-sporedni);cursor:pointer;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;background:var(--kartica);white-space:nowrap;">
|
<label style="display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--tekst-sporedni);cursor:pointer;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;background:var(--kartica);white-space:nowrap;">
|
||||||
<input type="checkbox" name="arhivirani" value="1" {{if .PrikazArhivirani}}checked{{end}}
|
<input type="checkbox" name="arhivirani" value="1" {{if .PrikazArhivirani}}checked{{end}}
|
||||||
hx-trigger="change"
|
hx-trigger="change"
|
||||||
hx-get="/magacin" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
hx-get="{{.OsnovniUrl}}" hx-target="#magacin-rezultati" hx-select="#magacin-rezultati" hx-swap="innerHTML" hx-push-url="true">
|
||||||
Arhivirani
|
Arhivirani
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
{{else}}
|
{{else}}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="7" style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
|
<td colspan="7" style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
|
||||||
{{if or $.Filter.Pretraga $.KategorijaIDStr $.Filter.SamoKriticni}}Za datu pretragu nema artikala u bazi.{{else}}Nema artikala. <a href="/magacin/novi" style="color:var(--sb-akcent);">Dodaj prvi artikal.</a>{{end}}
|
{{if or $.Filter.Pretraga $.KategorijaIDStr $.Filter.SamoKriticni}}Za datu pretragu nema stavki u bazi.{{else}}Nema stavki. <a href="/magacin/novi?tip={{$.Tip}}" style="color:var(--sb-akcent);">Dodaj prvu.</a>{{end}}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<div style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
|
<div style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
|
||||||
{{if or $.Filter.Pretraga $.KategorijaIDStr $.Filter.SamoKriticni}}Za datu pretragu nema artikala u bazi.{{else}}Nema artikala. <a href="/magacin/novi" style="color:var(--sb-akcent);">Dodaj prvi artikal.</a>{{end}}
|
{{if or $.Filter.Pretraga $.KategorijaIDStr $.Filter.SamoKriticni}}Za datu pretragu nema stavki u bazi.{{else}}Nema stavki. <a href="/magacin/novi?tip={{$.Tip}}" style="color:var(--sb-akcent);">Dodaj prvu.</a>{{end}}
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -53,16 +53,10 @@
|
|||||||
style="width:100%;">
|
style="width:100%;">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- tip i jedinica mere -->
|
<!-- Magacin je isključivo za proizvode (prate lager); usluge i troškovi
|
||||||
<div class="forma-grid-2" style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
|
imaju svoje module, zato ovde tip više nije izbor -->
|
||||||
<div>
|
<input type="hidden" name="tip" value="proizvod">
|
||||||
<label class="polje-labela">Tip artikla</label>
|
<!-- jedinica mere -->
|
||||||
<select name="tip" id="tip-artikla" style="width:100%;">
|
|
||||||
<option value="proizvod" {{if eq .Artikal.Tip "proizvod"}}selected{{end}}>Proizvod (prati lager)</option>
|
|
||||||
<option value="usluga" {{if eq .Artikal.Tip "usluga"}}selected{{end}}>Usluga</option>
|
|
||||||
<option value="trosak" {{if eq .Artikal.Tip "trosak"}}selected{{end}}>Trošak</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div>
|
<div>
|
||||||
<label class="polje-labela">Jedinica mere</label>
|
<label class="polje-labela">Jedinica mere</label>
|
||||||
{{$jm := .Artikal.JedinicaMere}}
|
{{$jm := .Artikal.JedinicaMere}}
|
||||||
@@ -77,7 +71,6 @@
|
|||||||
<option value="pak" {{if eq $jm "pak"}}selected{{end}}>pak</option>
|
<option value="pak" {{if eq $jm "pak"}}selected{{end}}>pak</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- kategorija -->
|
<!-- kategorija -->
|
||||||
<div>
|
<div>
|
||||||
@@ -175,16 +168,6 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
(function () {
|
(function () {
|
||||||
// sakrivanje polja lagera za usluge i troškove
|
|
||||||
var tip = document.getElementById('tip-artikla');
|
|
||||||
var lager = document.querySelectorAll('[data-lager]');
|
|
||||||
function azurirajLager() {
|
|
||||||
var prati = tip.value === 'proizvod';
|
|
||||||
lager.forEach(function (el) { el.style.display = prati ? '' : 'none'; });
|
|
||||||
}
|
|
||||||
tip.addEventListener('change', azurirajLager);
|
|
||||||
azurirajLager();
|
|
||||||
|
|
||||||
// auto-predlog šifre pri promeni kategorije (samo za nov artikal i ako šifra nije ručno menjana)
|
// auto-predlog šifre pri promeni kategorije (samo za nov artikal i ako šifra nije ručno menjana)
|
||||||
var kat = document.querySelector('select[name="kategorija_id"]');
|
var kat = document.querySelector('select[name="kategorija_id"]');
|
||||||
var sifra = document.getElementById('sifra-input');
|
var sifra = document.getElementById('sifra-input');
|
||||||
|
|||||||
Reference in New Issue
Block a user