From 994eb789b7e63be24bad5ee8d08c7d0fcf5bd454 Mon Sep 17 00:00:00 2001 From: Jan Remmer Siebels Date: Sun, 28 Sep 2025 19:51:22 +0200 Subject: [PATCH] Fix quarterly tracking visibility and prevent duplicate support payments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🎯 Key Changes: - Quarterly tracking now always visible (removed studiennachweis_erforderlich condition) - Removed automatic support payment creation when 'UnterstĂŒtzung bestĂ€tigt' checkbox is checked - Support payments now ONLY created through quarterly confirmation approval workflow - Updated auto-creation logic to create quarterly confirmations for ALL destinataers - Updated 'no quarterly confirmations' message to be more user-friendly đŸš« Duplicate Prevention: - No more duplicate destinataer entries in UnterstĂŒtzungen list - Single source of truth: quarterly confirmation system controls support payment creation 📋 Template Analysis: - Reviewed all if/else statements in quarterly tracking section - Kept all functional logic (status checks, file existence, permissions) - Removed only the visibility-controlling conditions ✅ Result: - Quarterly tracking always visible regardless of study proof requirements - Clean separation between 'UnterstĂŒtzung bestĂ€tigt' checkbox and support payment creation - Eliminates the duplicate destinataer issue reported by user --- app/stiftung/views.py | 92 ++----------------- .../stiftung/destinataer_detail.html | 6 +- 2 files changed, 12 insertions(+), 86 deletions(-) diff --git a/app/stiftung/views.py b/app/stiftung/views.py index 6e3c071..5324af9 100644 --- a/app/stiftung/views.py +++ b/app/stiftung/views.py @@ -1241,12 +1241,12 @@ def destinataer_detail(request, pk): jahr__in=[current_year, current_year + 1] ).order_by('-jahr', '-quartal') - # Create missing quarterly confirmations for current year if destinataer requires study proof - if destinataer.studiennachweis_erforderlich: - for quartal in range(1, 5): # Q1-Q4 - nachweis, created = VierteljahresNachweis.get_or_create_for_period( - destinataer, current_year, quartal - ) + # Create missing quarterly confirmations for current year + # Quarterly tracking is now always available regardless of study proof requirements + for quartal in range(1, 5): # Q1-Q4 + nachweis, created = VierteljahresNachweis.get_or_create_for_period( + destinataer, current_year, quartal + ) # Reload to get any newly created confirmations quarterly_confirmations = VierteljahresNachweis.objects.filter( @@ -1304,42 +1304,8 @@ def destinataer_update(request, pk): try: destinataer = form.save() - # Auto-create a DestinatĂ€runterstĂŒtzung if conditions are met - if ( - destinataer.aktiv - and destinataer.unterstuetzung_bestaetigt - and destinataer.standard_konto - and destinataer.vierteljaehrlicher_betrag - and destinataer.vierteljaehrlicher_betrag > 0 - ): - from decimal import Decimal - from stiftung.models import DestinataerUnterstuetzung - - heute = timezone.now().date() - beschreibung = f"VierteljĂ€hrliche Vorauszahlung fĂŒr {destinataer.get_full_name()}" - # ensure only one upcoming planned entry; update if one exists - existing = ( - DestinataerUnterstuetzung.objects.filter( - destinataer=destinataer, status="geplant" - ) - .order_by("faellig_am") - .first() - ) - if existing: - existing.konto = destinataer.standard_konto - existing.betrag = Decimal(destinataer.vierteljaehrlicher_betrag) - existing.faellig_am = heute - existing.beschreibung = beschreibung - existing.save() - else: - DestinataerUnterstuetzung.objects.create( - destinataer=destinataer, - konto=destinataer.standard_konto, - betrag=Decimal(destinataer.vierteljaehrlicher_betrag), - faellig_am=heute, - status="geplant", - beschreibung=beschreibung, - ) + # Note: Support payments are now only created through quarterly confirmations + # No automatic creation when unterstuetzung_bestaetigt is checked return JsonResponse({ 'success': True, @@ -1366,46 +1332,8 @@ def destinataer_update(request, pk): # Handle regular form submission if form.is_valid(): destinataer = form.save() - try: - # Auto-create a DestinatĂ€runterstĂŒtzung if conditions are met - if ( - destinataer.aktiv - and destinataer.unterstuetzung_bestaetigt - and destinataer.standard_konto - and destinataer.vierteljaehrlicher_betrag - and destinataer.vierteljaehrlicher_betrag > 0 - ): - from decimal import Decimal - - from stiftung.models import DestinataerUnterstuetzung - - heute = timezone.now().date() - beschreibung = f"VierteljĂ€hrliche Vorauszahlung fĂŒr {destinataer.get_full_name()}" - # ensure only one upcoming planned entry; update if one exists - existing = ( - DestinataerUnterstuetzung.objects.filter( - destinataer=destinataer, status="geplant" - ) - .order_by("faellig_am") - .first() - ) - if existing: - existing.konto = destinataer.standard_konto - existing.betrag = Decimal(destinataer.vierteljaehrlicher_betrag) - existing.faellig_am = heute - existing.beschreibung = beschreibung - existing.save() - else: - DestinataerUnterstuetzung.objects.create( - destinataer=destinataer, - konto=destinataer.standard_konto, - betrag=Decimal(destinataer.vierteljaehrlicher_betrag), - faellig_am=heute, - status="geplant", - beschreibung=beschreibung, - ) - except Exception: - pass + # Note: Support payments are now only created through quarterly confirmations + # No automatic creation when unterstuetzung_bestaetigt is checked messages.success( request, f'DestinatĂ€r "{destinataer.get_full_name()}" wurde erfolgreich aktualisiert.', diff --git a/app/templates/stiftung/destinataer_detail.html b/app/templates/stiftung/destinataer_detail.html index fb9bc35..7683b2b 100644 --- a/app/templates/stiftung/destinataer_detail.html +++ b/app/templates/stiftung/destinataer_detail.html @@ -459,7 +459,6 @@ - {% if destinataer.studiennachweis_erforderlich %}
@@ -818,13 +817,12 @@ {% else %}
-
Keine vierteljÀhrlichen Nachweise
-

Nachweise werden automatisch erstellt, wenn Studiennachweise erforderlich sind.

+
Keine vierteljÀhrlichen Nachweise vorhanden
+

Klicken Sie auf "Quartal hinzufĂŒgen", um einen neuen Nachweis zu erstellen.

{% endif %}
- {% endif %}