FillQuoteAddressIdInSalesOrderAddress.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Setup\Patch\Data;
  7. use Magento\Eav\Model\Config;
  8. use Magento\Framework\App\State;
  9. use Magento\Quote\Model\QuoteFactory;
  10. use Magento\Sales\Model\OrderFactory;
  11. use Magento\Sales\Model\ResourceModel\Order\Address\CollectionFactory as AddressCollectionFactory;
  12. use Magento\Framework\App\ResourceConnection;
  13. use Magento\Sales\Setup\SalesSetupFactory;
  14. use Magento\Framework\Setup\Patch\DataPatchInterface;
  15. use Magento\Framework\Setup\Patch\PatchVersionInterface;
  16. use Magento\Framework\Setup\ModuleDataSetupInterface;
  17. class FillQuoteAddressIdInSalesOrderAddress implements DataPatchInterface, PatchVersionInterface
  18. {
  19. /**
  20. * @var ModuleDataSetupInterface
  21. */
  22. private $moduleDataSetup;
  23. /**
  24. * @var SalesSetupFactory
  25. */
  26. private $salesSetupFactory;
  27. /**
  28. * @var State
  29. */
  30. private $state;
  31. /**
  32. * @var Config
  33. */
  34. private $eavConfig;
  35. /**
  36. * @var AddressCollectionFactory
  37. */
  38. private $addressCollectionFactory;
  39. /**
  40. * @var OrderFactory
  41. */
  42. private $orderFactory;
  43. /**
  44. * @var QuoteFactory
  45. */
  46. private $quoteFactory;
  47. /**
  48. * PatchInitial constructor.
  49. * @param ModuleDataSetupInterface $moduleDataSetup
  50. */
  51. public function __construct(
  52. ModuleDataSetupInterface $moduleDataSetup,
  53. SalesSetupFactory $salesSetupFactory,
  54. State $state,
  55. Config $eavConfig,
  56. AddressCollectionFactory $addressCollectionFactory,
  57. OrderFactory $orderFactory,
  58. QuoteFactory $quoteFactory
  59. ) {
  60. $this->moduleDataSetup = $moduleDataSetup;
  61. $this->salesSetupFactory = $salesSetupFactory;
  62. $this->state = $state;
  63. $this->eavConfig = $eavConfig;
  64. $this->addressCollectionFactory = $addressCollectionFactory;
  65. $this->orderFactory = $orderFactory;
  66. $this->quoteFactory = $quoteFactory;
  67. }
  68. /**
  69. * {@inheritdoc}
  70. */
  71. public function apply()
  72. {
  73. $this->state->emulateAreaCode(
  74. \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE,
  75. [$this, 'fillQuoteAddressIdInSalesOrderAddress'],
  76. [$this->moduleDataSetup]
  77. );
  78. $this->eavConfig->clear();
  79. }
  80. /**
  81. * Fill quote_address_id in table sales_order_address if it is empty.
  82. *
  83. * @param ModuleDataSetupInterface $setup
  84. */
  85. public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $setup)
  86. {
  87. $addressTable = $setup->getTable('sales_order_address');
  88. $updateOrderAddress = $setup->getConnection()
  89. ->select()
  90. ->joinInner(
  91. ['sales_order' => $setup->getTable('sales_order')],
  92. $addressTable . '.parent_id = sales_order.entity_id',
  93. ['quote_address_id' => 'quote_address.address_id']
  94. )
  95. ->joinInner(
  96. ['quote_address' => $setup->getTable('quote_address')],
  97. 'sales_order.quote_id = quote_address.quote_id
  98. AND ' . $addressTable . '.address_type = quote_address.address_type',
  99. []
  100. )
  101. ->where(
  102. $addressTable . '.quote_address_id IS NULL'
  103. );
  104. $updateOrderAddress = $setup->getConnection()->updateFromSelect(
  105. $updateOrderAddress,
  106. $addressTable
  107. );
  108. $setup->getConnection()->query($updateOrderAddress);
  109. }
  110. /**
  111. * {@inheritdoc}
  112. */
  113. public static function getDependencies()
  114. {
  115. return [
  116. ConvertSerializedDataToJson::class
  117. ];
  118. }
  119. /**
  120. * {@inheritdoc}
  121. */
  122. public static function getVersion()
  123. {
  124. return '2.0.8';
  125. }
  126. /**
  127. * {@inheritdoc}
  128. */
  129. public function getAliases()
  130. {
  131. return [];
  132. }
  133. }