문제

Events.xml

<event name="controller_action_postdispatch_customer_account_loginPost">
       <observer name="customer_login_observer" instance="vendor\module\Observer\Customercart" />
 </event>

Customercart.php

<?php

namespace vendor\module\Observer;

class Customercart implements \Magento\Framework\Event\ObserverInterface
{
public function __construct(
         \Magento\Framework\Message\ManagerInterface $messageManager,
         \Magento\Checkout\Model\Session $session,
     \Magento\Customer\Model\Session $customerSession,
        )
    {
         $this->_session = $session;
    $this->_customerSession = $customerSession;
         $this->_messageManager = $messageManager;
    }
public function execute(\Magento\Framework\Event\Observer $observer)
{
        $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/teqwewq.log');
        $logger = new \Zend\Log\Logger();
        $logger->addWriter($writer);
        if($this->_customerSession->isLoggedIn()){
          $customerId=$this->_customerSession->getCustomer()->getId();
        }
        $currentQuote=$this->_session->getQuote();
        $currentQuoteItems=$currentQuote->getAllVisibleItems();
        $currentQuoteItemSku = array();
        foreach ($currentQuoteItems as $currentQuoteItem) {
                   array_push($currentQuoteItemSku, $currentQuoteItem->getSku());
                   $logger->info($currentQuoteItem->getSku());
                }
          $logger->info("-------");
        $clbStatus=false;$normalProductStatus=false;
        foreach($currentQuoteItemSku as $value){
          if($value=="some1" || $value=="some2"){
            $clbStatus=true;
          }
          else{
            $normalProductStatus=true;
          }
        }
        $logger->info($normalProductStatus);
        $logger->info($clbStatus);
        $currentQuote->setTotalsCollectedFlag(false)->save();
        if($clbStatus && $normalProductStatus){
        foreach ($currentQuoteItems as $currentQuoteItem) {
                        if($currentQuoteItem->getSku()=="some1" ||$currentQuoteItem->getSku()=="some2"){
                            $itemId = $currentQuoteItem->getItemId();
                            $currentQuote->deleteItem($currentQuoteItem);//->save();
                        }
                }
        }
        $currentQuote->collectTotals()->save();
        return $this;

}
}

Screen shot ref https://nimb.ws/qSPujg

The subtotal does not change on the cart and also in the window.checkoutConfig.quoteData.base_grand_total

eg

A product $40

B product $20 // removed

subtotal $60 //remains same - after a refresh , even go to checkout

Any suggestion?

도움이 되었습니까?

해결책

Try to add $currentQuote->setTriggerRecollect(1); before your collectTotals().

It will be :

$currentQuote->setTriggerRecollect(1);
$currentQuote->collectTotals()->save();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top