Skip to content

Commit ed482dc

Browse files
committed
ACP2E-924: MSI - Inventory Compensation command is not working properly for partial shipment of the Configurable products
1 parent b6aae28 commit ed482dc

File tree

3 files changed

+33
-51
lines changed

3 files changed

+33
-51
lines changed

app/code/Magento/Sales/Test/Fixture/Creditmemo.php

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ private function prepareData(array $data): array
103103
}
104104

105105
/**
106-
* Prepare creditmemo items
106+
* Prepare creditmemo item
107107
*
108108
* @param array $data
109109
* @return array
@@ -122,30 +122,24 @@ private function prepareCreditmemoItems(array $data): array
122122
}
123123

124124
foreach ($data['items'] as $itemToRefund) {
125-
$qty = 1;
126-
$orderItemId = null;
127-
$sku = null;
125+
$creditmemoItem = ['order_item_id' => null, 'qty' => 1];
128126
if (is_numeric($itemToRefund)) {
129-
$orderItemId = $itemToRefund;
127+
$creditmemoItem['order_item_id'] = $itemToRefund;
130128
} elseif (is_string($itemToRefund)) {
131-
$sku = $itemToRefund;
129+
$creditmemoItem['order_item_id'] = $orderItemIdsBySku[$itemToRefund];
132130
} elseif ($itemToRefund instanceof ProductInterface) {
133-
$sku = $itemToRefund->getSku();
131+
$creditmemoItem['order_item_id'] = $orderItemIdsBySku[$itemToRefund->getSku()];
134132
} else {
135-
$qty = $itemToRefund['qty'] ?? $qty;
136-
if (isset($itemToRefund['order_item_id'])) {
137-
$orderItemId = $itemToRefund['order_item_id'];
133+
$creditmemoItem = array_intersect($itemToRefund, $creditmemoItem) + $creditmemoItem;
134+
if (isset($itemToRefund['sku'])) {
135+
$creditmemoItem['order_item_id'] = $orderItemIdsBySku[$itemToRefund['sku']];
138136
} elseif (isset($itemToRefund['product_id'])) {
139-
$orderItemId = $orderItemIdsByProductIds[$itemToRefund['product_id']];
137+
$creditmemoItem['order_item_id'] = $orderItemIdsByProductIds[$itemToRefund['product_id']];
140138
} elseif (isset($itemToRefund['quote_item_id'])) {
141-
$orderItemId = $orderItemIdsByQuoteItemIds[$itemToRefund['quote_item_id']];
139+
$creditmemoItem['order_item_id'] = $orderItemIdsByQuoteItemIds[$itemToRefund['quote_item_id']];
142140
}
143-
$sku = $itemToRefund['sku'] ?? $sku;
144141
}
145-
if (!$orderItemId && $sku) {
146-
$orderItemId = $orderItemIdsBySku[$sku];
147-
}
148-
$creditmemoItems[] = ['order_item_id' => $orderItemId, 'qty' => $qty];
142+
$creditmemoItems[] = $creditmemoItem;
149143
}
150144

151145
return $creditmemoItems;

app/code/Magento/Sales/Test/Fixture/Invoice.php

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ private function prepareData(array $data): array
110110
*/
111111
private function prepareInvoiceItems(array $data): array
112112
{
113-
$items = [];
113+
$invoiceItems = [];
114114
$order = $this->orderRepository->get($data['order_id']);
115115
$orderItemIdsBySku = [];
116116
$orderItemIdsByProductIds = [];
@@ -122,32 +122,26 @@ private function prepareInvoiceItems(array $data): array
122122
}
123123

124124
foreach ($data['items'] as $itemToInvoice) {
125-
$qty = 1;
126-
$orderItemId = null;
127-
$sku = null;
125+
$invoiceItem = ['order_item_id' => null, 'qty' => 1];
128126
if (is_numeric($itemToInvoice)) {
129-
$orderItemId = $itemToInvoice;
127+
$invoiceItem['order_item_id'] = $itemToInvoice;
130128
} elseif (is_string($itemToInvoice)) {
131-
$sku = $itemToInvoice;
129+
$invoiceItem['order_item_id'] = $orderItemIdsBySku[$itemToInvoice];
132130
} elseif ($itemToInvoice instanceof ProductInterface) {
133-
$sku = $itemToInvoice->getSku();
131+
$invoiceItem['order_item_id'] = $orderItemIdsBySku[$itemToInvoice->getSku()];
134132
} else {
135-
$qty = $itemToInvoice['qty'] ?? $qty;
136-
if (isset($itemToInvoice['order_item_id'])) {
137-
$orderItemId = $itemToInvoice['order_item_id'];
133+
$invoiceItem = array_intersect($itemToInvoice, $invoiceItem) + $invoiceItem;
134+
if (isset($itemToInvoice['sku'])) {
135+
$invoiceItem['order_item_id'] = $orderItemIdsBySku[$itemToInvoice['sku']];
138136
} elseif (isset($itemToInvoice['product_id'])) {
139-
$orderItemId = $orderItemIdsByProductIds[$itemToInvoice['product_id']];
137+
$invoiceItem['order_item_id'] = $orderItemIdsByProductIds[$itemToInvoice['product_id']];
140138
} elseif (isset($itemToInvoice['quote_item_id'])) {
141-
$orderItemId = $orderItemIdsByQuoteItemIds[$itemToInvoice['quote_item_id']];
139+
$invoiceItem['order_item_id'] = $orderItemIdsByQuoteItemIds[$itemToInvoice['quote_item_id']];
142140
}
143-
$sku = $itemToInvoice['sku'] ?? $sku;
144141
}
145-
if (!$orderItemId && $sku) {
146-
$orderItemId = $orderItemIdsBySku[$sku];
147-
}
148-
$items[] = ['order_item_id' => $orderItemId, 'qty' => $qty];
142+
$invoiceItems[] = $invoiceItem;
149143
}
150144

151-
return $items;
145+
return $invoiceItems;
152146
}
153147
}

app/code/Magento/Sales/Test/Fixture/Shipment.php

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -124,30 +124,24 @@ private function prepareShipmentItems(array $data): array
124124
}
125125

126126
foreach ($data['items'] as $itemToShip) {
127-
$qty = 1;
128-
$orderItemId = null;
129-
$sku = null;
127+
$shipmentItem = ['order_item_id' => null, 'qty' => 1];
130128
if (is_numeric($itemToShip)) {
131-
$orderItemId = $itemToShip;
129+
$shipmentItem['order_item_id'] = $itemToShip;
132130
} elseif (is_string($itemToShip)) {
133-
$sku = $itemToShip;
131+
$shipmentItem['order_item_id'] = $orderItemIdsBySku[$itemToShip];
134132
} elseif ($itemToShip instanceof ProductInterface) {
135-
$sku = $itemToShip->getSku();
133+
$shipmentItem['order_item_id'] = $orderItemIdsBySku[$itemToShip->getSku()];
136134
} else {
137-
$qty = $itemToShip['qty'] ?? $qty;
138-
if (isset($itemToShip['order_item_id'])) {
139-
$orderItemId = $itemToShip['order_item_id'];
135+
$shipmentItem = array_intersect($itemToShip, $shipmentItem) + $shipmentItem;
136+
if (isset($itemToShip['sku'])) {
137+
$shipmentItem['order_item_id'] = $orderItemIdsBySku[$itemToShip['sku']];
140138
} elseif (isset($itemToShip['product_id'])) {
141-
$orderItemId = $orderItemIdsByProductIds[$itemToShip['product_id']];
139+
$shipmentItem['order_item_id'] = $orderItemIdsByProductIds[$itemToShip['product_id']];
142140
} elseif (isset($itemToShip['quote_item_id'])) {
143-
$orderItemId = $orderItemIdsByQuoteItemIds[$itemToShip['quote_item_id']];
141+
$shipmentItem['order_item_id'] = $orderItemIdsByQuoteItemIds[$itemToShip['quote_item_id']];
144142
}
145-
$sku = $itemToShip['sku'] ?? $sku;
146143
}
147-
if (!$orderItemId && $sku) {
148-
$orderItemId = $orderItemIdsBySku[$sku];
149-
}
150-
$shipmentItems[] = ['order_item_id' => $orderItemId, 'qty' => $qty];
144+
$shipmentItems[] = $shipmentItem;
151145
}
152146

153147
return $shipmentItems;

0 commit comments

Comments
 (0)