Quote submit before event to set something to order before placing an order in Magento 2 - Magesan

Quote submit before event to set something to order before placing an order in Magento 2

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…

Leave a Reply

Your email address will not be published. Required fields are marked *.

*
*
You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>