parseDataTableQuery($request); $user = $request->user(); $hasPending = false; if ($user?->employee !== null) { $hasPending = LeaveRequest::query() ->where('employee_id', $user->employee->id) ->where('status', LeaveRequestStatus::PENDING) ->exists(); } return Inertia::render('admin/hr/leave-requests/Index', [ 'leaveRequests' => $this->leaveRequestService->paginateForIndex($tableQuery, $user), 'authEmployeeId' => $user?->employee?->id, 'canSubmit' => $user?->can(Permission::LEAVE_REQUESTS_CREATE->value) && ! $user->can(Permission::LEAVE_REQUESTS_VERIFY->value) && $user->employee !== null, 'hasPending' => $hasPending, 'filters' => $this->dataTableFilters($tableQuery), ]); } public function store(SubmitLeaveRequest $request): RedirectResponse { $this->leaveRequestService->create($request->validated(), $request->user()); $this->flashSuccess('Pengajuan cuti berhasil diajukan.'); return redirect()->route('admin.hr.leave-requests.index'); } public function update(SubmitLeaveRequest $request, LeaveRequest $leaveRequest): RedirectResponse { $this->leaveRequestService->update($leaveRequest, $request->validated(), $request->user()); $this->flashUpdated('Pengajuan cuti'); return redirect()->route('admin.hr.leave-requests.index'); } public function destroy(LeaveRequest $leaveRequest): RedirectResponse { $this->leaveRequestService->delete($leaveRequest, auth()->user()); $this->flashDeleted('Pengajuan cuti'); return redirect()->route('admin.hr.leave-requests.index'); } public function approve(LeaveRequest $leaveRequest): RedirectResponse { $this->leaveRequestService->approve($leaveRequest, auth()->user()); $this->flashSuccess('Pengajuan cuti berhasil disetujui.'); return redirect()->route('admin.hr.leave-requests.index'); } public function reject(RejectLeaveRequestRequest $request, LeaveRequest $leaveRequest): RedirectResponse { $this->leaveRequestService->reject( $leaveRequest, $request->validated('reason'), auth()->user(), ); $this->flashSuccess('Pengajuan cuti berhasil ditolak.'); return redirect()->route('admin.hr.leave-requests.index'); } }