Quote submit before event to set something to order before placing an order in Magento 2
We need events.xml at path Magesan/Extensions/etc/events.xml
Copy and paste below code
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_model_service_quote_submit_before">
<observer name="changing_something_order_prefix" instance="Vendor\Extensions\Observer\QuoteSubmitBefore" />
</event>
</config>
Create file QuoteSubmitBefore.php at path Magesan/Extensions/Observer/QuoteSubmitBefore.php
Copy and paste below code to it.
<?php
namespace Magesan\Extensions\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Store\Model\ScopeInterface;
class QuoteSubmitBefore implements ObserverInterface
{
const GENERAL_ENABLED = "general/credit/is_enabled";
const REPLACE_FROM = "general/credit/replacefrom";
const REPLACE_TO = "general/credit/replaceto";
/**
* @var ScopeConfigInterface
*/
protected $scopeConfig;
/**
* @var StoreManagerInterface
*/
protected $storeManager;
/**
* __construct
*
* @param ScopeConfigInterface $scopeConfig
* @param StoreManagerInterface $storeManager
*/
public function __construct(
ScopeConfigInterface $scopeConfig,
StoreManagerInterface $storeManager
) {
$this->scopeConfig = $scopeConfig;
$this->storeManager = $storeManager;
}
/**
* @param EventObserver $observer
* @return $this
* @throws \Exception
*/
public function execute(EventObserver $observer)
{
$order = $observer->getOrder();
$storeId = $order->getStoreId();
$settingEnable = $this->getScopeConfig(self::GENERAL_ENABLED, $storeId);
if ($order->getIsVirtual() && $settingEnable) {
$replaceFrom = $this->getScopeConfig(self::REPLACE_FROM, $storeId);
$replaceTo = $this->getScopeConfig(self::REPLACE_TO, $storeId);
if ($replaceFrom && $replaceTo) {
$newIncrementId = str_replace($replaceFrom, $replaceTo, $order->getIncrementId());
$order->setIncrementId($newIncrementId);
}
}
return $this;
}
/**
* getScopeConfig
*
* @param string $path
* @param integer|null $storeId
* @return string
*/
public function getScopeConfig($path, $storeId = null)
{
if (!$storeId) {
$storeId = $this->storeManager->getStore()->getId();
}
return $this->scopeConfig->getValue($path, ScopeInterface::SCOPE_STORE, $storeId);
}
}
We are changing order’s increment id to another one if conditions are met
Happy Coding…