feat: Ajout d'une fonction de dissociation entre un responsable et un

élève
This commit is contained in:
N3WT DE COMPET
2025-03-20 20:28:12 +01:00
parent fb73f9e9a8
commit 3bcc620ee1
9 changed files with 148 additions and 40 deletions

View File

@ -120,6 +120,7 @@ class ProfileRoleSerializer(serializers.ModelSerializer):
registration_form = RegistrationForm.objects.filter(student=student).first()
registration_status = registration_form.status if registration_form else None
students_list.append({
"id": f"{student.id}",
"student_name": f"{student.last_name} {student.first_name}",
"registration_status": registration_status
})

View File

@ -66,7 +66,8 @@ class TeacherSerializer(serializers.ModelSerializer):
def create(self, validated_data):
specialities_data = validated_data.pop('specialities', None)
associated_profile_email = validated_data.pop('associated_profile_email')
establishment_id = validated_data.pop('establishment')
establishment_id = validated_data.get('establishment')
print(f'debug : {validated_data}')
role_type = validated_data.pop('role_type')
profile, created = Profile.objects.get_or_create(

View File

@ -5,7 +5,7 @@ from . import views
# RF
from .views import RegisterFormView, RegisterFormWithIdView, send, resend, archive
# SubClasses
from .views import StudentView, GuardianView, ChildrenListView, StudentListView
from .views import StudentView, GuardianView, ChildrenListView, StudentListView, DissociateGuardianView
# Files
from .views import RegistrationTemplateMasterView, RegistrationTemplateMasterSimpleView, RegistrationTemplateView, RegistrationTemplateSimpleView
from .views import RegistrationFileGroupView, RegistrationFileGroupSimpleView, get_registration_files_by_group
@ -38,4 +38,7 @@ urlpatterns = [
re_path(r'^registrationTemplates/(?P<id>[0-9]+)$', RegistrationTemplateSimpleView.as_view(), name='registrationTemplates'),
re_path(r'^registrationTemplates$', RegistrationTemplateView.as_view(), name="registrationTemplates"),
re_path(r'^students/(?P<student_id>[0-9]+)/guardians/(?P<guardian_id>[0-9]+)/dissociate', DissociateGuardianView.as_view(), name='dissociate-guardian'),
]

View File

@ -2,7 +2,7 @@ from .register_form_views import RegisterFormView, RegisterFormWithIdView, send,
from .registration_file_views import RegistrationTemplateMasterView, RegistrationTemplateMasterSimpleView, RegistrationTemplateView, RegistrationTemplateSimpleView
from .registration_file_group_views import RegistrationFileGroupView, RegistrationFileGroupSimpleView, get_registration_files_by_group
from .student_views import StudentView, StudentListView, ChildrenListView
from .guardian_views import GuardianView
from .guardian_views import GuardianView, DissociateGuardianView
__all__ = [
'RegisterFormView',
@ -22,4 +22,5 @@ __all__ = [
'StudentListView',
'ChildrenListView',
'GuardianView',
'DissociateGuardianView'
]

View File

@ -1,9 +1,10 @@
from django.http.response import JsonResponse
from rest_framework import status
from rest_framework.views import APIView
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from Subscriptions.models import Guardian
from Subscriptions.models import Guardian, Student
from N3wtSchool import bdd
class GuardianView(APIView):
@ -32,3 +33,43 @@ class GuardianView(APIView):
def get(self, request):
lastGuardian = bdd.getLastId(Guardian)
return JsonResponse({"lastid":lastGuardian}, safe=False)
class DissociateGuardianView(APIView):
"""
Vue pour dissocier un Guardian d'un Student.
"""
def put(self, request, student_id, guardian_id):
try:
# Récupérer l'étudiant
student = Student.objects.get(id=student_id)
# Récupérer le guardian
guardian = Guardian.objects.get(id=guardian_id)
# Supprimer la relation entre le student et le guardian
student.guardians.remove(guardian)
# Vérifier si le guardian n'est plus associé à aucun élève
if guardian.student_set.count() == 0: # Utilise la relation ManyToMany inverse
guardian.delete()
return JsonResponse(
{"message": f"Le guardian {guardian.last_name} {guardian.first_name} a été dissocié de l'étudiant {student.last_name} {student.first_name}."},
status=status.HTTP_200_OK
)
except Student.DoesNotExist:
return JsonResponse(
{"error": "Étudiant non trouvé."},
status=status.HTTP_404_NOT_FOUND
)
except Guardian.DoesNotExist:
return JsonResponse(
{"error": "Guardian non trouvé."},
status=status.HTTP_404_NOT_FOUND
)
except Exception as e:
return JsonResponse(
{"error": f"Une erreur est survenue : {str(e)}"},
status=status.HTTP_500_INTERNAL_SERVER_ERROR
)