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 = (
|
success_text = (
|
||||||
f"Gesprächstermin für {selected_package} wurde an das Team gesendet."
|
f"Gesprächstermin für {selected_package} wurde an das Team gesendet."
|
||||||
if booking_flow == "consultation"
|
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")
|
flash(success_text, "success")
|
||||||
if booking_flow == "payment":
|
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'])
|
@app.route('/admin/instances', methods=['GET', 'POST'])
|
||||||
@admin_required
|
@admin_required
|
||||||
def admin_instances():
|
def admin_instances():
|
||||||
@@ -3218,6 +3251,18 @@ def admin_invoices():
|
|||||||
if prov_client:
|
if prov_client:
|
||||||
prov_client.close()
|
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:
|
elif action == "update" and invoice_id:
|
||||||
amount_text = _sanitize_text(request.form.get("amount_eur") or "0", 20)
|
amount_text = _sanitize_text(request.form.get("amount_eur") or "0", 20)
|
||||||
invoice_number = _sanitize_text(request.form.get("invoice_number") or "", 120)
|
invoice_number = _sanitize_text(request.form.get("invoice_number") or "", 120)
|
||||||
|
|||||||
@@ -104,6 +104,11 @@
|
|||||||
<input type="hidden" name="prov_id" value="{{ prov.id }}">
|
<input type="hidden" name="prov_id" value="{{ prov.id }}">
|
||||||
<button type="submit">Konfiguration ausführen</button>
|
<button type="submit">Konfiguration ausführen</button>
|
||||||
</form>
|
</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>
|
</article>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -68,7 +68,13 @@
|
|||||||
<td>{{ prov.package_label or prov.package }}</td>
|
<td>{{ prov.package_label or prov.package }}</td>
|
||||||
<td>{{ prov.subdomain }}</td>
|
<td>{{ prov.subdomain }}</td>
|
||||||
<td>{{ '%.2f'|format(prov.amount_eur or 0) }} EUR</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>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user