From a85deab090d8dbb3e8087863c871a36970d0d9f7 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 26 Aug 2020 23:29:34 +0000 Subject: [PATCH] --- .../AyaNova/Controllers/ReportController.cs | 19 +++++++++-------- server/AyaNova/biz/ReportBiz.cs | 21 +++++++++++-------- server/AyaNova/resource/rpt/ay-report.js | 16 +++++++++++--- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/server/AyaNova/Controllers/ReportController.cs b/server/AyaNova/Controllers/ReportController.cs index 9af29403..a72bf704 100644 --- a/server/AyaNova/Controllers/ReportController.cs +++ b/server/AyaNova/Controllers/ReportController.cs @@ -161,11 +161,12 @@ namespace AyaNova.Api.Controllers -//====================================================================================================== - /// + //====================================================================================================== + /// /// Render Report /// - /// + /// Id of report template saved to db + /// An array of id values for the object type specified by the report template /// From route path /// [HttpPost("render")] @@ -178,16 +179,16 @@ namespace AyaNova.Api.Controllers return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); - + var httpConnectionFeature = HttpContext.Features.Get(); - var API_URL = $"http://127.0.0.1:{httpConnectionFeature.LocalPort}/api/v8/"; - - var result = await biz.RenderReport(reportId,objectIdArray,API_URL); + var API_URL = $"http://127.0.0.1:{httpConnectionFeature.LocalPort}/api/v8/"; + + var result = await biz.RenderReport(reportId, objectIdArray, API_URL); if (result == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else - return new FileContentResult(result.RenderedOutput,result.MimeType); - + return new FileContentResult(result.RenderedOutput, result.MimeType); + } diff --git a/server/AyaNova/biz/ReportBiz.cs b/server/AyaNova/biz/ReportBiz.cs index ebb18ce9..e104d7b1 100644 --- a/server/AyaNova/biz/ReportBiz.cs +++ b/server/AyaNova/biz/ReportBiz.cs @@ -267,11 +267,12 @@ namespace AyaNova.Biz //Get data + log.LogDebug($"Instantiating biz object handler for {report.ObjectType}"); var biz = BizObjectFactory.GetBizObject(report.ObjectType, ct); - var data = ((IReportAbleObject)biz).GetReportData(objectidarray); + log.LogDebug($"Fetching data for {objectidarray.Length} {report.ObjectType} items"); + var data = ((IReportAbleObject)biz).GetReportData(objectidarray).ToString(); //initialization - log.LogDebug("Initializing report system"); var ReportJSFolderPath = Path.Combine(ServerBootConfig.AYANOVA_CONTENT_ROOT_PATH, "resource", "rpt"); var lo = new LaunchOptions { Headless = true }; @@ -309,28 +310,30 @@ namespace AyaNova.Biz log.LogDebug($"Preparing page: adding this report's scripts, style and templates to page"); - + //TODO: CUSTOM HELPERS //compile and run handlebars template - var compileScript = $"Handlebars.compile({reportTemplate})({reportData});"; + var compileScript = $"let reportData=ayPreRender({data});Handlebars.compile({report.Template})(reportData);"; var resultHTML = await page.EvaluateExpressionAsync(compileScript); //render report as HTML await page.SetContentAsync(resultHTML); //add style (after page or it won't work) - await page.AddStyleTagAsync(new AddTagOptions { Content = reportCSS }); + if (!string.IsNullOrWhiteSpace(report.Style)) + { + await page.AddStyleTagAsync(new AddTagOptions { Content = report.Style }); + } - //useful for debugging purposes only + //If need the generated page content //var pagecontent = await page.GetContentAsync(); //render to pdf and return var pdfBuffer = await page.PdfDataAsync(); - log.LogInformation($"returning results now:"); - return new FileContentResult(pdfBuffer, "application/pdf"); + log.LogDebug($"returning results now:"); + return new RenderedReport() { MimeType = "application/pdf", RenderedOutput = pdfBuffer }; } - return null; } public class RenderedReport diff --git a/server/AyaNova/resource/rpt/ay-report.js b/server/AyaNova/resource/rpt/ay-report.js index c11df28d..21f49058 100644 --- a/server/AyaNova/resource/rpt/ay-report.js +++ b/server/AyaNova/resource/rpt/ay-report.js @@ -3,7 +3,17 @@ function ayRegisterHelpers() { return aString.toUpperCase(); }); - Handlebars.registerHelper("aymarkdown",function(astring){ - return marked(astring, { breaks: true }) - }) + Handlebars.registerHelper("aymarkdown", function (astring) { + return marked(astring, { breaks: true }); + }); } + +function ayPreRender(theReportData) { + if (reportPrerender != null) { + return reportPreRender(theReportData); + }else{ + return theReportData; + } +} + +