layer-chicken/app/Filament/Resources/Manage/FeedPurchases/Traits/HasCart.php

75 lines
2.0 KiB
PHP

<?php
namespace App\Filament\Resources\Manage\FeedPurchases\Traits;
use App\Models\Feed;
use App\Models\FeedPurchaseItem;
trait HasCart
{
public array $cart = [];
public function loadCartFromDb(): void
{
$this->cart = FeedPurchaseItem::whereNull('feed_purchase_id')
->get()
->pluck('quantity', 'feed_id')
->map(fn ($qty) => ['qty' => (int) $qty])
->toArray();
}
public function addFeed(int $feedId): void
{
$feed = Feed::find($feedId);
if (! $feed) {
return;
}
$item = FeedPurchaseItem::whereNull('feed_purchase_id')
->where('feed_id', $feedId)
->first();
if ($item) {
$item->increment('quantity', 1);
$item->update(['subtotal' => $item->quantity * $item->unit_price]);
} else {
FeedPurchaseItem::create([
'feed_purchase_id' => null,
'feed_id' => $feedId,
'quantity' => 1,
'unit_price' => $feed->price,
'subtotal' => $feed->price,
]);
}
$this->loadCartFromDb();
$this->dispatch('cart-updated');
}
public function decreaseQty(int $feedId): void
{
$item = FeedPurchaseItem::whereNull('feed_purchase_id')
->where('feed_id', $feedId)
->first();
if ($item) {
if ($item->quantity > 1) {
$item->decrement('quantity', 1);
$item->update(['subtotal' => $item->quantity * $item->unit_price]);
} else {
$item->delete();
}
$this->loadCartFromDb();
$this->dispatch('cart-updated');
}
}
public function removeCartItem(int $itemId): void
{
FeedPurchaseItem::where('id', $itemId)->whereNull('feed_purchase_id')->delete();
$this->loadCartFromDb();
$this->dispatch('cart-updated');
}
}