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 { $user = request()->user(); return Inertia::render('admin/manage/cuttings/Create', [ 'rawMaterialCatalog' => $this->cuttingService->rawMaterialCatalog(user: $user), 'productCatalog' => $this->cuttingService->productCatalog(user: $user), 'draftMaterials' => $this->cuttingService->draftMaterialsForUser($user), 'draftResults' => $this->cuttingService->draftResultsForUser($user), ]); } public function store(CuttingRequest $request): RedirectResponse { $this->cuttingService->create($request->validated(), $request->user()); $this->flashCreated('Proses cutting'); return redirect()->route('admin.manage.cuttings.index'); } public function edit(Cutting $cutting): Response|RedirectResponse { if (! $cutting->status->isEditable()) { $this->flashError('Proses cutting 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 cutting'); return redirect()->route('admin.manage.cuttings.index'); } public function destroy(Cutting $cutting): RedirectResponse { $this->cuttingService->delete($cutting); $this->flashDeleted('Proses cutting'); 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'), $request->validated('result_prices'), ); $message = match ($status) { CuttingStatus::COMPLETED => 'Proses cutting berhasil diselesaikan. Menunggu verifikasi admin toko.', CuttingStatus::VERIFIED => 'Proses cutting berhasil diverifikasi. Stok produk telah diperbarui.', CuttingStatus::REJECTED => 'Proses cutting berhasil ditolak.', CuttingStatus::IN_PROGRESS => 'Proses cutting dikembalikan ke proses.', default => 'Status proses cutting berhasil diperbarui.', }; $this->flashSuccess($message); return redirect()->route('admin.manage.cuttings.index'); } }