parseDataTableQuery($request); $user = $request->user(); return Inertia::render('admin/finance/employee-advances/Index', [ 'employeeAdvances' => $this->employeeAdvanceService->paginateForIndex($tableQuery, $user), 'summary' => $this->employeeAdvanceService->outstandingSummary($user), 'authEmployeeId' => $user?->employee?->id, 'canSubmit' => $user?->can(Permission::EMPLOYEE_ADVANCES_CREATE->value) && ! $user->can(Permission::EMPLOYEE_ADVANCES_VERIFY->value) && $user->employee !== null, 'filters' => $this->dataTableFilters($tableQuery), ]); } public function store(EmployeeAdvanceRequest $request): RedirectResponse { $this->employeeAdvanceService->create($request->validated(), $request->user()); $this->flashSuccess('Kasbon berhasil diajukan.'); return redirect()->route('admin.finance.employee-advances.index'); } public function update(EmployeeAdvanceRequest $request, EmployeeAdvance $employeeAdvance): RedirectResponse { $this->employeeAdvanceService->update($employeeAdvance, $request->validated(), $request->user()); $this->flashUpdated('Kasbon'); return redirect()->route('admin.finance.employee-advances.index'); } public function destroy(EmployeeAdvance $employeeAdvance): RedirectResponse { abort_unless(! auth()->user()?->can(Permission::EMPLOYEE_ADVANCES_VERIFY->value), 403); $this->employeeAdvanceService->delete($employeeAdvance, auth()->user()); $this->flashDeleted('Kasbon'); return redirect()->route('admin.finance.employee-advances.index'); } public function approve(EmployeeAdvance $employeeAdvance): RedirectResponse { $user = auth()->user(); if ($user && ! $user->hasAnyRole(['owner', 'developer', 'direktur'])) { abort(403); } $this->employeeAdvanceService->approve($employeeAdvance, $user); $this->flashSuccess('Kasbon berhasil disetujui dan dicairkan dari kas.'); return redirect()->route('admin.finance.employee-advances.index'); } public function reject(RejectEmployeeAdvanceRequest $request, EmployeeAdvance $employeeAdvance): RedirectResponse { $user = auth()->user(); if ($user && ! $user->hasAnyRole(['owner', 'developer', 'direktur'])) { abort(403); } $this->employeeAdvanceService->reject( $employeeAdvance, $request->validated('reason'), $user, ); $this->flashSuccess('Kasbon berhasil ditolak.'); return redirect()->route('admin.finance.employee-advances.index'); } public function pay(EmployeeAdvance $employeeAdvance): RedirectResponse { $user = auth()->user(); $this->employeeAdvanceService->pay($employeeAdvance, $user); $this->flashSuccess('Kasbon berhasil dilunasi.'); return redirect()->route('admin.finance.employee-advances.index'); } }