diff --git a/app/Http/Controllers/Admin/Manage/CourseRegistrationController.php b/app/Http/Controllers/Admin/Manage/CourseRegistrationController.php index a912333..89148a8 100644 --- a/app/Http/Controllers/Admin/Manage/CourseRegistrationController.php +++ b/app/Http/Controllers/Admin/Manage/CourseRegistrationController.php @@ -93,6 +93,7 @@ public function show(Student $student): Response 'submissions' => $submissions, 'semesters' => $semesters->values(), 'openSemesters' => $activeTerm?->open_semesters ?? [], + 'studentCurrentSemester' => $student->current_semester, 'hasActiveTerm' => $activeTerm !== null, 'backHref' => $backHref, 'canReview' => $canReview, @@ -114,6 +115,7 @@ public function save(Student $student, string $semester, SaveCourseRegistrationR $activeTerm->id, $semesterNumber, $activeTerm->open_semesters ?? [], + $student->current_semester, ); $selectedIds = array_values(array_intersect( diff --git a/app/Services/Admin/Manage/CourseRegistrationService.php b/app/Services/Admin/Manage/CourseRegistrationService.php index c1a242a..77b3cac 100644 --- a/app/Services/Admin/Manage/CourseRegistrationService.php +++ b/app/Services/Admin/Manage/CourseRegistrationService.php @@ -159,9 +159,9 @@ public function availableCourseClasses(int $departmentId, int $academicTermId): * @param array $openSemesters * @return array */ - public function selectableCourseClassIds(int $departmentId, int $academicTermId, ?int $semesterNumber, array $openSemesters): array + public function selectableCourseClassIds(int $departmentId, int $academicTermId, ?int $semesterNumber, array $openSemesters, ?int $studentCurrentSemester): array { - if ($semesterNumber === null || ! in_array($semesterNumber, $openSemesters, true)) { + if ($semesterNumber === null || $semesterNumber !== $studentCurrentSemester || ! in_array($semesterNumber, $openSemesters, true)) { return []; } diff --git a/resources/js/pages/admin/manage/course-registrations/show.tsx b/resources/js/pages/admin/manage/course-registrations/show.tsx index 8e037db..851adb8 100644 --- a/resources/js/pages/admin/manage/course-registrations/show.tsx +++ b/resources/js/pages/admin/manage/course-registrations/show.tsx @@ -48,6 +48,18 @@ const RegistrationStatusVariants: Record< rejected: 'destructive', }; +function isSemesterOpenForStudent( + semester: number | null, + openSemesters: number[], + studentCurrentSemester: number, +): boolean { + return ( + semester !== null && + semester === studentCurrentSemester && + openSemesters.includes(semester) + ); +} + function InfoRow({ label, value }: { label: string; value: React.ReactNode }) { return (
@@ -516,7 +528,11 @@ function SemesterCard({ } alt="Tanda tangan mahasiswa" error={errors.signature} - editable={!isViewOnly && !isLocked} + editable={ + isSemesterOpen && + !isViewOnly && + !isLocked + } />

{student?.user?.profile @@ -608,6 +624,7 @@ type Props = { submissions: Record; semesters: (number | null)[]; openSemesters: number[]; + studentCurrentSemester: number; hasActiveTerm: boolean; backHref: string | null; canReview: boolean; @@ -619,6 +636,7 @@ export default function CourseRegistrationDetail({ submissions, semesters, openSemesters, + studentCurrentSemester, hasActiveTerm, backHref, canReview, @@ -670,8 +688,11 @@ export default function CourseRegistrationDetail({ {semester !== null ? `Semester ${semester}` : 'Lainnya'} - {!openSemesters.includes(semester ?? -1) && - ' (Ditutup)'} + {!isSemesterOpenForStudent( + semester, + openSemesters, + studentCurrentSemester, + ) && ' (Ditutup)'} ))} @@ -684,8 +705,10 @@ export default function CourseRegistrationDetail({ semester={currentSemester} submission={currentSubmission} studentId={studentId} - isSemesterOpen={openSemesters.includes( - currentSemester ?? -1, + isSemesterOpen={isSemesterOpenForStudent( + currentSemester, + openSemesters, + studentCurrentSemester, )} backHref={backHref} canReview={canReview}