// ============ CONFIGURACIÓN ============ const NOMBRE_HOJA = "libroDiario"; // ============ CARGAR DATOS AL ABRIR LA PÁGINA ============ document.addEventListener("DOMContentLoaded", () => { cargarMovimientos(); }); // ============ LEER DATOS ============ async function cargarMovimientos() { const tbody = document.getElementById("tablaMovimientos"); try { const respuesta = await fetch(`/leer?hoja=${NOMBRE_HOJA}`); const data = await respuesta.json(); if (data.error) { tbody.innerHTML = `Error: ${data.error}`; return; } mostrarMovimientos(data.datos); } catch (error) { tbody.innerHTML = `Error al cargar datos`; console.error("Error:", error); } } // ============ MOSTRAR EN LA TABLA ============ function mostrarMovimientos(movimientos) { const tbody = document.getElementById("tablaMovimientos"); if (movimientos.length === 0) { tbody.innerHTML = `No hay registros`; return; } tbody.innerHTML = ""; movimientos.forEach(mov => { const fila = document.createElement("tr"); const esFlor = mov.Tipo === "Personal Flor"; fila.innerHTML = ` ${formatearFecha(mov.Fecha)} ${esFlor ? '🌸' : '📦'} ${mov.Tipo} ${mov["Descripción"]} $${formatearMonto(mov.Monto)} `; // Menú de opciones (⋮) con modales const celdaOpciones = document.createElement("td"); celdaOpciones.appendChild(crearMenuOpciones(mov)); fila.appendChild(celdaOpciones); tbody.appendChild(fila); }); } // ============ GUARDAR NUEVO MOVIMIENTO ============ document.getElementById("formMovimiento").addEventListener("submit", async (e) => { e.preventDefault(); const btnGuardar = e.target.querySelector("button"); btnGuardar.disabled = true; btnGuardar.textContent = "⏳ Guardando..."; const datos = { hoja: NOMBRE_HOJA, datos: { "Fecha": document.getElementById("fecha").value, "Tipo": document.getElementById("tipo").value, "Descripción": document.getElementById("descripcion").value, "Monto": document.getElementById("monto").value } }; try { const respuesta = await fetch("/guardar", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(datos) }); const resultado = await respuesta.json(); if (resultado.error) { alert("Error: " + resultado.error); } // Limpiar formulario y recargar tabla document.getElementById("formMovimiento").reset(); cargarMovimientos(); } catch (error) { console.error("Error al guardar:", error); alert("Error al guardar el registro"); } btnGuardar.disabled = false; btnGuardar.textContent = "💾 Guardar"; }); // ============ FUNCIONES AUXILIARES ============ function formatearFecha(fecha) { if (!fecha) return ""; const f = new Date(fecha); return f.toLocaleDateString("es-CO", { day: "2-digit", month: "2-digit", year: "numeric" }); } function formatearMonto(monto) { const num = parseFloat(monto) || 0; return num.toLocaleString("es-CO", { minimumFractionDigits: 0, maximumFractionDigits: 0 }); }