fix: employee self-service - open controller access and clock-in/out

- LeaveApplicationController: add employee branch to bypass can() check
- AttendanceRecordController: add employee calendar view (own records only)
  + open clockIn/clockOut to employee type (no permission required)
- PayslipController: add employee branch to show own payslips only
- routes/web.php: remove permission:clock-in-out middleware from clock routes
- employee-dashboard.tsx: always show clock in/out buttons for employees
- Rebuild frontend assets
This commit is contained in:
2026-06-30 13:51:02 +08:00
parent c11ee26183
commit 75ee8cacb8
417 changed files with 14497 additions and 14275 deletions

View File

@@ -16,6 +16,41 @@ class LeaveApplicationController extends Controller
{
public function index(Request $request)
{
$user = Auth::user();
// Employee self-service: always allow employees to see their own leaves
if ($user->type === 'employee') {
$query = LeaveApplication::with(['employee', 'leaveType', 'leavePolicy', 'approver', 'creator'])
->where(function ($q) use ($user) {
$q->where('employee_id', $user->id)
->orWhere('created_by', $user->id);
});
if ($request->has('search') && !empty($request->search)) {
$query->where(function ($q) use ($request) {
$q->where('reason', 'like', '%'.$request->search.'%')
->orWhereHas('leaveType', fn($s) => $s->where('name', 'like', '%'.$request->search.'%'));
});
}
if ($request->has('status') && !empty($request->status) && $request->status !== 'all') {
$query->where('status', $request->status);
}
$query->orderBy('id', 'desc');
$leaveApplications = $query->paginate($request->per_page ?? 10);
$leaveTypes = LeaveType::whereIn('created_by', getCompanyAndUsersId())
->where('status', 'active')
->get(['id', 'name', 'color']);
return Inertia::render('hr/leave-applications/index', [
'leaveApplications' => $leaveApplications,
'employees' => [],
'leaveTypes' => $leaveTypes,
'filters' => $request->all(['search', 'status', 'sort_field', 'sort_direction', 'per_page']),
]);
}
if (Auth::user()->can('manage-leave-applications')) {
$query = LeaveApplication::with(['employee', 'leaveType', 'leavePolicy', 'approver', 'creator'])
->where(function ($q) {