class NW_PayslipGenerateReport
{
    public static System.IO.Stream getPayslipReport(date _from, date _to, hcmWorkerRecid worker)
    {
        NWPY_PayslipReportContract contract = new NWPY_PayslipReportContract();
        SRSPrintDestinationSettings settings;
        SrsReportEMailDataContract  emailContract;
        System.IO.MemoryStream      _strem;
        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();
        SrsReportRunController controller = new SrsReportRunController();

        filename = 'Payslip.PDF';
        contract.ParmFromDate(_from);
        contract.parmToDate(_to);
        contract.parmEmployee(worker);

        controller.parmReportName(ssrsReportStr(NWPY_PayslipReport, PrecisionDesign2));
        controller.parmShowDialog(false);
        controller.parmReportContract().parmRdpContract(contract);
        settings = controller.parmReportContract().parmPrintSettings();
        settings.printMediumType(SRSPrintMediumType::File);
        settings.fileFormat(SRSReportFileFormat::PDF);
        settings.overwriteFile(true);
        settings.fileName(filename);
        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());
        reportBytes = srsProxy.renderReportToByteArray(controller.parmReportContract().parmReportPath(),
                        parameterValueArray,
                        settings.fileFormat(),
                        settings.deviceInfo());
        if(reportBytes)
        {
            _strem = new System.IO.MemoryStream(reportBytes);
        }
        return _strem;
    }

}