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

37
app.py
View File

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