From 68f23eae0b9fb540ba2670db5fed8b10ca8e9db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Lavorel?= Date: Sun, 21 Oct 2018 18:55:36 +0200 Subject: [PATCH 1/2] [fix] specify connexion for db upgrade --- app/code/Magento/Sales/Setup/UpgradeData.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 77b96791e8cea..205a743085300 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -178,23 +178,24 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet */ public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $setup) { - $addressTable = $setup->getTable('sales_order_address'); + $addressTable = $setup->getTable('sales_order_address', 'sales'); $updateOrderAddress = $setup->getConnection() ->select() ->joinInner( - ['sales_order' => $setup->getTable('sales_order')], + ['sales_order' => $setup->getTable('sales_order', 'sales')], $addressTable . '.parent_id = sales_order.entity_id', ['quote_address_id' => 'quote_address.address_id'] ) ->joinInner( - ['quote_address' => $setup->getTable('quote_address')], + ['quote_address' => $setup->getTable('quote_address', 'checkout')], 'sales_order.quote_id = quote_address.quote_id AND ' . $addressTable . '.address_type = quote_address.address_type', [] ) ->where( $addressTable . '.quote_address_id IS NULL' - ); + ) + ; $updateOrderAddress = $setup->getConnection()->updateFromSelect( $updateOrderAddress, $addressTable From 5cf5dd85a6194a9bb0ecbf774cff5041b88171ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Lavorel?= Date: Mon, 29 Oct 2018 21:07:57 +0100 Subject: [PATCH 2/2] [update] use collection setup in split database case --- app/code/Magento/Sales/Setup/UpgradeData.php | 83 ++++++++++++++------ 1 file changed, 59 insertions(+), 24 deletions(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 205a743085300..2ac379b25fc6a 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -11,6 +11,7 @@ use Magento\Framework\DB\AggregatedFieldDataConverter; use Magento\Framework\DB\DataConverter\SerializedToJson; use Magento\Framework\DB\FieldToConvert; +use Magento\Framework\Module\Manager; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Framework\Setup\UpgradeDataInterface; @@ -62,6 +63,11 @@ class UpgradeData implements UpgradeDataInterface */ private $state; + /** + * @var Manager + */ + private $moduleManager; + /** * @param SalesSetupFactory $salesSetupFactory * @param Config $eavConfig @@ -70,6 +76,7 @@ class UpgradeData implements UpgradeDataInterface * @param OrderFactory $orderFactory * @param QuoteFactory $quoteFactory * @param State $state + * @param Manager $moduleManager */ public function __construct( SalesSetupFactory $salesSetupFactory, @@ -78,7 +85,8 @@ public function __construct( AddressCollectionFactory $addressCollFactory, OrderFactory $orderFactory, QuoteFactory $quoteFactory, - State $state + State $state, + Manager $moduleManager ) { $this->salesSetupFactory = $salesSetupFactory; $this->eavConfig = $eavConfig; @@ -87,6 +95,7 @@ public function __construct( $this->orderFactory = $orderFactory; $this->quoteFactory = $quoteFactory; $this->state = $state; + $this->moduleManager = $moduleManager; } /** @@ -178,28 +187,54 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet */ public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $setup) { - $addressTable = $setup->getTable('sales_order_address', 'sales'); - $updateOrderAddress = $setup->getConnection() - ->select() - ->joinInner( - ['sales_order' => $setup->getTable('sales_order', 'sales')], - $addressTable . '.parent_id = sales_order.entity_id', - ['quote_address_id' => 'quote_address.address_id'] - ) - ->joinInner( - ['quote_address' => $setup->getTable('quote_address', 'checkout')], - 'sales_order.quote_id = quote_address.quote_id + if ( + $this->moduleManager->isEnabled('Magento_ScalableCheckout') || + $this->moduleManager->isEnabled('Magento_ScalableInventory') || + $this->moduleManager->isEnabled('Magento_ScalableOms') + ) { + $addressCollection = $this->addressCollectionFactory->create(); + $addressCollection->addFieldToFilter('quote_address_id', ['null' => true]); + + /** @var \Magento\Sales\Model\Order\Address $orderAddress */ + foreach ($addressCollection as $orderAddress) { + $orderId = $orderAddress->getParentId(); + $addressType = $orderAddress->getAddressType(); + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->orderFactory->create()->load($orderId); + $quoteId = $order->getQuoteId(); + $quote = $this->quoteFactory->create()->load($quoteId); + if ($addressType == \Magento\Sales\Model\Order\Address::TYPE_SHIPPING) { + $quoteAddressId = $quote->getShippingAddress()->getId(); + $orderAddress->setData('quote_address_id', $quoteAddressId); + } elseif ($addressType == \Magento\Sales\Model\Order\Address::TYPE_BILLING) { + $quoteAddressId = $quote->getBillingAddress()->getId(); + $orderAddress->setData('quote_address_id', $quoteAddressId); + } + $orderAddress->save(); + } + } else { + $addressTable = $setup->getTable('sales_order_address', 'sales'); + $updateOrderAddress = $setup->getConnection() + ->select() + ->joinInner( + ['sales_order' => $setup->getTable('sales_order', 'sales')], + $addressTable . '.parent_id = sales_order.entity_id', + ['quote_address_id' => 'quote_address.address_id'] + ) + ->joinInner( + ['quote_address' => $setup->getTable('quote_address', 'checkout')], + 'sales_order.quote_id = quote_address.quote_id AND ' . $addressTable . '.address_type = quote_address.address_type', - [] - ) - ->where( - $addressTable . '.quote_address_id IS NULL' - ) - ; - $updateOrderAddress = $setup->getConnection()->updateFromSelect( - $updateOrderAddress, - $addressTable - ); - $setup->getConnection()->query($updateOrderAddress); + [] + ) + ->where( + $addressTable . '.quote_address_id IS NULL' + ); + $updateOrderAddress = $setup->getConnection()->updateFromSelect( + $updateOrderAddress, + $addressTable + ); + $setup->getConnection()->query($updateOrderAddress); + } } -} +} \ No newline at end of file