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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user