Servis: sprečeno dupliranje KIR/KPO/fiskalnog pri ponovnom Preuzeto; KPO redni_broj

Ponovni ulazak naloga u status Preuzeto (dupli klik, dupli submit modala naplate,
sekvenca Preuzeto→Završeno→Preuzeto) je ponovo pokretao fiskalizaciju i upis u
KIR/KPO bez provere da li već postoje — svaki ulazak je duplirao prihod i PDV
obavezu, a dashboard/backfill duplikat nikad nije prijavljivao jer je dovoljan
bio bar jedan zapis. Dodate PostojiZaIzvor/DohvatiPoServisu provere pre svakog
upisa (isti obrazac kao RetryFiskalizacija).

KIR upis servisa refaktorisan u model.KirIzServisa (deljeno sa budućim backfill-om).

KpoRepo.Kreiraj sad dodeljuje redni_broj automatski (COALESCE(MAX,0)+1) — kolona
je postojala u šemi ali se nikad nije popunjavala, pa knjiga o ostvarenom prometu
paušalaca nije imala redni broj koji Pravilnik zahteva.
This commit is contained in:
2026-07-02 11:27:19 +02:00
parent 2cc9c24aa9
commit 3c61063bbb
5 changed files with 123 additions and 33 deletions
+5 -3
View File
@@ -70,12 +70,14 @@ func (r *KpoRepo) Lista(ctx context.Context, od, do time.Time) ([]model.KpoZapis
return rezultat, redovi.Err()
}
// Kreiraj upisuje novi KPO zapis i vraća njegov ID.
// Kreiraj upisuje novi KPO zapis i vraća njegov ID. redni_broj se dodeljuje
// automatski kao sledeći u nizu (Pravilnik o KPO zahteva kontinuiran redni broj
// bez prekida — knjiga se nikad ne briše, pa brojevi ostaju u nizu i posle storna).
func (r *KpoRepo) Kreiraj(ctx context.Context, z *model.KpoZapis) (int64, error) {
rez, err := r.db.ExecContext(ctx, `
INSERT INTO kpo_unosi
(datum_prometa, broj_dokumenta, opis, prihod, nacin_placanja, napomena, izvor, izvor_id)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
(datum_prometa, redni_broj, broj_dokumenta, opis, prihod, nacin_placanja, napomena, izvor, izvor_id)
VALUES (?, (SELECT COALESCE(MAX(redni_broj), 0) + 1 FROM kpo_unosi), ?, ?, ?, ?, ?, ?, ?)`,
z.DatumPrometa.Format("2006-01-02"),
z.BrojDokumenta,
nullString(z.Opis),