7 declare(strict_types=1);
14 use Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory;
22 private $getSkuFromOrderItem;
27 private $itemsToSellFactory;
32 private $jsonSerializer;
41 ItemToSellInterfaceFactory $itemsToSellFactory,
44 $this->getSkuFromOrderItem = $getSkuFromOrderItem;
45 $this->itemsToSellFactory = $itemsToSellFactory;
46 $this->jsonSerializer = $jsonSerializer;
59 $itemsToCancel[] =
$item;
63 $itemSku = $this->getSkuFromOrderItem->execute(
$orderItem);
64 $itemsToCancel[] = $this->itemsToSellFactory->create([
70 return $this->groupItemsBySku($itemsToCancel);
77 private function groupItemsBySku(array $itemsToCancel): array
79 $processingItems = $groupedItems = [];
80 foreach ($itemsToCancel as
$item) {
81 if (
$item->getQuantity() == 0) {
84 if (empty($processingItems[
$item->getSku()])) {
85 $processingItems[
$item->getSku()] =
$item->getQuantity();
87 $processingItems[
$item->getSku()] +=
$item->getQuantity();
91 foreach ($processingItems as $sku => $qty) {
92 $groupedItems[] = $this->itemsToSellFactory->create([
105 private function processComplexItem(OrderItem
$orderItem): array
111 $bundleSelectionAttributes = $this->jsonSerializer->unserialize(
114 if ($bundleSelectionAttributes) {
115 $shippedQty = $bundleSelectionAttributes[
'qty'] *
$orderItem->getQtyShipped();
116 $qty =
$item->getQtyOrdered() - max($shippedQty,
$item->getQtyInvoiced()) -
$item->getQtyCanceled();
117 $itemSku = $this->getSkuFromOrderItem->execute(
$item);
118 $itemsToCancel[] = $this->itemsToSellFactory->create([
125 $itemSku = $this->getSkuFromOrderItem->execute(
$orderItem);
126 $itemsToCancel[] = $this->itemsToSellFactory->create([
132 return $itemsToCancel;
139 private function getQtyToCancel(OrderItem
$item): float
141 return $item->getQtyOrdered() - max(
$item->getQtyShipped(),
$item->getQtyInvoiced()) -
$item->getQtyCanceled();
elseif(isset( $params[ 'redirect_parent']))
execute(OrderItem $orderItem)
__construct(GetSkuFromOrderItemInterface $getSkuFromOrderItem, ItemToSellInterfaceFactory $itemsToSellFactory, Json $jsonSerializer)