LANIA_Proyecto/controllers/graficos.php

525 lines
16 KiB
PHP

<?php
require_once '../config/Database.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$input = json_decode(file_get_contents('php://input'), true);
$tipoConsulta = $input['tipoConsulta'] ?? '';
$filtros = [
'id_rango_edad' => $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 ] ];
}
}
?>