services StockService#UndoBooking: fix based on stockRow

This commit is contained in:
Kurt Riddlesperger 2019-10-14 22:36:23 -05:00
parent 47c5d440ed
commit 96e6176ffc

View File

@ -681,6 +681,8 @@ class StockService extends BaseService
public function UndoBooking($bookingId) public function UndoBooking($bookingId)
{ {
$logRow = $this->Database->stock_log()->where('id = :1 AND undone = 0', $bookingId)->fetch(); $logRow = $this->Database->stock_log()->where('id = :1 AND undone = 0', $bookingId)->fetch();
$stockRow = $this->Database->stock()->where('stock_id = :1 ', $logRow->stock_id)->fetch();
if ($logRow == null) if ($logRow == null)
{ {
throw new \Exception('Booking does not exist or was already undone'); throw new \Exception('Booking does not exist or was already undone');
@ -694,9 +696,14 @@ class StockService extends BaseService
if ($logRow->transaction_type === self::TRANSACTION_TYPE_PURCHASE || ($logRow->transaction_type === self::TRANSACTION_TYPE_INVENTORY_CORRECTION && $logRow->amount > 0)) if ($logRow->transaction_type === self::TRANSACTION_TYPE_PURCHASE || ($logRow->transaction_type === self::TRANSACTION_TYPE_INVENTORY_CORRECTION && $logRow->amount > 0))
{ {
// Remove corresponding stock entry if ($logRow->amount == $stockRow->amount)
$stockRows = $this->Database->stock()->where('stock_id', $logRow->stock_id); {
$stockRows->delete(); $stockRow->delete();
} else {
$stockRow->update(array(
'amount' => $stockRow->amount - $logRow->amount
));
}
// Update log entry // Update log entry
$logRow->update(array( $logRow->update(array(
@ -707,6 +714,7 @@ class StockService extends BaseService
elseif ($logRow->transaction_type === self::TRANSACTION_TYPE_CONSUME || ($logRow->transaction_type === self::TRANSACTION_TYPE_INVENTORY_CORRECTION && $logRow->amount < 0)) elseif ($logRow->transaction_type === self::TRANSACTION_TYPE_CONSUME || ($logRow->transaction_type === self::TRANSACTION_TYPE_INVENTORY_CORRECTION && $logRow->amount < 0))
{ {
// Add corresponding amount back to stock // Add corresponding amount back to stock
if ($stockRow == null) {
$stockRow = $this->Database->stock()->createRow(array( $stockRow = $this->Database->stock()->createRow(array(
'product_id' => $logRow->product_id, 'product_id' => $logRow->product_id,
'amount' => $logRow->amount * -1, 'amount' => $logRow->amount * -1,
@ -714,9 +722,15 @@ class StockService extends BaseService
'purchased_date' => $logRow->purchased_date, 'purchased_date' => $logRow->purchased_date,
'stock_id' => $logRow->stock_id, 'stock_id' => $logRow->stock_id,
'price' => $logRow->price, 'price' => $logRow->price,
'opened_date' => $logRow->opened_date 'opened_date' => $logRow->opened_date,
'location_id' => $logRow->location_id
)); ));
$stockRow->save(); $stockRow->save();
} else {
$stockRow->update(array(
'amount' => $stockRow->amount + $logRow->amount
));
}
// Update log entry // Update log entry
$logRow->update(array( $logRow->update(array(