<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\InventoryCatalog\Model; use Magento\CatalogInventory\Model\Stock\Item; use Magento\InventoryApi\Api\Data\SourceItemInterface; use Magento\InventoryApi\Api\Data\SourceItemInterfaceFactory; use Magento\InventoryApi\Api\SourceItemsSaveInterface; use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface; use Magento\InventoryCatalogApi\Model\GetSkusByProductIdsInterface; class UpdateSourceItemBasedOnLegacyStockItem { /** * @var SourceItemInterfaceFactory */ private $sourceItemFactory; /** * @var SourceItemsSaveInterface */ private $sourceItemsSave; /** * @var DefaultSourceProviderInterface */ private $defaultSourceProvider; /** * @var GetSkusByProductIdsInterface */ private $getSkusByProductIds; /** * @var GetDefaultSourceItemBySku */ private $getDefaultSourceItemBySku; /** * @param SourceItemInterfaceFactory $sourceItemFactory * @param SourceItemsSaveInterface $sourceItemsSave * @param DefaultSourceProviderInterface $defaultSourceProvider * @param GetSkusByProductIdsInterface $getSkusByProductIds * @param GetDefaultSourceItemBySku $getDefaultSourceItemBySku * @SuppressWarnings(PHPMD.LongVariable) */ public function __construct( SourceItemInterfaceFactory $sourceItemFactory, SourceItemsSaveInterface $sourceItemsSave, DefaultSourceProviderInterface $defaultSourceProvider, GetSkusByProductIdsInterface $getSkusByProductIds, GetDefaultSourceItemBySku $getDefaultSourceItemBySku ) { $this->sourceItemFactory = $sourceItemFactory; $this->sourceItemsSave = $sourceItemsSave; $this->getSkusByProductIds = $getSkusByProductIds; $this->getDefaultSourceItemBySku = $getDefaultSourceItemBySku; $this->defaultSourceProvider = $defaultSourceProvider; } /** * @param Item $legacyStockItem * @return void * @throws \Magento\Framework\Exception\CouldNotSaveException * @throws \Magento\Framework\Exception\InputException * @throws \Magento\Framework\Validation\ValidationException */ public function execute(Item $legacyStockItem) { $productSku = $this->getSkusByProductIds ->execute([$legacyStockItem->getProductId()])[$legacyStockItem->getProductId()]; $sourceItem = $this->getDefaultSourceItemBySku->execute($productSku); if ($sourceItem === null) { /** @var SourceItemInterface $sourceItem */ $sourceItem = $this->sourceItemFactory->create(); $sourceItem->setSourceCode($this->defaultSourceProvider->getCode()); $sourceItem->setSku($productSku); } $sourceItem->setQuantity((float)$legacyStockItem->getQty()); $sourceItem->setStatus((int)$legacyStockItem->getIsInStock()); $this->sourceItemsSave->execute([$sourceItem]); } }