feat: wire DividendSectionRenderer into orchestrator — both active and expired flows
Also fix darkBlueBrush undefined reference in DividendSectionRenderer. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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];
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ public class ReportOrchestrator : IReportOrchestrator
|
||||
private readonly IPdfCacheService _cache;
|
||||
private readonly ILogger<ReportOrchestrator> _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<ReportOrchestrator> 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<byte[]> GenerateReportAsync(string isin, bool showBranding = false)
|
||||
public async Task<byte[]> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user