From 55cb42cc90e41ac8277974a44d531caa108100ac Mon Sep 17 00:00:00 2001 From: Diego Date: Tue, 1 Jul 2025 03:45:20 -0600 Subject: [PATCH 1/3] Arreglar funcionalidad de filtros --- .../backend/casosUso/formulas/filtrarDatos.js | 6 +- .../analisis/formulas/crearCuadroFormulas.js | 4 +- .../analisis/formulas/crearMenuFiltros.js | 65 ++++++++++++++----- .../analisis/formulas/crearMenuParametros.js | 5 ++ harvester-app/src/main.js | 2 +- 5 files changed, 62 insertions(+), 20 deletions(-) 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..39205a93 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,7 @@ 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`); /** * Crea un menú desplegable para seleccionar columnas. @@ -8,7 +10,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 +24,53 @@ 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'); + console.log(selectorParametro.value); + + const filtroAplicado = filtros.filter(filtro => { + return seleccionValores.value == filtro.Nombre; + }); + + console.log('filtro aplicado: ', filtroAplicado); + + console.log('selectorParametro antes: ', selectorParametro.value); + + const datosFiltrados = filtrarDatos(filtroAplicado, JSON.parse(localStorage.getItem('datosFiltradosExcel')), tractorSeleccionado); + console.log('datosFiltrados: ', datosFiltrados); + if (datosFiltrados.error) { + mostrarAlerta(`Columna no encontrada: ${datosFiltrados.columnaNoEncontrada}`, 'Asegúrate de seleccionar todas las columnas necesarias para aplicar este filtro.', 'error'); + if (textoAplicar) textoAplicar.textContent = 'Aplicar Fórmula'; + return; + } + + console.log('selectorParametro: ', selectorParametro.value); + + if (selectorParametro && selectorParametro.value !== '') { + + console.log('valido'); + 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 +79,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..9dc1da63 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 @@ -29,6 +29,11 @@ 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'); + if (textoAplicar) textoAplicar.textContent = 'Aplicar Fórmula'; + return; + } const columnaSeleccionada = evento.target.value; if (columnaSeleccionada && columnaSeleccionada !== '') { diff --git a/harvester-app/src/main.js b/harvester-app/src/main.js index 88b09503..6f4bcd66 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: true, }, }); From eccd67800954f5ce77e966929400161e7d9aee88 Mon Sep 17 00:00:00 2001 From: Diego Date: Tue, 1 Jul 2025 03:46:50 -0600 Subject: [PATCH 2/3] fix console logs --- .../paginas/analisis/formulas/crearMenuFiltros.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) 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 39205a93..8ab46187 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 @@ -25,29 +25,20 @@ function crearMenuFiltros(contenedor, filtros, graficaId, contenedorParametros, seleccionValores.addEventListener('change', () => { // Si se deselecciona, resetear la gráfica a estado inicial const selectorParametro = contenedorParametros.querySelector('select'); - console.log(selectorParametro.value); const filtroAplicado = filtros.filter(filtro => { return seleccionValores.value == filtro.Nombre; }); - console.log('filtro aplicado: ', filtroAplicado); - - console.log('selectorParametro antes: ', selectorParametro.value); - const datosFiltrados = filtrarDatos(filtroAplicado, JSON.parse(localStorage.getItem('datosFiltradosExcel')), tractorSeleccionado); - console.log('datosFiltrados: ', datosFiltrados); +; if (datosFiltrados.error) { mostrarAlerta(`Columna no encontrada: ${datosFiltrados.columnaNoEncontrada}`, 'Asegúrate de seleccionar todas las columnas necesarias para aplicar este filtro.', 'error'); if (textoAplicar) textoAplicar.textContent = 'Aplicar Fórmula'; return; } - console.log('selectorParametro: ', selectorParametro.value); - if (selectorParametro && selectorParametro.value !== '') { - - console.log('valido'); actualizarGraficaConColumna(graficaId, selectorParametro.value, datosOriginalesFormulas, tractorSeleccionado, datosFiltrados.resultados); } else{ From a9978c8e9d799355f6df3e9ca9f3f84c660f5ed7 Mon Sep 17 00:00:00 2001 From: Diego Date: Tue, 1 Jul 2025 21:42:08 -0600 Subject: [PATCH 3/3] eslint fix --- .../utils/scripts/paginas/analisis/formulas/crearMenuFiltros.js | 2 +- .../scripts/paginas/analisis/formulas/crearMenuParametros.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 8ab46187..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 @@ -2,6 +2,7 @@ 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. @@ -34,7 +35,6 @@ function crearMenuFiltros(contenedor, filtros, graficaId, contenedorParametros, ; if (datosFiltrados.error) { mostrarAlerta(`Columna no encontrada: ${datosFiltrados.columnaNoEncontrada}`, 'Asegúrate de seleccionar todas las columnas necesarias para aplicar este filtro.', 'error'); - if (textoAplicar) textoAplicar.textContent = 'Aplicar Fórmula'; return; } 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 9dc1da63..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'); /** @@ -31,7 +32,6 @@ 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'); - if (textoAplicar) textoAplicar.textContent = 'Aplicar Fórmula'; return; }