document.addEventListener('DOMContentLoaded', () => { const fechaInput = document.getElementById('fecha-resumen'); const totalVerInput = document.getElementById('total-ver'); const tablaVentas = document.getElementById('tabla-ver-ventas'); const tablaDetalle = document.getElementById('tabla-detalle-venta'); const detalleContenedor = document.getElementById('detalle-venta-contenedor'); const tablaPrincipal = document.getElementById('tabla-principal-contenedor'); // --- Estado de la aplicación --- let state = { vistaActual: 'principal', // 'principal' o 'detalle' ventaSeleccionada: null, ventasDelDia: [] }; // --- Funciones de utilidad --- function formatMoney(v) { return '$' + Number(v).toFixed(2); } function formatDate(dateString) { const date = new Date(dateString); return date.toLocaleString('es-AR'); } // --- Función para cambiar vistas --- function mostrarVistaPrincipal() { state.vistaActual = 'principal'; state.ventaSeleccionada = null; if (tablaPrincipal) tablaPrincipal.style.display = 'block'; if (detalleContenedor) detalleContenedor.style.display = 'none'; } function mostrarVistaDetalle(idVenta) { state.vistaActual = 'detalle'; state.ventaSeleccionada = idVenta; if (tablaPrincipal) tablaPrincipal.style.display = 'none'; if (detalleContenedor) detalleContenedor.style.display = 'block'; } // --- Carga de Ventas --- function cargarVentasActuales() { const fechaSeleccionada = fechaInput.value; if (fechaSeleccionada) { console.log("Actualizando vista de ventas para:", fechaSeleccionada); fetchVentas({ start: fechaSeleccionada, end: fechaSeleccionada }); } } function fetchVentas(params) { const query = new URLSearchParams(params).toString(); fetch(`../php/Obtener_Ventas.php?${query}`) .then(res => res.json()) .then(data => { state.ventasDelDia = data || []; renderTablaVentas(data); calcularTotalDia(data); console.log('Ventas cargadas:', data); }) .catch(err => { console.error('Error al cargar ventas:', err); if (tablaVentas) { tablaVentas.querySelector('tbody').innerHTML = 'Error al cargar ventas'; } }); } function renderTablaVentas(ventas) { if (!tablaVentas) return; const tbody = tablaVentas.querySelector('tbody'); tbody.innerHTML = ''; if (!ventas || ventas.length === 0) { tbody.innerHTML = 'No hay ventas en el período seleccionado'; return; } ventas.forEach(venta => { const row = document.createElement('tr'); row.innerHTML = ` ${venta.ID_Venta || '-'} ${venta.fecha_hora ? formatDate(venta.fecha_hora) : '-'} ${formatMoney(venta.monto_total)} `; tbody.appendChild(row); }); } function calcularTotalDia(ventas) { let total = 0; if (ventas && Array.isArray(ventas) && ventas.length > 0) { total = ventas.reduce((sum, v) => sum + Number(v.monto_total || 0), 0); } if (totalVerInput) totalVerInput.value = formatMoney(total); } // --- Funcionalidad de Detalle --- function cargarDetalleVenta(idVenta) { console.log('Cargando detalle para venta:', idVenta); fetch(`../php/Obtener_Ventas.php?id_venta=${idVenta}`) .then(res => { console.log('Respuesta status:', res.status); if (!res.ok) { throw new Error(`HTTP Error: ${res.status}`); } return res.json(); }) .then(data => { console.log('Detalle cargado:', data); // Verificar si hay error en la respuesta if (data.error) { console.error('Error del servidor:', data.error); alert('Error: ' + data.error); return; } // Si la respuesta es un array vacío, mostrar mensaje if (Array.isArray(data) && data.length === 0) { console.warn('No hay productos para esta venta'); } renderDetalleVenta(data); mostrarVistaDetalle(idVenta); }) .catch(err => { console.error('Error completo:', err); alert('❌ Error al cargar el detalle de la venta: ' + err.message); }); } function renderDetalleVenta(data) { if (!tablaDetalle) return; // Asumimos que data contiene los productos de la venta const productos = Array.isArray(data) ? data : (data.productos || []); let totalVenta = 0; const tbody = tablaDetalle.querySelector('tbody'); tbody.innerHTML = ''; if (productos.length === 0) { tbody.innerHTML = 'No hay productos en esta venta'; return; } productos.forEach(prod => { const cantidad = Number(prod.cantidad || 0); const precio = Number(prod.precio_unitario || prod.precio || 0); const subtotal = cantidad * precio; totalVenta += subtotal; const row = document.createElement('tr'); row.innerHTML = ` ${prod.nombre || prod.descripcion || '-'} ${cantidad} ${formatMoney(precio)} ${formatMoney(subtotal)} `; tbody.appendChild(row); }); // Agregar fila de total const rowTotal = document.createElement('tr'); rowTotal.style.fontWeight = 'bold'; rowTotal.style.borderTop = '2px solid #333'; rowTotal.innerHTML = ` TOTAL GENERAL: ${formatMoney(totalVenta)} `; tbody.appendChild(rowTotal); } // --- Exponemos función global para el onclick --- window.verDetalleVenta = function(idVenta) { cargarDetalleVenta(idVenta); }; // --- Botón Volver --- const btnVolver = document.getElementById('btn-volver-ventas'); if (btnVolver) { btnVolver.addEventListener('click', mostrarVistaPrincipal); } // --- Inicialización --- const hoyStr = new Date().toISOString().slice(0, 10); if (fechaInput) { fechaInput.value = hoyStr; cargarVentasActuales(); fechaInput.addEventListener('change', () => { mostrarVistaPrincipal(); cargarVentasActuales(); }); } window.addEventListener("hashchange", () => { if (window.location.hash === "#ver_ventas") { mostrarVistaPrincipal(); cargarVentasActuales(); } }); });