feat: Configuration et gestion du planning [#2]

This commit is contained in:
N3WT DE COMPET
2025-01-11 19:37:29 +01:00
parent 3c27133cdb
commit 830d9a48c0
26 changed files with 1163 additions and 1071 deletions

View File

@ -1,66 +1,67 @@
import React, { createContext, useState, useContext } from 'react';
import { useClasses } from '@/context/ClassesContext'
import React, { createContext, useState, useContext, useEffect } from 'react';
import { useClasses } from '@/context/ClassesContext';
const ClasseFormContext = createContext();
export const useClasseForm = () => useContext(ClasseFormContext);
export const ClasseFormProvider = ({ children, initialClasse }) => {
const { getNiveauxLabels } = useClasses();
const [formData, setFormData] = useState({});
const { getNiveauxLabels, selectedDays } = useClasses();
useEffect(() => {
const plannings = initialClasse.plannings_read || [];
const [formData, setFormData] = useState(() => {
const planning = initialClasse.planning || {};
const emploiDuTemps = planning.emploiDuTemps || {};
const dateDebutSemestre1 = emploiDuTemps.S1 ? emploiDuTemps.S1.DateDebut : '';
const dateFinSemestre1 = emploiDuTemps.S1 ? emploiDuTemps.S1.DateFin : '';
const dateDebutSemestre2 = emploiDuTemps.S2 ? emploiDuTemps.S2.DateDebut : '';
const dateFinSemestre2 = emploiDuTemps.S2 ? emploiDuTemps.S2.DateFin : '';
const dateDebutTrimestre1 = emploiDuTemps.T1 ? emploiDuTemps.T1.DateDebut : '';
const dateFinTrimestre1 = emploiDuTemps.T1 ? emploiDuTemps.T1.DateFin : '';
const dateDebutTrimestre2 = emploiDuTemps.T2 ? emploiDuTemps.T2.DateDebut : '';
const dateFinTrimestre2 = emploiDuTemps.T2 ? emploiDuTemps.T2.DateFin : '';
const dateDebutTrimestre3 = emploiDuTemps.T3 ? emploiDuTemps.T3.DateDebut : '';
const dateFinTrimestre3 = emploiDuTemps.T3 ? emploiDuTemps.T3.DateFin : '';
return {
nom_ambiance: initialClasse.nom_ambiance || '',
tranche_age: initialClasse.tranche_age || '',
nombre_eleves: initialClasse.nombre_eleves || '',
langue_enseignement: initialClasse.langue_enseignement || 'Français',
annee_scolaire: initialClasse.annee_scolaire || '',
enseignants_ids: initialClasse.enseignants_ids || [],
planning_type: planning.type || 1,
plage_horaire: planning.plageHoraire || ['08:30', '17:30'],
jours_ouverture: planning.joursOuverture || [1, 2, 4, 5],
niveaux: initialClasse.niveaux || [],
niveaux_label: getNiveauxLabels(initialClasse.niveaux || []),
date_debut_semestre_1: dateDebutSemestre1,
date_fin_semestre_1: dateFinSemestre1,
date_debut_semestre_2: dateDebutSemestre2,
date_fin_semestre_2: dateFinSemestre2,
date_debut_trimestre_1: dateDebutTrimestre1,
date_fin_trimestre_1: dateFinTrimestre1,
date_debut_trimestre_2: dateDebutTrimestre2,
date_fin_trimestre_2: dateFinTrimestre2,
date_debut_trimestre_3: dateDebutTrimestre3,
date_fin_trimestre_3: dateFinTrimestre3,
planning: {
type: planning.type || 1,
plageHoraire: planning.plageHoraire || ['08:30', '17:30'],
joursOuverture: planning.joursOuverture || [1, 2, 4, 5],
emploiDuTemps: planning.emploiDuTemps || {
S1: { DateDebut: '', DateFin: '', lundi: [], mardi: [], mercredi: [], jeudi: [], vendredi: [], samedi: [], dimanche: [] },
S2: { DateDebut: '', DateFin: '', lundi: [], mardi: [], mercredi: [], jeudi: [], vendredi: [], samedi: [], dimanche: [] },
T1: { DateDebut: '', DateFin: '', lundi: [], mardi: [], mercredi: [], jeudi: [], vendredi: [], samedi: [], dimanche: [] },
T2: { DateDebut: '', DateFin: '', lundi: [], mardi: [], mercredi: [], jeudi: [], vendredi: [], samedi: [], dimanche: [] },
T3: { DateDebut: '', DateFin: '', lundi: [], mardi: [], mercredi: [], jeudi: [], vendredi: [], samedi: [], dimanche: [] },
}
}
const defaultEmploiDuTemps = {
lundi: [],
mardi: [],
mercredi: [],
jeudi: [],
vendredi: [],
samedi: [],
dimanche: []
};
});
const generateEmploiDuTemps = (planningType) => {
if (planningType === 1) {
return defaultEmploiDuTemps;
} else if (planningType === 2) {
return {
S1: { DateDebut: '', DateFin: '', ...defaultEmploiDuTemps },
S2: { DateDebut: '', DateFin: '', ...defaultEmploiDuTemps },
};
} else if (planningType === 3) {
return {
T1: { DateDebut: '', DateFin: '', ...defaultEmploiDuTemps },
T2: { DateDebut: '', DateFin: '', ...defaultEmploiDuTemps },
T3: { DateDebut: '', DateFin: '', ...defaultEmploiDuTemps },
};
}
};
const newFormData = {
nom_ambiance: initialClasse.nom_ambiance || '',
tranche_age: initialClasse.tranche_age || '',
nombre_eleves: initialClasse.nombre_eleves || '',
langue_enseignement: initialClasse.langue_enseignement || 'Français',
annee_scolaire: initialClasse.annee_scolaire || '',
enseignants: initialClasse.enseignants || [],
enseignants_ids: initialClasse.enseignants_ids || [],
type: initialClasse.type || 1,
plage_horaire: initialClasse.plage_horaire || ['08:30', '17:30'],
jours_ouverture: initialClasse.jours_ouverture || [1, 2, 4, 5],
niveaux: initialClasse.niveaux || [],
plannings: plannings.length ? plannings.map(planning => ({
niveau: planning.planning.niveau,
emploiDuTemps: planning.planning.emploiDuTemps
})) : (initialClasse.niveaux || []).map(niveau => ({
niveau: niveau,
emploiDuTemps: generateEmploiDuTemps(initialClasse.type || 1)
}))
};
setFormData(newFormData);
}, [initialClasse, getNiveauxLabels]);
return (
<ClasseFormContext.Provider value={{ formData, setFormData }}>
@ -68,3 +69,4 @@ export const ClasseFormProvider = ({ children, initialClasse }) => {
</ClasseFormContext.Provider>
);
};