123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CatalogInventory\Model;
- use Magento\Catalog\Model\ProductFactory;
- use Magento\CatalogInventory\Api\Data\StockItemInterface;
- use Magento\CatalogInventory\Api\StockConfigurationInterface;
- use Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory;
- use Magento\CatalogInventory\Api\StockItemRepositoryInterface;
- use Magento\CatalogInventory\Api\StockRegistryInterface;
- use Magento\CatalogInventory\Model\Spi\StockRegistryProviderInterface;
- /**
- * Class StockRegistry
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class StockRegistry implements StockRegistryInterface
- {
- /**
- * @var StockConfigurationInterface
- */
- protected $stockConfiguration;
- /**
- * @var StockRegistryProviderInterface
- */
- protected $stockRegistryProvider;
- /**
- * @var ProductFactory
- */
- protected $productFactory;
- /**
- * @var StockItemRepositoryInterface
- */
- protected $stockItemRepository;
- /**
- * @var \Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory
- */
- protected $criteriaFactory;
- /**
- * @param StockConfigurationInterface $stockConfiguration
- * @param StockRegistryProviderInterface $stockRegistryProvider
- * @param StockItemRepositoryInterface $stockItemRepository
- * @param StockItemCriteriaInterfaceFactory $criteriaFactory
- * @param ProductFactory $productFactory
- */
- public function __construct(
- StockConfigurationInterface $stockConfiguration,
- StockRegistryProviderInterface $stockRegistryProvider,
- StockItemRepositoryInterface $stockItemRepository,
- StockItemCriteriaInterfaceFactory $criteriaFactory,
- ProductFactory $productFactory
- ) {
- $this->stockConfiguration = $stockConfiguration;
- $this->stockRegistryProvider = $stockRegistryProvider;
- $this->stockItemRepository = $stockItemRepository;
- $this->criteriaFactory = $criteriaFactory;
- $this->productFactory = $productFactory;
- }
- /**
- * @param int $scopeId
- * @return \Magento\CatalogInventory\Api\Data\StockInterface
- */
- public function getStock($scopeId = null)
- {
- $scopeId = $this->stockConfiguration->getDefaultScopeId();
- return $this->stockRegistryProvider->getStock($scopeId);
- }
- /**
- * @param int $productId
- * @param int $scopeId
- * @return \Magento\CatalogInventory\Api\Data\StockItemInterface
- */
- public function getStockItem($productId, $scopeId = null)
- {
- $scopeId = $this->stockConfiguration->getDefaultScopeId();
- return $this->stockRegistryProvider->getStockItem($productId, $scopeId);
- }
- /**
- * @param string $productSku
- * @param int $scopeId
- * @return \Magento\CatalogInventory\Api\Data\StockItemInterface
- * @throws \Magento\Framework\Exception\NoSuchEntityException
- */
- public function getStockItemBySku($productSku, $scopeId = null)
- {
- $scopeId = $this->stockConfiguration->getDefaultScopeId();
- $productId = $this->resolveProductId($productSku);
- return $this->stockRegistryProvider->getStockItem($productId, $scopeId);
- }
- /**
- * @param int $productId
- * @param int $scopeId
- * @return \Magento\CatalogInventory\Api\Data\StockStatusInterface
- */
- public function getStockStatus($productId, $scopeId = null)
- {
- $scopeId = $this->stockConfiguration->getDefaultScopeId();
- return $this->stockRegistryProvider->getStockStatus($productId, $scopeId);
- }
- /**
- * @param string $productSku
- * @param int $scopeId
- * @return \Magento\CatalogInventory\Api\Data\StockStatusInterface
- * @throws \Magento\Framework\Exception\NoSuchEntityException
- */
- public function getStockStatusBySku($productSku, $scopeId = null)
- {
- $scopeId = $this->stockConfiguration->getDefaultScopeId();
- $productId = $this->resolveProductId($productSku);
- return $this->getStockStatus($productId, $scopeId);
- }
- /**
- * Retrieve Product stock status
- * @param int $productId
- * @param int $scopeId
- * @return int
- */
- public function getProductStockStatus($productId, $scopeId = null)
- {
- $scopeId = $this->stockConfiguration->getDefaultScopeId();
- $stockStatus = $this->getStockStatus($productId, $scopeId);
- return $stockStatus->getStockStatus();
- }
- /**
- * @param string $productSku
- * @param null $scopeId
- * @return int
- * @throws \Magento\Framework\Exception\NoSuchEntityException
- */
- public function getProductStockStatusBySku($productSku, $scopeId = null)
- {
- $scopeId = $this->stockConfiguration->getDefaultScopeId();
- $productId = $this->resolveProductId($productSku);
- return $this->getProductStockStatus($productId, $scopeId);
- }
- /**
- * @inheritdoc
- */
- public function getLowStockItems($scopeId, $qty, $currentPage = 1, $pageSize = 0)
- {
- $criteria = $this->criteriaFactory->create();
- $criteria->setLimit($currentPage, $pageSize);
- $criteria->setScopeFilter($scopeId);
- $criteria->setQtyFilter('<=', $qty);
- $criteria->addField('qty');
- return $this->stockItemRepository->getList($criteria);
- }
- /**
- * @inheritdoc
- */
- public function updateStockItemBySku($productSku, \Magento\CatalogInventory\Api\Data\StockItemInterface $stockItem)
- {
- $productId = $this->resolveProductId($productSku);
- $websiteId = $stockItem->getWebsiteId() ?: null;
- $origStockItem = $this->getStockItem($productId, $websiteId);
- $data = $stockItem->getData();
- if ($origStockItem->getItemId()) {
- unset($data['item_id']);
- }
- $origStockItem->addData($data);
- $origStockItem->setProductId($productId);
- return $this->stockItemRepository->save($origStockItem)->getItemId();
- }
- /**
- * @param string $productSku
- * @return int
- * @throws \Magento\Framework\Exception\NoSuchEntityException
- */
- protected function resolveProductId($productSku)
- {
- $product = $this->productFactory->create();
- $productId = $product->getIdBySku($productSku);
- if (!$productId) {
- throw new \Magento\Framework\Exception\NoSuchEntityException(
- __(
- 'The Product with the "%1" SKU doesn\'t exist.',
- $productSku
- )
- );
- }
- return $productId;
- }
- }
|