From b3184de155d47f7504e7a2e4065ea6130c4c25a5 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 16 Jul 2026 15:10:06 +0700 Subject: [PATCH] feat: enhance attendance retrieval by filtering roles based on view permissions --- app/Services/System/DashboardService.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/Services/System/DashboardService.php b/app/Services/System/DashboardService.php index fdca500..7dff025 100644 --- a/app/Services/System/DashboardService.php +++ b/app/Services/System/DashboardService.php @@ -5,6 +5,7 @@ use App\Enums\OrderChannel; use App\Enums\OrderStatus; use App\Enums\PaymentType; +use App\Enums\Permission; use App\Enums\PriceType; use App\Enums\Role; use App\Models\Attendance; @@ -62,11 +63,16 @@ public function canCheckInForUser(User $user): bool public function getAttendance(): array { - /** @var User|null $user */ /** @var User|null $user */ $user = auth()->user(); $isSuper = $user?->hasAnyRole(['developer', 'owner', 'direktur']) ?? false; + $attendanceRoles = collect(Role::cases()) + ->filter(fn (Role $role) => in_array(Permission::ATTENDANCES_VIEW, $role->permissions())) + ->map(fn (Role $role) => $role->value) + ->values() + ->toArray(); + $employeeQuery = Employee::query(); $attendanceQuery = Attendance::query()->where('attendance_date', Carbon::today()); $leaveRequestQuery = LeaveRequest::query() @@ -81,6 +87,7 @@ public function getAttendance(): array $leaveRequestQuery->where('employee_id', $employeeId); } + $employeeQuery->whereHas('user.roles', fn ($q) => $q->whereIn('name', $attendanceRoles)); $totalEmployees = $employeeQuery->count(); $present = $attendanceQuery->distinct('employee_id')->count('employee_id'); $onLeave = $leaveRequestQuery->distinct('employee_id')->count('employee_id');