Getrennte Fristen für Studiennachweis und Zahlung implementieren
Some checks failed
Code Quality / quality (push) Has been cancelled
CI/CD Pipeline / test (push) Has been cancelled
CI/CD Pipeline / deploy (push) Has been cancelled

- Neue Felder: studiennachweis_faelligkeitsdatum (semesterbasiert) und zahlung_faelligkeitsdatum (vierteljährlich im Voraus)
- Studiennachweis-Fristen: Q1/Q2 → 15. März, Q3/Q4 → 15. September
- Zahlungsfälligkeiten: Q1 → 15. Dez (Vorjahr), Q2 → 15. Mär, Q3 → 15. Jun, Q4 → 15. Sep
- Auto-Freigabe: Q1 freigeben → Q2 Studiennachweis auto-freigegeben, Q3 → Q4
- Unterstützungserstellung: Verhindert Duplikate durch präzise Suche nach zahlung_faelligkeitsdatum
- Quartalserstellung: Modal-Formular funktioniert korrekt
- UI: Beide Fristen in Tabelle angezeigt, separate Überfälligkeits-Indikatoren
- Migration: Neue Felder hinzugefügt und bestehende Datensätze befüllt
This commit is contained in:
2025-12-30 20:20:33 +01:00
parent 24435660f5
commit 6c8ddbb4f0
6 changed files with 542 additions and 187 deletions

View File

@@ -0,0 +1,84 @@
# Generated migration for separate study proof and payment deadlines
from django.db import migrations, models
from datetime import date
def calculate_study_proof_deadline(jahr, quartal):
"""Calculate semester-based study proof deadline"""
# Q1, Q2 → March 15 (same year)
# Q3, Q4 → September 15 (same year)
if quartal in [1, 2]:
return date(jahr, 3, 15)
else: # Q3, Q4
return date(jahr, 9, 15)
def calculate_payment_due_date(jahr, quartal):
"""Calculate quarterly payment due date (paid in advance)"""
# Q1 → December 15 (previous year)
# Q2 → March 15 (same year)
# Q3 → June 15 (same year)
# Q4 → September 15 (same year)
if quartal == 1:
return date(jahr - 1, 12, 15)
elif quartal == 2:
return date(jahr, 3, 15)
elif quartal == 3:
return date(jahr, 6, 15)
else: # Q4
return date(jahr, 9, 15)
def populate_deadlines(apps, schema_editor):
"""Populate new deadline fields for existing records"""
VierteljahresNachweis = apps.get_model('stiftung', 'VierteljahresNachweis')
for nachweis in VierteljahresNachweis.objects.all():
# Calculate and set study proof deadline
if not nachweis.studiennachweis_faelligkeitsdatum:
nachweis.studiennachweis_faelligkeitsdatum = calculate_study_proof_deadline(
nachweis.jahr, nachweis.quartal
)
# Calculate and set payment due date
if not nachweis.zahlung_faelligkeitsdatum:
nachweis.zahlung_faelligkeitsdatum = calculate_payment_due_date(
nachweis.jahr, nachweis.quartal
)
nachweis.save(update_fields=['studiennachweis_faelligkeitsdatum', 'zahlung_faelligkeitsdatum'])
class Migration(migrations.Migration):
dependencies = [
('stiftung', '0041_alter_geschichteseite_inhalt'),
]
operations = [
# Add new fields
migrations.AddField(
model_name='vierteljahresnachweis',
name='studiennachweis_faelligkeitsdatum',
field=models.DateField(
blank=True,
help_text='Semesterbasierte Frist: Q1/Q2 → 15. März, Q3/Q4 → 15. September',
null=True,
verbose_name='Studiennachweis Fälligkeitsdatum'
),
),
migrations.AddField(
model_name='vierteljahresnachweis',
name='zahlung_faelligkeitsdatum',
field=models.DateField(
blank=True,
help_text='Vierteljährliche Zahlungsfälligkeit im Voraus: Q1→15. Dez (Vorjahr), Q2→15. Mär, Q3→15. Jun, Q4→15. Sep',
null=True,
verbose_name='Zahlungsfälligkeit'
),
),
# Populate existing records
migrations.RunPython(populate_deadlines, migrations.RunPython.noop),
]