From dd5576ed47de058ee55de4cd2ab5ea967df0dbe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Wed, 1 Jul 2026 12:46:13 +0200 Subject: [PATCH] PDV KIR: razdvojen datum_prometa od datum_knjizenja za prodaju MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- internal/handler/pdv_kir.go | 4 +++- internal/handler/prodaja.go | 2 +- internal/model/pdv_evidencija.go | 7 +++++-- internal/model/pdv_evidencija_test.go | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/internal/handler/pdv_kir.go b/internal/handler/pdv_kir.go index a421768..059a2ab 100644 --- a/internal/handler/pdv_kir.go +++ b/internal/handler/pdv_kir.go @@ -220,6 +220,7 @@ func (h *Handler) KirBackfillProdaje(w http.ResponseWriter, r *http.Request) { return } ctx := r.Context() + sada := time.Now() nalozi, err := h.ProdajaRepo.Lista(ctx, "") if err != nil { @@ -256,7 +257,8 @@ func (h *Handler) KirBackfillProdaje(w http.ResponseWriter, r *http.Request) { if klijent.Tip != "pravno" { 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 { slog.Error("backfill KIR: greška pri kreiranju zapisa", "prodaja_id", nd.ID, "error", e) continue diff --git a/internal/handler/prodaja.go b/internal/handler/prodaja.go index beab185..775c201 100644 --- a/internal/handler/prodaja.go +++ b/internal/handler/prodaja.go @@ -246,7 +246,7 @@ func (h *Handler) SacuvajProdaju(w http.ResponseWriter, r *http.Request) { if klijent.Tip != "pravno" { 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 { slog.Error("auto-upis u KIR nije uspeo", "prodaja_id", id, "error", e) } diff --git a/internal/model/pdv_evidencija.go b/internal/model/pdv_evidencija.go index bb2018f..4bebe6e 100644 --- a/internal/model/pdv_evidencija.go +++ b/internal/model/pdv_evidencija.go @@ -107,11 +107,14 @@ 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. -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 k := PdvKir{ DatumPrometa: nalog.Datum, - DatumKnjizenja: nalog.Datum, + DatumKnjizenja: datumKnjizenja, BrojDokumenta: nalog.BrojNaloga, KupacNaziv: kupacNaziv, KupacPib: kupacPib, diff --git a/internal/model/pdv_evidencija_test.go b/internal/model/pdv_evidencija_test.go index 864dcc8..d706367 100644 --- a/internal/model/pdv_evidencija_test.go +++ b/internal/model/pdv_evidencija_test.go @@ -19,7 +19,7 @@ func TestKirIzProdaje(t *testing.T) { {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 { t.Errorf("izvor=%q izvor_id=%v, očekivano prodaja/5", k.Izvor, k.IzvorID)