# 07 — Catalogo funzionalità Lavorazioni

Elenco completo delle funzionalità emerse da codice + DB. Per ciascuna: dove vive, come legge, come scrive.

---

## F1 — CRUD entity Lavorazioni

- **Cosa:** creare, elencare, visualizzare, modificare, eliminare (soft) una lavorazione
- **UI:** VteCore List/Detail/Edit/Save/Delete
- **Lettura:** `retrieve` su `vte_crmentity` + `vte_lavorazioni` + `vte_lavorazionicf`
- **Scrittura:** `save` → `saveentity` insert/update stesse tabelle; delete → `deleted=1`
- **ACL:** sharing `public_readwritedelete` + profili utente

## F2 — Numerazione automatica LAV-

- **Cosa:** assegna `lavorazioni_no` tipo `LAV-1`, `LAV-2`, …
- **Dove:** uitype 4 + `vte_modentity_num` (prefix `LAV-`, cur_id=2)
- **Scrittura:** in `insertIntoEntityTable` al primo save
- **Side-effect:** `syncNameWithNumber()` copia il numero in `lavorazionename` e aggiorna EntityName cache

## F3 — Entity name = numero

- **Cosa:** l’utente non gestisce un nome libero; il titolo record è il numero
- **Dove:** `Lavorazioni::syncNameWithNumber`
- **Scrittura:** UPDATE dedicato post-save

## F4 — Campi anagrafica produzione

| Campo | Obbl. | Funzione |
|-------|-------|----------|
| data_lavorazione | sì | data di lavoro |
| codice_macchina | sì | codice macchina (soft → Macchinari) |
| joborder_id | sì | Commessa |
| programma_nome | sì | programma/disegno |
| stato_lavorazione | sì | In corso / Completata / Non Conformità / Annullata |
| operatore_id | no | Operatore |
| barcode_operatore | no | barcode operatore |
| id_evento_esterno | no | correlazione sistemi esterni |
| description | no | note lunghe |
| errore_* | nascosti | diagnostica |
| inizio/fine | nascosti | base durata padre |

Lettura/scrittura: colonne omonime in `vte_lavorazioni` via CRMEntity.

## F5 — Calcolo durata padre

- **Cosa:** `durata_secondi = fine - inizio` se entrambi valorizzati
- **Dove:** `updateDurataSecondi()` in PHP; campo displaytype 2 (solo lettura in detail)
- **Scrittura:** UPDATE su `vte_lavorazioni`
- **Limite:** inizio/fine non editabili in UI standard → tipicamente valorizzati da integrazione/API/import

## F6 — Tabella Sessioni (ModLight)

- **Cosa:** N sessioni per lavorazione (inizio, fine, durata, stato, blocchi, alert, note)
- **UI:** uitype 220 `mlLavorazioniSess` nel blocco Sessioni
- **Lettura:** righe `vte_modlightlavorazionisess` con `parent_id`
- **Scrittura:** save padre materializza create/update/delete sessioni come entity ModLight
- **Vedi:** [02-modlight-sessioni.md](02-modlight-sessioni.md)

## F7 — Conteggio esecuzioni

- **Cosa:** `numero_esecuzioni` = numero righe tabella Sessioni
- **Dove:** JS `syncNumeroEsecuzioni` (hook TableField + MutationObserver)
- **Scrittura:** valore nel form → salvato in `vte_lavorazioni.numero_esecuzioni` al save CRMEntity
- **Nota:** non ricalcolato in PHP `save_module` — se si salva senza passare dall’EditView JS può restare stale

## F8 — Durata sessione (client)

- **Cosa:** calcola durata riga da `sessione_inizio` / `sessione_fine`
- **Dove:** `Lavorazioni.js` `calcDurataForRow`
- **Scrittura:** aggiorna input riga; persistenza al save ModLight

## F9 — Autofill Operatore ↔ Barcode

- **Cosa:** da popup operatore compila barcode; da scan barcode risolve operatore
- **Lettura:** Ajax `OperatoreBarcodeAjax` su `vte_operatori`
- **Scrittura:** solo campi form (poi save Lavorazioni/ModLight)
- **Stato:** calibrato su campi **riga** ModLight; padre ha campi propri non hooked
- **Vedi:** [04-operatori-e-barcode.md](04-operatori-e-barcode.md)

## F10 — Fix validazione datetime sessioni

- **Cosa:** evita che VTE tratti inizio/fine sessione come TIME puri
- **Dove:** JS `fixSessionValidationTypes` + wrap `formValidate`
- **Effetto:** typeofdata forzato a `DT~O`, uitype 1022 lato client

## F11 — Collegamento Commessa (JobOrder)

- **Cosa:** FK obbligatoria + related list su Commessa
- **Lettura related:** dependents su `joborder_id`
- **Scrittura:** valorizzazione `joborder_id`
- **Anomalia:** related list duplicata ×19
- **Vedi:** [03-joborder.md](03-joborder.md)

## F12 — Collegamento Macchinari (soft)

- **Cosa:** codice testo confrontabile con anagrafica Macchinari
- **Nessuna** enforce referenziale
- **Vedi:** [05-macchinari-legame-soft.md](05-macchinari-legame-soft.md)

## F13 — Documenti allegati

- Related Documents ADD/SELECT; relazione attachments standard

## F14 — Attività Calendar

- Related Calendar ADD; attività collegate al record

## F15 — Processi BPM

- Processes abilitato sul modulo; widget permessi avanzati; related Processes
- Eventi save possono enqueue process handler di sistema

## F16 — Commenti e note

- Widget ModComments e MyNotes in DetailView
- Scrittura su moduli rispettivi con `related_to` / relation

## F17 — Home modulo

- `ModuleHomeView::install` — dashboard/home del modulo

## F18 — Import / Export / Duplicates

- Abilitati da manifest (`actions`)

## F19 — Vista lista “All” personalizzata

- Colonne ridotte; rimossi assegnatario e campi durata/inizio/fine dalla CV All

## F20 — Pacchetto installabile / disinstallabile

- `manifest.xml` + `vtlib_handler` + install/uninstall
- Gestisce ModLight, related JobOrder, HEADERSCRIPT, traduzioni SDK, cache lingue
- Sharing default pubblico RWD

## F21 — Traduzioni IT/EN

- File language + copia in `sdk_language` per Lavorazioni, APP_STRINGS, Settings, Home, ModLight
- Invalidazione APCu/file cache in install/uninstall

## F22 — HEADERSCRIPT registrato

- `vte_links`: LavorazioniAutofill → `modules/Lavorazioni/Lavorazioni.js`

## F23 — ID evento esterno

- Campo libero per idempotenza/integrazioni CNC/MES; nessuna validazione dedicata nel modulo

## F24 — Campi errore nascosti

- `errore_codice`, `errore_descrizione` (displaytype 3) pronti per integrazioni senza clutter UI

---

## Matrice “chi scrive cosa”

| Dato | Scritto da |
|------|------------|
| Hub + campi lavorazione | CRMEntity save |
| lavorazionename | PHP syncNameWithNumber |
| durata_secondi padre | PHP updateDurataSecondi |
| numero_esecuzioni | JS → form → CRMEntity |
| Righe sessioni | Motore ModLight al save padre |
| durata_secondi sessione | JS (poi save ModLight) |
| Relazione Documents | UI related / attachments API |
| Processi | ProcessMaker / enable + eventi |
| Commenti/Note | widget rispettivi |

## Funzionalità assenti (non implementate)

- Validazione live `codice_macchina` contro Macchinari
- Aggregazioni durata/stato sulla Commessa
- Cron dedicato Lavorazioni
- Webservice custom dedicato (solo stack VTE standard se esposto)
- Wiring completo SDK popup return in DB
- Autofill barcode sui campi **padre** (solo path ModLight row nel JS)
