Changelog
All notable changes to this project will be documented in this file.
[Unreleased]
- Aggiunta la possibilità per un'impresa appaltatrice collegata a un cantiere di invitare un'altra impresa senza poterla creare direttamente in anagrafica: l'invito viene salvato in una tabella temporanea (`jobs-groups-invitations`, CRUD + `/accept` + `/reject`) e, solo se accettato, l'impresa invitata diventa un'impresa vera già collegata alla commessa; se rifiutato va indicata una motivazione, salvata insieme a chi e quando. Nuovi permessi `invitation_groups` (invio invito e sezione destinatari notifiche) e `approve_jobs_groups` (accettazione/rifiuto), entrambi gestibili dalla pagina ruoli.
- Aggiunto endpoint `jobs/{job_id}/notification-settings` (GET/POST/PUT) per configurare, per singola commessa, gli indirizzi email destinatari delle notifiche su caricamento/commento documenti, imprese non conformi e inviti impresa.
- Aggiunto endpoint `job-groups/{jobId}/invite-eligibility` per sapere se l'utente loggato può invitare un'impresa su quel cantiere, e `groups-check-duplicate` per avvisare se un codice fiscale o una partita IVA sono già presenti in anagrafica. L'invio dell'invito è comunque bloccato lato server (422) se CF o P.IVA coincidono con un'impresa già esistente, non solo segnalato.
- Se l'email configurata come destinataria di una notifica (caricamento/commento documenti, imprese non conformi, inviti impresa) coincide con un utente attivo del sistema, ora riceve anche la notifica in home page oltre alla mail, non solo la mail come prima.
- Fix: chi ha invitato un'impresa non riceveva la notifica in home page quando l'invito veniva accettato o rifiutato (arrivava solo la mail, quando arrivava): la notifica veniva salvata con un tipo di utente diverso da quello con cui viene poi letta, quindi restava invisibile pur essendo a database. Corretta anche una notifica reale già salvata in modo errato.
- Il reset del verbale viene tracciato (`reset_by`, `reset_at`), sia dallo sblocco dell'anagrafica sia dal "Nuovo Verbale" della pagina verbali.
- Fix: se un verbale veniva resettato da un altro operatore, il browser fermo su uno step intermedio ricreava in silenzio un verbale vuoto e proseguiva la compilazione perdendo gli step già fatti. Gli step accettano ora `construction_report_id` e rispondono `409 REPORT_RESET` quando non corrisponde più al verbale aperto; il frontend avvisa e riporta la compilazione allo step iniziale.
- Fix: lo stepper dei verbali avanzava anche quando il salvataggio dello step falliva, perché l'esito della chiamata non veniva controllato. Stesso problema per le firme dello Step 7, che risultavano acquisite senza essere state salvate.
- Aggiunta la visibilità gerarchica delle imprese in una commessa: un'impresa capofila (leader in `jobs_groups`) vede ora in elenco imprese, dettaglio e albero gerarchico anche le imprese "sotto" di sé (dirette e transitive), e può vederne/gestirne i documenti caricati (upload, modifica, cancellazione, download, approvazione) come se fossero la propria. Le imprese "sotto" continuano a vedere solo se stesse.
[1.3.2] 2026-09-17
- Modificato destinatari invii notifiche per report settimanale documenti imprese e reminder giornaliero di documenti in scadenza
[1.3.0] 2026-09-04
[1.3.1] 2026-09-16
- Aggiunto endpoint per pagina valutazione lavoro svolto da parte del cliente
[1.3.0] 2026-09-14
- Aggiunto nuovi endpoint per tab "Documenti generali di cantiere": `jobs/{job_id}/general-documents` upload/elenco/modifica/cancellazione di documenti generici (nome obbligatorio, descrizione opzionale, file di qualsiasi tipo) legati al cantiere, con tracciamento di chi ha caricato e quando e download. Permessi `view/add/edit/delete_construction_site_general_documents` (view a tutti i ruoli, scrittura solo ad admin, admin_grafite, operatore_sertec_admin).
- Aggiunto nuovo plugin companee/notifications.
- Aggiunta la possibilità di definire degli indirizzi email per le notifiche dell'offerta su caricamento e commento documenti e per il report settimanale sullo stato dei documenti
- Fix: `construction-reports/step-6` rispondeva 500 (`Duplicate entry` sull'indice unique `uuid`) quando il FE rispediva l'uuid di una foto già prenotata a database, cosa che avviene alla riapertura del verbale finché l'upload del file non è andato a buon fine.
- Ora la prenotazione esistente viene riusata (`withTrashed`, con ripristino se soft deleted) invece di essere ricreata, così lo step non resta bloccato a ogni tentativo di salvataggio.
- Stesso fix su `journals/step-6`, dove l'uuid non ha indice unique e il reinserimento creava un secondo allegato con lo stesso uuid: l'upload ne valorizzava uno solo e l'altro restava pendente, lasciando `step_6_completed` a false e bloccando la generazione del giornale.
[1.2.5] 2026-09-04
- Fix: le firme del personale di cantiere uscivano nel verbale senza nome né ruolo, perché cercate fra i soggetti aggiuntivi anziché fra il personale dello Step 0.
- Fix: la generazione di verbali e giornali viene bloccata se l'upload di foto o allegati non è ancora concluso, invece di produrre un documento privo di immagini.
- Fix: le foto prive di file non generano più celle vuote con la sola dicitura "Descrizione: -" al posto dell'immagine.
[1.2.4] 2026-09-04
- Fix: `.docx` dei verbali non apribili da Word — le entità HTML dell'editor (`à`) rendevano l'XML non valido; ora decodificate, con `<p>`/`<li>` resi come paragrafi ed elenchi.
- Fix: abilitato l'escaping XML nei `.docx` di verbali e giornali: una `&` nel testo corrompeva il documento.
[1.2.3] 2026-08-26
- Fix: campo testo verbali (`response_value`/`response_additional_info`) ampliato da `TEXT` a `LONGTEXT` per evitare troncamento quando l'editor HTML include immagini incollate; aggiunto controllo dimensione (30MB) con errore chiaro invece di crash SQL.
[1.2.2] 2026-08-24
- Fix: `getLavoroById` non applicava il filtro `gestione_cartella = 1`, permettendo di leggere l'anagrafica cantiere (`GET /jobs/{id}/site-detail`) anche di lavori non visibili nell'elenco `/commesse`. Allineato allo stesso filtro già usato per costruire l'elenco commesse.
- Aggiornato companee/core alla versione v2.1.2: il middleware di autenticazione non risponde più 401 su guasti non legati al token (database, cache, errori applicativi), che causavano il logout degli utenti con sessione valida; ora restituisce 503. Il refresh del token distingue il token già rinnovato da una chiamata concorrente (409) dalla sessione realmente scaduta (401), e le letture delle configurazioni di autenticazione non falliscono più se una chiave manca a database.
- Aggiunta la chiave `jwt.warning` in `config/jwt.php`: il valore di `JWT_WARNING` veniva ignorato e l'avviso di scadenza sessione usava un default errato, che avviava il rinnovo del token molto prima del necessario.
- Impostato `blacklist_grace_period` a 30 secondi: le chiamate API già in corso non vengono più rifiutate quando il token viene rinnovato.
[1.2.1] 2026-07-23
- Fix: colonna `phone` nelle imprese cambiata da `bigint` a `varchar(30)` per supportare numeri internazionali con prefisso.
- Aggiunto comando per ottimizzare foto pre-esistenti construction-reports:optimize-existing-media
- Ruolo "Assistente DL/CSE" non più obbligatorio nel personale di cantiere (`job_sites_roles.required` a false)
[1.2.0] 2026-07-16
- Ottimizzazione automatica delle immagini al momento dell'upload: introdotto `ImageOptimizationService` (GD) che ridimensiona le foto a max 1200px (lato lungo, JPEG q85) e le firme a max 800px (PNG). Applicato a tutti gli endpoint di upload del progetto: `offerte/uploadFoto`, `workers`, `chemical_products`, `equipment`, `uploaded-documents/upload`, verbali Step 6 (foto) e Step 7 (firme), giornali Step 6 (allegati immagine) e Step 7 (firme). File non-immagine (PDF, DOC, XLS, HEIC, RAW) passano invariati. Riduzione tipica: ~92% (es. 5.5 MB → 426 KB).
- Documenti cantiere — se si carica una nuova revisione di un documento già approvato, lo stato in elenco diventa arancione invece di restare verde, e l'idoneità dell'impresa si aggiorna di conseguenza a "idonea con integrazione" finché la revisione non viene evasa.
[1.1.0] 2026-07-08
- Aggiornato companee/core alla versione v2.0.14: fix log richieste in con file.
- Documenti cantiere — blocco salvataggio se la data di scadenza è già nel passato
- Aggiunto processo settimanale per notifica stato documenti imprese
- Gestito campi testo verbali con editor html
- Aggiunto tasto per scarico elenco utenti
[1.0.19] 2026-07-01
- Fixato timeout in produzione durante la generazione di PDF (verbali e giornali): le firme PNG ad alta risoluzione venivano processate pixel-per-pixel da dompdf causando il superamento del limite di 30 secondi. Le firme vengono ora convertite in JPEG (max 600px) prima del rendering.
- Notificato approvazione/rifiuto e aggiunta commento per documento
[1.0.18] 2026-06-25
- Ottimizzato generazione anteprima verbale
[1.0.17] 2026-06-18
- La rigenerazione del verbale sovrascrive sempre la versione precedente
- Implementato anteprima verbale
- Implementato anteprima giornale
- Aggiornato companee/core alla versione v2.0.10
- Fix validazione `itemsPerPage` per elenco tabelle: ora accetta il valore `-1` (nessuna paginazione, ritorna tutti le righe) oltre ai valori positivi.
[1.0.16] 2026-06-03
- Prodotti chimici — Scheda materiale: aggiunto campo opzionale per il caricamento della scheda di sicurezza. La chiamata ora accetta (pdf, jpg, jpeg, png, doc, docx, xls, xlsx — max 20 MB).
- Aggiunto step 6 per i giornali (Allegati): campo input per poter caricare allegati.
- Aggiunto step 7 per salvare le firme delle persone presenti.
- Aggiunto step 8 per i giornali (Generazione documento): alla conferma del frontend, il sistema genera un file PDF e un file DOCX del Giornale di Lavori con tutti i dati salvati (meteo, lavoratori, veicoli, descrizione lavori, allegati, firme) e li salva sul NAS nella cartella `07_Esecuzione_Lavori/01_DL/07_GDL/{data_iniziali}/`. Le firme vengono copiate nella sottocartella `firme/`.
[1.0.15] 2026-05-27
- Aggiunto step 5 per i giornali (Note e Osservazioni): campo testuale opzionale per annotazioni libere.
- Aggiunto upload file per attrezzature: le chiamate accettano file (pdf, jpg, jpeg, png, doc, docx, xls, xlsx — max 20MB).
[1.0.14] 2026-05-21
- Aggiornato pacchetto companee/core alla versione v2.0.5
[1.0.13] 2026-05-15
- Aggiunto step 4 per i giornali.
- Aggiunta gestione scadenze documenti per le imprese: possibilità di visualizzare tutte le scadenze dei documenti dell'impresa e delle sue risorse associate (lavoratori, veicoli, macchinari, attrezzature, prodotti chimici), con supporto per il recupero delle prossime 3 scadenze future
[1.0.12] 2026-05-04
- Fix dei filtri per le tabelle Verbali e Giornali
- Implementato step 2 e 3 Giornale
- Aggiunta documentazione API tramite Swagger (l5-swagger): configurazione, view dedicata e annotazioni sul controller base
- Implementata suite di test feature per le principali entità (gruppi cantiere, requisiti, dettagli cantiere, verbali, giornale, workers, veicoli, macchinari, attrezzature, prodotti chimici, documenti, committenti, offerte, utenti)
- Aggiunta view Blade per la visualizzazione del changelog e relativa route web
- Aggiornata pagina di benvenuto con riepilogo delle route disponibili
[1.0.0] 2026-04-31
- Implementazione sistema versionamento.