Ship Quantity Added And Then Deducted

This commit is contained in:
Devansh 2022-04-18 18:14:29 +05:30
parent 9882ff9d92
commit 56504d9fb9
1 changed files with 58 additions and 31 deletions

View File

@ -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]);
}
}
}
}
}
/**
* 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]);
}
}