From 24352efad304dee7418dc846681a4b38047431f6 Mon Sep 17 00:00:00 2001 From: N3WT DE COMPET Date: Sun, 12 Jan 2025 16:45:41 +0100 Subject: [PATCH] refactor: Partie FRONT / School --- Back-End/School/serializers.py | 18 ++++++++ .../src/app/[locale]/admin/structure/page.js | 30 ++++++------ Front-End/src/app/lib/schoolAction.js | 27 +++++++++-- Front-End/src/components/ClasseDetails.js | 2 +- .../Inscription/InscriptionFormShared.js | 4 +- .../Structure/Configuration/ClassForm.js | 46 +++++++++---------- .../Structure/Configuration/ClassesSection.js | 24 +++++----- .../Configuration/PlanningConfiguration.js | 8 ++-- .../Configuration/SpecialitiesSection.js | 8 ++-- .../Structure/Configuration/SpecialityForm.js | 12 ++--- .../Configuration/StructureManagement.js | 1 - .../Structure/Configuration/TeacherForm.js | 28 +++++------ .../Configuration/TeachersSection.js | 39 ++++++++-------- .../TeachersSelectionConfiguration.js | 40 ++++++++-------- .../Structure/Planning/ClassesInformation.js | 4 +- .../Structure/Planning/ClassesList.js | 10 ++-- .../Structure/Planning/PlanningClassView.js | 2 +- .../Structure/Planning/ScheduleManagement.js | 8 ++-- .../Planning/SpecialityEventModal.js | 10 ++-- Front-End/src/components/ToggleSwitch.js | 2 +- Front-End/src/context/ClasseFormContext.js | 32 ++++++------- Front-End/src/context/ClassesContext.js | 25 ++++------ .../src/context/SpecialityFormContext.js | 4 +- Front-End/src/context/TeacherFormContext.js | 16 ++++--- package-lock.json | 3 ++ 25 files changed, 217 insertions(+), 186 deletions(-) diff --git a/Back-End/School/serializers.py b/Back-End/School/serializers.py index 320efd5..d3bae13 100644 --- a/Back-End/School/serializers.py +++ b/Back-End/School/serializers.py @@ -31,8 +31,10 @@ class TeacherDetailSerializer(serializers.ModelSerializer): class TeacherSerializer(serializers.ModelSerializer): specialities = serializers.PrimaryKeyRelatedField(queryset=Speciality.objects.all(), many=True, required=False) + specialities_details = serializers.SerializerMethodField() associated_profile = serializers.PrimaryKeyRelatedField(queryset=Profile.objects.all(), required=True) updated_date_formatted = serializers.SerializerMethodField() + droit = serializers.SerializerMethodField() class Meta: model = Teacher @@ -67,6 +69,18 @@ class TeacherSerializer(serializers.ModelSerializer): return local_time.strftime("%d-%m-%Y %H:%M") + def get_droit(self, obj): + if obj.associated_profile: + droit_id = obj.associated_profile.droit + return { + "label": obj.associated_profile.get_droit_display(), + "id": droit_id + } + return None + + def get_specialities_details(self, obj): + return [{'name': speciality.name, 'color_code': speciality.color_code} for speciality in obj.specialities.all()] + class PlanningSerializer(serializers.ModelSerializer): class Meta: model = Planning @@ -80,6 +94,7 @@ class PlanningSerializer(serializers.ModelSerializer): class SchoolClassSerializer(serializers.ModelSerializer): updated_date_formatted = serializers.SerializerMethodField() teachers = serializers.PrimaryKeyRelatedField(queryset=Teacher.objects.all(), many=True, required=False) + teachers_details = serializers.SerializerMethodField() class Meta: model = SchoolClass @@ -150,6 +165,9 @@ class SchoolClassSerializer(serializers.ModelSerializer): return instance + def get_teachers_details(self, obj): + return [{'last_name': teacher.last_name, 'first_name': teacher.first_name} for teacher in obj.teachers.all()] + def get_updated_date_formatted(self, obj): utc_time = timezone.localtime(obj.updated_date) local_tz = pytz.timezone(settings.TZ_APPLI) diff --git a/Front-End/src/app/[locale]/admin/structure/page.js b/Front-End/src/app/[locale]/admin/structure/page.js index 7ae7b2f..365a30f 100644 --- a/Front-End/src/app/[locale]/admin/structure/page.js +++ b/Front-End/src/app/[locale]/admin/structure/page.js @@ -11,6 +11,7 @@ import { BE_SCHOOL_SPECIALITIES_URL, import DjangoCSRFToken from '@/components/DjangoCSRFToken' import useCsrfToken from '@/hooks/useCsrfToken'; import { ClassesProvider } from '@/context/ClassesContext'; +import { fetchSpecialities, fetchTeachers, fetchClasses, fetchSchedules } from '@/app/lib/schoolAction'; export default function Page() { const [specialities, setSpecialities] = useState([]); @@ -27,21 +28,20 @@ export default function Page() { useEffect(() => { // Fetch data for specialities - fetchSpecialities(); + handleSpecialities(); // Fetch data for teachers - fetchTeachers(); + handleTeachers(); // Fetch data for classes - fetchClasses(); + handleClasses(); // Fetch data for schedules - fetchSchedules(); + handleSchedules(); }, []); - const fetchSpecialities = () => { - fetch(`${BE_SCHOOL_SPECIALITIES_URL}`) - .then(response => response.json()) + const handleSpecialities = () => { + fetchSpecialities() .then(data => { setSpecialities(data); }) @@ -50,9 +50,8 @@ export default function Page() { }); }; - const fetchTeachers = () => { - fetch(`${BE_SCHOOL_TEACHERS_URL}`) - .then(response => response.json()) + const handleTeachers = () => { + fetchTeachers() .then(data => { setTeachers(data); }) @@ -61,9 +60,8 @@ export default function Page() { }); }; - const fetchClasses = () => { - fetch(`${BE_SCHOOL_SCHOOLCLASSES_URL}`) - .then(response => response.json()) + const handleClasses = () => { + fetchClasses() .then(data => { setClasses(data); }) @@ -72,9 +70,8 @@ export default function Page() { }); }; - const fetchSchedules = () => { - fetch(`${BE_SCHOOL_PLANNINGS_URL}`) - .then(response => response.json()) + const handleSchedules = () => { + fetchSchedules() .then(data => { setSchedules(data); }) @@ -142,7 +139,6 @@ export default function Page() { }); }; - const handleDelete = (url, id, setDatas) => { fetch(`${url}/${id}`, { method:'DELETE', diff --git a/Front-End/src/app/lib/schoolAction.js b/Front-End/src/app/lib/schoolAction.js index fceb666..29080e1 100644 --- a/Front-End/src/app/lib/schoolAction.js +++ b/Front-End/src/app/lib/schoolAction.js @@ -1,9 +1,26 @@ import { - BE_SCHOOL_SCHOOLCLASSES_URL + BE_SCHOOL_SPECIALITIES_URL, + BE_SCHOOL_TEACHERS_URL, + BE_SCHOOL_SCHOOLCLASSES_URL, + BE_SCHOOL_PLANNINGS_URL } from '@/utils/Url'; - export const fetchClasses = () => { - return fetch(`${BE_SCHOOL_SCHOOLCLASSES_URL}`) - .then(response => response.json()) +export const fetchSpecialities = () => { + return fetch(`${BE_SCHOOL_SPECIALITIES_URL}`) + .then(response => response.json()) +}; - }; \ No newline at end of file +export const fetchTeachers = () => { + return fetch(`${BE_SCHOOL_TEACHERS_URL}`) + .then(response => response.json()) +}; + +export const fetchClasses = () => { + return fetch(`${BE_SCHOOL_SCHOOLCLASSES_URL}`) + .then(response => response.json()) +}; + +export const fetchSchedules = () => { + return fetch(`${BE_SCHOOL_PLANNINGS_URL}`) + .then(response => response.json()) +}; \ No newline at end of file diff --git a/Front-End/src/components/ClasseDetails.js b/Front-End/src/components/ClasseDetails.js index 823c4ac..cc13f29 100644 --- a/Front-End/src/components/ClasseDetails.js +++ b/Front-End/src/components/ClasseDetails.js @@ -6,7 +6,7 @@ const ClasseDetails = ({ classe }) => { if (!classe) return null; const nombreElevesInscrits = classe.eleves.length; - const capaciteTotale = classe.nombre_eleves; + const capaciteTotale = classe.number_of_students; const pourcentage = Math.round((nombreElevesInscrits / capaciteTotale) * 100); const getColor = (pourcentage) => { diff --git a/Front-End/src/components/Inscription/InscriptionFormShared.js b/Front-End/src/components/Inscription/InscriptionFormShared.js index 2190a57..3d2a0f8 100644 --- a/Front-End/src/components/Inscription/InscriptionFormShared.js +++ b/Front-End/src/components/Inscription/InscriptionFormShared.js @@ -8,7 +8,7 @@ import DjangoCSRFToken from '@/components/DjangoCSRFToken'; import FileUpload from '@/app/[locale]/admin/subscriptions/components/FileUpload'; import Table from '@/components/Table'; -const niveaux = [ +const levels = [ { value:'1', label: 'TPS - Très Petite Section'}, { value:'2', label: 'PS - Petite Section'}, { value:'3', label: 'MS - Moyenne Section'}, @@ -158,7 +158,7 @@ export default function InscriptionFormShared({ label="Niveau" selected={formData.level} callback={(e) => updateFormField('level', e.target.value)} - choices={niveaux} + choices={levels} required /> diff --git a/Front-End/src/components/Structure/Configuration/ClassForm.js b/Front-End/src/components/Structure/Configuration/ClassForm.js index f7e5729..8088b1a 100644 --- a/Front-End/src/components/Structure/Configuration/ClassForm.js +++ b/Front-End/src/components/Structure/Configuration/ClassForm.js @@ -13,7 +13,7 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { const { formData, setFormData } = useClasseForm(); const { getNiveauNameById, schoolYears, getNiveauxLabels, getNiveauxTabs, generateAgeToNiveaux, niveauxPremierCycle, niveauxSecondCycle, niveauxTroisiemeCycle, typeEmploiDuTemps, updatePlannings } = useClasses(); - const [selectedTeachers, setSelectedTeachers] = useState(formData.enseignants_ids); + const [selectedTeachers, setSelectedTeachers] = useState(formData.teachers); const handleTeacherSelection = (teacher) => { setSelectedTeachers(prevState => @@ -23,21 +23,21 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { ); setFormData(prevState => ({ ...prevState, - enseignants_ids: prevState.enseignants_ids.includes(teacher.id) - ? prevState.enseignants_ids.filter(id => id !== teacher.id) - : [...prevState.enseignants_ids, teacher.id] + teachers: prevState.teachers.includes(teacher.id) + ? prevState.teachers.filter(id => id !== teacher.id) + : [...prevState.teachers, teacher.id] })); }; const handleTimeChange = (e, index) => { const { value } = e.target; setFormData(prevState => { - const updatedTimes = [...prevState.plage_horaire]; + const updatedTimes = [...prevState.time_range]; updatedTimes[index] = value; const updatedFormData = { ...prevState, - plage_horaire: updatedTimes, + time_range: updatedTimes, }; const existingPlannings = prevState.plannings || []; @@ -53,12 +53,12 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { setFormData((prevState) => { const updatedJoursOuverture = checked - ? [...prevState.jours_ouverture, dayId] - : prevState.jours_ouverture.filter((id) => id !== dayId); + ? [...prevState.opening_days, dayId] + : prevState.opening_days.filter((id) => id !== dayId); const updatedFormData = { ...prevState, - jours_ouverture: updatedJoursOuverture, + opening_days: updatedJoursOuverture, }; const existingPlannings = prevState.plannings || []; @@ -82,7 +82,7 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { ? [...(prevState[name] || []), parseInt(value)] : (prevState[name] || []).filter(v => v !== parseInt(value)); newState[name] = newValues; - } else if (name === 'tranche_age') { + } else if (name === 'age_range') { const [minAgeStr, maxAgeStr] = value.split('-'); const minAge = minAgeStr ? parseInt(minAgeStr) : null; const maxAge = minAgeStr ? parseInt(maxAgeStr) : null; @@ -92,7 +92,7 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { newState = { ...prevState, [name]: value, - niveaux: selectedNiveaux.length > 0 ? selectedNiveaux : [], + levels: selectedNiveaux.length > 0 ? selectedNiveaux : [], }; } else if (type === 'radio') { newState[name] = parseInt(value, 10); @@ -111,7 +111,7 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { onSubmit(formData); }; - const [minAge, maxAge] = formData.tranche_age.length === 2 ? formData.tranche_age : [null, null]; + const [minAge, maxAge] = formData.age_range.length === 2 ? formData.age_range : [null, null]; const selectedAgeGroup = generateAgeToNiveaux(minAge, maxAge); return ( @@ -136,11 +136,11 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => {
@@ -156,7 +156,7 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { items={niveauxPremierCycle} formData={formData} handleChange={handleChange} - fieldName="niveaux" + fieldName="levels" labelAttenuated={(item) => !selectedAgeGroup.includes(parseInt(item.id))} className="w-full" /> @@ -164,7 +164,7 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { items={niveauxSecondCycle} formData={formData} handleChange={handleChange} - fieldName="niveaux" + fieldName="levels" labelAttenuated={(item) => !selectedAgeGroup.includes(parseInt(item.id))} className="w-full" /> @@ -172,7 +172,7 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => { items={niveauxTroisiemeCycle} formData={formData} handleChange={handleChange} - fieldName="niveaux" + fieldName="levels" labelAttenuated={(item) => !selectedAgeGroup.includes(parseInt(item.id))} className="w-full" /> @@ -186,11 +186,11 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => {
@@ -202,9 +202,9 @@ const ClassForm = ({ onSubmit, isNew, teachers }) => {
{ text={`${isNew ? "Créer" : "Modifier"}`} onClick={handleSubmit} className={`px-4 py-2 rounded-md shadow-sm focus:outline-none ${ - (formData.niveaux.length === 0 || !formData.annee_scolaire || !formData.nombre_eleves || formData.enseignants_ids.length === 0) + (formData.levels.length === 0 || !formData.school_year || !formData.number_of_students || formData.teachers.length === 0) ? "bg-gray-300 text-gray-700 cursor-not-allowed" : "bg-emerald-500 text-white hover:bg-emerald-600" }`} primary - disabled={(formData.niveaux.length === 0 || !formData.annee_scolaire || !formData.nombre_eleves || formData.enseignants_ids.length === 0)} + disabled={(formData.levels.length === 0 || !formData.school_year || !formData.number_of_students || formData.teachers.length === 0)} type="submit" name="Create" /> diff --git a/Front-End/src/components/Structure/Configuration/ClassesSection.js b/Front-End/src/components/Structure/Configuration/ClassesSection.js index 3baae8a..05adaea 100644 --- a/Front-End/src/components/Structure/Configuration/ClassesSection.js +++ b/Front-End/src/components/Structure/Configuration/ClassesSection.js @@ -11,7 +11,7 @@ import { ClasseFormProvider } from '@/context/ClasseFormContext'; import { useClasses } from '@/context/ClassesContext'; -const ClassesSection = ({ classes, specialities, teachers, handleCreate, handleEdit, handleDelete }) => { +const ClassesSection = ({ classes, teachers, handleCreate, handleEdit, handleDelete }) => { const { getNiveauxLabels } = useClasses(); const [isOpen, setIsOpen] = useState(false); @@ -67,8 +67,8 @@ const ClassesSection = ({ classes, specialities, teachers, handleCreate, handleE { name: 'AMBIANCE', transform: (row) => { - const ambiance = row.nom_ambiance ? row.nom_ambiance : ''; - const trancheAge = row.tranche_age ? `${row.tranche_age} ans` : ''; + const ambiance = row.atmosphere_name ? row.atmosphere_name : ''; + const trancheAge = row.age_range ? `${row.age_range} ans` : ''; if (ambiance && trancheAge) { return `${ambiance} (${trancheAge})`; @@ -84,11 +84,11 @@ const ClassesSection = ({ classes, specialities, teachers, handleCreate, handleE { name: 'NIVEAUX', transform: (row) => { - const niveauxLabels = Array.isArray(row.niveaux) ? getNiveauxLabels(row.niveaux) : []; + const levelLabels = Array.isArray(row.levels) ? getNiveauxLabels(row.levels) : []; return (
- {niveauxLabels.length > 0 - ? niveauxLabels.map((label, index) => ( + {levelLabels.length > 0 + ? levelLabels.map((label, index) => ( )) : 'Aucun niveau'} @@ -96,19 +96,19 @@ const ClassesSection = ({ classes, specialities, teachers, handleCreate, handleE ); } }, - { name: 'CAPACITÉ MAX', transform: (row) => row.nombre_eleves }, - { name: 'ANNÉE SCOLAIRE', transform: (row) => row.annee_scolaire }, + { name: 'CAPACITÉ MAX', transform: (row) => row.number_of_students }, + { name: 'ANNÉE SCOLAIRE', transform: (row) => row.school_year }, { name: 'ENSEIGNANTS', transform: (row) => (
- {row.enseignants.map((teacher, index) => ( - + {row.teachers_details.map((teacher, index) => ( + ))}
) }, - { name: 'DATE DE CREATION', transform: (row) => row.dateCreation_formattee }, + { name: 'DATE DE CREATION', transform: (row) => row.updated_date_formatted }, { name: 'ACTIONS', transform: (row) => ( {editingClass ? ( <> - {editingClass.nom_ambiance} - {editingClass.tranche_age[0]} à {editingClass.tranche_age[1]} ans + {editingClass.nom_ambiance} - {editingClass.age_range[0]} à {editingClass.age_range[1]} ans ) : ''}
diff --git a/Front-End/src/components/Structure/Configuration/PlanningConfiguration.js b/Front-End/src/components/Structure/Configuration/PlanningConfiguration.js index 8af7942..8582362 100644 --- a/Front-End/src/components/Structure/Configuration/PlanningConfiguration.js +++ b/Front-End/src/components/Structure/Configuration/PlanningConfiguration.js @@ -15,7 +15,7 @@ const PlanningConfiguration = ({ formData, handleChange, handleTimeChange, handl ]; const isLabelAttenuated = (item) => { - return !formData.jours_ouverture.includes(parseInt(item.id)); + return !formData.opening_days.includes(parseInt(item.id)); }; return ( @@ -36,8 +36,8 @@ const PlanningConfiguration = ({ formData, handleChange, handleTimeChange, handl {/* Plage horaire */}
handleTimeChange(e, 0)} onEndChange={(e) => handleTimeChange(e, 1)} /> @@ -47,7 +47,7 @@ const PlanningConfiguration = ({ formData, handleChange, handleTimeChange, handl items={daysOfWeek} formData={formData} handleChange={handleJoursChange} - fieldName="jours_ouverture" + fieldName="opening_days" horizontal={true} labelAttenuated={isLabelAttenuated} /> diff --git a/Front-End/src/components/Structure/Configuration/SpecialitiesSection.js b/Front-End/src/components/Structure/Configuration/SpecialitiesSection.js index 2cae280..8ec7b45 100644 --- a/Front-End/src/components/Structure/Configuration/SpecialitiesSection.js +++ b/Front-End/src/components/Structure/Configuration/SpecialitiesSection.js @@ -52,14 +52,14 @@ const SpecialitiesSection = ({ specialities, handleCreate, handleEdit, handleDel transform: (row) => (
- {row.nom.toUpperCase()} + {row.name.toUpperCase()}
) }, - { name: 'DATE DE CREATION', transform: (row) => row.dateCreation_formattee }, + { name: 'DATE DE CREATION', transform: (row) => row.updated_date_formatted }, { name: 'ACTIONS', transform: (row) => ( } diff --git a/Front-End/src/components/Structure/Configuration/SpecialityForm.js b/Front-End/src/components/Structure/Configuration/SpecialityForm.js index 5a767a2..39293eb 100644 --- a/Front-End/src/components/Structure/Configuration/SpecialityForm.js +++ b/Front-End/src/components/Structure/Configuration/SpecialityForm.js @@ -27,10 +27,10 @@ const SpecialityForm = ({ onSubmit, isNew }) => {
@@ -38,10 +38,10 @@ const SpecialityForm = ({ onSubmit, isNew }) => {
@@ -50,12 +50,12 @@ const SpecialityForm = ({ onSubmit, isNew }) => {
diff --git a/Front-End/src/components/Structure/Configuration/StructureManagement.js b/Front-End/src/components/Structure/Configuration/StructureManagement.js index 56d56ce..f1449e0 100644 --- a/Front-End/src/components/Structure/Configuration/StructureManagement.js +++ b/Front-End/src/components/Structure/Configuration/StructureManagement.js @@ -30,7 +30,6 @@ const StructureManagement = ({ specialities, setSpecialities, teachers, setTeach handleCreate(`${BE_SCHOOL_SCHOOLCLASS_URL}`, newData, setClasses)} handleEdit={(id, updatedData) => handleEdit(`${BE_SCHOOL_SCHOOLCLASS_URL}`, id, updatedData, setClasses)} diff --git a/Front-End/src/components/Structure/Configuration/TeacherForm.js b/Front-End/src/components/Structure/Configuration/TeacherForm.js index 9d3d9d5..72d1510 100644 --- a/Front-End/src/components/Structure/Configuration/TeacherForm.js +++ b/Front-End/src/components/Structure/Configuration/TeacherForm.js @@ -10,7 +10,7 @@ const TeacherForm = ({ onSubmit, isNew, specialities }) => { const { formData, setFormData } = useTeacherForm(); const handleToggleChange = () => { - setFormData({ ...formData, droit: 1-formData.droit }); + setFormData({ ...formData, droit: 1-formData.droit.id }); }; const handleChange = (e) => { @@ -39,45 +39,45 @@ const TeacherForm = ({ onSubmit, isNew, specialities }) => { onSubmit(formData, isNew); }; - const getSpecialityLabel = (speciality) => { - return `${speciality.nom}`; + const getSpecialityLabel = (speciality) => { + return `${speciality.name}`; }; const isLabelAttenuated = (item) => { - return !formData.specialites_ids.includes(parseInt(item.id)); + return !formData.specialities.includes(parseInt(item.id)); }; return (
@@ -87,7 +87,7 @@ const TeacherForm = ({ onSubmit, isNew, specialities }) => { items={specialities} formData={formData} handleChange={handleChange} - fieldName="specialites_ids" + fieldName="specialities" label="Spécialités" icon={BookOpen} className="w-full mt-4" @@ -98,7 +98,7 @@ const TeacherForm = ({ onSubmit, isNew, specialities }) => {
@@ -106,12 +106,12 @@ const TeacherForm = ({ onSubmit, isNew, specialities }) => {
diff --git a/Front-End/src/components/Structure/Configuration/TeachersSection.js b/Front-End/src/components/Structure/Configuration/TeachersSection.js index e38194a..510cfb9 100644 --- a/Front-End/src/components/Structure/Configuration/TeachersSection.js +++ b/Front-End/src/components/Structure/Configuration/TeachersSection.js @@ -4,12 +4,11 @@ import Table from '@/components/Table'; import DropdownMenu from '@/components/DropdownMenu'; import Modal from '@/components/Modal'; import TeacherForm from '@/components/Structure/Configuration/TeacherForm'; - import useCsrfToken from '@/hooks/useCsrfToken'; import { TeacherFormProvider } from '@/context/TeacherFormContext'; import { createProfile, updateProfile } from '@/app/lib/authAction'; -const TeachersSection = ({ teachers, handleCreate, handleEdit, handleDelete, specialities }) => { +const TeachersSection = ({ teachers, specialities , handleCreate, handleEdit, handleDelete}) => { const [isOpen, setIsOpen] = useState(false); const [editingTeacher, setEditingTeacher] = useState(null); @@ -30,12 +29,12 @@ const TeachersSection = ({ teachers, handleCreate, handleEdit, handleDelete, spe if (editingTeacher) { // Modification du profil const data = { - email: updatedData.mail, - username: updatedData.mail, + email: updatedData.email, + username: updatedData.email, droit:updatedData.droit } - updateProfile(updatedData.profilAssocie_id,data,csrfToken) + updateProfile(updatedData.associated_profile,data,csrfToken) .then(response => { console.log('Success:', response); console.log('UpdateData:', updatedData); @@ -50,9 +49,9 @@ const TeachersSection = ({ teachers, handleCreate, handleEdit, handleDelete, spe // Création d'un profil associé à l'adresse mail du responsable saisie // Le profil est inactif const data = { - email: updatedData.mail, + email: updatedData.email, password: 'Provisoire01!', - username: updatedData.mail, + username: updatedData.email, is_active: 1, // On rend le profil actif : on considère qu'au moment de la configuration de l'école un abonnement a été souscrit droit:updatedData.droit } @@ -62,7 +61,7 @@ const TeachersSection = ({ teachers, handleCreate, handleEdit, handleDelete, spe console.log('UpdateData:', updatedData); if (response.id) { let idProfil = response.id; - updatedData.profilAssocie_id = idProfil; + updatedData.associated_profile = idProfil; handleCreate(updatedData); } }) @@ -92,21 +91,21 @@ const TeachersSection = ({ teachers, handleCreate, handleEdit, handleDelete, spe
row.nom }, - { name: 'PRENOM', transform: (row) => row.prenom }, - { name: 'MAIL', transform: (row) => row.mail }, + { name: 'NOM', transform: (row) => row.last_name }, + { name: 'PRENOM', transform: (row) => row.first_name }, + { name: 'MAIL', transform: (row) => row.email }, { name: 'SPÉCIALITÉS', transform: (row) => (
- {row.specialites.map(specialite => ( + {row.specialities_details.map((speciality,index) => ( - {specialite.nom} + {speciality.name} ))}
@@ -115,12 +114,12 @@ const TeachersSection = ({ teachers, handleCreate, handleEdit, handleDelete, spe { name: 'TYPE PROFIL', transform: (row) => { - if (row.profilAssocie) { - const badgeClass = row.DroitLabel === 'ECOLE' ? 'bg-blue-100 text-blue-600' : 'bg-red-100 text-red-600'; + if (row.associated_profile) { + const badgeClass = row.droit.label === 'ECOLE' ? 'bg-blue-100 text-blue-600' : 'bg-red-100 text-red-600'; return (
- {row.DroitLabel} + {row.droit.label}
); @@ -129,7 +128,7 @@ const TeachersSection = ({ teachers, handleCreate, handleEdit, handleDelete, spe } } }, - { name: 'DATE DE CREATION', transform: (row) => row.dateCreation_formattee }, + { name: 'DATE DE CREATION', transform: (row) => row.updated_date_formatted }, { name: 'ACTIONS', transform: (row) => ( } diff --git a/Front-End/src/components/Structure/Configuration/TeachersSelectionConfiguration.js b/Front-End/src/components/Structure/Configuration/TeachersSelectionConfiguration.js index c749939..05969a5 100644 --- a/Front-End/src/components/Structure/Configuration/TeachersSelectionConfiguration.js +++ b/Front-End/src/components/Structure/Configuration/TeachersSelectionConfiguration.js @@ -5,34 +5,34 @@ const TeachersSelectionConfiguration = ({ formData, teachers, handleTeacherSelec return (
- +
row.nom, + transform: (row) => row.last_name, }, { name: 'Prénom', - transform: (row) => row.prenom, - }, - { - name: 'Spécialités', - transform: (row) => ( -
- {row.specialites.map(specialite => ( - -
- {specialite.nom} -
- ))} -
- ), + transform: (row) => row.first_name, }, + // { + // name: 'Spécialités', + // transform: (row) => ( + //
+ // {row.specialites.map(specialite => ( + // + //
+ // {specialite.nom} + //
+ // ))} + //
+ // ), + // }, ]} data={teachers} onRowClick={handleTeacherSelection} diff --git a/Front-End/src/components/Structure/Planning/ClassesInformation.js b/Front-End/src/components/Structure/Planning/ClassesInformation.js index 5e90e03..05df701 100644 --- a/Front-End/src/components/Structure/Planning/ClassesInformation.js +++ b/Front-End/src/components/Structure/Planning/ClassesInformation.js @@ -9,11 +9,11 @@ const ClassesInformation = ({ selectedClass, isPastYear }) => { return (
-

{selectedClass.tranche_age} ans

+

{selectedClass.age_range} ans

- {selectedClass.enseignants.map((teacher) => ( + {selectedClass.teachers.map((teacher) => (
diff --git a/Front-End/src/components/Structure/Planning/ClassesList.js b/Front-End/src/components/Structure/Planning/ClassesList.js index dd9fd08..1cf7b5e 100644 --- a/Front-End/src/components/Structure/Planning/ClassesList.js +++ b/Front-End/src/components/Structure/Planning/ClassesList.js @@ -7,13 +7,13 @@ const ClassesList = ({ classes, onClassSelect, selectedClassId }) => { const currentSchoolYearStart = currentMonth >= 8 ? currentYear : currentYear - 1; const handleClassClick = (classe) => { - console.log(`Classe sélectionnée: ${classe.nom_ambiance}, Année scolaire: ${classe.annee_scolaire}`); + console.log(`Classe sélectionnée: ${classe.nom_ambiance}, Année scolaire: ${classe.school_year}`); onClassSelect(classe); }; const categorizedClasses = classes.reduce((acc, classe) => { - const { annee_scolaire } = classe; - const [startYear] = annee_scolaire.split('-').map(Number); + const { school_year } = classe; + const [startYear] = school_year.split('-').map(Number); const category = startYear >= currentSchoolYearStart ? 'Actives' : 'Anciennes'; if (!acc[category]) { @@ -45,7 +45,7 @@ const ClassesList = ({ classes, onClassSelect, selectedClassId }) => { style={{ maxWidth: '400px' }} >
{classe.nom_ambiance}
-
{classe.annee_scolaire}
+
{classe.school_year}
))}
@@ -63,7 +63,7 @@ const ClassesList = ({ classes, onClassSelect, selectedClassId }) => { style={{ maxWidth: '400px' }} >
{classe.nom_ambiance}
-
{classe.annee_scolaire}
+
{classe.school_year}
))}
diff --git a/Front-End/src/components/Structure/Planning/PlanningClassView.js b/Front-End/src/components/Structure/Planning/PlanningClassView.js index ed561ea..63ef1b0 100644 --- a/Front-End/src/components/Structure/Planning/PlanningClassView.js +++ b/Front-End/src/components/Structure/Planning/PlanningClassView.js @@ -79,7 +79,7 @@ const PlanningClassView = ({ schedule, onDrop, selectedLevel, handleUpdatePlanni const renderTimeSlots = () => { const timeSlots = []; - for (let hour = parseInt(formData.plage_horaire[0], 10); hour <= parseInt(formData.plage_horaire[1], 10); hour++) { + for (let hour = parseInt(formData.time_range[0], 10); hour <= parseInt(formData.time_range[1], 10); hour++) { const hourString = hour.toString().padStart(2, '0'); timeSlots.push( diff --git a/Front-End/src/components/Structure/Planning/ScheduleManagement.js b/Front-End/src/components/Structure/Planning/ScheduleManagement.js index eafeb45..f90c666 100644 --- a/Front-End/src/components/Structure/Planning/ScheduleManagement.js +++ b/Front-End/src/components/Structure/Planning/ScheduleManagement.js @@ -22,7 +22,7 @@ const ScheduleManagement = ({ handleUpdatePlanning, classes }) => { const [schedule, setSchedule] = useState(null); const { getNiveauxTabs } = useClasses(); - const niveauxLabels = Array.isArray(selectedClass?.niveaux) ? getNiveauxTabs(selectedClass.niveaux) : []; + const niveauxLabels = Array.isArray(selectedClass?.levels) ? getNiveauxTabs(selectedClass.levels) : []; const [isModalOpen, setIsModalOpen] = useState(false); const handleOpenModal = () => setIsModalOpen(true); @@ -94,8 +94,8 @@ const ScheduleManagement = ({ handleUpdatePlanning, classes }) => { }; const categorizedClasses = classes.reduce((acc, classe) => { - const { annee_scolaire } = classe; - const [startYear] = annee_scolaire.split('-').map(Number); + const { school_year } = classe; + const [startYear] = school_year.split('-').map(Number); const category = startYear >= currentSchoolYearStart ? 'Actives' : 'Anciennes'; if (!acc[category]) { @@ -153,7 +153,7 @@ const ScheduleManagement = ({ handleUpdatePlanning, classes }) => { Spécialités
- + diff --git a/Front-End/src/components/Structure/Planning/SpecialityEventModal.js b/Front-End/src/components/Structure/Planning/SpecialityEventModal.js index 913d622..bd4b74e 100644 --- a/Front-End/src/components/Structure/Planning/SpecialityEventModal.js +++ b/Front-End/src/components/Structure/Planning/SpecialityEventModal.js @@ -68,7 +68,7 @@ const SpecialityEventModal = ({ isOpen, onClose, selectedCell, existingEvent, ha } // Transformer eventData pour correspondre au format du planning - const selectedTeacherData = formData.enseignants.find(teacher => teacher.id === parseInt(eventData.teacherId, 10)); + const selectedTeacherData = formData.teachers.find(teacher => teacher.id === parseInt(eventData.teacherId, 10)); const newCourse = { color: '#FF0000', // Vous pouvez définir la couleur de manière dynamique si nécessaire teachers: selectedTeacherData ? [`${selectedTeacherData.nom} ${selectedTeacherData.prenom}`] : [], @@ -121,10 +121,10 @@ const SpecialityEventModal = ({ isOpen, onClose, selectedCell, existingEvent, ha }; const filteredTeachers = selectedSpeciality - ? formData.enseignants.filter(teacher => - teacher.specialites_ids.includes(parseInt(selectedSpeciality, 10)) + ? formData.teachers.filter(teacher => + teacher.specialites.includes(parseInt(selectedSpeciality, 10)) ) - : formData.enseignants; + : formData.teachers; const handleSpecialityChange = (e) => { const specialityId = e.target.value; @@ -164,7 +164,7 @@ const SpecialityEventModal = ({ isOpen, onClose, selectedCell, existingEvent, ha selected={selectedSpeciality} choices={[ { value: '', label: 'Sélectionner une spécialité' }, - ...groupSpecialitiesBySubject(formData.enseignants).map((speciality) => ({ + ...groupSpecialitiesBySubject(formData.teachers).map((speciality) => ({ value: speciality.id, label: speciality.nom })) diff --git a/Front-End/src/components/ToggleSwitch.js b/Front-End/src/components/ToggleSwitch.js index f13147b..9084bff 100644 --- a/Front-End/src/components/ToggleSwitch.js +++ b/Front-End/src/components/ToggleSwitch.js @@ -20,7 +20,7 @@ const ToggleSwitch = ({ label, checked, onChange }) => { id="toggle" checked={checked} onChange={handleChange} - className="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer border-emerald-500 checked:right-0 checked:border-emerald-500 checked:bg-emerald-500 hover:border-emerald-500 hover:bg-emerald-500 focus:outline-none focus:ring-0" + className="hover:text-emerald-500 absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer border-emerald-500 checked:right-0 checked:border-emerald-500 checked:bg-emerald-500 hover:border-emerald-500 hover:bg-emerald-500 focus:outline-none focus:ring-0" ref={inputRef} // Reference to the input element />