feat: Repurpose safety training module to a general training module, supporting various course types.
This commit is contained in:
@@ -51,5 +51,5 @@ File riassuntivo dello stato di sviluppo di Zentral.
|
|||||||
- Riorganizzazione UI Auto Codes, allineamento stile a Custom Fields, miglioramento traduzioni e categorizzazione.
|
- Riorganizzazione UI Auto Codes, allineamento stile a Custom Fields, miglioramento traduzioni e categorizzazione.
|
||||||
- [2025-12-12 - Modulo Comunicazioni](./devlog/2025-12-12-110000_communications_module.md) - **In Corso**
|
- [2025-12-12 - Modulo Comunicazioni](./devlog/2025-12-12-110000_communications_module.md) - **In Corso**
|
||||||
- Implementazione invio email e gestione comunicazioni.
|
- Implementazione invio email e gestione comunicazioni.
|
||||||
- [2025-12-12 - Gestione Scadenzario Formazione Sicurezza](./devlog/2025-12-12-105500_safety_training_schedule.md) - **In Corso**
|
- [2025-12-12 - Gestione Modulo Formazione (Generale)](./devlog/2025-12-12-105500_safety_training_schedule.md) - **In Corso**
|
||||||
- Implementazione modulo sicurezza, formazione e scadenziario.
|
- Implementazione modulo formazione generale e scadenziario.
|
||||||
@@ -1,13 +1,15 @@
|
|||||||
# Implementazione Gestione Scadenzario Formazione Sicurezza
|
# Implementazione Modulo Formazione (Generale)
|
||||||
|
|
||||||
## Obiettivo
|
## Obiettivo
|
||||||
Configurare il flusso per la gestione dello scadenzario della formazione sicurezza, accentrando dati e scadenze, abbandonando file Excel disconnessi.
|
Creare un modulo generale per la gestione della formazione (Training), permettendo all'utente di definire corsi di diverso tipo (es. Sicurezza, Tecnici, Qualità, Soft Skills) in base alle esigenze del business. Il sistema gestirà scadenze, attestati e partecipanti in modo agnostico rispetto al tipo di corso.
|
||||||
|
|
||||||
## Strategia
|
## Strategia
|
||||||
Mapping delle funzionalità sui moduli esistenti:
|
Mapping delle funzionalità sui moduli esistenti:
|
||||||
1. **Anagrafica Corsi** -> Modulo **Magazzino** (`Articolo`)
|
1. **Anagrafica Corsi** -> Modulo **Magazzino** (`Articolo`)
|
||||||
|
- La radice della Categoria Merceologica sarà "Formazione".
|
||||||
|
- Le sottocategorie definiranno il tipo di corso (es. "Sicurezza", "IT").
|
||||||
2. **Anagrafica Soggetti** -> Modulo **Clienti** (`Cliente` + nuova entità `ClienteContatto`)
|
2. **Anagrafica Soggetti** -> Modulo **Clienti** (`Cliente` + nuova entità `ClienteContatto`)
|
||||||
3. **Gestione Attestati e Scadenze** -> Nuovo Modulo **Safety** (o estensione Eventi/Qualità)
|
3. **Gestione Attestati e Scadenze** -> Nuovo Modulo **Training** (Formazione)
|
||||||
4. **Workflow Notifiche** -> Human-in-the-loop tramite Dashboard dedicato.
|
4. **Workflow Notifiche** -> Human-in-the-loop tramite Dashboard dedicato.
|
||||||
|
|
||||||
## Piano di Lavoro
|
## Piano di Lavoro
|
||||||
@@ -18,48 +20,59 @@ Mapping delle funzionalità sui moduli esistenti:
|
|||||||
|
|
||||||
### 2. Backend (.NET)
|
### 2. Backend (.NET)
|
||||||
#### Domain Layer
|
#### Domain Layer
|
||||||
|
- [ ] **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`**:
|
- [ ] **Modifica Entity `Articolo`**:
|
||||||
- Aggiungere `int? DurataValiditaAnni` (Validità del corso).
|
- Aggiungere gestione **Validità/Scadenza Standard** (es. `int? GiorniValidita`).
|
||||||
- Aggiungere `bool IsCorsoFormazione` (Flag identificativo).
|
- Il campo sarà utilizzato per calcolare la data di scadenza del corso una volta erogato.
|
||||||
- [ ] **Nuova Entity `ClienteContatto`**:
|
- [ ] **Nuova Entity `ClienteContatto`**:
|
||||||
- Proprietà: `Nome`, `Cognome`, `Email`, `Ruolo`, `Telefono`, foreign key a `Cliente`.
|
- Proprietà: `Nome`, `Cognome`, `Email`, `Ruolo`, `Telefono`, foreign key a `Cliente`.
|
||||||
- Aggiornare `Cliente` con collection `Contatti`.
|
- Aggiornare `Cliente` con collection `Contatti`.
|
||||||
- [ ] **Nuova Entity `TrainingRecord` (Safety)**:
|
- [ ] **Nuova Entity `TrainingRecord`**:
|
||||||
- Proprietà: `ClienteContattoId`, `ArticoloId` (Corso), `DataEsecuzione`, `DataScadenza` (Calcolata), `AttestatoUrl`, `Stato` (Valid, Expiring, Expired).
|
- Rappresenta l'avvenuta formazione per un contatto.
|
||||||
- Note e audit log.
|
- Proprietà: `ClienteContattoId`, `ArticoloId` (Corso), `DataEsecuzione`, `DataScadenza` (Calcolata), `AttestatoUrl`, `Stato` (Valid, Expiring, Expired), `Note`.
|
||||||
|
- Entità generica per qualsiasi tipo di corso.
|
||||||
|
|
||||||
#### Infrastructure / EF Core
|
#### Infrastructure / EF Core
|
||||||
- [ ] Creare Migrazione EF per le nuove entità e modifiche.
|
- [ ] Creare Migrazione EF per le nuove entità e modifiche.
|
||||||
- [ ] Aggiornare `ApplicationDbContext`.
|
- [ ] Aggiornare `ApplicationDbContext`.
|
||||||
|
|
||||||
#### API Layer
|
#### API Layer
|
||||||
- [ ] **Aggiornare `ArticoliController`**: Gestione nuovi campi.
|
- [ ] **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.
|
- [ ] **Aggiornare `ClientiController`**: Gestione CRUD Contatti.
|
||||||
- [ ] **Nuovo `TrainingController`**:
|
- [ ] **Nuovo `TrainingController`**:
|
||||||
- CRUD TrainingRecords.
|
- CRUD TrainingRecords.
|
||||||
- Upload file attestato.
|
- Upload file attestato.
|
||||||
- Endpoint `GetExpiringTrainings` per la dashboard (filtri per data, azienda).
|
- Endpoint `GetExpiringTrainings` per la dashboard (filtri per data, azienda, categoria corso).
|
||||||
- Endpoint `approve-notification`: Utilizza il nuovo servizio `IEmailSender` per inviare le notifiche.
|
- Endpoint `approve-notification`: Invio email notifiche scadenze.
|
||||||
|
|
||||||
### 3. Frontend (React)
|
### 3. Frontend (React)
|
||||||
#### Modulo Safety (Nuova App `safety`)
|
#### Modulo Training (Nuova App `training`)
|
||||||
- [ ] **Setup Modulo**: Creare cartella `src/frontend/src/apps/safety` e configurare route.
|
- [ ] **Setup Modulo**: Creare cartella `src/frontend/src/apps/training` e configurare route.
|
||||||
- [ ] **Componenti**:
|
- [ ] **Componenti**:
|
||||||
- `SafetyDashboard`: Widget con scadenze imminenti e scadute.
|
- `TrainingDashboard`: Widget con scadenze imminenti e scadute, grafici per tipologia corso.
|
||||||
- `CourseRegistry`: Tabella corsi (Articoli filtrati).
|
- `CourseRegistry`: Tabella corsi (Articoli filtrati per categoria "Formazione"). Permette di creare nuovi corsi e gestire le sottocategorie (Tipi di corso).
|
||||||
- `TrainingMatrix`: Vista lavoratori x corsi o lista formazioni.
|
- `TrainingMatrix`: Vista partecipanti x corsi o lista formazioni.
|
||||||
- `TrainingForm`: Modale inserimento/modifica formazione (Caricamento file, calcolo automatico scadenza).
|
- `TrainingForm`: Modale inserimento/modifica formazione (Caricamento file, calcolo automatico scadenza basato sul corso).
|
||||||
|
|
||||||
#### Integrazione Moduli Esistenti
|
#### Integrazione Moduli Esistenti
|
||||||
- [ ] **Magazzino**: Aggiungere campi Validità nel form Articolo.
|
- [ ] **Magazzino**: Gestione UI per Classificazioni a 3 livelli (Gruppo/Famiglia).
|
||||||
- [ ] **Clienti**: Aggiungere Tab "Contatti" nel dettaglio Cliente per gestire i lavoratori.
|
- [ ] **Magazzino**: Aggiungere campi Validità/Scadenza nel form Articolo.
|
||||||
|
- [ ] **Clienti**: Aggiungere Tab "Contatti" nel dettaglio Cliente per gestire i lavoratori/partecipanti.
|
||||||
|
|
||||||
### 4. Workflow e Notifiche
|
### 4. Workflow e Notifiche
|
||||||
- [ ] Implementare logica "Human-in-the-loop": Liste "Da Inviare" nella Dashboard.
|
- [ ] Implementare logica "Human-in-the-loop": Liste "Da Inviare" nella Dashboard.
|
||||||
- [ ] Integrazione con il **Modulo Email Standard**: Chiamata al servizio di invio email reale.
|
- [ ] Integrazione con il Modulo Email per invio solleciti scadenze.
|
||||||
|
|
||||||
### 5. Verifica e Test
|
### 5. Verifica e Test
|
||||||
- [ ] Test flusso completo: Creazione Corso -> Creazione Lavoratore -> Registrazione Formazione -> Verifica Scadenza -> Notifica.
|
- [ ] Test flusso completo:
|
||||||
|
1. Creazione "Tipo Corso" (Sottocategoria).
|
||||||
|
2. Creazione Corso con validità.
|
||||||
|
3. Creazione Contatto.
|
||||||
|
4. Registrazione Formazione.
|
||||||
|
5. Verifica Scadenza e Notifica.
|
||||||
|
|
||||||
## Stato Attuale
|
## Stato Attuale
|
||||||
- Inizio analisi e setup.
|
- Inizio analisi e setup.
|
||||||
|
|||||||
Reference in New Issue
Block a user