diff --git a/app/Http/Controllers/Admin/Manage/ClassEnrollmentController.php b/app/Http/Controllers/Admin/Manage/CourseClass/ClassEnrollmentController.php similarity index 88% rename from app/Http/Controllers/Admin/Manage/ClassEnrollmentController.php rename to app/Http/Controllers/Admin/Manage/CourseClass/ClassEnrollmentController.php index 0483695..592d5c8 100644 --- a/app/Http/Controllers/Admin/Manage/ClassEnrollmentController.php +++ b/app/Http/Controllers/Admin/Manage/CourseClass/ClassEnrollmentController.php @@ -1,11 +1,11 @@ select(['course_classes.id', 'course_classes.course_id', 'course_classes.lecturer_id', 'course_classes.academic_term_id']) - ->join('courses', 'courses.id', '=', 'course_classes.course_id') - ->join('departments', 'departments.id', '=', 'courses.department_id') - ->with([ - 'course:id,code,name,semester_number,department_id', - 'course.department:id,name', - ]) - ->when($user?->hasRole('dosen'), fn ($q) => $q->where('course_classes.lecturer_id', $user->lecturer?->id)) - ->when($user?->hasRole('mahasiswa'), fn ($q) => $q->where('courses.department_id', $user->student?->department_id)) - ->orderBy('departments.name') - ->orderBy('courses.semester_number') - ->orderBy('courses.name') - ->get(); - } - public function paginated(int $perPage = 25, string $search = '', ?int $academicTermId = null, ?string $method = null): LengthAwarePaginator { return CourseClass::query() @@ -65,11 +43,12 @@ public function createMany(array $data): Collection public function update(CourseClass $courseClass, array $data): CourseClass { - $courseClass->course_id = $data['course_id']; - $courseClass->lecturer_id = $data['lecturer_id']; - $courseClass->academic_term_id = $data['academic_term_id']; - $courseClass->method = $data['method'] ?? null; - $courseClass->update(); + $courseClass->update([ + 'course_id' => $data['course_id'], + 'lecturer_id' => $data['lecturer_id'], + 'academic_term_id' => $data['academic_term_id'], + 'method' => $data['method'] ?? null, + ]); return $courseClass; } @@ -121,4 +100,26 @@ public function duplicateFromTerm(int $sourceAcademicTermId, int $targetAcademic return ['created' => $created, 'skipped' => $skipped]; }); } + + /** + * When $user is a dosen, only their own assigned classes are returned. + * When $user is a mahasiswa, only classes from their own department are returned. + */ + public function getAllForSelect(?User $user = null): Collection + { + return CourseClass::query() + ->select(['course_classes.id', 'course_classes.course_id', 'course_classes.lecturer_id', 'course_classes.academic_term_id']) + ->join('courses', 'courses.id', '=', 'course_classes.course_id') + ->join('departments', 'departments.id', '=', 'courses.department_id') + ->with([ + 'course:id,code,name,semester_number,department_id', + 'course.department:id,name', + ]) + ->when($user?->hasRole('dosen'), fn ($q) => $q->where('course_classes.lecturer_id', $user->lecturer?->id)) + ->when($user?->hasRole('mahasiswa'), fn ($q) => $q->where('courses.department_id', $user->student?->department_id)) + ->orderBy('departments.name') + ->orderBy('courses.semester_number') + ->orderBy('courses.name') + ->get(); + } } diff --git a/resources/js/pages/admin/manage/course-classes/enrollments.tsx b/resources/js/pages/admin/manage/course-classes/enrollments.tsx index d8fe916..91530aa 100644 --- a/resources/js/pages/admin/manage/course-classes/enrollments.tsx +++ b/resources/js/pages/admin/manage/course-classes/enrollments.tsx @@ -42,15 +42,17 @@ export default function ClassEnrollmentIndex({ const columns: ColumnDef[] = [ { - accessorKey: 'student.student_number', + id: 'identity', header: () => NIM, - cell: ({ row }) => row.original.student?.student_number ?? '-', - }, - { - accessorKey: 'student.user.profile.full_name', - header: () => Nama Mahasiswa, - cell: ({ row }) => - row.original.student?.user?.profile?.full_name ?? '-', + cell: ({ row }) => ( +
+ {row.original.student?.student_number ?? '-'} + + {row.original.student?.user?.profile?.full_name ?? + '-'} + +
+ ), }, { accessorKey: 'student.department.name', diff --git a/routes/admin.php b/routes/admin.php index fa65333..773125d 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -11,8 +11,8 @@ use App\Http\Controllers\Admin\Finances\TuitionInvoiceController; use App\Http\Controllers\Admin\Finances\TuitionPaymentController; use App\Http\Controllers\Admin\Manage\AnnouncementController; -use App\Http\Controllers\Admin\Manage\ClassEnrollmentController; -use App\Http\Controllers\Admin\Manage\CourseClassController; +use App\Http\Controllers\Admin\Manage\CourseClass\ClassEnrollmentController; +use App\Http\Controllers\Admin\Manage\CourseClass\CourseClassController; use App\Http\Controllers\Admin\Manage\CourseRegistrationController; use App\Http\Controllers\Admin\Master\AcademicTermController; use App\Http\Controllers\Admin\Master\CourseController;