Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions harvester-app/src/framework/utils/css/moduloFormulas.css
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,7 @@
min-height: 60px;
white-space: pre-wrap;
font-family: monospace;
overflow-x: scroll;
}

.formula-actions {
Expand Down
4 changes: 4 additions & 0 deletions harvester-app/src/framework/utils/js/consultarFormulas.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ async function renderizarFormulas() {

// Obtener el arreglo de fórmulas de la respuesta
const formulas = respuesta.datos;
// Conseguir el nombre de todas las fórmulas
const nombresFormulas = formulas.map((formula) => formula.Nombre);
localStorage.setItem('nombresFormulas', JSON.stringify(nombresFormulas));


// Renderizar las fórmulas en el contenedor correspondiente
const contenedor = document.getElementById('frame-formulas');
Expand Down
105 changes: 81 additions & 24 deletions harvester-app/src/framework/utils/js/crearFormula.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,42 +64,40 @@ async function inicializarCrearFormula() {
}
};


async function guardarFormulaTemporal(nombre, formula) {
// REFACTORIZAR
const respuesta = await fetch('http://localhost:3000/formulas/guardarFormula', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
authorization: `Bearer ${localStorage.getItem('token')}`,
},
body: JSON.stringify({nombre, formula}),
});

const datos = await respuesta.json();
return { ok: respuesta.ok, ...datos };
}

/**
* @function procesarFormula
* @description Guarda la fórmula generada en el backend.
* @returns {Promise<void>} - Una promesa que se resuelve cuando la fórmula se guarda correctamente.
* @throws {Error} Si hay un error al guardar la fórmula.
*/
async function procesarFormula() {
const nombreFormula = document.getElementById('nombreFormula').value;
// Obtener referencia al botón de guardar
if(nombreFormula === '') {
const nombreFormulaSinProcesar = document.getElementById('nombreFormula').value;
const nombreFormula = nombreFormulaSinProcesar.trim();
const formulasGuardadas = localStorage.getItem('nombresFormulas');

if (nombreFormula === '' || nombreFormula.length >= 30) {
Swal.fire({
title: 'Error',
text: 'Verifica que la formula tenga un nombre válido y menor de 30 caracteres.',
icon: 'error',
confirmButtonColor: '#1F4281',
});
return;
}
if (formulasGuardadas) {
const nombresFormulas = JSON.parse(formulasGuardadas);
if (nombresFormulas.includes(nombreFormula)) {
Swal.fire({
title: 'Error',
text: 'Verifica que la formula tenga un nombre válido.',
text: 'Ya existe una fórmula con ese nombre.',
icon: 'error',
confirmButtonColor: '#1F4281',
});
return;
}
const btnGuardar = document.getElementById('btnGuardar');

}
// Obtener referencia al botón de guardar
const btnGuardar = document.getElementById('btnGuardar');
// Deshabilitar el botón para evitar múltiples clics
btnGuardar.disabled = true;

Expand All @@ -111,7 +109,43 @@ async function procesarFormula() {

const cuadroTextoGenerado = document.getElementById('resultado').innerText;
// Mucho ojo aquí, si vamos a utilizar rangos de celdas, tenemos que separarlo de otra forma
if (cuadroTextoGenerado === '') {
Swal.fire({
title: 'Error',
text: 'Verifica que la fórmula ha sido generada.',
icon: 'error',
confirmButtonColor: '#1F4281',
});
// Restaurar el botón en caso de error
btnGuardar.innerHTML = contenidoOriginal;
btnGuardar.disabled = false;
return;
} else if (cuadroTextoGenerado === 'Por favor, selecciona una función principal.') {
Swal.fire({
title: 'Error',
text: 'Verifica que la fórmula esté completa.',
icon: 'error',
confirmButtonColor: '#1F4281',
});
// Restaurar el botón en caso de error
btnGuardar.innerHTML = contenidoOriginal;
btnGuardar.disabled = false;
return;

}
if (cuadroTextoGenerado.length >= 512) {
Swal.fire({
title: 'Error',
text: 'La fórmula excede los 512 caracteres, no puede ser guardada.',
icon: 'error',
confirmButtonColor: '#1F4281',
});
btnGuardar.innerHTML = contenidoOriginal;
btnGuardar.disabled = false;
return;
}
const formula = cuadroTextoGenerado.split(':')[1].trim();

try{
const respuesta = await guardarFormula(nombreFormula, formula);
if (respuesta.ok) {
Expand Down Expand Up @@ -395,7 +429,12 @@ function masArgumentosCountif(contenedor) {
function generarFormulaCompleja() {
const seleccionFuncionPrincipal = document.getElementById('main-function');
if (!seleccionFuncionPrincipal.value) {
document.getElementById('resultado').innerText = 'Por favor, selecciona una función principal.';
Swal.fire({
title: 'Error',
text: 'Por favor, selecciona una función principal.',
icon: 'error',
confirmButtonColor: '#1F4281',
});
return;
}

Expand Down Expand Up @@ -550,7 +589,25 @@ function traducirFuncion(nombre) {
*/
function popularDropdown(elementoSeleccionado) {
// Aquí se pondrá la lógica para llenar el dropdown con las variables en el archivo TODO()
const columnas = ['Gasolina', 'Kilometraje', 'Fecha', 'Estado', 'Valor'];
let columnas = localStorage.getItem('columnas') ? JSON.parse(localStorage.getItem('columnas')) : [];
const nombreArchivo = localStorage.getItem('nombreArchivoExcel');
if (nombreArchivo === null || nombreArchivo === undefined) {
columnas = [];
columnas.push('No hay archivo cargado');
elementoSeleccionado.innerHTML = '<option value="">No hay un archivo cargado</option>';
document.getElementById('btnGuardar').disabled = true;
document.getElementById('btnGenerar').disabled = true;
return;
}
if (!Array.isArray(columnas)) {
Swal.fire({
title: 'Error',
text: 'El archivo seleccionado no tiene parámetros.',
icon: 'error',
confirmButtonColor: '#1F4281',
});
return;
}
elementoSeleccionado.innerHTML = '<option value="">Seleccionar</option>';
columnas.forEach(columna => {
const opcion = document.createElement('option');
Expand Down
1 change: 0 additions & 1 deletion harvester-app/src/framework/utils/js/moduloAnalisis.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ function cargarDatosExcel() {
}

const datosExcel = JSON.parse(datosExcelJSON);
window.datosExcelGlobal = datosExcel;
return datosExcel;

} catch (error) {
Expand Down
4 changes: 2 additions & 2 deletions harvester-app/src/framework/utils/js/moduloTractores.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ function cargarDatosDeExcel() {
alert('No hay datos de Excel disponibles');
return null;
}

// Parsear los datos JSON
const datosExcel = JSON.parse(datosExcelJSON);
return datosExcel;
Expand Down Expand Up @@ -191,7 +190,8 @@ function mostrarColumnasTractor(nombreTractor, datosExcel) {
// Si el primer elemento es un array, usamos sus valores como encabezados
columnas = datosHoja[0];
}

localStorage.setItem('columnas', JSON.stringify(columnas));
console.log(localStorage.getItem('columnas'));
columnas.forEach(nombreColumna => {
// Crear div para la columna
const columnaDiv = document.createElement('div');
Expand Down
Loading