| 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;
 
-     }
 
- }
 
 
  |