123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CatalogInventory\Model;
- use Magento\CatalogInventory\Model\Spi\StockRegistryProviderInterface;
- use Magento\CatalogInventory\Api\StockRepositoryInterface;
- use Magento\CatalogInventory\Api\StockItemRepositoryInterface;
- use Magento\CatalogInventory\Api\StockStatusRepositoryInterface;
- use Magento\CatalogInventory\Api\Data\StockInterfaceFactory;
- use Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory;
- use Magento\CatalogInventory\Api\Data\StockStatusInterfaceFactory;
- use Magento\CatalogInventory\Api\StockCriteriaInterfaceFactory;
- use Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory;
- use Magento\CatalogInventory\Api\StockStatusCriteriaInterfaceFactory;
- use Magento\Store\Model\StoreManagerInterface;
- /**
- * Class StockRegistryProvider
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class StockRegistryProvider implements StockRegistryProviderInterface
- {
- /**
- * @var StockRepositoryInterface
- */
- protected $stockRepository;
- /**
- * @var StockInterfaceFactory
- */
- protected $stockFactory;
- /**
- * @var StockItemRepositoryInterface
- */
- protected $stockItemRepository;
- /**
- * @var StockItemInterfaceFactory
- */
- protected $stockItemFactory;
- /**
- * @var StockStatusRepositoryInterface
- */
- protected $stockStatusRepository;
- /**
- * @var StockStatusInterfaceFactory
- */
- protected $stockStatusFactory;
- /**
- * @var StockCriteriaInterfaceFactory
- */
- protected $stockCriteriaFactory;
- /**
- * @var StockItemCriteriaInterfaceFactory
- */
- protected $stockItemCriteriaFactory;
- /**
- * @var StockStatusCriteriaInterfaceFactory
- */
- protected $stockStatusCriteriaFactory;
- /**
- * @var StockRegistryStorage
- */
- protected $stockRegistryStorage;
- /**
- * @param StockRepositoryInterface $stockRepository
- * @param StockInterfaceFactory $stockFactory
- * @param StockItemRepositoryInterface $stockItemRepository
- * @param StockItemInterfaceFactory $stockItemFactory
- * @param StockStatusRepositoryInterface $stockStatusRepository
- * @param StockStatusInterfaceFactory $stockStatusFactory
- * @param StockCriteriaInterfaceFactory $stockCriteriaFactory
- * @param StockItemCriteriaInterfaceFactory $stockItemCriteriaFactory
- * @param StockStatusCriteriaInterfaceFactory $stockStatusCriteriaFactory
- * @SuppressWarnings(PHPMD.ExcessiveParameterList)
- */
- public function __construct(
- StockRepositoryInterface $stockRepository,
- StockInterfaceFactory $stockFactory,
- StockItemRepositoryInterface $stockItemRepository,
- StockItemInterfaceFactory $stockItemFactory,
- StockStatusRepositoryInterface $stockStatusRepository,
- StockStatusInterfaceFactory $stockStatusFactory,
- StockCriteriaInterfaceFactory $stockCriteriaFactory,
- StockItemCriteriaInterfaceFactory $stockItemCriteriaFactory,
- StockStatusCriteriaInterfaceFactory $stockStatusCriteriaFactory
- ) {
- $this->stockRepository = $stockRepository;
- $this->stockFactory = $stockFactory;
- $this->stockItemRepository = $stockItemRepository;
- $this->stockItemFactory = $stockItemFactory;
- $this->stockStatusRepository = $stockStatusRepository;
- $this->stockStatusFactory = $stockStatusFactory;
- $this->stockCriteriaFactory = $stockCriteriaFactory;
- $this->stockItemCriteriaFactory = $stockItemCriteriaFactory;
- $this->stockStatusCriteriaFactory = $stockStatusCriteriaFactory;
- }
- /**
- * @param int|null $scopeId
- * @return \Magento\CatalogInventory\Api\Data\StockInterface
- */
- public function getStock($scopeId)
- {
- $stock = $this->getStockRegistryStorage()->getStock($scopeId);
- if (null === $stock) {
- $criteria = $this->stockCriteriaFactory->create();
- $criteria->setScopeFilter($scopeId);
- $collection = $this->stockRepository->getList($criteria);
- $stock = current($collection->getItems());
- if ($stock && $stock->getStockId()) {
- $this->getStockRegistryStorage()->setStock($scopeId, $stock);
- } else {
- $stock = $this->stockFactory->create();
- }
- }
- return $stock;
- }
- /**
- * @param int $productId
- * @param int $scopeId
- * @return \Magento\CatalogInventory\Api\Data\StockItemInterface
- */
- public function getStockItem($productId, $scopeId)
- {
- $stockItem = $this->getStockRegistryStorage()->getStockItem($productId, $scopeId);
- if (null === $stockItem) {
- $criteria = $this->stockItemCriteriaFactory->create();
- $criteria->setProductsFilter($productId);
- $collection = $this->stockItemRepository->getList($criteria);
- $stockItem = current($collection->getItems());
- if ($stockItem && $stockItem->getItemId()) {
- $this->getStockRegistryStorage()->setStockItem($productId, $scopeId, $stockItem);
- } else {
- $stockItem = $this->stockItemFactory->create();
- }
- }
- return $stockItem;
- }
- /**
- * @param int $productId
- * @param int $scopeId
- * @return \Magento\CatalogInventory\Api\Data\StockStatusInterface
- */
- public function getStockStatus($productId, $scopeId)
- {
- $stockStatus = $this->getStockRegistryStorage()->getStockStatus($productId, $scopeId);
- if (null === $stockStatus) {
- $criteria = $this->stockStatusCriteriaFactory->create();
- $criteria->setProductsFilter($productId);
- $criteria->setScopeFilter($scopeId);
- $collection = $this->stockStatusRepository->getList($criteria);
- $stockStatus = current($collection->getItems());
- if ($stockStatus && $stockStatus->getProductId()) {
- $this->getStockRegistryStorage()->setStockStatus($productId, $scopeId, $stockStatus);
- } else {
- $stockStatus = $this->stockStatusFactory->create();
- }
- }
- return $stockStatus;
- }
- /**
- * @return StockRegistryStorage
- */
- private function getStockRegistryStorage()
- {
- if (null === $this->stockRegistryStorage) {
- $this->stockRegistryStorage = \Magento\Framework\App\ObjectManager::getInstance()
- ->get(\Magento\CatalogInventory\Model\StockRegistryStorage::class);
- }
- return $this->stockRegistryStorage;
- }
- }
|