コード例 #1
0
 /**
  * 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());
     $this->stockManagement->revertProductsSale($items, $quote->getStore()->getWebsiteId());
     $productIds = array_keys($items);
     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);
 }
コード例 #2
0
 /**
  * Subtract quote items qtys from stock items related with quote items products.
  *
  * Used before order placing to make order save/place transaction smaller
  * Also called after every successful order placement to ensure subtraction of inventory
  *
  * @param EventObserver $observer
  * @return $this
  */
 public function execute(EventObserver $observer)
 {
     /** @var \Magento\Quote\Model\Quote $quote */
     $quote = $observer->getEvent()->getQuote();
     // Maybe we've already processed this quote in some event during order placement
     // e.g. call in event 'sales_model_service_quote_submit_before' and later in 'checkout_submit_all_after'
     if ($quote->getInventoryProcessed()) {
         return $this;
     }
     $items = $this->productQty->getProductQty($quote->getAllItems());
     /**
      * Remember items
      */
     $itemsForReindex = $this->stockManagement->registerProductsSale($items, $quote->getStore()->getWebsiteId());
     $this->itemsForReindex->setItems($itemsForReindex);
     $quote->setInventoryProcessed(true);
     return $this;
 }