changes to the booking processin g
This commit is contained in:
+15
-19
@@ -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():
|
||||||
|
|||||||
Reference in New Issue
Block a user