Prodaja: skener barkoda, prilagodjeni dropdown artikala, ispravka cena sa/bez PDV-a po rezimu

This commit is contained in:
2026-07-01 19:16:34 +02:00
parent fedd4b5d60
commit 8730acc599
6 changed files with 208 additions and 60 deletions
+4 -7
View File
@@ -105,8 +105,9 @@ func (k *PdvKir) DodajNeto(osnovica, stopa float64) {
}
// KirIzProdaje gradi KIR zapis iz prodaje: stavke se grupišu po PDV stopi
// (20→opšta, 10→posebna, ostalo→oslobođeno). CenaPoKomadu je prodajna cena BEZ PDV
// (neto), PDV se dodaje naviše — isti obrazac kao kod servisnih radova/delova.
// (20→opšta, 10→posebna, ostalo→oslobođeno). Koristi već izračunatu CenaBezPdv
// (neto, popust je već uračunat pri upisu stavke — v. ProdajaRepo.Kreiraj), jer je
// CenaPoKomadu kod punog PDV obveznika bruto (cena za naplatu), ne neto.
// DatumPrometa je datum same prodaje (nalog.Datum); DatumKnjizenja je datum kada se
// ovaj KIR zapis stvarno upisuje u knjigu — za prodaju upisanu odmah to je isti trenutak,
// ali za naknadni backfill starih naloga upis kasni za periodom pa se prosleđuje posebno.
@@ -123,11 +124,7 @@ func KirIzProdaje(nalog ProdajniNalog, stavke []StavkaProdaje, kupacNaziv, kupac
IzvorID: &id,
}
for _, s := range stavke {
cenaPoslePopusta := s.CenaPoKomadu
if s.PopustProcenat > 0 {
cenaPoslePopusta = cenaPoslePopusta * (1 - s.PopustProcenat/100)
}
k.DodajNeto(float64(s.Kolicina)*cenaPoslePopusta, s.PdvStopa)
k.DodajNeto(float64(s.Kolicina)*s.CenaBezPdv, s.PdvStopa)
}
return k
}
+4 -4
View File
@@ -11,12 +11,12 @@ func blizu(a, b float64) bool { return math.Abs(a-b) < 0.01 }
func TestKirIzProdaje(t *testing.T) {
nalog := ProdajniNalog{ID: 5, BrojNaloga: "P-1", Datum: time.Date(2026, 6, 1, 0, 0, 0, 0, time.UTC)}
stavke := []StavkaProdaje{
// 20%: CenaPoKomadu je NETO → osnovica 2×120=240, PDV 240×20%=48
{Kolicina: 2, CenaPoKomadu: 120, PdvStopa: 20},
// 20%: CenaBezPdv je već izračunata neto vrednost (v. ProdajaRepo.Kreiraj) → osnovica 2×120=240, PDV 240×20%=48
{Kolicina: 2, CenaBezPdv: 120, PdvStopa: 20},
// 10%: osnovica 1×110=110, PDV 110×10%=11
{Kolicina: 1, CenaPoKomadu: 110, PdvStopa: 10},
{Kolicina: 1, CenaBezPdv: 110, PdvStopa: 10},
// 0%: 1 × 50 = 50 (oslobođeno, bez PDV)
{Kolicina: 1, CenaPoKomadu: 50, PdvStopa: 0},
{Kolicina: 1, CenaBezPdv: 50, PdvStopa: 0},
}
k := KirIzProdaje(nalog, stavke, "Kupac doo", "123456789", "Niš", nalog.Datum)