using Microsoft.AspNetCore.Mvc; using Microsoft.Reporting.NETCore; using NLog; using System.Data; using ToDataTable; using WebDoorCreator.Data.Services; namespace WebDoorCreator.UI.Controllers { [Route("api/[controller]")] [ApiController] public class ReportController : ControllerBase { #region Public Constructors public ReportController(IConfiguration configuration, WebDoorCreatorService DataService) { Log.Info("Starting ReportController"); _configuration = configuration; WDCService = DataService; Log.Info("Avviato ReportController"); } #endregion Public Constructors #region Public Methods // GET: api/Report [HttpGet] public string Get() { return "OK"; } /// /// Restituisce report dato ordine e formato /// /// ID univoco ordine /// Formato: PDF/HTML/DOCX/XLSX /// [HttpGet("GetOrderReport")] public async Task GetOrderReport(int OrderId, string Format) { // dato il servizio è impostato il file rdlc e la struttura data DS da passare await Task.Delay(1); // inizializzo parametri report di default Core.ReportViewer.Report.RenderParams currParams = new Core.ReportViewer.Report.RenderParams(Format); currParams.FileName = $"DCA-Order-{OrderId:00000000}"; // restituisco oggetto ReportOrder specifico return await OrderReportGet(OrderId, currParams); } #endregion Public Methods #region Private Fields private static IConfiguration _configuration = null!; private static Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields #region Private Properties private WebDoorCreatorService WDCService { get; set; } = null!; #endregion Private Properties #region Private Methods /// /// Restituisce filestream del report richiesto /// /// ID Ordine /// Parametri rendering report /// private async Task OrderReportGet(int OrderId, Core.ReportViewer.Report.RenderParams CurrParams) { using (var report = new LocalReport()) { // setup parametri List RepParams = new List(); RepParams.Add(new ReportParameter("OrderID", $"{OrderId}")); // setup DsReport Dictionary DsDict = new Dictionary(); // recupero tab dati config... var confList = await WDCService.ConfigGetAll(); DataTable tabDatiConf = confList.ToDataTable(); tabDatiConf.TableName = "DataSetConfig"; // aggiungo a dizionario DsDict.Add("DataSetConfig", tabDatiConf); // recupero dati veri del report... var repDetailData = await WDCService.PreRepOrderGetByKey(OrderId); DataTable tabDati = repDetailData.ToDataTable(); tabDati.TableName = "DataSetOrderReportExpl"; // aggiungo dizionario DsDict.Add("DataSetOrderReportExpl", tabDati); // carico dati nel report... Core.ReportViewer.Report.Load(report, "ReportOrder.rdlc", RepParams, DsDict); var rawData = report.Render(CurrParams.RenderFormat); return File(rawData, CurrParams.MimeType, $"{CurrParams.FileName}.{CurrParams.Extension}"); } } #endregion Private Methods } }