$input['id_rango_edad'] ?? null, 'id_genero' => $input['id_genero'] ?? null, 'id_examen' => $input['id_examen'] ?? null, 'fechaInicio' => $input['fechaInicio'] ?? null, 'fechaFin' => $input['fechaFin'] ?? null, ]; $graficos = new Graficos(); switch ($tipoConsulta) { case 'Femenino': $cantidad = $graficos->obtenerGeneroFemenino($filtros); break; case 'Masculino': $cantidad = $graficos->obtenerGeneroMasculino($filtros); break; case 'Prefiero no decirlo': $cantidad = $graficos->obtenerGeneroNoDefinido($filtros); break; case 'Menor de 18 años': $cantidad = $graficos->obtenerEdadMenor18($filtros); break; case '18 a 24 años': $cantidad = $graficos->obtenerEdad1824($filtros); break; case '25 a 34 años': $cantidad = $graficos->obtenerEdad2434($filtros); break; case '35 a 44 años': $cantidad = $graficos->obtenerEdad3544($filtros); break; case '45 a 54 años': $cantidad = $graficos->obtenerEdad4554($filtros); break; case '55 a 64 años': $cantidad = $graficos->obtenerEdad5564($filtros); break; case '65 años o más': $cantidad = $graficos->obtenerEdad65oMas($filtros); break; case 'Estados': $cantidad = $graficos->obtenerEstados($filtros); echo json_encode($cantidad); exit; case 'Examenes': $cantidad = $graficos->obtenerExamenes($filtros); echo json_encode($cantidad); exit; case 'Fechas': $fechaInicio = $input['fechaInicio'] ?? ''; $fechaFin = $input['fechaFin'] ?? ''; $cantidad = $graficos->obtenerFecha($fechaInicio, $fechaFin); echo json_encode($cantidad); exit; default: $cantidad = 0; } echo json_encode(['cantidad' => $cantidad]); } class Graficos{ private $Database; protected $db; public function __construct() { $this->Database = new Database(); $this->db = $this->Database->getInstance(); } public function obtenerGeneroFemenino($filtros = []) { $sql = "SELECT COUNT(*) AS Femenino FROM candidato WHERE id_genero = 2"; $params = []; $types = ""; if (!empty($filtros['id_rango_edad']) && $filtros['id_rango_edad'] !== "NULL") { $sql .= " AND id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['Femenino']; } $query->close(); return $output; } public function obtenerGeneroMasculino($filtros = []) { $sql = "SELECT COUNT(*) AS Masculino FROM candidato WHERE id_genero = 1"; $params = []; $types = ""; if (!empty($filtros['id_rango_edad']) && $filtros['id_rango_edad'] !== "NULL") { $sql .= " AND id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['Masculino']; } $query->close(); return $output; } public function obtenerGeneroNoDefinido($filtros = []) { $sql = "SELECT COUNT(*) AS NoDefinido FROM candidato WHERE id_genero = 3"; $params = []; $types = ""; if (!empty($filtros['id_rango_edad']) && $filtros['id_rango_edad'] !== "NULL") { $sql .= " AND id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['NoDefinido']; } $query->close(); return $output; } public function obtenerEdadMenor18($filtros = []) { $sql = "SELECT COUNT(*) AS menorEdad FROM candidato WHERE id_rango_edad = 1"; $params = []; $types = ""; if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['menorEdad']; } $query->close(); return $output; } public function obtenerEdad1824($filtros = []) { $sql = "SELECT COUNT(*) AS edad1824 FROM candidato WHERE id_rango_edad = 2"; $params = []; $types = ""; if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['edad1824']; } $query->close(); return $output; } public function obtenerEdad2434($filtros = []) { $sql = "SELECT COUNT(*) AS edad2434 FROM candidato WHERE id_rango_edad = 3"; $params = []; $types = ""; if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['edad2434']; } $query->close(); return $output; } public function obtenerEdad3544($filtros = []) { $sql = "SELECT COUNT(*) AS edad3544 FROM candidato WHERE id_rango_edad = 4"; $params = []; $types = ""; if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['edad3544']; } $query->close(); return $output; } public function obtenerEdad4554($filtros = []) { $sql = "SELECT COUNT(*) AS edad4554 FROM candidato WHERE id_rango_edad = 5"; $params = []; $types = ""; if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['edad4554']; } $query->close(); return $output; } public function obtenerEdad5564($filtros = []) { $sql = "SELECT COUNT(*) AS edad5564 FROM candidato WHERE id_rango_edad = 6"; $params = []; $types = ""; if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['edad5564']; } $query->close(); return $output; } public function obtenerEdad65oMas($filtros = []) { $sql = "SELECT COUNT(*) AS edad65oMas FROM candidato WHERE id_rango_edad = 7"; $params = []; $types = ""; if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $output = "0"; if ($resultado->num_rows > 0) { $data = $resultado->fetch_assoc(); $output = $data['edad65oMas']; } $query->close(); return $output; } public function obtenerEstados($filtros = []) { $sql = "SELECT estados.nombre AS estado, COUNT(*) AS cantidad FROM candidato INNER JOIN info_candidatos ON candidato.id_candidato = info_candidatos.id_candidato INNER JOIN estados ON info_candidatos.id_estado = estados.id WHERE 1=1"; $params = []; $types = ""; if (!empty($filtros['id_rango_edad']) && $filtros['id_rango_edad'] !== "NULL") { $sql .= " AND candidato.id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_genero']) && $filtros['id_genero'] !== "NULL") { $sql .= " AND candidato.id_genero = ?"; $params[] = $filtros['id_genero']; $types .= "i"; } if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND candidato.id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(candidato.fecha_entrada) >= ? AND DATE(candidato.fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $sql .= " GROUP BY estados.nombre ORDER BY estados.nombre"; $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $estados = []; while ($data = $resultado->fetch_assoc()) { $estados[] = $data; } $query->close(); return $estados; } public function obtenerExamenes($filtros = []) { $sql = "SELECT examen.nombre_examen AS examen, COUNT(*) AS cantidad FROM candidato LEFT JOIN examen ON candidato.id_examen = examen.id_examen WHERE 1=1"; $params = []; $types = ""; if (!empty($filtros['id_rango_edad']) && $filtros['id_rango_edad'] !== "NULL") { $sql .= " AND candidato.id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_genero']) && $filtros['id_genero'] !== "NULL") { $sql .= " AND candidato.id_genero = ?"; $params[] = $filtros['id_genero']; $types .= "i"; } if (!empty($filtros['id_examen']) && $filtros['id_examen'] !== "NULL") { $sql .= " AND candidato.id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(candidato.fecha_entrada) >= ? AND DATE(candidato.fecha_salida) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $sql .= " GROUP BY examen.nombre_examen ORDER BY examen.nombre_examen"; $query = $this->db->prepare($sql); if ($params) { $query->bind_param($types, ...$params); } $query->execute(); $resultado = $query->get_result(); $examenes = []; while ($data = $resultado->fetch_assoc()) { $examenes[] = $data; } $query->close(); return $examenes; } public function obtenerFecha($fechaInicio, $fechaFin) { $sql = "SELECT COUNT(*) AS cantidad FROM candidato WHERE DATE(fecha_entrada) >= ? AND DATE(fecha_entrada) <= ?"; $query = $this->db->prepare($sql); $query->bind_param("ss", $fechaInicio, $fechaFin); $query->execute(); $resultado = $query->get_result(); $data = $resultado->fetch_assoc(); $query->close(); // Devuelve un array con un solo objeto para mantener compatibilidad con el frontend return [ [ 'cantidad' => $data['cantidad'], 'fechaInicio' => $fechaInicio, 'fechaFin' => $fechaFin ] ]; } } ?>