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);
|
DrawHeaderCell(g, cx, y, barriereW, rh, "BARRIERE", accentBrush, whiteBrush, headerFont);
|
||||||
cx += barriereW;
|
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];
|
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 ───────────────────────────────────────
|
// ── Riga 2: Sottocolonne ───────────────────────────────────────
|
||||||
cx = x0;
|
cx = x0;
|
||||||
for (int i = 0; i < cw.Length; i++)
|
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);
|
DrawHeaderCell(g, cx, y + rh, cw[i], rh, Col2Headers[i], bg, whiteBrush, headerFont);
|
||||||
cx += cw[i];
|
cx += cw[i];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ public class ReportOrchestrator : IReportOrchestrator
|
|||||||
private readonly IPdfCacheService _cache;
|
private readonly IPdfCacheService _cache;
|
||||||
private readonly ILogger<ReportOrchestrator> _logger;
|
private readonly ILogger<ReportOrchestrator> _logger;
|
||||||
private readonly ExpiredAnagraficaSectionRenderer _expiredAnagraficaRenderer;
|
private readonly ExpiredAnagraficaSectionRenderer _expiredAnagraficaRenderer;
|
||||||
|
private readonly DividendSectionRenderer _dividendRenderer;
|
||||||
|
|
||||||
public ReportOrchestrator(
|
public ReportOrchestrator(
|
||||||
ICertificateDataService dataService,
|
ICertificateDataService dataService,
|
||||||
@@ -30,7 +31,8 @@ public class ReportOrchestrator : IReportOrchestrator
|
|||||||
IPdfMergerService merger,
|
IPdfMergerService merger,
|
||||||
IPdfCacheService cache,
|
IPdfCacheService cache,
|
||||||
ILogger<ReportOrchestrator> logger,
|
ILogger<ReportOrchestrator> logger,
|
||||||
ExpiredAnagraficaSectionRenderer expiredAnagraficaRenderer)
|
ExpiredAnagraficaSectionRenderer expiredAnagraficaRenderer,
|
||||||
|
DividendSectionRenderer dividendRenderer)
|
||||||
{
|
{
|
||||||
_dataService = dataService;
|
_dataService = dataService;
|
||||||
_sectionRenderers = sectionRenderers;
|
_sectionRenderers = sectionRenderers;
|
||||||
@@ -39,13 +41,15 @@ public class ReportOrchestrator : IReportOrchestrator
|
|||||||
_cache = cache;
|
_cache = cache;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_expiredAnagraficaRenderer = expiredAnagraficaRenderer;
|
_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 ────────────────────────────────────────────────
|
// ── Cache check ────────────────────────────────────────────────
|
||||||
var baseCacheKey = showBranding ? $"{isin}:branded" : isin;
|
var dividendSuffix = showDividend ? ":dividend" : "";
|
||||||
var expiredCacheKey = showBranding ? $"{isin}:expired:branded" : $"{isin}:expired";
|
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);
|
var cached = _cache.Get(baseCacheKey) ?? _cache.Get(expiredCacheKey);
|
||||||
if (cached != null)
|
if (cached != null)
|
||||||
@@ -63,6 +67,7 @@ public class ReportOrchestrator : IReportOrchestrator
|
|||||||
Eventi = await _dataService.GetCertificateEventsAsync(isin),
|
Eventi = await _dataService.GetCertificateEventsAsync(isin),
|
||||||
Scenario = await _dataService.GetScenarioAnalysisAsync(isin),
|
Scenario = await _dataService.GetScenarioAnalysisAsync(isin),
|
||||||
ShowBranding = showBranding,
|
ShowBranding = showBranding,
|
||||||
|
ShowDividend = showDividend,
|
||||||
};
|
};
|
||||||
|
|
||||||
// ── 2. Determina il tipo di report ────────────────────────────
|
// ── 2. Determina il tipo di report ────────────────────────────
|
||||||
@@ -95,6 +100,20 @@ public class ReportOrchestrator : IReportOrchestrator
|
|||||||
throw;
|
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
|
try
|
||||||
{
|
{
|
||||||
var eventiRenderer = _sectionRenderers.First(r => r.SectionName == "Eventi");
|
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);
|
_logger.LogError(ex, "Errore nella sezione '{Section}' per {Isin}", renderer.SectionName, isin);
|
||||||
throw;
|
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