feat: introduce training module with new entities, migrations, API, and frontend application, and add article type and validity days.

This commit is contained in:
2025-12-12 18:12:51 +01:00
parent 49abef6f96
commit 4810d49410
32 changed files with 11685 additions and 211 deletions

View File

@@ -6,8 +6,10 @@ Creare un modulo generale per la gestione della formazione (Training), permetten
## Strategia
Mapping delle funzionalità sui moduli esistenti:
1. **Anagrafica Corsi** -> Modulo **Magazzino** (`Articolo`)
- La radice della Categoria Merceologica sarà "Formazione".
- Le sottocategorie definiranno il tipo di corso (es. "Sicurezza", "IT").
- Viene introdotta una **Classificazione Specifica** tramite property `Tipo` (`Standard`, `Corso`, `Servizio`).
- I Corsi saranno `Articolo` con `Tipo = Corso`.
- La `Categoria` (Merceologica) sarà usata per il raggruppamento (es. "Sicurezza", "IT").
- Il campo `GiorniValidita` gestirà la durata della validità dell'attestato.
2. **Anagrafica Soggetti** -> Modulo **Clienti** (`Cliente` + nuova entità `ClienteContatto`)
3. **Gestione Attestati e Scadenze** -> Nuovo Modulo **Training** (Formazione)
4. **Workflow Notifiche** -> Human-in-the-loop tramite Dashboard dedicato.
@@ -15,34 +17,34 @@ Mapping delle funzionalità sui moduli esistenti:
## Piano di Lavoro
### 1. Documentazione e Analisi
- [ ] Creazione piano di lavoro (questo file).
- [ ] Aggiornamento `ZENTRAL.md`.
- [x] Creazione piano di lavoro (questo file).
- [x] Aggiornamento `ZENTRAL.md`.
### 2. Backend (.NET)
#### Domain Layer
- [ ] **Refactoring Categorie (Warehouse)**:
- [x] **Refactoring Categorie (Warehouse)**:
- Implementare gestione **Gruppi Merceologici a 3 livelli** (Standardizzazione Classificazione).
- Utilizzare la categoria "Formazione" come root per identificare i corsi.
- [ ] **Modifica Entity `Articolo`**:
- [x] **Modifica Entity `Articolo`**:
- Aggiungere gestione **Validità/Scadenza Standard** (es. `int? GiorniValidita`).
- Il campo sarà utilizzato per calcolare la data di scadenza del corso una volta erogato.
- [ ] **Nuova Entity `ClienteContatto`**:
- [x] **Nuova Entity `ClienteContatto`**:
- Proprietà: `Nome`, `Cognome`, `Email`, `Ruolo`, `Telefono`, foreign key a `Cliente`.
- Aggiornare `Cliente` con collection `Contatti`.
- [ ] **Nuova Entity `TrainingRecord`**:
- [x] **Nuova Entity `TrainingRecord`**:
- Rappresenta l'avvenuta formazione per un contatto.
- Proprietà: `ClienteContattoId`, `ArticoloId` (Corso), `DataEsecuzione`, `DataScadenza` (Calcolata), `AttestatoUrl`, `Stato` (Valid, Expiring, Expired), `Note`.
- Entità generica per qualsiasi tipo di corso.
#### Infrastructure / EF Core
- [ ] Creare Migrazione EF per le nuove entità e modifiche.
- [ ] Aggiornare `ApplicationDbContext`.
- [x] Creare Migrazione EF per le nuove entità e modifiche.
- [x] Aggiornare `ApplicationDbContext`.
#### API Layer
- [ ] **Aggiornare `ArticoliController`**: Gestione nuovi campi (Validità, Categorie).
- [ ] **Gestione Classificazioni**: Implementare API per gestire la gerarchia (o livelli) delle categorie merceologiche.
- [ ] **Aggiornare `ClientiController`**: Gestione CRUD Contatti.
- [ ] **Nuovo `TrainingController`**:
- [x] **Aggiornare `ArticoliController`**: Gestione nuovi campi (Validità, Categorie).
- [x] **Gestione Classificazioni**: Implementare API per gestire la gerarchia (o livelli) delle categorie merceologiche.
- [x] **Aggiornare `ClientiController`**: Gestione CRUD Contatti.
- [x] **Nuovo `TrainingController`**:
- CRUD TrainingRecords.
- Upload file attestato.
- Endpoint `GetExpiringTrainings` per la dashboard (filtri per data, azienda, categoria corso).
@@ -50,8 +52,8 @@ Mapping delle funzionalità sui moduli esistenti:
### 3. Frontend (React)
#### Modulo Training (Nuova App `training`)
- [ ] **Setup Modulo**: Creare cartella `src/frontend/src/apps/training` e configurare route.
- [ ] **Componenti**:
- [x] **Setup Modulo**: Creare cartella `src/frontend/src/apps/training` e configurare route.
- [x] **Componenti**:
- `TrainingDashboard`: Widget con scadenze imminenti e scadute, grafici per tipologia corso.
- `CourseRegistry`: Tabella corsi (Articoli filtrati per categoria "Formazione"). Permette di creare nuovi corsi e gestire le sottocategorie (Tipi di corso).
- `TrainingMatrix`: Vista partecipanti x corsi o lista formazioni.
@@ -59,8 +61,9 @@ Mapping delle funzionalità sui moduli esistenti:
#### Integrazione Moduli Esistenti
- [ ] **Magazzino**: Gestione UI per Classificazioni a 3 livelli (Gruppo/Famiglia).
- [ ] **Magazzino**: Aggiungere campi Validità/Scadenza nel form Articolo.
- [ ] **Clienti**: Aggiungere Tab "Contatti" nel dettaglio Cliente per gestire i lavoratori/partecipanti.
- [x] **Magazzino**: Aggiungere campi Validità/Scadenza nel form Articolo.
- [x] **Clienti**: Aggiungere Tab "Contatti" nel dettaglio Cliente per gestire i lavoratori/partecipanti.
- [x] **UI**: Aggiungere "Training" a `Sidebar.tsx` e `SearchBar.tsx`.
### 4. Workflow e Notifiche
- [ ] Implementare logica "Human-in-the-loop": Liste "Da Inviare" nella Dashboard.
@@ -75,4 +78,6 @@ Mapping delle funzionalità sui moduli esistenti:
5. Verifica Scadenza e Notifica.
## Stato Attuale
- Inizio analisi e setup.
- Implementazione Core (Backend/Frontend) completata.
- Da completare integrazione fine UI e workflow notifiche.
- 2025-12-12-174800_rimosse_tab_interne_modulo_formazione: Rimosse le tab interne (Dashboard, Registry, Matrix) dal layout del modulo Formazione in quanto ridondanti rispetto alla navigazione principale.