15
15
use Magento \Framework \Serialize \Serializer \Json ;
16
16
use Magento \Sales \Api \Data \InvoiceItemInterface ;
17
17
use Magento \Sales \Api \Data \OrderItemInterface ;
18
- use Magento \SalesGraphQl \Model \Resolver \OrderItem \DataProvider as OrderItemProvider ;
19
18
20
19
/**
21
20
* Resolve bundle options items for order item
@@ -34,23 +33,15 @@ class BundleOptions implements ResolverInterface
34
33
*/
35
34
private $ valueFactory ;
36
35
37
- /**
38
- * @var OrderItemProvider
39
- */
40
- private $ orderItemProvider ;
41
-
42
36
/**
43
37
* @param ValueFactory $valueFactory
44
- * @param OrderItemProvider $orderItemProvider
45
38
* @param Json $serializer
46
39
*/
47
40
public function __construct (
48
41
ValueFactory $ valueFactory ,
49
- OrderItemProvider $ orderItemProvider ,
50
42
Json $ serializer
51
43
) {
52
44
$ this ->valueFactory = $ valueFactory ;
53
- $ this ->orderItemProvider = $ orderItemProvider ;
54
45
$ this ->serializer = $ serializer ;
55
46
}
56
47
@@ -66,13 +57,13 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
66
57
if ($ value ['model ' ] instanceof OrderItemInterface) {
67
58
/** @var OrderItemInterface $item */
68
59
$ item = $ value ['model ' ];
69
- return $ this ->getBundleOptions ($ item );
60
+ return $ this ->getBundleOptions ($ item, $ value );
70
61
}
71
62
if ($ value ['model ' ] instanceof InvoiceItemInterface) {
72
63
/** @var InvoiceItemInterface $item */
73
64
$ item = $ value ['model ' ];
74
65
// Have to pass down order and item to map to avoid refetching all data
75
- return $ this ->getBundleOptions ($ item ->getOrderItem ());
66
+ return $ this ->getBundleOptions ($ item ->getOrderItem (), $ value );
76
67
}
77
68
return null ;
78
69
});
@@ -82,10 +73,12 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
82
73
* Format bundle options and values from a parent bundle order item
83
74
*
84
75
* @param OrderItemInterface $item
76
+ * @param array $formattedItem
85
77
* @return array
86
78
*/
87
79
private function getBundleOptions (
88
- OrderItemInterface $ item
80
+ OrderItemInterface $ item ,
81
+ array $ formattedItem
89
82
): array {
90
83
$ bundleOptions = [];
91
84
if ($ item ->getProductType () === 'bundle ' ) {
@@ -98,6 +91,7 @@ private function getBundleOptions(
98
91
if (isset ($ bundleOption ['option_id ' ])) {
99
92
$ bundleOptions [$ bundleOptionId ]['values ' ] = $ this ->formatBundleOptionItems (
100
93
$ item ,
94
+ $ formattedItem ,
101
95
$ bundleOption ['option_id ' ]
102
96
);
103
97
} else {
@@ -112,11 +106,13 @@ private function getBundleOptions(
112
106
* Format Bundle items
113
107
*
114
108
* @param OrderItemInterface $item
109
+ * @param array $formattedItem
115
110
* @param string $bundleOptionId
116
111
* @return array
117
112
*/
118
113
private function formatBundleOptionItems (
119
114
OrderItemInterface $ item ,
115
+ array $ formattedItem ,
120
116
string $ bundleOptionId
121
117
) {
122
118
$ optionItems = [];
@@ -129,7 +125,6 @@ private function formatBundleOptionItems(
129
125
// Value Id is missing from parent, so we have to match the child to parent option
130
126
if (isset ($ bundleChildAttributes ['option_id ' ])
131
127
&& $ bundleChildAttributes ['option_id ' ] == $ bundleOptionId ) {
132
- $ item = $ this ->orderItemProvider ->getOrderItemById ((int )$ childrenOrderItem ->getItemId ());
133
128
$ optionItems [$ childrenOrderItem ->getItemId ()] = [
134
129
'id ' => base64_encode ($ childrenOrderItem ->getItemId ()),
135
130
'product_name ' => $ childrenOrderItem ->getName (),
@@ -139,7 +134,7 @@ private function formatBundleOptionItems(
139
134
//use options price, not child price
140
135
'value ' => $ bundleChildAttributes ['price ' ],
141
136
//use currency from order
142
- 'currency ' => $ item ['product_sale_price ' ]['currency ' ] ?? null ,
137
+ 'currency ' => $ formattedItem ['product_sale_price ' ]['currency ' ] ?? null ,
143
138
]
144
139
];
145
140
}
0 commit comments