Nabavka: predlog cene pri izboru artikla; forma artikla: dvosmerno marža↔prodajna cena
This commit is contained in:
@@ -51,6 +51,7 @@ func artikalUJSON(artikli []model.ArtikalSaKategorijom) template.JS {
|
|||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
Naziv string `json:"naziv"`
|
Naziv string `json:"naziv"`
|
||||||
PdvStopa float64 `json:"pdv_stopa"`
|
PdvStopa float64 `json:"pdv_stopa"`
|
||||||
|
NabavnaCena float64 `json:"nabavna_cena"` // poslednja nabavna cena — predlog za Cena/kom
|
||||||
Marza *float64 `json:"marza"` // marža artikla; null = nije postavljeno
|
Marza *float64 `json:"marza"` // marža artikla; null = nije postavljeno
|
||||||
KategorijaMarza *float64 `json:"kategorija_marza"` // marža kategorije; fallback ako artikal nema
|
KategorijaMarza *float64 `json:"kategorija_marza"` // marža kategorije; fallback ako artikal nema
|
||||||
}
|
}
|
||||||
@@ -58,7 +59,8 @@ func artikalUJSON(artikli []model.ArtikalSaKategorijom) template.JS {
|
|||||||
for _, a := range artikli {
|
for _, a := range artikli {
|
||||||
lista = append(lista, stavka{
|
lista = append(lista, stavka{
|
||||||
ID: a.ID, Naziv: a.Naziv, PdvStopa: a.PdvStopa,
|
ID: a.ID, Naziv: a.Naziv, PdvStopa: a.PdvStopa,
|
||||||
Marza: a.Marza, KategorijaMarza: a.KategorijaMarza,
|
NabavnaCena: a.NabavnaCena,
|
||||||
|
Marza: a.Marza, KategorijaMarza: a.KategorijaMarza,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
b, _ := json.Marshal(lista)
|
b, _ := json.Marshal(lista)
|
||||||
|
|||||||
@@ -240,11 +240,13 @@ document.addEventListener('alpine:init', () => {
|
|||||||
izaberiArtikal(s) {
|
izaberiArtikal(s) {
|
||||||
const a = this.artikliOpcije.find(x => String(x.id) === String(s.artikal_id))
|
const a = this.artikliOpcije.find(x => String(x.id) === String(s.artikal_id))
|
||||||
if (a) {
|
if (a) {
|
||||||
|
if (a.nabavna_cena != null) s.cena = a.nabavna_cena
|
||||||
if (a.marza != null) s.marza = a.marza
|
if (a.marza != null) s.marza = a.marza
|
||||||
else if (a.kategorija_marza != null) s.marza = a.kategorija_marza
|
else if (a.kategorija_marza != null) s.marza = a.kategorija_marza
|
||||||
else s.marza = this.marzaDefault
|
else s.marza = this.marzaDefault
|
||||||
}
|
}
|
||||||
this.izracunajProdajnu(s)
|
this.izracunajProdajnu(s)
|
||||||
|
this.preracunajSve()
|
||||||
},
|
},
|
||||||
// ukupan zavisni trošak nabavke
|
// ukupan zavisni trošak nabavke
|
||||||
ukupanTrosak() {
|
ukupanTrosak() {
|
||||||
|
|||||||
@@ -184,6 +184,28 @@
|
|||||||
.then(function (t) { if (t) sifra.value = t; });
|
.then(function (t) { if (t) sifra.value = t; });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dvosmerno povezivanje: nabavna + marža → prodajna, i prodajna → marža
|
||||||
|
var nabavna = document.querySelector('[name="nabavna_cena"]');
|
||||||
|
var prodajna = document.querySelector('[name="prodajna_cena"]');
|
||||||
|
var marza = document.querySelector('[name="marza"]');
|
||||||
|
function broj(el) { return parseFloat(el.value) || 0; }
|
||||||
|
// postavljanje .value programski ne okida 'input', pa nema beskonačne petlje
|
||||||
|
function izProdajne() {
|
||||||
|
var n = broj(nabavna);
|
||||||
|
if (n <= 0) return;
|
||||||
|
prodajna.value = (n * (1 + broj(marza) / 100)).toFixed(2);
|
||||||
|
}
|
||||||
|
function izMarze() {
|
||||||
|
var n = broj(nabavna), p = broj(prodajna);
|
||||||
|
if (n <= 0) { marza.value = ''; return; }
|
||||||
|
marza.value = ((p / n - 1) * 100).toFixed(2);
|
||||||
|
}
|
||||||
|
if (nabavna && prodajna && marza) {
|
||||||
|
marza.addEventListener('input', izProdajne);
|
||||||
|
nabavna.addEventListener('input', izProdajne);
|
||||||
|
prodajna.addEventListener('input', izMarze);
|
||||||
|
}
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
Reference in New Issue
Block a user