6 declare(strict_types=1);
15 use Magento\InventorySourceDeductionApi\Model\ItemToDeductInterfaceFactory;
24 private $getSkuFromOrderItem;
29 private $jsonSerializer;
34 private $itemToDeduct;
44 ItemToDeductInterfaceFactory $itemToDeduct
46 $this->jsonSerializer = $jsonSerializer;
47 $this->itemToDeduct = $itemToDeduct;
48 $this->getSkuFromOrderItem = $getSkuFromOrderItem;
71 $itemsToShip[] =
$item;
75 $itemSku = $this->getSkuFromOrderItem->execute(
$orderItem);
77 $itemsToShip[] = $this->itemToDeduct->create([
84 return $this->groupItemsBySku($itemsToShip);
91 private function groupItemsBySku(array $shipmentItems): array
93 $processingItems = $groupedItems = [];
102 foreach ($processingItems as $sku => $qty) {
103 $groupedItems[] = $this->itemToDeduct->create([
109 return $groupedItems;
116 private function processComplexItem(Item
$shipmentItem): array
121 if (
$item->getIsVirtual() ||
$item->getLockedDoShip()) {
126 $bundleSelectionAttributes = $this->jsonSerializer->unserialize(
129 if ($bundleSelectionAttributes) {
130 $qty = $bundleSelectionAttributes[
'qty'] *
$shipmentItem->getQty();
131 $qty = $this->castQty(
$item, $qty);
132 $itemSku = $this->getSkuFromOrderItem->execute(
$item);
133 $itemsToShip[] = $this->itemToDeduct->create([
141 $itemSku = $this->getSkuFromOrderItem->execute(
$orderItem);
143 $itemsToShip[] = $this->itemToDeduct->create([
158 private function castQty(OrderItem
$item, $qty)
160 if (
$item->getIsQtyDecimal()) {
166 return $qty > 0 ? $qty : 0;
__construct(GetSkuFromOrderItemInterface $getSkuFromOrderItem, Json $jsonSerializer, ItemToDeductInterfaceFactory $itemToDeduct)
foreach($order->getItems() as $orderItem) $shipment