Getrennte Fristen für Studiennachweis und Zahlung implementieren
- 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:
84
app/stiftung/migrations/0042_add_separate_deadlines.py
Normal file
84
app/stiftung/migrations/0042_add_separate_deadlines.py
Normal 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),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user