124 lines
4.0 KiB
PHP
124 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin\Manage;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Admin\Manage\Purchase\PurchaseRequest;
|
|
use App\Models\Product;
|
|
use App\Models\Purchase;
|
|
use App\Models\PurchaseItem;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Inertia\Inertia;
|
|
use Inertia\Response;
|
|
|
|
class PurchaseController extends Controller
|
|
{
|
|
public function index(): Response
|
|
{
|
|
return Inertia::render('admin/manage/purchase/index', [
|
|
'purchases' => 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'],
|
|
]);
|
|
}
|
|
|
|
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,
|
|
]);
|
|
|
|
$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'],
|
|
]);
|
|
}
|
|
});
|
|
|
|
return redirect()->route('purchase.index')->with('success', 'Data berhasil diperbarui');
|
|
}
|
|
|
|
public function destroy(Purchase $purchase): RedirectResponse
|
|
{
|
|
$purchase->delete();
|
|
|
|
return redirect()->back()->with('success', 'Data berhasil dihapus');
|
|
}
|
|
|
|
public function bulkDestroy(Request $request): RedirectResponse
|
|
{
|
|
$ids = $request->input('ids');
|
|
|
|
Purchase::whereIn('id', $ids)->delete();
|
|
|
|
return redirect()->back()->with('success', 'Data terpilih berhasil dihapus');
|
|
}
|
|
}
|