Magento 2 EE getting error when we try to save order from the backend
-
06-02-2021 - |
Question
I have tried many solutions to fix this core issue. Whenever I am going to edit the order, update shipping or payment method and click on save. I am getting below error
Fatal error: Uncaught Error: Call to a member function getIsMultiShipping() on null in /var/www/html/ottocap/vendor/magento/module-customer-balance/Observer/PaymentDataImportObserver.php:52 Stack trace: #0 /var/www/html/ottocap/vendor/magento/framework/Event/Invoker/InvokerDefault.php(73): Magento\CustomerBalance\Observer\PaymentDataImportObserver->execute(Object(Magento\Framework\Event\Observer)) #1 /var/www/html/ottocap/vendor/magento/framework/Event/Invoker/InvokerDefault.php(61): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod(Object(Magento\CustomerBalance\Observer\PaymentDataImportObserver), Object(Magento\Framework\Event\Observer)) #2 /var/www/html/ottocap/vendor/magento/module-staging/Model/Event/Manager.php(97): Magento\Framework\Event\Invoker\InvokerDefault->dispatch(Array, Object(Magento\Framework\Event\Observer)) #3 /var/www/html/ottocap/var/generation/Magento/Staging/Model/Event/Manager/Proxy.php(95): Magento\Staging\Model\Event\Manager->dispatch('sales_quote_pay...', Array) #4 /var/www/ht in /var/www/html/ottocap/vendor/magento/module-customer-balance/Observer/PaymentDataImportObserver.php on line 52
I have debugged and came to know that Quote not generated properly. Due to that, I am getting this error. Please let us know if anyone has its solution to fix this issue.
Solution
We got the solution for the above issue. In this issue, store not set up properly when we edit and save the order from the backend. So what I did, I have set an admin store when we edit and save the order. Please review the below code:
/var/www/html/m218ee/app/code/Extension/Override/etc/adminhtml/di.xml
<type name="Magento\Framework\App\FrontControllerInterface">
<plugin name="md_default_store_setter" type="Extension\Override\Plugin\DefaultStore" />
</type>
/var/www/html/ottocap/app/code/Extension/Override/Plugin/DefaultStore.php
namespace Otto\Override\Plugin;
/**
* Plugin to set default store for admin area.
*/
class DefaultStore
{
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
protected $storeManager;
/**
* Initialize dependencies.
*
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
*/
public function __construct(
\Magento\Store\Model\StoreManagerInterface $storeManager
) {
$this->storeManager = $storeManager;
}
/**
* Set current store for admin area
*
* @param \Magento\Framework\App\FrontController $subject
* @param \Magento\Framework\App\RequestInterface $request
* @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeDispatch(
\Magento\Framework\App\FrontControllerInterface $subject , \Magento\Framework\App\RequestInterface $request
) {
$path = $request->getParams();
if(!empty($path) && isset($path['namespace']) && $path['namespace']=='product_listing'){
//Fixed default store issue in the product grid backend(previously showing default store value instead of admin store).
$this->storeManager->setCurrentStore(\Magento\Store\Model\Store::ADMIN_CODE);
}
}
}
Please run below commands
php bin/magento cache:flush or rm -rf var/*
If production mode is enable then you should run compilation command
php bin/magento setup:di:compile
and if require run static-content command
php bin/magento setup:static-content:deploy
I hope the above code help you.