From 4431c428d3709ef3b2e8f66edd13beed73e42709 Mon Sep 17 00:00:00 2001 From: N3WT DE COMPET Date: Sun, 5 Apr 2026 12:08:04 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20s=C3=A9lection=20enseignants=20dans=20le?= =?UTF-8?q?s=20plannings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/[locale]/admin/structure/page.js | 8 +- Front-End/src/components/Calendar/DayView.js | 2 +- Front-End/src/components/Calendar/WeekView.js | 14 ++- .../Structure/Planning/ScheduleEventModal.js | 100 ++++++++++++++++-- 4 files changed, 109 insertions(+), 15 deletions(-) diff --git a/Front-End/src/app/[locale]/admin/structure/page.js b/Front-End/src/app/[locale]/admin/structure/page.js index 0c49399..f30908b 100644 --- a/Front-End/src/app/[locale]/admin/structure/page.js +++ b/Front-End/src/app/[locale]/admin/structure/page.js @@ -60,12 +60,8 @@ export default function Page() { const scheduleClasses = classes.filter( (classe) => classe?.school_year === currentSchoolYear ); - const scheduleSpecialities = specialities.filter( - (speciality) => speciality?.school_year === currentSchoolYear - ); - const scheduleTeachers = teachers.filter( - (teacher) => teacher?.school_year === currentSchoolYear - ); + const scheduleSpecialities = specialities; + const scheduleTeachers = teachers; useEffect(() => { if (selectedEstablishmentId) { diff --git a/Front-End/src/components/Calendar/DayView.js b/Front-End/src/components/Calendar/DayView.js index 82ef6c8..6af7335 100644 --- a/Front-End/src/components/Calendar/DayView.js +++ b/Front-End/src/components/Calendar/DayView.js @@ -180,7 +180,7 @@ const DayView = ({ onDateClick, onEventClick, events, onOpenDrawer }) => { {`${hour.toString().padStart(2, '0')}:00`}
{ return acc; }, {}); + const todayIndex = weekDays.findIndex((day) => isToday(day)); + const isWeekend = (date) => { const day = date.getDay(); return day === 0 || day === 6; @@ -212,6 +214,16 @@ const WeekView = ({ onDateClick, onEventClick, events }) => { {/* Grille horaire */}
+ {isCurrentWeek && todayIndex >= 0 && ( +
+ )} + {/* Ligne de temps actuelle */} {isCurrentWeek && (
{ key={`${hour}-${day}`} className={`h-20 relative border-b border-gray-100 ${isWeekend(day) ? 'bg-gray-50' : 'bg-white'} - ${isToday(day) ? 'bg-primary/10/50 border-x border-primary' : ''}`} + ${isToday(day) ? 'bg-primary/10/50' : ''}`} onClick={ parentView ? undefined diff --git a/Front-End/src/components/Structure/Planning/ScheduleEventModal.js b/Front-End/src/components/Structure/Planning/ScheduleEventModal.js index 87a49f8..234f392 100644 --- a/Front-End/src/components/Structure/Planning/ScheduleEventModal.js +++ b/Front-End/src/components/Structure/Planning/ScheduleEventModal.js @@ -22,6 +22,66 @@ export default function ScheduleEventModal({ usePlanning(); const { showNotification } = useNotification(); + const selectedPlanning = React.useMemo(() => { + return schedules.find( + (schedule) => Number(schedule.id) === Number(eventData?.planning) + ); + }, [schedules, eventData?.planning]); + + const selectedClass = React.useMemo(() => { + if (!selectedPlanning?.school_class) { + return null; + } + + return classes.find( + (schoolClass) => + Number(schoolClass.id) === Number(selectedPlanning.school_class) + ); + }, [classes, selectedPlanning]); + + const classTeachers = React.useMemo(() => { + if (!selectedClass) { + return teachers; + } + + const classTeacherIds = [ + ...(Array.isArray(selectedClass.teachers) ? selectedClass.teachers : []), + ...((selectedClass.teachers_details || []).map((teacher) => teacher.id) || []), + ]; + + if (classTeacherIds.length === 0) { + return []; + } + + const classTeacherIdSet = new Set(classTeacherIds.map((id) => Number(id))); + return teachers.filter((teacher) => classTeacherIdSet.has(Number(teacher.id))); + }, [teachers, selectedClass]); + + const classSpecialities = React.useMemo(() => { + const specialityMap = new Map(); + + classTeachers.forEach((teacher) => { + (teacher.specialities_details || []).forEach((speciality) => { + specialityMap.set(Number(speciality.id), speciality); + }); + + (teacher.specialities || []).forEach((specialityId) => { + if (specialityMap.has(Number(specialityId))) { + return; + } + + const speciality = specialities.find( + (item) => Number(item.id) === Number(specialityId) + ); + if (speciality) { + specialityMap.set(Number(speciality.id), speciality); + } + }); + }); + + return Array.from(specialityMap.values()); + }, [classTeachers, specialities]); + React.useEffect(() => { if (!eventData?.planning && schedules.length > 0) { const defaultSchedule = @@ -37,9 +97,35 @@ export default function ScheduleEventModal({ } }, [schedules, selectedSchedule, eventData?.planning]); + React.useEffect(() => { + if ( + eventData?.teacher && + !classTeachers.some( + (teacher) => Number(teacher.id) === Number(eventData.teacher) + ) + ) { + setEventData((prev) => ({ + ...prev, + teacher: '', + })); + } + + if ( + eventData?.speciality && + !classSpecialities.some( + (speciality) => Number(speciality.id) === Number(eventData.speciality) + ) + ) { + setEventData((prev) => ({ + ...prev, + speciality: '', + })); + } + }, [classTeachers, classSpecialities, eventData?.teacher, eventData?.speciality]); + const handleSpecialityChange = (specialityId) => { - const selectedSpeciality = specialities.find( - (s) => s.id === parseInt(specialityId, 10) + const selectedSpeciality = classSpecialities.find( + (s) => Number(s.id) === Number(specialityId) ); if (selectedSpeciality) { setEventData((prev) => ({ @@ -52,8 +138,8 @@ export default function ScheduleEventModal({ }; const handleTeacherChange = (teacherId) => { - const selectedTeacher = teachers.find( - (t) => t.id === parseInt(teacherId, 10) + const selectedTeacher = classTeachers.find( + (t) => Number(t.id) === Number(teacherId) ); if (selectedTeacher) { setEventData((prev) => ({ @@ -66,7 +152,7 @@ export default function ScheduleEventModal({ const handlePlanningChange = (planningId) => { const selectedSchedule = schedules.find( - (s) => s.id === parseInt(planningId, 10) + (s) => Number(s.id) === Number(planningId) ); if (selectedSchedule) { setEventData((prev) => ({ @@ -185,7 +271,7 @@ export default function ScheduleEventModal({ - {specialities.map((speciality) => ( + {classSpecialities.map((speciality) => ( @@ -207,7 +293,7 @@ export default function ScheduleEventModal({ - {teachers.map((teacher) => ( + {classTeachers.map((teacher) => (