from rest_framework import serializers from .models import Enseignant, Specialite, Classe, Planning 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 class SpecialiteSerializer(serializers.ModelSerializer): dateCreation_formattee = serializers.SerializerMethodField() class Meta: model = Specialite fields = '__all__' def get_dateCreation_formattee(self, obj): utc_time = timezone.localtime(obj.dateCreation) # Convertir en heure locale local_tz = pytz.timezone(settings.TZ_APPLI) local_time = utc_time.astimezone(local_tz) return local_time.strftime("%d-%m-%Y %H:%M") class EnseignantDetailSerializer(serializers.ModelSerializer): specialites = SpecialiteSerializer(many=True, read_only=True) class Meta: model = Enseignant fields = ['id', 'nom', 'prenom', 'mail', 'specialites'] class EnseignantSerializer(serializers.ModelSerializer): specialites = SpecialiteSerializer(many=True, read_only=True) specialites_ids = serializers.PrimaryKeyRelatedField(queryset=Specialite.objects.all(), many=True, source='specialites') profilAssocie_id = serializers.PrimaryKeyRelatedField(queryset=Profil.objects.all(), source='profilAssocie', write_only=False, read_only=False) classes_principal = serializers.PrimaryKeyRelatedField(many=True, read_only=True, source='classes') profilAssocie = ProfilSerializer(read_only=True) DroitLabel = serializers.SerializerMethodField() DroitValue = serializers.SerializerMethodField() class Meta: model = Enseignant fields = ['id', 'nom', 'prenom', 'mail', 'specialites', 'specialites_ids', 'classes_principal', 'profilAssocie', 'profilAssocie_id', 'DroitLabel', 'DroitValue'] def create(self, validated_data): specialites_data = validated_data.pop('specialites', None) profilAssocie = validated_data.pop('profilAssocie', None) enseignant = Enseignant.objects.create(**validated_data) enseignant.specialites.set(specialites_data) if profilAssocie: enseignant.profilAssocie = profilAssocie enseignant.save() return enseignant def update(self, instance, validated_data): specialites_data = validated_data.pop('specialites', []) instance.nom = validated_data.get('nom', instance.nom) instance.prenom = validated_data.get('prenom', instance.prenom) instance.mail = validated_data.get('mail', instance.mail) instance.profilAssocie = validated_data.get('profilAssocie', instance.profilAssocie) instance.save() instance.specialites.set(specialites_data) return instance 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 PlanningSerializer(serializers.ModelSerializer): classe_id = serializers.PrimaryKeyRelatedField(queryset=Classe.objects.all(), source='classe') class Meta: model = Planning fields = ['id', 'classe', 'classe_id', 'emploiDuTemps'] class ClasseSerializer(serializers.ModelSerializer): dateCreation_formattee = serializers.SerializerMethodField() enseignants = EnseignantSerializer(many=True, read_only=True) enseignants_ids = serializers.PrimaryKeyRelatedField(queryset=Enseignant.objects.all(), many=True, source='enseignants') eleves = serializers.SerializerMethodField() planning = serializers.SerializerMethodField() class Meta: model = Classe fields = ['id', 'nom_ambiance', 'tranche_age', 'nombre_eleves', 'langue_enseignement', 'enseignants', 'enseignants_ids', 'annee_scolaire', 'dateCreation', 'dateCreation_formattee', 'eleves', 'planning'] def create(self, validated_data): planning_data = validated_data.pop('planning', None) enseignants_data = validated_data.pop('enseignants', []) classe = Classe.objects.create(**validated_data) classe.enseignants.set(enseignants_data) if planning_data and not hasattr(classe, 'planning'): Planning.objects.create(classe=classe, **planning_data) return classe def update(self, instance, validated_data): planning_data = validated_data.pop('planning', None) enseignants_data = validated_data.pop('enseignants', []) instance.nom_ambiance = validated_data.get('nom_ambiance', instance.nom_ambiance) instance.tranche_age = validated_data.get('tranche_age', instance.tranche_age) instance.nombre_eleves = validated_data.get('nombre_eleves', instance.nombre_eleves) instance.langue_enseignement = validated_data.get('langue_enseignement', instance.langue_enseignement) instance.annee_scolaire = validated_data.get('annee_scolaire', instance.annee_scolaire) instance.save() instance.enseignants.set(enseignants_data) if planning_data: planning = instance.planning planning.emploiDuTemps = planning_data.get('emploiDuTemps', planning.emploiDuTemps) planning.save() return instance def get_dateCreation_formattee(self, obj): utc_time = timezone.localtime(obj.dateCreation) # Convertir en heure locale local_tz = pytz.timezone(settings.TZ_APPLI) local_time = utc_time.astimezone(local_tz) 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 def get_planning(self, obj): from .serializers import PlanningSerializer if obj.planning: return PlanningSerializer(obj.planning).data return None