sourceItemConfigurationsSave = $sourceItemConfigurationsSave; $this->sourceItemConfigurationFactory = $sourceItemConfigurationFactory; $this->dataObjectHelper = $dataObjectHelper; $this->sourceItemsConfigurationDelete = $sourceItemsConfigurationDelete; } /** * Process configuration * * @param string $sku * @param array $sourceItemsData * @return void * @throws InputException * @SuppressWarnings(PHPMD.LongVariable) */ public function process($sku, array $sourceItemsData) { $sourceItemConfigurations = []; foreach ($sourceItemsData as $sourceItemData) { $this->validateSourceItemData($sourceItemData); $sourceItemConfiguration = $this->sourceItemConfigurationFactory->create(); if ($sourceItemData['notify_stock_qty_use_default'] == 1) { unset($sourceItemData['notify_stock_qty']); } $sourceItemData[SourceItemInterface::SKU] = $sku; $this->dataObjectHelper->populateWithArray( $sourceItemConfiguration, $sourceItemData, SourceItemConfigurationInterface::class ); $sourceItemConfigurations[] = $sourceItemConfiguration; } if (count($sourceItemConfigurations) > 0) { $this->deleteSourceItemsConfiguration($sourceItemConfigurations); $this->sourceItemConfigurationsSave->execute($sourceItemConfigurations); } } /** * Perform validation on source item data * * @param array $sourceItemData * @return void * @throws InputException */ private function validateSourceItemData(array $sourceItemData) { if (!isset($sourceItemData[SourceItemInterface::SOURCE_CODE])) { throw new InputException(__('Wrong Product to Source relation parameters given.')); } } /** * Delete source items configurations * * @param SourceItemInterface[] $sourceItemsConfigurations * @return void * @SuppressWarnings(PHPMD.LongVariable) */ private function deleteSourceItemsConfiguration(array $sourceItemsConfigurations) { /** @var SourceItemInterface $sourceItemConfiguration */ $this->sourceItemsConfigurationDelete->execute($sourceItemsConfigurations); } }