mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Création d'un annuaire / mise à jour du subscribe
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
from rest_framework import serializers
|
||||
from Auth.models import Profile, ProfileRole
|
||||
from Establishment.models import Establishment
|
||||
from Subscriptions.models import Guardian, RegistrationForm
|
||||
from School.models import Teacher
|
||||
|
||||
class ProfileSerializer(serializers.ModelSerializer):
|
||||
id = serializers.IntegerField(required=False)
|
||||
@ -14,7 +16,7 @@ class ProfileSerializer(serializers.ModelSerializer):
|
||||
|
||||
def get_roles(self, obj):
|
||||
roles = ProfileRole.objects.filter(profile=obj)
|
||||
return [{'role_type': role.role_type, 'establishment': role.establishment.id, 'is_active': role.is_active} for role in roles]
|
||||
return [{'role_type': role.role_type, 'establishment': role.establishment.id, 'establishment_name': role.establishment.name, 'is_active': role.is_active} for role in roles]
|
||||
|
||||
def create(self, validated_data):
|
||||
user = Profile(
|
||||
@ -48,10 +50,12 @@ class ProfileSerializer(serializers.ModelSerializer):
|
||||
class ProfileRoleSerializer(serializers.ModelSerializer):
|
||||
profile = serializers.PrimaryKeyRelatedField(queryset=Profile.objects.all(), required=False)
|
||||
profile_data = ProfileSerializer(write_only=True, required=False)
|
||||
associated_profile_email = serializers.SerializerMethodField()
|
||||
associated_person = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = ProfileRole
|
||||
fields = ['role_type', 'establishment', 'is_active', 'profile', 'profile_data']
|
||||
fields = ['id', 'role_type', 'establishment', 'is_active', 'profile', 'profile_data', 'associated_profile_email', 'associated_person']
|
||||
|
||||
def create(self, validated_data):
|
||||
profile_data = validated_data.pop('profile_data', None)
|
||||
@ -82,4 +86,40 @@ class ProfileRoleSerializer(serializers.ModelSerializer):
|
||||
instance.establishment_id = validated_data.get('establishment', instance.establishment.id)
|
||||
instance.is_active = validated_data.get('is_active', instance.is_active)
|
||||
instance.save()
|
||||
return instance
|
||||
return instance
|
||||
|
||||
def get_associated_profile_email(self, obj):
|
||||
if obj.profile:
|
||||
return obj.profile.email
|
||||
return None
|
||||
|
||||
def get_associated_person(self, obj):
|
||||
if obj.role_type == ProfileRole.RoleType.PROFIL_PARENT:
|
||||
guardian = Guardian.objects.filter(profile_role=obj).first()
|
||||
if guardian:
|
||||
students = guardian.student_set.all()
|
||||
students_list = []
|
||||
for student in students:
|
||||
registration_form = RegistrationForm.objects.filter(student=student).first()
|
||||
registration_status = registration_form.status if registration_form else None
|
||||
students_list.append({
|
||||
"student_name": f"{student.last_name} {student.first_name}",
|
||||
"registration_status": registration_status
|
||||
})
|
||||
return {
|
||||
"guardian_name": f"{guardian.last_name} {guardian.first_name}",
|
||||
"students": students_list
|
||||
}
|
||||
else:
|
||||
teacher = Teacher.objects.filter(profile_role=obj).first()
|
||||
if teacher:
|
||||
classes = teacher.schoolclass_set.all()
|
||||
classes_list = [{"id": classe.id, "name": classe.atmosphere_name} for classe in classes]
|
||||
specialities = teacher.specialities.all()
|
||||
specialities_list = [{"name": speciality.name, "color_code": speciality.color_code} for speciality in specialities]
|
||||
return {
|
||||
"teacher_name": f"{teacher.last_name} {teacher.first_name}",
|
||||
"classes": classes_list,
|
||||
"specialities": specialities_list
|
||||
}
|
||||
return None
|
||||
@ -200,7 +200,7 @@ class LoginView(APIView):
|
||||
primary_role = ProfileRole.objects.filter(profile=user, role_type=role_type, is_active=True).first()
|
||||
|
||||
if not primary_role:
|
||||
return JsonResponse({"errorMessage": "Role not assigned to the user"}, status=status.HTTP_401_UNAUTHORIZED)
|
||||
return JsonResponse({"errorMessage": "Profil inactif"}, status=status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
login(request, user)
|
||||
user.save()
|
||||
@ -305,10 +305,10 @@ class RefreshJWTView(APIView):
|
||||
role_type = payload.get('role_type')
|
||||
|
||||
# Récupérer le rôle principal de l'utilisateur
|
||||
primary_role = ProfileRole.objects.filter(profile=user, role_type=role_type).first()
|
||||
primary_role = ProfileRole.objects.filter(profile=user, role_type=role_type, is_active=True).first()
|
||||
|
||||
if not primary_role:
|
||||
return JsonResponse({'errorMessage': 'No role assigned to the user'}, status=400)
|
||||
return JsonResponse({'errorMessage': 'Profil inactif'}, status=400)
|
||||
|
||||
# Générer un nouveau Access Token avec les informations complètes
|
||||
new_access_payload = {
|
||||
@ -383,10 +383,7 @@ class SubscribeView(APIView):
|
||||
retourErreur = error.returnMessage[error.BAD_URL]
|
||||
retour = ''
|
||||
newProfilConnection = JSONParser().parse(request)
|
||||
establishment_id = request.GET.get('establishment_id')
|
||||
|
||||
if not establishment_id:
|
||||
return JsonResponse({'message': retour, 'errorMessage': 'establishment_id manquant', "errorFields": {}, "id": -1}, safe=False, status=status.HTTP_400_BAD_REQUEST)
|
||||
establishment_id = newProfilConnection['establishment_id']
|
||||
|
||||
validatorSubscription = validator.ValidatorSubscription(data=newProfilConnection)
|
||||
validationOk, errorFields = validatorSubscription.validate()
|
||||
@ -398,7 +395,7 @@ class SubscribeView(APIView):
|
||||
retourErreur = error.returnMessage[error.PROFIL_NOT_EXISTS]
|
||||
else:
|
||||
# Vérifier si le profil a déjà un rôle actif pour l'établissement donné
|
||||
active_roles = ProfileRole.objects.filter(profile=profil, establishment_id=establishment_id, is_active=True)
|
||||
active_roles = ProfileRole.objects.filter(profile=profil, establishment=establishment_id, is_active=True)
|
||||
if active_roles.exists():
|
||||
retourErreur = error.returnMessage[error.PROFIL_ACTIVE]
|
||||
return JsonResponse({'message': retour, 'errorMessage': retourErreur, "errorFields": errorFields, "id": profil.id}, safe=False)
|
||||
@ -408,18 +405,23 @@ class SubscribeView(APIView):
|
||||
profil.full_clean()
|
||||
profil.save()
|
||||
|
||||
# Utiliser le sérialiseur ProfileRoleSerializer pour créer ou mettre à jour le rôle
|
||||
role_data = {
|
||||
'profile': profil.id,
|
||||
'establishment_id': establishment_id,
|
||||
'role_type': ProfileRole.RoleType.PROFIL_PARENT,
|
||||
'is_active': True
|
||||
}
|
||||
role_serializer = ProfileRoleSerializer(data=role_data)
|
||||
if role_serializer.is_valid():
|
||||
role_serializer.save()
|
||||
# Récupérer le ProfileRole existant pour l'établissement et le profil
|
||||
profile_role = ProfileRole.objects.filter(profile=profil, establishment=establishment_id).first()
|
||||
if profile_role:
|
||||
profile_role.is_active = True
|
||||
profile_role.save()
|
||||
else:
|
||||
return JsonResponse(role_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
|
||||
# Si aucun ProfileRole n'existe, en créer un nouveau
|
||||
role_data = {
|
||||
'profile': profil.id,
|
||||
'establishment': establishment_id,
|
||||
'is_active': True
|
||||
}
|
||||
role_serializer = ProfileRoleSerializer(data=role_data)
|
||||
if role_serializer.is_valid():
|
||||
role_serializer.save()
|
||||
else:
|
||||
return JsonResponse(role_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
clear_cache()
|
||||
retour = error.returnMessage[error.MESSAGE_ACTIVATION_PROFILE]
|
||||
@ -536,7 +538,13 @@ class ProfileRoleView(APIView):
|
||||
responses={200: ProfileRoleSerializer(many=True)}
|
||||
)
|
||||
def get(self, request):
|
||||
establishment_id = request.GET.get('establishment_id', None)
|
||||
if establishment_id is None:
|
||||
return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
profiles_roles_List = bdd.getAllObjects(_objectName=ProfileRole)
|
||||
if profiles_roles_List:
|
||||
profiles_roles_List = profiles_roles_List.filter(establishment=establishment_id).distinct()
|
||||
profile_roles_serializer = ProfileRoleSerializer(profiles_roles_List, many=True)
|
||||
return JsonResponse(profile_roles_serializer.data, safe=False)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user