mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 07:53:23 +00:00
feat: Gestion des profils des enseignants / Visualisation d'une classe [#4]
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
from django.db import models
|
||||
from GestionLogin.models import Profil
|
||||
|
||||
class Specialite(models.Model):
|
||||
nom = models.CharField(max_length=100)
|
||||
@ -13,6 +14,7 @@ class Enseignant(models.Model):
|
||||
prenom = models.CharField(max_length=100)
|
||||
mail = models.EmailField(unique=True)
|
||||
specialite = models.ForeignKey(Specialite, on_delete=models.SET_NULL, null=True, blank=True, related_name='enseignants')
|
||||
profilAssocie = models.ForeignKey(Profil, on_delete=models.CASCADE, null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.nom} {self.prenom}"
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
from rest_framework import serializers
|
||||
from .models import Enseignant, Specialite, Classe
|
||||
from N3wtSchool import settings
|
||||
from GestionInscriptions.models import FicheInscription
|
||||
from GestionInscriptions.serializers import EleveSerializer
|
||||
from GestionLogin.serializers import ProfilSerializer
|
||||
from GestionLogin.models import Profil
|
||||
from N3wtSchool import settings, bdd
|
||||
from django.utils import timezone
|
||||
import pytz
|
||||
|
||||
@ -23,10 +27,11 @@ class ClasseSerializer(serializers.ModelSerializer):
|
||||
dateCreation_formattee = serializers.SerializerMethodField()
|
||||
enseignant_principal = serializers.SerializerMethodField()
|
||||
enseignant_principal_id = serializers.PrimaryKeyRelatedField(queryset=Enseignant.objects.all(), source='enseignant_principal', write_only=False, read_only=False)
|
||||
eleves = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Classe
|
||||
fields = ['id', 'nom_ambiance', 'tranche_age', 'nombre_eleves', 'langue_enseignement', 'specialites', 'specialites_ids', 'enseignant_principal', 'enseignant_principal_id', 'annee_scolaire', 'dateCreation', 'dateCreation_formattee']
|
||||
fields = ['id', 'nom_ambiance', 'tranche_age', 'nombre_eleves', 'langue_enseignement', 'specialites', 'specialites_ids', 'enseignant_principal', 'enseignant_principal_id', 'annee_scolaire', 'dateCreation', 'dateCreation_formattee', 'eleves']
|
||||
|
||||
def get_enseignant_principal(self, obj):
|
||||
from .serializers import EnseignantDetailSerializer
|
||||
@ -59,22 +64,45 @@ class ClasseSerializer(serializers.ModelSerializer):
|
||||
|
||||
return local_time.strftime("%d-%m-%Y %H:%M")
|
||||
|
||||
def get_eleves(self, obj):
|
||||
elevesList = obj.eleves.all()
|
||||
filtered_eleves = []
|
||||
for eleve in elevesList:
|
||||
ficheInscription=bdd.getObject(FicheInscription, "eleve__id", eleve.id)
|
||||
if ficheInscription.etat == ficheInscription.EtatDossierInscription.DI_VALIDE:
|
||||
filtered_eleves.append(eleve)
|
||||
return EleveSerializer(filtered_eleves, many=True, read_only=True).data
|
||||
|
||||
class EnseignantSerializer(serializers.ModelSerializer):
|
||||
specialite = SpecialiteSerializer(read_only=True)
|
||||
specialite_id = serializers.PrimaryKeyRelatedField(queryset=Specialite.objects.all(), source='specialite', write_only=False, read_only=False)
|
||||
profilAssocie_id = serializers.PrimaryKeyRelatedField(queryset=Profil.objects.all(), source='profilAssocie', write_only=False, read_only=False)
|
||||
classes_principal = ClasseSerializer(many=True, read_only=True)
|
||||
profilAssocie = ProfilSerializer(read_only=True)
|
||||
DroitLabel = serializers.SerializerMethodField()
|
||||
DroitValue = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Enseignant
|
||||
fields = ['id', 'nom', 'prenom', 'mail', 'specialite', 'specialite_id', 'classes_principal']
|
||||
|
||||
fields = ['id', 'nom', 'prenom', 'mail', 'specialite', 'specialite_id', 'classes_principal', 'profilAssocie', 'profilAssocie_id', 'DroitLabel', 'DroitValue']
|
||||
|
||||
def create(self, validated_data):
|
||||
specialite = validated_data.pop('specialite', None)
|
||||
profilAssocie = validated_data.pop('profilAssocie', None)
|
||||
enseignant = Enseignant.objects.create(**validated_data)
|
||||
enseignant.specialite = specialite
|
||||
if specialite:
|
||||
enseignant.specialite = specialite
|
||||
if profilAssocie:
|
||||
enseignant.profilAssocie = profilAssocie
|
||||
enseignant.save()
|
||||
return enseignant
|
||||
|
||||
def get_DroitLabel(self, obj):
|
||||
return obj.profilAssocie.get_droit_display() if obj.profilAssocie else None
|
||||
|
||||
def get_DroitValue(self, obj):
|
||||
return obj.profilAssocie.droit if obj.profilAssocie else None
|
||||
|
||||
class EnseignantDetailSerializer(serializers.ModelSerializer):
|
||||
specialite = SpecialiteSerializer(read_only=True)
|
||||
|
||||
|
||||
@ -47,10 +47,15 @@ class EnseignantView(APIView):
|
||||
|
||||
def delete(self, request, _id):
|
||||
enseignant = bdd.getObject(_objectName=Enseignant, _columnName='id', _value=_id)
|
||||
if enseignant != None:
|
||||
if enseignant is not None:
|
||||
if enseignant.profilAssocie:
|
||||
print('Suppression du profil associé')
|
||||
enseignant.profilAssocie.delete()
|
||||
enseignant.delete()
|
||||
|
||||
return JsonResponse("La suppression de la spécialité a été effectuée avec succès", safe=False)
|
||||
return JsonResponse({'message': 'La suppression de l\'enseignant a été effectuée avec succès'}, safe=False)
|
||||
else:
|
||||
return JsonResponse({'erreur': 'L\'enseignant n\'a pas été trouvé'}, safe=False)
|
||||
|
||||
|
||||
@method_decorator(csrf_protect, name='dispatch')
|
||||
@method_decorator(ensure_csrf_cookie, name='dispatch')
|
||||
@ -175,6 +180,10 @@ class ClasseView(APIView):
|
||||
def delete(self, request, _id):
|
||||
classe = bdd.getObject(_objectName=Classe, _columnName='id', _value=_id)
|
||||
if classe != None:
|
||||
for eleve in classe.eleves.all():
|
||||
print(f'eleve a retirer la classe : {eleve}')
|
||||
eleve.classeAssociee = None
|
||||
eleve.save()
|
||||
classe.delete()
|
||||
|
||||
return JsonResponse("La suppression de la classe a été effectuée avec succès", safe=False)
|
||||
Reference in New Issue
Block a user