Skip to content

Commit 80437ec

Browse files
author
Prabhu Ram
committed
Merge remote-tracking branch 'origin/MC-20636-bundle' into MC-20637
2 parents 647d8a5 + 296788e commit 80437ec

File tree

4 files changed

+56
-57
lines changed

4 files changed

+56
-57
lines changed

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

Lines changed: 25 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -129,49 +129,31 @@ private function fetch()
129129
/** @var OrderInterface $associatedOrder */
130130
$associatedOrder = $orderList[$orderItem->getOrderId()];
131131
$itemOptions = $this->optionsProcessor->getItemOptions($orderItem);
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-
}
132+
$bundleOptions = $orderItem->getProductType() === 'bundle' ?
133+
$this->optionsProcessor->getBundleOptions($orderItem) : [];
134+
135+
$this->orderItemList[$orderItem->getItemId()] = [
136+
'id' => base64_encode($orderItem->getItemId()),
137+
'associatedProduct' => $associatedProduct,
138+
'model' => $orderItem,
139+
'product_name' => $orderItem->getName(),
140+
'product_sku' => $orderItem->getSku(),
141+
'product_url_key' => $associatedProduct ? $associatedProduct->getUrlKey() : null,
142+
'product_type' => $orderItem->getProductType(),
143+
'product_sale_price' => [
144+
'value' => $orderItem->getPrice(),
145+
'currency' => $associatedOrder->getOrderCurrencyCode()
146+
],
147+
'selected_options' => $itemOptions['selected_options'],
148+
'entered_options' => $itemOptions['entered_options'],
149+
'quantity_ordered' => $orderItem->getQtyOrdered(),
150+
'quantity_shipped' => $orderItem->getQtyShipped(),
151+
'quantity_refunded' => $orderItem->getQtyRefunded(),
152+
'quantity_invoiced' => $orderItem->getQtyInvoiced(),
153+
'quantity_canceled' => $orderItem->getQtyCanceled(),
154+
'quantity_returned' => $orderItem->getQtyReturned(),
155+
'bundle_options' => $bundleOptions,
156+
];
175157

176158
}
177159

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

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,21 +100,33 @@ private function processAttributesInfo(array $attributesInfo): array
100100
}
101101

102102
/**
103-
* TODO: use this method for bundle options
104103
*
105-
* @param mixed $item
106-
* @return mixed|null
104+
* @param \Magento\Sales\Api\Data\OrderItemInterface $item
105+
* @return array
107106
*/
108-
public function getSelectionAttributes($item)
107+
public function getBundleOptions(\Magento\Sales\Api\Data\OrderItemInterface $item): array
109108
{
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']);
109+
$bundleOptions = [];
110+
if ($item->getProductType() === 'bundle') {
111+
if ($item instanceof \Magento\Sales\Model\Order\Item) {
112+
$options = $item->getProductOptions();
113+
} else {
114+
$options = $item->getOrderItem()->getProductOptions();
115+
}
116+
if (isset($options['bundle_options'])) {
117+
//$bundleOptions = $this->serializer->unserialize($options['bundle_options']);
118+
foreach ($options['bundle_options'] as $bundleOptionKey => $bundleOption) {
119+
$bundleOptions[$bundleOptionKey]['items'] = $bundleOption['value'] ?? [];
120+
$bundleOptions[$bundleOptionKey]['label'] = $bundleOption['label'];
121+
foreach ($bundleOptions[$bundleOptionKey]['items'] as $bundleOptionValueKey => $bundleOptionValue) {
122+
$bundleOptions[$bundleOptionKey]['items'][$bundleOptionValueKey]['product_sku'] = $bundleOptionValue['title'];
123+
$bundleOptions[$bundleOptionKey]['items'][$bundleOptionValueKey]['product_name'] = $bundleOptionValue['title'];
124+
$bundleOptions[$bundleOptionKey]['items'][$bundleOptionValueKey]['quantity_ordered'] = $bundleOptionValue['qty'];
125+
$bundleOptions[$bundleOptionKey]['items'][$bundleOptionValueKey]['id'] = base64_encode((string)$bundleOptionValueKey);
126+
}
127+
}
128+
}
117129
}
118-
return null;
130+
return $bundleOptions;
119131
}
120132
}

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

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

app/code/Magento/SalesGraphQl/etc/schema.graphqls

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,12 @@ type OrderItem implements OrderItemInterface {
8383
}
8484

8585
type BundleOrderItem implements OrderItemInterface {
86-
child_items: [OrderItemInterface] @doc(description: "A list of child products that are assigned to the bundle product")
86+
bundle_options: [SelectedBundleOptionItems] @doc(description: "A list of bundle options that are assigned to the bundle product")
87+
}
88+
89+
type SelectedBundleOptionItems {
90+
label: String!
91+
items: [OrderItem] @doc(description: "A list of products that represent the values of the parent option")
8792
}
8893

8994
type OrderItemOption @doc(description: "Represents order item options like selected or entered") {

0 commit comments

Comments
 (0)