diff --git a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php index cd3803e8b..bc2574558 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php @@ -2,8 +2,6 @@ namespace Webkul\Sales\Repositories; -use Illuminate\Container\Container as App; -use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Log; use Webkul\Core\Eloquent\Repository; use Webkul\Sales\Contracts\OrderItem; @@ -11,16 +9,18 @@ use Webkul\Sales\Contracts\OrderItem; class OrderItemRepository extends Repository { /** - * Specify Model class name + * Specify model class name. * * @return string */ - function model() + public function model() { return OrderItem::class; } /** + * Create. + * * @param array $data * @return \Webkul\Sales\Contracts\OrderItem */ @@ -37,6 +37,8 @@ class OrderItemRepository extends Repository } /** + * Collect totals. + * * @param \Webkul\Sales\Contracts\OrderItem $orderItem * @return \Webkul\Sales\Contracts\OrderItem */ @@ -96,6 +98,8 @@ class OrderItemRepository extends Repository } /** + * Manage inventory. + * * @param \Webkul\Sales\Contracts\OrderItem $orderItem * @return void */ @@ -125,14 +129,14 @@ class OrderItemRepository extends Repository if (isset($item->qty_ordered)) { $qty = $item->qty_ordered; } else { - Log::info('OrderItem has no qty_ordered', ['orderItem' => $item, 'product' => $item->product]); + Log::info('OrderItem has no `qty_ordered`.', ['orderItem' => $item, 'product' => $item->product]); if (isset($item->parent->qty_ordered)) { $qty = $item->parent->qty_ordered; } else { - Log::info('OrderItem has no parent with qty_ordered', [ + Log::info('OrderItem has no parent with `qty_ordered`', [ 'orderItem' => $item, - 'parent' => $item->parent, - 'product' => $item->product + 'parent' => $item->parent, + 'product' => $item->product, ]); $qty = 1; } @@ -154,26 +158,14 @@ class OrderItemRepository extends Repository } /** - * Returns qty to product inventory after order cancelation + * Returns qty to product inventory after order cancellation. * * @param \Webkul\Sales\Contracts\OrderItem $orderItem * @return void */ public function returnQtyToProductInventory($orderItem) { - $orderedInventory = $orderItem->product->ordered_inventories() - ->where('channel_id', $orderItem->order->channel->id) - ->first(); - - if (! $orderedInventory) { - return; - } - - if (($qty = $orderedInventory->qty - ($orderItem->qty_ordered ? $orderItem->qty_to_cancel : $orderItem->parent->qty_ordered)) < 0) { - $qty = 0; - } - - $orderedInventory->update(['qty' => $qty]); + $this->updateProductOrderedInventories($orderItem); if ($orderItem->getTypeInstance()->isStockable()) { $shipmentItems = $orderItem->parent ? $orderItem->parent->shipment_items : $orderItem->shipment_items; @@ -182,20 +174,55 @@ class OrderItemRepository extends Repository foreach ($shipmentItems as $shipmentItem) { if ($orderItem->parent) { $shippedQty = $orderItem->qty_ordered - ? ($orderItem->qty_ordered / $orderItem->parent->qty_ordered) * $shipmentItem->qty - : $orderItem->parent->qty_ordered; + ? ($orderItem->qty_ordered / $orderItem->parent->qty_ordered) * $shipmentItem->qty + : $orderItem->parent->qty_ordered; } else { $shippedQty = $shipmentItem->qty; } - + $inventory = $orderItem->product->inventories() - // ->where('vendor_id', $data['vendor_id']) - ->where('inventory_source_id', $shipmentItem->shipment->inventory_source_id) - ->first(); - - $inventory->update(['qty' => $inventory->qty + $shippedQty]); + ->where('inventory_source_id', $shipmentItem->shipment->inventory_source_id) + ->first(); + + $inventory->update(['qty' => $inventory->qty + $shippedQty]); } } } } -} \ No newline at end of file + + /** + * Update product ordered quantity. + * + * @param \Webkul\Sales\Contracts\OrderItem $orderItem + * @return void + */ + public function updateProductOrderedInventories($orderItem) + { + $orderedInventory = $orderItem->product->ordered_inventories() + ->where('channel_id', $orderItem->order->channel->id) + ->first(); + + if (! $orderedInventory) { + return; + } + + $qty = ( + $orderedInventory->qty + + ( + isset($orderItem->qty_shipped) + ? $orderItem->qty_shipped + : $orderItem->parent->qty_shipped + ) + ) - ( + isset($orderItem->qty_ordered) + ? $orderItem->qty_ordered + : $orderItem->parent->qty_ordered + ); + + if ($qty < 0) { + $qty = 0; + } + + $orderedInventory->update(['qty' => $qty]); + } +}