feat: enhance attendance retrieval by filtering employees based on roles with attendance view permissions
This commit is contained in:
parent
735b7fa9ed
commit
5d11741f1d
@ -4,6 +4,7 @@
|
||||
|
||||
use App\Enums\EmployeeAdvanceStatus;
|
||||
use App\Enums\OrderStatus;
|
||||
use App\Enums\Permission;
|
||||
use App\Enums\PriceType;
|
||||
use App\Enums\ProductStockQuality;
|
||||
use App\Enums\Role;
|
||||
@ -32,6 +33,12 @@ public function getAttendance(?Carbon $startDate = null, ?Carbon $endDate = null
|
||||
$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();
|
||||
$leaveRequestQuery = LeaveRequest::query()->approved();
|
||||
@ -39,6 +46,7 @@ public function getAttendance(?Carbon $startDate = null, ?Carbon $endDate = null
|
||||
if ($startDate && $endDate) {
|
||||
$attendanceQuery->whereBetween('attendance_date', [$startDate, $endDate]);
|
||||
$leaveRequestQuery->where('start_date', '<=', $endDate)->where('end_date', '>=', $startDate);
|
||||
$employeeQuery->where('join_date', '<=', $endDate);
|
||||
}
|
||||
|
||||
if (! $isSuper) {
|
||||
@ -48,6 +56,7 @@ public function getAttendance(?Carbon $startDate = null, ?Carbon $endDate = null
|
||||
$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');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user