103 lines
3.3 KiB
PHP
103 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Traits\Purchase;
|
|
|
|
use App\Models\Bottle;
|
|
use App\Models\Perfume;
|
|
use App\Models\Product;
|
|
|
|
trait WithUpdateStock
|
|
{
|
|
public function increaseOutletStock($outlet, $item): void
|
|
{
|
|
$quantity = $item->quantity;
|
|
|
|
switch ($item->purchasable_type) {
|
|
case Perfume::class:
|
|
$relation = 'perfumes';
|
|
break;
|
|
case Product::class:
|
|
$relation = 'products';
|
|
break;
|
|
case Bottle::class:
|
|
$relation = 'bottles';
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
$existing = $outlet->{$relation}()->withPivot('stock')->where("{$relation}.id", $item->purchasable_id)->first();
|
|
|
|
if ($existing) {
|
|
$previousStock = $existing->pivot->stock ?? 0;
|
|
$outlet->{$relation}()->updateExistingPivot($item->purchasable_id, [
|
|
'stock' => $previousStock + $quantity,
|
|
]);
|
|
} else {
|
|
$previousStock = 0;
|
|
$outlet->{$relation}()->attach($item->purchasable_id, [
|
|
'stock' => $quantity,
|
|
]);
|
|
}
|
|
|
|
activity('Belanja')
|
|
->performedOn($item->purchasable)
|
|
->causedBy(auth()->user())
|
|
->withProperties([
|
|
'purchasable_id' => $item->purchasable_id,
|
|
'purchasable_type' => $item->purchasable_type,
|
|
'outlet_id' => $outlet->id,
|
|
'quantity_change' => $quantity,
|
|
'previous_stock' => $previousStock,
|
|
'new_stock' => $previousStock + $quantity,
|
|
'purchase_id' => $item->purchase_id ?? null,
|
|
])
|
|
->event('Menambah')
|
|
->log('Stok '.$item->purchasable->name.' di '.$outlet->name.' bertambah '.formatCurrencyNumber($quantity));
|
|
}
|
|
|
|
public function decreaseOutletStock($outlet, $item): void
|
|
{
|
|
$quantity = $item->quantity;
|
|
|
|
switch ($item->purchasable_type) {
|
|
case Perfume::class:
|
|
$relation = 'perfumes';
|
|
break;
|
|
case Product::class:
|
|
$relation = 'products';
|
|
break;
|
|
case Bottle::class:
|
|
$relation = 'bottles';
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
$existing = $outlet->{$relation}()->withPivot('stock')->where("{$relation}.id", $item->purchasable_id)->first();
|
|
|
|
if ($existing) {
|
|
$currentStock = $existing->pivot->stock ?? 0;
|
|
$newStock = max(0, $currentStock - $quantity);
|
|
$outlet->{$relation}()->updateExistingPivot($item->purchasable_id, [
|
|
'stock' => $newStock,
|
|
]);
|
|
}
|
|
|
|
activity('Belanja')
|
|
->performedOn($item->purchasable)
|
|
->causedBy(auth()->user())
|
|
->withProperties([
|
|
'purchasable_id' => $item->purchasable_id,
|
|
'purchasable_type' => $item->purchasable_type,
|
|
'outlet_id' => $outlet->id,
|
|
'quantity_change' => $quantity,
|
|
'previous_stock' => $currentStock,
|
|
'new_stock' => $newStock,
|
|
'purchase_id' => $item->purchase_id,
|
|
])
|
|
->event('Mengurangi')
|
|
->log('Stok '.$item->purchasable->name.' di '.$outlet->name.' berkurang '.$quantity);
|
|
}
|
|
}
|