Files
zentral/docs/development/devlog/2025-12-05-230000_live_data_alignment.md

2.2 KiB

Live Data Alignment for Report Designer

Obiettivo

Garantire che i dataset utilizzati nel report designer siano sempre automaticamente allineati con le strutture dati vive del gestionale, leggendo le strutture live invece di affidarsi a dati pre-configurati.

Modifiche Apportate

Backend

  1. Nuovo Servizio SchemaDiscoveryService:

    • Creato un servizio che scansiona ZentralDbContext per trovare tutti i DbSet disponibili.
    • Genera dinamicamente gli schemi dei dati basandosi sulle proprietà delle entità.
    • Supporta il caricamento dinamico delle entità con eager loading delle proprietà di navigazione.
    • Include un dizionario di metadati per mantenere descrizioni e icone curate per i dataset principali (Evento, Cliente, ecc.), pur supportando nuovi dataset automaticamente.
  2. Refactoring ReportsController:

    • Rimossi i metodi statici hardcoded per la generazione degli schemi (GetEventoSchema, ecc.).
    • Rimossa la lista hardcoded dei dataset disponibili.
    • Integrato SchemaDiscoveryService per ottenere la lista dei dataset, gli schemi e i dati.
    • Aggiornato GetVirtualDatasetEntities per usare il servizio di discovery.

Miglioramenti UX

  1. Etichette Leggibili:

    • Aggiornato SchemaDiscoveryService per rilevare automaticamente la proprietà migliore da usare come etichetta (RagioneSociale, Nome, Descrizione, ecc.).
    • Implementato ordinamento alfabetico automatico basato sull'etichetta rilevata.
  2. Refactoring VirtualDatasetsController:

    • Rimosso il metodo hardcoded GetBaseDatasetSchema.
    • Integrato SchemaDiscoveryService per la validazione e la generazione degli schemi dei dataset virtuali.
    • Risolto un TODO per la determinazione automatica del tipo di campo negli schemi virtuali.
  3. Registrazione Servizio:

    • Registrato SchemaDiscoveryService in Program.cs.

Risultato

Il Report Designer ora riflette automaticamente qualsiasi modifica al modello dati (nuove entità, nuovi campi) senza richiedere modifiche manuali al codice del controller. I dataset "core" mantengono le loro descrizioni user-friendly, mentre i nuovi dataset vengono esposti con nomi e descrizioni generati automaticamente.