0

Controller File:

<?php
/**
 *
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Sm\Ordertype\Controller\Adminhtml\Invoice\AbstractInvoice;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\Controller\ResultFactory;
use Sm\Customerprice\Model\Customerprice;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
use \Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Mail\Message;
use Magento\Framework\Mail\MessageInterface;
use Magento\Framework\Mail\TransportInterfaceFactory;
use Sm\Ordertype\Controller\Adminhtml\Invoice\AbstractInvoice\Mail\Template\TransportBuilder;

require_once BP . '/lib/internal/Phpexcel/PHPExcel.php';
require_once BP . '/lib/internal/Phpexcel/PHPExcel/IOFactory.php';
require_once BP . '/lib/internal/Phpexcel/PHPExcel/Writer/Excel2007.php';


$rendererLibrary = 'mPDF5.4';

$rendererLibraryPath = '/lib/internal/MPDF57/.' . $rendererLibrary;

class Email extends \Magento\Backend\App\Action
{


    protected $resultForwardFactory;
    private $_transportBuilder;


    public function __construct(

        \Magento\Backend\App\Action\Context $context,
        //\Magento\Framework\App\Response\Http\FileFactory $fileFactory,
        \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
        PageFactory $resultPageFactory,
        CollectionFactory $salesOrderCollectionFactory,
        Customerprice $customerPrice,
        TransportBuilder $transportBuilder
    ) {
        $this->resultPageFactory = $resultPageFactory;
        //$this->_fileFactory = $fileFactory;
        $this->resultForwardFactory = $resultForwardFactory;
        $this->salesOrderCollectionFactory = $salesOrderCollectionFactory;
        $this->customerPrice = $customerPrice;
        $this->_transportBuilder = $transportBuilder;
        parent::__construct($context,$resultForwardFactory);

    }

    /**
     * Notify user
     *
     * @return \Magento\Backend\Model\View\Result\Forward|\Magento\Backend\Model\View\Result\Redirect
     */
    public function execute()
    {

        $invoiceId = $this->getRequest()->getParam('invoice_id'); 

        if ($invoiceId) {

            $invoice = $this->_objectManager->create('Magento\Sales\Api\InvoiceRepositoryInterface')->get($invoiceId);
                $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
                $dir = $objectManager->get('\Magento\Framework\Filesystem\DirectoryList'); 
                $base = $dir->getRoot();
                $path = $base."/document/attachment/".$invoice->getIncrementId().'.xlsx';
            if ($invoice) {
            try{                

                $excelPath = $this->createExcel($invoice);
                $storeManager = $this->_objectManager->create('Magento\Store\Model\StoreManagerInterface');
                $baseUrl = $storeManager->getStore()->getBaseUrl();


                $filePath =  $baseUrl . $excelPath[0]; 

                //header("Location: $filePath");

                if (!$invoice) {
                    return $this->resultForwardFactory->create()->forward('noroute');
                }

                //$this->_objectManager->create('Magento\Sales\Api\InvoiceManagementInterface')->notify($invoice->getEntityId());
            $resource        = $this->_objectManager->create('\Magento\Framework\App\ResourceConnection');
            $connection      = $resource->getConnection(\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION);

              $invoiceItemsGrid = $connection->fetchAll("SELECT order_increment_id FROM sales_invoice_grid WHERE entity_id = '".$invoice->getEntityId()."' ");

                $templateParams=array('invoice' => $invoice->getIncrementId() , 
                'order' => $invoiceItemsGrid[0]['order_increment_id'] , 
                'BillingAddressFirstName' => $excelPath[1]->getFirstName() ,
                'BillingAddressLastName' => $excelPath[1]->getLastName(),
                'CompanyBillingAddress' => $excelPath[1]->getCompany(),
                'StreetBillingAddress'=> $excelPath[1]['street'],
                'CityBillingAddress'=> $excelPath[1]->getCity(),
                'RegionBillingAddress'=> $excelPath[1]->getRegion(),
                'postCodeBillingAddress'=> $excelPath[1]->getPostCode(),
                'CountryBillingAddress'=> $excelPath[1]->getCountryId(),
                'TelephoneBillingAddress'=> $excelPath[1]->getTelephone(),
                'ShippingAddressFirstName'=> $excelPath[2]->getFirstName(),
                'ShippingAddressLastName'=> $excelPath[2]->getLastName(),
                'CompanyShippingAddress'=> $excelPath[2]->getCompany(),
                'StreetShippingAddress'=> $excelPath[1]['street'],
                'CityShippingAddress'=> $excelPath[2]->getCity(),
                'RegionShippingAddress'=> $excelPath[2]->getRegion(),
                'postCodeShippingAddress'=> $excelPath[2]->getPostCode(),
                'CountryShippingAddress'=> $excelPath[2]->getCountryId(),
                'TelephoneShippingAddress'=> $excelPath[2]->getTelephone()
                );   
                $transport = $this->_transportBuilder;
                    $transport->setTemplateIdentifier('sales_email_invoice_template');
                    $transport->setTemplateOptions(array('area' => \Magento\Framework\App\Area::AREA_FRONTEND,'store' => 1));
                    $transport->setTemplateVars($templateParams);
                    $transport->setFrom(array('name' => 'Sales','email' => '[email protected]'));
                    $transport->setReplyTo('[email protected]');
                    $transport->addTo($excelPath[3]);

               $transport->addAttachment(file_get_contents($path),'application/octet-stream','attachment','base64',$invoice->getIncrementId().'.xlsx'); 



            $transport->getTransport()->sendMessage();
            $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);   
            $this->messageManager->addSuccess(__('You sent the message.')); 
            $resultRedirect->setUrl($this->_redirect->getRefererUrl());
            return $resultRedirect; 

        }catch(\Exception $e){
            print_r($e->getMessage());exit;
        }   

                die();

            }
            else 
            {
                return $this->resultForwardFactory->create()->forward('noroute');
            }
        }           

    }

    public function createExcel(\Magento\Sales\Model\Order\Invoice $invoice)
    {

        $objReader = \PHPExcel_IOFactory::createReader('Excel2007');
        $objPHPExcel = $objReader->load("//var/www/html/magento/app/code/Sm/Templates/KlauzInvoicePdf.xlsx");
        $xlsName = $invoice->getIncrementId().'.xlsx';

        //echo $xlsName;

        $orderId = $invoice->getOrderId();


        $invoiceNumber = $invoice->getInvoiceNumber();
        //echo "Invoice number ".$invoiceNumber ;
        $createdAt = $invoice->getCreatedAt();
        //echo "Created datetime ".$createdAt;
        $billingAddress = $invoice->getBillingAddress();
        //echo "billing address";
        //echo "first name ". $billingAddress['firstname'];
        if ($billingAddress){
            $billName = 'M/s '.$billingAddress['firstname']. ' '.$billingAddress['lastname'];
            $billAddr1 = $billingAddress['street']. ' '. $billingAddress['city'];
            $billAddr2 = $billingAddress['region']. ' '. $billingAddress['postcode'];
        }

        $shippingAddress = $invoice->getShippingAddress();

        if ($shippingAddress){
            $shipName = 'M/s '.$shippingAddress['firstname']. ' '.$shippingAddress['lastname'];
            $shipAddr1 = $shippingAddress['street']. ' '. $shippingAddress['city'];
            $shipAddr2 = $shippingAddress['region']. ' '. $shippingAddress['postcode'];
        }
        //echo "shipping address";
        //echo "lastname ". $shippingAddress['lastname'];
        $order = $this->_objectManager->create('Magento\Sales\Model\Order')->load($orderId);

        $dateCreateAt=date_create($createdAt);
        $dateFormatted=date_format($dateCreateAt,"d.m.Y");
        $timeFormatted = date_format($dateCreateAt,"H:i");
        $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('K3', $invoiceNumber)
                ->setCellValue('I4', "Date: ".date("d.m.Y"))
                ->setCellValue('G6', $dateFormatted)
                ->setCellValue('J6', $timeFormatted)
        ->setCellValue('F11', $billName)
        ->setCellValue('F12', $billAddr1)
        ->setCellValue('F13', $billAddr2)
        ->setCellValue('F16', $shipName)
        ->setCellValue('F17', $shipAddr1)
        ->setCellValue('F18', $shipAddr2);


        if ($order) {

            //echo " get dispatch method ".$order->getdispatchMethod();
            $dispatchMethod = $order->getdispatchMethod();
            //echo " Lorry number ".$order -> getLrNumber();
            $lrNumber = $order -> getLrNumber();
            //echo " CT3 Form number" .$order -> getCtForm();
            //echo " customer id " .$order-> getCustomerId();
            $customerRepository = $this->_objectManager->get('Magento\Customer\Api\CustomerRepositoryInterface');
            $customerId = $order-> getCustomerId();
            $customer = $customerRepository->getById($order-> getCustomerId());
            $CustomerEmail = $customer->getEmail();
            $cattrValue = $customer->getCustomAttribute('tin_number');
            //print_r($cattrValue);
            if ($cattrValue){
            //echo "tin ".$cattrValue -> getValue();
            $customerTIN = $cattrValue -> getValue();
            }
            $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('H20', 'Mode of transport')
            ->setCellValue('H21', $lrNumber)
            ->setCellValue('H19', ucwords($dispatchMethod,"_"))
            //->setCellValue('B44', 'CT3 number')
            ->setCellValue('D51',$customerTIN);
            //print the order lines
            $orderItems = $order->getAllItems();
            $productCollection = $this->_objectManager->get('Magento\Catalog\Model\Product');
            $index = 1;
            $weight = 0;
            $qtyOrdered = 0;
            $productName = "";
            $unitBasePrice = 0;

            foreach ($orderItems as $oItem){

                $productType = $oItem->getProductType();

                if ($productType == 'simple'){
                $qtyOrdered = $oItem->getQtyOrdered();

                $productName = $oItem->getName();

                $weight = $oItem->getWeight();

                /*$qtyInKgs = $oItem->getQtyInKgs();
                echo "qtyInKgs ordered" .$qtyInKgs;
                */
                $productId = $oItem->getProductId();

                $_product = $this->_objectManager->create('Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable')->getParentIdsByChild($productId);
                        $_productCollection = $this->_objectManager->get('Magento\Catalog\Model\Product');
                $_productParent = $_productCollection -> load($_product[0]);
                $parentProductSku = $_productParent->getSku();
                $productChild = $productCollection->load($productId);
                $optionId = $productChild->getData('packing_box');
                $attribute = $productChild->getResource()->getAttribute('packing_box');
                $packing = $attribute->getSource()->getOptionText($optionId);
                $customerBasePrice = $this->customerPrice->getCollection()->addFieldToFilter('customer_id',$customerId)
                                                                                              ->                    addFieldToFilter('product_sku',$parentProductSku)
                ->addFieldToFilter('start_time',array("lteq" => $createdAt))
                ->addFieldToFilter('end_time',array("gteq" => $createdAt));

                if (sizeof($customerBasePrice) != 0){
                    foreach($customerBasePrice as $customerBasePrice){
                        switch ($packing) {
                        case "1 Kg/ltr":
                            $unitBasePrice = $customerBasePrice->getUnitPriceOne();
                            break;
                        case "5 Kg";
                            $unitBasePrice = $customerBasePrice->getUnitPriceFive();
                            break;
                        case "20 Kg";
                            $unitBasePrice = $customerBasePrice->getUnitPriceTwenty();
                            break;
                        case "Brl+5 Kg";
                            $unitBasePrice = $customerBasePrice->getUnitPriceBrlFive();
                            break;
                        case "Brl+Brl";
                            $unitBasePrice = $customerBasePrice->getUnitPriceBrlBrl();
                            break;
                        }
                    }
                }
                }
                //write onto XL


                $totalWeight = $weight * $qtyOrdered;
                $vat55 = $order->getTotalVatOne();
                            $totalAmount = $order->getTotalAmount();
                            $totalBasePrice = $order->getTotalBasePrice();
                            $ctNumber = $order->getCtNumber();
                            $poNumber = $order->getpoNumber();
                //echo "vat55" . strval($vat55);
                //print_r($vat55);
                $vat145 = $order->getTotalVatTwo();
                        //echo "vat145". $vat145;

                $number = $totalAmount;
                $no = round($number);
                $point = round($number - $no, 2) * 100;
                $hundred = null;
                $digits_1 = strlen($no);
                $i = 0;
                $str = array();
                $words = array('0' => '', '1' => 'one', '2' => 'two',
                                '3' => 'three', '4' => 'four', '5' => 'five', '6' => 'six',
                                '7' => 'seven', '8' => 'eight', '9' => 'nine',
                                '10' => 'ten', '11' => 'eleven', '12' => 'twelve',
                                '13' => 'thirteen', '14' => 'fourteen',
                                '15' => 'fifteen', '16' => 'sixteen', '17' => 'seventeen',
                                '18' => 'eighteen', '19' =>'nineteen', '20' => 'twenty',
                                '30' => 'thirty', '40' => 'forty', '50' => 'fifty',
                                '60' => 'sixty', '70' => 'seventy',
                                '80' => 'eighty', '90' => 'ninety');
                $digits = array('', 'hundred', 'thousand', 'lakh', 'crore');
                while ($i < $digits_1) {
                    $divider = ($i == 2) ? 10 : 100;
                    $number = floor($no % $divider);
                    $no = floor($no / $divider);
                    $i += ($divider == 10) ? 1 : 2;

                    if ($number) {
                        $plural = (($counter = count($str)) && $number > 9) ? 's' : null;
                        $hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
                        $str [] = ($number < 21) ? $words[$number] .
                        " " . $digits[$counter] . $plural . " " . $hundred
                        :
                        $words[floor($number / 10) * 10]
                        . " " . $words[$number % 10] . " "
                        . $digits[$counter] . $plural . " " . $hundred;                 
                    } 
                    else 
                        $str[] = null;
                }

                $str = array_reverse($str);
                $result = implode('', $str);
                /*$points = ($point) ?
                 "." . $words[$point / 10] . " " . 
                $words[$point = $point % 10] : '';
                $result . "Rupees  " . $points . " Paise";*/




                $objPHPExcel->setActiveSheetIndex(0) 
                ->setCellValue('A32', $index)
                ->setCellValue('B32', $productName)
                ->setCellValue('E32', round($weight) .' Kg x '.round($qtyOrdered))
                ->setCellValue('F32', 'Kg')
                ->setCellValue('H32', round($totalWeight))
                                    ->setCellValue('H43', round($totalWeight))
                ->setCellValue('J32', $unitBasePrice)
                                    //->setCellValue('B44', "C T-3 No:".$ctNumber)
                //->setCellValue('I53', 'Sub Total')
                //->setCellValue('I54', 'VAT 5.5%')
                ->setCellValue('K53', $vat55)
                                    ->setCellValue('K52', $totalBasePrice)
                                    ->setCellValue('K57', round($totalAmount))
                                    ->setCellValue('C57', ucwords($result. "Rupees only "))
                                    ->setCellValue('K32', $totalBasePrice)
                                    //->setCellValue('D51', 'po:')
                                    ->setCellValue('D50',$poNumber)
                //->setCellValue('I55', 'VAT 14.5%')
                ->setCellValue('K54', $vat145);
                //->setCellValue('I49','C.Ex.  12.50 %');


                $centralExcise = $order->getTotalCentralExcise();

                $number1 = $centralExcise;
                $no = round($number1);
                $point = round($number1 - $no, 2) * 100;
                $hundred = null;
                $digits_1 = strlen($no);
                $i = 0;
                $str = array();
                $words = array('0' => '', '1' => 'one', '2' => 'two',
                '3' => 'three', '4' => 'four', '5' => 'five', '6' => 'six',
                '7' => 'seven', '8' => 'eight', '9' => 'nine',
                '10' => 'ten', '11' => 'eleven', '12' => 'twelve',
                '13' => 'thirteen', '14' => 'fourteen',
                '15' => 'fifteen', '16' => 'sixteen', '17' => 'seventeen',
                '18' => 'eighteen', '19' =>'nineteen', '20' => 'twenty',
                '30' => 'thirty', '40' => 'forty', '50' => 'fifty',
                '60' => 'sixty', '70' => 'seventy',
                '80' => 'eighty', '90' => 'ninety');
                $digits = array('', 'hundred', 'thousand', 'lakh', 'crore');
                while ($i < $digits_1) {
                    $divider = ($i == 2) ? 10 : 100;
                    $number1 = floor($no % $divider);
                    $no = floor($no / $divider);
                    $i += ($divider == 10) ? 1 : 2;
                    if ($number1) {
                        $plural = (($counter = count($str)) && $number1 > 9) ? 's' : null;
                        $hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
                        $str [] = ($number1 < 21) ? $words[$number1] .
                        " " . $digits[$counter] . $plural . " " . $hundred
                        :
                        $words[floor($number1 / 10) * 10]
                        . " " . $words[$number1 % 10] . " "
                        . $digits[$counter] . $plural . " " . $hundred;
                    } 
                    else 
                        $str[] = null;
                }
                $str = array_reverse($str);
                $result1 = implode('', $str);
                /*$points = ($point) ?
                 "." . $words[$point / 10] . " " . 
                $words[$point = $point % 10] : '';
                $result1 . "Rupees  " . $points . " Paise";*/


                if ($centralExcise ==0 ){
                    $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('D48', "Nill Against Form CT - 3")
                    ->setCellValue('K49', "Nill");
                } else {
                    $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('K48', $centralExcise)
                                        ->setCellValue('A46', ucwords("Total Excise duty Payable Rs:" . $result1 . "Rupees only", ":"));
                }
            }
        }




    $rendererName = \PHPExcel_Settings::PDF_RENDERER_TCPDF;
    $rendererLibraryPath = '/var/www/html/magento/vendor/tecnick.com/tcpdf';

    \PHPExcel_Settings::setPdfRenderer($rendererName,$rendererLibraryPath);
    $path = "document/attachment/".$invoice->getIncrementId().".xlsx";
    //$path = "document/attachment/".$invoice->getIncrementId().".PDF";

    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    //$objWriter->setSheetIndex(0);
    $objWriter->save($path);

    return array($path,$billingAddress,$shippingAddress,$CustomerEmail);

    }    

}

di.xml

<preference for="Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\Email" type="Sm\Ordertype\Controller\Adminhtml\Invoice\AbstractInvoice\Email" />

1 Answer 1

1

Your controller class should extend

Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\Email

Instead of

\Magento\Backend\App\Action
1
  • I did that but still it is not coming. Commented Jun 7, 2017 at 4:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.