AssignDefaultSourceToShipments.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\InventoryShipping\Setup\Operation;
  8. use Magento\Framework\App\ResourceConnection;
  9. use Magento\Framework\Setup\ModuleDataSetupInterface;
  10. use Magento\Framework\DB\Adapter\Pdo\Mysql;
  11. use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface;
  12. class AssignDefaultSourceToShipments
  13. {
  14. /**
  15. * Constant for fields in data array
  16. */
  17. const SHIPMENT_ID = 'shipment_id';
  18. const SOURCE_CODE = 'source_code';
  19. /**
  20. * @var ResourceConnection
  21. */
  22. private $resourceConnection;
  23. /**
  24. * @var DefaultSourceProviderInterface
  25. */
  26. private $defaultSourceProvider;
  27. /**
  28. * @param ResourceConnection $resourceConnection
  29. * @param DefaultSourceProviderInterface $defaultSourceProvider
  30. */
  31. public function __construct(
  32. ResourceConnection $resourceConnection,
  33. DefaultSourceProviderInterface $defaultSourceProvider
  34. ) {
  35. $this->resourceConnection = $resourceConnection;
  36. $this->defaultSourceProvider = $defaultSourceProvider;
  37. }
  38. /**
  39. * @param ModuleDataSetupInterface $setup
  40. * @return void
  41. */
  42. public function execute(ModuleDataSetupInterface $setup)
  43. {
  44. $defaultSourceCode = $this->defaultSourceProvider->getCode();
  45. $sourceShipmentTable = $setup->getTable('inventory_shipment_source');
  46. $salesShipmentTable = $setup->getTable('sales_shipment');
  47. $selectForInsert = $this->resourceConnection->getConnection()
  48. ->select()
  49. ->from(
  50. $salesShipmentTable,
  51. [
  52. 'entity_id',
  53. 'source_code' => new \Zend_Db_Expr('\'' .$defaultSourceCode . '\'')
  54. ]
  55. );
  56. $sql = $this->resourceConnection->getConnection()->insertFromSelect(
  57. $selectForInsert,
  58. $sourceShipmentTable,
  59. [
  60. self::SHIPMENT_ID,
  61. self::SOURCE_CODE,
  62. ],
  63. Mysql::INSERT_ON_DUPLICATE
  64. );
  65. $this->resourceConnection->getConnection()->query($sql);
  66. }
  67. }