Statistiche: con «Tutti i punti» Capability, Carta e Istogramma vuoti #100

Closed
opened 2026-10-25 14:46:45 +00:00 by Adriano · 2 comments
Owner

dashboard.html loadData(): capability/control-chart/histogram chiesti solo con punto scelto; default «Tutti i punti» → pannelli grigi. Cambio punto non ricarica senza «Applica filtri». Segnalato da Adriano 25/10.

dashboard.html loadData(): capability/control-chart/histogram chiesti solo con punto scelto; default «Tutti i punti» → pannelli grigi. Cambio punto non ricarica senza «Applica filtri». Segnalato da Adriano 25/10.
Adriano added the bug label 2026-10-25 14:46:45 +00:00
Author
Owner

ESITO: richiesta
COSA: statistiche SPC — con «Tutti i punti» i pannelli Capability, Carta di Controllo e Istogramma restano grigi; il cambio del punto non ricarica finché non si preme «Applica filtri».

Segnalazione di Adriano 25/10/2026: «su statistica Indici di Capability, Carta di Controllo e Istogramma sono vuoti anche se vi sono dati nelle misurazioni». Decisione di Adriano: «se non c'è punto di misura selezionato o vengono nascosti o si fa qualcosa per tutte le misure».

VERIFICATO: ricetta 2 (FIERA-ALBERO) su daitarn, headless Edge → «Tutti i punti» + Applica filtri: pannelli con solo il testo grigio «Seleziona un punto di misura…»; punto #1 + Applica filtri: Cp 1.4903, Cpk 1.4632, n 191, carta e istogramma disegnati, nessun errore in console. Il backend è a posto: il difetto è solo nella pagina.

CAUSA: src/frontend/flask_app/templates/statistics/dashboard.html, loadData() (riga ~449) chiede capability, control-chart e histogram solo se selectedSubtaskId è valorizzato; il select «Punto di misura» parte da «Tutti i punti» e onRecipeChange() lo azzera. Inoltre il select non ha @change, quindi il cambio di punto non ricarica nulla.

MODIFICHE (solo dashboard.html):

  1. Stato nuovo loadedSubtaskId: '' = punto con cui sono stati caricati i dati. loadData() lo imposta a this.selectedSubtaskId quando la summary arriva; onRecipeChange() lo azzera. I pannelli dipendono da questo, non dal valore corrente del select.
  2. Stato nuovo capabilityAll: []. In loadData(), se NON c'è punto scelto: fetch in parallelo di /statistics/api/capability?<stessi params>&subtask_id=<id> per ogni elemento di this.subtasks; capabilityAll = lista di {subtask, data} (data null se errore o error). Con punto scelto capabilityAll = [] e il flusso di oggi resta invariato.
  3. Pannello «Indici di Capability» con loadedSubtaskId vuoto: tabella compatta, una riga per punto: «#N — descrizione», n, Cp, Cpk (colore capabilityColor), «—» quando cp è null (dati insufficienti o quota non numerica). Click su una riga → selectedSubtaskId = String(id) e loadData(). Titolo invariato; sotto la tabella una riga grigia «Scegli un punto per carta di controllo e istogramma». Con punto scelto: contenuto di oggi.
  4. Card «Carta di Controllo» e «Istogramma»: x-show="loadedSubtaskId" sul contenitore della card (non x-if: renderCharts() cerca gli id control-chart e histogram-chart nel DOM). In renderCharts() i rami else con i testi «Seleziona un punto…» restano innocui; non serve toccarli. Quando la card torna visibile, Plotly va ridisegnato dopo che è visibile: chiamare renderCharts() in $nextTick dopo l'aggiornamento di loadedSubtaskId (oggi già così) e, se il grafico risultasse stretto, Plotly.Plots.resize sugli id.
  5. Select «Punto di misura»: @change="loadData()" (ricarica subito, come chiede l'uso in fiera). «Applica filtri» resta per date e sessione.
  6. Testi nuovi in italiano con _(); aggiungere le voci a translations/en/LC_MESSAGES/messages.po se il repo le tiene allineate (vedi come sono state aggiunte le voci di #58), senza ricompilare i .mo a mano se la build lo fa da sé.
  7. Commento breve su ogni modifica con «#100».

TEST: in src/frontend/flask_app/tests/test_statistics.py un test che la pagina dashboard renda gli elementi nuovi (capabilityAll, loadedSubtaskId, @change="loadData()" sul select del punto). Comando: C:/Users/Adriano/lavoro/TieMeasureFlow-dxfcal-frontend/.venv/Scripts/python.exe -m pytest tests -q -p no:cacheprovider da src/frontend/flask_app. Base nota: 9 fallimenti preesistenti (+4 di lingua/.mo solo nel worktree dxfcal); nessun fallimento nuovo.
PROVA A MANO (Opus): headless Edge su http://127.0.0.1:8780/statistics/dashboard, ricetta 2: «Tutti i punti» → tabella con 4 righe, carta e istogramma nascosti; click riga #1 → Cp 1.4903 e grafici; cambio punto dal select → ricarica senza «Applica filtri».

NON TOCCARE: backend (src/backend/**), blueprints/statistics.py, static/js/spc-charts.js, report PDF, pannello esiti task di #58 (loadTaskResults).

ESITO: richiesta COSA: statistiche SPC — con «Tutti i punti» i pannelli Capability, Carta di Controllo e Istogramma restano grigi; il cambio del punto non ricarica finché non si preme «Applica filtri». Segnalazione di Adriano 25/10/2026: «su statistica Indici di Capability, Carta di Controllo e Istogramma sono vuoti anche se vi sono dati nelle misurazioni». Decisione di Adriano: «se non c'è punto di misura selezionato o vengono nascosti o si fa qualcosa per tutte le misure». VERIFICATO: ricetta 2 (FIERA-ALBERO) su daitarn, headless Edge → «Tutti i punti» + Applica filtri: pannelli con solo il testo grigio «Seleziona un punto di misura…»; punto #1 + Applica filtri: Cp 1.4903, Cpk 1.4632, n 191, carta e istogramma disegnati, nessun errore in console. Il backend è a posto: il difetto è solo nella pagina. CAUSA: `src/frontend/flask_app/templates/statistics/dashboard.html`, `loadData()` (riga ~449) chiede capability, control-chart e histogram solo se `selectedSubtaskId` è valorizzato; il select «Punto di misura» parte da «Tutti i punti» e `onRecipeChange()` lo azzera. Inoltre il select non ha `@change`, quindi il cambio di punto non ricarica nulla. MODIFICHE (solo dashboard.html): 1. Stato nuovo `loadedSubtaskId: ''` = punto con cui sono stati caricati i dati. `loadData()` lo imposta a `this.selectedSubtaskId` quando la summary arriva; `onRecipeChange()` lo azzera. I pannelli dipendono da questo, non dal valore corrente del select. 2. Stato nuovo `capabilityAll: []`. In `loadData()`, se NON c'è punto scelto: fetch in parallelo di `/statistics/api/capability?<stessi params>&subtask_id=<id>` per ogni elemento di `this.subtasks`; `capabilityAll` = lista di `{subtask, data}` (data null se errore o `error`). Con punto scelto `capabilityAll = []` e il flusso di oggi resta invariato. 3. Pannello «Indici di Capability» con `loadedSubtaskId` vuoto: tabella compatta, una riga per punto: «#N — descrizione», n, Cp, Cpk (colore `capabilityColor`), «—» quando cp è null (dati insufficienti o quota non numerica). Click su una riga → `selectedSubtaskId = String(id)` e `loadData()`. Titolo invariato; sotto la tabella una riga grigia «Scegli un punto per carta di controllo e istogramma». Con punto scelto: contenuto di oggi. 4. Card «Carta di Controllo» e «Istogramma»: `x-show="loadedSubtaskId"` sul contenitore della card (non x-if: `renderCharts()` cerca gli id `control-chart` e `histogram-chart` nel DOM). In `renderCharts()` i rami else con i testi «Seleziona un punto…» restano innocui; non serve toccarli. Quando la card torna visibile, Plotly va ridisegnato dopo che è visibile: chiamare `renderCharts()` in `$nextTick` dopo l'aggiornamento di `loadedSubtaskId` (oggi già così) e, se il grafico risultasse stretto, `Plotly.Plots.resize` sugli id. 5. Select «Punto di misura»: `@change="loadData()"` (ricarica subito, come chiede l'uso in fiera). «Applica filtri» resta per date e sessione. 6. Testi nuovi in italiano con `_()`; aggiungere le voci a `translations/en/LC_MESSAGES/messages.po` se il repo le tiene allineate (vedi come sono state aggiunte le voci di #58), senza ricompilare i .mo a mano se la build lo fa da sé. 7. Commento breve su ogni modifica con «#100». TEST: in `src/frontend/flask_app/tests/test_statistics.py` un test che la pagina dashboard renda gli elementi nuovi (`capabilityAll`, `loadedSubtaskId`, `@change="loadData()"` sul select del punto). Comando: `C:/Users/Adriano/lavoro/TieMeasureFlow-dxfcal-frontend/.venv/Scripts/python.exe -m pytest tests -q -p no:cacheprovider` da `src/frontend/flask_app`. Base nota: 9 fallimenti preesistenti (+4 di lingua/.mo solo nel worktree dxfcal); nessun fallimento nuovo. PROVA A MANO (Opus): headless Edge su http://127.0.0.1:8780/statistics/dashboard, ricetta 2: «Tutti i punti» → tabella con 4 righe, carta e istogramma nascosti; click riga #1 → Cp 1.4903 e grafici; cambio punto dal select → ricarica senza «Applica filtri». NON TOCCARE: backend (`src/backend/**`), `blueprints/statistics.py`, `static/js/spc-charts.js`, report PDF, pannello esiti task di #58 (`loadTaskResults`).
Author
Owner

Soluzione

ESITO: fatto
FILE: src/frontend/flask_app/templates/statistics/dashboard.html — loadedSubtaskId e capabilityAll; con «Tutti i punti» tabella Cp/Cpk/n per punto (click riga = apre il punto), carta e istogramma x-show solo con punto caricato, select punto @change=loadData(); messages.po voce EN nuova.
TEST: test_statistics.py::test_dashboard_all_points_overview.
COMMIT: 842ceca (Sonnet), merge 351153e su lavoro/daitarn-tmf-dxfcal (pushato).
PROVA: pytest frontend 9 failed prima e dopo (stessi, base nota), +1 passed; TMF daitarn riavviato 15:52, headless Edge ricetta 2: Tutti i punti → 4 righe (Cp 1.4903/1.4692/1.0594/1.3527), carta e istogramma nascosti; click riga #1 → subtask 6, carta disegnata larga 1174 px; cambio select → punto 7 ricaricato senza Applica filtri; ritorno a Tutti → tabella; nessun errore console.

**Soluzione** ESITO: fatto FILE: src/frontend/flask_app/templates/statistics/dashboard.html — loadedSubtaskId e capabilityAll; con «Tutti i punti» tabella Cp/Cpk/n per punto (click riga = apre il punto), carta e istogramma x-show solo con punto caricato, select punto @change=loadData(); messages.po voce EN nuova. TEST: test_statistics.py::test_dashboard_all_points_overview. COMMIT: 842ceca (Sonnet), merge 351153e su lavoro/daitarn-tmf-dxfcal (pushato). PROVA: pytest frontend 9 failed prima e dopo (stessi, base nota), +1 passed; TMF daitarn riavviato 15:52, headless Edge ricetta 2: Tutti i punti → 4 righe (Cp 1.4903/1.4692/1.0594/1.3527), carta e istogramma nascosti; click riga #1 → subtask 6, carta disegnata larga 1174 px; cambio select → punto 7 ricaricato senza Applica filtri; ritorno a Tutti → tabella; nessun errore console.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#100