Magento 2 : how to convert custom quote field to order field
-
06-02-2021 - |
Question
I added a new field "management_fee" on table "quote" properly. I add this field on "sales_order" field too. I would like to update this field on sales_order table while quote is converting to order.
I know how to do with quote items using plugin and Magento\Quote\Model\Quote\Item\ToOrderItem
class, but I did not find a class for quote to order.
Solution
add the fields to both table quote
and sales_order
via a setup script in your module.
Then add an event in your module (see below)
<?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="quote_submit_before" instance="Vendor\Module\Observer\QuoteSubmitBefore" />
</event>
</config>
Finally save the quote data against your order
class QuoteSubmitBefore implements ObserverInterface
{
/**
* @param Observer $observer
* @return void
*/
public function execute(Observer $observer)
{
$quote = $observer->getQuote();
$order = $observer->getOrder()
$order->setData('field_custom', $quote->getData('field_custom'));
}
}
OTHER TIPS
I am not really aware of this thing but you can give a try I hope it'll work for you. Create a fieldset.xml in your module's etc folder.
fieldset.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:DataObject/etc/fieldset.xsd">
<scope id="global">
<fieldset id="sales_convert_quote">
<field name="management_fee">
<aspect name="to_order" />
</field>
</fieldset>
</scope>
</config>
You should check below link as well https://devdocs.magento.com/guides/v2.2/ext-best-practices/tutorials/copy-fieldsets.html