resourceConnection = $resourceConnection; $this->isSourceItemManagementAllowedForProductType = $isSourceItemManagementAllowedForProductType; $this->getProductTypesBySkus = $getProductTypesBySkus; } /** * Assign sources to products * @param array $skus * @param array $sourceCodes * @return int */ public function execute(array $skus, array $sourceCodes): int { $types = $this->getProductTypesBySkus->execute($skus); $connection = $this->resourceConnection->getConnection(); $tableName = $this->resourceConnection->getTableName(SourceItem::TABLE_NAME_SOURCE_ITEM); $count = 0; foreach ($types as $sku => $type) { if ($this->isSourceItemManagementAllowedForProductType->execute($type)) { foreach ($sourceCodes as $sourceCode) { try { $connection->insert($tableName, [ SourceItemInterface::SOURCE_CODE => $sourceCode, SourceItemInterface::SKU => $sku, SourceItemInterface::QUANTITY => 0, SourceItemInterface::STATUS => SourceItemInterface::STATUS_OUT_OF_STOCK, ]); $count++; } catch (DuplicateException $e) { // Skip if source assignment is duplicated continue; } } } } return $count; } }