From 2037cecaba25639c961cb9d4cdab8711b792189b Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Sun, 31 May 2026 14:56:10 +0200 Subject: [PATCH] [FIX] Test multi-agente: dashboard gauge + risks backToList/loadFair - dashboard: complianceScore ora ritorna 'score' (overall_score ultimo assessment); la gauge usa avg_implementation se >0, altrimenti il punteggio assessment. Prima mostrava 0% per org con gap analysis ma senza modulo controlli (H2). - risks.html backToList(): ripristina la vista corrente tra le 4 (table/matrix/fair/kri), prima cadeva sempre su table/matrix (H1); renderDetail nasconde tutte e 4. - risks.html loadFair(): legge risksRes.data.items (endpoint paginato), prima risksRes.data.risks era undefined e il dropdown FAIR restava vuoto (M1). php -l + node --check OK. version 1.10.3. Co-Authored-By: Claude Opus 4.8 --- application/controllers/DashboardController.php | 2 ++ public/dashboard.html | 5 ++++- public/risks.html | 12 ++++++------ public/version.json | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/application/controllers/DashboardController.php b/application/controllers/DashboardController.php index 3a25e36..2ade882 100644 --- a/application/controllers/DashboardController.php +++ b/application/controllers/DashboardController.php @@ -147,6 +147,8 @@ class DashboardController extends BaseController 'total_controls' => $totalControls, 'implemented_controls' => $implementedControls, 'avg_implementation' => $avgImplementation, + // Fallback per la gauge: punteggio gap analysis quando non ci sono controlli. + 'score' => isset($assessments[0]['overall_score']) ? (float) $assessments[0]['overall_score'] : null, ]); } diff --git a/public/dashboard.html b/public/dashboard.html index 6223db6..508906b 100644 --- a/public/dashboard.html +++ b/public/dashboard.html @@ -186,7 +186,10 @@ try { const scoreRes = await api.getComplianceScore(); if (scoreRes.success && scoreRes.data) { - const score = scoreRes.data.avg_implementation || scoreRes.data.score || 0; + // Preferisci la % controlli implementati; se 0/assente (org con gap + // analysis fatta ma senza modulo controlli) ripiega sul punteggio assessment. + const d = scoreRes.data; + const score = (d.avg_implementation && d.avg_implementation > 0) ? d.avg_implementation : (d.score || 0); document.getElementById('compliance-gauge').innerHTML = renderScoreGauge(score, 180); } else { document.getElementById('compliance-gauge').innerHTML = renderScoreGauge(0, 180); diff --git a/public/risks.html b/public/risks.html index 7821f15..27ce72e 100644 --- a/public/risks.html +++ b/public/risks.html @@ -650,7 +650,7 @@ const [risksRes, regRes] = await Promise.all([api.listRisks({ per_page: 200 }), api.getFairRegister()]); const sel = document.getElementById('fair-risk-select'); if (risksRes.success) { - const risks = risksRes.data.risks || risksRes.data || []; + const risks = (risksRes.data && risksRes.data.items) || risksRes.data.risks || []; sel.innerHTML = '' + risks.map(r => ``).join(''); } @@ -869,6 +869,8 @@ function renderDetail(risk) { document.getElementById('view-table').classList.add('hidden'); document.getElementById('view-matrix').classList.add('hidden'); + document.getElementById('view-fair').classList.add('hidden'); + document.getElementById('view-kri').classList.add('hidden'); const container = document.getElementById('view-detail'); container.classList.remove('hidden'); @@ -1040,11 +1042,9 @@ function backToList() { document.getElementById('view-detail').classList.add('hidden'); - if (currentView === 'table') { - document.getElementById('view-table').classList.remove('hidden'); - } else { - document.getElementById('view-matrix').classList.remove('hidden'); - } + // Ripristina la vista corrente tra le 4 (table/matrix/fair/kri), non solo table/matrix. + const view = ['table', 'matrix', 'fair', 'kri'].includes(currentView) ? currentView : 'table'; + document.getElementById('view-' + view).classList.remove('hidden'); } // ── Create/Edit Risk Modal ─────────────────────────────────── diff --git a/public/version.json b/public/version.json index 9a0c9e3..0c1f26a 100644 --- a/public/version.json +++ b/public/version.json @@ -1 +1 @@ -{"version":"1.10.2","build":"2026-05-31-v1.10.2","date":"2026-05-31","changelog":"Fix selettore modale (modal-overlay) per le viste Categorie e Template fornitori, che non si popolavano. Completamento UI Fase 1 modulo questionari fornitori."} +{"version":"1.10.3","build":"2026-05-31-v1.10.3","date":"2026-05-31","changelog":"Fix da test multi-agente: dashboard gauge compliance (fallback overall_score quando 0 controlli, ora il backend ritorna score), risks.html backToList ripristina la vista corretta tra le 4 viste (table/matrix/fair/kri) e loadFair legge data.items. Selettore modali categorie/template corretto."}