feat: Add provision deletion functionality with confirmation in admin and my invoices views

This commit is contained in:
2026-05-27 13:01:32 +02:00
parent a09e7add03
commit 3dfa68554e
3 changed files with 58 additions and 2 deletions
+46 -1
View File
@@ -2159,7 +2159,7 @@ def booking_payment():
success_text = (
f"Gesprächstermin für {selected_package} wurde an das Team gesendet."
if booking_flow == "consultation"
else f"Buchung für {selected_package} wurde erfolgreich erfasst."
else f"Buchung für {selected_package} wurde erfolgreich erfasst. Die Rechnung wird per E-Mail versendet."
)
flash(success_text, "success")
if booking_flow == "payment":
@@ -2169,6 +2169,39 @@ def booking_payment():
@app.route('/provision/delete', methods=['POST'])
@login_required
def provision_delete():
prov_id = _sanitize_text(request.form.get("prov_id") or "", 64)
if not prov_id:
flash("Ungültige Anfrage.", "error")
return redirect(url_for("my_invoices"))
prov_client = None
try:
prov_client, prov_col = _get_collection("provision_requests")
prov = prov_col.find_one({"_id": ObjectId(prov_id)})
if not prov:
flash("Provisionierungsanfrage nicht gefunden.", "error")
return redirect(url_for("my_invoices"))
# Only owner or admin can delete
if prov.get("username") != session.get("username") and not session.get("is_admin"):
flash("Keine Berechtigung zum Löschen dieser Anfrage.", "error")
return redirect(url_for("my_invoices"))
prov_col.delete_one({"_id": prov.get("_id")})
flash("Provisionierungsanfrage gelöscht.", "success")
except Exception:
flash("Provisionierungsanfrage konnte nicht gelöscht werden.", "error")
finally:
if prov_client:
prov_client.close()
return redirect(url_for("my_invoices"))
@app.route('/admin/instances', methods=['GET', 'POST'])
@admin_required
def admin_instances():
@@ -3218,6 +3251,18 @@ def admin_invoices():
if prov_client:
prov_client.close()
elif action == "delete_provision" and prov_id:
prov_client = None
try:
prov_client, prov_col = _get_collection("provision_requests")
prov_col.delete_one({"_id": ObjectId(prov_id)})
flash("Provisionierungsanfrage gelöscht.", "success")
except Exception:
flash("Provisionierungsanfrage konnte nicht gelöscht werden.", "error")
finally:
if prov_client:
prov_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)
+5
View File
@@ -104,6 +104,11 @@
<input type="hidden" name="prov_id" value="{{ prov.id }}">
<button type="submit">Konfiguration ausführen</button>
</form>
<form method="post" style="display:inline-block; margin-right:0.6rem;">
<input type="hidden" name="action" value="delete_provision">
<input type="hidden" name="prov_id" value="{{ prov.id }}">
<button type="submit" class="danger">Löschen</button>
</form>
</article>
{% endfor %}
{% endif %}
+7 -1
View File
@@ -68,7 +68,13 @@
<td>{{ prov.package_label or prov.package }}</td>
<td>{{ prov.subdomain }}</td>
<td>{{ '%.2f'|format(prov.amount_eur or 0) }} EUR</td>
<td>{{ prov.provision_status or 'not_started' }}</td>
<td>
{{ prov.provision_status or 'not_started' }}
<form method="post" action="{{ url_for('provision_delete') }}" style="display:inline-block; margin-left:0.6rem;">
<input type="hidden" name="prov_id" value="{{ prov.id }}">
<button type="submit" class="danger">Löschen</button>
</form>
</td>
</tr>
{% else %}
<tr>