Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SourceCarrierLinkManagement.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
17 use Magento\Inventory\Model\ResourceModel\SourceCarrierLink\CollectionFactory;
20 
25 {
29  private $resourceConnection;
30 
34  private $sourceCarrierLinkResource;
35 
39  private $collectionProcessor;
40 
44  private $carrierLinkCollectionFactory;
45 
49  private $searchCriteriaBuilder;
50 
58  public function __construct(
59  ResourceConnection $resourceConnection,
60  SourceCarrierLinkResourceModel $sourceCarrierLinkResource,
61  CollectionProcessorInterface $collectionProcessor,
62  CollectionFactory $carrierLinkCollectionFactory,
63  SearchCriteriaBuilder $searchCriteriaBuilder
64  ) {
65  $this->resourceConnection = $resourceConnection;
66  $this->sourceCarrierLinkResource = $sourceCarrierLinkResource;
67  $this->collectionProcessor = $collectionProcessor;
68  $this->carrierLinkCollectionFactory = $carrierLinkCollectionFactory;
69  $this->searchCriteriaBuilder = $searchCriteriaBuilder;
70  }
71 
76  {
77  $this->deleteCurrentCarrierLinks($source);
78 
79  $carrierLinks = $source->getCarrierLinks();
80  if (null !== $carrierLinks && count($carrierLinks)) {
81  $this->saveNewCarrierLinks($source);
82  }
83  }
84 
89  private function deleteCurrentCarrierLinks(SourceInterface $source)
90  {
91  $connection = $this->resourceConnection->getConnection();
92  $connection->delete(
93  $this->resourceConnection->getTableName(SourceCarrierLink::TABLE_NAME_SOURCE_CARRIER_LINK),
94  $connection->quoteInto('source_code = ?', $source->getSourceCode())
95  );
96  }
97 
102  private function saveNewCarrierLinks(SourceInterface $source)
103  {
104  $carrierLinkData = [];
105  foreach ($source->getCarrierLinks() as $carrierLink) {
106  $carrierLinkData[] = [
107  'source_code' => $source->getSourceCode(),
108  SourceCarrierLinkInterface::CARRIER_CODE => $carrierLink->getCarrierCode(),
109  SourceCarrierLinkInterface::POSITION => $carrierLink->getPosition(),
110  ];
111  }
112 
113  $this->resourceConnection->getConnection()->insertMultiple(
114  $this->resourceConnection->getTableName(SourceCarrierLink::TABLE_NAME_SOURCE_CARRIER_LINK),
115  $carrierLinkData
116  );
117  }
118 
122  public function loadCarrierLinksBySource(SourceInterface $source): void
123  {
124  $searchCriteria = $this->searchCriteriaBuilder
125  ->addFilter(SourceCarrierLinkInterface::SOURCE_CODE, $source->getSourceCode())
126  ->create();
127 
129  $collection = $this->carrierLinkCollectionFactory->create();
130  $this->collectionProcessor->process($searchCriteria, $collection);
131 
132  $source->setCarrierLinks($collection->getItems());
133  }
134 }
$source
Definition: source.php:23
$searchCriteria
$searchCriteriaBuilder
$connection
Definition: bulk.php:13