removal of provisioning
This commit is contained in:
-152
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user