Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CopySourceItemsPlugin.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
14 use Magento\Framework\Api\SearchCriteriaBuilderFactory;
18 
23 {
27  private $sourceItemRepository;
28 
32  private $searchCriteriaBuilderFactory;
33 
37  private $sourceItemsProcessor;
38 
44  public function __construct(
45  SourceItemRepositoryInterface $sourceItemRepository,
46  SearchCriteriaBuilderFactory $searchCriteriaBuilderFactory,
47  SourceItemsProcessor $sourceItemsProcessor
48  ) {
49  $this->sourceItemRepository = $sourceItemRepository;
50  $this->searchCriteriaBuilderFactory = $searchCriteriaBuilderFactory;
51  $this->sourceItemsProcessor = $sourceItemsProcessor;
52  }
53 
61  public function afterCopy(
62  Copier $subject,
65  ) {
66  $this->copySourceItems($product->getSku(), $result->getSku());
67  $result->setStatus(Status::STATUS_DISABLED);
68 
69  return $result;
70  }
71 
76  private function getSourceItems(string $sku): array
77  {
79  $searchCriteriaBuilder = $this->searchCriteriaBuilderFactory->create();
81  ->addFilter(SourceItemInterface::SKU, $sku)
82  ->create();
83  return $this->sourceItemRepository->getList($searchCriteria)->getItems();
84  }
85 
90  private function copySourceItems(string $originalSku, string $duplicateSku)
91  {
92  $sourceItems = $this->getSourceItems($originalSku);
93 
94  $duplicateItemData = [];
95  if ($sourceItems) {
96  foreach ($sourceItems as $sourceItem) {
97  $duplicateItemData[] = [
98  SourceItemInterface::SKU => $duplicateSku,
100  SourceItemInterface::QUANTITY => $sourceItem->getQuantity(),
102  ];
103  }
104  }
105 
106  $this->sourceItemsProcessor->process(
107  $duplicateSku,
108  $duplicateItemData
109  );
110  }
111 }
afterCopy(Copier $subject, Product $result, Product $product)
$searchCriteria
$sourceItems
$searchCriteriaBuilder
__construct(SourceItemRepositoryInterface $sourceItemRepository, SearchCriteriaBuilderFactory $searchCriteriaBuilderFactory, SourceItemsProcessor $sourceItemsProcessor)
$sourceItemRepository