Skip to content

Instantly share code, notes, and snippets.

@serpel
Created September 7, 2020 07:17
Show Gist options
  • Save serpel/23dc333964bfd08d613f153d95426a73 to your computer and use it in GitHub Desktop.
Save serpel/23dc333964bfd08d613f153d95426a73 to your computer and use it in GitHub Desktop.
[HttpPost("commands/generate-drying-report")]
[MiddlewareFilter(typeof(JsReportPipeline))]
public async Task<IActionResult> GenerateDryingReport(Guid jobId, DryingReportTestScenarios isMock = 0)
{
if (jobId == Guid.Empty)
return BadRequest(nameof(jobId));
var dryingReport = isMock != DryingReportTestScenarios.UseJobId ? DryingReportGeneratedDtoMockData.GetMockForPreview(isMock) : await _mediator.Send(new GenerateDryingReport.Command(jobId));
//Render the Header.
var headerInfo = new HeaderHelper(dryingReport.SummaryModel.FranchiseName, dryingReport.SummaryModel.CustomerName, dryingReport.SummaryModel.ClaimPoNumber, dryingReport.SummaryModel.ProjectNumber);
string header = await _jsReportMvcService.RenderViewToStringAsync(
HttpContext, RouteData, $"{ViewRoot}{DryingReportHeaderViewName}", headerInfo);
//Render the Footer.
string footer = await _jsReportMvcService.RenderViewToStringAsync(
HttpContext, RouteData, $"{ViewRoot}{DryingReportFooterViewName}", new FooterHelper(DateTime.UtcNow, "Drying Report"));
//Configure the report to convert this view to a PDF using JSReport + PhantomPDF.
var reportName = $"DryingReport-{Guid.NewGuid()}.pdf";
HttpContext.JsReportFeature()
.Recipe(Recipe.ChromePdf)
.Configure((r) => r.Template.Chrome = new Chrome {
DisplayHeaderFooter = true,
HeaderTemplate = header,
FooterTemplate = footer,
Format = "A4",
MarginTop = "3cm",
MarginLeft = "1cm",
MarginBottom = "3cm",
MarginRight = "1cm"
})
.OnAfterRender((r) =>
HttpContext.Response.Headers["Content-Disposition"] = $"attachment; filename={reportName}");
return View($"{ViewRoot}{DryingReportViewName}", dryingReport);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment