Email sending

/// <summary>

/// Class to send email for - Confirm Now button

/// </summary>

class GopSalesConfirmationEmail

{

    #ISOCountryRegionCodes

    /// <summary>

    /// Send Email

    /// </summary>

    /// <param name = "_custConfirmJour"> Table buffer </param>

    /// <param name = "_salesTable"> Table buffer </param>

    void emailConfirmation(CustConfirmJour _custConfirmJour,SalesTable _salesTable)

    {

        SysMailerMessageBuilder         messagebuilder = new SysMailerMessageBuilder();


        CustTable       custTable;

        container       invoiceEmails;

        SalesTable      salesTable;


        CustConfirmJour     custConfirmJour = _custConfirmJour;

        custTable = CustTable::find(custConfirmJour.OrderAccount);

        

        if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoCL,#isoCO]))

        {

            invoiceEmails = DirParty::electronicAddressLocatorsByRole(custTable.Party, LogisticsElectronicAddressMethodType::Email, '@Gop:PurchaseOrderSend');

        }

        salesTable = _salesTable;



        

        if(custConfirmJour && invoiceEmails != conNull())

        {

            try

            {

                messagebuilder.setSubject(strFmt('ORDER Confirmation PO '+salesTable.CustomerRef+' / '+ 'Sales order number '+custConfirmJour.SalesId));

                messagebuilder.setBody(strFmt('ORDER Confirmation PO '+salesTable.CustomerRef+' / '+ 'Sales order number '+custConfirmJour.SalesId));//date2Str(DateTimeUtil::getToday(DateTimeUtil::getUserPreferredTimeZone()),213,DateDay::Digits2,DateSeparator::Slash,DateMonth::Digits2,DateSeparator::Slash,DateYear::Digits4)));

                messagebuilder.addTo(con2Str(invoiceEmails,';'));


                //generate packing slip pdf

                //Set  variables

               

                SRSProxy                        srsProxy;

                SRSCatalogItemName              reportDesignLocal;

                Map                             reportParametersMap;

                SRSPrintDestinationSettings     settings;

                Filename                        fileName =     strFmt('%1 _ %2.pdf', custConfirmJour.SalesId, custConfirmJour.ConfirmDocNum);

                SrsReportRunController          formLetterController = SalesConfirmController::construct();

                SalesConfirmController      controller = formLetterController;

                SalesConfirmContract        contract = new SalesConfirmContract();

                System.Byte[]                   reportBytes = new System.Byte[0]();

                SRSReportRunService             srsReportRunService = new SrsReportRunService();

                SRSReportExecutionInfo          executionInfo = new SRSReportExecutionInfo();


                Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[] parameterValueArray;


                PrintMgmtReportFormatName   printMgmtReportFormatName   = PrintMgmtDocType::construct(PrintMgmtDocumentType::SalesOrderConfirmation).getDefaultReportFormat();


                reportDesignLocal = printMgmtReportFormatName;


                if (!reportDesignLocal)

                {

                    if (CustParameters::find().GopSendConfirmationEmailinSpanish)

                    {

                        reportDesignLocal = ssrsReportStr(GopSalesConfirm, ReportLatamSpanish);

                    }

                    else

                    {

                        reportDesignLocal = ssrsReportStr(GopSalesConfirm, ReportLatamEnglish);

                    }

                }


                //set the report contract parameters

                contract.parmRecordId(custConfirmJour.RecId);

                contract.parmTableId(tableNum(custConfirmJour));

                

                //set the report controller parameters


                //set report name and design name

                controller.parmReportName(reportDesignLocal);

                controller.parmShowDialog(false);

                controller.parmLoadFromSysLastValue(false);

                controller.parmReportContract().parmRdpContract(contract);


                // Provide printer settings


                settings = controller.parmReportContract().parmPrintSettings();

                settings.printMediumType(SRSPrintMediumType::File);

                settings.fileName(fileName);

                settings.fileFormat(SRSReportFileFormat::PDF);


                // Below is a part of code responsible for rendering the report


                controller.parmReportContract().parmReportServerConfig(SRSConfiguration::getDefaultServerConfiguration());

                controller.parmReportContract().parmReportExecutionInfo(executionInfo);

                srsReportRunService.getReportDataContract(controller.parmreportcontract().parmReportName());

                srsReportRunService.preRunReport(controller.parmreportcontract());

                reportParametersMap = srsReportRunService.createParamMapFromContract(controller.parmReportContract());

                parameterValueArray = SrsReportRunUtil::getParameterValueArray(reportParametersMap);

                srsProxy = SRSProxy::constructWithConfiguration(controller.parmReportContract().parmReportServerConfig());


                // Actual rendering to byte array

                reportBytes = srsproxy.renderReportToByteArray(controller.parmreportcontract().parmreportpath(),

                                    parameterValueArray,

                                    settings.fileFormat(),

                                    settings.deviceinfo());


                if (reportBytes)

                {

                    System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(reportBytes);

                    messagebuilder.addAttachment(memoryStream, fileName, 'application/pdf');

                }


                SysMailerFactory::sendNonInteractive(messagebuilder.getMessage());

                //custPackingSlipJour.GopEmailSentToWarehouse = NoYes::Yes;

                //ttsbegin;

                //custPackingSlipJour.doUpdate();

                //ttscommit;

                info(strFmt("@SYS31964",con2Str(invoiceEmails,';')));

            }

            catch

            {

                error('Email error - check email history.');

            }

        }

        else

        {

            info('This customer does not contain an email address with the purpose - Invoice');

        }

    }


}

Comments

Popular posts from this blog

Price disc agreement

Sample integration

Create ledger journals in D365FO using X++ + LedgerDimensionACType