PDV KIR: razdvojen datum_prometa od datum_knjizenja za prodaju

KirIzProdaje je postavljao oba datuma na nalog.Datum. Za prodaju upisanu
odmah (SacuvajProdaju) to je ispravno jer je knjiženje istog trenutka.
Za backfill starih naloga (KirBackfillProdaje) upis kasni za periodom —
datum_knjizenja je sada trenutak backfilla, ne datum same prodaje.
This commit is contained in:
2026-07-01 12:46:13 +02:00
parent 87b26e4502
commit dd5576ed47
4 changed files with 10 additions and 5 deletions
+3 -1
View File
@@ -220,6 +220,7 @@ func (h *Handler) KirBackfillProdaje(w http.ResponseWriter, r *http.Request) {
return return
} }
ctx := r.Context() ctx := r.Context()
sada := time.Now()
nalozi, err := h.ProdajaRepo.Lista(ctx, "") nalozi, err := h.ProdajaRepo.Lista(ctx, "")
if err != nil { if err != nil {
@@ -256,7 +257,8 @@ func (h *Handler) KirBackfillProdaje(w http.ResponseWriter, r *http.Request) {
if klijent.Tip != "pravno" { if klijent.Tip != "pravno" {
pib = klijent.JMBG pib = klijent.JMBG
} }
kir := model.KirIzProdaje(nd.ProdajniNalog, ss, klijent.PunoIme(), pib, klijent.Mesto) // backfill upisuje stare naloge sa zakašnjenjem — datum_knjizenja je danas, ne datum prodaje
kir := model.KirIzProdaje(nd.ProdajniNalog, ss, klijent.PunoIme(), pib, klijent.Mesto, sada)
if _, e := h.PdvKirRepo.Kreiraj(ctx, &kir); e != nil { if _, e := h.PdvKirRepo.Kreiraj(ctx, &kir); e != nil {
slog.Error("backfill KIR: greška pri kreiranju zapisa", "prodaja_id", nd.ID, "error", e) slog.Error("backfill KIR: greška pri kreiranju zapisa", "prodaja_id", nd.ID, "error", e)
continue continue
+1 -1
View File
@@ -246,7 +246,7 @@ func (h *Handler) SacuvajProdaju(w http.ResponseWriter, r *http.Request) {
if klijent.Tip != "pravno" { if klijent.Tip != "pravno" {
pib = klijent.JMBG pib = klijent.JMBG
} }
kir := model.KirIzProdaje(nalog, stavke, klijent.PunoIme(), pib, klijent.Mesto) kir := model.KirIzProdaje(nalog, stavke, klijent.PunoIme(), pib, klijent.Mesto, nalog.Datum)
if _, e := h.PdvKirRepo.Kreiraj(r.Context(), &kir); e != nil { if _, e := h.PdvKirRepo.Kreiraj(r.Context(), &kir); e != nil {
slog.Error("auto-upis u KIR nije uspeo", "prodaja_id", id, "error", e) slog.Error("auto-upis u KIR nije uspeo", "prodaja_id", id, "error", e)
} }
+5 -2
View File
@@ -107,11 +107,14 @@ func (k *PdvKir) DodajNeto(osnovica, stopa float64) {
// KirIzProdaje gradi KIR zapis iz prodaje: stavke se grupišu po PDV stopi // 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 // (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. // (neto), PDV se dodaje naviše — isti obrazac kao kod servisnih radova/delova.
func KirIzProdaje(nalog ProdajniNalog, stavke []StavkaProdaje, kupacNaziv, kupacPib, kupacMesto string) PdvKir { // 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.
func KirIzProdaje(nalog ProdajniNalog, stavke []StavkaProdaje, kupacNaziv, kupacPib, kupacMesto string, datumKnjizenja time.Time) PdvKir {
id := nalog.ID id := nalog.ID
k := PdvKir{ k := PdvKir{
DatumPrometa: nalog.Datum, DatumPrometa: nalog.Datum,
DatumKnjizenja: nalog.Datum, DatumKnjizenja: datumKnjizenja,
BrojDokumenta: nalog.BrojNaloga, BrojDokumenta: nalog.BrojNaloga,
KupacNaziv: kupacNaziv, KupacNaziv: kupacNaziv,
KupacPib: kupacPib, KupacPib: kupacPib,
+1 -1
View File
@@ -19,7 +19,7 @@ func TestKirIzProdaje(t *testing.T) {
{Kolicina: 1, CenaPoKomadu: 50, PdvStopa: 0}, {Kolicina: 1, CenaPoKomadu: 50, PdvStopa: 0},
} }
k := KirIzProdaje(nalog, stavke, "Kupac doo", "123456789", "Niš") k := KirIzProdaje(nalog, stavke, "Kupac doo", "123456789", "Niš", nalog.Datum)
if k.Izvor != "prodaja" || k.IzvorID == nil || *k.IzvorID != 5 { if k.Izvor != "prodaja" || k.IzvorID == nil || *k.IzvorID != 5 {
t.Errorf("izvor=%q izvor_id=%v, očekivano prodaja/5", k.Izvor, k.IzvorID) t.Errorf("izvor=%q izvor_id=%v, očekivano prodaja/5", k.Izvor, k.IzvorID)