feat: enhance attendance retrieval by filtering roles based on view permissions
This commit is contained in:
parent
5d11741f1d
commit
b3184de155
@ -5,6 +5,7 @@
|
|||||||
use App\Enums\OrderChannel;
|
use App\Enums\OrderChannel;
|
||||||
use App\Enums\OrderStatus;
|
use App\Enums\OrderStatus;
|
||||||
use App\Enums\PaymentType;
|
use App\Enums\PaymentType;
|
||||||
|
use App\Enums\Permission;
|
||||||
use App\Enums\PriceType;
|
use App\Enums\PriceType;
|
||||||
use App\Enums\Role;
|
use App\Enums\Role;
|
||||||
use App\Models\Attendance;
|
use App\Models\Attendance;
|
||||||
@ -62,11 +63,16 @@ public function canCheckInForUser(User $user): bool
|
|||||||
|
|
||||||
public function getAttendance(): array
|
public function getAttendance(): array
|
||||||
{
|
{
|
||||||
/** @var User|null $user */
|
|
||||||
/** @var User|null $user */
|
/** @var User|null $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
$isSuper = $user?->hasAnyRole(['developer', 'owner', 'direktur']) ?? false;
|
$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();
|
$employeeQuery = Employee::query();
|
||||||
$attendanceQuery = Attendance::query()->where('attendance_date', Carbon::today());
|
$attendanceQuery = Attendance::query()->where('attendance_date', Carbon::today());
|
||||||
$leaveRequestQuery = LeaveRequest::query()
|
$leaveRequestQuery = LeaveRequest::query()
|
||||||
@ -81,6 +87,7 @@ public function getAttendance(): array
|
|||||||
$leaveRequestQuery->where('employee_id', $employeeId);
|
$leaveRequestQuery->where('employee_id', $employeeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$employeeQuery->whereHas('user.roles', fn ($q) => $q->whereIn('name', $attendanceRoles));
|
||||||
$totalEmployees = $employeeQuery->count();
|
$totalEmployees = $employeeQuery->count();
|
||||||
$present = $attendanceQuery->distinct('employee_id')->count('employee_id');
|
$present = $attendanceQuery->distinct('employee_id')->count('employee_id');
|
||||||
$onLeave = $leaveRequestQuery->distinct('employee_id')->count('employee_id');
|
$onLeave = $leaveRequestQuery->distinct('employee_id')->count('employee_id');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user