From 1841623ff6e9afdf537ccf582044092998040c7f Mon Sep 17 00:00:00 2001
From: AIIrondev
Date: Fri, 28 Aug 2026 14:40:23 +0200
Subject: [PATCH] removal of provisioning
---
Website/main.py | 152 ------------
Website/templates/admin_invoices.html | 53 +---
Website/templates/my_invoices.html | 345 ++++++++++++++------------
3 files changed, 193 insertions(+), 357 deletions(-)
diff --git a/Website/main.py b/Website/main.py
index 0181827..46eeffb 100644
--- a/Website/main.py
+++ b/Website/main.py
@@ -3200,7 +3200,6 @@ def admin_invoices():
if request.method == 'POST':
action = _sanitize_text(request.form.get("action") or "", 50)
invoice_id = _sanitize_text(request.form.get("invoice_id") or "", 64)
- prov_id = _sanitize_text(request.form.get("prov_id") or "", 64)
try:
client, col = _get_collection("invoices")
@@ -3238,157 +3237,6 @@ def admin_invoices():
)
flash("Rechnung angelegt.", "success")
- elif action == "create_from_provision" and prov_id:
- # Create an invoice from an instance request
- req_client = None
- try:
- req_client, req_col = _get_collection("instance_requests")
- prov = req_col.find_one({"_id": ObjectId(prov_id)})
- if not prov:
- flash("Instanz-Anfrage nicht gefunden.", "error")
- return redirect(url_for("admin_invoices"))
-
- username = prov.get("username") or ""
- invoice_number = f"INV-{datetime.utcnow().strftime('%Y%m%d%H%M%S')}"
- period = _sanitize_text(request.form.get("period") or prov.get("period") or "Sofortbuchung", 20)
- due_date = _sanitize_text(request.form.get("due_date") or date.today().isoformat(), 20)
- amount = float(prov.get("amount_eur") or 0.0)
-
- col.insert_one(
- {
- "username": username,
- "invoice_number": invoice_number,
- "period": period,
- "amount_eur": amount,
- "status": "Zu prüfen",
- "due_date": due_date,
- "pdf_path": "",
- "created_at": _utc_now_iso(),
- "source": "booking_payment",
- "booking_flow": prov.get("booking_flow"),
- "booking_package": prov.get("package"),
- "booking_package_label": prov.get("package_label"),
- "booking_data": prov.get("booking_data"),
- "assigned_admin_username": prov.get("assigned_admin_username"),
- "assigned_admin_display_name": prov.get("assigned_admin_display_name"),
- "assigned_admin_email": prov.get("assigned_admin_email"),
- }
- )
-
- req_col.update_one({"_id": prov.get("_id")}, {"$set": {"provision_status": "invoice_created", "updated_at": _utc_now_iso()}})
- flash("Rechnung aus Instanz-Anfrage erstellt.", "success")
- except Exception:
- flash("Fehler beim Erstellen der Rechnung aus Instanz-Anfrage.", "error")
- finally:
- if req_client:
- req_client.close()
-
- elif action == "update_provision" and prov_id:
- # Update provision request status (accept/reject/complete)
- new_status = _sanitize_text(request.form.get("prov_status") or "", 40)
- req_client = None
- try:
- req_client, req_col = _get_collection("instance_requests")
- req_col.update_one({"_id": ObjectId(prov_id)}, {"$set": {"provision_status": new_status, "updated_at": _utc_now_iso()}})
- flash("Instanz-Anfrage aktualisiert.", "success")
- except Exception:
- flash("Instanz-Anfrage konnte nicht aktualisiert werden.", "error")
- finally:
- if req_client:
- req_client.close()
- elif action in {"run_provision", "retry_provision", "configure_provision"} and prov_id:
- # Admin-triggered provisioning actions: start/retry/configure
- req_client = None
- try:
- req_client, req_col = _get_collection("instance_requests")
- prov = req_col.find_one({"_id": ObjectId(prov_id)})
- if not prov:
- flash("Instanz-Anfrage nicht gefunden.", "error")
- return redirect(url_for("admin_invoices"))
-
- subdomain = prov.get("subdomain") or _slugify_subdomain(prov.get("booking_data", {}).get("school_name") or prov.get("username") or prov.get("booking_number") or "prov")
- provision_status = prov.get("provision_status") or "not_started"
- provision_port = prov.get("provision_port") or None
- provision_error = ""
- provision_config_ok = prov.get("provision_config_ok") or False
-
- if action in {"run_provision", "retry_provision"}:
- try:
- port = steering.instace.new(subdomain)
- except Exception as e:
- port = False
- provision_error = str(e)
-
- if port and port is not False:
- provision_status = "started"
- try:
- provision_port = int(port) if isinstance(port, (int, str)) and str(port).isdigit() else port
- except Exception:
- provision_port = port
- else:
- provision_status = "failed"
- if not provision_error:
- provision_error = "Provisioning script returned failure"
-
- if action == "configure_provision" or (action in {"run_provision", "retry_provision"} and prov.get("package")):
- module = prov.get("package")
- if module in {"inventarsystem", "buecherei", "terminverwaltung", "emailversand", "starter", "advanced"}:
- try:
- edit_ok = steering.instace.edit(subdomain, module)
- provision_config_ok = bool(edit_ok)
- if not provision_config_ok and not provision_error:
- provision_error = f"Module configuration failed for {module}"
- except Exception as e:
- provision_config_ok = False
- provision_error = str(e)
-
- req_col.update_one({"_id": prov.get("_id")}, {"$set": {"provision_status": provision_status, "provision_port": provision_port or "", "provision_config_ok": provision_config_ok, "provision_error": provision_error, "updated_at": _utc_now_iso()}})
- flash("Provisionierungsaktion ausgeführt.", "success")
- except Exception as e:
- flash(f"Provisionierungsaktion fehlgeschlagen: {str(e)}", "error")
- finally:
- if req_client:
- req_client.close()
-
- elif action == "delete_instance_request" and prov_id:
- req_client = None
- try:
- req_client, req_col = _get_collection("instance_requests")
- req_col.delete_one({"_id": ObjectId(prov_id)})
- flash("Instanz-Anfrage gelöscht.", "success")
- except Exception:
- flash("Instanz-Anfrage konnte nicht gelöscht werden.", "error")
- finally:
- if req_client:
- req_client.close()
-
- elif action == "update" and invoice_id:
- amount_text = _sanitize_text(request.form.get("amount_eur") or "0", 20)
- invoice_number = _sanitize_text(request.form.get("invoice_number") or "", 120)
- pdf_path = _save_invoice_pdf(request.files.get("invoice_pdf"), invoice_number or "invoice")
- try:
- amount = float(amount_text)
- except ValueError:
- amount = 0.0
-
- update_payload = {
- "invoice_number": invoice_number,
- "period": _sanitize_text(request.form.get("period") or "", 20),
- "status": _sanitize_text(request.form.get("status") or "Zu prüfen", 40),
- "due_date": _sanitize_text(request.form.get("due_date") or "", 20),
- "amount_eur": amount,
- }
- if pdf_path:
- update_payload["pdf_path"] = pdf_path
-
- col.update_one(
- {"_id": ObjectId(invoice_id)},
- {
- "$set": update_payload
- },
- )
- flash("Rechnung aktualisiert.", "success")
-
elif action == "delete" and invoice_id:
col.delete_one({"_id": ObjectId(invoice_id)})
flash("Rechnung gelöscht.", "success")
diff --git a/Website/templates/admin_invoices.html b/Website/templates/admin_invoices.html
index c2bb520..efb12f6 100644
--- a/Website/templates/admin_invoices.html
+++ b/Website/templates/admin_invoices.html
@@ -50,7 +50,7 @@
Ansehen
{% endif %}
-
+
{% if item.hauptvertrag_data is defined or item.get('hauptvertrag_filename') %}
Hauptvertrag (aus MongoDB):
@@ -81,57 +81,6 @@
{% else %}
Noch keine Rechnungen vorhanden.
{% endfor %}
-
- {% if provision_requests %}
- Instanz-Anfragen
- {% for prov in provision_requests %}
-
- {{ prov.booking_number or prov.booking_number }}
- Nutzer: {{ prov.username }} | Subdomain: {{ prov.subdomain }}
- Paket: {{ prov.package_label or prov.package }} | Betrag: {{ '%.2f'|format(prov.amount_eur or 0) }} EUR
- Status: {{ prov.provision_status or 'not_started' }}{% if prov.provision_error %} | Fehler: {{ prov.provision_error }}{% endif %}
- Kontaktdaten: {{ prov.booking_data.get('contact_person', '-') }} | {{ prov.booking_data.get('contact_email', '-') }} | {{ prov.booking_data.get('billing_city', '-') }}
-
-
-
-
-
-
-
- {% endfor %}
- {% endif %}
diff --git a/Website/templates/my_invoices.html b/Website/templates/my_invoices.html
index 9f82f34..b1e4e1a 100644
--- a/Website/templates/my_invoices.html
+++ b/Website/templates/my_invoices.html
@@ -64,16 +64,14 @@
Vertrag öffnen
{% else %}
-