From b88080e5ac81e727802c255ccaa05ed201e99689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Sun, 7 Dec 2025 14:03:22 +0100 Subject: [PATCH] parsowanie kwot --- app.py | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/app.py b/app.py index 74bfcb0..15ca514 100644 --- a/app.py +++ b/app.py @@ -239,6 +239,22 @@ def to_local(dt): return dt.astimezone(LOCAL_TZ) +def parse_amount(raw: str) -> Decimal: + if not raw or not str(raw).strip(): + raise InvalidOperation("empty amount") + norm = ( + str(raw) + .replace(" ", "") + .replace("\u00A0", "") + .replace(",", ".") + .strip() + ) + d = Decimal(norm) + if d <= 0: + raise InvalidOperation("amount must be > 0") + return d + + @app.template_filter("dt") def dt_filter(dt, fmt="%Y-%m-%d %H:%M"): try: @@ -457,14 +473,10 @@ def formularz_zbiorek(zbiorka_id=None): flash("Numer telefonu BLIK jest wymagany (kanał BLIK włączony).", "danger") return render_template("admin/formularz_zbiorek.html", zbiorka=_temp_obj(), global_settings=global_settings) - # Cel > 0 - cel_raw = (request.form.get("cel", "") or "") - cel_norm = cel_raw.replace(" ", "").replace("\u00A0", "").replace(",", ".").strip() + # Cel > 0 try: - if not cel_norm: - raise InvalidOperation - cel = Decimal(cel_norm) - if cel <= Decimal("0"): + cel = parse_amount(request.form.get("cel")) + if cel <= 0: raise InvalidOperation except (InvalidOperation, ValueError): flash("Podano nieprawidłową wartość dla celu zbiórki", "danger") @@ -476,12 +488,9 @@ def formularz_zbiorek(zbiorka_id=None): prices = request.form.getlist("item_cena[]") def _read_price(val: str): - if not val or not val.strip(): - return None try: - d = Decimal(val.replace(",", ".")) - return d if d >= 0 else None - except Exception: + return parse_amount(val) + except InvalidOperation: return None # Zapis @@ -578,7 +587,7 @@ def dodaj_wplate(zbiorka_id): if request.method == "POST": try: - kwota = Decimal(request.form.get("kwota", "").replace(",", ".")) + kwota = parse_amount(request.form.get("kwota")) if kwota <= 0: raise InvalidOperation except (InvalidOperation, ValueError): @@ -623,7 +632,7 @@ def edytuj_stan(zbiorka_id): abort(404) if request.method == "POST": try: - nowy_stan = Decimal(request.form.get("stan", "").replace(",", ".")) + nowy_stan = parse_amount(request.form.get("stan")) except (InvalidOperation, ValueError): flash("Nieprawidłowa wartość kwoty", "danger") return redirect(url_for("edytuj_stan", zbiorka_id=zbiorka_id)) @@ -781,7 +790,7 @@ def dodaj_wydatek(zbiorka_id): if request.method == "POST": try: - kwota = Decimal(request.form.get("kwota", "").replace(",", ".")) + kwota = parse_amount(request.form.get("kwota")) if kwota <= 0: raise InvalidOperation except (InvalidOperation, ValueError): @@ -892,7 +901,7 @@ def zapisz_wplate(wplata_id): abort(404) zb = w.zbiorka try: - nowa_kwota = Decimal(request.form.get("kwota", "").replace(",", ".")) + nowa_kwota = parse_amount(request.form.get("kwota")) if nowa_kwota <= 0: raise InvalidOperation except (InvalidOperation, ValueError): @@ -978,7 +987,7 @@ def zapisz_wydatek(wydatek_id): abort(404) zb = x.zbiorka try: - nowa_kwota = Decimal(request.form.get("kwota", "").replace(",", ".")) + nowa_kwota = parse_amount(request.form.get("kwota")) if nowa_kwota <= 0: raise InvalidOperation except (InvalidOperation, ValueError):