mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 07:53:23 +00:00
feat: Refactoring de la fonction de création de profil sur guardian côté
FRONT
This commit is contained in:
@ -2,8 +2,8 @@ from rest_framework import serializers
|
||||
from .models import RegistrationFileGroup, RegistrationForm, Student, Guardian, Sibling, Language, RegistrationTemplateMaster, RegistrationTemplate
|
||||
from School.models import SchoolClass, Fee, Discount, FeeType
|
||||
from School.serializers import FeeSerializer, DiscountSerializer
|
||||
from Auth.models import ProfileRole
|
||||
from Auth.serializers import ProfileSerializer
|
||||
from Auth.models import ProfileRole, Profile
|
||||
from Auth.serializers import ProfileSerializer, ProfileRoleSerializer
|
||||
from GestionMessagerie.models import Messagerie
|
||||
from GestionNotification.models import Notification
|
||||
from N3wtSchool import settings
|
||||
@ -24,9 +24,14 @@ class RegistrationTemplateSerializer(serializers.ModelSerializer):
|
||||
fields = '__all__'
|
||||
|
||||
class GuardianSimpleSerializer(serializers.ModelSerializer):
|
||||
associated_profile_email = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Guardian
|
||||
fields = ['id', 'email']
|
||||
fields = ['id', 'associated_profile_email']
|
||||
|
||||
def get_associated_profile_email(self, obj):
|
||||
return obj.profile_role.profile.email
|
||||
|
||||
class RegistrationFormSimpleSerializer(serializers.ModelSerializer):
|
||||
guardians = GuardianSimpleSerializer(many=True, source='student.guardians')
|
||||
@ -68,7 +73,7 @@ class SiblingSerializer(serializers.ModelSerializer):
|
||||
|
||||
class GuardianSerializer(serializers.ModelSerializer):
|
||||
id = serializers.IntegerField(required=False)
|
||||
profile_role = serializers.PrimaryKeyRelatedField(queryset=ProfileRole.objects.all(), required=True)
|
||||
profile_role = ProfileRoleSerializer()
|
||||
associated_profile_email = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
@ -78,13 +83,11 @@ class GuardianSerializer(serializers.ModelSerializer):
|
||||
def get_associated_profile_email(self, obj):
|
||||
return obj.profile_role.profile.email
|
||||
|
||||
|
||||
class StudentSerializer(serializers.ModelSerializer):
|
||||
|
||||
id = serializers.IntegerField(required=False)
|
||||
guardians = GuardianSerializer(many=True, required=False)
|
||||
siblings = SiblingSerializer(many=True, required=False)
|
||||
languages = LanguageSerializer(many=True, required=False)
|
||||
spoken_languages = LanguageSerializer(many=True, required=False)
|
||||
associated_class_id = serializers.PrimaryKeyRelatedField(queryset=SchoolClass.objects.all(), source='associated_class', required=False, write_only=False, read_only=False)
|
||||
age = serializers.SerializerMethodField()
|
||||
formatted_birth_date = serializers.SerializerMethodField()
|
||||
@ -95,30 +98,19 @@ class StudentSerializer(serializers.ModelSerializer):
|
||||
model = Student
|
||||
fields = '__all__'
|
||||
|
||||
def get_or_create_packages(self, guardians_data):
|
||||
def create_or_update_guardians(self, guardians_data):
|
||||
guardians_ids = []
|
||||
for guardian_data in guardians_data:
|
||||
guardian_instance, created = Guardian.objects.get_or_create(
|
||||
id=guardian_data.get('id'),
|
||||
defaults=guardian_data
|
||||
)
|
||||
guardians_ids.append(guardian_instance.id)
|
||||
return guardians_ids
|
||||
profile_role_data = guardian_data.pop('profile_role')
|
||||
establishment_id = profile_role_data.pop('establishment').id
|
||||
profile_role_data['establishment'] = establishment_id
|
||||
|
||||
def create(self, validated_data):
|
||||
guardians_data = validated_data.pop('guardians', [])
|
||||
siblings_data = validated_data.pop('siblings', [])
|
||||
languages_data = validated_data.pop('spoken_languages', [])
|
||||
student = Student.objects.create(**validated_data)
|
||||
student.guardians.set(self.get_or_create_packages(guardians_data))
|
||||
student.siblings.set(self.get_or_create_packages(siblings_data))
|
||||
student.spoken_languages.set(self.get_or_create_packages(languages_data))
|
||||
profile_role_serializer = ProfileRoleSerializer(data=profile_role_data)
|
||||
profile_role_serializer.is_valid(raise_exception=True)
|
||||
profile_role = profile_role_serializer.save()
|
||||
|
||||
return student
|
||||
guardian_data['profile_role'] = profile_role
|
||||
|
||||
def create_or_update_packages(self, guardians_data):
|
||||
guardians_ids = []
|
||||
for guardian_data in guardians_data:
|
||||
guardian_instance, created = Guardian.objects.update_or_create(
|
||||
id=guardian_data.get('id'),
|
||||
defaults=guardian_data
|
||||
@ -126,16 +118,47 @@ class StudentSerializer(serializers.ModelSerializer):
|
||||
guardians_ids.append(guardian_instance.id)
|
||||
return guardians_ids
|
||||
|
||||
def create_or_update_siblings(self, siblings_data):
|
||||
siblings_ids = []
|
||||
for sibling_data in siblings_data:
|
||||
sibling_instance, created = Sibling.objects.update_or_create(
|
||||
id=sibling_data.get('id'),
|
||||
defaults=sibling_data
|
||||
)
|
||||
siblings_ids.append(sibling_instance.id)
|
||||
return siblings_ids
|
||||
|
||||
def create_or_update_languages(self, languages_data):
|
||||
languages_ids = []
|
||||
for language_data in languages_data:
|
||||
language_instance, created = Language.objects.update_or_create(
|
||||
id=language_data.get('id'),
|
||||
defaults=language_data
|
||||
)
|
||||
languages_ids.append(language_instance.id)
|
||||
return languages_ids
|
||||
|
||||
def create(self, validated_data):
|
||||
guardians_data = validated_data.pop('guardians', [])
|
||||
siblings_data = validated_data.pop('siblings', [])
|
||||
languages_data = validated_data.pop('lanspoken_languagesguages', [])
|
||||
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))
|
||||
student.spoken_languages.set(self.create_or_update_languages(languages_data))
|
||||
|
||||
return student
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
guardians_data = validated_data.pop('guardians', [])
|
||||
siblings_data = validated_data.pop('siblings', [])
|
||||
languages_data = validated_data.pop('spoken_languages', [])
|
||||
if guardians_data:
|
||||
instance.guardians.set(self.create_or_update_packages(guardians_data))
|
||||
instance.guardians.set(self.create_or_update_guardians(guardians_data))
|
||||
if siblings_data:
|
||||
instance.siblings.set(self.create_or_update_packages(siblings_data))
|
||||
instance.siblings.set(self.create_or_update_siblings(siblings_data))
|
||||
if languages_data:
|
||||
instance.spoken_languages.set(self.create_or_update_packages(languages_data))
|
||||
instance.spoken_languages.set(self.create_or_update_languages(languages_data))
|
||||
|
||||
for field in self.fields:
|
||||
try:
|
||||
|
||||
@ -20,7 +20,13 @@ class RegistrationFileGroupView(APIView):
|
||||
"""
|
||||
Récupère tous les groupes de fichiers d'inscription.
|
||||
"""
|
||||
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)
|
||||
|
||||
groups = RegistrationFileGroup.objects.all()
|
||||
if groups:
|
||||
groups = groups.filter(establishment_id=establishment_id).distinct()
|
||||
serializer = RegistrationFileGroupSerializer(groups, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user