fix: Ajout d'un champ is_required pour les documents parents facultatifs

This commit is contained in:
N3WT DE COMPET
2025-05-09 09:38:47 +02:00
parent 6d805940fe
commit 5866427544
9 changed files with 61 additions and 21 deletions

View File

@ -7,4 +7,4 @@ export default function MessageriePage({ csrfToken }) {
<EmailSender csrfToken={csrfToken} />
</div>
);
}
}

View File

@ -17,14 +17,15 @@ export default function EmailSender({ csrfToken }) {
message,
};
sendMessage(data);
};
return (
<div className="p-4 bg-white rounded shadow">
<h2 className="text-xl font-bold mb-4">Envoyer un Email</h2>
<div className="mb-4">
<label className="block font-medium">Destinataires (séparés par des virgules)</label>
<label className="block font-medium">
Destinataires (séparés par des virgules)
</label>
<input
type="text"
value={recipients}
@ -71,4 +72,4 @@ export default function EmailSender({ csrfToken }) {
{status && <p className="mt-4 text-sm">{status}</p>}
</div>
);
}
}

View File

@ -8,6 +8,7 @@ const CheckBox = ({
itemLabelFunc = () => null,
horizontal,
}) => {
console.log(formData);
const isChecked = formData[fieldName].includes(parseInt(item.id));
return (
<div

View File

@ -73,7 +73,7 @@ export default function InscriptionFormShared({
const [uploadedFiles, setUploadedFiles] = useState([]);
const [schoolFileTemplates, setSchoolFileTemplates] = useState([]);
const [parentFileTemplates, setParentFileTemplates] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [currentPage, setCurrentPage] = useState(6);
const [isPage1Valid, setIsPage1Valid] = useState(false);
const [isPage2Valid, setIsPage2Valid] = useState(false);
@ -131,13 +131,14 @@ export default function InscriptionFormShared({
}, [schoolFileTemplates]);
useEffect(() => {
// Vérifier si tous les parentFileTemplates ont leur champ "file" différent de null
const allUploaded = parentFileTemplates.every(
(template) => template.file !== null
);
// Vérifier si tous les documents avec is_required = true ont leur champ "file" différent de null
const allRequiredUploaded = parentFileTemplates
.filter((template) => template.is_required) // Ne garder que les documents requis
.every((template) => template.file !== null); // Vérifier que chaque fichier requis est uploadé
// Mettre à jour isPage6Valid en fonction de cette condition
setIsPage6Valid(allUploaded);
setIsPage6Valid(allRequiredUploaded);
console.log(allRequiredUploaded);
}, [parentFileTemplates]);
const handleTemplateSigned = (index) => {
@ -659,8 +660,7 @@ export default function InscriptionFormShared({
(currentPage === 2 && !isPage2Valid) ||
(currentPage === 3 && !isPage3Valid) ||
(currentPage === 4 && !isPage4Valid) ||
(currentPage === 5 && !isPage5Valid) ||
(currentPage === 6 && !isPage6Valid)
(currentPage === 5 && !isPage5Valid)
? 'bg-gray-300 text-gray-700 cursor-not-allowed'
: 'bg-emerald-500 text-white hover:bg-emerald-600'
}`}
@ -669,8 +669,7 @@ export default function InscriptionFormShared({
(currentPage === 2 && !isPage2Valid) ||
(currentPage === 3 && !isPage3Valid) ||
(currentPage === 4 && !isPage4Valid) ||
(currentPage === 5 && !isPage5Valid) ||
(currentPage === 6 && !isPage6Valid)
(currentPage === 5 && !isPage5Valid)
}
primary
name="Next"
@ -682,7 +681,12 @@ export default function InscriptionFormShared({
e.preventDefault();
handleSubmit(e);
}}
className="px-4 py-2 bg-emerald-500 text-white rounded-md shadow-sm hover:bg-emerald-600 focus:outline-none"
className={`px-4 py-2 rounded-md shadow-sm focus:outline-none ${
currentPage === 6 && !isPage6Valid
? 'bg-gray-300 text-gray-700 cursor-not-allowed'
: 'bg-emerald-500 text-white hover:bg-emerald-600'
}`}
disabled={currentPage === 6 && !isPage6Valid}
primary
/>
)}

View File

@ -8,6 +8,7 @@ import logger from '@/utils/logger';
import { createRegistrationParentFileTemplate } from '@/app/actions/registerFileGroupAction';
import { useCsrfToken } from '@/context/CsrfContext';
import SectionHeader from '@/components/SectionHeader';
import ToggleSwitch from '@/components/ToggleSwitch';
export default function ParentFilesSection({
parentFiles,
@ -32,7 +33,7 @@ export default function ParentFilesSection({
const handleAddEmptyRequiredDocument = () => {
setEditingDocumentId('new');
setFormData({ name: '', description: '', groups: [] });
setFormData({ name: '', description: '', groups: [], is_required: false }); // Add is_required
setSelectedGroups([]); // Réinitialiser les groupes sélectionnés
};
@ -58,7 +59,6 @@ export default function ParentFilesSection({
"Attention !\nVeuillez sélectionner au moins un dossier d'inscription pour valider l'opération"
);
setPopupVisible(true);
setPopupVisible(true);
return;
}
@ -73,13 +73,12 @@ export default function ParentFilesSection({
setFormData(null);
setSelectedGroups([]);
guardianDetails.forEach((guardian, index) => {
guardianDetails.forEach((guardian) => {
// Création des templates
const data = {
master: createdDocument?.id,
registration_form: guardian.registration_form,
};
console.log(guardian);
createRegistrationParentFileTemplate(data, csrfToken)
.then((response) => {
logger.debug('Template enregistré avec succès:', response);
@ -178,6 +177,22 @@ export default function ParentFilesSection({
errorMsg={null}
/>
);
case 'Obligatoire':
return (
<div className="flex justify-center items-center">
<ToggleSwitch
name="is_required"
checked={formData.is_required} // Utilise la valeur booléenne de is_required
onChange={(e) => {
const { checked } = e.target; // Récupère l'état du toggle
setFormData((prevData) => ({
...prevData,
is_required: checked, // Met à jour directement le champ is_required
}));
}}
/>
</div>
);
case 'Actions':
return (
<div className="flex justify-center space-x-2">
@ -218,6 +233,18 @@ export default function ParentFilesSection({
.join(', ')}
</span>
);
case 'Obligatoire':
return (
<span
className={`px-3 py-1 rounded-full text-sm font-semibold ${
document.is_required
? 'bg-green-100 text-green-600'
: 'bg-gray-100 text-gray-600'
}`}
>
{document.is_required ? 'Oui' : 'Non'}
</span>
);
case 'Actions':
return (
<div className="flex justify-center space-x-2">
@ -283,6 +310,10 @@ export default function ParentFilesSection({
transform: (row) =>
renderRequiredDocumentCell(row, "Dossiers d'inscription"),
},
{
name: 'Obligatoire',
transform: (row) => renderRequiredDocumentCell(row, 'Obligatoire'),
},
{
name: 'Actions',
transform: (row) => renderRequiredDocumentCell(row, 'Actions'),