diff --git a/harvester-app/src/backend/casosUso/formulas/filtrarDatos.js b/harvester-app/src/backend/casosUso/formulas/filtrarDatos.js index 0c26c0b2..f82269ba 100644 --- a/harvester-app/src/backend/casosUso/formulas/filtrarDatos.js +++ b/harvester-app/src/backend/casosUso/formulas/filtrarDatos.js @@ -73,13 +73,15 @@ function filtrarDatos(filtro, datosExcel, tractorSeleccionado){ const resultadosFiltrados = []; for(let fila = 0; fila < filas; fila+=1) { const resultadoColumna = []; + let filaTieneDato = false; for(let columna = indiceColumnaVacio; columna < indiceColumnaVacio*2+1; columna+=1) { const valorCelda = hyperFormulaInstance.getCellValue({ row: fila, col: columna, sheet: sheetId }); if (valorCelda != null && valorCelda != undefined) { - resultadoColumna.push(valorCelda); + filaTieneDato = true; } + resultadoColumna.push(valorCelda); } - if (resultadoColumna.length > 0) { + if (filaTieneDato) { resultadosFiltrados.push(resultadoColumna); } } diff --git a/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearCuadroFormulas.js b/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearCuadroFormulas.js index 94907684..53125a40 100644 --- a/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearCuadroFormulas.js +++ b/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearCuadroFormulas.js @@ -81,8 +81,8 @@ async function crearCuadroFormulas(graficaId, formulasDisponibles, datosOriginal const contenedoresSeleccion = cuadroFormulas.querySelectorAll('.opciones-carta'); //ToDo: Escalar en número de variables dependiendo de las variables en las fórmulas - crearMenuParametros(contenedoresSeleccion[0], columnasActualizadas, graficaId, datosOriginalesFormulas, tractorSeleccionado, filtrosDisponibles, contenedoresSeleccion[1]); - crearMenuFiltros(contenedoresSeleccion[1], filtrosDisponibles, graficaId); + crearMenuParametros(contenedoresSeleccion[0], columnasActualizadas, graficaId, datosOriginalesFormulas, tractorSeleccionado, filtrosDisponibles, contenedoresSeleccion[1]); + crearMenuFiltros(contenedoresSeleccion[1], filtrosDisponibles, graficaId, contenedoresSeleccion[0], datosOriginalesFormulas, tractorSeleccionado); // Configurar búsqueda de fórmulas const campoBusqueda = cuadroFormulas.querySelector('.search-section'); diff --git a/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearMenuFiltros.js b/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearMenuFiltros.js index 448f3ccc..c0113d89 100644 --- a/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearMenuFiltros.js +++ b/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearMenuFiltros.js @@ -1,5 +1,8 @@ const Chart = require('chart.js/auto'); +const { filtrarDatos } = require(`${rutaBase}/src/backend/casosUso/formulas/filtrarDatos.js`); const { crearGrafica } = require(`${rutaBase}/src/framework/utils/scripts/paginas/analisis/graficas/crearGrafica.js`); +const { actualizarGraficaConColumna } = require(`${rutaBase}/src/framework/utils/scripts/paginas/analisis/graficas/actualizarGraficaConColumna.js`); +const { mostrarAlerta } = require(`${rutaBase}/src/framework/vistas/includes/componentes/moleculas/alertaSwal/alertaSwal`); /** * Crea un menú desplegable para seleccionar columnas. @@ -8,7 +11,7 @@ const { crearGrafica } = require(`${rutaBase}/src/framework/utils/scripts/pagina * @param {number} graficaId - ID de la gráfica asociada. * @returns {void} */ -function crearMenuFiltros(contenedor, filtros, graficaId) { +function crearMenuFiltros(contenedor, filtros, graficaId, contenedorParametros, datosOriginalesFormulas, tractorSeleccionado) { const nuevoMenu = document.createElement('div'); nuevoMenu.className = 'opcion'; const seleccionValores = document.createElement('select'); @@ -22,21 +25,43 @@ function crearMenuFiltros(contenedor, filtros, graficaId) { // Agregar evento de cambio para actualizar la gráfica seleccionValores.addEventListener('change', () => { // Si se deselecciona, resetear la gráfica a estado inicial - const graficaDiv = document.getElementById(`previsualizacion-grafica-${graficaId}`); - if (graficaDiv) { - const canvas = graficaDiv.querySelector('canvas'); - const contexto = canvas.getContext('2d'); - const graficaExistente = Chart.getChart(contexto); - - if (graficaExistente) { - const tipo = graficaExistente.config.type; - const titulo = graficaExistente.options.plugins.title.text; - graficaExistente.destroy(); - const nuevaGrafica = crearGrafica(contexto, tipo); - nuevaGrafica.options.plugins.title.text = titulo; - nuevaGrafica.update(); + const selectorParametro = contenedorParametros.querySelector('select'); + + const filtroAplicado = filtros.filter(filtro => { + return seleccionValores.value == filtro.Nombre; + }); + + const datosFiltrados = filtrarDatos(filtroAplicado, JSON.parse(localStorage.getItem('datosFiltradosExcel')), tractorSeleccionado); +; + if (datosFiltrados.error) { + mostrarAlerta(`Columna no encontrada: ${datosFiltrados.columnaNoEncontrada}`, 'Asegúrate de seleccionar todas las columnas necesarias para aplicar este filtro.', 'error'); + return; + } + + if (selectorParametro && selectorParametro.value !== '') { + actualizarGraficaConColumna(graficaId, selectorParametro.value, datosOriginalesFormulas, tractorSeleccionado, datosFiltrados.resultados); + + } else{ + + const graficaDiv = document.getElementById(`previsualizacion-grafica-${graficaId}`); + if (graficaDiv) { + const canvas = graficaDiv.querySelector('canvas'); + const contexto = canvas.getContext('2d'); + const graficaExistente = Chart.getChart(contexto); + + if (graficaExistente) { + const tipo = graficaExistente.config.type; + const titulo = graficaExistente.options.plugins.title.text; + graficaExistente.destroy(); + const nuevaGrafica = crearGrafica(contexto, tipo); + nuevaGrafica.options.plugins.title.text = titulo; + nuevaGrafica.update(); + } } + } + + }); nuevoMenu.appendChild(seleccionValores); @@ -45,4 +70,5 @@ function crearMenuFiltros(contenedor, filtros, graficaId) { module.exports = { crearMenuFiltros, -} \ No newline at end of file +} + diff --git a/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearMenuParametros.js b/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearMenuParametros.js index e0734732..a13ff7fe 100644 --- a/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearMenuParametros.js +++ b/harvester-app/src/framework/utils/scripts/paginas/analisis/formulas/crearMenuParametros.js @@ -1,6 +1,7 @@ const { actualizarGraficaConColumna } = require(`${rutaBase}/src/framework/utils/scripts/paginas/analisis/graficas/actualizarGraficaConColumna.js`); const { crearGrafica } = require(`${rutaBase}/src/framework/utils/scripts/paginas/analisis/graficas/crearGrafica.js`); const { filtrarDatos } = require(`${rutaBase}/src/backend/casosUso/formulas/filtrarDatos.js`); +const { mostrarAlerta } = require(`${rutaBase}/src/framework/vistas/includes/componentes/moleculas/alertaSwal/alertaSwal`); const Chart = require('chart.js/auto'); /** @@ -29,6 +30,10 @@ function crearMenuParametros(contenedor, columnas, graficaId, datosOriginalesFor }); const datosFiltrados = filtrarDatos(filtroAplicado, JSON.parse(localStorage.getItem('datosFiltradosExcel')), tractorSeleccionado); + if (datosFiltrados.error) { + mostrarAlerta(`Columna no encontrada: ${datosFiltrados.columnaNoEncontrada}`, 'Asegúrate de seleccionar todas las columnas necesarias para aplicar este filtro.', 'error'); + return; + } const columnaSeleccionada = evento.target.value; if (columnaSeleccionada && columnaSeleccionada !== '') { diff --git a/harvester-app/src/main.js b/harvester-app/src/main.js index a519a236..88b09503 100644 --- a/harvester-app/src/main.js +++ b/harvester-app/src/main.js @@ -27,7 +27,7 @@ const createWindow = async () => { webPreferences: { nodeIntegration: true, contextIsolation: false, - //devTools: false, + devTools: false, }, });