fix: Ne pas dissocier de responsable s'il n'y en a pas d'autre rattaché

à l'élève
This commit is contained in:
N3WT DE COMPET
2025-05-03 15:35:52 +02:00
parent 2ab1684791
commit ac0672f334
5 changed files with 24 additions and 45 deletions

View File

@ -50,11 +50,22 @@ class DissociateGuardianView(APIView):
# Récupérer le guardian # Récupérer le guardian
guardian = Guardian.objects.get(id=guardian_id) guardian = Guardian.objects.get(id=guardian_id)
# Vérifier s'il y a d'autres guardians associés au student
other_guardians = student.guardians.exclude(id=guardian_id)
if not other_guardians.exists():
return JsonResponse(
{"error": "Impossible de dissocier ce responsable car il n'en existe aucun autre rattaché à l'élève."},
status=status.HTTP_400_BAD_REQUEST
)
# Supprimer la relation entre le student et le guardian # Supprimer la relation entre le student et le guardian
student.guardians.remove(guardian) student.guardians.remove(guardian)
if guardian.profile_role: # Mettre à jour le responsable principal (par exemple, le premier autre guardian)
guardian.profile_role.save() new_main_guardian = other_guardians.first()
if new_main_guardian:
# Logique pour définir le nouveau responsable principal
print(f"Le guardian {new_main_guardian} devient le responsable principal.")
isGuardianDeleted = False isGuardianDeleted = False
# Vérifier si le guardian n'est plus associé à aucun élève # Vérifier si le guardian n'est plus associé à aucun élève
@ -76,16 +87,6 @@ class DissociateGuardianView(APIView):
# Supprimer le guardian # Supprimer le guardian
guardian.delete() guardian.delete()
# Récupérer le RegistrationForm associé au Student
registerForm = bdd.getObject(RegistrationForm, "student__id", student_id)
if registerForm:
# Réinitialiser le statut en "Créé"
registerForm.status = RegistrationForm.RegistrationFormStatus.RF_CREATED
registerForm.save()
# Supprimer le fichier et le dossier associés
util.delete_registration_files(registerForm)
return JsonResponse( return JsonResponse(
{ {
"message": f"Le guardian {guardian.last_name} {guardian.first_name} a été dissocié de l'étudiant {student.last_name} {student.first_name}.", "message": f"Le guardian {guardian.last_name} {guardian.first_name} a été dissocié de l'étudiant {student.last_name} {student.first_name}.",

View File

@ -142,15 +142,6 @@ export default function Page({ params: { locale } }) {
setIsOpen(false); setIsOpen(false);
}; };
const handleOpenAddGuardian = (eleveSelected) => {
setIsOpenAddGuardian(true);
setStudent(eleveSelected);
};
const handleCloseAddGuardian = () => {
setIsOpenAddGuardian(false);
};
const openModalAssociationEleve = (eleveSelected) => { const openModalAssociationEleve = (eleveSelected) => {
setIsOpenAffectationClasse(true); setIsOpenAffectationClasse(true);
setStudent(eleveSelected); setStudent(eleveSelected);
@ -1175,22 +1166,6 @@ export default function Page({ params: { locale } }) {
)} )}
/> />
)} )}
{isOpenAddGuardian && (
<Modal
isOpen={isOpenAddGuardian}
setIsOpen={setIsOpenAddGuardian}
title="Ajouter un responsable"
ContentComponent={() => (
<InscriptionForm
students={students}
profiles={profiles}
onSubmit={updateRF}
currentStep={2}
showOnlyStep2={true}
/>
)}
/>
)}
{isSepaUploadModalOpen && ( {isSepaUploadModalOpen && (
<Modal <Modal
isOpen={isSepaUploadModalOpen} isOpen={isSepaUploadModalOpen}

View File

@ -200,8 +200,16 @@ export const dissociateGuardian = async (studentId, guardianId) => {
}, },
} }
); );
if (!response.ok) { if (!response.ok) {
throw new Error('Erreur lors de la dissociation.'); // Extraire le message d'erreur du backend
const errorData = await response.json();
const errorMessage =
errorData?.error || 'Une erreur est survenue lors de la dissociation.';
// Jeter une erreur avec le message spécifique
throw new Error(errorMessage);
} }
return response.json(); return response.json();
}; };

View File

@ -21,7 +21,6 @@ const InscriptionForm = ({
tuitionFees, tuitionFees,
profiles, profiles,
onSubmit, onSubmit,
currentStep,
groups, groups,
showOnlyStep2 = false, showOnlyStep2 = false,
}) => { }) => {
@ -54,7 +53,7 @@ const InscriptionForm = ({
}; };
}); });
const [step, setStep] = useState(currentStep || 1); const [step, setStep] = useState(1);
const [selectedStudent, setSelectedEleve] = useState(''); const [selectedStudent, setSelectedEleve] = useState('');
const [existingGuardians, setExistingGuardians] = useState([]); const [existingGuardians, setExistingGuardians] = useState([]);
const [totalRegistrationAmount, setTotalRegistrationAmount] = useState(0); const [totalRegistrationAmount, setTotalRegistrationAmount] = useState(0);
@ -134,10 +133,6 @@ const InscriptionForm = ({
formDataRef.current = formData; // Mettre à jour la référence à chaque changement de formData formDataRef.current = formData; // Mettre à jour la référence à chaque changement de formData
}, [formData]); }, [formData]);
useEffect(() => {
setStep(currentStep || 1);
}, [currentStep]);
const handleToggleChange = () => { const handleToggleChange = () => {
setFormData({ ...formData, autoMail: !formData.autoMail }); setFormData({ ...formData, autoMail: !formData.autoMail });
}; };

View File

@ -111,7 +111,7 @@ const ProfileDirectory = ({
setPopupVisible(true); setPopupVisible(true);
}) })
.catch((error) => { .catch((error) => {
setPopupMessage('Erreur lors de la dissociation du responsable.'); setPopupMessage(error.message);
setPopupVisible(true); setPopupVisible(true);
}); });
setConfirmPopupVisible(false); setConfirmPopupVisible(false);