From 26f818486c20667673a6ecd2a0afdb50d5d000a0 Mon Sep 17 00:00:00 2001 From: SmartRootsSrl Date: Mon, 23 Mar 2026 16:14:50 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20wire=20DividendSectionRenderer=20into?= =?UTF-8?q?=20orchestrator=20=E2=80=94=20both=20active=20and=20expired=20f?= =?UTF-8?q?lows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also fix darkBlueBrush undefined reference in DividendSectionRenderer. Co-Authored-By: Claude Sonnet 4.6 --- .../DividendSectionRenderer.cs | 6 +-- .../Implementations/ReportOrchestrator.cs | 42 +++++++++++++++++-- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/CertReports.Syncfusion/Services/Implementations/DividendSectionRenderer.cs b/CertReports.Syncfusion/Services/Implementations/DividendSectionRenderer.cs index 122c0a7..1312c5a 100644 --- a/CertReports.Syncfusion/Services/Implementations/DividendSectionRenderer.cs +++ b/CertReports.Syncfusion/Services/Implementations/DividendSectionRenderer.cs @@ -118,15 +118,15 @@ public class DividendSectionRenderer DrawHeaderCell(g, cx, y, barriereW, rh, "BARRIERE", accentBrush, whiteBrush, headerFont); cx += barriereW; - // "DIVIDENDI" (cols 9-14) — blu scuro + // "DIVIDENDI" (cols 9-14) float dividendiW = cw[9] + cw[10] + cw[11] + cw[12] + cw[13] + cw[14]; - DrawHeaderCell(g, cx, y, dividendiW, rh, "DIVIDENDI", darkBlueBrush, whiteBrush, headerFont); + DrawHeaderCell(g, cx, y, dividendiW, rh, "DIVIDENDI", DarkBlueBrush, whiteBrush, headerFont); // ── Riga 2: Sottocolonne ─────────────────────────────────────── cx = x0; for (int i = 0; i < cw.Length; i++) { - var bg = i >= 9 ? darkBlueBrush : accentBrush; + var bg = i >= 9 ? DarkBlueBrush : accentBrush; DrawHeaderCell(g, cx, y + rh, cw[i], rh, Col2Headers[i], bg, whiteBrush, headerFont); cx += cw[i]; } diff --git a/CertReports.Syncfusion/Services/Implementations/ReportOrchestrator.cs b/CertReports.Syncfusion/Services/Implementations/ReportOrchestrator.cs index 799c31f..1dcd9d2 100644 --- a/CertReports.Syncfusion/Services/Implementations/ReportOrchestrator.cs +++ b/CertReports.Syncfusion/Services/Implementations/ReportOrchestrator.cs @@ -22,6 +22,7 @@ public class ReportOrchestrator : IReportOrchestrator private readonly IPdfCacheService _cache; private readonly ILogger _logger; private readonly ExpiredAnagraficaSectionRenderer _expiredAnagraficaRenderer; + private readonly DividendSectionRenderer _dividendRenderer; public ReportOrchestrator( ICertificateDataService dataService, @@ -30,7 +31,8 @@ public class ReportOrchestrator : IReportOrchestrator IPdfMergerService merger, IPdfCacheService cache, ILogger logger, - ExpiredAnagraficaSectionRenderer expiredAnagraficaRenderer) + ExpiredAnagraficaSectionRenderer expiredAnagraficaRenderer, + DividendSectionRenderer dividendRenderer) { _dataService = dataService; _sectionRenderers = sectionRenderers; @@ -39,13 +41,15 @@ public class ReportOrchestrator : IReportOrchestrator _cache = cache; _logger = logger; _expiredAnagraficaRenderer = expiredAnagraficaRenderer; + _dividendRenderer = dividendRenderer; } - public async Task GenerateReportAsync(string isin, bool showBranding = false) + public async Task GenerateReportAsync(string isin, bool showBranding = false, bool showDividend = false) { // ── Cache check ──────────────────────────────────────────────── - var baseCacheKey = showBranding ? $"{isin}:branded" : isin; - var expiredCacheKey = showBranding ? $"{isin}:expired:branded" : $"{isin}:expired"; + var dividendSuffix = showDividend ? ":dividend" : ""; + var baseCacheKey = showBranding ? $"{isin}:branded{dividendSuffix}" : $"{isin}{dividendSuffix}"; + var expiredCacheKey = showBranding ? $"{isin}:expired:branded{dividendSuffix}" : $"{isin}:expired{dividendSuffix}"; var cached = _cache.Get(baseCacheKey) ?? _cache.Get(expiredCacheKey); if (cached != null) @@ -63,6 +67,7 @@ public class ReportOrchestrator : IReportOrchestrator Eventi = await _dataService.GetCertificateEventsAsync(isin), Scenario = await _dataService.GetScenarioAnalysisAsync(isin), ShowBranding = showBranding, + ShowDividend = showDividend, }; // ── 2. Determina il tipo di report ──────────────────────────── @@ -95,6 +100,20 @@ public class ReportOrchestrator : IReportOrchestrator throw; } + if (reportData.ShowDividend) + { + try + { + pdfSections.Add(_dividendRenderer.Render(reportData)); + _logger.LogInformation("Sezione 'Dividend' generata per {Isin}", isin); + } + catch (Exception ex) + { + _logger.LogError(ex, "Errore nella sezione 'Dividend' per {Isin}", isin); + throw; + } + } + try { var eventiRenderer = _sectionRenderers.First(r => r.SectionName == "Eventi"); @@ -130,6 +149,21 @@ public class ReportOrchestrator : IReportOrchestrator _logger.LogError(ex, "Errore nella sezione '{Section}' per {Isin}", renderer.SectionName, isin); throw; } + + // Inserire pagina dividend subito dopo Anagrafica (Sezione 1) + if (renderer.SectionName == "Anagrafica" && reportData.ShowDividend) + { + try + { + pdfSections.Add(_dividendRenderer.Render(reportData)); + _logger.LogInformation("Sezione 'Dividend' generata per {Isin}", isin); + } + catch (Exception ex) + { + _logger.LogError(ex, "Errore nella sezione 'Dividend' per {Isin}", isin); + throw; + } + } } }