feat: Enhance booking flow with form data handling and validation

This commit is contained in:
2026-05-23 00:03:40 +02:00
parent beb9cb34f4
commit 0a11d366a5
3 changed files with 123 additions and 5 deletions
+40 -1
View File
@@ -1862,6 +1862,20 @@ def booking_payment():
return redirect(url_for("preise"))
flow_config = BOOKING_FLOW_MAP[booking_flow]
form_data = {
"contact_person": _sanitize_text(request.values.get("contact_person") or "", 120),
"school_name": _sanitize_text(request.values.get("school_name") or "", 160),
"contact_email": _sanitize_text(request.values.get("contact_email") or "", 160).lower(),
"contact_phone": _sanitize_text(request.values.get("contact_phone") or "", 60),
"billing_street": _sanitize_text(request.values.get("billing_street") or "", 160),
"billing_zip": _sanitize_text(request.values.get("billing_zip") or "", 20),
"billing_city": _sanitize_text(request.values.get("billing_city") or "", 120),
"notes": _sanitize_text(request.values.get("notes") or "", 600),
}
if request.method == "GET" and not form_data["contact_person"]:
form_data["contact_person"] = session.get("display_name") or session.get("username") or ""
review_data = {
"package": selected_package,
"package_key": package_raw,
@@ -1871,13 +1885,37 @@ def booking_payment():
"confirm_label": flow_config["confirm_label"],
"username": session.get("username"),
"display_name": session.get("display_name") or session.get("username"),
"form_data": form_data,
}
if request.method == "GET":
return render_template("schnell_buchung.html", **review_data)
required_fields = {
"contact_person": "Ansprechpartner",
"school_name": "Schule/Einrichtung",
"contact_email": "E-Mail",
"billing_street": "Straße",
"billing_zip": "PLZ",
"billing_city": "Ort",
}
missing_labels = [label for key, label in required_fields.items() if not form_data.get(key)]
if missing_labels:
flash(f"Bitte folgende Pflichtfelder ausfüllen: {', '.join(missing_labels)}.", "error")
return render_template("schnell_buchung.html", **review_data)
if not _validate_email(form_data["contact_email"]):
flash("Bitte eine gültige E-Mail-Adresse angeben.", "error")
return render_template("schnell_buchung.html", **review_data)
message = (
f"{flow_config['message_prefix']} {selected_package} {flow_config['message_suffix']}"
f"{flow_config['message_prefix']} {selected_package} {flow_config['message_suffix']}\n"
f"Ansprechpartner: {form_data['contact_person']}\n"
f"Schule: {form_data['school_name']}\n"
f"E-Mail: {form_data['contact_email']}\n"
f"Telefon: {form_data['contact_phone'] or '-'}\n"
f"Rechnungsadresse: {form_data['billing_street']}, {form_data['billing_zip']} {form_data['billing_city']}\n"
f"Notizen: {form_data['notes'] or '-'}"
)
client = None
@@ -1892,6 +1930,7 @@ def booking_payment():
"created_at": _utc_now_iso(),
"booking_flow": booking_flow,
"booking_package": package_raw,
"booking_data": form_data,
}
)
except PyMongoError: