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:
@@ -219,6 +219,11 @@ urlpatterns = [
|
|||||||
views.verwaltungskosten_edit,
|
views.verwaltungskosten_edit,
|
||||||
name="verwaltungskosten_edit",
|
name="verwaltungskosten_edit",
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"geschaeftsfuehrung/verwaltungskosten/<uuid:pk>/loeschen/",
|
||||||
|
views.verwaltungskosten_delete,
|
||||||
|
name="verwaltungskosten_delete",
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
"verwaltungskosten/mark-paid/",
|
"verwaltungskosten/mark-paid/",
|
||||||
views.mark_expense_paid,
|
views.mark_expense_paid,
|
||||||
|
|||||||
@@ -4203,6 +4203,42 @@ def verwaltungskosten_edit(request, pk):
|
|||||||
return render(request, "stiftung/verwaltungskosten_form.html", context)
|
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
|
@login_required
|
||||||
def mark_expense_paid(request):
|
def mark_expense_paid(request):
|
||||||
"""Markiere eine Ausgabe als bezahlt"""
|
"""Markiere eine Ausgabe als bezahlt"""
|
||||||
|
|||||||
92
app/templates/stiftung/verwaltungskosten_delete.html
Normal file
92
app/templates/stiftung/verwaltungskosten_delete.html
Normal 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 %}
|
||||||
@@ -138,13 +138,10 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="btn-group btn-group-sm" role="group">
|
<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>
|
<i class="fas fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
<a href="#" class="btn btn-outline-info" title="Details">
|
<a href="{% url 'stiftung:verwaltungskosten_delete' kosten.pk %}" class="btn btn-outline-danger" title="Löschen">
|
||||||
<i class="fas fa-eye"></i>
|
|
||||||
</a>
|
|
||||||
<a href="#" class="btn btn-outline-danger" title="Löschen">
|
|
||||||
<i class="fas fa-trash"></i>
|
<i class="fas fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user