/** * Dashboard Manutenzioni */ 'use strict'; document.addEventListener('DOMContentLoaded', function (e) { let cardColor, headingColor, legendColor, labelColor, shadeColor, borderColor, fontFamily; cardColor = config.colors.cardColor; headingColor = config.colors.headingColor; legendColor = config.colors.bodyColor; labelColor = config.colors.textMuted; borderColor = config.colors.borderColor; fontFamily = config.fontFamily; // Verifica se i dati della dashboard sono disponibili let dashboardData; if (typeof window.dashboardData !== 'undefined') { dashboardData = window.dashboardData; } else if (typeof dashboardData !== 'undefined') { dashboardData = dashboardData; } else { console.warn('Dashboard data non disponibile'); return; } // Debug: mostra i dati nella console console.log('Dashboard Data:', dashboardData); // Grafico Segnalazioni nel Tempo const segnalazioniTempoChartEl = document.querySelector('#segnalazioniTempoChart'); const hasValidTempoData = dashboardData.labelsTempo && dashboardData.datiTempo && Array.isArray(dashboardData.labelsTempo) && Array.isArray(dashboardData.datiTempo) && dashboardData.labelsTempo.length > 0 && dashboardData.datiTempo.length > 0 && !dashboardData.labelsTempo.includes('Nessun dato') && dashboardData.datiTempo.some(val => val > 0); if (segnalazioniTempoChartEl && hasValidTempoData) { const segnalazioniTempoChartConfig = { chart: { height: 350, type: 'line', toolbar: { show: false }, zoom: { enabled: false } }, colors: [config.colors.primary], stroke: { curve: 'smooth', width: 3 }, series: [ { name: 'Segnalazioni', data: dashboardData.datiTempo } ], xaxis: { categories: dashboardData.labelsTempo, labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor } }, axisTicks: { show: false }, axisBorder: { show: false } }, yaxis: { labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor } } }, grid: { borderColor: borderColor, strokeDashArray: 4, padding: { top: -20, bottom: -10, left: 0 } }, tooltip: { theme: 'dark' }, states: { hover: { filter: { type: 'none' } }, active: { filter: { type: 'none' } } } }; const segnalazioniTempoChart = new ApexCharts(segnalazioniTempoChartEl, segnalazioniTempoChartConfig); segnalazioniTempoChart.render(); } else if (segnalazioniTempoChartEl) { segnalazioniTempoChartEl.innerHTML = '
Nessun dato disponibile per questo periodo
'; console.log('Segnalazioni nel Tempo: dati non validi', dashboardData.labelsTempo, dashboardData.datiTempo); } // Grafico Distribuzione per Stato (Torta) const distribuzioneStatoChartEl = document.querySelector('#distribuzioneStatoChart'); if ( distribuzioneStatoChartEl && dashboardData.labelsStato && dashboardData.datiStato && Array.isArray(dashboardData.labelsStato) && Array.isArray(dashboardData.datiStato) && dashboardData.labelsStato.length > 0 && dashboardData.datiStato.length > 0 && !dashboardData.labelsStato.includes('Nessun dato') ) { const distribuzioneStatoChartConfig = { chart: { height: 350, type: 'donut' }, labels: dashboardData.labelsStato, series: dashboardData.datiStato, colors: [config.colors.primary, config.colors.warning, config.colors.info, config.colors.success], legend: { position: 'bottom', labels: { colors: headingColor, useSeriesColors: false, fontSize: '13px', fontFamily: fontFamily } }, plotOptions: { pie: { donut: { size: '75%' } } } }; const distribuzioneStatoChart = new ApexCharts(distribuzioneStatoChartEl, distribuzioneStatoChartConfig); distribuzioneStatoChart.render(); } else if (distribuzioneStatoChartEl) { distribuzioneStatoChartEl.innerHTML = '
Nessun dato disponibile
'; } // Grafico Distribuzione per Priorità (Barre) const distribuzionePrioritaChartEl = document.querySelector('#distribuzionePrioritaChart'); if ( distribuzionePrioritaChartEl && dashboardData.labelsPriorita && dashboardData.datiPriorita && Array.isArray(dashboardData.labelsPriorita) && Array.isArray(dashboardData.datiPriorita) && dashboardData.labelsPriorita.length > 0 && dashboardData.datiPriorita.length > 0 && !dashboardData.labelsPriorita.includes('Nessun dato') ) { const distribuzionePrioritaChartConfig = { chart: { height: 300, type: 'bar', toolbar: { show: false } }, colors: [config.colors.danger, config.colors.warning, config.colors.info, config.colors.success], plotOptions: { bar: { horizontal: false, columnWidth: '55%', borderRadius: 8, startingShape: 'rounded', endingShape: 'rounded', borderRadiusApplication: 'around' } }, dataLabels: { enabled: false }, series: [ { name: 'Segnalazioni', data: dashboardData.datiPriorita } ], xaxis: { categories: dashboardData.labelsPriorita, labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor } }, axisTicks: { show: false }, axisBorder: { show: false } }, yaxis: { labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor } } }, grid: { borderColor: borderColor, strokeDashArray: 4, padding: { top: -20, bottom: -10, left: 0 } }, states: { hover: { filter: { type: 'none' } }, active: { filter: { type: 'none' } } } }; const distribuzionePrioritaChart = new ApexCharts(distribuzionePrioritaChartEl, distribuzionePrioritaChartConfig); distribuzionePrioritaChart.render(); } else if (distribuzionePrioritaChartEl) { distribuzionePrioritaChartEl.innerHTML = '
Nessun dato disponibile
'; } // Grafico Segnalazioni per Reparto (Barre) const segnalazioniRepartoChartEl = document.querySelector('#segnalazioniRepartoChart'); if ( segnalazioniRepartoChartEl && dashboardData.labelsReparto && dashboardData.datiReparto && Array.isArray(dashboardData.labelsReparto) && Array.isArray(dashboardData.datiReparto) && dashboardData.labelsReparto.length > 0 && dashboardData.datiReparto.length > 0 && !dashboardData.labelsReparto.includes('Nessun dato') ) { const segnalazioniRepartoChartConfig = { chart: { height: 300, type: 'bar', toolbar: { show: false } }, colors: [config.colors.primary], plotOptions: { bar: { horizontal: false, columnWidth: '55%', borderRadius: 8, startingShape: 'rounded', endingShape: 'rounded', borderRadiusApplication: 'around' } }, dataLabels: { enabled: false }, series: [ { name: 'Segnalazioni', data: dashboardData.datiReparto } ], xaxis: { categories: dashboardData.labelsReparto, labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor }, rotate: -45, rotateAlways: true }, axisTicks: { show: false }, axisBorder: { show: false } }, yaxis: { labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor } } }, grid: { borderColor: borderColor, strokeDashArray: 4, padding: { top: -20, bottom: -10, left: 0 } }, states: { hover: { filter: { type: 'none' } }, active: { filter: { type: 'none' } } } }; const segnalazioniRepartoChart = new ApexCharts(segnalazioniRepartoChartEl, segnalazioniRepartoChartConfig); segnalazioniRepartoChart.render(); } else if (segnalazioniRepartoChartEl) { segnalazioniRepartoChartEl.innerHTML = '
Nessun dato disponibile
'; } // Grafico Top Manutentori (Barre Orizzontali) const topManutentoriChartEl = document.querySelector('#topManutentoriChart'); if ( topManutentoriChartEl && dashboardData.labelsManutentori && dashboardData.datiManutentori && Array.isArray(dashboardData.labelsManutentori) && Array.isArray(dashboardData.datiManutentori) && dashboardData.labelsManutentori.length > 0 && dashboardData.datiManutentori.length > 0 && !dashboardData.labelsManutentori.includes('Nessun dato') ) { const topManutentoriChartConfig = { chart: { height: 300, type: 'bar', toolbar: { show: false } }, colors: [config.colors.success], plotOptions: { bar: { horizontal: true, barHeight: '70%', borderRadius: 8, startingShape: 'rounded', endingShape: 'rounded', borderRadiusApplication: 'around' } }, dataLabels: { enabled: true }, series: [ { name: 'Segnalazioni Risolte', data: dashboardData.datiManutentori } ], xaxis: { categories: dashboardData.labelsManutentori, labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor } }, axisTicks: { show: false }, axisBorder: { show: false } }, yaxis: { labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor } } }, grid: { borderColor: borderColor, strokeDashArray: 4, padding: { top: -20, bottom: -10, left: 0 } }, states: { hover: { filter: { type: 'none' } }, active: { filter: { type: 'none' } } } }; const topManutentoriChart = new ApexCharts(topManutentoriChartEl, topManutentoriChartConfig); topManutentoriChart.render(); } else if (topManutentoriChartEl) { topManutentoriChartEl.innerHTML = '
Nessun dato disponibile
'; } // Grafico Costi per Reparto (Barre) const costiRepartoChartEl = document.querySelector('#costiRepartoChart'); if ( costiRepartoChartEl && dashboardData.labelsCostiReparto && dashboardData.datiCostiReparto && Array.isArray(dashboardData.labelsCostiReparto) && Array.isArray(dashboardData.datiCostiReparto) && dashboardData.labelsCostiReparto.length > 0 && dashboardData.datiCostiReparto.length > 0 && !dashboardData.labelsCostiReparto.includes('Nessun dato') ) { const costiRepartoChartConfig = { chart: { height: 350, type: 'bar', toolbar: { show: false } }, colors: [config.colors.warning], plotOptions: { bar: { horizontal: false, columnWidth: '55%', borderRadius: 8, startingShape: 'rounded', endingShape: 'rounded', borderRadiusApplication: 'around' } }, dataLabels: { enabled: false }, series: [ { name: 'Costi (€)', data: dashboardData.datiCostiReparto } ], xaxis: { categories: dashboardData.labelsCostiReparto, labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor }, rotate: -45, rotateAlways: true }, axisTicks: { show: false }, axisBorder: { show: false } }, yaxis: { labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor }, formatter: function (val) { return '€' + val.toFixed(2); } } }, grid: { borderColor: borderColor, strokeDashArray: 4, padding: { top: -20, bottom: -10, left: 0 } }, states: { hover: { filter: { type: 'none' } }, active: { filter: { type: 'none' } } }, tooltip: { y: { formatter: function (val) { return '€' + val.toFixed(2); } } } }; const costiRepartoChart = new ApexCharts(costiRepartoChartEl, costiRepartoChartConfig); costiRepartoChart.render(); } else if (costiRepartoChartEl) { costiRepartoChartEl.innerHTML = '
Nessun dato disponibile
'; } // Grafico Distribuzione per Tipo (Torta) const distribuzioneTipoChartEl = document.querySelector('#distribuzioneTipoChart'); if ( distribuzioneTipoChartEl && dashboardData.labelsTipo && dashboardData.datiTipo && Array.isArray(dashboardData.labelsTipo) && Array.isArray(dashboardData.datiTipo) && dashboardData.labelsTipo.length > 0 && dashboardData.datiTipo.length > 0 && !dashboardData.labelsTipo.includes('Nessun dato') ) { const distribuzioneTipoChartConfig = { chart: { height: 300, type: 'donut' }, labels: dashboardData.labelsTipo, series: dashboardData.datiTipo, colors: [ config.colors.primary, config.colors.success, config.colors.warning, config.colors.info, config.colors.danger ], legend: { position: 'bottom', labels: { colors: headingColor, useSeriesColors: false, fontSize: '13px', fontFamily: fontFamily } }, plotOptions: { pie: { donut: { size: '75%' } } } }; const distribuzioneTipoChart = new ApexCharts(distribuzioneTipoChartEl, distribuzioneTipoChartConfig); distribuzioneTipoChart.render(); } else if (distribuzioneTipoChartEl) { distribuzioneTipoChartEl.innerHTML = '
Nessun dato disponibile
'; } // Grafico Costi per Tipo (Barre) const costiTipoChartEl = document.querySelector('#costiTipoChart'); if ( costiTipoChartEl && dashboardData.labelsCostiTipo && dashboardData.datiCostiTipo && Array.isArray(dashboardData.labelsCostiTipo) && Array.isArray(dashboardData.datiCostiTipo) && dashboardData.labelsCostiTipo.length > 0 && dashboardData.datiCostiTipo.length > 0 && !dashboardData.labelsCostiTipo.includes('Nessun dato') ) { const costiTipoChartConfig = { chart: { height: 350, type: 'bar', toolbar: { show: false } }, colors: [config.colors.success], plotOptions: { bar: { horizontal: false, columnWidth: '55%', borderRadius: 8, startingShape: 'rounded', endingShape: 'rounded', borderRadiusApplication: 'around' } }, dataLabels: { enabled: false }, series: [ { name: 'Costi (€)', data: dashboardData.datiCostiTipo } ], xaxis: { categories: dashboardData.labelsCostiTipo, labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor }, rotate: -45, rotateAlways: true }, axisTicks: { show: false }, axisBorder: { show: false } }, yaxis: { labels: { style: { fontSize: '13px', fontFamily: fontFamily, colors: labelColor }, formatter: function (val) { return '€' + val.toFixed(2); } } }, grid: { borderColor: borderColor, strokeDashArray: 4, padding: { top: -20, bottom: -10, left: 0 } }, states: { hover: { filter: { type: 'none' } }, active: { filter: { type: 'none' } } }, tooltip: { y: { formatter: function (val) { return '€' + val.toFixed(2); } } } }; const costiTipoChart = new ApexCharts(costiTipoChartEl, costiTipoChartConfig); costiTipoChart.render(); } else if (costiTipoChartEl) { costiTipoChartEl.innerHTML = '
Nessun dato disponibile
'; } });