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 json
import atexit
@@ -2174,7 +2174,7 @@ def background_booking_provisioning(app_instance, prov_id, subdomain, modules_to
# 1. Set Status to 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()
used_ports = [t['port'] for t in existing_tenants if 'port' in t]
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)")
# 4. Enable selected Modules
# Always enable "starter" as a baseline if needed, then the booked ones
if "starter" not in modules_to_provision:
Instance.edit(subdomain, "starter")
@@ -2249,6 +2248,7 @@ def background_booking_provisioning(app_instance, prov_id, subdomain, modules_to
finally:
req_client.close()
@app.route('/booking/payment', methods=['GET', 'POST'])
@login_required
def booking_payment():
@@ -2379,7 +2379,6 @@ def booking_payment():
raw_base = form_data.get("school_name") or session.get("username") or booking_number
base = _slugify_subdomain(raw_base).lower()[:51]
# Subdomain-Prüfung über das korrekte Instance Model
try:
existing_tenants = Instance.list() or []
existing_subdomains = [
@@ -2424,30 +2423,27 @@ def booking_payment():
valid_modules = set(BOOKING_PACKAGE_MAP.keys())
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 = app
app_obj = current_app._get_current_object()
user_id = session.get("user_id")
user_email = session.get("email") or form_data.get("contact_email")
try:
thread = threading.Thread(
target=background_booking_provisioning,
args=(app_obj, prov_id, subdomain, modules_to_provision, user_id, form_data["school_name"], user_email)
)
thread.start()
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}")
thread = threading.Thread(
target=background_booking_provisioning,
args=(app_obj, prov_id, subdomain, modules_to_provision, user_id, form_data["school_name"], user_email)
)
thread.start()
print(f"[INFO] Background provisioning gestartet für Subdomain: {subdomain}")
flash(f"Buchung für {selected_package} wurde erfasst. Die Instanz wird jetzt eingerichtet.", "success")
return redirect(url_for("my_instance_management"))
except PyMongoError as pe:
print(f"[ERROR] Database error in booking_payment: {pe}")
flash("Buchungsanfrage konnte nicht gesendet werden. Bitte versuchen Sie es erneut.", "error")
except Exception as e:
print(f"[FATAL ERROR] In booking_payment Route:")
traceback.print_exc()
flash("Buchungsanfrage konnte nicht gesendet werden. Ein unerwarteter Fehler ist aufgetreten.", "error")
return render_template("schnell_buchung.html", **review_data)
@app.route('/instance_request/delete', methods=['POST'])
@login_required
def instance_request_delete():