from rest_framework import serializers from .models import Enseignant, Specialite, Classe 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 ClasseSerializer(serializers.ModelSerializer): specialites = SpecialiteSerializer(many=True, read_only=True) specialites_ids = serializers.PrimaryKeyRelatedField(queryset=Specialite.objects.all(), many=True, source='specialites') 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', 'eleves'] def get_enseignant_principal(self, obj): from .serializers import EnseignantDetailSerializer if obj.enseignant_principal: return EnseignantDetailSerializer(obj.enseignant_principal).data return None def create(self, validated_data): specialites_data = validated_data.pop('specialites', []) classe = Classe.objects.create(**validated_data) classe.specialites.set(specialites_data) return classe def update(self, instance, validated_data): specialites_data = validated_data.pop('specialites', []) 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.enseignant_principal = validated_data.get('enseignant_principal', instance.enseignant_principal) instance.save() instance.specialites.set(specialites_data) 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 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', '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) 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) class Meta: model = Enseignant fields = ['id', 'nom', 'prenom', 'mail', 'specialite']