feat: Se mejoror logica de los graficos y se agregaron componenetes en el index.html
This commit is contained in:
parent
9bf4c64cda
commit
1fc55bf2bc
corregido
|
@ -10,29 +10,61 @@ require_once 'VendedorController.php';
|
|||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
// Conexión a base de datos
|
||||
$db = new BaseDatos('localhost:3306', 'root', 'password', 'boletos_db');
|
||||
try {
|
||||
// Conexión a base de datos
|
||||
$db = new BaseDatos('localhost', 'root', 'password', 'boletos_db');
|
||||
|
||||
// Inicializar el controlador
|
||||
$vendedorController = new VendedorController($db);
|
||||
// Inicializar el controlador
|
||||
$vendedorController = new VendedorController($db);
|
||||
|
||||
// Cargar sala (solo hay una sala con id=1)
|
||||
$sala = $vendedorController->cargarSala(1);
|
||||
// Cargar sala (solo hay una sala con id=1)
|
||||
$sala = $vendedorController->cargarSala(1);
|
||||
|
||||
// Si no hay sala, podríamos inicializarla para desarrollo
|
||||
if (!$sala) {
|
||||
$sala = new Sala(1, 'Sala Principal');
|
||||
$sala->inicializarBoletos(10, 15, 50.00); // 10 filas, 15 asientos por fila, $50 cada uno
|
||||
}
|
||||
// Si no hay sala, podríamos inicializarla para desarrollo
|
||||
if (!$sala) {
|
||||
$sala = new Sala(1, 'Sala Principal');
|
||||
$sala->inicializarBoletos(10, 15, 50.00); // 10 filas, 15 asientos por fila, $50 cada uno
|
||||
}
|
||||
|
||||
// Obtener mapa de asientos
|
||||
$mapaAsientos = $vendedorController->mostrarDisponibilidadAsientos();
|
||||
// Obtener parámetros de fecha
|
||||
$fechaInicio = isset($_GET['fechaInicio']) ? $_GET['fechaInicio'] : null;
|
||||
$fechaFin = isset($_GET['fechaFin']) ? $_GET['fechaFin'] : null;
|
||||
|
||||
// Preparar respuesta
|
||||
$response = [
|
||||
'success' => true,
|
||||
'mapa' => $mapaAsientos,
|
||||
'precio' => 50.00 // Agregamos el precio de los boletos a la respuesta
|
||||
];
|
||||
// Obtener mapa de asientos
|
||||
$mapaAsientos = $vendedorController->mostrarDisponibilidadAsientos();
|
||||
|
||||
echo json_encode($response);
|
||||
// Filtrar por fecha si se proporcionan las fechas
|
||||
if ($fechaInicio && $fechaFin) {
|
||||
$query = "SELECT b.id, b.fila, b.numero, b.precio, b.estado
|
||||
FROM boletos b
|
||||
JOIN venta_boletos vb ON b.id = vb.id_boleto
|
||||
JOIN ventas v ON vb.id_venta = v.id
|
||||
WHERE DATE(v.fecha) BETWEEN ? AND ?";
|
||||
$stmt = $db->getConexion()->prepare($query);
|
||||
$stmt->bind_param("ss", $fechaInicio, $fechaFin);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
|
||||
$mapaAsientos = [];
|
||||
while ($fila = $result->fetch_assoc()) {
|
||||
$mapaAsientos[$fila['fila']][$fila['numero']] = $fila['estado'];
|
||||
}
|
||||
}
|
||||
|
||||
// Preparar respuesta
|
||||
$response = [
|
||||
'success' => true,
|
||||
'mapa' => $mapaAsientos,
|
||||
'precio' => 50.00 // Agregamos el precio de los boletos a la respuesta
|
||||
];
|
||||
|
||||
echo json_encode($response);
|
||||
|
||||
} catch (Exception $e) {
|
||||
// Manejar errores y devolver una respuesta JSON
|
||||
$response = [
|
||||
'success' => false,
|
||||
'message' => 'Error al obtener el mapa de asientos: ' . $e->getMessage()
|
||||
];
|
||||
echo json_encode($response);
|
||||
}
|
|
@ -87,7 +87,15 @@ class BaseDatos {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function getConexion() {
|
||||
return $this->conexion;
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
$this->conexion->close();
|
||||
}
|
||||
|
||||
public function cerrarConexion() {
|
||||
$this->conexion->close();
|
||||
}
|
||||
|
|
|
@ -99,6 +99,22 @@
|
|||
<canvas id="graficoLibres"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mt-4">
|
||||
<div class="col-md-6">
|
||||
<label for="fechaInicio">Fecha de Inicio:</label>
|
||||
<input type="date" id="fechaInicio" class="form-control">
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="fechaFin">Fecha de Fin:</label>
|
||||
<input type="date" id="fechaFin" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-2">
|
||||
<div class="col-md-12">
|
||||
<button id="btnFiltrar" class="btn btn-primary">Filtrar</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="js/index.js"></script>
|
||||
</body>
|
||||
|
|
|
@ -50,20 +50,28 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||
// Agregar manejador para el formulario
|
||||
const formulario = document.getElementById('formularioVenta');
|
||||
formulario.addEventListener('submit', validarYEnviarFormulario);
|
||||
|
||||
// Agregar manejador para el botón de filtrar
|
||||
const btnFiltrar = document.getElementById('btnFiltrar');
|
||||
btnFiltrar.addEventListener('click', filtrarPorFecha);
|
||||
|
||||
// Función para cargar el mapa de asientos desde la API
|
||||
async function cargarMapaAsientos() {
|
||||
try {
|
||||
const response = await fetch('../controlador/asientos.php');
|
||||
const data = await response.json();
|
||||
|
||||
const responseText = await response.text(); // Capturar respuesta como texto para depurar
|
||||
console.log('Respuesta del servidor:', responseText);
|
||||
|
||||
// Intentar parsear como JSON
|
||||
const data = JSON.parse(responseText);
|
||||
|
||||
if (!data.success) {
|
||||
mostrarMensaje('Error al cargar el mapa de asientos', 'error');
|
||||
mostrarMensaje('Error al cargar el mapa de asientos: ' + data.message, 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
renderizarMapaAsientos(data.mapa);
|
||||
actualizarGraficos(data.mapa); // Asegúrate de llamar a actualizarGraficos aquí
|
||||
actualizarGraficos(data.mapa, data.precio); // Asegúrate de llamar a actualizarGraficos aquí
|
||||
} catch (error) {
|
||||
console.error('Error al cargar el mapa de asientos:', error);
|
||||
mostrarMensaje('Error de conexión con el servidor', 'error');
|
||||
|
@ -246,14 +254,16 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||
}
|
||||
|
||||
// Función para actualizar los gráficos
|
||||
function actualizarGraficos(mapa) {
|
||||
function actualizarGraficos(mapa, precioBoleto) {
|
||||
let totalVendidos = 0;
|
||||
let totalLibres = 0;
|
||||
let totalVenta = 0;
|
||||
|
||||
Object.values(mapa).forEach(asientosEnFila => {
|
||||
Object.values(asientosEnFila).forEach(estado => {
|
||||
if (estado === 'vendido') {
|
||||
totalVendidos++;
|
||||
totalVenta += precioBoleto; // Sumar el precio del boleto vendido
|
||||
} else if (estado === 'disponible') {
|
||||
totalLibres++;
|
||||
}
|
||||
|
@ -265,5 +275,58 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||
|
||||
graficoVendidos.update();
|
||||
graficoLibres.update();
|
||||
|
||||
// Mostrar la suma total de boletos vendidos debajo del gráfico de asientos vendidos
|
||||
const totalVendidosElement = document.getElementById('totalVendidos');
|
||||
if (totalVendidosElement) {
|
||||
totalVendidosElement.textContent = `Total boletos vendidos: ${totalVendidos}`;
|
||||
} else {
|
||||
const totalVendidosLabel = document.createElement('p');
|
||||
totalVendidosLabel.id = 'totalVendidos';
|
||||
totalVendidosLabel.textContent = `Total boletos vendidos: ${totalVendidos}`;
|
||||
graficoVendidos.canvas.parentNode.appendChild(totalVendidosLabel);
|
||||
}
|
||||
|
||||
// Mostrar la suma total vendida debajo del gráfico de asientos vendidos
|
||||
const totalVentaElement = document.getElementById('totalVentaDia');
|
||||
if (totalVentaElement) {
|
||||
totalVentaElement.textContent = `Total vendido: $${totalVenta.toFixed(2)}`;
|
||||
} else {
|
||||
const totalVentaLabel = document.createElement('p');
|
||||
totalVentaLabel.id = 'totalVentaDia';
|
||||
totalVentaLabel.textContent = `Total vendido: $${totalVenta.toFixed(2)}`;
|
||||
graficoVendidos.canvas.parentNode.appendChild(totalVentaLabel);
|
||||
}
|
||||
}
|
||||
|
||||
// Función para filtrar los datos por fecha
|
||||
async function filtrarPorFecha() {
|
||||
const fechaInicio = document.getElementById('fechaInicio').value;
|
||||
const fechaFin = document.getElementById('fechaFin').value;
|
||||
|
||||
if (!fechaInicio || !fechaFin) {
|
||||
mostrarMensaje('Por favor, seleccione un rango de fechas válido.', 'warning');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(`../controlador/asientos.php?fechaInicio=${fechaInicio}&fechaFin=${fechaFin}`);
|
||||
const responseText = await response.text(); // Capturar respuesta como texto para depurar
|
||||
console.log('Respuesta del servidor:', responseText);
|
||||
|
||||
// Intentar parsear como JSON
|
||||
const data = JSON.parse(responseText);
|
||||
|
||||
if (!data.success) {
|
||||
mostrarMensaje('Error al filtrar los datos por fecha', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
renderizarMapaAsientos(data.mapa); // Asegúrate de renderizar el mapa de asientos filtrado
|
||||
actualizarGraficos(data.mapa, data.precio);
|
||||
} catch (error) {
|
||||
console.error('Error al filtrar los datos por fecha:', error);
|
||||
mostrarMensaje('Error de conexión con el servidor', 'error');
|
||||
}
|
||||
}
|
||||
});
|
Loading…
Reference in New Issue