176 lines
7.1 KiB
Markdown
176 lines
7.1 KiB
Markdown
# Design Spec: Redesign Pagina 1 Report + Parametro Footer
|
|
|
|
**Data:** 2026-03-20
|
|
**Progetto:** CertReports.Syncfusion
|
|
**Scope:** `AnagraficaSectionRenderer.cs`, `ReportController.cs`, `PdfTheme.cs`, modelli dati
|
|
|
|
---
|
|
|
|
## Obiettivo
|
|
|
|
Ridisegnare la prima pagina del report PDF per renderla graficamente più professionale, riallineare i campi all'ordine del vecchio report DevExpress, e fare entrare la tabella Sottostanti nella prima pagina. Aggiungere inoltre un parametro API opzionale per abilitare/disabilitare il footer con branding Smart Roots.
|
|
|
|
---
|
|
|
|
## 1. Stile visivo (Opzione C — "Ibrido elegante")
|
|
|
|
Approvato dall'utente.
|
|
|
|
### Titolo pagina
|
|
- Testo: `"Scheda Prodotto {ISIN}"` — grande, **blu** (`#1565C0`), font bold 17pt
|
|
- Sottotitolo: `"Tipologia: {Categoria}"` — grigio, 9.5pt
|
|
- Separatore: linea orizzontale blu `#1565C0` spessore 2.5pt sotto il titolo
|
|
- **Bid/Ask in alto a destra** del titolo: data/ora piccola in grigio, Bid e Ask in blu bold 13pt
|
|
|
|
### Intestazioni di sezione
|
|
- Niente header-bar scura (attuale). Sostituire con:
|
|
`font bold 10.5pt colore #1565C0` + accent line verticale sinistra 3pt blu
|
|
- Esempio: `"Caratteristiche Prodotto"`, `"Analisi"`, `"Sottostanti"`
|
|
|
|
### Tabelle dati emittente
|
|
- Border 1px `#bbb`, border-radius 2px
|
|
- Prima riga: header piena `#1565C0` bianco bold (es. `"EMITTENTE UBS"`)
|
|
- Righe alternate: sfondo `#f9f9f9` / bianco
|
|
- Bordi interni `#e5e5e5` 0.5pt
|
|
|
|
### KV pairs (sezione Analisi)
|
|
- Label a sinistra in grigio `#555`, valore a destra bold
|
|
- Separatori orizzontali `#e8e8e8` 0.3pt
|
|
- Valori negativi in rosso `#CC0000`, valori chiave (cedola) in blu `#1565C0`
|
|
|
|
---
|
|
|
|
## 2. Struttura e ordine campi — Pagina 1
|
|
|
|
La prima pagina è divisa in **3 sezioni** verticali, tutte dentro una singola pagina A4.
|
|
|
|
### Sezione A — "Caratteristiche Prodotto"
|
|
|
|
Due colonne:
|
|
|
|
| Colonna sinistra (tabella con header) | Colonna destra (KV list) |
|
|
|---------------------------------------|--------------------------|
|
|
| EMITTENTE (header blu) | Importo Cedole Pagate |
|
|
| ISIN | Importo Cedole da Pagare |
|
|
| Mercato | Importo Cedole in Memoria |
|
|
| Valuta | Rendimento Totale (rosso se negativo) |
|
|
| Data Emissione | |
|
|
| Data Scadenza | |
|
|
| Prossimo Autocall | |
|
|
|
|
> La colonna destra non contiene più il box Bid/Ask separato: Bid/Ask sono già nel titolo pagina.
|
|
|
|
### Sezione B — "Analisi"
|
|
|
|
Due colonne KV:
|
|
|
|
| Colonna sinistra | Colonna destra |
|
|
|------------------|----------------|
|
|
| Importo Cedola (p.a.) | Rendimento Capitale a Scadenza |
|
|
| Frequenza Cedola | IRR |
|
|
| Valore Nominale | Protezione Capitale |
|
|
| Prezzo Emissione | Protezione Coupon |
|
|
| Barriera Capitale | Valore Autocall |
|
|
| Tipo Barriera | Distanza Autocall |
|
|
| Tipo Basket | Rendimento Autocall |
|
|
| Leva | Fattore Airbag |
|
|
| | Trigger OneStar |
|
|
|
|
> I campi vuoti (Leva, Fattore Airbag, Trigger OneStar) vengono mostrati con valore `"—"` invece di essere omessi, per mantenere la struttura fissa come nel vecchio report.
|
|
|
|
### Sezione C — "Sottostanti"
|
|
|
|
Tabella full-width con **9 colonne** (la colonna "Dist. AC" presente nel report attuale viene rimossa per consentire l'inserimento nella pagina 1):
|
|
|
|
| Nome | Strike | Last | % Perf. | Barr. Cap. | Buffer K | Trigger CPN | Buffer CPN | Trig. AC |
|
|
|------|--------|------|---------|------------|----------|-------------|------------|----------|
|
|
|
|
- Header: sfondo `#1565C0`, testo bianco bold 7.5pt
|
|
- Righe alternate: `#f7f9fc` / bianco
|
|
- Valori performance negativi: rosso `#CC0000`; positivi: verde `#2E7D32`
|
|
- Font celle sottostanti: 7.5pt (sia header che celle dati) — sovrascrive il valore generico `Small` 6.5pt di `PdfTheme`
|
|
|
|
---
|
|
|
|
## 3. Gestione spazio e pagina
|
|
|
|
Per fare entrare tutto in una pagina A4 (area utile ~757pt):
|
|
|
|
- Ridurre `PageMargin` da 40pt a 36pt
|
|
- `RowHeight` per KV pairs: 14pt (attuale 18pt)
|
|
- `RowHeight` per tabella sottostanti: 13pt
|
|
- Usare font `Small` (6.5pt) per celle sottostanti, `SmallBold` per header
|
|
- Nelle sezioni Analisi, saltare i campi null/vuoti **eccetto** questi tre che vengono sempre mostrati con `"—"`: `Leva`, `Fattore Airbag`, `Trigger OneStar` (sono visibili anche nel vecchio report anche quando vuoti)
|
|
|
|
Se la tabella Sottostanti non entra comunque (certificati con molti sottostanti), aggiungere una nuova pagina solo per essa — non alterare la struttura della pagina 1.
|
|
|
|
---
|
|
|
|
## 4. Parametro API footer
|
|
|
|
### Modifica API
|
|
|
|
Tutti gli endpoint di generazione report accettano un nuovo parametro query opzionale:
|
|
|
|
```
|
|
GET /api/report/by-isin/{isin}?branding=true
|
|
GET /api/report?p={encrypted}&branding=true
|
|
GET /api/report?alias={id}&branding=true
|
|
GET /api/report/download?p={encrypted}&branding=true
|
|
```
|
|
|
|
Default: `branding=false` (nessuna modifica comportamentale agli URL esistenti).
|
|
|
|
### Comportamento footer
|
|
|
|
| `branding` | Footer |
|
|
|------------|--------|
|
|
| `false` (default) | Solo numero di pagina centrato, nessuna scritta |
|
|
| `true` | `"Powered by [Smart Roots](https://www.smart-roots.net)"` a sinistra + numero pagina a destra. "Smart Roots" è un hyperlink PDF cliccabile che punta a `https://www.smart-roots.net` |
|
|
|
|
### Implementazione
|
|
|
|
- Aggiungere `bool ShowBranding` a un nuovo modello `ReportOptions` (o direttamente a `ReportRequest`)
|
|
- `ReportController` legge `branding` dalla query string e lo passa a `ReportOrchestrator`
|
|
- `ReportOrchestrator` passa `ShowBranding` ai renderer aggiungendo `bool ShowBranding` direttamente a `CertificateReportData` (evita di cambiare la firma di `IPdfSectionRenderer.Render`)
|
|
- Ogni renderer (a partire da `AnagraficaSectionRenderer`) chiama un helper centralizzato `PdfTheme.DrawFooter(g, pageWidth, pageHeight, pageNumber, showBranding)`
|
|
|
|
### Footer layout
|
|
|
|
```
|
|
[Solo numero pagina]
|
|
────────────────────────────────────────────────
|
|
1
|
|
|
|
[Con branding]
|
|
────────────────────────────────────────────────
|
|
Powered by [Smart Roots↗] Pagina 1
|
|
↑ hyperlink → https://www.smart-roots.net
|
|
```
|
|
|
|
- Linea separatrice: `#dddddd` 0.5pt
|
|
- Testo branding: `"Powered by "` in `Small` 7pt grigio `#666`, seguito da `"Smart Roots"` come `PdfTextWebLink` blu `#1565C0` che punta a `https://www.smart-roots.net`
|
|
- Numero pagina: `Small` 7pt grigio, allineato a destra
|
|
|
|
---
|
|
|
|
## 5. File modificati
|
|
|
|
| File | Modifica |
|
|
|------|----------|
|
|
| `AnagraficaSectionRenderer.cs` | Riscrivere completamente il metodo `Render()` con nuova struttura 3-sezioni |
|
|
| `PdfTheme.cs` | Ridurre margini/row height, aggiungere `DrawFooter()`, aggiungere colori `AccentBlue`, `NegativeRed`, `PositiveGreen` |
|
|
| `ReportController.cs` | Leggere parametro `branding` da query string |
|
|
| `CertificateReportData.cs` (o nuovo `ReportOptions.cs`) | Aggiungere `bool ShowBranding` |
|
|
| `ReportOrchestrator.cs` | Propagare `ShowBranding` ai renderer |
|
|
| `IServices.cs` | Aggiornare firma `Render()` se necessario |
|
|
|
|
---
|
|
|
|
## 6. Fuori scope
|
|
|
|
- Nessuna modifica alle altre sezioni (Eventi, Scenario, Grafico)
|
|
- Nessuna modifica alle stored procedure
|
|
- Nessuna modifica al `ChartController`
|
|
- Nessuna aggiunta di nuovi campi al modello `CertificateInfo` — si usano i campi già esistenti riorganizzati
|