123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\InventoryCatalogAdminUi\Plugin\Catalog;
- use Magento\Catalog\Model\Product;
- use Magento\Catalog\Model\Product\Attribute\Source\Status;
- use Magento\Catalog\Model\Product\Copier;
- use Magento\Framework\Api\SearchCriteriaBuilder;
- use Magento\Framework\Api\SearchCriteriaBuilderFactory;
- use Magento\InventoryApi\Api\Data\SourceItemInterface;
- use Magento\InventoryApi\Api\SourceItemRepositoryInterface;
- use Magento\InventoryCatalogAdminUi\Observer\SourceItemsProcessor;
- /**
- * Copies source items from the original product to the duplicate
- */
- class CopySourceItemsPlugin
- {
- /**
- * @var SourceItemRepositoryInterface
- */
- private $sourceItemRepository;
- /**
- * @var SearchCriteriaBuilderFactory
- */
- private $searchCriteriaBuilderFactory;
- /**
- * @var SourceItemsProcessor
- */
- private $sourceItemsProcessor;
- /**
- * @param SourceItemRepositoryInterface $sourceItemRepository
- * @param SearchCriteriaBuilderFactory $searchCriteriaBuilderFactory
- * @param SourceItemsProcessor $sourceItemsProcessor
- */
- public function __construct(
- SourceItemRepositoryInterface $sourceItemRepository,
- SearchCriteriaBuilderFactory $searchCriteriaBuilderFactory,
- SourceItemsProcessor $sourceItemsProcessor
- ) {
- $this->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
- );
- }
- }
|