1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\InventoryConfiguration\Model;
use Magento\CatalogInventory\Api\Data\StockItemInterface;
use Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory;
use Magento\CatalogInventory\Api\StockItemRepositoryInterface;
use Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory;
use Magento\CatalogInventory\Model\Stock;
use Magento\InventoryCatalogApi\Model\GetProductIdsBySkusInterface;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Exception\LocalizedException;
class GetLegacyStockItem
{
/**
* @var StockItemInterfaceFactory
*/
private $stockItemFactory;
/**
* @var StockItemCriteriaInterfaceFactory
*/
private $legacyStockItemCriteriaFactory;
/**
* @var StockItemRepositoryInterface
*/
private $legacyStockItemRepository;
/**
* @var GetProductIdsBySkusInterface
*/
private $getProductIdsBySkus;
/**
* @param StockItemInterfaceFactory $stockItemFactory
* @param StockItemCriteriaInterfaceFactory $legacyStockItemCriteriaFactory
* @param StockItemRepositoryInterface $legacyStockItemRepository
* @param GetProductIdsBySkusInterface $getProductIdsBySkus
*/
public function __construct(
StockItemInterfaceFactory $stockItemFactory,
StockItemCriteriaInterfaceFactory $legacyStockItemCriteriaFactory,
StockItemRepositoryInterface $legacyStockItemRepository,
GetProductIdsBySkusInterface $getProductIdsBySkus
) {
$this->stockItemFactory = $stockItemFactory;
$this->legacyStockItemCriteriaFactory = $legacyStockItemCriteriaFactory;
$this->legacyStockItemRepository = $legacyStockItemRepository;
$this->getProductIdsBySkus = $getProductIdsBySkus;
}
/**
* @param string $sku
* @return StockItemInterface
* @throws LocalizedException
*/
public function execute(string $sku): StockItemInterface
{
$searchCriteria = $this->legacyStockItemCriteriaFactory->create();
try {
$productId = $this->getProductIdsBySkus->execute([$sku])[$sku];
} catch (NoSuchEntityException $skuNotFoundInCatalog) {
$stockItem = $this->stockItemFactory->create();
// Make possible to Manage Stock for Products removed from Catalog
$stockItem->setManageStock(true);
return $stockItem;
}
$searchCriteria->addFilter(StockItemInterface::PRODUCT_ID, StockItemInterface::PRODUCT_ID, $productId);
// Stock::DEFAULT_STOCK_ID is used until we have proper multi-stock item configuration
$searchCriteria->addFilter(StockItemInterface::STOCK_ID, StockItemInterface::STOCK_ID, Stock::DEFAULT_STOCK_ID);
$searchCriteria->setLimit(1, 1);
$stockItemCollection = $this->legacyStockItemRepository->getList($searchCriteria);
if ($stockItemCollection->getTotalCount() === 0) {
return $this->stockItemFactory->create();
}
$stockItems = $stockItemCollection->getItems();
$stockItem = reset($stockItems);
return $stockItem;
}
}