Use this tutorial to override quote merge file. Using this tutorial, you can customize quote merge while adding any custom code at the time of customer and guest quote merge
Module Name : Magemonkeys:Quotemerge
Create di.xml in /etc folder
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <preference for="MagentoCheckoutModelSession" type="MagemonkeysQuotemergeModelSession" /> </config>
Create Session.php in /Model folder
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace MagemonkeysQuotemergeModel;
use MagentoCustomerApiDataCustomerInterface;
use MagentoFrameworkAppObjectManager;
use MagentoFrameworkExceptionNoSuchEntityException;
use MagentoQuoteApiDataCartInterface;
use MagentoQuoteModelQuote;
use MagentoQuoteModelQuoteIdMaskFactory;
use PsrLogLoggerInterface;
/**
* Represents the session data for the checkout process
*
* @api
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @SuppressWarnings(PHPMD.CookieAndSessionMisuse)
* @SuppressWarnings(PHPMD.TooManyFields)
* @since 100.0.2
*/
class Session extends MagentoCheckoutModelSession
{
const CHECKOUT_STATE_BEGIN = 'begin';
/**
* Quote instance
*
* @var Quote
*/
protected $_quote;
/**
* Customer Data Object
*
* @var CustomerInterface|null
*/
protected $_customer;
/**
* Whether load only active quote
*
* @var bool
*/
protected $_loadInactive = false;
/**
* A flag to track when the quote is being loaded and attached to the session object.
*
* Used in trigger_recollect infinite loop detection.
*
* @var bool
*/
private $isLoading = false;
/**
* Loaded order instance
*
* @var MagentoSalesModelOrder
*/
protected $_order;
/**
* @var MagentoSalesModelOrderFactory
*/
protected $_orderFactory;
/**
* @var MagentoCustomerModelSession
*/
protected $_customerSession;
/**
* @var MagentoQuoteApiCartRepositoryInterface
*/
protected $quoteRepository;
/**
* @var MagentoFrameworkHTTPPhpEnvironmentRemoteAddress
*/
protected $_remoteAddress;
/**
* @var MagentoFrameworkEventManagerInterface
*/
protected $_eventManager;
/**
* @var MagentoStoreModelStoreManagerInterface
*/
protected $_storeManager;
/**
* @var MagentoCustomerApiCustomerRepositoryInterface
*/
protected $customerRepository;
/**
* @param QuoteIdMaskFactory
*/
protected $quoteIdMaskFactory;
/**
* @param bool
*/
protected $isQuoteMasked;
/**
* @var MagentoQuoteModelQuoteFactory
*/
protected $quoteFactory;
/**
* @var LoggerInterface|null
*/
private $logger;
/**
* @param MagentoFrameworkAppRequestHttp $request
* @param MagentoFrameworkSessionSidResolverInterface $sidResolver
* @param MagentoFrameworkSessionConfigConfigInterface $sessionConfig
* @param MagentoFrameworkSessionSaveHandlerInterface $saveHandler
* @param MagentoFrameworkSessionValidatorInterface $validator
* @param MagentoFrameworkSessionStorageInterface $storage
* @param MagentoFrameworkStdlibCookieManagerInterface $cookieManager
* @param MagentoFrameworkStdlibCookieCookieMetadataFactory $cookieMetadataFactory
* @param MagentoFrameworkAppState $appState
* @param MagentoSalesModelOrderFactory $orderFactory
* @param MagentoCustomerModelSession $customerSession
* @param MagentoQuoteApiCartRepositoryInterface $quoteRepository
* @param MagentoFrameworkHTTPPhpEnvironmentRemoteAddress $remoteAddress
* @param MagentoFrameworkEventManagerInterface $eventManager
* @param MagentoStoreModelStoreManagerInterface $storeManager
* @param MagentoCustomerApiCustomerRepositoryInterface $customerRepository
* @param QuoteIdMaskFactory $quoteIdMaskFactory
* @param MagentoQuoteModelQuoteFactory $quoteFactory
* @param LoggerInterface|null $logger
* @throws MagentoFrameworkExceptionSessionException
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
MagentoFrameworkAppRequestHttp $request,
MagentoFrameworkSessionSidResolverInterface $sidResolver,
MagentoFrameworkSessionConfigConfigInterface $sessionConfig,
MagentoFrameworkSessionSaveHandlerInterface $saveHandler,
MagentoFrameworkSessionValidatorInterface $validator,
MagentoFrameworkSessionStorageInterface $storage,
MagentoFrameworkStdlibCookieManagerInterface $cookieManager,
MagentoFrameworkStdlibCookieCookieMetadataFactory $cookieMetadataFactory,
MagentoFrameworkAppState $appState,
MagentoSalesModelOrderFactory $orderFactory,
MagentoCustomerModelSession $customerSession,
MagentoQuoteApiCartRepositoryInterface $quoteRepository,
MagentoFrameworkHTTPPhpEnvironmentRemoteAddress $remoteAddress,
MagentoFrameworkEventManagerInterface $eventManager,
MagentoStoreModelStoreManagerInterface $storeManager,
MagentoCustomerApiCustomerRepositoryInterface $customerRepository,
QuoteIdMaskFactory $quoteIdMaskFactory,
MagentoQuoteModelQuoteFactory $quoteFactory,
MagentoCatalogHelperProductConfiguration $configuration,
LoggerInterface $logger = null
) {
$this->_orderFactory = $orderFactory;
$this->_customerSession = $customerSession;
$this->quoteRepository = $quoteRepository;
$this->_remoteAddress = $remoteAddress;
$this->_eventManager = $eventManager;
$this->_storeManager = $storeManager;
$this->customerRepository = $customerRepository;
$this->quoteIdMaskFactory = $quoteIdMaskFactory;
$this->quoteFactory = $quoteFactory;
$this->configuration = $configuration;
parent::__construct(
$request,
$sidResolver,
$sessionConfig,
$saveHandler,
$validator,
$storage,
$cookieManager,
$cookieMetadataFactory,
$appState,
$orderFactory,
$customerSession,
$quoteRepository,
$remoteAddress,
$eventManager,
$storeManager,
$customerRepository,
$quoteIdMaskFactory,
$quoteFactory,
$logger
);
$this->logger = $logger ?: ObjectManager::getInstance()
->get(LoggerInterface::class);
}
/**
* Load data for customer quote and merge with current quote
*
* @return $this
*/
public function loadCustomerQuote()
{
//we can write custom code
}
}
That’s it.

