feat(payroll): DOLE compliant payroll automation

This commit is contained in:
2026-04-28 09:50:44 +08:00
parent 03fb170b01
commit fc916244c6
778 changed files with 4360 additions and 20271 deletions

View File

@@ -149,6 +149,7 @@ class AttendanceRecordController extends Controller
'hasSampleFile' => file_exists(storage_path('uploads/sample/sample-attendance-record.xlsx')),
'filters' => $request->all(['search', 'employee_id', 'status', 'date_from', 'date_to', 'sort_field', 'sort_direction', 'per_page']),
'todayStats' => $todayStats,
'leaveTypes' => \App\Models\LeaveType::whereIn('created_by', getCompanyAndUsersId())->where('status', 'active')->get(['id', 'name']),
]);
} else {
return redirect()->back()->with('error', __('Permission Denied.'));
@@ -167,7 +168,7 @@ class AttendanceRecordController extends Controller
}
$employees = User::emp()
->with('employee')
->with(['employee.shift'])
->whereIn('created_by', getCompanyAndUsersId())
->where('status', 'active')
->whereIn('id', $employeeQuery->pluck('user_id'))
@@ -178,6 +179,10 @@ class AttendanceRecordController extends Controller
'id' => $user->id,
'name' => $user->name,
'employee_id' => $user->employee->employee_id ?? '',
'shift' => $user->employee->shift ? [
'start_time' => $user->employee->shift->start_time,
'end_time' => $user->employee->shift->end_time,
] : null,
];
});
@@ -824,7 +829,7 @@ class AttendanceRecordController extends Controller
];
}
$query = \App\Models\User::with(['employee.department'])
$query = \App\Models\User::with(['employee.department', 'employee.shift'])
->whereHas('employee', function($q) {
$q->where('employee_status', 'active');
});
@@ -972,6 +977,10 @@ class AttendanceRecordController extends Controller
'employee_code' => $user->employee->employee_code ?? '',
'designation' => substr($user->employee->designation->name ?? 'Staff', 0, 15),
'department' => $user->employee->department->name ?? 'General',
'shift' => $user->employee->shift ? [
'start_time' => $user->employee->shift->start_time,
'end_time' => $user->employee->shift->end_time,
] : null,
'records' => $grid
];
});
@@ -1023,7 +1032,9 @@ class AttendanceRecordController extends Controller
]);
}
if ($balance->remaining_days < 1) {
$leaveTypeObj = \App\Models\LeaveType::find($leaveTypeId);
if ($balance->remaining_days < 1 && $leaveTypeObj && $leaveTypeObj->is_paid) {
return ['success' => false, 'message' => __('Insufficient leave balance. Remaining: ' . $balance->remaining_days)];
}