Purchase::with(['items.product'])->latest()->get(), ]); } public function create(): Response { return Inertia::render('admin/manage/purchase/create', [ 'products' => Product::with(['prices', 'categories'])->active()->get(), 'cartItems' => PurchaseItem::with(['product.prices', 'product.categories']) ->where('user_id', auth()->id()) ->where('purchase_id', null) ->latest() ->get(), ]); } public function store(PurchaseRequest $request): RedirectResponse { $validated = $request->validated(); DB::transaction(function () use ($validated) { $total = collect($validated['items'])->sum(fn ($item) => $item['quantity'] * $item['unit_price']); $purchase = Purchase::create([ 'purchase_date' => $validated['purchase_date'], 'note' => $validated['note'], 'total' => $total, ]); foreach ($validated['items'] as $item) { PurchaseItem::create([ 'user_id' => auth()->id(), 'purchase_id' => $purchase->id, 'product_id' => $item['product_id'], 'quantity' => $item['quantity'], 'unit_price' => $item['unit_price'], 'total_price' => $item['quantity'] * $item['unit_price'], ]); Product::find($item['product_id'])->increment('stock', $item['quantity']); } PurchaseItem::where('user_id', auth()->id()) ->where('purchase_id', null) ->delete(); }); return redirect()->route('purchase.index')->with('success', 'Data berhasil disimpan'); } public function edit(Purchase $purchase): Response { $purchase->load(['items.product']); return Inertia::render('admin/manage/purchase/edit', [ 'purchase' => $purchase, 'products' => Product::with(['prices', 'categories'])->active()->get(), ]); } public function update(PurchaseRequest $request, Purchase $purchase): RedirectResponse { $validated = $request->validated(); DB::transaction(function () use ($validated, $purchase) { $total = collect($validated['items'])->sum(fn ($item) => $item['quantity'] * $item['unit_price']); $purchase->update([ 'purchase_date' => $validated['purchase_date'], 'note' => $validated['note'], 'total' => $total, ]); foreach ($purchase->items as $item) { $item->product->decrement('stock', $item->quantity); } $purchase->items()->delete(); foreach ($validated['items'] as $item) { $purchase->items()->create([ 'user_id' => auth()->id(), 'product_id' => $item['product_id'], 'quantity' => $item['quantity'], 'unit_price' => $item['unit_price'], 'total_price' => $item['quantity'] * $item['unit_price'], ]); Product::find($item['product_id'])->increment('stock', $item['quantity']); } }); return redirect()->route('purchase.index')->with('success', 'Data berhasil diperbarui'); } public function destroy(Purchase $purchase): RedirectResponse { DB::transaction(function () use ($purchase) { foreach ($purchase->items as $item) { $item->product->decrement('stock', $item->quantity); } $purchase->delete(); }); return redirect()->back()->with('success', 'Data berhasil dihapus'); } public function bulkDestroy(Request $request): RedirectResponse { $ids = $request->input('ids'); DB::transaction(function () use ($ids) { $purchases = Purchase::with('items')->whereIn('id', $ids)->get(); foreach ($purchases as $purchase) { foreach ($purchase->items as $item) { $item->product->decrement('stock', $item->quantity); } $purchase->delete(); } }); return redirect()->back()->with('success', 'Data terpilih berhasil dihapus'); } }