30db396ee6
Celina 1 (kompletna) — marža po kategoriji/artiklu: - migracija 046: nullable marza na artikli i kategorije - model Marza *float64 (Artikal, Kategorija) + KategorijaMarza u ArtikalSaKategorijom - repo: čitanje/pisanje marže; nove DohvatiID/Izmeni za kategoriju - dozvola kategorija.izmeni; handler IzmeniKategoriju + ruta - UI: polje marže u formi artikla i kategorije; modal izmene kategorije - nabavka: fallback predlog marže artikal → kategorija → globalna (izaberiArtikal) Celina 2 (backend) — zavisni troškovi nabavke: - migracija 047: tabela nabavka_troskovi + kolona metod_raspodele na nabavke - model NabavkaTrosak, MetodRaspodele; čista funkcija RasporediTroskove + test - repo: Kreiraj upisuje troškove i metod; DohvatiTroskove - handler: parsiranje troškova/metoda; kalkulativna nabavna cena na serveru UI forme troškova i prikaz u detaljima nabavke slede.
110 lines
4.8 KiB
HTML
110 lines
4.8 KiB
HTML
{{template "base" .}}
|
|
|
|
{{define "naslov"}}{{if .Izmena}}Izmeni artikal{{else}}Novi artikal{{end}} — NTech{{end}}
|
|
|
|
{{define "sadrzaj"}}
|
|
<div style="width:100%;">
|
|
|
|
<!-- nazad dugme -->
|
|
<a href="/magacin" class="nazad-link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
|
|
Nazad na magacin
|
|
</a>
|
|
|
|
<div class="kartica animiraj">
|
|
<div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
|
|
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">
|
|
{{if .Izmena}}Izmeni artikal{{else}}Novi artikal{{end}}
|
|
</span>
|
|
</div>
|
|
|
|
{{if .Greska}}
|
|
<div class="poruka-greska greska-animacija">{{.Greska}}</div>
|
|
{{end}}
|
|
|
|
<form method="POST" action="{{if .Izmena}}/magacin/izmeni/{{.Artikal.ID}}{{else}}/magacin/novi{{end}}">
|
|
<div class="kolona" style="gap:14px;">
|
|
|
|
<!-- naziv -->
|
|
<div>
|
|
<label class="polje-labela">
|
|
Naziv <span style="color:#dc2626;">*</span>
|
|
</label>
|
|
<input type="text" name="naziv" value="{{.Artikal.Naziv}}"
|
|
placeholder="npr. RAM DDR4 8GB Kingston"
|
|
style="width:100%;">
|
|
</div>
|
|
|
|
<!-- kategorija -->
|
|
<div>
|
|
<label class="polje-labela">Kategorija</label>
|
|
<select name="kategorija_id" style="width:100%;">
|
|
<option value="">— bez kategorije —</option>
|
|
{{range .Kategorije}}
|
|
<option value="{{.ID}}" {{if eq (printf "%d" .ID) $.KategorijaIDStr}}selected{{end}}>{{.Naziv}}</option>
|
|
{{end}}
|
|
</select>
|
|
</div>
|
|
|
|
<!-- opis -->
|
|
<div>
|
|
<label class="polje-labela">Opis</label>
|
|
<textarea name="opis" rows="2"
|
|
placeholder="Kratak opis artikla..."
|
|
style="width:100%;resize:vertical;">{{.Artikal.Opis}}</textarea>
|
|
</div>
|
|
|
|
<!-- količina i minimum -->
|
|
<div class="forma-grid-2" style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
|
|
<div>
|
|
<label class="polje-labela">Količina na stanju</label>
|
|
<input type="number" name="kolicina" value="{{.Artikal.Kolicina}}" min="0" style="width:100%;">
|
|
</div>
|
|
<div>
|
|
<label class="polje-labela">Minimalna količina</label>
|
|
<input type="number" name="kolicina_min" value="{{.Artikal.KolicinMin}}" min="0" style="width:100%;">
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="polje-labela">Prodajna cena (din)</label>
|
|
<input type="number" name="prodajna_cena" value="{{.Artikal.ProdajnaCena}}" min="0" step="0.01" style="width:100%;">
|
|
</div>
|
|
|
|
<!-- marža za kalkulaciju; prazno = nasleđuje maržu kategorije ili globalnu -->
|
|
<div>
|
|
<label class="polje-labela">Marža (%)</label>
|
|
<input type="number" name="marza" value="{{if .Artikal.Marza}}{{.Artikal.Marza}}{{end}}" min="0" step="0.01" style="width:100%;"
|
|
placeholder="prazno = po kategoriji / globalna">
|
|
</div>
|
|
|
|
<!-- lokacija -->
|
|
<div>
|
|
<label class="polje-labela">Lokacija u magacinu</label>
|
|
<input type="text" name="lokacija" value="{{.Artikal.Lokacija}}"
|
|
placeholder="npr. Polica A3, Kutija 2..."
|
|
style="width:100%;">
|
|
</div>
|
|
|
|
<!-- napomena -->
|
|
<div>
|
|
<label class="polje-labela">Napomena</label>
|
|
<textarea name="napomena" rows="2"
|
|
placeholder="Interna napomena..."
|
|
style="width:100%;resize:vertical;">{{.Artikal.Napomena}}</textarea>
|
|
</div>
|
|
|
|
<!-- dugmad -->
|
|
<div style="display:flex;justify-content:flex-end;gap:10px;margin-top:6px;">
|
|
<a href="/magacin" class="btn-sekundarno">Odustani</a>
|
|
<button type="submit" class="btn-primarno">
|
|
{{if .Izmena}}Sačuvaj izmene{{else}}Dodaj artikal{{end}}
|
|
</button>
|
|
</div>
|
|
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{{end}}
|