6 declare(strict_types=1);
13 use Magento\Framework\Api\SearchCriteriaBuilderFactory;
16 use Magento\InventoryApi\Api\Data\SourceItemInterfaceFactory;
30 private $searchCriteriaBuilderFactory;
35 private $sourceItemRepository;
40 private $sourceItemFactory;
45 private $dataObjectHelper;
50 private $sourceItemsSave;
55 private $sourceItemsDelete;
66 SearchCriteriaBuilderFactory $searchCriteriaBuilderFactory,
68 SourceItemInterfaceFactory $sourceItemFactory,
73 $this->searchCriteriaBuilderFactory = $searchCriteriaBuilderFactory;
87 public function process($sku, array $sourceItemsData)
89 $sourceItemsForDelete = $this->getCurrentSourceItemsMap($sku);
90 $sourceItemsForSave = [];
92 foreach ($sourceItemsData as $sourceItemData) {
93 $this->validateSourceItemData($sourceItemData);
104 $this->dataObjectHelper->populateWithArray(
$sourceItem, $sourceItemData, SourceItemInterface::class);
109 if ($sourceItemsForSave) {
110 $this->sourceItemsSave->execute($sourceItemsForSave);
112 if ($sourceItemsForDelete) {
113 $this->sourceItemsDelete->execute($sourceItemsForDelete);
123 private function getCurrentSourceItemsMap(
string $sku): array
136 return $sourceItemMap;
144 private function validateSourceItemData(array $sourceItemData)
147 throw new InputException(
__(
'Wrong Product to Source relation parameters given.'));
__construct(SearchCriteriaBuilderFactory $searchCriteriaBuilderFactory, SourceItemRepositoryInterface $sourceItemRepository, SourceItemInterfaceFactory $sourceItemFactory, DataObjectHelper $dataObjectHelper, SourceItemsSaveInterface $sourceItemsSave, SourceItemsDeleteInterface $sourceItemsDelete)