76 lines
2.6 KiB
PHP
76 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Traits\Forms;
|
|
|
|
use App\Models\Outlet;
|
|
use App\Services\StockActivityLogService;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
trait WithFormStockAdjustment
|
|
{
|
|
public array $stock_adjustments = [];
|
|
|
|
protected function loadStockAdjustments(Model $item): void
|
|
{
|
|
$this->stock_adjustments = [
|
|
'outlet' => [],
|
|
];
|
|
|
|
$user = auth()->user();
|
|
$userOutletIds = $user->outlets->pluck('id')->toArray();
|
|
|
|
$itemOutlets = $item->outlets()
|
|
->whereIn('outlets.id', $userOutletIds)
|
|
->withPivot('stock')
|
|
->get();
|
|
|
|
foreach ($itemOutlets as $outlet) {
|
|
$stock = $outlet->pivot->stock ?? 0;
|
|
$this->stock_adjustments['outlet'][$outlet->id] = [
|
|
'name' => $outlet->name,
|
|
'stock' => $stock,
|
|
'new_stock' => (string) $stock,
|
|
'note' => '',
|
|
];
|
|
}
|
|
}
|
|
|
|
protected function saveStockAdjustments(Model $item, string $itemType): void
|
|
{
|
|
$itemName = $item->name.($itemType === 'bottle' ? " ({$item->size}ml)" : '');
|
|
|
|
if (isset($this->stock_adjustments['outlet'])) {
|
|
foreach ($this->stock_adjustments['outlet'] as $id => $adj) {
|
|
$newStock = (int) str_replace(['.', ','], '', (string) ($adj['new_stock'] ?: '0'));
|
|
$oldStock = (int) $adj['stock'];
|
|
|
|
if ($newStock === $oldStock) {
|
|
continue;
|
|
}
|
|
|
|
$outlet = Outlet::find($id);
|
|
if ($outlet) {
|
|
$item->outlets()->syncWithoutDetaching([$id => ['stock' => $newStock]]);
|
|
|
|
StockActivityLogService::logOutlet(
|
|
logName: 'adjustment',
|
|
event: 'update',
|
|
description: "Penyesuaian manual untuk {$itemName}: berubah dari ".formatCurrencyNumber($oldStock).' menjadi '.formatCurrencyNumber($newStock).'. Catatan: '.($adj['note'] ?: '-'),
|
|
performedOn: $item,
|
|
outlet: $outlet,
|
|
quantityChange: $newStock - $oldStock,
|
|
previousStock: $oldStock,
|
|
newStock: $newStock,
|
|
extraProperties: [
|
|
'note' => $adj['note'],
|
|
'adjustment_type' => 'manual',
|
|
'item_type' => $itemType,
|
|
'item_id' => $item->id,
|
|
]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|