12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CatalogInventory\Observer;
- use Magento\Framework\Event\ObserverInterface;
- use Magento\CatalogInventory\Api\StockManagementInterface;
- use Magento\Framework\Event\Observer as EventObserver;
- /**
- * Catalog inventory module observer
- */
- class RevertQuoteInventoryObserver implements ObserverInterface
- {
- /**
- * @var ProductQty
- */
- protected $productQty;
- /**
- * @var StockManagementInterface
- */
- protected $stockManagement;
- /**
- * @var \Magento\CatalogInventory\Model\Indexer\Stock\Processor
- */
- protected $stockIndexerProcessor;
- /**
- * @var \Magento\Catalog\Model\Indexer\Product\Price\Processor
- */
- protected $priceIndexer;
- /**
- * RevertQuoteInventory constructor.
- * @param ProductQty $productQty
- * @param StockManagementInterface $stockManagement
- * @param \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor
- * @param \Magento\Catalog\Model\Indexer\Product\Price\Processor $priceIndexer
- */
- public function __construct(
- ProductQty $productQty,
- StockManagementInterface $stockManagement,
- \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor,
- \Magento\Catalog\Model\Indexer\Product\Price\Processor $priceIndexer
- ) {
- $this->productQty = $productQty;
- $this->stockManagement = $stockManagement;
- $this->stockIndexerProcessor = $stockIndexerProcessor;
- $this->priceIndexer = $priceIndexer;
- }
- /**
- * Revert quote items inventory data (cover not success order place case)
- *
- * @param EventObserver $observer
- * @return void
- */
- public function execute(EventObserver $observer)
- {
- $quote = $observer->getEvent()->getQuote();
- $items = $this->productQty->getProductQty($quote->getAllItems());
- $revertedItems = $this->stockManagement->revertProductsSale($items, $quote->getStore()->getWebsiteId());
- $productIds = array_keys($revertedItems);
- if (!empty($productIds)) {
- $this->stockIndexerProcessor->reindexList($productIds);
- $this->priceIndexer->reindexList($productIds);
- }
- // Clear flag, so if order placement retried again with success - it will be processed
- $quote->setInventoryProcessed(false);
- }
- }
|