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\EmployeeAdvanceStatus;
|
||||||
use App\Enums\OrderStatus;
|
use App\Enums\OrderStatus;
|
||||||
|
use App\Enums\Permission;
|
||||||
use App\Enums\PriceType;
|
use App\Enums\PriceType;
|
||||||
use App\Enums\ProductStockQuality;
|
use App\Enums\ProductStockQuality;
|
||||||
use App\Enums\Role;
|
use App\Enums\Role;
|
||||||
@ -32,6 +33,12 @@ public function getAttendance(?Carbon $startDate = null, ?Carbon $endDate = null
|
|||||||
$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();
|
$attendanceQuery = Attendance::query();
|
||||||
$leaveRequestQuery = LeaveRequest::query()->approved();
|
$leaveRequestQuery = LeaveRequest::query()->approved();
|
||||||
@ -39,6 +46,7 @@ public function getAttendance(?Carbon $startDate = null, ?Carbon $endDate = null
|
|||||||
if ($startDate && $endDate) {
|
if ($startDate && $endDate) {
|
||||||
$attendanceQuery->whereBetween('attendance_date', [$startDate, $endDate]);
|
$attendanceQuery->whereBetween('attendance_date', [$startDate, $endDate]);
|
||||||
$leaveRequestQuery->where('start_date', '<=', $endDate)->where('end_date', '>=', $startDate);
|
$leaveRequestQuery->where('start_date', '<=', $endDate)->where('end_date', '>=', $startDate);
|
||||||
|
$employeeQuery->where('join_date', '<=', $endDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $isSuper) {
|
if (! $isSuper) {
|
||||||
@ -48,6 +56,7 @@ public function getAttendance(?Carbon $startDate = null, ?Carbon $endDate = null
|
|||||||
$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