sourceItemRepository = $sourceItemRepository; $this->searchCriteriaBuilderFactory = $searchCriteriaBuilderFactory; $this->sourceItemsProcessor = $sourceItemsProcessor; } /** * @param Copier $subject * @param Product $result * @param Product $product * @return Product $result * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterCopy( Copier $subject, Product $result, Product $product ) { $this->copySourceItems($product->getSku(), $result->getSku()); $result->setStatus(Status::STATUS_DISABLED); return $result; } /** * @param string $sku * @return array */ private function getSourceItems(string $sku): array { /** @var SearchCriteriaBuilder $searchCriteriaBuilder */ $searchCriteriaBuilder = $this->searchCriteriaBuilderFactory->create(); $searchCriteria = $searchCriteriaBuilder ->addFilter(SourceItemInterface::SKU, $sku) ->create(); return $this->sourceItemRepository->getList($searchCriteria)->getItems(); } /** * @param string $originalSku * @param string $duplicateSku */ private function copySourceItems(string $originalSku, string $duplicateSku) { $sourceItems = $this->getSourceItems($originalSku); $duplicateItemData = []; if ($sourceItems) { foreach ($sourceItems as $sourceItem) { $duplicateItemData[] = [ SourceItemInterface::SKU => $duplicateSku, SourceItemInterface::SOURCE_CODE => $sourceItem->getSourceCode(), SourceItemInterface::QUANTITY => $sourceItem->getQuantity(), SourceItemInterface::STATUS => $sourceItem->getStatus() ]; } } $this->sourceItemsProcessor->process( $duplicateSku, $duplicateItemData ); } }