mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Ajout de la configuration des tarifs de l'école [#18]
This commit is contained in:
committed by
Luc SORIGNET
parent
147a70135d
commit
5a0e65bb75
@ -9,6 +9,9 @@ from School.models import SchoolClass
|
||||
from datetime import datetime
|
||||
|
||||
class RegistrationFee(models.Model):
|
||||
"""
|
||||
Représente un tarif ou frais d’inscription avec différentes options de paiement.
|
||||
"""
|
||||
class PaymentOptions(models.IntegerChoices):
|
||||
SINGLE_PAYMENT = 0, _('Paiement en une seule fois')
|
||||
MONTHLY_PAYMENT = 1, _('Paiement mensuel')
|
||||
@ -27,6 +30,9 @@ class RegistrationFee(models.Model):
|
||||
return self.name
|
||||
|
||||
class Language(models.Model):
|
||||
"""
|
||||
Représente une langue parlée par l’élève.
|
||||
"""
|
||||
id = models.AutoField(primary_key=True)
|
||||
label = models.CharField(max_length=200, default="")
|
||||
|
||||
@ -34,6 +40,9 @@ class Language(models.Model):
|
||||
return "LANGUAGE"
|
||||
|
||||
class Guardian(models.Model):
|
||||
"""
|
||||
Représente un responsable légal (parent/tuteur) d’un élève.
|
||||
"""
|
||||
last_name = models.CharField(max_length=200, default="")
|
||||
first_name = models.CharField(max_length=200, default="")
|
||||
birth_date = models.CharField(max_length=200, default="", blank=True)
|
||||
@ -47,6 +56,9 @@ class Guardian(models.Model):
|
||||
return self.last_name + "_" + self.first_name
|
||||
|
||||
class Sibling(models.Model):
|
||||
"""
|
||||
Représente un frère ou une sœur d’un élève.
|
||||
"""
|
||||
id = models.AutoField(primary_key=True)
|
||||
last_name = models.CharField(max_length=200, default="")
|
||||
first_name = models.CharField(max_length=200, default="")
|
||||
@ -56,7 +68,9 @@ class Sibling(models.Model):
|
||||
return "SIBLING"
|
||||
|
||||
class Student(models.Model):
|
||||
|
||||
"""
|
||||
Représente l’élève inscrit ou en cours d’inscription.
|
||||
"""
|
||||
class StudentGender(models.IntegerChoices):
|
||||
NONE = 0, _('Sélection du genre')
|
||||
MALE = 1, _('Garçon')
|
||||
@ -95,6 +109,9 @@ class Student(models.Model):
|
||||
# Many-to-Many Relationship
|
||||
siblings = models.ManyToManyField(Sibling, blank=True)
|
||||
|
||||
# Many-to-Many Relationship
|
||||
registration_files = models.ManyToManyField('RegistrationFile', blank=True, related_name='students')
|
||||
|
||||
# Many-to-Many Relationship
|
||||
spoken_languages = models.ManyToManyField(Language, blank=True)
|
||||
|
||||
@ -105,21 +122,39 @@ class Student(models.Model):
|
||||
return self.last_name + "_" + self.first_name
|
||||
|
||||
def getSpokenLanguages(self):
|
||||
"""
|
||||
Retourne la liste des langues parlées par l’élève.
|
||||
"""
|
||||
return self.spoken_languages.all()
|
||||
|
||||
def getMainGuardian(self):
|
||||
"""
|
||||
Retourne le responsable légal principal de l’élève.
|
||||
"""
|
||||
return self.guardians.all()[0]
|
||||
|
||||
def getGuardians(self):
|
||||
"""
|
||||
Retourne tous les responsables légaux de l’élève.
|
||||
"""
|
||||
return self.guardians.all()
|
||||
|
||||
def getProfiles(self):
|
||||
"""
|
||||
Retourne les profils utilisateurs liés à l’élève.
|
||||
"""
|
||||
return self.profiles.all()
|
||||
|
||||
def getSiblings(self):
|
||||
"""
|
||||
Retourne les frères et sœurs de l’élève.
|
||||
"""
|
||||
return self.siblings.all()
|
||||
|
||||
def getNumberOfSiblings(self):
|
||||
"""
|
||||
Retourne le nombre de frères et sœurs.
|
||||
"""
|
||||
return self.siblings.count()
|
||||
|
||||
@property
|
||||
@ -148,7 +183,9 @@ class Student(models.Model):
|
||||
return None
|
||||
|
||||
class RegistrationForm(models.Model):
|
||||
|
||||
"""
|
||||
Gère le dossier d’inscription lié à un élève donné.
|
||||
"""
|
||||
class RegistrationFormStatus(models.IntegerChoices):
|
||||
RF_ABSENT = 0, _('Pas de dossier d\'inscription')
|
||||
RF_CREATED = 1, _('Dossier d\'inscription créé')
|
||||
@ -171,9 +208,53 @@ class RegistrationForm(models.Model):
|
||||
return "RF_" + self.student.last_name + "_" + self.student.first_name
|
||||
|
||||
class RegistrationFileTemplate(models.Model):
|
||||
"""
|
||||
Modèle pour stocker les fichiers "templates" d’inscription.
|
||||
"""
|
||||
name = models.CharField(max_length=255)
|
||||
file = models.FileField(upload_to='registration_files/')
|
||||
file = models.FileField(upload_to='templates_files/', blank=True, null=True)
|
||||
order = models.PositiveIntegerField(default=0) # Ajout du champ order
|
||||
date_added = models.DateTimeField(auto_now_add=True)
|
||||
is_required = models.BooleanField(default=False)
|
||||
|
||||
@property
|
||||
def formatted_date_added(self):
|
||||
if self.date_added:
|
||||
return self.date_added.strftime('%d-%m-%Y')
|
||||
return None
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def registration_file_upload_to(instance, filename):
|
||||
return f"registration_files/dossier_rf_{instance.register_form.pk}/{filename}"
|
||||
|
||||
class RegistrationFile(models.Model):
|
||||
"""
|
||||
Fichier lié à un dossier d’inscription particulier.
|
||||
"""
|
||||
name = models.CharField(max_length=255)
|
||||
file = models.FileField(upload_to=registration_file_upload_to)
|
||||
date_added = models.DateTimeField(auto_now_add=True)
|
||||
template = models.OneToOneField(RegistrationFileTemplate, on_delete=models.CASCADE)
|
||||
register_form = models.ForeignKey('RegistrationForm', on_delete=models.CASCADE, related_name='registration_files')
|
||||
|
||||
@property
|
||||
def formatted_date_added(self):
|
||||
if self.date_added:
|
||||
return self.date_added.strftime('%d-%m-%Y')
|
||||
return None
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@staticmethod
|
||||
def get_files_from_rf(register_form_id):
|
||||
"""
|
||||
Récupère tous les fichiers liés à un dossier d’inscription donné.
|
||||
"""
|
||||
registration_files = RegistrationFile.objects.filter(register_form_id=register_form_id).order_by('template__order')
|
||||
filenames = []
|
||||
for reg_file in registration_files:
|
||||
filenames.append(reg_file.file.path)
|
||||
return filenames
|
||||
|
||||
Reference in New Issue
Block a user