feat: Add provision deletion functionality with confirmation in admin and my invoices views
This commit is contained in:
+46
-1
@@ -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)
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user