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

@ -31,7 +31,9 @@ class GuardianSimpleSerializer(serializers.ModelSerializer):
fields = ['id', 'associated_profile_email']
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 RegistrationFormSimpleSerializer(serializers.ModelSerializer):
guardians = GuardianSimpleSerializer(many=True, source='student.guardians')
@ -73,7 +75,8 @@ class SiblingSerializer(serializers.ModelSerializer):
class GuardianSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
profile_role = ProfileRoleSerializer()
profile_role = serializers.PrimaryKeyRelatedField(queryset=ProfileRole.objects.all(), required=False)
profile_role_data = ProfileRoleSerializer(write_only=True, required=False)
associated_profile_email = serializers.SerializerMethodField()
class Meta:
@ -81,7 +84,9 @@ class GuardianSerializer(serializers.ModelSerializer):
fields = '__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 StudentSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
@ -101,15 +106,21 @@ class StudentSerializer(serializers.ModelSerializer):
def create_or_update_guardians(self, guardians_data):
guardians_ids = []
for guardian_data in guardians_data:
profile_role_data = guardian_data.pop('profile_role')
establishment_id = profile_role_data.pop('establishment').id
profile_role_data['establishment'] = establishment_id
profile_role_data = guardian_data.pop('profile_role_data', None)
profile_role = guardian_data.pop('profile_role', None)
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
guardian_data['profile_role'] = profile_role
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)
if profile_role:
guardian_data['profile_role'] = profile_role
guardian_instance, created = Guardian.objects.update_or_create(
id=guardian_data.get('id'),
@ -141,7 +152,7 @@ class StudentSerializer(serializers.ModelSerializer):
def create(self, validated_data):
guardians_data = validated_data.pop('guardians', [])
siblings_data = validated_data.pop('siblings', [])
languages_data = validated_data.pop('lanspoken_languagesguages', [])
languages_data = validated_data.pop('spoken_languages', [])
student = Student.objects.create(**validated_data)
student.guardians.set(self.create_or_update_guardians(guardians_data))
student.siblings.set(self.create_or_update_siblings(siblings_data))
@ -268,10 +279,16 @@ class RegistrationFormByParentSerializer(serializers.ModelSerializer):
class GuardianByDICreationSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
associated_profile_email = serializers.SerializerMethodField()
class Meta:
model = Guardian
fields = ['id', 'last_name', 'first_name', 'email', 'profile']
fields = ['id', 'last_name', 'first_name', 'associated_profile_email']
def get_associated_profile_email(self, obj):
if obj.profile_role and obj.profile_role.profile:
return obj.profile_role.profile.email
return None
class StudentByRFCreationSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)