changes to the booking processin g

This commit is contained in:
2026-08-25 21:31:35 +02:00
parent 4a92b2058d
commit b7a1b70cf7
+15 -19
View File
@@ -1,4 +1,4 @@
from flask import Flask, render_template, request, jsonify, flash, redirect, url_for, get_flashed_messages, session, send_file, after_this_request, abort, send_from_directory from flask import Flask, render_template, request, jsonify, flash, redirect, url_for, get_flashed_messages, session, send_file, after_this_request, abort, send_from_directory, current_app
import os import os
import json import json
import atexit import atexit
@@ -2174,7 +2174,7 @@ def background_booking_provisioning(app_instance, prov_id, subdomain, modules_to
# 1. Set Status to In Progress # 1. Set Status to In Progress
req_col.update_one({"_id": ObjectId(prov_id)}, {"$set": {"provision_status": "in_progress"}}) req_col.update_one({"_id": ObjectId(prov_id)}, {"$set": {"provision_status": "in_progress"}})
# 2. Dynamically determine next Port and Password (Proven working logic) # 2. Dynamically determine next Port and Password
existing_tenants = Instance.list() existing_tenants = Instance.list()
used_ports = [t['port'] for t in existing_tenants if 'port' in t] used_ports = [t['port'] for t in existing_tenants if 'port' in t]
next_port = max(used_ports) + 1 if used_ports else 10002 next_port = max(used_ports) + 1 if used_ports else 10002
@@ -2186,7 +2186,6 @@ def background_booking_provisioning(app_instance, prov_id, subdomain, modules_to
raise Exception("Tenant shell creation failed (Instance.new returned False)") raise Exception("Tenant shell creation failed (Instance.new returned False)")
# 4. Enable selected Modules # 4. Enable selected Modules
# Always enable "starter" as a baseline if needed, then the booked ones
if "starter" not in modules_to_provision: if "starter" not in modules_to_provision:
Instance.edit(subdomain, "starter") Instance.edit(subdomain, "starter")
@@ -2249,6 +2248,7 @@ def background_booking_provisioning(app_instance, prov_id, subdomain, modules_to
finally: finally:
req_client.close() req_client.close()
@app.route('/booking/payment', methods=['GET', 'POST']) @app.route('/booking/payment', methods=['GET', 'POST'])
@login_required @login_required
def booking_payment(): def booking_payment():
@@ -2379,7 +2379,6 @@ def booking_payment():
raw_base = form_data.get("school_name") or session.get("username") or booking_number raw_base = form_data.get("school_name") or session.get("username") or booking_number
base = _slugify_subdomain(raw_base).lower()[:51] base = _slugify_subdomain(raw_base).lower()[:51]
# Subdomain-Prüfung über das korrekte Instance Model
try: try:
existing_tenants = Instance.list() or [] existing_tenants = Instance.list() or []
existing_subdomains = [ existing_subdomains = [
@@ -2424,30 +2423,27 @@ def booking_payment():
valid_modules = set(BOOKING_PACKAGE_MAP.keys()) valid_modules = set(BOOKING_PACKAGE_MAP.keys())
modules_to_provision = {pkg for pkg in package_list if pkg in valid_modules} modules_to_provision = {pkg for pkg in package_list if pkg in valid_modules}
# Flask App Context für den Thread sicher abrufen app_obj = current_app._get_current_object()
app_obj = app
user_id = session.get("user_id") user_id = session.get("user_id")
user_email = session.get("email") or form_data.get("contact_email") user_email = session.get("email") or form_data.get("contact_email")
try: thread = threading.Thread(
thread = threading.Thread( target=background_booking_provisioning,
target=background_booking_provisioning, args=(app_obj, prov_id, subdomain, modules_to_provision, user_id, form_data["school_name"], user_email)
args=(app_obj, prov_id, subdomain, modules_to_provision, user_id, form_data["school_name"], user_email) )
) thread.start()
thread.start() print(f"[INFO] Background provisioning gestartet für Subdomain: {subdomain}")
print(f"[INFO] Background provisioning gestartet für Subdomain: {subdomain}")
except Exception as thread_err:
print(f"[ERROR] Fehler beim Starten des Background Threads: {thread_err}")
flash(f"Buchung für {selected_package} wurde erfasst. Die Instanz wird jetzt eingerichtet.", "success") flash(f"Buchung für {selected_package} wurde erfasst. Die Instanz wird jetzt eingerichtet.", "success")
return redirect(url_for("my_instance_management")) return redirect(url_for("my_instance_management"))
except PyMongoError as pe: except Exception as e:
print(f"[ERROR] Database error in booking_payment: {pe}") print(f"[FATAL ERROR] In booking_payment Route:")
flash("Buchungsanfrage konnte nicht gesendet werden. Bitte versuchen Sie es erneut.", "error") traceback.print_exc()
flash("Buchungsanfrage konnte nicht gesendet werden. Ein unerwarteter Fehler ist aufgetreten.", "error")
return render_template("schnell_buchung.html", **review_data) return render_template("schnell_buchung.html", **review_data)
@app.route('/instance_request/delete', methods=['POST']) @app.route('/instance_request/delete', methods=['POST'])
@login_required @login_required
def instance_request_delete(): def instance_request_delete():