I am trying to change the quote currency before placing any order.
I have used below event for that.
Vendor\Module\etc\frontend\events.xml
<event name="sales_model_service_quote_submit_before">
<observer name="change_currency_before_place_order" instance="Vendor\Module\Observer\BeforePlaceOrder" />
</event>
Vendor\Module\Observer\BeforePlaceOrder.php
<?php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class BeforePlaceOrder implements ObserverInterface
{
protected $_checkoutSession;
private $logger;
/**
* @var \Magento\Catalog\Model\Session
*/
protected $catalogSession;
public function __construct(
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Catalog\Model\Session $catalogSession,
\Psr\Log\LoggerInterface $logger
)
{
$this->_checkoutSession = $checkoutSession;
$this->catalogSession = $catalogSession;
$this->logger = $logger;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$quote = $observer->getEvent()->getQuote();
$this->logger->info('inside place order observer');
//$this->storeManager->getStore()->setCurrentCurrencyCode('EUR');
$quote->setQuoteCurrencyCode("EUR");
$quote->collectTotals();
}
}
The above event is not firing for me, Is there any other way to implement this functionality?
Note: The accepted answer working well but once the invoice is created, its changing to default currency again.
Can anyone advise me please why that event is not firing even after placing globally?.