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:
+14
-30
@@ -2204,17 +2204,21 @@ func (h *Handler) PromeniStatus(w http.ResponseWriter, r *http.Request) {
|
||||
middleware.SetFlash(w, r, h.DB, "greska", "Naplata nije sačuvana. Pokušajte ponovo.")
|
||||
}
|
||||
|
||||
// fiskalizacija servisa — ako je modul uključen
|
||||
// fiskalizacija servisa — ako je modul uključen; preskoči ako fiskalni račun
|
||||
// za ovaj nalog već postoji (ponovni ulazak u Preuzeto ne sme duplirati PFR zahtev)
|
||||
if h.modulUkljucen(r.Context(), config.ModulFiskalizacija) {
|
||||
klijent := h.fiskalKlijent()
|
||||
if klijent != nil && iznos > 0 {
|
||||
h.fiskalizujServis(r.Context(), id, klijent, nacin, iznos)
|
||||
if fr, _ := h.FiskalRepo.DohvatiPoServisu(r.Context(), id); fr == nil {
|
||||
klijent := h.fiskalKlijent()
|
||||
if klijent != nil && iznos > 0 {
|
||||
h.fiskalizujServis(r.Context(), id, klijent, nacin, iznos)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// automatski upis u KIR ako je firma PDV obveznik i servis je na klijenta (B2B/identifikovan
|
||||
// kupac) — maloprodaja bez klijenta ide samo preko fiskalizacije, isto kao u Prodaji.
|
||||
if h.modulUkljucen(r.Context(), "pdv") {
|
||||
// Preskoči ako KIR zapis za ovaj nalog već postoji (ponovni ulazak u Preuzeto).
|
||||
if postojiKir, _ := h.PdvKirRepo.PostojiZaIzvor(r.Context(), "servis", id); h.modulUkljucen(r.Context(), "pdv") && !postojiKir {
|
||||
nalog, _ := h.ServisRepo.DohvatiID(r.Context(), id)
|
||||
if nalog != nil && !nalog.PopravkaOdbijena && nalog.KlijentID != nil {
|
||||
kupacNaziv, kupacPib, kupacMesto := "", "", ""
|
||||
@@ -2229,29 +2233,8 @@ func (h *Handler) PromeniStatus(w http.ResponseWriter, r *http.Request) {
|
||||
radovi, _ := h.ServisniRadoviRepo.DohvatiZaNalog(r.Context(), id)
|
||||
delovi, _ := h.ServisniDeloviRepo.DohvatiZaNalog(r.Context(), id)
|
||||
|
||||
kir := model.PdvKir{
|
||||
DatumPrometa: time.Now(),
|
||||
DatumKnjizenja: time.Now(),
|
||||
BrojDokumenta: nalog.BrojNaloga,
|
||||
KupacNaziv: kupacNaziv,
|
||||
KupacPib: kupacPib,
|
||||
KupacMesto: kupacMesto,
|
||||
Izvor: "servis",
|
||||
IzvorID: &id,
|
||||
}
|
||||
// cena_komada rada/dela je NETO; PDV se dodaje naviše po stvarnoj stopi
|
||||
for _, r := range radovi {
|
||||
if r.Predlozeno {
|
||||
continue
|
||||
}
|
||||
kir.DodajNeto(r.Ukupno(), r.PdvStopa)
|
||||
}
|
||||
for _, d := range delovi {
|
||||
if d.Predlozeno {
|
||||
continue
|
||||
}
|
||||
kir.DodajNeto(d.Ukupno(), d.PdvStopa)
|
||||
}
|
||||
sada := time.Now()
|
||||
kir := model.KirIzServisa(*nalog, radovi, delovi, kupacNaziv, kupacPib, kupacMesto, sada, sada)
|
||||
if kir.Ukupno > 0 {
|
||||
if _, e := h.PdvKirRepo.Kreiraj(r.Context(), &kir); e != nil {
|
||||
slog.Error("auto-upis u KIR za servis nije uspeo", "servis_id", id, "error", e)
|
||||
@@ -2259,8 +2242,9 @@ func (h *Handler) PromeniStatus(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
}
|
||||
// auto-KPO za servisni nalog
|
||||
if h.modulUkljucen(r.Context(), "kpo") && iznos > 0 {
|
||||
// auto-KPO za servisni nalog — preskoči ako zapis već postoji (ponovni ulazak u Preuzeto)
|
||||
postojiKpo, _ := h.KpoRepo.PostojiZaIzvor(r.Context(), "servis", id)
|
||||
if h.modulUkljucen(r.Context(), "kpo") && iznos > 0 && !postojiKpo {
|
||||
nalogKpo, _ := h.ServisRepo.DohvatiID(r.Context(), id)
|
||||
if nalogKpo != nil {
|
||||
kpoZ := model.KpoZapis{
|
||||
|
||||
Reference in New Issue
Block a user