feat(measure): rework workflow operatore — AVVIA, capoturno, fine ciclo, blocco logout
- task_list: pulsante AVVIA sequenziale + rinomina "Inizia Misure" → "Visualizza Task" - task_execute header: aggiunti "Lista task", "Riepilogo", "Fermo linea", "Fine Produzione" - task_execute footer: "Fine ciclo misura" (attivo quando tutte le quote misurate) + "Completato" - Rimosso auto-advance al task successivo, flusso ora esplicito via Completato - Misura fuori tolleranza: blocco avanzamento + modale login capoturno (validate_supervisor) - Blocco logout durante misurazioni attive (icona lucchetto su task_execute) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -321,6 +321,33 @@ def save_measurement():
|
||||
return jsonify(resp), 201
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Route: Validate supervisor credentials (AJAX)
|
||||
# ---------------------------------------------------------------------------
|
||||
@measure_bp.route("/validate-supervisor", methods=["POST"])
|
||||
@login_required
|
||||
@role_required("MeasurementTec")
|
||||
def validate_supervisor():
|
||||
"""Validate supervisor (capoturno) credentials for out-of-tolerance authorization."""
|
||||
data = request.get_json(silent=True) or {}
|
||||
username = data.get("username", "").strip()
|
||||
password = data.get("password", "")
|
||||
|
||||
if not username or not password:
|
||||
return jsonify({"error": True, "detail": "Username e password richiesti"}), 400
|
||||
|
||||
resp = api_client.post("/api/auth/login", data={"username": username, "password": password})
|
||||
|
||||
if resp.get("error"):
|
||||
return jsonify({"error": True, "detail": "Credenziali non valide"}), 401
|
||||
|
||||
user = resp.get("user", {})
|
||||
if not user.get("is_admin"):
|
||||
return jsonify({"error": True, "detail": "Utente non autorizzato (richiesto capoturno)"}), 403
|
||||
|
||||
return jsonify({"authorized": True, "supervisor": user.get("display_name", username)}), 200
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Route: File proxy (browser can't send X-API-Key directly)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user