mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
refactor: Utilisation d'une application "Common" pour tous les modèles
de référence
This commit is contained in:
@ -50,7 +50,7 @@ class SchoolClass(models.Model):
|
||||
school_year = models.CharField(max_length=9, blank=True)
|
||||
updated_date = models.DateTimeField(auto_now=True)
|
||||
teachers = models.ManyToManyField(Teacher, blank=True)
|
||||
levels = ArrayField(models.IntegerField(choices=LEVEL_CHOICES), default=list)
|
||||
levels = models.ManyToManyField('Common.Level', blank=True, related_name='school_classes')
|
||||
type = models.IntegerField(choices=PLANNING_TYPE_CHOICES, default=1)
|
||||
time_range = models.JSONField(default=list)
|
||||
opening_days = ArrayField(models.IntegerField(), default=list)
|
||||
@ -75,21 +75,6 @@ class FeeType(models.IntegerChoices):
|
||||
REGISTRATION_FEE = 0, 'Registration Fee'
|
||||
TUITION_FEE = 1, 'Tuition Fee'
|
||||
|
||||
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)
|
||||
amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)
|
||||
@ -115,7 +100,7 @@ class Fee(models.Model):
|
||||
return self.name
|
||||
|
||||
class PaymentPlan(models.Model):
|
||||
plan_type = models.ForeignKey(PaymentPlanType, on_delete=models.PROTECT, related_name='payment_plans')
|
||||
plan_type = models.ForeignKey('Common.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)
|
||||
establishment = models.ForeignKey('Establishment.Establishment', on_delete=models.CASCADE, related_name='payment_plans')
|
||||
@ -124,45 +109,13 @@ class PaymentPlan(models.Model):
|
||||
return f"{self.plan_type.label} - {self.get_type_display()}"
|
||||
|
||||
class PaymentMode(models.Model):
|
||||
mode = models.ForeignKey(PaymentModeType, on_delete=models.PROTECT, related_name='payment_modes')
|
||||
mode = models.ForeignKey('Common.PaymentModeType', on_delete=models.PROTECT, related_name='payment_modes')
|
||||
type = models.IntegerField(choices=FeeType.choices, default=FeeType.REGISTRATION_FEE)
|
||||
establishment = models.ForeignKey('Establishment.Establishment', on_delete=models.CASCADE, related_name='payment_modes')
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.mode.label} - {self.get_type_display()}"
|
||||
|
||||
class Domain(models.Model):
|
||||
name = models.CharField(max_length=255)
|
||||
cycle = models.IntegerField(choices=[(1, 'Cycle 1'), (2, 'Cycle 2'), (3, 'Cycle 3'), (4, 'Cycle 4')])
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} (Cycle {self.cycle})"
|
||||
|
||||
|
||||
class Category(models.Model):
|
||||
name = models.CharField(max_length=255)
|
||||
domain = models.ForeignKey(Domain, on_delete=models.CASCADE, related_name='categories')
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Competency(models.Model):
|
||||
name = models.TextField()
|
||||
end_of_cycle = models.BooleanField(default=False, null=True, blank=True)
|
||||
level = models.CharField(max_length=50, null=True, blank=True)
|
||||
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='competencies')
|
||||
|
||||
establishments = models.ManyToManyField(
|
||||
'Establishment.Establishment',
|
||||
through='EstablishmentCompetency',
|
||||
related_name='competencies',
|
||||
blank=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class EstablishmentCompetency(models.Model):
|
||||
"""
|
||||
Relation entre un établissement et une compétence.
|
||||
@ -170,12 +123,12 @@ class EstablishmentCompetency(models.Model):
|
||||
"""
|
||||
establishment = models.ForeignKey('Establishment.Establishment', on_delete=models.CASCADE)
|
||||
competency = models.ForeignKey(
|
||||
Competency, on_delete=models.CASCADE, null=True, blank=True,
|
||||
'Common.Competency', on_delete=models.CASCADE, null=True, blank=True,
|
||||
help_text="Compétence de référence (optionnelle si custom)"
|
||||
)
|
||||
custom_name = models.TextField(null=True, blank=True, help_text="Nom de la compétence custom")
|
||||
custom_category = models.ForeignKey(
|
||||
Category, on_delete=models.CASCADE, null=True, blank=True,
|
||||
'Common.Category', on_delete=models.CASCADE, null=True, blank=True,
|
||||
help_text="Catégorie de la compétence custom"
|
||||
)
|
||||
is_required = models.BooleanField(default=True)
|
||||
|
||||
Reference in New Issue
Block a user