PDV KIR: dnevni pazar se ažurira (zamenjuje) umesto tvrde blokade

Prethodna zaštita od duplog unosa (77320d2) je trajno onemogućavala ispravku
zbirnog KIR zapisa jednom kad bi bio sačuvan — a taj zapis nema vezu nazad ka
pojedinačnim nalozima, pa naknadni storno ili nova prodaja istog dana ne mogu da
ga koriguju kroz postojeće mehanizme (ObrisiPoIzvoru radi samo za B2B auto-KIR).

Sad se ponovni upis za isti dan tretira kao ažuriranje: stari zapis (po broju
dokumenta FISK-YYYYMMDD) se briše i zamenjuje trenutno tačnim iznosima. Forma i
dalje upozorava da zapis već postoji, ali dugme dozvoljava svesno ažuriranje
umesto da bude trajno sakriveno.
This commit is contained in:
2026-07-01 11:59:37 +02:00
parent b99f465ec5
commit 1adf49e8cc
4 changed files with 26 additions and 8 deletions
+3 -1
View File
@@ -71,8 +71,10 @@ type PdvKirRepository interface {
// PostojiZaIzvor vraća true ako postoji bar jedan zapis za dati izvor i izvorID
PostojiZaIzvor(ctx context.Context, izvor string, izvorID int64) (bool, error)
// PostojiPoBrojuDokumenta vraća true ako postoji zapis sa datim brojem dokumenta
// (npr. zaštita od duplog unosa dnevnog pazara "FISK-YYYYMMDD")
// (npr. za prikaz upozorenja da je dnevni pazar "FISK-YYYYMMDD" već upisan)
PostojiPoBrojuDokumenta(ctx context.Context, brojDokumenta string) (bool, error)
// ObrisiPoBrojuDokumenta briše zapis(e) sa datim brojem dokumenta (zamena pri ažuriranju)
ObrisiPoBrojuDokumenta(ctx context.Context, brojDokumenta string) error
}
// PdvKprRepository definiše operacije nad knjigom primljenih računa (KPR)
+9
View File
@@ -148,6 +148,15 @@ func (r *PdvKirRepo) PostojiZaIzvor(ctx context.Context, izvor string, izvorID i
return n > 0, nil
}
// ObrisiPoBrojuDokumenta briše KIR zapis(e) sa datim brojem dokumenta (za zamenu
// zbirnog dnevnog pazara ažuriranim iznosima).
func (r *PdvKirRepo) ObrisiPoBrojuDokumenta(ctx context.Context, brojDokumenta string) error {
if _, err := r.db.ExecContext(ctx, "DELETE FROM pdv_kir WHERE broj_dokumenta = ?", brojDokumenta); err != nil {
return fmt.Errorf("ntech: PdvKirRepo.ObrisiPoBrojuDokumenta: %w", err)
}
return nil
}
// PostojiPoBrojuDokumenta vraća true ako postoji KIR zapis sa datim brojem dokumenta
func (r *PdvKirRepo) PostojiPoBrojuDokumenta(ctx context.Context, brojDokumenta string) (bool, error) {
var n int
+4 -4
View File
@@ -327,11 +327,11 @@ func (h *Handler) SacuvajDnevniPazarKir(w http.ResponseWriter, r *http.Request)
return
}
// ako za ovaj dan već postoji zbirni zapis, zameni ga ažuriranim iznosima
// (npr. naknadni storno ili prodaja posle prethodnog upisa promenili su promet tog dana)
brojDokumenta := fmt.Sprintf("FISK-%s", datum.Format("20060102"))
if postoji, _ := h.PdvKirRepo.PostojiPoBrojuDokumenta(r.Context(), brojDokumenta); postoji {
middleware.SetFlash(w, r, h.DB, "greska", fmt.Sprintf("Dnevni pazar za %s je već upisan u KIR.", datum.Format("02.01.2006.")))
http.Redirect(w, r, "/pdv/kir/dnevni-pazar?datum="+datumStr, http.StatusSeeOther)
return
if err := h.PdvKirRepo.ObrisiPoBrojuDokumenta(r.Context(), brojDokumenta); err != nil {
slog.Error("brisanje starog dnevnog pazara nije uspelo", "datum", datum, "error", err)
}
z := model.PdvKir{