private RenderedDocumentOutput CreateReport(ReportFactoryArguments arguements,
                                                    Func <string, ReportGenerationArguments, NodePipeLineTask> taskFactory)
        {
            using (var renderDirectory = GetWorkspace())
            {
                var reportJsonPath     = PersistReportData(arguements.ReportJson, renderDirectory.TmpPath);
                var reportTemplatePath = FetchReportTemplatePath(arguements.TemplateName, arguements.Extension);

                if (InvalidReportTemplatePath(reportTemplatePath))
                {
                    return(ReturnInvalidReportTemplatePathError(reportTemplatePath));
                }

                var presenter       = new PropertyPresenter <string, ErrorOutput>();
                var reportArguments = new ReportGenerationArguments
                {
                    TemplatePath = reportTemplatePath,
                    JsonPath     = reportJsonPath,
                    SheetNumber  = arguements.SheetNumber
                };
                RenderReport(reportArguments, taskFactory, presenter);

                return(RenderingErrors(presenter) ? ReturnErrors(presenter) : ReturnRenderedReport(presenter));
            }
        }
        public RenderedDocumentOutput CreateWordReport(RenderWordInput input)
        {
            Func <string, ReportGenerationArguments, NodePipeLineTask> renderFactory = (nodeAppPath, arguements) =>
            {
                return(new WordRender(nodeAppPath, arguements.TemplatePath, arguements.JsonPath));
            };

            var factoryArguments = new ReportFactoryArguments
            {
                ReportJson   = input.JsonModel.ToString(),
                TemplateName = input.TemplateName,
                Extension    = "docx"
            };

            var result = CreateReport(factoryArguments, renderFactory);

            result.ContentType = ContentTypes.Word;
            return(result);
        }
        public RenderedDocumentOutput CreateExcelReport(RenderExcelInput input)
        {
            Func <string, ReportGenerationArguments, NodePipeLineTask> renderFactory = (nodeAppPath, arguments) =>
            {
                return(new ExcelRender(nodeAppPath, arguments.TemplatePath, arguments.JsonPath, arguments.SheetNumber));
            };

            var factoryArguments = new ReportFactoryArguments
            {
                ReportJson   = input.JsonModel.ToString(),
                TemplateName = input.TemplateName,
                Extension    = "xlsx",
                SheetNumber  = input.SheetNumber
            };

            var result = CreateReport(factoryArguments, renderFactory);

            result.ContentType = ContentTypes.Excel;
            return(result);
        }