obtenerCantidadPorGenero($tipoConsulta); echo json_encode(["cantidad" => $cantidad]); exit; } // Solo un filtro a la vez $filtros = []; if (!empty($input['id_rango_edad'])) $filtros['id_rango_edad'] = $input['id_rango_edad']; else if (!empty($input['id_genero'])) $filtros['id_genero'] = $input['id_genero']; else if (!empty($input['id_examen'])) $filtros['id_examen'] = $input['id_examen']; else if (!empty($input['fechaInicio']) && !empty($input['fechaFin'])) { $filtros['fechaInicio'] = $input['fechaInicio']; $filtros['fechaFin'] = $input['fechaFin']; } switch ($tipoConsulta) { case 'Generos': $cantidad = $graficos->obtenerGeneros($filtros); echo json_encode($cantidad); exit; case 'Edades': $cantidad = $graficos->obtenerEdades($filtros); echo json_encode($cantidad); exit; case 'Estados': $cantidad = $graficos->obtenerEstados($filtros); echo json_encode($cantidad); exit; case 'Examenes': $cantidad = $graficos->obtenerExamenes($filtros); echo json_encode($cantidad); exit; case 'Fechas': $cantidad = $graficos->obtenerFechas($filtros); echo json_encode($cantidad); exit; case 'ResumenGenero': // NUEVO $cantidad = $graficos->obtenerResumenGenero($filtros); echo json_encode($cantidad); exit; default: echo json_encode([]); exit; } } class Graficos{ private $Database; protected $db; public function __construct() { $this->Database = new Database(); $this->db = $this->Database->getInstance(); } // NUEVO: Para tarjetas de promedio public function obtenerCantidadPorGenero($genero) { $sql = "SELECT COUNT(*) as cantidad FROM candidato c INNER JOIN genero g ON c.id_genero = g.id_genero WHERE g.descripcion = ?"; $query = $this->db->prepare($sql); $query->bind_param("s", $genero); $query->execute(); $resultado = $query->get_result(); $row = $resultado->fetch_assoc(); $query->close(); return intval($row['cantidad']); } // Gráfico de Géneros public function obtenerGeneros($filtros = []) { $sql = "SELECT g.descripcion AS genero, COUNT(*) AS cantidad FROM candidato c INNER JOIN genero g ON c.id_genero = g.id_genero WHERE 1=1"; $params = []; $types = ""; if (!empty($filtros['id_genero'])) { $sql .= " AND c.id_genero = ?"; $params[] = $filtros['id_genero']; $types .= "i"; } if (!empty($filtros['id_rango_edad'])) { $sql .= " AND c.id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_examen'])) { $sql .= " AND c.id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(c.fecha_entrada) BETWEEN ? AND ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $sql .= " GROUP BY g.id_genero, g.descripcion ORDER BY g.id_genero"; $query = $this->db->prepare($sql); if ($params) $query->bind_param($types, ...$params); $query->execute(); $resultado = $query->get_result(); $generos = []; while ($data = $resultado->fetch_assoc()) { $generos[] = $data; } $query->close(); return $generos; } // Gráfico de Edades public function obtenerEdades($filtros = []) { $sql = "SELECT r.descripcion AS rango_edad, COUNT(*) AS cantidad FROM candidato c INNER JOIN rango_edad r ON c.id_rango_edad = r.id_rango_edad WHERE 1=1"; $params = []; $types = ""; if (!empty($filtros['id_rango_edad'])) { $sql .= " AND c.id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_genero'])) { $sql .= " AND c.id_genero = ?"; $params[] = $filtros['id_genero']; $types .= "i"; } if (!empty($filtros['id_examen'])) { $sql .= " AND c.id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(c.fecha_entrada) BETWEEN ? AND ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $sql .= " GROUP BY r.id_rango_edad, r.descripcion ORDER BY r.id_rango_edad"; $query = $this->db->prepare($sql); if ($params) $query->bind_param($types, ...$params); $query->execute(); $resultado = $query->get_result(); $edades = []; while ($data = $resultado->fetch_assoc()) { $edades[] = $data; } $query->close(); return $edades; } // Gráfico de Estados public function obtenerEstados($filtros = []) { $sql = "SELECT e.nombre AS estado, COUNT(DISTINCT c.id_candidato) AS cantidad FROM candidato c INNER JOIN info_candidatos i ON c.id_candidato = i.id_candidato INNER JOIN estados e ON i.id_estado = e.id WHERE 1=1"; $params = []; $types = ""; if (!empty($filtros['id_genero'])) { $sql .= " AND c.id_genero = ?"; $params[] = $filtros['id_genero']; $types .= "i"; } if (!empty($filtros['id_rango_edad'])) { $sql .= " AND c.id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_examen'])) { $sql .= " AND c.id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(c.fecha_entrada) BETWEEN ? AND ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $sql .= " GROUP BY e.id, e.nombre ORDER BY e.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; } // Gráfico de Exámenes public function obtenerExamenes($filtros = []) { $sql = "SELECT ex.nombre_examen AS examen, COUNT(*) AS cantidad FROM candidato c INNER JOIN examen ex ON c.id_examen = ex.id_examen WHERE 1=1"; $params = []; $types = ""; if (!empty($filtros['id_examen'])) { $sql .= " AND c.id_examen = ?"; $params[] = $filtros['id_examen']; $types .= "i"; } if (!empty($filtros['id_rango_edad'])) { $sql .= " AND c.id_rango_edad = ?"; $params[] = $filtros['id_rango_edad']; $types .= "i"; } if (!empty($filtros['id_genero'])) { $sql .= " AND c.id_genero = ?"; $params[] = $filtros['id_genero']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(c.fecha_entrada) BETWEEN ? AND ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $sql .= " GROUP BY ex.id_examen, ex.nombre_examen ORDER BY ex.id_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; } // Gráfico de Fechas public function obtenerFechas($filtros = []) { $sql = "SELECT COUNT(*) AS cantidad FROM candidato WHERE 1=1"; $params = []; $types = ""; if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_entrada) <= ?"; $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(); $fechas = []; while ($data = $resultado->fetch_assoc()) { $fechas[] = $data; } $query->close(); return $fechas; } public function obtenerResumenGenero($filtros = []) { $sql = "SELECT g.descripcion AS genero, COUNT(*) AS cantidad FROM candidato c INNER JOIN genero g ON c.id_genero = g.id_genero WHERE 1=1"; $params = []; $types = ""; if (!empty($filtros['id_genero'])) { $sql .= " AND c.id_genero = ?"; $params[] = $filtros['id_genero']; $types .= "i"; } if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) { $sql .= " AND DATE(c.fecha_entrada) >= ? AND DATE(c.fecha_entrada) <= ?"; $params[] = $filtros['fechaInicio']; $params[] = $filtros['fechaFin']; $types .= "ss"; } $sql .= " GROUP BY g.descripcion ORDER BY g.descripcion"; $query = $this->db->prepare($sql); if ($params) $query->bind_param($types, ...$params); $query->execute(); $resultado = $query->get_result(); $generos = []; while ($data = $resultado->fetch_assoc()) { $generos[] = $data; } $query->close(); return $generos; } } ?>