feat: enhance attendance retrieval by filtering roles based on view permissions
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (8.3) (push) Waiting to run
tests / ci (8.4) (push) Waiting to run
tests / ci (8.5) (push) Waiting to run

This commit is contained in:
Yoga Pangestu 2026-07-16 15:10:06 +07:00
parent 5d11741f1d
commit b3184de155

View File

@ -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');