mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 07:53:23 +00:00
fix: Ne pas dissocier de responsable s'il n'y en a pas d'autre rattaché
à l'élève
This commit is contained in:
@ -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}.",
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
@ -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();
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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 });
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user