@@ -49,6 +49,11 @@ class CartItemProcessor implements CartItemProcessorInterface
49
49
*/
50
50
private $ productOptionFactory ;
51
51
52
+ /**
53
+ * @var array|null
54
+ */
55
+ private $ groupedOptions ;
56
+
52
57
/**
53
58
* @param ObjectFactory $objectFactory
54
59
* @param GroupedOptionsInterfaceFactory $groupedOptionFactory
@@ -84,6 +89,7 @@ public function convertToBuyRequest(CartItemInterface $cartItem): ?DataObject
84
89
if ($ extensionAttributes ) {
85
90
$ groupedOptions = $ extensionAttributes ->getGroupedOptions ();
86
91
if ($ groupedOptions ) {
92
+ $ this ->groupedOptions = $ groupedOptions ;
87
93
$ requestData = [];
88
94
89
95
foreach ($ groupedOptions as $ item ) {
@@ -105,24 +111,16 @@ public function convertToBuyRequest(CartItemInterface $cartItem): ?DataObject
105
111
*/
106
112
public function processOptions (CartItemInterface $ cartItem ): CartItemInterface
107
113
{
108
- if ($ cartItem ->getProductType () !== Grouped::TYPE_CODE ) {
114
+ if (empty ( $ this -> groupedOptions ) || $ cartItem ->getProductType () !== Grouped::TYPE_CODE ) {
109
115
return $ cartItem ;
110
116
}
111
117
112
- $ groupedOptions = $ cartItem ->getOptionByCode ('grouped_options ' );
113
- $ groupedOptionsData = $ groupedOptions ? $ this ->jsonSerializer ->unserialize ($ groupedOptions ->getValue ()) : null ;
114
- if ($ groupedOptionsData ) {
115
- $ productOptions = [];
116
- foreach ($ groupedOptionsData as $ id => $ qty ) {
117
- $ productOptions [] = $ this ->groupedOptionFactory ->create (['id ' => $ id , 'qty ' => $ qty ]);
118
- }
119
-
120
- $ extension = $ this ->productOptionExtensionFactory ->create ()->setGroupedOptions ($ productOptions );
121
- if (!$ cartItem ->getProductOption ()) {
122
- $ cartItem ->setProductOption ($ this ->productOptionFactory ->create ());
123
- }
124
- $ cartItem ->getProductOption ()->setExtensionAttributes ($ extension );
118
+ $ extension = $ this ->productOptionExtensionFactory ->create ()
119
+ ->setGroupedOptions ($ this ->groupedOptions );
120
+ if (!$ cartItem ->getProductOption ()) {
121
+ $ cartItem ->setProductOption ($ this ->productOptionFactory ->create ());
125
122
}
123
+ $ cartItem ->getProductOption ()->setExtensionAttributes ($ extension );
126
124
127
125
return $ cartItem ;
128
126
}
0 commit comments