Skip to content
This repository was archived by the owner on Apr 29, 2019. It is now read-only.

Commit 793381e

Browse files
author
Eric Bohanon
committed
MAGETWO-72747: [Magento Cloud] - /rest/default/V1/order/<order id>/ship and configurable products - for 2.2
1 parent 6e7c7f6 commit 793381e

File tree

2 files changed

+56
-22
lines changed

2 files changed

+56
-22
lines changed

app/code/Magento/Sales/Model/Order/ShipmentDocumentFactory.php

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,20 +79,9 @@ public function create(
7979
array $packages = [],
8080
ShipmentCreationArgumentsInterface $arguments = null
8181
) {
82-
$shipmentItems = [];
83-
if (empty($items)) {
84-
/** @var OrderItemInterface $item */
85-
foreach ($order->getItems() as $item) {
86-
if (!$item->getIsVirtual() && !$item->getParentItem()) {
87-
$shipmentItems[$item->getItemId()] = $item->getQtyOrdered();
88-
}
89-
}
90-
} else {
91-
/** @var ShipmentItemCreationInterface $item */
92-
foreach ($items as $item) {
93-
$shipmentItems[$item->getOrderItemId()] = $item->getQty();
94-
}
95-
}
82+
$shipmentItems = empty($items)
83+
? $this->getQuantitiesFromOrderItems($order->getItems())
84+
: $this->getQuantitiesFromShipmentItems($items);
9685

9786
/** @var Shipment $shipment */
9887
$shipment = $this->shipmentFactory->create(
@@ -117,4 +106,36 @@ public function create(
117106

118107
return $shipment;
119108
}
109+
110+
/**
111+
* Translate OrderItemInterface array to product id => product quantity array.
112+
*
113+
* @param OrderItemInterface[] $items
114+
* @return array
115+
*/
116+
private function getQuantitiesFromOrderItems(array $items)
117+
{
118+
$shipmentItems = [];
119+
foreach ($items as $item) {
120+
if (!$item->getIsVirtual() && !$item->getParentItem()) {
121+
$shipmentItems[$item->getItemId()] = $item->getQtyOrdered();
122+
}
123+
}
124+
return $shipmentItems;
125+
}
126+
127+
/**
128+
* Translate ShipmentItemCreationInterface array to product id => product quantity array.
129+
*
130+
* @param ShipmentItemCreationInterface[] $items
131+
* @return array
132+
*/
133+
private function getQuantitiesFromShipmentItems(array $items)
134+
{
135+
$shipmentItems = [];
136+
foreach ($items as $item) {
137+
$shipmentItems[$item->getOrderItemId()] = $item->getQty();
138+
}
139+
return $shipmentItems;
140+
}
120141
}

app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,7 @@ public function load()
135135
return false;
136136
}
137137

138-
$shipmentItems = [];
139-
foreach ($this->getItemQtys() as $itemId => $quantity) {
140-
/** @var ShipmentItemCreationInterface $item */
141-
$item = $this->itemFactory->create();
142-
$item->setOrderItemId($itemId);
143-
$item->setQty($quantity);
144-
$shipmentItems[] = $item;
145-
}
138+
$shipmentItems = $this->getShipmentItems($this->getShipment());
146139

147140
$shipment = $this->documentFactory->create(
148141
$order,
@@ -193,4 +186,24 @@ private function getTrackingArray()
193186

194187
return $trackingCreation;
195188
}
189+
190+
/**
191+
* Extract product id => product quantity array from shipment data.
192+
*
193+
* @param array $shipmentData
194+
* @return array
195+
*/
196+
private function getShipmentItems(array $shipmentData)
197+
{
198+
$shipmentItems = [];
199+
$itemQty = isset($shipmentData['items']) ? $shipmentData['items'] : [];
200+
foreach ($itemQty as $itemId => $quantity) {
201+
/** @var ShipmentItemCreationInterface $item */
202+
$item = $this->itemFactory->create();
203+
$item->setOrderItemId($itemId);
204+
$item->setQty($quantity);
205+
$shipmentItems[] = $item;
206+
}
207+
return $shipmentItems;
208+
}
196209
}

0 commit comments

Comments
 (0)