diff --git a/Back-End/Auth/views.py b/Back-End/Auth/views.py index 2ef3c14..d322df2 100644 --- a/Back-End/Auth/views.py +++ b/Back-End/Auth/views.py @@ -22,7 +22,7 @@ from .models import Profile, ProfileRole from rest_framework.decorators import action, api_view from Auth.serializers import ProfileSerializer, ProfileRoleSerializer -from Subscriptions.models import RegistrationForm +from Subscriptions.models import RegistrationForm, Guardian import Subscriptions.mailManager as mailer import Subscriptions.util as util import logging @@ -577,12 +577,41 @@ class ProfileRoleSimpleView(APIView): responses={200: 'Suppression réussie'} ) def delete(self, request, id): - profile_role = ProfileRole.objects.get(id=id) - profile = profile_role.profile - profile_role.delete() + try: + # Récupérer le ProfileRole + profile_role = ProfileRole.objects.get(id=id) + profile = profile_role.profile - # Vérifier si le profil n'a plus de rôles associés - if not ProfileRole.objects.filter(profile=profile).exists(): - profile.delete() + # Vérifier si le ProfileRole est de type PARENT + if profile_role.role_type == ProfileRole.RoleType.PROFIL_PARENT: + guardian = Guardian.objects.filter(profile_role=profile_role).first() + if guardian: + # Vérifier si ce Guardian est rattaché à des élèves + for student in guardian.student_set.all(): + # Vérifier si l'élève n'a pas d'autres Guardians + other_guardians = student.guardians.exclude(id=guardian.id) + if not other_guardians.exists(): + return JsonResponse( + {"error": f"Impossible de supprimer ce profil car l'élève {student.first_name} {student.last_name} n'aura plus de responsable légal."}, + status=status.HTTP_400_BAD_REQUEST + ) - return JsonResponse({'message': 'Suppression réussie'}, safe=False) \ No newline at end of file + # Supprimer le ProfileRole + profile_role.delete() + + # Vérifier si le profil n'a plus de rôles associés + if not ProfileRole.objects.filter(profile=profile).exists(): + profile.delete() + + return JsonResponse({'message': 'Suppression réussie'}, safe=False) + + except ProfileRole.DoesNotExist: + return JsonResponse( + {"error": "ProfileRole 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 + ) \ No newline at end of file diff --git a/Front-End/messages/fr/ResponsableInputFields.json b/Front-End/messages/fr/ResponsableInputFields.json index 951a3dc..461ce67 100644 --- a/Front-End/messages/fr/ResponsableInputFields.json +++ b/Front-End/messages/fr/ResponsableInputFields.json @@ -7,6 +7,5 @@ "phone": "Téléphone", "birthdate": "Date de naissance", "profession": "Profession", - "address": "Adresse", - "add_responsible": "Ajouter un responsable" + "address": "Adresse" } diff --git a/Front-End/src/app/[locale]/admin/subscriptions/page.js b/Front-End/src/app/[locale]/admin/subscriptions/page.js index 5089c24..5e017b3 100644 --- a/Front-End/src/app/[locale]/admin/subscriptions/page.js +++ b/Front-End/src/app/[locale]/admin/subscriptions/page.js @@ -885,20 +885,9 @@ export default function Page({ params: { locale } }) { { name: t('mainContactMail'), transform: (row) => - row.student.guardians && row.student.guardians.length > 0 ? ( + row.student.guardians && row.student.guardians.length > 0 && ( row.student.guardians[0].associated_profile_email - ) : ( -
- -
- ), + ) }, { name: t('phone'), diff --git a/Front-End/src/app/actions/authAction.js b/Front-End/src/app/actions/authAction.js index 875f790..e9955ba 100644 --- a/Front-End/src/app/actions/authAction.js +++ b/Front-End/src/app/actions/authAction.js @@ -92,15 +92,29 @@ export const updateProfileRoles = (id, data, csrfToken) => { return fetch(request).then(requestResponseHandler); }; -export const deleteProfileRoles = (id, csrfToken) => { - const request = new Request(`${BE_AUTH_PROFILES_ROLES_URL}/${id}`, { - method: 'DELETE', - headers: { - 'X-CSRFToken': csrfToken, - }, - credentials: 'include', - }); - return fetch(request).then(requestResponseHandler); +export const deleteProfileRoles = async (id, csrfToken) => { + const response = await fetch( + `${BE_AUTH_PROFILES_ROLES_URL}/${id}`, + { + method: 'DELETE', + headers: { + 'X-CSRFToken': csrfToken, + }, + credentials: 'include', + } + ); + + if (!response.ok) { + // Extraire le message d'erreur du backend + const errorData = await response.json(); + const errorMessage = + errorData?.error || 'Une erreur est survenue lors de la suppression du profil.'; + + // Jeter une erreur avec le message spécifique + throw new Error(errorMessage); + } + + return response.json(); }; export const fetchProfiles = () => { diff --git a/Front-End/src/components/ProfileDirectory.js b/Front-End/src/components/ProfileDirectory.js index 914c1ed..98af5ab 100644 --- a/Front-End/src/components/ProfileDirectory.js +++ b/Front-End/src/components/ProfileDirectory.js @@ -91,7 +91,7 @@ const ProfileDirectory = ({ setPopupVisible(true); }) .catch((error) => { - setPopupMessage('Erreur lors de la suppression du profil.'); + setPopupMessage(error.message); setPopupVisible(true); }); setConfirmPopupVisible(false);