Servis: storno naloga (kao Prodaja/Nabavka) — KIR/KPO storno stavke, fiskalni refund

Do sada je jedini način da se poništi naplaćen/preuzet servisni nalog bio
fizičko brisanje (ObrisiNalog), koje ostavlja KIR/KPO/fiskalne zapise sa mrtvim
izvor_id — prihod ostaje prijavljen za nalog koji više ne postoji.

Migracija 100: servisni_nalozi dobija stornirano/razlog_storniranja (kao
prodajni_nalozi/nabavke). ServisRepo.Storno vraća ugrađene delove na stanje
ali NE briše nalog. Novi handler StornoNaloga (dozvola servis.storno):
- KIR/KPO original ostaje, dograđuje se storno stavka (model.KirStorno/KpoStorno)
- fiskalni refund (best-effort) preko refundujServis — Refund zahtev sa
  ReferentDocumentNumber ka originalnom PFR broju, isti obrazac kao stornirajProdaju
- ObrisiNalog sad odbija brisanje ako nalog već ima fiskalni/KIR/KPO zapis i
  upućuje na Storno

stornoBezRefunda (dashboard upozorenje) prošireno da prati i servisne stornose
bez uspešnog fiskalnog refunda, ne samo prodaju.
This commit is contained in:
2026-07-02 11:30:55 +02:00
parent 3c61063bbb
commit f74cb04024
9 changed files with 392 additions and 41 deletions
+2 -1
View File
@@ -24,6 +24,7 @@ var sveAkcije = []string{
"servis.dodaj",
"servis.izmeni",
"servis.obrisi",
"servis.storno",
"prodaja.pregled",
"prodaja.dodaj",
"prodaja.storno",
@@ -77,7 +78,7 @@ func ImaDozvolu(uloga, akcija string) bool {
return true
// servis
case "servis.pregled", "servis.dodaj",
"servis.izmeni", "servis.obrisi":
"servis.izmeni", "servis.obrisi", "servis.storno":
return true
// prodaja
case "prodaja.pregled", "prodaja.dodaj", "prodaja.storno":