parseDataTableQuery($request); return Inertia::render('admin/manage/cuttings/Index', [ 'cuttings' => $this->cuttingService->paginateForIndex($tableQuery, $request->user()), 'inProgressCuttings' => $this->cuttingService->getInProgressCuttings($request->user()), 'filters' => $this->dataTableFilters($tableQuery), ]); } public function create(): Response { return Inertia::render('admin/manage/cuttings/Create', [ 'rawMaterialCatalog' => $this->cuttingService->rawMaterialCatalog(), 'productCatalog' => $this->cuttingService->productCatalog(), ]); } public function store(CuttingRequest $request): RedirectResponse { $this->cuttingService->create($request->validated(), $request->user()); $this->flashCreated('Proses potong'); return redirect()->route('admin.manage.cuttings.index'); } public function edit(Cutting $cutting): Response|RedirectResponse { if (! $cutting->status->isEditable()) { $this->flashError('Proses potong tidak dapat diubah.'); return redirect()->route('admin.manage.cuttings.index'); } return Inertia::render('admin/manage/cuttings/Edit', [ 'cutting' => $this->cuttingService->findForEdit($cutting), 'rawMaterialCatalog' => $this->cuttingService->rawMaterialCatalog($cutting), 'productCatalog' => $this->cuttingService->productCatalog($cutting), ]); } public function update(CuttingRequest $request, Cutting $cutting): RedirectResponse { $this->cuttingService->update($cutting, $request->validated()); $this->flashUpdated('Proses potong'); return redirect()->route('admin.manage.cuttings.index'); } public function destroy(Cutting $cutting): RedirectResponse { $this->cuttingService->delete($cutting); $this->flashDeleted('Proses potong'); return redirect()->route('admin.manage.cuttings.index'); } public function transitionStatus(CuttingStatusTransitionRequest $request, Cutting $cutting): RedirectResponse { $status = CuttingStatus::from($request->validated('status')); $this->cuttingService->transitionStatus( $cutting, $status, $request->user(), $request->validated('reason'), $request->validated('verification_note'), $request->validated('results'), ); $message = match ($status) { CuttingStatus::COMPLETED => 'Proses potong berhasil diselesaikan. Menunggu verifikasi admin toko.', CuttingStatus::VERIFIED => 'Proses potong berhasil diverifikasi. Stok produk telah diperbarui.', CuttingStatus::REJECTED => 'Proses potong berhasil ditolak.', CuttingStatus::IN_PROGRESS => 'Proses potong dikembalikan ke proses.', default => 'Status proses potong berhasil diperbarui.', }; $this->flashSuccess($message); return redirect()->route('admin.manage.cuttings.index'); } }