From fdcfaff80ebe3aaf2e12b5df98afaf53d5dbea68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Thu, 25 Sep 2025 16:30:36 +0200 Subject: [PATCH] =?UTF-8?q?fix=20w=20dodawaniu=20zbi=C3=B3rki?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/app.py b/app.py index 69e4300..0bc9249 100644 --- a/app.py +++ b/app.py @@ -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 ))