diff --git a/resources/js/pages/admin/manage/course-classes/index.tsx b/resources/js/pages/admin/manage/course-classes/index.tsx index 40ec0e3..929d0c3 100644 --- a/resources/js/pages/admin/manage/course-classes/index.tsx +++ b/resources/js/pages/admin/manage/course-classes/index.tsx @@ -73,6 +73,19 @@ type CourseClassAssignment = { academic_term_id: number; }; +function courseMatchesTermParity( + course: Course, + term: AcademicTerm | undefined, +): boolean { + if (!term || course.semester_number === null) { + return true; + } + + const isOddSemester = course.semester_number % 2 === 1; + + return term.semester === 'odd' ? isOddSemester : !isOddSemester; +} + function groupCoursesByDepartmentAndSemester(courses: Course[]): CourseGroup[] { const groups: CourseGroup[] = []; let currentKey: string | null = null; @@ -324,6 +337,9 @@ function CreateForm({ const [lecturer, setLecturer] = useState(null); const courseAnchor = useComboboxAnchor(); + const selectedTerm = academicTerms.find( + (term) => String(term.id) === academicTermId, + ); const takenCourseIds = new Set( courseClassAssignments .filter((a) => String(a.academic_term_id) === academicTermId) @@ -331,7 +347,10 @@ function CreateForm({ ); const selectedCourseIds = new Set(selectedCourses.map((c) => c.id)); const availableCourses = courses.filter( - (c) => !takenCourseIds.has(c.id) && !selectedCourseIds.has(c.id), + (c) => + !takenCourseIds.has(c.id) && + !selectedCourseIds.has(c.id) && + courseMatchesTermParity(c, selectedTerm), ); const courseGroups = groupCoursesByDepartmentAndSemester(availableCourses); const selectedDepartmentIds = new Set( @@ -576,6 +595,9 @@ function EditForm({ : null, ); + const selectedTerm = academicTerms.find( + (term) => String(term.id) === academicTermId, + ); const takenCourseIds = new Set( courseClassAssignments .filter( @@ -585,7 +607,10 @@ function EditForm({ ) .map((a) => a.course_id), ); - const availableCourses = courses.filter((c) => !takenCourseIds.has(c.id)); + const availableCourses = courses.filter( + (c) => + !takenCourseIds.has(c.id) && courseMatchesTermParity(c, selectedTerm), + ); const courseGroups = groupCoursesByDepartmentAndSemester(availableCourses); const availableLecturers = course ? lecturers.filter((l) =>