SourceCarrierLinkManagement.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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\Inventory\Model;
  8. use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
  9. use Magento\Framework\Api\SearchCriteriaBuilder;
  10. use Magento\Framework\App\ResourceConnection;
  11. use Magento\InventoryApi\Model\SourceCarrierLinkManagementInterface;
  12. use Magento\Inventory\Model\ResourceModel\SourceCarrierLink as SourceCarrierLinkResourceModel;
  13. use Magento\Inventory\Model\ResourceModel\SourceCarrierLink;
  14. use Magento\Inventory\Model\ResourceModel\SourceCarrierLink\Collection;
  15. use Magento\Inventory\Model\ResourceModel\SourceCarrierLink\CollectionFactory;
  16. use Magento\InventoryApi\Api\Data\SourceCarrierLinkInterface;
  17. use Magento\InventoryApi\Api\Data\SourceInterface;
  18. /**
  19. * @inheritdoc
  20. */
  21. class SourceCarrierLinkManagement implements SourceCarrierLinkManagementInterface
  22. {
  23. /**
  24. * @var ResourceConnection
  25. */
  26. private $resourceConnection;
  27. /**
  28. * @var SourceCarrierLinkResourceModel
  29. */
  30. private $sourceCarrierLinkResource;
  31. /**
  32. * @var CollectionProcessorInterface
  33. */
  34. private $collectionProcessor;
  35. /**
  36. * @var CollectionFactory
  37. */
  38. private $carrierLinkCollectionFactory;
  39. /**
  40. * @var SearchCriteriaBuilder
  41. */
  42. private $searchCriteriaBuilder;
  43. /**
  44. * @param ResourceConnection $resourceConnection
  45. * @param SourceCarrierLinkResourceModel $sourceCarrierLinkResource
  46. * @param CollectionProcessorInterface $collectionProcessor
  47. * @param CollectionFactory $carrierLinkCollectionFactory
  48. * @param SearchCriteriaBuilder $searchCriteriaBuilder
  49. */
  50. public function __construct(
  51. ResourceConnection $resourceConnection,
  52. SourceCarrierLinkResourceModel $sourceCarrierLinkResource,
  53. CollectionProcessorInterface $collectionProcessor,
  54. CollectionFactory $carrierLinkCollectionFactory,
  55. SearchCriteriaBuilder $searchCriteriaBuilder
  56. ) {
  57. $this->resourceConnection = $resourceConnection;
  58. $this->sourceCarrierLinkResource = $sourceCarrierLinkResource;
  59. $this->collectionProcessor = $collectionProcessor;
  60. $this->carrierLinkCollectionFactory = $carrierLinkCollectionFactory;
  61. $this->searchCriteriaBuilder = $searchCriteriaBuilder;
  62. }
  63. /**
  64. * @inheritdoc
  65. */
  66. public function saveCarrierLinksBySource(SourceInterface $source): void
  67. {
  68. $this->deleteCurrentCarrierLinks($source);
  69. $carrierLinks = $source->getCarrierLinks();
  70. if (null !== $carrierLinks && count($carrierLinks)) {
  71. $this->saveNewCarrierLinks($source);
  72. }
  73. }
  74. /**
  75. * @param SourceInterface $source
  76. * @return void
  77. */
  78. private function deleteCurrentCarrierLinks(SourceInterface $source)
  79. {
  80. $connection = $this->resourceConnection->getConnection();
  81. $connection->delete(
  82. $this->resourceConnection->getTableName(SourceCarrierLink::TABLE_NAME_SOURCE_CARRIER_LINK),
  83. $connection->quoteInto('source_code = ?', $source->getSourceCode())
  84. );
  85. }
  86. /**
  87. * @param SourceInterface $source
  88. * @return void
  89. */
  90. private function saveNewCarrierLinks(SourceInterface $source)
  91. {
  92. $carrierLinkData = [];
  93. foreach ($source->getCarrierLinks() as $carrierLink) {
  94. $carrierLinkData[] = [
  95. 'source_code' => $source->getSourceCode(),
  96. SourceCarrierLinkInterface::CARRIER_CODE => $carrierLink->getCarrierCode(),
  97. SourceCarrierLinkInterface::POSITION => $carrierLink->getPosition(),
  98. ];
  99. }
  100. $this->resourceConnection->getConnection()->insertMultiple(
  101. $this->resourceConnection->getTableName(SourceCarrierLink::TABLE_NAME_SOURCE_CARRIER_LINK),
  102. $carrierLinkData
  103. );
  104. }
  105. /**
  106. * @inheritdoc
  107. */
  108. public function loadCarrierLinksBySource(SourceInterface $source): void
  109. {
  110. $searchCriteria = $this->searchCriteriaBuilder
  111. ->addFilter(SourceCarrierLinkInterface::SOURCE_CODE, $source->getSourceCode())
  112. ->create();
  113. /** @var Collection $collection */
  114. $collection = $this->carrierLinkCollectionFactory->create();
  115. $this->collectionProcessor->process($searchCriteria, $collection);
  116. $source->setCarrierLinks($collection->getItems());
  117. }
  118. }