feat: Add edit and delete functionality for Verwaltungskosten

- Add verwaltungskosten_delete view with confirmation page
- Add delete URL route and template
- Fix template action buttons to use proper URLs for edit/delete
- Include audit logging for deletions
- Add comprehensive delete confirmation with entry details
- Remove non-functional details button from action group
This commit is contained in:
2025-10-05 23:42:05 +02:00
parent ca3bf0f296
commit f04d93c7f0
4 changed files with 135 additions and 5 deletions

View File

@@ -219,6 +219,11 @@ urlpatterns = [
views.verwaltungskosten_edit,
name="verwaltungskosten_edit",
),
path(
"geschaeftsfuehrung/verwaltungskosten/<uuid:pk>/loeschen/",
views.verwaltungskosten_delete,
name="verwaltungskosten_delete",
),
path(
"verwaltungskosten/mark-paid/",
views.mark_expense_paid,

View File

@@ -4203,6 +4203,42 @@ def verwaltungskosten_edit(request, pk):
return render(request, "stiftung/verwaltungskosten_form.html", context)
@login_required
def verwaltungskosten_delete(request, pk):
"""Lösche Verwaltungskosten"""
from stiftung.models import Verwaltungskosten
verwaltungskosten = get_object_or_404(Verwaltungskosten, pk=pk)
if request.method == "POST":
bezeichnung = verwaltungskosten.bezeichnung
# Log the deletion
from stiftung.audit import log_action
log_action(
request=request,
action="delete",
entity_type="verwaltungskosten",
entity_id=str(verwaltungskosten.pk),
entity_name=bezeichnung,
description=f'Verwaltungskosten "{bezeichnung}" wurden gelöscht',
)
verwaltungskosten.delete()
messages.success(
request,
f'Verwaltungskosten "{bezeichnung}" wurden erfolgreich gelöscht.',
)
return redirect("stiftung:verwaltungskosten_list")
context = {
"verwaltungskosten": verwaltungskosten,
"title": f"Verwaltungskosten löschen: {verwaltungskosten.bezeichnung}",
}
return render(request, "stiftung/verwaltungskosten_delete.html", context)
@login_required
def mark_expense_paid(request):
"""Markiere eine Ausgabe als bezahlt"""

View File

@@ -0,0 +1,92 @@
{% extends 'base.html' %}
{% block title %}Verwaltungskosten löschen - van Hees-Theyssen-Vogel'sche Stiftung{% endblock %}
{% block content %}
<div class="row">
<div class="col-12">
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">
<i class="fas fa-trash me-2"></i>Verwaltungskosten löschen
</h1>
<a href="{% url 'stiftung:verwaltungskosten_list' %}" class="btn btn-outline-secondary">
<i class="fas fa-arrow-left me-1"></i>Zurück zur Liste
</a>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8 mx-auto">
<div class="card shadow">
<div class="card-header py-3 bg-danger">
<h6 class="m-0 font-weight-bold text-white">
<i class="fas fa-exclamation-triangle me-2"></i>Löschen bestätigen
</h6>
</div>
<div class="card-body">
<div class="alert alert-warning">
<strong>Achtung!</strong> Diese Aktion kann nicht rückgängig gemacht werden.
</div>
<p class="mb-4">
Sind Sie sicher, dass Sie die folgenden Verwaltungskosten löschen möchten?
</p>
<div class="table-responsive">
<table class="table table-bordered">
<tbody>
<tr>
<td><strong>Bezeichnung:</strong></td>
<td>{{ verwaltungskosten.bezeichnung }}</td>
</tr>
<tr>
<td><strong>Datum:</strong></td>
<td>{{ verwaltungskosten.datum|date:"d.m.Y" }}</td>
</tr>
<tr>
<td><strong>Betrag:</strong></td>
<td><strong>€{{ verwaltungskosten.betrag|floatformat:2 }}</strong></td>
</tr>
<tr>
<td><strong>Kategorie:</strong></td>
<td>{{ verwaltungskosten.get_kategorie_display }}</td>
</tr>
<tr>
<td><strong>Status:</strong></td>
<td>
<span class="badge bg-{{ verwaltungskosten.get_status_color }}">
{{ verwaltungskosten.get_status_display }}
</span>
</td>
</tr>
{% if verwaltungskosten.lieferant_firma %}
<tr>
<td><strong>Lieferant/Firma:</strong></td>
<td>{{ verwaltungskosten.lieferant_firma }}</td>
</tr>
{% endif %}
{% if verwaltungskosten.rechnungsnummer %}
<tr>
<td><strong>Rechnungsnummer:</strong></td>
<td>{{ verwaltungskosten.rechnungsnummer }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
<form method="post" class="d-flex gap-2 justify-content-end">
{% csrf_token %}
<a href="{% url 'stiftung:verwaltungskosten_list' %}" class="btn btn-secondary">
<i class="fas fa-times me-1"></i>Abbrechen
</a>
<button type="submit" class="btn btn-danger">
<i class="fas fa-trash me-1"></i>Endgültig löschen
</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -138,13 +138,10 @@
</td>
<td>
<div class="btn-group btn-group-sm" role="group">
<a href="#" class="btn btn-outline-primary" title="Bearbeiten">
<a href="{% url 'stiftung:verwaltungskosten_edit' kosten.pk %}" class="btn btn-outline-primary" title="Bearbeiten">
<i class="fas fa-edit"></i>
</a>
<a href="#" class="btn btn-outline-info" title="Details">
<i class="fas fa-eye"></i>
</a>
<a href="#" class="btn btn-outline-danger" title="Löschen">
<a href="{% url 'stiftung:verwaltungskosten_delete' kosten.pk %}" class="btn btn-outline-danger" title="Löschen">
<i class="fas fa-trash"></i>
</a>
</div>