feat: enhance AcademicAdvisingLogService to filter logs based on student role; update RolePermissionSeeder to include view-academic-advising-logs permission; rename 'Pembimbing Akademik' to 'Dosen' in UI

This commit is contained in:
Yoga Pangestu 2026-09-03 15:05:28 +07:00
parent 51e943572a
commit 37ce3c15ea
4 changed files with 10 additions and 3 deletions

View File

@ -13,6 +13,11 @@ public function paginated(User $user, int $perPage = 25, string $search = '', ?i
{ {
return AcademicAdvisingLog::query() return AcademicAdvisingLog::query()
->with([ ->with([
'students' => function ($q) use ($user) {
if ($user->hasRole(UserRole::Mahasiswa->value)) {
$q->where('students.id', $user->student?->id);
}
},
'students.user.profile', 'students.user.profile',
'students.department', 'students.department',
'lecturer.user.profile', 'lecturer.user.profile',
@ -23,6 +28,7 @@ public function paginated(User $user, int $perPage = 25, string $search = '', ?i
->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%")))) ->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))))
->when($lecturerId, fn ($q) => $q->where('lecturer_id', $lecturerId)) ->when($lecturerId, fn ($q) => $q->where('lecturer_id', $lecturerId))
->when($user->hasRole(UserRole::Dosen->value), fn ($q) => $q->where('lecturer_id', $user->lecturer?->id)) ->when($user->hasRole(UserRole::Dosen->value), fn ($q) => $q->where('lecturer_id', $user->lecturer?->id))
->when($user->hasRole(UserRole::Mahasiswa->value), fn ($q) => $q->whereHas('students', fn ($q) => $q->where('students.id', $user->student?->id)))
->latest() ->latest()
->paginate($perPage, ['id', 'lecturer_id', 'topic', 'notes', 'created_at']); ->paginate($perPage, ['id', 'lecturer_id', 'topic', 'notes', 'created_at']);
} }

View File

@ -40,6 +40,7 @@ public function run(): void
'mahasiswa' => [ 'mahasiswa' => [
'view-dashboard', 'view-dashboard',
'view-academic-terms', 'view-academic-terms',
'view-academic-advising-logs',
'view-courses', 'view-courses',
'view-course-registrations', 'view-course-registrations',
'view-letter-requests', 'view-letter-requests',

View File

@ -58,7 +58,7 @@ export function createAcademicAdvisingLogColumns(
}, },
{ {
accessorKey: 'lecturer.user.profile.full_name', accessorKey: 'lecturer.user.profile.full_name',
header: () => <span>Pembimbing Akademik</span>, header: () => <span>Dosen</span>,
cell: ({ row }) => { cell: ({ row }) => {
const lecturer = row.original.lecturer; const lecturer = row.original.lecturer;

View File

@ -258,7 +258,7 @@ function ViewDetailDialog({
<div className="grid gap-1"> <div className="grid gap-1">
<Label className="text-muted-foreground"> <Label className="text-muted-foreground">
Pembimbing Akademik Dosen
</Label> </Label>
<p> <p>
{log.lecturer?.user?.profile?.full_name ?? {log.lecturer?.user?.profile?.full_name ??
@ -338,7 +338,7 @@ function AdvisingLogFields({
<> <>
<div className="grid gap-2"> <div className="grid gap-2">
<Label> <Label>
Pembimbing Akademik{' '} Dosen{' '}
<span className="text-destructive">*</span> <span className="text-destructive">*</span>
</Label> </Label>
<input <input