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.

Was it helpful?

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

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top