Question

I want print a custom file in order transactional emails. Here is my Setup file:

namespace xxx\xxxx\Setup;

    $quote = $setup->getTable('quote');
    $salesOrder = $setup->getTable('sales_order');


    $setup->getConnection()->addColumn(
        $quote,
        'gst',
        [
            'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            'nullable' => true,
            'comment' =>'Gst'
        ]
    );

    $setup->getConnection()->addColumn(
        $salesOrder,
        'gst',
        [
            'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            'nullable' => true,
            'comment' =>'Gst'
        ]
    );

    $setup->endSetup();  

The function that saves data on order

    class SaveOrderObserver implements ObserverInterface
   {
public function execute(\Magento\Framework\Event\Observer $observer)
{
    $order = $observer->getEvent()->getOrder();
    $quote = $observer->getEvent()->getQuote();

    $order->setData('gst', $quote->getGst());

    return $this;
}
}

The event xml:

 <event name="sales_model_service_quote_submit_before">

How to print GST field on user and admin email after order?

Was it helpful?

Solution

app/code/Vendor/Module/etc/events.xml

<?xml version="1.0" encoding="utf-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="email_order_set_template_vars_before">
        <observer name="add_custom_variable_to_Order"
            instance="Vendor\Module\Observer\ObserverforAddCustomVariable" />
    </event>
</config>

app/code/Vendor/Module/Observer/ObserverforAddCustomVariable.php

<?php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\ObserverInterface;

class ObserverforAddCustomVariable implements ObserverInterface
{
    /**
     *
     * @param \Magento\Framework\Event\Observer $observer
     * @return void
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $transport = $observer->getEvent()->getTransport();
        $order = $transport->getOrder();
        $transport['gst'] = $order->getGst();
    }
}

Create custom order email template in Admin panel->Marketing->Email Templates and use below code to display in email template

 {{var gst}} 

Check below link to how to override email templates

Override email templates

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