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