Skip to content

Commit dab6cd4

Browse files
committed
MC-20636: Order Details :: Order Details by Order Number
- add support for bundle
1 parent e9d7a1d commit dab6cd4

File tree

4 files changed

+83
-21
lines changed

4 files changed

+83
-21
lines changed

app/code/Magento/SalesGraphQl/Model/OrderItemTypeResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public function resolveType(array $data): string
1818
{
1919
if (isset($data['product_type'])) {
2020
if ($data['product_type'] == 'bundle') {
21-
return 'OrderItemBundle';
21+
return 'BundleOrderItem';
2222
}
2323
}
2424
return 'OrderItem';

app/code/Magento/SalesGraphQl/Model/Resolver/OrderItem/DataProvider.php

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -129,25 +129,50 @@ private function fetch()
129129
/** @var OrderInterface $associatedOrder */
130130
$associatedOrder = $orderList[$orderItem->getOrderId()];
131131
$itemOptions = $this->optionsProcessor->getItemOptions($orderItem);
132-
$this->orderItemList[$orderItem->getItemId()] = [
133-
'id' => base64_encode($orderItem->getItemId()),
134-
'product_name' => $orderItem->getName(),
135-
'product_sku' => $orderItem->getSku(),
136-
'product_url_key' => $associatedProduct ? $associatedProduct->getUrlKey() : null,
137-
'product_type' => $orderItem->getProductType(),
138-
'product_sale_price' => [
139-
'value' => $orderItem->getPrice(),
140-
'currency' => $associatedOrder->getOrderCurrencyCode()
141-
],
142-
'selected_options' => $itemOptions['selected_options'],
143-
'entered_options' => $itemOptions['entered_options'],
144-
'quantity_ordered' => $orderItem->getQtyOrdered(),
145-
'quantity_shipped' => $orderItem->getQtyShipped(),
146-
'quantity_refunded' => $orderItem->getQtyRefunded(),
147-
'quantity_invoiced' => $orderItem->getQtyInvoiced(),
148-
'quantity_canceled' => $orderItem->getQtyCanceled(),
149-
'quantity_returned' => $orderItem->getQtyReturned()
150-
];
132+
133+
if (!$orderItem->getParentItem()) {
134+
$this->orderItemList[$orderItem->getItemId()] = [
135+
'id' => base64_encode($orderItem->getItemId()),
136+
'product_name' => $orderItem->getName(),
137+
'product_sku' => $orderItem->getSku(),
138+
'product_url_key' => $associatedProduct ? $associatedProduct->getUrlKey() : null,
139+
'product_type' => $orderItem->getProductType(),
140+
'product_sale_price' => [
141+
'value' => $orderItem->getPrice(),
142+
'currency' => $associatedOrder->getOrderCurrencyCode()
143+
],
144+
'selected_options' => $itemOptions['selected_options'],
145+
'entered_options' => $itemOptions['entered_options'],
146+
'quantity_ordered' => $orderItem->getQtyOrdered(),
147+
'quantity_shipped' => $orderItem->getQtyShipped(),
148+
'quantity_refunded' => $orderItem->getQtyRefunded(),
149+
'quantity_invoiced' => $orderItem->getQtyInvoiced(),
150+
'quantity_canceled' => $orderItem->getQtyCanceled(),
151+
'quantity_returned' => $orderItem->getQtyReturned(),
152+
];
153+
} else {
154+
// case where
155+
$this->orderItemList[$orderItem->getParentItemId()]['child_items'][$orderItem->getItemId()] = [
156+
'id' => base64_encode($orderItem->getItemId()),
157+
'product_name' => $orderItem->getName(),
158+
'product_sku' => $orderItem->getSku(),
159+
'product_url_key' => $associatedProduct ? $associatedProduct->getUrlKey() : null,
160+
'product_type' => $orderItem->getProductType(),
161+
'product_sale_price' => [
162+
'value' => $orderItem->getPrice(),
163+
'currency' => $associatedOrder->getOrderCurrencyCode()
164+
],
165+
'selected_options' => $itemOptions['selected_options'],
166+
'entered_options' => $itemOptions['entered_options'],
167+
'quantity_ordered' => $orderItem->getQtyOrdered(),
168+
'quantity_shipped' => $orderItem->getQtyShipped(),
169+
'quantity_refunded' => $orderItem->getQtyRefunded(),
170+
'quantity_invoiced' => $orderItem->getQtyInvoiced(),
171+
'quantity_canceled' => $orderItem->getQtyCanceled(),
172+
'quantity_returned' => $orderItem->getQtyReturned(),
173+
];
174+
}
175+
151176
}
152177

153178
return $this->orderItemList;

app/code/Magento/SalesGraphQl/Model/Resolver/OrderItem/OptionsProcessor.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,29 @@
77

88
namespace Magento\SalesGraphQl\Model\Resolver\OrderItem;
99

10+
use Magento\Framework\Serialize\Serializer\Json;
1011
use Magento\Sales\Api\Data\OrderItemInterface;
1112

1213
/**
1314
* Process order item options to format for GraphQl output
1415
*/
1516
class OptionsProcessor
1617
{
18+
/**
19+
* Serializer
20+
*
21+
* @var Json
22+
*/
23+
private $serializer;
24+
25+
/**
26+
* @param Json $serializer
27+
*/
28+
public function __construct(Json $serializer)
29+
{
30+
$this->serializer = $serializer;
31+
}
32+
1733
/**
1834
* Get Order item options.
1935
*
@@ -82,4 +98,23 @@ private function processAttributesInfo(array $attributesInfo): array
8298
}
8399
return ['selected_options' => $selectedOptions, 'entered_options' => []];
84100
}
101+
102+
/**
103+
* TODO: use this method for bundle options
104+
*
105+
* @param mixed $item
106+
* @return mixed|null
107+
*/
108+
public function getSelectionAttributes($item)
109+
{
110+
if ($item instanceof \Magento\Sales\Model\Order\Item) {
111+
$options = $item->getProductOptions();
112+
} else {
113+
$options = $item->getOrderItem()->getProductOptions();
114+
}
115+
if (isset($options['bundle_selection_attributes'])) {
116+
return $this->serializer->unserialize($options['bundle_selection_attributes']);
117+
}
118+
return null;
119+
}
85120
}

app/code/Magento/SalesGraphQl/Model/Resolver/OrderItems.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
6060
$parentOrder = $value['model'];
6161
$orderItemIds = [];
6262
foreach ($parentOrder->getItems() as $item) {
63-
$orderItemIds[] = (int)$item->getItemId();
63+
if ((!$item->getParentItemId())) {
64+
$orderItemIds[] = (int)$item->getItemId();
65+
}
6466
$this->orderItemProvider->addOrderItemId((int)$item->getItemId());
6567
}
6668

0 commit comments

Comments
 (0)