fix w dodawaniu zbiórki

This commit is contained in:
Mateusz Gruszczyński
2025-09-25 16:30:36 +02:00
parent abb8ee0ae7
commit fdcfaff80e

31
app.py
View File

@@ -396,11 +396,16 @@ def formularz_zbiorek(zbiorka_id=None):
flash("Brak uprawnień", "danger") flash("Brak uprawnień", "danger")
return redirect(url_for("index")) return redirect(url_for("index"))
# Tryb # Tryb: dodawanie vs edycja
is_edit = zbiorka_id is not None is_edit = zbiorka_id is not None
# Obiekt zbiórki ładujemy TYLKO przy edycji
zb = None
if is_edit:
zb = db.session.get(Zbiorka, zbiorka_id) zb = db.session.get(Zbiorka, zbiorka_id)
if zb is None: if zb is None:
abort(404) abort(404)
global_settings = GlobalSettings.query.first() global_settings = GlobalSettings.query.first()
if request.method == "POST": if request.method == "POST":
@@ -408,11 +413,10 @@ def formularz_zbiorek(zbiorka_id=None):
nazwa = request.form.get("nazwa", "").strip() nazwa = request.form.get("nazwa", "").strip()
opis = request.form.get("opis", "").strip() opis = request.form.get("opis", "").strip()
# IBAN/telefon — oczyść z nadmiarowych znaków odstępu (zostaw spacje w prezentacji frontu)
numer_konta = request.form.get("numer_konta", "").strip() numer_konta = request.form.get("numer_konta", "").strip()
numer_telefonu_blik = request.form.get("numer_telefonu_blik", "").strip() numer_telefonu_blik = request.form.get("numer_telefonu_blik", "").strip()
# Cel — walidacja liczby (Decimal, nie float) # Cel — Decimal, > 0
try: try:
cel_str = request.form.get("cel", "").replace(",", ".").strip() cel_str = request.form.get("cel", "").replace(",", ".").strip()
cel = Decimal(cel_str) cel = Decimal(cel_str)
@@ -420,18 +424,18 @@ def formularz_zbiorek(zbiorka_id=None):
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")
# render z dotychczasowo wpisanymi danymi (w trybie dodawania tworzymy tymczasowy obiekt) # Utwórz tymczasowy obiekt do ponownego renderu formularza
temp_zb = zb or Zbiorka( temp_zb = (zb or Zbiorka(
nazwa=nazwa, nazwa=nazwa,
opis=opis, opis=opis,
numer_konta=numer_konta, numer_konta=numer_konta,
numer_telefonu_blik=numer_telefonu_blik, numer_telefonu_blik=numer_telefonu_blik,
cel=None, cel=None,
ukryj_kwote=("ukryj_kwote" in request.form), ukryj_kwote=("ukryj_kwote" in request.form),
) ))
return render_template( return render_template(
"admin/formularz_zbiorek.html", "admin/formularz_zbiorek.html",
zbiorka=temp_zb if is_edit else None if zb is None else temp_zb, zbiorka=temp_zb,
global_settings=global_settings, global_settings=global_settings,
) )
@@ -460,13 +464,12 @@ def formularz_zbiorek(zbiorka_id=None):
zb.opis = opis zb.opis = opis
zb.numer_konta = numer_konta zb.numer_konta = numer_konta
zb.numer_telefonu_blik = numer_telefonu_blik zb.numer_telefonu_blik = numer_telefonu_blik
zb.cel = cel # ❗ bez float(cel) — zostaje Decimal zb.cel = cel # pozostaje Decimal
zb.ukryj_kwote = ukryj_kwote zb.ukryj_kwote = ukryj_kwote
db.session.commit() # najpierw zapisz bazowe pola db.session.commit() # zapisz bazowe pola
# Nadpisz listę produktów (czyść i dodaj od nowa dla prostoty) # Nadpisz listę produktów (czyść i dodaj od nowa dla prostoty)
zb.przedmioty.clear() zb.przedmioty.clear()
for i, raw_name in enumerate(names): for i, raw_name in enumerate(names):
name = (raw_name or "").strip() name = (raw_name or "").strip()
if not name: if not name:
@@ -479,7 +482,7 @@ def formularz_zbiorek(zbiorka_id=None):
zbiorka_id=zb.id, zbiorka_id=zb.id,
nazwa=name, nazwa=name,
link=link, link=link,
cena=cena_val, # Decimal albo None cena=cena_val,
kupione=kupione_val kupione=kupione_val
)) ))
@@ -493,11 +496,11 @@ def formularz_zbiorek(zbiorka_id=None):
opis=opis, opis=opis,
numer_konta=numer_konta, numer_konta=numer_konta,
numer_telefonu_blik=numer_telefonu_blik, numer_telefonu_blik=numer_telefonu_blik,
cel=cel, # ❗ Decimal cel=cel, # Decimal
ukryj_kwote=ukryj_kwote, ukryj_kwote=ukryj_kwote,
) )
db.session.add(nowa) db.session.add(nowa)
db.session.commit() # potrzebujemy ID nowej zbiórki db.session.commit() # potrzebne ID
# Dodaj produkty do nowej zbiórki # Dodaj produkty do nowej zbiórki
for i, raw_name in enumerate(names): for i, raw_name in enumerate(names):
@@ -512,7 +515,7 @@ def formularz_zbiorek(zbiorka_id=None):
zbiorka_id=nowa.id, zbiorka_id=nowa.id,
nazwa=name, nazwa=name,
link=link, link=link,
cena=cena_val, # Decimal albo None cena=cena_val,
kupione=kupione_val kupione=kupione_val
)) ))