From 270933eb1d222975fdac120ce75e633d2878ee22 Mon Sep 17 00:00:00 2001 From: SmartRootsSrl Date: Sat, 21 Mar 2026 11:50:41 +0100 Subject: [PATCH] chore: remove redundant README from CertReports.Syncfusion subfolder --- CertReports.Syncfusion/README.md | 164 ------------------------------- 1 file changed, 164 deletions(-) delete mode 100644 CertReports.Syncfusion/README.md diff --git a/CertReports.Syncfusion/README.md b/CertReports.Syncfusion/README.md deleted file mode 100644 index aa4685a..0000000 --- a/CertReports.Syncfusion/README.md +++ /dev/null @@ -1,164 +0,0 @@ -# CertReports.Syncfusion - -Progetto ASP.NET Core 8 per la generazione di report PDF per certificati finanziari, -basato su **Syncfusion PDF Library** (Community License). - -Sostituisce il vecchio progetto WebForms con DevExpress + PdfSharp. - ---- - -## Architettura - -``` -┌──────────────────────────────────────────────────────────────────────┐ -│ ReportController │ -│ GET /api/report?p={encrypted} | GET /api/report?alias={id} │ -└──────────────────────┬───────────────────────────────────────────────┘ - │ - ▼ -┌──────────────────────────────────────────────────────────────────────┐ -│ ReportOrchestrator │ -│ │ -│ 1. CertificateDataService ──→ SQL Server (stored procedures) │ -│ 2. AnagraficaSectionRenderer ──→ PDF Sezione 1 │ -│ 3. EventiSectionRenderer ──→ PDF Sezione 2 │ -│ 4. ScenarioSectionRenderer ──→ PDF Sezione 3 (se non Protect.) │ -│ 5. ChartSectionRenderer ──→ PDF Sezione 4 (ext. service) │ -│ 6. PdfMergerService ──→ PDF Finale unificato │ -└──────────────────────────────────────────────────────────────────────┘ -``` - -### Struttura file - -``` -CertReports.Syncfusion/ -├── Controllers/ -│ └── ReportController.cs # API endpoint (sostituisce WebForm) -├── Helpers/ -│ ├── CryptoHelper.cs # Decodifica ISIN cifrato -│ └── PdfTheme.cs # Colori, font, stili centralizzati -├── Models/ -│ └── CertificateModels.cs # Modelli dati (Info, Eventi, Scenario) -├── Services/ -│ ├── Interfaces/ -│ │ └── IServices.cs # Contratti per tutti i servizi -│ └── Implementations/ -│ ├── CertificateDataService.cs # Accesso DB via stored procedures -│ ├── AnagraficaSectionRenderer.cs # Sezione 1: dati + sottostanti -│ ├── EventiSectionRenderer.cs # Sezione 2: tabella eventi -│ ├── ScenarioSectionRenderer.cs # Sezione 3: matrice scenario -│ ├── ChartSectionRenderer.cs # Sezione 4: grafico -│ ├── PdfMergerService.cs # Merge PDF Syncfusion -│ └── ReportOrchestrator.cs # Coordinatore principale -├── GlobalUsings.cs -├── Program.cs # Entry point + DI setup -├── appsettings.json # Configurazione -└── CertReports.Syncfusion.csproj # Progetto + NuGet packages -``` - ---- - -## Mapping Vecchio → Nuovo - -| Vecchio (DevExpress/WebForms) | Nuovo (Syncfusion/ASP.NET Core) | -|----------------------------------------------|-------------------------------------------| -| `ReportFSSiteCrypt.aspx` (Page_Load) | `ReportController.cs` (API REST) | -| `XtraReport` + `.repx` template | `IPdfSectionRenderer` implementations | -| `report.ExportToPdf()` per ogni sezione | Ogni renderer restituisce `PdfDocument` | -| `PdfSharp.PdfReader.Open` + `CopyPages` | `Syncfusion PdfMergerService` | -| `CommonClass.DecryptCombined()` | `CryptoHelper.DecryptIsin()` | -| `CommonClass.execSP_Scalar()` | `CertificateDataService` (async) | -| `CallWebApi()` per chart | `ChartSectionRenderer` (HttpClientFactory)| -| File temp su disco + `File.Delete` | Tutto in memoria (MemoryStream) | -| `Response.BinaryWrite()` | `return File(bytes, "application/pdf")` | - ---- - -## Setup e Configurazione - -### 1. Prerequisiti -- .NET 8 SDK -- SQL Server con le stored procedures esistenti -- Syncfusion Community License Key (gratuita per < $1M fatturato) - -### 2. Configurazione `appsettings.json` - -```json -{ - "ConnectionStrings": { - "CertDb": "Server=...;Database=...;User Id=...;Password=...;" - }, - "Syncfusion": { - "LicenseKey": "LA_TUA_CHIAVE_QUI" - }, - "ChartService": { - "BaseUrl": "https://reports.smart-roots.net:4004", - "ChartEndpoint": "/ChartFSWeb.aspx?width=800&height=600&isin={0}&tipo=pdf" - } -} -``` - -### 3. Avvio - -```bash -dotnet restore -dotnet run -``` - -### 4. Test - -``` -# Con ISIN cifrato (compatibile vecchie URL) -GET https://localhost:5001/api/report?p=0x0200000047... - -# Con Alias ID -GET https://localhost:5001/api/report?alias=MY_ALIAS - -# Diretto (debug/interno) -GET https://localhost:5001/api/report/by-isin/CH1277653163 - -# Download come file -GET https://localhost:5001/api/report/download?alias=MY_ALIAS -``` - ---- - -## Stored Procedures Utilizzate - -| SP | Sezione Report | Descrizione | -|----|----------------|-------------| -| `rpt_Master_CFT_ISIN(@ISIN)` | 1 - Anagrafica | Dati certificato (1 record, campi pre-formattati) | -| `rpt_Details_UL_ISIN(@ISIN)` | 1 - Sottostanti | N sottostanti con strike, barriere, dividendi | -| `rpt_Events_CFT_ISIN(@ISIN)` | 2 - Eventi | Lista eventi con date, cedole, autocall | -| `rpt_AnalisiRischio_ISIN(@ISIN)` | 3 - Scenario | Tabella pivot 3×11 (variazioni -70%..+70%) | -| `rpt_FindIsinbyAliasID(@AliasID)` | Risoluzione | Alias ID → ISIN | - ---- - -## TODO Rimasti - -### Completato ✓ -- ✓ CryptoHelper con logica `DecryptCombined` completa (v1 TripleDES, v2 AES) -- ✓ Mapping colonne SP reali (`rpt_Master_CFT_ISIN`, `rpt_Details_UL_ISIN`, ecc.) -- ✓ Modelli aggiornati per ricevere stringhe pre-formattate dalla SP -- ✓ Analisi scenario adattata al formato pivot `col0..col11` - -### Da Verificare/Completare -1. **Test con DB reale** — Verificare che i nomi colonna nel `SqlDataReader` corrispondano - esattamente all'output delle SP (usa `GetStringSafe` che gestisce colonne mancanti) -2. **Layout PDF fine-tuning** — Posizioni, margini, colori per replicare il look originale -3. **Chart service** — L'endpoint ChartFSWeb.aspx funziona ancora? Altrimenti - implementare la generazione interna con SkiaSharp in `ChartSectionRenderer` -4. **SP `rpt_FindIsinbyAliasID`** — Verificare nome esatto e parametro - ---- - -## Vantaggi rispetto al Vecchio Progetto - -- **Nessun file temporaneo su disco**: tutto in MemoryStream -- **Dependency Injection**: ogni servizio è testabile e sostituibile -- **Async/await**: niente più `WebRequest` bloccanti -- **Logging strutturato**: Serilog con log rotanti -- **Sezioni modulari**: aggiungere un nuovo tipo di report = aggiungere un `IPdfSectionRenderer` -- **Tema centralizzato**: un cambio in `PdfTheme.cs` aggiorna tutti i PDF -- **API REST**: può essere consumata da qualsiasi client (non solo browser)