diff --git a/Front-End/src/components/Inscription/DynamicFormsList.js b/Front-End/src/components/Inscription/DynamicFormsList.js index c709a8a..6dcda16 100644 --- a/Front-End/src/components/Inscription/DynamicFormsList.js +++ b/Front-End/src/components/Inscription/DynamicFormsList.js @@ -55,6 +55,11 @@ export default function DynamicFormsList({ return cleaned; }; + const isDynamicForm = (template) => + template.formTemplateData && + Array.isArray(template.formTemplateData.fields) && + template.formTemplateData.fields.length > 0; + const hasLocalCompletion = (templateId) => { if (formsValidation[templateId] === true) return true; @@ -65,11 +70,22 @@ export default function DynamicFormsList({ } const savedResponses = existingResponses[templateId]; - return !!( + if ( savedResponses && typeof savedResponses === 'object' && Object.keys(savedResponses).length > 0 - ); + ) { + return true; + } + + // Pour les formulaires non dynamiques (upload de fichier), + // vérifier si un fichier a déjà été uploadé sur le template + const template = schoolFileTemplates.find((tpl) => tpl.id === templateId); + if (template && template.file && !isDynamicForm(template)) { + return true; + } + + return false; }; // Initialiser les données avec les réponses existantes @@ -233,11 +249,6 @@ export default function DynamicFormsList({ } }; - const isDynamicForm = (template) => - template.formTemplateData && - Array.isArray(template.formTemplateData.fields) && - template.formTemplateData.fields.length > 0; - if (!schoolFileTemplates || schoolFileTemplates.length === 0) { return (
@@ -497,10 +508,10 @@ export default function DynamicFormsList({ {/* Cas non validé : bouton télécharger + upload */} {currentTemplate.isValidated !== true && (
- {/* Bouton télécharger le document source */} - {currentTemplate.file && ( + {/* Bouton télécharger le document source (fichier maître) */} + {(currentTemplate.master_file_url || currentTemplate.file) && ( @@ -517,6 +528,7 @@ export default function DynamicFormsList({ onFileSelect={(file) => handleUpload(file, currentTemplate) } + existingFile={currentTemplate.file_url || currentTemplate.file} required enable={true} /> diff --git a/Front-End/src/components/Inscription/FilesModal.js b/Front-End/src/components/Inscription/FilesModal.js index 5453651..9a54b23 100644 --- a/Front-End/src/components/Inscription/FilesModal.js +++ b/Front-End/src/components/Inscription/FilesModal.js @@ -67,11 +67,17 @@ const FilesModal = ({ : null, schoolFiles: fetchedSchoolFiles.map((file) => ({ name: file.name || 'Document scolaire', - url: file.file ? getSecureFileUrl(file.file) : null, + url: + file.file_url || file.file + ? getSecureFileUrl(file.file_url || file.file) + : null, })), parentFiles: parentFiles.map((file) => ({ name: file.master_name || 'Document parent', - url: file.file ? getSecureFileUrl(file.file) : null, + url: + file.file_url || file.file + ? getSecureFileUrl(file.file_url || file.file) + : null, })), sepaFile: selectedRegisterForm.sepa_file ? { diff --git a/Front-End/src/components/Inscription/InscriptionFormShared.js b/Front-End/src/components/Inscription/InscriptionFormShared.js index ea8d3bd..35748fd 100644 --- a/Front-End/src/components/Inscription/InscriptionFormShared.js +++ b/Front-End/src/components/Inscription/InscriptionFormShared.js @@ -11,6 +11,7 @@ import { } from '@/app/actions/subscriptionAction'; import { editRegistrationSchoolFileTemplates, + editRegistrationParentFileTemplates, } from '@/app/actions/registerFileGroupAction'; import { fetchRegistrationPaymentModes, @@ -415,7 +416,8 @@ export default function InscriptionFormShared({ const templateData = await fetchFormResponses(template.id); if (templateData && templateData.formTemplateData) { if (templateData.formTemplateData.responses) { - responsesMap[template.id] = templateData.formTemplateData.responses; + responsesMap[template.id] = + templateData.formTemplateData.responses; } else { // Extraire les réponses depuis les champs const responses = {}; @@ -554,7 +556,7 @@ export default function InscriptionFormShared({ const updateData = new FormData(); updateData.append('file', file, finalFileName); - return editRegistrationSchoolFileTemplates( + return editRegistrationParentFileTemplates( selectedFile.id, updateData, csrfToken @@ -596,6 +598,46 @@ export default function InscriptionFormShared({ }); }; + const handleSchoolFileUpload = (file, selectedFile) => { + if (!file || !selectedFile) { + logger.error('Données manquantes pour le téléversement.'); + return Promise.reject( + new Error('Données manquantes pour le téléversement.') + ); + } + + const updateData = new FormData(); + updateData.append('file', file); + + return editRegistrationSchoolFileTemplates( + selectedFile.id, + updateData, + csrfToken + ) + .then((response) => { + logger.debug('School file template mis à jour avec succès :', response); + + // Mettre à jour uniquement schoolFileTemplates + setSchoolFileTemplates((prevTemplates) => + prevTemplates.map((template) => + template.id === selectedFile.id + ? { + ...template, + file: response.data.file, + file_url: response.data.file_url, + } + : template + ) + ); + + return response; + }) + .catch((error) => { + logger.error('Erreur lors de la mise à jour du school file :', error); + throw error; + }); + }; + const handleDeleteFile = (templateId) => { const fileToDelete = uploadedFiles.find( (file) => parseInt(file.id) === templateId && file.fileName @@ -827,7 +869,7 @@ export default function InscriptionFormShared({ onFormSubmit={handleDynamicFormSubmit} onValidationChange={handleDynamicFormsValidationChange} enable={enable} - onFileUpload={handleFileUpload} + onFileUpload={handleSchoolFileUpload} /> )} diff --git a/conf/create-establishment.sample.json b/conf/create-establishment.sample.json new file mode 100644 index 0000000..0a6a67f --- /dev/null +++ b/conf/create-establishment.sample.json @@ -0,0 +1,21 @@ +{ + "establishments": [ + { + "name": "Ecole Demo", + "address": "1 rue de la Paix, Paris", + "total_capacity": 300, + "establishment_type": [ + 1, + 2 + ], + "evaluation_frequency": 1, + "licence_code": "LIC-DEMO-001", + "directeur": { + "email": "luc.sorignet@gmail.com", + "password": "a", + "last_name": "Dupont", + "first_name": "Jean" + } + } + ] +} \ No newline at end of file