{% extends "base.html" %} {% block title %}{{ task.title or 'Task' }} — {{ _('Misure') }} — TieMeasureFlow{% endblock %} {# Full-screen layout: no body scroll, no footer, main fills available space #} {% block body_class %}h-screen overflow-hidden{% endblock %} {% block wrapper_class %}h-full{% endblock %} {% block main_class %}flex-1 min-h-0{% endblock %} {% block footer %}{% endblock %} {% block extra_head %} {% endblock %} {% block content %}
{# ================================================================ HEADER — Compact task info bar ================================================================ #}
{# Back button #} {# Task badge + title #}
Task {{ (task.order_index or 0) + 1 }}

{{ task.title or _('Task di misurazione') }}

{# Lista task + Riepilogo buttons #}
{{ _('Lista task') }}
{# Fermo linea + Fine produzione (measurement tasks only) #} {# Lot + Serial badges #}
{% if lot_number %}
{{ lot_number }}
{% endif %} {% if serial_number %}
{{ serial_number }}
{% endif %} {# Caliper status #} {% include "components/caliper_status.html" %}
{# ================================================================ MAIN — 3-column layout ================================================================ #}
{# ────────────────────────────────────────────── LEFT SIDEBAR — Marker list (vertical, hidden when no subtasks) ────────────────────────────────────────────── #} {# ────────────────────────────────────────────── CENTER — Image area ────────────────────────────────────────────── #}
{# Main image area #}
{# Option A: Subtask has its own image → plain #}
{{ _('Immagine dettaglio misura') }}
{# Option B: Task image with annotations → annotation-viewer (kept in DOM via x-show) #}
{% if task.file_path %}
{% endif %}
{# Option C: No image → placeholder #}

{{ _('Nessuna immagine allegata') }}

{# ────────────────────────────────────────────── RIGHT PANEL — Info + tolerances + numpad (hidden when no subtasks) ────────────────────────────────────────────── #}
{# ---- Subtask header ---- #}

/
{# ---- Tolerance parameters (compact grid) ---- #}
{# Nominal row #}
{{ _('Nominale') }}
{# 2x2 tolerance grid #}
UTL
LTL
UWL
LWL
{# ---- Tolerance bar (compact) ---- #}
{# Zone labels #}
{# Center line #}
{# Value needle #}
{# ---- Already measured indicator ---- #}
{{ _('Registrata') }}:
{# ---- Measurement feedback ---- #}
{% include "components/measurement_feedback.html" %}
{# ---- Numpad (only when a subtask is active) ---- #}
{# Saving overlay #}
{{ _('Salvataggio...') }}
{% include "components/numpad.html" %}
{# ---- Next measurement indicator ---- #}
{% include "components/next_measurement.html" %}
{# ---- Error message ---- #}
{# ================================================================ MEASUREMENT TIMER BANNER ================================================================ #} {# Past zero the counter turns round: it stops saying how long is left and starts saying how late the line is, in red. A delay has to be read, not deduced. #}
{{ _('Prossima misurazione tra') }} {{ _('Misurazione in ritardo di') }} ({{ _('Ciclo') }} #)
{# ================================================================ MISURA SENZA QUOTE — declared a measurement task but none configured yet. Under the old rule this screen quietly looked like a note; now the task keeps its identity and says what is missing instead. ================================================================ #}
{{ _('Task di misura senza quote configurate: la ricetta è incompleta') }}
{# ================================================================ LINEA FERMA — the countdown is frozen, not merely hidden. Stated plainly because a stopped line that looks like a running one is how a measurement interval gets silently missed. ================================================================ #}
{{ _('Linea ferma') }} {# A line stopped past its interval is frozen at a delay, not at a wait. Both read as mm:ss, so the wording is what has to change. #} {{ _('Il conto alla rovescia è congelato a') }} {{ _('Misurazione in ritardo di') }} — {{ _('serve il capoturno per riprendere') }}
{# ================================================================ PRODUCTION ERROR — the server refused to record the production state. Shown because the fallback keeps the operator working locally, and a timer that is not backed by the server must never look like one that is. ================================================================ #}
{{ _('Produzione non registrata sul server') }}:
{# ================================================================ AVVIO PRODUZIONE — visible after first cycle, before production started ================================================================ #}

{{ _('Invia segnale al gestionale per avviare il timer della linea') }}

{{ _('Produzione avviata') }}
{# ================================================================ FOOTER — Progress bar + navigation ================================================================ #}
{# Left: Back #} {# Center: Progress bar #}
/
{# Right: Fine ciclo misura (measurement tasks) / Completato (non-measurement or after cycle) #}
{# ================================================================ È ORA DI MISURARE — the interval expired on a task that is not the measurement. The operator is told why the screen is about to change, then taken there; there is no way to dismiss it, because putting the measurement off is exactly what the interval exists to prevent. ================================================================ #}

{{ _('È ora di misurare') }}

{{ _('Ritorno alla misurazione tra') }} s

{# ================================================================ COMPLETION OVERLAY ================================================================ #}

{{ _('Misurazioni Complete') }}

{{ _('Tutte le') }} {{ _('misurazioni sono state registrate.') }}

{{ _('Conformi') }}
{{ _('Attenzione') }}
{{ _('Non Conf.') }}
{# Production phase: confirm the cycle. Goes through confirmCycle so the server records it - setting the flag here only looked like it had. #} {# START phase, more tasks to go: advance without blocking or exiting #} {# START phase, last task: start production #}
{# The piece can be turned over here, where the operator actually is when the quotes are done - not only from the bar behind the overlay. #}
{# ================================================================ SUPERVISOR LOGIN MODAL ================================================================ #}

{{ _('Autorizzazione capoturno') }}

{% endblock %} {% block extra_js %} {# The clock's rules - how a delay reads, when the buzzer goes, where the measurement lives - are shared with the other screens rather than restated. #} {% endblock %}