diff --git a/CertReports.Syncfusion/Controllers/ChartController.cs b/CertReports.Syncfusion/Controllers/ChartController.cs index 24e1665..2e42c20 100644 --- a/CertReports.Syncfusion/Controllers/ChartController.cs +++ b/CertReports.Syncfusion/Controllers/ChartController.cs @@ -112,8 +112,10 @@ public class ChartController : ControllerBase }); } - bool isJpeg = format.Equals("jpg", StringComparison.OrdinalIgnoreCase) - || format.Equals("jpeg", StringComparison.OrdinalIgnoreCase); + bool isJpegEnc = format.Equals("jpgEnc", StringComparison.OrdinalIgnoreCase); + bool isJpeg = isJpegEnc + || format.Equals("jpg", StringComparison.OrdinalIgnoreCase) + || format.Equals("jpeg", StringComparison.OrdinalIgnoreCase); byte[] imgBytes = SkiaChartRendererV2.RenderToPng(chartData, width, height, jpeg: isJpeg); @@ -124,6 +126,15 @@ public class ChartController : ControllerBase return File(pdfBytes, "application/pdf"); } + if (isJpegEnc) + { + // Nome file codificato da SP rpt_CertificatesChartsAlias (come vecchio jpgEnc DevExpress) + string? alias = await _chartDataServiceV2.GetChartAliasAsync(isin); + string fileName = string.IsNullOrEmpty(alias) ? $"chart_v2_{isin}" : alias; + Response.Headers.Append("Content-Disposition", $"inline; filename={fileName}.jpg"); + return File(imgBytes, "image/jpeg"); + } + if (isJpeg) { Response.Headers.Append("Content-Disposition", $"inline; filename=chart_v2_{isin}.jpg"); diff --git a/CertReports.Syncfusion/Services/Implementations/ChartDataServiceV2.cs b/CertReports.Syncfusion/Services/Implementations/ChartDataServiceV2.cs index 481aa04..7e04643 100644 --- a/CertReports.Syncfusion/Services/Implementations/ChartDataServiceV2.cs +++ b/CertReports.Syncfusion/Services/Implementations/ChartDataServiceV2.cs @@ -14,6 +14,12 @@ namespace CertReports.Syncfusion.Services.Implementations; public interface IChartDataServiceV2 { Task GetChartDataV2Async(string isin); + + /// + /// Ritorna l'AliasID codificato per il grafico (SP rpt_CertificatesChartsAlias). + /// Usato dal formato jpgEnc per impostare il nome file nella risposta HTTP. + /// + Task GetChartAliasAsync(string isin); } public class ChartDataServiceV2 : IChartDataServiceV2 @@ -104,6 +110,19 @@ public class ChartDataServiceV2 : IChartDataServiceV2 return result; } + public async Task GetChartAliasAsync(string isin) + { + await using var conn = new SqlConnection(_connectionString); + await conn.OpenAsync(); + + await using var cmd = new SqlCommand("rpt_CertificatesChartsAlias", conn) + { CommandType = CommandType.StoredProcedure }; + cmd.Parameters.AddWithValue("@isin", isin); + + var result = await cmd.ExecuteScalarAsync(); + return result == null || result == DBNull.Value ? null : result.ToString(); + } + /// /// Legge un campo numerico come decimal indipendentemente dal tipo SQL /// (decimal, float, real, int). Necessario perché cedlab_Chart_UL1 ritorna