mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Gestion des rattachements de Guardian à des RF déjà existants
This commit is contained in:
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user