mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
fix: Remplacement des enum par des modèles pour les payementModes et les
payementPlans
This commit is contained in:
@ -157,16 +157,15 @@ class Command(BaseCommand):
|
||||
self.stdout.write(self.style.ERROR(f'Error in data for discount: {serializer.errors}'))
|
||||
|
||||
def init_payment_modes(self):
|
||||
modes = [PaymentModeType.SEPA, PaymentModeType.TRANSFER, PaymentModeType.CHECK, PaymentModeType.CASH]
|
||||
modes = list(PaymentModeType.objects.filter(code__in=["SEPA", "TRANSFER", "CHECK", "CASH"]))
|
||||
types = [FeeType.REGISTRATION_FEE, FeeType.TUITION_FEE]
|
||||
|
||||
for establishment in self.establishments:
|
||||
for mode in modes:
|
||||
for type in types:
|
||||
payment_mode_data = {
|
||||
"mode": mode,
|
||||
"mode": mode.pk,
|
||||
"type": type,
|
||||
"is_active": random.choice([True, False]),
|
||||
"establishment": establishment.id
|
||||
}
|
||||
|
||||
@ -178,7 +177,7 @@ class Command(BaseCommand):
|
||||
self.stdout.write(self.style.ERROR(f'Error in data for payment mode: {serializer.errors}'))
|
||||
|
||||
def init_payment_plans(self):
|
||||
frequencies = [PaymentPlanType.ONE_TIME, PaymentPlanType.THREE_TIMES, PaymentPlanType.TEN_TIMES, PaymentPlanType.TWELVE_TIMES]
|
||||
frequencies = list(PaymentPlanType.objects.filter(code__in=["ONE_TIME", "THREE_TIMES", "TEN_TIMES", "TWELVE_TIMES"]))
|
||||
types = [FeeType.REGISTRATION_FEE, FeeType.TUITION_FEE]
|
||||
current_date = timezone.now().date()
|
||||
|
||||
@ -186,9 +185,8 @@ class Command(BaseCommand):
|
||||
for frequency in frequencies:
|
||||
for type in types:
|
||||
payment_plan_data = {
|
||||
"frequency": frequency,
|
||||
"frequency": frequency.pk,
|
||||
"type": type,
|
||||
"is_active": random.choice([True, False]),
|
||||
"establishment": establishment.id,
|
||||
"due_dates": self.generate_due_dates(frequency, current_date)
|
||||
}
|
||||
@ -201,13 +199,13 @@ class Command(BaseCommand):
|
||||
self.stdout.write(self.style.ERROR(f'Error in data for payment plan: {serializer.errors}'))
|
||||
|
||||
def generate_due_dates(self, frequency, start_date):
|
||||
if frequency == PaymentPlanType.ONE_TIME:
|
||||
if frequency.code == "ONE_TIME":
|
||||
return [start_date + relativedelta(months=1)]
|
||||
elif frequency == PaymentPlanType.THREE_TIMES:
|
||||
elif frequency.code == "THREE_TIMES":
|
||||
return [start_date + relativedelta(months=1+4*i) for i in range(3)]
|
||||
elif frequency == PaymentPlanType.TEN_TIMES:
|
||||
elif frequency.code == "TEN_TIMES":
|
||||
return [start_date + relativedelta(months=1+i) for i in range(10)]
|
||||
elif frequency == PaymentPlanType.TWELVE_TIMES:
|
||||
elif frequency.code == "TWELVE_TIMES":
|
||||
return [start_date + relativedelta(months=1+i) for i in range(12)]
|
||||
|
||||
def init_specialities(self):
|
||||
|
||||
@ -67,12 +67,6 @@ class Planning(models.Model):
|
||||
def __str__(self):
|
||||
return f'Planning for {self.level} of {self.school_class.atmosphere_name}'
|
||||
|
||||
class PaymentPlanType(models.IntegerChoices):
|
||||
ONE_TIME = 1, '1 fois'
|
||||
THREE_TIMES = 3, '3 fois'
|
||||
TEN_TIMES = 10, '10 fois'
|
||||
TWELVE_TIMES = 12, '12 fois'
|
||||
|
||||
class DiscountType(models.IntegerChoices):
|
||||
CURRENCY = 0, 'Currency'
|
||||
PERCENT = 1, 'Percent'
|
||||
@ -81,11 +75,20 @@ class FeeType(models.IntegerChoices):
|
||||
REGISTRATION_FEE = 0, 'Registration Fee'
|
||||
TUITION_FEE = 1, 'Tuition Fee'
|
||||
|
||||
class PaymentModeType(models.IntegerChoices):
|
||||
SEPA = 1, 'Prélèvement SEPA'
|
||||
TRANSFER = 2, 'Virement'
|
||||
CHECK = 3, 'Chèque'
|
||||
CASH = 4, 'Espèce'
|
||||
class PaymentPlanType(models.Model):
|
||||
code = models.CharField(max_length=50, unique=True)
|
||||
label = models.CharField(max_length=255)
|
||||
|
||||
def __str__(self):
|
||||
return self.label
|
||||
|
||||
class PaymentModeType(models.Model):
|
||||
code = models.CharField(max_length=50, unique=True)
|
||||
label = models.CharField(max_length=255)
|
||||
is_active = models.BooleanField(default=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.label
|
||||
|
||||
class Discount(models.Model):
|
||||
name = models.CharField(max_length=255, null=True, blank=True)
|
||||
@ -112,23 +115,21 @@ class Fee(models.Model):
|
||||
return self.name
|
||||
|
||||
class PaymentPlan(models.Model):
|
||||
frequency = models.IntegerField(choices=PaymentPlanType.choices, default=PaymentPlanType.ONE_TIME)
|
||||
due_dates = ArrayField(models.DateField(), blank=True)
|
||||
plan_type = models.ForeignKey(PaymentPlanType, on_delete=models.PROTECT, related_name='payment_plans')
|
||||
due_dates = ArrayField(models.DateField(), null=True, blank=True)
|
||||
type = models.IntegerField(choices=FeeType.choices, default=FeeType.REGISTRATION_FEE)
|
||||
is_active = models.BooleanField(default=False)
|
||||
establishment = models.ForeignKey('Establishment.Establishment', on_delete=models.CASCADE, related_name='payment_plans')
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.get_frequency_display()} - {self.get_type_display()}"
|
||||
return f"{self.plan_type.label} - {self.get_type_display()}"
|
||||
|
||||
class PaymentMode(models.Model):
|
||||
mode = models.IntegerField(choices=PaymentModeType.choices, default=PaymentModeType.SEPA)
|
||||
mode = models.ForeignKey(PaymentModeType, on_delete=models.PROTECT, related_name='payment_modes')
|
||||
type = models.IntegerField(choices=FeeType.choices, default=FeeType.REGISTRATION_FEE)
|
||||
is_active = models.BooleanField(default=False)
|
||||
establishment = models.ForeignKey('Establishment.Establishment', on_delete=models.CASCADE, related_name='payment_modes')
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.get_mode_display()} - {self.get_type_display()}"
|
||||
return f"{self.mode.label} - {self.get_type_display()}"
|
||||
|
||||
class Domain(models.Model):
|
||||
name = models.CharField(max_length=255)
|
||||
|
||||
@ -2,11 +2,10 @@ import json
|
||||
import os
|
||||
from django.db.models.signals import post_migrate
|
||||
from django.dispatch import receiver
|
||||
from Establishment.models import Establishment
|
||||
from School.models import Domain, Category, Competency, EstablishmentCompetency
|
||||
from School.models import Domain, Category, Competency, PaymentModeType, PaymentPlanType
|
||||
|
||||
@receiver(post_migrate)
|
||||
def load_json_data(sender, **kwargs):
|
||||
def school_post_migrate(sender, **kwargs):
|
||||
if sender.name != "School":
|
||||
return
|
||||
|
||||
@ -47,4 +46,23 @@ def load_json_data(sender, **kwargs):
|
||||
level=competency_data.get('niveau'),
|
||||
category=category
|
||||
)
|
||||
print(f"Données importées depuis : {json_file_path}")
|
||||
print(f"Données importées depuis : {json_file_path}")
|
||||
|
||||
payment_mode_types = [
|
||||
{"code": "SEPA", "label": "Prélèvement SEPA"},
|
||||
{"code": "TRANSFER", "label": "Virement"},
|
||||
{"code": "CHECK", "label": "Chèque"},
|
||||
{"code": "CASH", "label": "Espèce"},
|
||||
]
|
||||
for mode in payment_mode_types:
|
||||
PaymentModeType.objects.get_or_create(code=mode["code"], defaults={"label": mode["label"]})
|
||||
|
||||
# ... après la création des PaymentModeType ...
|
||||
payment_plan_types = [
|
||||
{"code": "ONE_TIME", "label": "1 fois"},
|
||||
{"code": "THREE_TIMES", "label": "3 fois"},
|
||||
{"code": "TEN_TIMES", "label": "10 fois"},
|
||||
{"code": "TWELVE_TIMES", "label": "12 fois"},
|
||||
]
|
||||
for plan in payment_plan_types:
|
||||
PaymentPlanType.objects.get_or_create(code=plan["code"], defaults={"label": plan["label"]})
|
||||
@ -531,7 +531,6 @@ class CompetencyListCreateView(APIView):
|
||||
category__domain__cycle=cycle
|
||||
).distinct()
|
||||
serializer = CompetencySerializer(competencies_list, many=True)
|
||||
print(f'len : {competencies_list.count()}')
|
||||
return JsonResponse(serializer.data, safe=False)
|
||||
|
||||
def post(self, request):
|
||||
|
||||
Reference in New Issue
Block a user