Skip to content

Commit dfc0e36

Browse files
mstrzyzewskitmotyl
authored andcommitted
FIx copying data to order, use ExtensionAttributesInterface (#22) (#23)
* Fix problem with copying data from quote to sales_order on Magento 2.3.3 (#22) * Use ExtensionAttributesInterface for setting data in quote table
1 parent 4bf2718 commit dfc0e36

File tree

5 files changed

+45
-11
lines changed

5 files changed

+45
-11
lines changed

Model/LastEventIdInitializer.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,10 @@ private function updateLastUserIdAndLastEventId($currentUserId)
5252
{
5353
// TODO: Use EventRepositoryInterface
5454
$lastEvent = $this->eventStats->getLastEvent();
55-
$lastEventId = $lastEvent['id'];
56-
$this->configuration->setLastEventId($lastEventId);
55+
if (!empty($lastEvent['id'])) {
56+
$lastEventId = $lastEvent['id'];
57+
$this->configuration->setLastEventId($lastEventId);
58+
}
5759
$this->configuration->setLastUserId($currentUserId);
5860
}
5961
}

Model/OrderImporter/AbstractAction.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Magento\Framework\Serialize\Serializer\Json;
1616
use Magento\Sales\Model\Config as SalesConfig;
1717
use Magento\Tax\Model\Config as TaxConfig;
18+
use Magento\Quote\Api\Data\CartExtensionFactory;
1819

1920
abstract class AbstractAction
2021
{
@@ -58,6 +59,9 @@ abstract class AbstractAction
5859
/** @var TaxConfig */
5960
protected $taxConfig;
6061

62+
/** @var CartExtensionFactory */
63+
private $cartExtensionFactory;
64+
6165
/**
6266
* AbstractAction constructor.
6367
* @param Shipping $shipping
@@ -72,6 +76,8 @@ abstract class AbstractAction
7276
* @param ProductFactory $productFactory
7377
* @param Json $jsonSerializer
7478
* @param SalesConfig $salesConfig
79+
* @param TaxConfig $taxConfig
80+
* @param CartExtensionFactory $cartExtensionFactory
7581
*/
7682
public function __construct(
7783
Shipping $shipping,
@@ -86,7 +92,8 @@ public function __construct(
8692
ProductFactory $productFactory,
8793
Json $jsonSerializer,
8894
SalesConfig $salesConfig,
89-
TaxConfig $taxConfig
95+
TaxConfig $taxConfig,
96+
CartExtensionFactory $cartExtensionFactory
9097
) {
9198
$this->shipping = $shipping;
9299
$this->payment = $payment;
@@ -101,6 +108,7 @@ public function __construct(
101108
$this->jsonSerializer = $jsonSerializer;
102109
$this->salesConfig = $salesConfig;
103110
$this->taxConfig = $taxConfig;
111+
$this->cartExtensionFactory = $cartExtensionFactory;
104112
}
105113

106114
/**
@@ -204,9 +212,14 @@ protected function processTotals(OrderInterface $order, CheckoutFormInterface $c
204212
['order' => $order, 'quote' => $quote]
205213
);
206214

207-
// TODO: Use ExtensionsAttributesInterface
208-
$quote->setOrderFrom($order->getOrderFrom());
209-
$quote->setExternalId($order->getExternalId());
215+
$cartExtension = $quote->getExtensionAttributes();
216+
if ($cartExtension === null) {
217+
$cartExtension = $this->cartExtensionFactory->create();
218+
}
219+
$cartExtension->setExternalId($order->getExternalId());
220+
$cartExtension->setOrderFrom($order->getOrderFrom());
221+
$quote->setExtensionAttributes($cartExtension);
222+
210223
$quote->setAllegroShippingPrice($checkoutForm->getDelivery()->getCost()->getAmount());
211224

212225

Model/OrderImporter/Creator.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Magento\Store\Model\StoreManagerInterface;
2323
use Magento\Tax\Model\Config as TaxConfig;
2424
use Magento\Framework\Registry;
25+
use Magento\Quote\Api\Data\CartExtensionFactory;
2526

2627
/**
2728
* Magento order creator
@@ -49,6 +50,10 @@ class Creator extends AbstractAction
4950
/** @var Registry */
5051
private $registry;
5152

53+
/** @var CartExtensionFactory */
54+
private $cartExtensionFactory;
55+
56+
5257
/**
5358
* Creator constructor.
5459
* @param Shipping $shipping
@@ -70,6 +75,7 @@ class Creator extends AbstractAction
7075
* @param ScopeConfigInterface $scopeConfig
7176
* @param QuoteManagement $quoteManagement
7277
* @param Registry $registry
78+
* @param CartExtensionFactory $cartExtensionFactory
7379
*/
7480
public function __construct(
7581
Shipping $shipping,
@@ -85,6 +91,7 @@ public function __construct(
8591
Json $jsonSerializer,
8692
TaxConfig $taxConfig,
8793
SalesConfig $salesConfig,
94+
CartExtensionFactory $cartExtensionFactory,
8895
ProductRepositoryInterface $productRepository,
8996
StoreManagerInterface $storeManager,
9097
Customer $customer,
@@ -105,7 +112,8 @@ public function __construct(
105112
$productFactory,
106113
$jsonSerializer,
107114
$salesConfig,
108-
$taxConfig
115+
$taxConfig,
116+
$cartExtensionFactory
109117
);
110118
$this->productRepository = $productRepository;
111119
$this->storeManager = $storeManager;
@@ -130,9 +138,14 @@ public function execute(CheckoutFormInterface $checkoutForm)
130138
$quote->setStore($this->getStore());
131139
$quote->setStoreId($this->getStore()->getId());
132140

133-
// TODO use ExtensionAttributesInterface
134-
$quote->setData('order_from', 'Allegro');
135-
$quote->setData('external_id', $checkoutForm->getId());
141+
$cartExtension = $quote->getExtensionAttributes();
142+
if ($cartExtension === null) {
143+
$cartExtension = $this->cartExtensionFactory->create();
144+
}
145+
$cartExtension->setExternalId($checkoutForm->getId());
146+
$cartExtension->setOrderFrom('Allegro');
147+
$quote->setExtensionAttributes($cartExtension);
148+
136149
$quote->setAllegroShippingPrice($checkoutForm->getDelivery()->getCost()->getAmount());
137150

138151
$this->processCustomer($quote, $checkoutForm);

Observer/CopyFieldsFromQuoteToOrderObserver.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ public function execute(\Magento\Framework\Event\Observer $observer)
3535
/* @var \Magento\Quote\Model\Quote $quote */
3636
$quote = $observer->getEvent()->getData('quote');
3737

38+
$cartExtensions = $quote->getExtensionAttributes();
39+
if ($cartExtensions) {
40+
$order->setData('external_id', $cartExtensions->getExternalId());
41+
$order->setData('order_from', $cartExtensions->getOrderFrom());
42+
}
43+
3844
$this->objectCopyService->copyFieldsetToTarget('sales_convert_quote', 'to_order', $quote, $order);
3945

4046
return $this;

Plugin/UpdateShippingRatePrice.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public function aroundCollectRates(Subject $subject, \Closure $proceed, RateRequ
2727

2828
/** @var Quote $quote */
2929
$quote = reset($allItems)->getQuote();
30-
if (!$quote->hasOrderFrom() || !$quote->hasExternalId() || !$quote->hasAllegroShippingPrice()) {
30+
if (!$quote->getExtensionAttributes()->getOrderFrom() || !$quote->getExtensionAttributes()->getExternalId() || !$quote->hasAllegroShippingPrice()) {
3131
return $result;
3232
}
3333

0 commit comments

Comments
 (0)