# 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), ]