feat: Gestion des rattachements de Guardian à des RF déjà existants

This commit is contained in:
N3WT DE COMPET
2025-03-12 14:04:35 +01:00
parent 753a8d647e
commit 7d1b9c5657
10 changed files with 241 additions and 196 deletions

View File

@ -35,7 +35,8 @@ class TeacherSerializer(serializers.ModelSerializer):
updated_date_formatted = serializers.SerializerMethodField()
role_type = serializers.SerializerMethodField()
associated_profile_email = serializers.SerializerMethodField()
profile_role = ProfileRoleSerializer()
profile_role = serializers.PrimaryKeyRelatedField(queryset=ProfileRole.objects.all(), required=False)
profile_role_data = ProfileRoleSerializer(write_only=True, required=False)
class Meta:
model = Teacher
@ -43,14 +44,19 @@ class TeacherSerializer(serializers.ModelSerializer):
def create(self, validated_data):
specialities_data = validated_data.pop('specialities', None)
profile_role_data = validated_data.pop('profile_role')
establishment_id = profile_role_data.pop('establishment').id
profile_role_data['establishment'] = establishment_id
profile_role_data = validated_data.pop('profile_role_data', None)
profile_role = validated_data.pop('profile_role', None)
# Créer l'instance de ProfileRole
profile_role_serializer = ProfileRoleSerializer(data=profile_role_data)
profile_role_serializer.is_valid(raise_exception=True)
profile_role = profile_role_serializer.save()
if profile_role_data:
establishment_id = profile_role_data.pop('establishment').id
profile_role_data['establishment'] = establishment_id
# Créer l'instance de ProfileRole
profile_role_serializer = ProfileRoleSerializer(data=profile_role_data)
profile_role_serializer.is_valid(raise_exception=True)
profile_role = profile_role_serializer.save()
elif profile_role:
profile_role = ProfileRole.objects.get(id=profile_role.id)
# Créer l'enseignant avec l'instance de ProfileRole
teacher = Teacher.objects.create(profile_role=profile_role, **validated_data)
@ -61,7 +67,8 @@ class TeacherSerializer(serializers.ModelSerializer):
def update(self, instance, validated_data):
specialities_data = validated_data.pop('specialities', [])
profile_role_data = validated_data.pop('profile_role', None)
profile_role_data = validated_data.pop('profile_role_data', None)
profile_role = validated_data.pop('profile_role', None)
if profile_role_data:
establishment_id = profile_role_data.pop('establishment').id
@ -69,6 +76,8 @@ class TeacherSerializer(serializers.ModelSerializer):
profile_role_serializer = ProfileRoleSerializer(instance.profile_role, data=profile_role_data)
profile_role_serializer.is_valid(raise_exception=True)
profile_role_serializer.save()
elif profile_role:
instance.profile_role = ProfileRole.objects.get(id=profile_role.id)
instance.last_name = validated_data.get('last_name', instance.last_name)
instance.first_name = validated_data.get('first_name', instance.first_name)
@ -92,7 +101,9 @@ class TeacherSerializer(serializers.ModelSerializer):
return [{'id': speciality.id, 'name': speciality.name, 'color_code': speciality.color_code} for speciality in obj.specialities.all()]
def get_associated_profile_email(self, obj):
return obj.profile_role.profile.email
if obj.profile_role and obj.profile_role.profile:
return obj.profile_role.profile.email
return None
class PlanningSerializer(serializers.ModelSerializer):
class Meta: