docs: fix spec review issues in dividend section design
This commit is contained in:
@@ -37,7 +37,7 @@ Il report è identico a quello attuale. Nessuna modifica visibile.
|
|||||||
## Struttura tabella landscape
|
## Struttura tabella landscape
|
||||||
|
|
||||||
Pagina A4 orizzontale (landscape), margini standard (`PdfTheme.PageMargin`).
|
Pagina A4 orizzontale (landscape), margini standard (`PdfTheme.PageMargin`).
|
||||||
Larghezza utile: ~770pt. Font: `PdfTheme.TableFont` (7pt).
|
Larghezza utile calcolata a runtime: `var size = page.GetClientSize(); float w = size.Width - 2 * PdfTheme.PageMargin; float h = size.Height - 2 * PdfTheme.PageMargin - PdfTheme.FooterHeight;` — NON usare costanti hardcoded. Font: `PdfTheme.TableFont` (7pt).
|
||||||
|
|
||||||
### Header a 2 livelli (colspan)
|
### Header a 2 livelli (colspan)
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ Larghezza utile: ~770pt. Font: `PdfTheme.TableFont` (7pt).
|
|||||||
| Rend.Fut. | 40 |
|
| Rend.Fut. | 40 |
|
||||||
| **Totale** | **742** |
|
| **Totale** | **742** |
|
||||||
|
|
||||||
Le larghezze vengono scalate proporzionalmente a `w / total` per adattarsi alla larghezza utile esatta.
|
Le larghezze vengono scalate proporzionalmente: `float scale = w / total;` dove `w` proviene da `page.GetClientSize().Width - 2 * PdfTheme.PageMargin` (calcolato a runtime, non hardcoded).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -123,17 +123,18 @@ Stessa condizione: se `data.ShowDividend == true`, saltare il blocco "SEZIONE C:
|
|||||||
- Registrazione: `AddScoped<DividendSectionRenderer>()` in `Program.cs`
|
- Registrazione: `AddScoped<DividendSectionRenderer>()` in `Program.cs`
|
||||||
- Metodo: `PdfDocument Render(CertificateReportData data)`
|
- Metodo: `PdfDocument Render(CertificateReportData data)`
|
||||||
- Pagina landscape A4, titolo "Sottostanti e Dividendi", tabella con header a 2 livelli
|
- Pagina landscape A4, titolo "Sottostanti e Dividendi", tabella con header a 2 livelli
|
||||||
- Footer: `PdfTheme.DrawFooter(g, w, h, 1, data.ShowBranding)`
|
- Dimensioni pagina: ricavare da `page.GetClientSize()` — `w = size.Width - 2 * PageMargin`, `h = size.Height - 2 * PageMargin - FooterHeight`
|
||||||
|
- Footer: `PdfTheme.DrawFooter(g, w, h, 1, data.ShowBranding)` — il numero pagina `1` è relativo alla pagina interna del documento parziale, coerente con lo stesso pattern usato da tutti gli altri renderer (la numerazione assoluta è una limitazione nota del sistema di merge)
|
||||||
|
|
||||||
### 7. `ReportOrchestrator`
|
### 7. `ReportOrchestrator`
|
||||||
- Iniettare `DividendSectionRenderer` nel costruttore
|
- Aggiungere `DividendSectionRenderer dividendRenderer` come parametro del costruttore, accanto a `ExpiredAnagraficaSectionRenderer expiredRenderer` già presente — stesso pattern di iniezione diretta
|
||||||
- In entrambi i flussi (attivo ed expired): se `data.ShowDividend == true`, chiamare `DividendSectionRenderer.Render(data)` e aggiungerlo alla lista documenti da mergiare, subito dopo la Sezione 1 (Anagrafica)
|
- In entrambi i flussi (attivo ed expired): se `data.ShowDividend == true`, chiamare `dividendRenderer.Render(data)` e inserire il `PdfDocument` risultante nella lista documenti da mergiare **subito dopo** il documento della Sezione 1 (Anagrafica), prima di tutti gli altri
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Note implementative
|
## Note implementative
|
||||||
|
|
||||||
- **Header colspan su PdfGrid**: Syncfusion `PdfGrid` non supporta nativamente colspan negli header. Implementare i due livelli di header come righe manuali disegnate con `DrawRectangle` + `DrawString`, poi la griglia dati sotto. Questa è la stessa tecnica usata per altri header complessi nel progetto.
|
- **Header colspan su PdfGrid**: Syncfusion `PdfGrid` non supporta nativamente colspan negli header. Implementare i due livelli di header come righe manuali disegnate con `DrawRectangle` + `DrawString` (seguire il pattern di `AnagraficaSectionRenderer.DrawEmittenteTable` per le altezze delle righe header: `rh = PdfTheme.RowHeight`). Riga 1 (gruppi): altezza `rh`; riga 2 (sotto-colonne): altezza `rh`. La `PdfGrid` dati viene disegnata a `y` iniziale = `y + rh * 2`. Le larghezze delle singole colonne nella riga 2 devono sommarsi esattamente alle larghezze dei gruppi in riga 1 per allineamento corretto.
|
||||||
- **Colori negativi/positivi**: applicare `ColorPerformanceCell` su % Perf., Buf.Cap., Buf.CPN, Rend., Rend.Fut. — stessa logica di `AnagraficaSectionRenderer`.
|
- **Colori negativi/positivi**: applicare `ColorPerformanceCell` su % Perf., Buf.Cap., Buf.CPN, Rend., Rend.Fut. — stessa logica di `AnagraficaSectionRenderer`.
|
||||||
- **Valori assenti**: celle dividendo vuote mostrano `"—"`.
|
- **Valori assenti**: celle dividendo vuote mostrano `"—"`.
|
||||||
- Il parametro `dividend` è indipendente da `branding` — entrambi possono essere attivi contemporaneamente.
|
- Il parametro `dividend` è indipendente da `branding` — entrambi possono essere attivi contemporaneamente.
|
||||||
|
|||||||
Reference in New Issue
Block a user