Commit Graph

65 Commits

Author SHA1 Message Date
7dbcb8ab16 feat: add FundSkiaChartRenderer (SkiaSharp price line chart)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:44:50 +02:00
8e6341d980 feat: add FundAnagraficaRenderer (layout C: title strip + 3 columns)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:41:48 +02:00
d3c5395c58 fix: add error handling to FindIsinByAliasIdAsync, use NullIfEmpty 2026-06-08 17:39:02 +02:00
bbb7e4207a feat: add FundDataService (sfih_GetOptDettagli + sfih_GetChartPrices) 2026-06-08 17:37:26 +02:00
fa1fc94fd8 feat: add IFundDataService, IFundReportOrchestrator interfaces 2026-06-08 17:35:59 +02:00
c655cdd31e fix: null-safe string reader, chart V2 label collision avoidance
- ChartDataServiceV2: aggiunto helper ToStr() per GetString null-safe su
  colonne nullable (Sottostante, NomeCFT); pattern analogo a ToDecimal
- SkiaChartRendererV2: collision avoidance label margine destro — tutti i
  label (barriere, strike, autocall, end-label serie) raccolti in lista,
  ordinati per Y e distribuiti con spacing minimo 13px (push-down +
  clamp-up) prima del disegno
- CLAUDE.md: documentati i due fix e la root cause cedlab_Chart_UL1
  divide-by-zero su Strike=0 (fix DB: NULLIF(cu.Strike,0))

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-29 10:27:44 +02:00
bb86c6ac20 feat: add Direzione, RendimentoPotenziale, CategoryID to Analisi section
- Sezione Analisi sinistra: aggiunto campo Direzione (dopo Tipo Basket)
- Sezione Analisi destra: aggiunto Rend. Potenziale a Scadenza (dopo Rend. Capitale a Scadenza)
- Rend. Capitale a Scadenza nascosto per CategoryID 1 (Bonus) e 4 (Step Up)
- Aggiunto CategoryID (int) e RendimentoPotenziale (string) a CertificateInfo
- Letti da SP rpt_Master_CFT_ISIN

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 17:08:55 +02:00
52bda26a4b fix: calculate current price for non-WorstOf end labels from series data
PriceWorst is only populated by the SP for the WorstOf underlying.
For others, derive current price as (last Performance% / 100) * Strike.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 11:16:46 +02:00
6454420230 feat: add price value to non-WorstOf underlyings end labels
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 11:13:56 +02:00
5579915fbc feat: restyle chart v2 colors, end labels and legend
- CTF line: black instead of red
- WorstOf line: red + end label shows "Name (value)" format
- Other underlyings: vivid palette (teal/amber/purple/sky/indigo/orange) instead of grey shades; end label shows name
- Barriera Capitale: brown to avoid confusion with WorstOf red
- PrezzoWorst dashed line: red aligned with WorstOf
- Legend font increased 10→12px
- Legend entry for WorstOf shows "Name (Worst Of)"

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 11:10:43 +02:00
c350b7d3b5 feat: add format=jpgEnc support (filename from rpt_CertificatesChartsAlias SP) 2026-05-27 18:38:52 +02:00
d60296aebd fix: X-axis dates now use month-based intervals (fixes missing dates for short/long date ranges) 2026-05-27 18:24:39 +02:00
a848d21519 fix: hide CTF series when NumPrezziCFT < 30 (same behavior as old DevExpress) 2026-05-27 18:19:19 +02:00
f9a7d7a8d2 feat: add JPEG support to /api/chart/v2 (?format=jpg|jpeg) 2026-05-27 18:06:34 +02:00
0dd74b0d59 fix: use ToDecimal helper for float/decimal compatibility in cedlab_Chart_UL1 reader (PriceWorst, PriceWorstPerc are float) 2026-05-27 17:37:38 +02:00
e4728cf79e fix: revert to cedlab_Chart_UL1 (already has all V2 fields); remove cedlab_Chart_UL2; fix AllSeriesV2 SQL with DailyUL1 logic 2026-05-27 16:35:48 +02:00
a866a2f7d5 fix: use cedlab_Chart_UL2 (new SP, don't modify UL1); add correct SQL scripts with Prices table 2026-05-27 16:28:26 +02:00
0caccc72d5 feat: add SkiaChartRendererV2 (title, colored series, line labels, bottom legend) 2026-05-27 15:50:05 +02:00
494443ede3 feat: add ChartDataServiceV2 with IChartDataServiceV2 (2-SP approach) 2026-05-27 15:45:15 +02:00
a3f6d6000c fix: fallback to Categoria when natixis=true but Nome is empty 2026-03-26 14:06:25 +01:00
79b02b39b6 fix: align Memoria em-dash fallback with AnagraficaSectionRenderer 2026-03-26 12:55:40 +01:00
7a3a8114bd feat: rename Memoria Cedola and add natixis support to ExpiredAnagraficaSectionRenderer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 12:52:48 +01:00
716f191fc5 feat: add Memoria field to Analisi and natixis support to AnagraficaSectionRenderer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 12:48:51 +01:00
7595530490 feat: propagate showNatixis through orchestrator and cache keys
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 12:46:18 +01:00
59ff3e9ac8 feat: add showNatixis param to IReportOrchestrator interface 2026-03-26 12:30:08 +01:00
5e9598e9dd feat: dim unreachable event rows in expired certificate reports 2026-03-24 16:28:04 +01:00
76145ad0d2 fix: rinomina header gruppo DIVIDENDI → DIVIDENDI ANNUALI nella tabella sottostanti+dividendi
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 10:13:40 +01:00
7c7d1658ea fix: rinomina etichette UI nei report PDF
- Sezione Analisi: Prossimo Autocall → Prossimo Richiamo Anticipato
- Lista Eventi: Ex Date → Data Stacco
- Tabella Sottostanti: % Perf. → Performance (tutti i renderer)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 09:42:13 +01:00
b3cf03e3d4 fix: widen Rendimento/Rendimento Futuro columns to prevent mid-word wrap 2026-03-23 17:32:29 +01:00
088a95cafb fix: use Small/Header fonts in sottostanti table in expired renderer 2026-03-23 17:23:51 +01:00
f95242df1a fix: use Small/Header fonts in dividend table (consistent with eventi) 2026-03-23 17:23:50 +01:00
1f67285ae6 fix: use Small/Header fonts in sottostanti table (consistent with eventi) 2026-03-23 17:23:49 +01:00
b93a16ce6e fix: DrawSectionLabel title style + thin borders + correct font in dividend renderer 2026-03-23 17:17:49 +01:00
b1003bc3f1 fix: DrawSectionLabel title style in scenario renderer 2026-03-23 17:17:36 +01:00
031a1acc1a fix: DrawSectionLabel title style in eventi renderer 2026-03-23 17:17:21 +01:00
de7148c5cb fix: restore 'Soglia Rimborso' label in expired eventi (revert incorrect rename) 2026-03-23 17:07:53 +01:00
bd51bb4d26 fix: Italian labels + section title style + double header row height in dividend renderer 2026-03-23 17:05:39 +01:00
15a4034a77 fix: consistent title style in scenario renderer 2026-03-23 17:04:29 +01:00
9c78b3f852 fix: Italian column labels + consistent title style in eventi renderer
Changes applied:
1. Updated column names in active certificates (quotazione):
   - "Trigger Cedola" → "Livello Cedola"
   - "Trigger Autocall" → "Livello Richiamo Anticipato"
   - "Valore Autocall" → "Valore Richiamo Anticipato"

2. Updated column names in expired certificates:
   - "Soglia Rimborso" → "Livello Richiamo Anticipato"
   - "Valore Autocall" → "Valore Richiamo Anticipato"

3. Synchronized title style in EventiSectionRenderer with AnagraficaSectionRenderer:
   - Uses AccentBlue color instead of generic SectionTitle
   - Added blue separator line below title (AccentBluePen)
   - Aligned spacing and font sizing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 17:04:28 +01:00
3e52f807a5 fix: translate labels to Italian in anagrafica section (analisi + sottostanti) 2026-03-23 17:03:47 +01:00
1edfccfc62 fix: translate sottostanti column labels to Italian in expired anagrafica 2026-03-23 17:03:46 +01:00
26f818486c 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>
2026-03-23 16:16:19 +01:00
069e33f0ec feat: add DividendSectionRenderer with landscape two-level header table
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 16:09:41 +01:00
5b6400903d feat: skip sottostanti table in expired anagrafica when ShowDividend=true 2026-03-23 16:00:14 +01:00
35b2e9ae43 feat: skip sottostanti table in anagrafica when ShowDividend=true 2026-03-23 15:56:56 +01:00
f79423219f feat: add showDividend param to IReportOrchestrator interface 2026-03-23 15:50:56 +01:00
49014c1544 feat: move Barriera/Rimborso Capitale from eventi table to anagrafica analisi
Expired certificate report: removed 'Barriera Capitale' and 'Rimborso Capitale'
columns from the eventi table (9 columns now). Added the same two fields to
the Analisi section on page 1, mapped from LivelloBarriera and CapitalValue.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 11:04:43 +01:00
14d4baa629 feat: add sottostanti table to expired certificate report (sezione 1)
Adds the 9-column underlyings table (identical to the active report) to
ExpiredAnagraficaSectionRenderer, with overflow-to-new-page guard.
Also excludes Logs/** from csproj build and updates README accordingly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 09:32:28 +01:00
2546990556 fix: set Analisi section width to match Caratteristiche Prodotto (ColW) 2026-03-21 11:42:57 +01:00
7916cbc93b fix: align Analisi section left, always show KV labels, update expired events table columns 2026-03-21 11:38:07 +01:00