1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CatalogInventory\Observer;
- use Magento\Framework\Event\Observer as EventObserver;
- use Magento\Framework\Event\ObserverInterface;
- class ReindexQuoteInventoryObserver implements ObserverInterface
- {
- /**
- * @var \Magento\CatalogInventory\Model\Indexer\Stock\Processor
- */
- protected $stockIndexerProcessor;
- /**
- * @var \Magento\Catalog\Model\Indexer\Product\Price\Processor
- */
- protected $priceIndexer;
- /**
- * @var \Magento\CatalogInventory\Observer\ItemsForReindex
- */
- protected $itemsForReindex;
- /**
- * @param \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor
- * @param \Magento\Catalog\Model\Indexer\Product\Price\Processor $priceIndexer
- * @param ItemsForReindex $itemsForReindex
- */
- public function __construct(
- \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor,
- \Magento\Catalog\Model\Indexer\Product\Price\Processor $priceIndexer,
- ItemsForReindex $itemsForReindex
- ) {
- $this->stockIndexerProcessor = $stockIndexerProcessor;
- $this->priceIndexer = $priceIndexer;
- $this->itemsForReindex = $itemsForReindex;
- }
- /**
- * Refresh stock index for specific stock items after successful order placement
- *
- * @param EventObserver $observer
- * @return void
- */
- public function execute(EventObserver $observer)
- {
- // Reindex quote ids
- $quote = $observer->getEvent()->getQuote();
- $productIds = [];
- foreach ($quote->getAllItems() as $item) {
- $productIds[$item->getProductId()] = $item->getProductId();
- $children = $item->getChildrenItems();
- if ($children) {
- foreach ($children as $childItem) {
- $productIds[$childItem->getProductId()] = $childItem->getProductId();
- }
- }
- }
- if ($productIds) {
- $this->stockIndexerProcessor->reindexList($productIds);
- }
- // Reindex previously remembered items
- $productIds = [];
- foreach ($this->itemsForReindex->getItems() as $item) {
- $item->save();
- $productIds[] = $item->getProductId();
- }
- if (!empty($productIds)) {
- $this->priceIndexer->reindexList($productIds);
- }
- $this->itemsForReindex->clear();
- // Clear list of remembered items - we don't need it anymore
- }
- }
|