feat: FASE 3 - Flusso MeasurementTec (selezione ricetta, esecuzione misure, riepilogo)
Implementazione completa del flusso operativo per il ruolo MeasurementTec:
Blueprint measure.py:
- select_recipe: selezione ricetta con ricerca e barcode
- task_list: lista task con conteggi subtask e allegati
- task_execute: esecuzione misure con numpad, calibro USB, feedback real-time
- task_complete: riepilogo con statistiche pass/fail e export CSV
- API AJAX: lookup-barcode, save-traceability, save-measurement
- Autorizzazione role_required("MeasurementTec") su tutte le route
Componenti riutilizzabili:
- numpad.html/js/css: tastierino numerico touch-friendly con keyboard support
- caliper_status.html + caliper.js: integrazione calibro USB via Web Serial API
- barcode_scanner.html + barcode.js: scansione barcode con html5-qrcode
- measurement_feedback.html: feedback visivo pass/warning/fail in tempo reale
- next_measurement.html: indicatore prossima misurazione
- annotation-viewer.js: visualizzatore canvas con marker su disegni tecnici
- csv-export.js: export CSV con locale italiano (delimitatore ;, decimale ,)
Sicurezza:
- Decoratore role_required(*roles) per autorizzazione basata su ruoli
- CSRF token su tutti i POST AJAX
- |tojson per prevenire XSS su annotations_json
- Validazione input lato client e server
i18n: 23+ nuove chiavi tradotte IT/EN per tutti i template FASE 3
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -245,3 +245,260 @@ msgstr "Tecnico di Misura"
|
||||
|
||||
msgid "Metrologist"
|
||||
msgstr "Metrologo"
|
||||
|
||||
# Measure - Recipe Selection
|
||||
msgid "Seleziona Ricetta"
|
||||
msgstr "Seleziona Ricetta"
|
||||
|
||||
msgid "Scegli la ricetta di misura da eseguire"
|
||||
msgstr "Scegli la ricetta di misura da eseguire"
|
||||
|
||||
msgid "Scansiona Barcode"
|
||||
msgstr "Scansiona Barcode"
|
||||
|
||||
msgid "Cerca ricetta"
|
||||
msgstr "Cerca ricetta"
|
||||
|
||||
msgid "Nome, codice o descrizione..."
|
||||
msgstr "Nome, codice o descrizione..."
|
||||
|
||||
msgid "Numero Lotto"
|
||||
msgstr "Numero Lotto"
|
||||
|
||||
msgid "Numero Seriale"
|
||||
msgstr "Numero Seriale"
|
||||
|
||||
msgid "Opzionale"
|
||||
msgstr "Opzionale"
|
||||
|
||||
msgid "ricette trovate"
|
||||
msgstr "ricette trovate"
|
||||
|
||||
msgid "Nessuna descrizione disponibile"
|
||||
msgstr "Nessuna descrizione disponibile"
|
||||
|
||||
msgid "Seleziona"
|
||||
msgstr "Seleziona"
|
||||
|
||||
msgid "Nessuna ricetta trovata"
|
||||
msgstr "Nessuna ricetta trovata"
|
||||
|
||||
msgid "Nessun risultato per"
|
||||
msgstr "Nessun risultato per"
|
||||
|
||||
msgid "Prova con un termine diverso."
|
||||
msgstr "Prova con un termine diverso."
|
||||
|
||||
msgid "Non ci sono ricette disponibili al momento."
|
||||
msgstr "Non ci sono ricette disponibili al momento."
|
||||
|
||||
msgid "Inserisci o scansiona il codice della ricetta per selezionarla automaticamente."
|
||||
msgstr "Inserisci o scansiona il codice della ricetta per selezionarla automaticamente."
|
||||
|
||||
msgid "Codice Ricetta"
|
||||
msgstr "Codice Ricetta"
|
||||
|
||||
msgid "Es. REC-001"
|
||||
msgstr "Es. REC-001"
|
||||
|
||||
msgid "Cerca"
|
||||
msgstr "Cerca"
|
||||
|
||||
# Measure - Task List
|
||||
msgid "Lotto"
|
||||
msgstr "Lotto"
|
||||
|
||||
msgid "Seriale"
|
||||
msgstr "Seriale"
|
||||
|
||||
msgid "Task da eseguire"
|
||||
msgstr "Task da eseguire"
|
||||
|
||||
msgid "Task"
|
||||
msgstr "Task"
|
||||
|
||||
msgid "misurazioni"
|
||||
msgstr "misurazioni"
|
||||
|
||||
msgid "Allegato"
|
||||
msgstr "Allegato"
|
||||
|
||||
msgid "Inizia Misure"
|
||||
msgstr "Inizia Misure"
|
||||
|
||||
msgid "Nessun task disponibile"
|
||||
msgstr "Nessun task disponibile"
|
||||
|
||||
msgid "Questa ricetta non ha ancora task definiti."
|
||||
msgstr "Questa ricetta non ha ancora task definiti."
|
||||
|
||||
msgid "Seleziona altra ricetta"
|
||||
msgstr "Seleziona altra ricetta"
|
||||
|
||||
msgid "misurazioni totali"
|
||||
msgstr "misurazioni totali"
|
||||
|
||||
# Measure - Task Execute
|
||||
msgid "Task di misurazione"
|
||||
msgstr "Task di misurazione"
|
||||
|
||||
msgid "Disegno Tecnico"
|
||||
msgstr "Disegno Tecnico"
|
||||
|
||||
msgid "attivo"
|
||||
msgstr "attivo"
|
||||
|
||||
msgid "Visualizzatore PDF"
|
||||
msgstr "Visualizzatore PDF"
|
||||
|
||||
msgid "In fase di sviluppo"
|
||||
msgstr "In fase di sviluppo"
|
||||
|
||||
msgid "Apri PDF"
|
||||
msgstr "Apri PDF"
|
||||
|
||||
msgid "Nessuna immagine allegata"
|
||||
msgstr "Nessuna immagine allegata"
|
||||
|
||||
msgid "Segui le istruzioni nella direttiva"
|
||||
msgstr "Segui le istruzioni nella direttiva"
|
||||
|
||||
msgid "Misurazione"
|
||||
msgstr "Misurazione"
|
||||
|
||||
msgid "Nominale"
|
||||
msgstr "Nominale"
|
||||
|
||||
msgid "Misura"
|
||||
msgstr "Misura"
|
||||
|
||||
msgid "Misurazione registrata"
|
||||
msgstr "Misurazione registrata"
|
||||
|
||||
msgid "Salvataggio..."
|
||||
msgstr "Salvataggio..."
|
||||
|
||||
msgid "Riepilogo"
|
||||
msgstr "Riepilogo"
|
||||
|
||||
msgid "Misurazioni Complete"
|
||||
msgstr "Misurazioni Complete"
|
||||
|
||||
msgid "Tutte le"
|
||||
msgstr "Tutte le"
|
||||
|
||||
msgid "misurazioni sono state registrate."
|
||||
msgstr "misurazioni sono state registrate."
|
||||
|
||||
msgid "Conformi"
|
||||
msgstr "Conformi"
|
||||
|
||||
msgid "Non Conf."
|
||||
msgstr "Non Conf."
|
||||
|
||||
msgid "Vai al Riepilogo"
|
||||
msgstr "Vai al Riepilogo"
|
||||
|
||||
msgid "Errore nel salvataggio della misurazione"
|
||||
msgstr "Errore nel salvataggio della misurazione"
|
||||
|
||||
msgid "Errore di rete. Riprovare."
|
||||
msgstr "Errore di rete. Riprovare."
|
||||
|
||||
# Measure - API Errors
|
||||
msgid "Errore nel caricamento delle ricette: %(detail)s"
|
||||
msgstr "Errore nel caricamento delle ricette: %(detail)s"
|
||||
|
||||
msgid "Ricetta non trovata: %(detail)s"
|
||||
msgstr "Ricetta non trovata: %(detail)s"
|
||||
|
||||
msgid "Errore nel caricamento dei task: %(detail)s"
|
||||
msgstr "Errore nel caricamento dei task: %(detail)s"
|
||||
|
||||
msgid "Task non trovato: %(detail)s"
|
||||
msgstr "Task non trovato: %(detail)s"
|
||||
|
||||
msgid "Codice non fornito"
|
||||
msgstr "Codice non fornito"
|
||||
|
||||
msgid "Ricetta non trovata"
|
||||
msgstr "Ricetta non trovata"
|
||||
|
||||
msgid "Dati mancanti: subtask_id, task_id e value sono obbligatori"
|
||||
msgstr "Dati mancanti: subtask_id, task_id e value sono obbligatori"
|
||||
|
||||
msgid "Errore nel salvataggio"
|
||||
msgstr "Errore nel salvataggio"
|
||||
|
||||
# Task Complete Page
|
||||
msgid "Codice"
|
||||
msgstr "Codice"
|
||||
|
||||
msgid "Nome"
|
||||
msgstr "Nome"
|
||||
|
||||
msgid "Versione"
|
||||
msgstr "Versione"
|
||||
|
||||
msgid "Totale"
|
||||
msgstr "Totale"
|
||||
|
||||
msgid "Dettaglio Misurazioni"
|
||||
msgstr "Dettaglio Misurazioni"
|
||||
|
||||
msgid "Esporta CSV"
|
||||
msgstr "Esporta CSV"
|
||||
|
||||
msgid "Descrizione"
|
||||
msgstr "Descrizione"
|
||||
|
||||
msgid "Deviazione"
|
||||
msgstr "Deviazione"
|
||||
|
||||
msgid "Esito"
|
||||
msgstr "Esito"
|
||||
|
||||
msgid "Metodo"
|
||||
msgstr "Metodo"
|
||||
|
||||
msgid "Pass"
|
||||
msgstr "Pass"
|
||||
|
||||
msgid "Warning"
|
||||
msgstr "Warning"
|
||||
|
||||
msgid "Fail"
|
||||
msgstr "Fail"
|
||||
|
||||
msgid "Manuale"
|
||||
msgstr "Manuale"
|
||||
|
||||
msgid "Calibro"
|
||||
msgstr "Calibro"
|
||||
|
||||
msgid "Ripeti misurazioni"
|
||||
msgstr "Ripeti misurazioni"
|
||||
|
||||
# Measurement Feedback
|
||||
msgid "CONFORME"
|
||||
msgstr "CONFORME"
|
||||
|
||||
msgid "ATTENZIONE"
|
||||
msgstr "ATTENZIONE"
|
||||
|
||||
msgid "NON CONFORME"
|
||||
msgstr "NON CONFORME"
|
||||
|
||||
# Caliper Status
|
||||
msgid "Connessione..."
|
||||
msgstr "Connessione..."
|
||||
|
||||
msgid "Errore calibro"
|
||||
msgstr "Errore calibro"
|
||||
|
||||
msgid "Browser non supporta Web Serial API"
|
||||
msgstr "Browser non supporta Web Serial API"
|
||||
|
||||
# Recipe Selection Additional
|
||||
msgid "Errore di connessione"
|
||||
msgstr "Errore di connessione"
|
||||
|
||||
Reference in New Issue
Block a user