fix: Adjust stock opname logic to apply the difference between physical and system quantities to the current stock.
This commit is contained in:
parent
6af61d9dd3
commit
9d8e264929
@ -74,20 +74,26 @@ public function approveApproval(StockOpname $stockOpname): void
|
|||||||
->where($itemable->getTable().'.id', $itemable->id)
|
->where($itemable->getTable().'.id', $itemable->id)
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
// Current stock is the stock of the item in the outlet at the time the stock opname was created
|
||||||
$currentStock = $currentPivot?->pivot?->stock ?? 0;
|
$currentStock = $currentPivot?->pivot?->stock ?? 0;
|
||||||
|
|
||||||
$quantity = $item->qty_physical;
|
// Calculate the difference between the physical stock and the system stock AT THE TIME the stock opname was created
|
||||||
|
// then apply the difference to the current stock
|
||||||
|
// Example: qty_system=100, qty_physical=90, transaction 20 occurred
|
||||||
|
// currentStock=80, difference=-10, newStock=80+(-10)=70 ✓
|
||||||
|
$difference = $item->qty_physical - $item->qty_system;
|
||||||
|
$newStock = max(0, $currentStock + $difference);
|
||||||
|
|
||||||
$outlet->$relationName()->syncWithoutDetaching([
|
$outlet->$relationName()->syncWithoutDetaching([
|
||||||
$itemable->id => ['stock' => $quantity],
|
$itemable->id => ['stock' => $newStock],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
StockActivityLogService::stockOpname(
|
StockActivityLogService::stockOpname(
|
||||||
stockOpname: $stockOpname,
|
stockOpname: $stockOpname,
|
||||||
product: $itemable,
|
product: $itemable,
|
||||||
quantityChange: $quantity - $currentStock,
|
quantityChange: $newStock - $currentStock,
|
||||||
previousStock: $currentStock,
|
previousStock: $currentStock,
|
||||||
newStock: $quantity,
|
newStock: $newStock,
|
||||||
note: $stockOpname->note
|
note: $stockOpname->note
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user