# 02 — ModLightLavorazioniSess (Sessioni)

## 1. Identità

| Proprietà | Valore |
|-----------|--------|
| name | ModLightLavorazioniSess |
| label UI | Sessioni |
| tipo | ModLight (righe tabella su EditView padre) |
| campo padre | `mlLavorazioniSess` (uitype **220**) su Lavorazioni |
| IsCustomModule | true |
| Record vivi | 0 |

Classe: [`modules/ModLightLavorazioniSess/ModLightLavorazioniSess.php`](../../../vte23083_2711/modules/ModLightLavorazioniSess/ModLightLavorazioniSess.php).

## 2. Ruolo

Ogni riga = **una sessione** di lavoro all’interno di una Lavorazione: intervallo temporale, durata, stato, conteggio blocchi, alert/errori, note. Il padre tiene operatore/commessa/macchina; le sessioni spezzano il tempo operativo.

Binding:

- Padre → figlio: campo table `mlLavorazioniSess`
- Figlio → padre: `parent_id` (uitype 10 → Lavorazioni), `seq` sequenza riga

## 3. Modello dati

### Tabelle

- `vte_crmentity` (`setype='ModLightLavorazioniSess'`)
- `vte_modlightlavorazionisess` PK `modlightlavorazionisessid`
- `vte_modlightlavorazionisesscf`

### Campi in `vte_field` (UI effettiva)

| fieldname | uitype | displaytype | Ruolo |
|-----------|--------|-------------|--------|
| sessione_inizio | 70 | 1 | inizio sessione (obbligatorio in classe) |
| sessione_fine | 70 | 1 | fine |
| durata_secondi | 7 | 1 | durata calcolata (JS + eventuale backend) |
| stato_sessione | 15 | 1 | picklist |
| numero_blocchi | 7 | 1 | contatore |
| alert_dettaglio | 19 | 1 | testo alert/errori |
| note | 1 | 1 | note corte |
| parent_id | 10 | 3 | nascosto; FK Lavorazioni |
| seq | 1 | 3 | ordine riga |
| assigned_user_id / createdtime / modifiedtime | … | 3 | standard nascosti in table field |

Definizione colonne attesa da `install.php` → `lavorazioni_session_columns()`: stessi campi sopra; **senza** operatore/tipologia sulle righe.

### Drift: colonne fisiche orfane

`SHOW COLUMNS` su `vte_modlightlavorazionisess` mostra ancora:

- `operatore_id` (bigint)
- `barcode_operatore` (varchar)
- `tipologia_lavorazione` (varchar)

Queste colonne **non** compaiono in `vte_field`. Residuo di uno schema precedente. `install.php` ha `lavorazioni_modlight_needs_recreate()` che ricrea il ModLight se trova quei field **nel metadata**; poiché i field metadata non ci sono più, la recreate non parte e le colonne DB restano.

### Picklist `stato_sessione` (live)

Valori attesi da install: In corso, Completata, Interrotta, Errore.

In DB risultano **ripetizioni** (install multiple):

- In corso / Completata / Interrotta / Non Conforme (più copie)
- Errore (aggiunto in un passaggio successivo)

Anomalia: etichette miste “Non Conforme” vs “Errore”; duplicati da sanare in un futuro cleanup (non fatto in questa analisi).

## 4. Lettura

- In Edit/Detail del padre, il motore ModLight (`ModLightUtils` / TableField) carica le righe con `parent_id = <lavorazioniid>` ordinate per `seq`.
- ListView autonoma del ModLight esiste a livello entity ma tipicamente non è usata dal menu utente (modulo light).

## 5. Scrittura

1. Al save del padre, VTE serializza le righe della table field e crea/aggiorna/cancella entity ModLight.
2. Ogni riga passa da `CRMEntity::save` del ModLight → insert `vte_crmentity` + `vte_modlightlavorazionisess` (+ cf).
3. JS padre (`Lavorazioni.js`) aggiorna `durata_secondi` lato client su blur di inizio/fine e aggiorna `numero_esecuzioni` sul padre.

Readonly dei campi sessione (flag `readonly=1` in install columns): pensati per essere valorizzati da macchina/integrazione più che da digitazione libera (UI li mostra comunque come input table field a seconda del rendering uitype 220).

## 6. Relazioni

| Direzione | Dettaglio |
|-----------|-----------|
| → Lavorazioni | `parent_id` + `vte_fieldmodulerel` |
| ← Lavorazioni | uitype 220 `mlLavorazioniSess` |

Nessun related list classico sul ModLight oltre al legame parent.

## 7. JS dedicato

`modules/ModLightLavorazioniSess/ModLightLavorazioniSess.js` presente (template ModLight). La logica business autofill/durata/conteggio è nel JS del **padre** Lavorazioni.

## 8. Uninstall

`uninstall.php` di Lavorazioni chiama `ModLightUtils::deleteTableField` (o cleanup manuale tabelle/cartelle) e cancella `vte_crmentity` del ModLight.

## 9. Evidenze

- Schema UI allineato al piano “sessioni pure”
- Schema fisico ancora ibrido (colonne legacy)
- JS ancora scritto per lo schema ibrido (operatore su riga)
- Picklist sporca da reinstall
