From fb7ed811ee35db34fc17799a0015687c02d028ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Wed, 1 Jul 2026 12:35:25 +0200 Subject: [PATCH] Prodaja: server-side validacija popusta i PDV stope po stavci MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit parseFormuProdaje je proveravala samo pozitivnu količinu i nenegativnu cenu. Popust preko 100% bi dao negativnu osnovicu/PDV, a pdv_stopa (hidden/JS polje) mogla je stići sa proizvoljnom vrednošću direktnim POST-om mimo forme — fiskal.OznakaPDV bi za takvu stopu tiho vratio pogrešnu poresku oznaku. Sada se popust ograničava na 0-100%, a pdv_stopa mora biti 0, 10 ili 20. --- internal/handler/prodaja.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/internal/handler/prodaja.go b/internal/handler/prodaja.go index 57c4c3a..beab185 100644 --- a/internal/handler/prodaja.go +++ b/internal/handler/prodaja.go @@ -468,12 +468,24 @@ func parseFormuProdaje(r *http.Request) (model.ProdajniNalog, []model.StavkaProd var pdvStopa float64 if i < len(pdvStope) { - pdvStopa, _ = strconv.ParseFloat(strings.TrimSpace(pdvStope[i]), 64) + pdvStopa, err = strconv.ParseFloat(strings.TrimSpace(pdvStope[i]), 64) + if err != nil { + return nalog, nil, "Neispravna PDV stopa u stavci." + } + } + if pdvStopa != 0 && pdvStopa != 10 && pdvStopa != 20 { + return nalog, nil, "PDV stopa mora biti 0, 10 ili 20." } var popust float64 if i < len(popusti) { - popust, _ = strconv.ParseFloat(strings.TrimSpace(popusti[i]), 64) + popust, err = strconv.ParseFloat(strings.TrimSpace(popusti[i]), 64) + if err != nil { + return nalog, nil, "Neispravan popust u stavci." + } + } + if popust < 0 || popust > 100 { + return nalog, nil, "Popust mora biti u opsegu 0–100%." } stavke = append(stavke, model.StavkaProdaje{