removal of provisioning

This commit is contained in:
2026-08-28 14:40:23 +02:00
parent d81972e788
commit 1841623ff6
3 changed files with 193 additions and 357 deletions
-152
View File
@@ -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")