class NW_EmailAssetTransferRequestController extends SrsReportRunController
{
        

    public static void main(args _args)
    {

            NW_EmailAssetTransferRequestContract contract = new NW_EmailAssetTransferRequestContract();
            SRSPrintDestinationSettings settings;
            SrsReportEMailDataContract emailContract;
            AssetTransferRequest      _AssetTransferRequest;
            System.IO.MemoryStream _stream;

            SysMailerMessageBuilder mailer = new SysMailerMessageBuilder();
            SysMailerSMTP smtp = new SysMailerSMTP();
            Filename            fileName;
            Array              arrayFiles;
            System.Byte[]          reportBytes = new System.Byte[0]();
            SRSProxy            srsProxy;
            SRSReportRunService       srsReportRunService = new SrsReportRunService();
            Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[] parameterValueArray;
            Map reportParametersMap;

            SRSReportExecutionInfo executionInfo = new SRSReportExecutionInfo();
            NW_EmailAssetTransferRequestController controller = new NW_EmailAssetTransferRequestController();

            _AssetTransferRequest = _args.record();

            fileName = 'Asset Transfer.PDF';

            contract.parmRequestId(_AssetTransferRequest.RequestId);

            // Provide details to controller and add contract
            controller.parmArgs(_args);
            controller.parmReportName(ssrsReportStr(NW_EmailAssetTransferRequestReport,Design));
            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)
            {
                // Converting byte array to memory stream
                System.IO.MemoryStream stream = new System.IO.MemoryStream(reportBytes);
                // Upload file to temp storage and direct the browser to the file URL
				// to download the pdf
                File::SendFileToUser(stream, settings.parmFileName());
                stream.Position = 0;

                str fileContentType = System.Web.MimeMapping::GetMimeMapping(fileName);
                _stream = stream;
            }


       
      //   UserInfo _UserInfo;
      //  select _UserInfo where _UserInfo.id ==   HcmWorker::find( _AssetTransferRequest.Employee);
        str  ToEmail = HcmWorker::find( _AssetTransferRequest.Employee).email();  // _UserInfo.networkAlias;

            mailer.setSubject(" AssetTransfer Request Report");
            mailer.setFrom("hub@sanabil.com");
            mailer.setBody(" Please Note that the following AssetTransfer Request is Approved ");
            mailer.addTo(ToEmail);
            if (_AssetTransferRequest.AssetTypes == AssetTypes::OffBoarding && _AssetTransferRequest.Release==NoYes::Yes)
            {
                //  mailer.addTo("");
            }
            mailer.addAttachment(_stream, strFmt('%1%2','AssetTransferRequest Report', '.PDF'));
           
            // send email part

            try
            {
                smtp.sendNonInteractive(mailer.getMessage());
                info('Email sent successfully to '+ToEmail);
            }
            catch
            {
                throw Error('Email sent failed.');
            }
        }

}