document.addEventListener("DOMContentLoaded", function () { const calendarDays = document.getElementById("calendarDays"); const monthYear = document.getElementById("monthYear"); const prevMonth = document.getElementById("prevMonth"); const nextMonth = document.getElementById("nextMonth"); const closeModalBtn = document.querySelector(".close"); // Seleccionamos el botón de cerrar let date = new Date(); let currentMonth = date.getMonth(); let currentYear = date.getFullYear(); function renderCalendar() { const firstDay = new Date(currentYear, currentMonth, 1).getDay(); const lastDate = new Date(currentYear, currentMonth + 1, 0).getDate(); let monthName = date.toLocaleString('es-ES', { month: 'long' }); monthYear.innerText = `${monthName.charAt(0).toUpperCase() + monthName.slice(1)} ${currentYear}`; calendarDays.innerHTML = ""; // Agregar espacios vacíos antes del primer día del mes for (let i = 0; i < firstDay; i++) { let emptyCell = document.createElement("div"); emptyCell.classList.add("empty"); calendarDays.appendChild(emptyCell); } // Agregar días del mes for (let i = 1; i <= lastDate; i++) { let dayCell = document.createElement("div"); dayCell.innerText = i; dayCell.classList.add("day"); dayCell.addEventListener("click", (event) => seleccionarFecha(event, i)); calendarDays.appendChild(dayCell); } } function seleccionarFecha(event, day) { document.querySelectorAll(".calendar-days div").forEach(d => d.classList.remove("selected")); event.target.classList.add("selected"); let mes = String(currentMonth + 1).padStart(2, '0'); let dia = String(day).padStart(2, '0'); let fecha = `${currentYear}-${mes}-${dia}`; // Llamada a la API en PHP fetch(`controladores/obtener_reporte.php?fecha=${fecha}`) .then(response => response.json()) .then(data => { let modalTexto = ""; let impresionTexto = ""; // Si no hay datos, mostrar "No se han registrado ventas este día" if (data.length === 0) { modalTexto = `<hr><br><p>No se han registrado ventas este día.</p>`; } else { data.forEach(concierto => { // Texto del modal (SIN boletos por zona) modalTexto += ` <hr> <br> <p><strong>Concierto:</strong> ${concierto.nombre_concierto}</p> <p><strong>Boletos Vendidos:</strong> ${concierto.boletos_vendidos}</p> <p><strong>Total Ganado:</strong> $${concierto.total_ganado}</p> <br> <hr> `; // Texto de impresión (CON boletos por zona) let zonasTexto = ""; if (concierto.zonas.length > 0) { zonasTexto = `<p><strong>📍 Boletos Vendidos por Zona:</strong></p><ul>`; concierto.zonas.forEach(zona => { zonasTexto += `<li>${zona.nombre_zona}: ${zona.boletos_vendidos} boletos</li>`; }); zonasTexto += `</ul>`; } impresionTexto += ` <p><strong>🎤 Concierto:</strong> ${concierto.nombre_concierto}</p> <p><strong>🎟 Boletos Vendidos:</strong> ${concierto.boletos_vendidos}</p> <p><strong>💰 Total Ganado:</strong> $${concierto.total_ganado}</p> ${zonasTexto} <hr> `; }); // Agregar botón de impresión solo en el modal si hay ventas modalTexto += `<button onclick="imprimirReporte('${fecha}', \`${impresionTexto}\`)" class="print-boton">🖨 Imprimir Reporte</button>`; } document.getElementById("modal-titulo").innerText = `Reporte de Ventas - ${day} ${monthYear.innerText}`; document.getElementById("modal-texto").innerHTML = modalTexto; document.getElementById("modal").classList.remove("hidden"); }) .catch(error => { console.error("Error obteniendo el reporte:", error); document.getElementById("modal-texto").innerHTML = `<hr><br><p>No se han registrado ventas este día.</p>`; document.getElementById("modal").classList.remove("hidden"); }); } function cerrarModal() { document.getElementById("modal").classList.add("hidden"); // Remover la clase 'selected' de todos los días seleccionados document.querySelectorAll(".calendar-days div").forEach(d => d.classList.remove("selected")); } prevMonth.addEventListener("click", () => { currentMonth--; if (currentMonth < 0) { currentMonth = 11; currentYear--; } date = new Date(currentYear, currentMonth, 1); renderCalendar(); }); nextMonth.addEventListener("click", () => { currentMonth++; if (currentMonth > 11) { currentMonth = 0; currentYear++; } date = new Date(currentYear, currentMonth, 1); renderCalendar(); }); renderCalendar(); // Agregar evento para cerrar modal al hacer clic fuera del contenido document.getElementById("modal").addEventListener("click", function(event) { if (event.target === this) { cerrarModal(); } }); // Agregar evento para cerrar modal con tecla ESC document.addEventListener("keydown", function(event) { if (event.key === "Escape") { cerrarModal(); } }); // Agregar evento al botón de cerrar (X) closeModalBtn.addEventListener("click", cerrarModal); }); // Función para imprimir el reporte con los boletos vendidos por zona function imprimirReporte(fecha, contenido) { let ventana = window.open("", "_blank"); ventana.document.write(` <html> <head> <title>Reporte de Ventas</title> <style> body { font-family: Arial, sans-serif; text-align: center; } .reporte-container { border: 2px dashed black; padding: 20px; display: inline-block; text-align: left; } h1 { color: green; } ul { list-style: none; padding: 0; } ul li { margin-bottom: 5px; } </style> </head> <body> <h1>🎟 TicketFei - Reporte de Ventas</h1> <div class="reporte-container"> <p><strong>📅 Fecha del Reporte:</strong> ${fecha}</p> ${contenido} </div> <script> window.onload = function() { window.print(); window.close(); } </script> </body> </html> `); ventana.document.close(); }