mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 07:53:23 +00:00
fix: conflits + closeModal lors de la création d'un RF
This commit is contained in:
@ -24,7 +24,6 @@ import Modal from '@/components/Modal';
|
||||
import InscriptionForm from '@/components/Inscription/InscriptionForm';
|
||||
import AffectationClasseForm from '@/components/AffectationClasseForm';
|
||||
import { useEstablishment } from '@/context/EstablishmentContext';
|
||||
import ValidateSubscription from '@/components/Inscription/ValidateSubscription';
|
||||
|
||||
import {
|
||||
PENDING,
|
||||
@ -56,8 +55,6 @@ import {
|
||||
} from '@/app/actions/schoolAction';
|
||||
|
||||
import {
|
||||
createProfile,
|
||||
deleteProfile,
|
||||
fetchProfiles,
|
||||
} from '@/app/actions/authAction';
|
||||
|
||||
@ -115,6 +112,9 @@ export default function Page({ params: { locale } }) {
|
||||
const [profiles, setProfiles] = useState([]);
|
||||
const [isOpenAddGuardian, setIsOpenAddGuardian] = useState(false);
|
||||
|
||||
const [isFilesModalOpen, setIsFilesModalOpen] = useState(false);
|
||||
const [selectedRowFiles, setSelectedRowFiles] = useState([]);
|
||||
|
||||
const csrfToken = useCsrfToken();
|
||||
const router = useRouter();
|
||||
const { selectedEstablishmentId } = useEstablishment();
|
||||
@ -141,7 +141,30 @@ export default function Page({ params: { locale } }) {
|
||||
setStudent(eleveSelected);
|
||||
};
|
||||
|
||||
const requestErrorHandler = (err) => {
|
||||
const openFilesModal = (row) => {
|
||||
const files = [];
|
||||
if (row.registration_file) {
|
||||
files.push({
|
||||
name: 'Fichier d\'inscription',
|
||||
url: `${BASE_URL}${row.registration_file}`,
|
||||
});
|
||||
}
|
||||
if (row.sepa_file) {
|
||||
files.push({
|
||||
name: 'Mandat SEPA',
|
||||
url: `${BASE_URL}${row.sepa_file}`,
|
||||
});
|
||||
}
|
||||
setSelectedRowFiles(files);
|
||||
setIsFilesModalOpen(true);
|
||||
};
|
||||
|
||||
const closeFilesModal = () => {
|
||||
setIsFilesModalOpen(false);
|
||||
setSelectedRowFiles([]);
|
||||
};
|
||||
|
||||
const requestErrorHandler = (err)=>{
|
||||
logger.error('Error fetching data:', err);
|
||||
};
|
||||
|
||||
@ -451,6 +474,7 @@ export default function Page({ params: { locale } }) {
|
||||
|
||||
const createRF = (updatedData) => {
|
||||
logger.debug('createRF updatedData:', updatedData);
|
||||
|
||||
const selectedRegistrationFeesIds =
|
||||
updatedData.selectedRegistrationFees.map((feeId) => feeId);
|
||||
const selectedRegistrationDiscountsIds =
|
||||
@ -538,74 +562,66 @@ export default function Page({ params: { locale } }) {
|
||||
const parent_masters = parentFileMasters.filter((file) =>
|
||||
file.groups.includes(selectedFileGroup)
|
||||
);
|
||||
const clonePromises = masters
|
||||
.map((templateMaster, index) => {
|
||||
return cloneTemplate(
|
||||
templateMaster.id,
|
||||
updatedData.guardianEmail,
|
||||
templateMaster.is_required
|
||||
)
|
||||
.then((clonedDocument) => {
|
||||
// Sauvegarde des schoolFileTemplates clonés dans la base de données
|
||||
const cloneData = {
|
||||
name: `${templateMaster.name}_${updatedData.guardianFirstName}_${updatedData.guardianLastName}`,
|
||||
slug: clonedDocument.slug,
|
||||
id: clonedDocument.id,
|
||||
master: templateMaster.id,
|
||||
registration_form: data.student.id,
|
||||
};
|
||||
|
||||
return createRegistrationSchoolFileTemplate(
|
||||
cloneData,
|
||||
csrfToken
|
||||
)
|
||||
.then((response) => {
|
||||
logger.debug('Template enregistré avec succès:', response);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(
|
||||
"Erreur lors de l'enregistrement du template:",
|
||||
error
|
||||
);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error('Error during cloning or sending:', error);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error('Error:', error);
|
||||
});
|
||||
const clonePromises = masters.map((templateMaster) => {
|
||||
return cloneTemplate(
|
||||
templateMaster.id,
|
||||
updatedData.guardianEmail,
|
||||
templateMaster.is_required
|
||||
)
|
||||
.then((clonedDocument) => {
|
||||
// Sauvegarde des schoolFileTemplates clonés dans la base de données
|
||||
const cloneData = {
|
||||
name: `${templateMaster.name}_${updatedData.guardianFirstName}_${updatedData.guardianLastName}`,
|
||||
slug: clonedDocument.slug,
|
||||
id: clonedDocument.id,
|
||||
master: templateMaster.id,
|
||||
registration_form: data.student.id,
|
||||
};
|
||||
|
||||
return createRegistrationSchoolFileTemplate(cloneData, csrfToken)
|
||||
.then((response) => {
|
||||
logger.debug('Template enregistré avec succès:', response);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(
|
||||
'Erreur lors de l\'enregistrement du template:',
|
||||
error
|
||||
);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error('Error during cloning or sending:', error);
|
||||
});
|
||||
});
|
||||
|
||||
// Créer les parentFileTemplates pour chaque parentMaster
|
||||
const parentClonePromises = parent_masters.map(
|
||||
(parentMaster, index) => {
|
||||
const parentTemplateData = {
|
||||
master: parentMaster.id,
|
||||
registration_form: data.student.id,
|
||||
};
|
||||
const parentClonePromises = parent_masters.map((parentMaster) => {
|
||||
const parentTemplateData = {
|
||||
master: parentMaster.id,
|
||||
registration_form: data.student.id,
|
||||
};
|
||||
|
||||
return createRegistrationParentFileTemplate(
|
||||
parentTemplateData,
|
||||
csrfToken
|
||||
)
|
||||
.then((response) => {
|
||||
logger.debug(
|
||||
'Parent template enregistré avec succès:',
|
||||
response
|
||||
);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(
|
||||
"Erreur lors de l'enregistrement du parent template:",
|
||||
error
|
||||
);
|
||||
});
|
||||
}
|
||||
);
|
||||
return createRegistrationParentFileTemplate(
|
||||
parentTemplateData,
|
||||
csrfToken
|
||||
)
|
||||
.then((response) => {
|
||||
logger.debug(
|
||||
'Parent template enregistré avec succès:',
|
||||
response
|
||||
);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(
|
||||
'Erreur lors de l\'enregistrement du parent template:',
|
||||
error
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// Attendre que tous les clones soient créés
|
||||
Promise.all(clonePromises)
|
||||
// Attendre que tous les clones (school et parent) soient créés
|
||||
Promise.all([...clonePromises, ...parentClonePromises])
|
||||
.then(() => {
|
||||
// Mise à jour immédiate des données
|
||||
setRegistrationFormsDataPending((prevState) => [
|
||||
@ -620,7 +636,7 @@ export default function Page({ params: { locale } }) {
|
||||
updatedData.studentFirstName
|
||||
);
|
||||
}
|
||||
closeModal();
|
||||
closeModal(); // Appeler closeModal ici après que tout soit terminé
|
||||
// Forcer le rechargement complet des données
|
||||
setReloadFetch(true);
|
||||
})
|
||||
@ -755,6 +771,14 @@ export default function Page({ params: { locale } }) {
|
||||
},
|
||||
],
|
||||
3: [
|
||||
{
|
||||
icon: (
|
||||
<span title="Voir les fichiers">
|
||||
<FileText className="w-5 h-5 text-cyan-500 hover:text-cyan-700" />
|
||||
</span>
|
||||
),
|
||||
onClick: () => openFilesModal(row),
|
||||
},
|
||||
{
|
||||
icon: (
|
||||
<span title="Valider le dossier">
|
||||
@ -781,6 +805,16 @@ export default function Page({ params: { locale } }) {
|
||||
onClick: () => openModalAssociationEleve(row.student),
|
||||
},
|
||||
],
|
||||
7: [
|
||||
{
|
||||
icon: (
|
||||
<span title="Voir les fichiers">
|
||||
<FileText className="w-5 h-5 text-cyan-500 hover:text-cyan-700" />
|
||||
</span>
|
||||
),
|
||||
onClick: () => openFilesModal(row),
|
||||
},
|
||||
],
|
||||
default: [
|
||||
{
|
||||
icon: (
|
||||
@ -1132,21 +1166,45 @@ 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}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
<Modal
|
||||
isOpen={isOpenAddGuardian}
|
||||
setIsOpen={setIsOpenAddGuardian}
|
||||
title="Ajouter un responsable"
|
||||
ContentComponent={() => (
|
||||
<InscriptionForm
|
||||
students={students}
|
||||
profiles={profiles}
|
||||
onSubmit={updateRF}
|
||||
currentStep={2}
|
||||
showOnlyStep2={true}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
{isFilesModalOpen && (
|
||||
<Modal
|
||||
isOpen={isFilesModalOpen}
|
||||
setIsOpen={setIsFilesModalOpen}
|
||||
title="Fichiers disponibles"
|
||||
ContentComponent={() => (
|
||||
<ul className="space-y-4">
|
||||
{selectedRowFiles.map((file, index) => (
|
||||
<li key={index} className="flex items-center gap-2">
|
||||
<FileText className="w-5 h-5 text-gray-500" />
|
||||
<a
|
||||
href={file.url}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-blue-500 hover:text-blue-700 underline"
|
||||
>
|
||||
{file.name}
|
||||
</a>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user