diff --git a/app/stiftung/urls.py b/app/stiftung/urls.py index 5b16440..85292aa 100644 --- a/app/stiftung/urls.py +++ b/app/stiftung/urls.py @@ -26,6 +26,11 @@ urlpatterns = [ views.destinataer_delete, name="destinataer_delete", ), + path( + "destinataere//archivieren/", + views.destinataer_toggle_archiv, + name="destinataer_toggle_archiv", + ), path( "destinataere//notiz/", views.destinataer_notiz_create, diff --git a/app/stiftung/views/__init__.py b/app/stiftung/views/__init__.py index 1d81ee7..2956066 100644 --- a/app/stiftung/views/__init__.py +++ b/app/stiftung/views/__init__.py @@ -18,6 +18,7 @@ from .destinataere import ( # noqa: F401 destinataer_create, destinataer_update, destinataer_delete, + destinataer_toggle_archiv, destinataer_notiz_create, destinataer_export, ) diff --git a/app/stiftung/views/destinataere.py b/app/stiftung/views/destinataere.py index 24f4fdb..250328e 100644 --- a/app/stiftung/views/destinataere.py +++ b/app/stiftung/views/destinataere.py @@ -176,7 +176,7 @@ def destinataer_list(request): search_query = request.GET.get("search", "") familienzweig_filter = request.GET.get("familienzweig", "") berufsgruppe_filter = request.GET.get("berufsgruppe", "") - aktiv_filter = request.GET.get("aktiv", "") + aktiv_filter = request.GET.get("aktiv", "true") sort = request.GET.get("sort", "") direction = request.GET.get("dir", "asc") @@ -421,6 +421,24 @@ def destinataer_delete(request, pk): return render(request, "stiftung/destinataer_confirm_delete.html", context) +@login_required +def destinataer_toggle_archiv(request, pk): + """Destinatär aktivieren/deaktivieren (archivieren).""" + destinataer = get_object_or_404(Destinataer, pk=pk) + if request.method == "POST": + destinataer.aktiv = not destinataer.aktiv + destinataer.save(update_fields=["aktiv"]) + status_text = "aktiviert" if destinataer.aktiv else "archiviert (inaktiv gesetzt)" + AuditLog.objects.create( + user=request.user, + action=f"Destinatär {destinataer.get_full_name()} wurde {status_text}.", + model_name="Destinataer", + object_id=str(destinataer.pk), + ) + messages.success(request, f'Destinatär "{destinataer.get_full_name()}" wurde {status_text}.') + return redirect("stiftung:destinataer_detail", pk=destinataer.pk) + + # Paechter Views (Landpächter) @login_required def destinataer_notiz_create(request, pk): diff --git a/app/stiftung/views/unterstuetzungen.py b/app/stiftung/views/unterstuetzungen.py index 7824d45..a7fe2af 100644 --- a/app/stiftung/views/unterstuetzungen.py +++ b/app/stiftung/views/unterstuetzungen.py @@ -1578,6 +1578,14 @@ def nachweis_board(request): destinataere = Destinataer.objects.filter(aktiv=True).order_by("nachname", "vorname") + # Auto-create missing VierteljahresNachweis records for the filtered year + for d in destinataere: + for q in range(1, 5): + VierteljahresNachweis.objects.get_or_create( + destinataer=d, jahr=jahr_filter, quartal=q, + defaults={"status": "offen"}, + ) + board = [] for d in destinataere: quartale = {} diff --git a/app/templates/stiftung/destinataer_detail.html b/app/templates/stiftung/destinataer_detail.html index a22ab6b..7cb10f1 100644 --- a/app/templates/stiftung/destinataer_detail.html +++ b/app/templates/stiftung/destinataer_detail.html @@ -29,6 +29,18 @@ Abbrechen +
+ {% csrf_token %} + {% if destinataer.aktiv %} + + {% else %} + + {% endif %} +
Zurück zur Liste diff --git a/app/templates/stiftung/destinataer_list.html b/app/templates/stiftung/destinataer_list.html index e87ac3d..13b95d8 100644 --- a/app/templates/stiftung/destinataer_list.html +++ b/app/templates/stiftung/destinataer_list.html @@ -130,10 +130,10 @@ {% for destinataer in page_obj %} - {{ destinataer.vorname|default:"-" }} + {{ destinataer.vorname|default:"-" }} - {{ destinataer.nachname }} + {{ destinataer.nachname }} {% if destinataer.geburtsdatum %}
{{ destinataer.geburtsdatum|date:"d.m.Y" }} {% endif %}