diff --git a/controllers/graficos.php b/controllers/graficos.php new file mode 100644 index 0000000..3e62fa1 --- /dev/null +++ b/controllers/graficos.php @@ -0,0 +1,526 @@ + $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 ] ]; +} +} + +?> \ No newline at end of file diff --git a/inicio.html b/inicio.html index b3d5395..108a0f7 100644 --- a/inicio.html +++ b/inicio.html @@ -4,7 +4,8 @@ - + +
Traffic
-Sales
+Pageviews
-Visitors
-Femenino
+Masculino
+Prefiero no decirlo
+