parseDataTableQuery($request); return Inertia::render('admin/manage/cuttings/Index', [ 'cuttings' => $this->cuttingService->paginateForIndex($tableQuery, $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()); Inertia::flash('success', 'Cutting berhasil ditambahkan.'); return redirect()->route('admin.manage.cuttings.index'); } public function edit(Cutting $cutting): Response|RedirectResponse { if (! $cutting->status->isEditable()) { Inertia::flash('error', '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()); Inertia::flash('success', 'Cutting berhasil diperbarui.'); return redirect()->route('admin.manage.cuttings.index'); } public function destroy(Cutting $cutting): RedirectResponse { $this->cuttingService->delete($cutting); Inertia::flash('success', 'Cutting berhasil dihapus.'); 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->validated('reason'), ); $message = match ($status) { CuttingStatus::COMPLETED => 'Cutting berhasil diselesaikan. Menunggu verifikasi admin toko.', CuttingStatus::VERIFIED => 'Cutting berhasil diverifikasi. Stok produk telah diperbarui.', CuttingStatus::REJECTED => 'Cutting ditolak.', CuttingStatus::IN_PROGRESS => 'Cutting dikembalikan ke proses.', default => 'Status cutting berhasil diperbarui.', }; Inertia::flash('success', $message); return redirect()->route('admin.manage.cuttings.index'); } }