Servis: 'Primljeno' iznos se sad stvarno šalje na fiskalni račun
Input 'Primljeno (din)' u modalu za preuzimanje je bio VAN <form> koji se submituje — koristio se samo za JS prikaz kusura na ekranu, ali server ga nikad nije primao. Fiskalni račun je uvek prikazivao Gotovina=dug (posle avansa), Povraćaj=0,00, bez obzira šta je kupac stvarno predao. Premešten input u POST formu; fiskalizujServis sad prima primljeno i šalje max(dug, primljeno) kao Payment.Amount — PFR sam računa kusur, isto kao kod Prodaje (fiskal.NapraviZahtev). NAPOMENA: kad nalog ima avans, PFR i dalje računa povraćaj protiv PUNOG iznosa stavki (ne umanjenog za avans), jer se avans nikad ne fiskalizuje kao posebna transakcija — PFR ga ne 'vidi'. Za tačan kusur i u tom slučaju bi avans morao biti fiskalizovan kao Advance tip transakcije pri uplati; to je veći, zaseban zahvat.
This commit is contained in:
@@ -2307,6 +2307,9 @@ func (h *Handler) PromeniStatus(w http.ResponseWriter, r *http.Request) {
|
||||
if nacin == "" {
|
||||
nacin = "Gotovina"
|
||||
}
|
||||
// primljeno je iznos koji je klijent stvarno predao (za tačan kusur na fiskalnom
|
||||
// računu, isto kao kod Prodaje — v. fiskal.NapraviZahtev) — 0 ako nije unet
|
||||
primljeno, _ := strconv.ParseFloat(strings.TrimSpace(r.FormValue("primljeno")), 64)
|
||||
iznosStr := strings.TrimSpace(r.FormValue("naplaceno"))
|
||||
iznos := 0.0
|
||||
if iznosStr != "" {
|
||||
@@ -2346,7 +2349,7 @@ func (h *Handler) PromeniStatus(w http.ResponseWriter, r *http.Request) {
|
||||
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)
|
||||
h.fiskalizujServis(r.Context(), id, klijent, nacin, iznos, primljeno)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2403,8 +2406,11 @@ func (h *Handler) PromeniStatus(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
// fiskalizujServis šalje fiskalni zahtev za servisni nalog pri preuzimanju.
|
||||
// Best-effort: greške se loguju, ne zaustavljaju promenu statusa.
|
||||
func (h *Handler) fiskalizujServis(ctx context.Context, servisID int64, klijent *fiskal.Klijent, nacinPlacanja string, iznos float64) {
|
||||
// Best-effort: greške se loguju, ne zaustavljaju promenu statusa. primljeno je
|
||||
// iznos koji je klijent stvarno predao — ako je veći od iznos (dug posle avansa),
|
||||
// na računu se iskazuje stvarno primljen iznos i PFR sam izračunava povraćaj
|
||||
// (isto kao fiskal.NapraviZahtev za Prodaju); 0 ili manje od duga → bez povraćaja.
|
||||
func (h *Handler) fiskalizujServis(ctx context.Context, servisID int64, klijent *fiskal.Klijent, nacinPlacanja string, iznos, primljeno float64) {
|
||||
nalog, err := h.ServisRepo.DohvatiID(ctx, servisID)
|
||||
if err != nil {
|
||||
slog.Error("fiskalizujServis: nije pronađen nalog", "id", servisID, "error", err)
|
||||
@@ -2437,12 +2443,17 @@ func (h *Handler) fiskalizujServis(ctx context.Context, servisID int64, klijent
|
||||
|
||||
kasir := h.imeKasira(ctx)
|
||||
|
||||
iznosPlacanja := iznos
|
||||
if primljeno > iznos {
|
||||
iznosPlacanja = primljeno
|
||||
}
|
||||
|
||||
zahtev := fiskal.InvoiceRequest{
|
||||
InvoiceRequest: fiskal.InvoiceRequestBody{
|
||||
InvoiceType: "Normal",
|
||||
TransactionType: "Sale",
|
||||
Payment: []fiskal.PaymentItem{
|
||||
{Amount: iznos, PaymentType: fiskal.TipPlacanja(nacinPlacanja)},
|
||||
{Amount: iznosPlacanja, PaymentType: fiskal.TipPlacanja(nacinPlacanja)},
|
||||
},
|
||||
Items: items,
|
||||
Cashier: kasir,
|
||||
@@ -2639,7 +2650,7 @@ func (h *Handler) RetryFiskalizacija(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
h.fiskalizujServis(r.Context(), id, klijent, nalog.NacinPlacanja, nalog.Naplaceno)
|
||||
h.fiskalizujServis(r.Context(), id, klijent, nalog.NacinPlacanja, nalog.Naplaceno, 0)
|
||||
|
||||
// provjeri da li je uspelo
|
||||
if fr, _ := h.FiskalRepo.DohvatiPoServisu(r.Context(), id); fr != nil {
|
||||
|
||||
Reference in New Issue
Block a user