- 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
85 lines
2.9 KiB
Python
85 lines
2.9 KiB
Python
# 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),
|
|
]
|
|
|