from django.core.management.base import BaseCommand from django.utils import timezone from dateutil.relativedelta import relativedelta from School.models import PaymentPlan, PaymentPlanType, FeeType class Command(BaseCommand): help = 'Initialize or update Payment Plans' def handle(self, *args, **kwargs): self.create_or_update_payment_plans() def create_or_update_payment_plans(self): current_date = timezone.now().date() for fee_type in FeeType.choices: fee_type_value = fee_type[0] # 1 fois - échéance à 1 mois à partir de la date actuelle PaymentPlan.objects.update_or_create( frequency=PaymentPlanType.ONE_TIME, type=fee_type_value, defaults={ 'due_dates': [current_date + relativedelta(months=1)], 'is_active': True } ) # 3 fois - échéances espacées de 4 mois PaymentPlan.objects.update_or_create( frequency=PaymentPlanType.THREE_TIMES, type=fee_type_value, defaults={ 'due_dates': [current_date + relativedelta(months=1+4*i) for i in range(3)], 'is_active': False } ) # 10 fois - échéances espacées d'un mois PaymentPlan.objects.update_or_create( frequency=PaymentPlanType.TEN_TIMES, type=fee_type_value, defaults={ 'due_dates': [current_date + relativedelta(months=1+i) for i in range(10)], 'is_active': False } ) # 12 fois - échéances espacées d'un mois PaymentPlan.objects.update_or_create( frequency=PaymentPlanType.TWELVE_TIMES, type=fee_type_value, defaults={ 'due_dates': [current_date + relativedelta(months=1+i) for i in range(12)], 'is_active': False } ) self.stdout.write(self.style.SUCCESS('Payment Plans initialized or updated successfully'))