84 lines
3.0 KiB
PHP
84 lines
3.0 KiB
PHP
<?php
|
|
require_once 'conexion.php';
|
|
header('Content-Type: application/json');
|
|
|
|
$fecha = isset($_GET['fecha']) ? $_GET['fecha'] : '';
|
|
$horario_inicio = isset($_GET['horario']) ? $_GET['horario'] : '';
|
|
$duracion = isset($_GET['duracion']) ? $_GET['duracion'] : 60; // duracion en minutos
|
|
$tipo = isset($_GET['tipo']) ? $_GET['tipo'] : ''; // 'F' para futbol, 'P' para padel
|
|
|
|
if (empty($fecha) || empty($horario_inicio) || empty($tipo)) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => 'Parámetros incompletos'
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
// Obtener la cantidad total de canchas del tipo especificado y su duración
|
|
$t = mysqli_real_escape_string($conexion, $tipo);
|
|
$sqlCanchas = "SELECT Cant_Canchas as cantidad_canchas, Duracion as duracion_cancha
|
|
FROM canchas
|
|
WHERE Tipo = '$t'";
|
|
|
|
$resCanchas = mysqli_query($conexion, $sqlCanchas);
|
|
|
|
if (!$resCanchas) {
|
|
throw new Exception("Error al obtener información de canchas: " . mysqli_error($conexion));
|
|
}
|
|
|
|
$cancha = mysqli_fetch_assoc($resCanchas);
|
|
$cantidadCanchas = $cancha['cantidad_canchas'];
|
|
$duracionCancha = $cancha['duracion_cancha'];
|
|
|
|
// Convertir horario a minutos para comparación
|
|
$horaInicioArr = explode(':', $horario_inicio);
|
|
$horaInicioMin = intval($horaInicioArr[0]) * 60 + intval($horaInicioArr[1]);
|
|
$horaFinMin = $horaInicioMin + intval($duracion);
|
|
|
|
// Convertir a formato HH:MM:SS para la query
|
|
$horaInicio = $horario_inicio . ':00';
|
|
$horaFin = sprintf("%02d:%02d", intval($horaFinMin / 60), intval($horaFinMin % 60)) . ':00';
|
|
|
|
// Obtener la cantidad de reservas que se superponen con el horario seleccionado
|
|
$f = mysqli_real_escape_string($conexion, $fecha);
|
|
$sqlReservas = "SELECT COUNT(*) as reservas_solapadas
|
|
FROM reservas r
|
|
INNER JOIN canchas c ON r.ID_Cancha = c.ID_Cancha
|
|
WHERE c.Tipo = '$t'
|
|
AND DATE(r.Fecha_Hora) = '$f'
|
|
AND r.Estado != 2
|
|
AND (
|
|
(TIME(r.Fecha_Hora) < '$horaFin' AND ADDTIME(TIME(r.Fecha_Hora), SEC_TO_TIME($duracionCancha * 60)) > '$horaInicio')
|
|
)";
|
|
|
|
$resReservas = mysqli_query($conexion, $sqlReservas);
|
|
|
|
if (!$resReservas) {
|
|
throw new Exception("Error al contar reservas: " . mysqli_error($conexion));
|
|
}
|
|
|
|
$reservas = mysqli_fetch_assoc($resReservas);
|
|
$reservasSolapadas = $reservas['reservas_solapadas'];
|
|
|
|
// Calcular disponibilidad
|
|
$disponibles = $cantidadCanchas - $reservasSolapadas;
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'cantidad_total' => $cantidadCanchas,
|
|
'reservas' => $reservasSolapadas,
|
|
'disponibles' => max(0, $disponibles),
|
|
'horario' => $horaInicio,
|
|
'tipo' => $tipo
|
|
]);
|
|
|
|
} catch (Exception $e) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => $e->getMessage()
|
|
]);
|
|
}
|
|
?>
|