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()
->with([
'students' => function ($q) use ($user) {
if ($user->hasRole(UserRole::Mahasiswa->value)) {
$q->where('students.id', $user->student?->id);
}
},
'students.user.profile',
'students.department',
'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}%"))))
->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::Mahasiswa->value), fn ($q) => $q->whereHas('students', fn ($q) => $q->where('students.id', $user->student?->id)))
->latest()
->paginate($perPage, ['id', 'lecturer_id', 'topic', 'notes', 'created_at']);
}

View File

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

View File

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

View File

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