73 lines
2.2 KiB
PHP
73 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin\Manage;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Admin\Manage\Purchase\AddToCartRequest;
|
|
use App\Models\PurchaseItem;
|
|
use Illuminate\Http\RedirectResponse;
|
|
|
|
class PurchaseCartController extends Controller
|
|
{
|
|
public function addToCart(AddToCartRequest $request): RedirectResponse
|
|
{
|
|
$validated = $request->validated();
|
|
|
|
$item = PurchaseItem::where('user_id', auth()->id())
|
|
->whereNull('purchase_id')
|
|
->where('product_id', $validated['product_id'])
|
|
->first();
|
|
|
|
if ($item) {
|
|
$newQuantity = $item->quantity + $validated['quantity'];
|
|
|
|
if ($newQuantity <= 0) {
|
|
$item->delete();
|
|
} else {
|
|
$item->update([
|
|
'quantity' => $newQuantity,
|
|
'total_price' => $newQuantity * $item->unit_price,
|
|
]);
|
|
}
|
|
} else {
|
|
if ($validated['quantity'] > 0) {
|
|
PurchaseItem::create([
|
|
'user_id' => auth()->id(),
|
|
'purchase_id' => null,
|
|
'product_id' => $validated['product_id'],
|
|
'quantity' => $validated['quantity'],
|
|
'unit_price' => $validated['unit_price'],
|
|
'total_price' => $validated['quantity'] * $validated['unit_price'],
|
|
]);
|
|
}
|
|
}
|
|
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function removeFromCart(PurchaseItem $purchaseItem): RedirectResponse
|
|
{
|
|
if ($purchaseItem->user_id === auth()->id() && $purchaseItem->purchase_id === null) {
|
|
$purchaseItem->delete();
|
|
}
|
|
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function updateCartItem(AddToCartRequest $request, PurchaseItem $purchaseItem): RedirectResponse
|
|
{
|
|
if ($purchaseItem->user_id !== auth()->id() || $purchaseItem->purchase_id !== null) {
|
|
return redirect()->back();
|
|
}
|
|
|
|
$validated = $request->validated();
|
|
|
|
$purchaseItem->update([
|
|
'quantity' => $validated['quantity'],
|
|
'total_price' => $validated['quantity'] * $purchaseItem->unit_price,
|
|
]);
|
|
|
|
return redirect()->back();
|
|
}
|
|
}
|