diff --git a/app/Services/Admin/Manage/CourseClassService.php b/app/Services/Admin/Manage/CourseClassService.php
index 88a6f22..5958016 100644
--- a/app/Services/Admin/Manage/CourseClassService.php
+++ b/app/Services/Admin/Manage/CourseClassService.php
@@ -19,13 +19,17 @@ public function getAllForSelect(): Collection
public function paginated(int $perPage = 25, string $search = '', ?int $academicTermId = null, ?string $method = null): LengthAwarePaginator
{
return CourseClass::query()
- ->select(['id', 'course_id', 'lecturer_id', 'academic_term_id', 'method'])
+ ->select(['course_classes.id', 'course_classes.course_id', 'course_classes.lecturer_id', 'course_classes.academic_term_id', 'course_classes.method'])
+ ->join('academic_terms', 'academic_terms.id', '=', 'course_classes.academic_term_id')
+ ->join('courses', 'courses.id', '=', 'course_classes.course_id')
->withCount('enrollments')
- ->with(['course:id,code,name,department_id', 'lecturer.user.profile', 'academicTerm:id,academic_year,semester,start_date,end_date'])
+ ->with(['course:id,code,name,department_id,semester_number', 'lecturer.user.profile', 'academicTerm:id,academic_year,semester,start_date,end_date'])
->when($search, fn ($q) => $q->whereHas('course', fn ($q) => $q->where('name', 'like', "%{$search}%")->orWhere('code', 'like', "%{$search}%")))
- ->when($academicTermId, fn ($q) => $q->where('academic_term_id', $academicTermId))
- ->when($method, fn ($q) => $q->where('method', $method))
- ->latest()
+ ->when($academicTermId, fn ($q) => $q->where('course_classes.academic_term_id', $academicTermId))
+ ->when($method, fn ($q) => $q->where('course_classes.method', $method))
+ ->orderByDesc('academic_terms.start_date')
+ ->orderBy('courses.semester_number')
+ ->orderBy('courses.name')
->paginate($perPage);
}
diff --git a/resources/js/pages/admin/manage/course-classes/columns.tsx b/resources/js/pages/admin/manage/course-classes/columns.tsx
index 49d4752..e66ffc1 100644
--- a/resources/js/pages/admin/manage/course-classes/columns.tsx
+++ b/resources/js/pages/admin/manage/course-classes/columns.tsx
@@ -3,7 +3,6 @@ import { Pencil, Trash2, Users } from 'lucide-react';
import { RowActions } from '@/components/row-actions';
import { Badge } from '@/components/ui/badge';
import { index as enrollmentsIndex } from '@/routes/admin/manage/course-classes/enrollments';
-import { formatAcademicTermLabel } from '@/types/academic-term';
import { ClassMethodLabels } from '@/types/course-class';
import type { CourseClass } from '@/types/course-class';
@@ -44,15 +43,6 @@ export function createCourseClassColumns(
cell: ({ row }) =>
row.original.lecturer?.user?.profile?.full_name ?? '-',
},
- {
- accessorKey: 'academic_term.academic_year',
- header: () => Periode,
- cell: ({ row }) => {
- const term = row.original.academic_term;
-
- return term ? formatAcademicTermLabel(term) : '-';
- },
- },
{
accessorKey: 'method',
header: () => Metode,
diff --git a/resources/js/pages/admin/manage/course-classes/index.tsx b/resources/js/pages/admin/manage/course-classes/index.tsx
index 99c3786..a583226 100644
--- a/resources/js/pages/admin/manage/course-classes/index.tsx
+++ b/resources/js/pages/admin/manage/course-classes/index.tsx
@@ -290,6 +290,9 @@ export default function CourseClassIndex({
onPerPageChange={handlePerPageChange}
onSearchChange={handleSearchChange}
searchValue={search}
+ groupBy={(courseClass) =>
+ `${courseClass.academic_term ? formatAcademicTermLabel(courseClass.academic_term) : 'Tanpa Periode'} — Semester ${courseClass.course?.semester_number ?? 'Tidak ditentukan'}`
+ }
toolbar={