parsowanie kwot

This commit is contained in:
Mateusz Gruszczyński
2025-12-07 14:03:22 +01:00
parent 2c98d710f3
commit b88080e5ac

41
app.py
View File

@@ -239,6 +239,22 @@ def to_local(dt):
return dt.astimezone(LOCAL_TZ) 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") @app.template_filter("dt")
def dt_filter(dt, fmt="%Y-%m-%d %H:%M"): def dt_filter(dt, fmt="%Y-%m-%d %H:%M"):
try: try:
@@ -458,13 +474,9 @@ def formularz_zbiorek(zbiorka_id=None):
return render_template("admin/formularz_zbiorek.html", zbiorka=_temp_obj(), global_settings=global_settings) return render_template("admin/formularz_zbiorek.html", zbiorka=_temp_obj(), global_settings=global_settings)
# Cel > 0 # Cel > 0
cel_raw = (request.form.get("cel", "") or "")
cel_norm = cel_raw.replace(" ", "").replace("\u00A0", "").replace(",", ".").strip()
try: try:
if not cel_norm: cel = parse_amount(request.form.get("cel"))
raise InvalidOperation if cel <= 0:
cel = Decimal(cel_norm)
if cel <= Decimal("0"):
raise InvalidOperation raise InvalidOperation
except (InvalidOperation, ValueError): except (InvalidOperation, ValueError):
flash("Podano nieprawidłową wartość dla celu zbiórki", "danger") 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[]") prices = request.form.getlist("item_cena[]")
def _read_price(val: str): def _read_price(val: str):
if not val or not val.strip():
return None
try: try:
d = Decimal(val.replace(",", ".")) return parse_amount(val)
return d if d >= 0 else None except InvalidOperation:
except Exception:
return None return None
# Zapis # Zapis
@@ -578,7 +587,7 @@ def dodaj_wplate(zbiorka_id):
if request.method == "POST": if request.method == "POST":
try: try:
kwota = Decimal(request.form.get("kwota", "").replace(",", ".")) kwota = parse_amount(request.form.get("kwota"))
if kwota <= 0: if kwota <= 0:
raise InvalidOperation raise InvalidOperation
except (InvalidOperation, ValueError): except (InvalidOperation, ValueError):
@@ -623,7 +632,7 @@ def edytuj_stan(zbiorka_id):
abort(404) abort(404)
if request.method == "POST": if request.method == "POST":
try: try:
nowy_stan = Decimal(request.form.get("stan", "").replace(",", ".")) nowy_stan = parse_amount(request.form.get("stan"))
except (InvalidOperation, ValueError): except (InvalidOperation, ValueError):
flash("Nieprawidłowa wartość kwoty", "danger") flash("Nieprawidłowa wartość kwoty", "danger")
return redirect(url_for("edytuj_stan", zbiorka_id=zbiorka_id)) return redirect(url_for("edytuj_stan", zbiorka_id=zbiorka_id))
@@ -781,7 +790,7 @@ def dodaj_wydatek(zbiorka_id):
if request.method == "POST": if request.method == "POST":
try: try:
kwota = Decimal(request.form.get("kwota", "").replace(",", ".")) kwota = parse_amount(request.form.get("kwota"))
if kwota <= 0: if kwota <= 0:
raise InvalidOperation raise InvalidOperation
except (InvalidOperation, ValueError): except (InvalidOperation, ValueError):
@@ -892,7 +901,7 @@ def zapisz_wplate(wplata_id):
abort(404) abort(404)
zb = w.zbiorka zb = w.zbiorka
try: try:
nowa_kwota = Decimal(request.form.get("kwota", "").replace(",", ".")) nowa_kwota = parse_amount(request.form.get("kwota"))
if nowa_kwota <= 0: if nowa_kwota <= 0:
raise InvalidOperation raise InvalidOperation
except (InvalidOperation, ValueError): except (InvalidOperation, ValueError):
@@ -978,7 +987,7 @@ def zapisz_wydatek(wydatek_id):
abort(404) abort(404)
zb = x.zbiorka zb = x.zbiorka
try: try:
nowa_kwota = Decimal(request.form.get("kwota", "").replace(",", ".")) nowa_kwota = parse_amount(request.form.get("kwota"))
if nowa_kwota <= 0: if nowa_kwota <= 0:
raise InvalidOperation raise InvalidOperation
except (InvalidOperation, ValueError): except (InvalidOperation, ValueError):