Implement advance payment schedule for quarterly payments

BREAKING CHANGE: Payment due dates now follow advance payment schedule:
- Q1 payments: Due December 15 of previous year
- Q2 payments: Due March 15 of same year
- Q3 payments: Due June 15 of same year
- Q4 payments: Due September 15 of same year

Changes:
- Updated create_quarterly_support_payment() to use advance schedule
- Enhanced diagnostic commands to check advance payment dates
- Added fix_advance_payment_dates command for comprehensive fixes
- Updated fix_q4_payment_dates to correct Q4 from 31.12 to 15.09

This aligns with semester-based document submissions while maintaining
the advance payment system where payments are made before each quarter.
This commit is contained in:
2025-10-01 12:04:34 +02:00
parent 149078aaee
commit 6aa218004c
4 changed files with 143 additions and 26 deletions

View File

@@ -7484,6 +7484,7 @@ def create_quarterly_support_payment(nachweis):
Get or create a single support payment for this quarterly confirmation
Ensures only one payment exists per destinataer per quarter
"""
from datetime import date
destinataer = nachweis.destinataer
# Check if all requirements are met
@@ -7532,19 +7533,21 @@ def create_quarterly_support_payment(nachweis):
if not default_konto:
return None
# Calculate payment due date (last day of quarter)
quarter_end_month = nachweis.quartal * 3
# Calculate payment due date (advance payment schedule)
# Payments are made in advance according to semester schedule:
# September 15: Payment for Q4 of current year
# December 15: Payment for Q1 of next year
# March 15: Payment for Q2 of current year
# June 15: Payment for Q3 of current year
if nachweis.quartal == 1: # Q1: January-March (ends March 31)
quarter_end_day = 31
elif nachweis.quartal == 2: # Q2: April-June (ends June 30)
quarter_end_day = 30
elif nachweis.quartal == 3: # Q3: July-September (ends September 30)
quarter_end_day = 30
else: # Q4: October-December (ends December 31)
quarter_end_day = 31
payment_due_date = datetime(nachweis.jahr, quarter_end_month, quarter_end_day).date()
if nachweis.quartal == 1: # Q1 payment due December 15 of previous year
payment_due_date = date(nachweis.jahr - 1, 12, 15)
elif nachweis.quartal == 2: # Q2 payment due March 15 of same year
payment_due_date = date(nachweis.jahr, 3, 15)
elif nachweis.quartal == 3: # Q3 payment due June 15 of same year
payment_due_date = date(nachweis.jahr, 6, 15)
else: # Q4 payment due September 15 of same year
payment_due_date = date(nachweis.jahr, 9, 15)
# Create the support payment
payment = DestinataerUnterstuetzung.objects.create(