fix: la version mera buena
This commit is contained in:
commit
52e55e3983
|
@ -0,0 +1,525 @@
|
|||
<?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 ] ];
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -1,13 +1,10 @@
|
|||
async function recuperarCantidadGenero(tipoConsulta) {
|
||||
async function recuperarCantidadGenero(tipoConsulta, filtros = {}) {
|
||||
try {
|
||||
const response = await fetch("/controllers/graficosController.php", {
|
||||
const response = await fetch("../controllers/graficos.php", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({ tipoConsulta }),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ tipoConsulta, ...filtros }),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
return data.cantidad || 0;
|
||||
} catch (error) {
|
||||
|
@ -16,16 +13,13 @@ async function recuperarCantidadGenero(tipoConsulta) {
|
|||
}
|
||||
}
|
||||
|
||||
async function recuperarCantidadEdad(tipoConsulta) {
|
||||
async function recuperarCantidadEdad(tipoConsulta, filtros = {}) {
|
||||
try {
|
||||
const response = await fetch("/controllers/graficosController.php", {
|
||||
const response = await fetch("../controllers/graficos.php", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({ tipoConsulta }),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ tipoConsulta, ...filtros }),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
return data.cantidad || 0;
|
||||
} catch (error) {
|
||||
|
@ -34,22 +28,15 @@ async function recuperarCantidadEdad(tipoConsulta) {
|
|||
}
|
||||
}
|
||||
|
||||
async function recuperarCantidadEstado(tipoConsulta) {
|
||||
async function recuperarCantidadEstado(tipoConsulta, filtros = {}) {
|
||||
try {
|
||||
const response = await fetch("/controllers/graficosController.php", {
|
||||
const response = await fetch("../controllers/graficos.php", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({ tipoConsulta }),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ tipoConsulta, ...filtros }),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (!Array.isArray(data)) {
|
||||
throw new Error("La respuesta del backend no es un array.");
|
||||
}
|
||||
|
||||
if (!Array.isArray(data)) throw new Error("La respuesta del backend no es un array.");
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error("Error al recuperar datos de estados:", error);
|
||||
|
@ -57,22 +44,15 @@ async function recuperarCantidadEstado(tipoConsulta) {
|
|||
}
|
||||
}
|
||||
|
||||
async function recuperarCantidadExamen(tipoConsulta) {
|
||||
async function recuperarCantidadExamen(tipoConsulta, filtros = {}) {
|
||||
try {
|
||||
const response = await fetch("/controllers/graficosController.php", {
|
||||
const response = await fetch("../controllers/graficos.php", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({ tipoConsulta }),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ tipoConsulta, ...filtros }),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (!Array.isArray(data)) {
|
||||
throw new Error("La respuesta del backend no es un array");
|
||||
}
|
||||
|
||||
if (!Array.isArray(data)) throw new Error("La respuesta del backend no es un array");
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error("Error al recuperar datos de examenes:", error);
|
||||
|
@ -80,39 +60,48 @@ async function recuperarCantidadExamen(tipoConsulta) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
async function obtenerDatosEdades() {
|
||||
const edad1 = await recuperarCantidadEdad("Menor de 18 años");
|
||||
const edad2 = await recuperarCantidadEdad("18 a 24 años");
|
||||
const edad3 = await recuperarCantidadEdad("25 a 34 años");
|
||||
const edad4 = await recuperarCantidadEdad("35 a 44 años");
|
||||
const edad5 = await recuperarCantidadEdad("45 a 54 años");
|
||||
const edad6 = await recuperarCantidadEdad("55 a 64 años");
|
||||
const edad7 = await recuperarCantidadEdad("65 años o más");
|
||||
|
||||
return [edad1, edad2, edad3, edad4, edad5, edad6];
|
||||
async function recuperarCantidadFecha(tipoConsulta, filtros = {}) {
|
||||
try {
|
||||
const response = await fetch("../controllers/graficos.php", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ tipoConsulta, ...filtros }),
|
||||
});
|
||||
const data = await response.json();
|
||||
if (!Array.isArray(data)) throw new Error("La respuesta del backend no es un array.");
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error("Error al recuperar datos de fechas:", error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
async function obtenerDatosEdades(filtros = {}) {
|
||||
const edad1 = await recuperarCantidadEdad("Menor de 18 años", filtros);
|
||||
const edad2 = await recuperarCantidadEdad("18 a 24 años", filtros);
|
||||
const edad3 = await recuperarCantidadEdad("25 a 34 años", filtros);
|
||||
const edad4 = await recuperarCantidadEdad("35 a 44 años", filtros);
|
||||
const edad5 = await recuperarCantidadEdad("45 a 54 años", filtros);
|
||||
const edad6 = await recuperarCantidadEdad("55 a 64 años", filtros);
|
||||
const edad7 = await recuperarCantidadEdad("65 años o más", filtros);
|
||||
return [edad1, edad2, edad3, edad4, edad5, edad6, edad7];
|
||||
}
|
||||
|
||||
async function obtenerDatosGeneros() {
|
||||
const femenino = await recuperarCantidadGenero("Femenino");
|
||||
const masculino = await recuperarCantidadGenero("Masculino");
|
||||
const noDefinido = await recuperarCantidadGenero("Prefiero no decirlo");
|
||||
|
||||
async function obtenerDatosGeneros(filtros = {}) {
|
||||
const femenino = await recuperarCantidadGenero("Femenino", filtros);
|
||||
const masculino = await recuperarCantidadGenero("Masculino", filtros);
|
||||
const noDefinido = await recuperarCantidadGenero("Prefiero no decirlo", filtros);
|
||||
return [femenino, masculino, noDefinido];
|
||||
}
|
||||
|
||||
async function obtenerDatosEstados() {
|
||||
async function obtenerDatosEstados(filtros = {}) {
|
||||
try {
|
||||
const estados = await recuperarCantidadEstado("Estados");
|
||||
|
||||
const estados = await recuperarCantidadEstado("Estados", filtros);
|
||||
if (!Array.isArray(estados)) {
|
||||
console.error("Error: 'estados' no es un array. Verifica la respuesta del backend");
|
||||
return [];
|
||||
}
|
||||
|
||||
const estadosValidos = estados.filter(estado => estado.estado && estado.cantidad !== undefined);
|
||||
|
||||
return estadosValidos;
|
||||
} catch (error) {
|
||||
console.error("Error al obtener datos de estados:", error);
|
||||
|
@ -120,17 +109,14 @@ async function obtenerDatosEstados() {
|
|||
}
|
||||
}
|
||||
|
||||
async function obtenerDatosExamenes() {
|
||||
async function obtenerDatosExamenes(filtros = {}) {
|
||||
try {
|
||||
const examenes = await recuperarCantidadExamen("Examenes");
|
||||
|
||||
const examenes = await recuperarCantidadExamen("Examenes", filtros);
|
||||
if (!Array.isArray(examenes)) {
|
||||
console.error("Error: 'examenes' no es un array. Verifica la respuesta del backend");
|
||||
return [];
|
||||
}
|
||||
|
||||
const examenesValidos = examenes.filter(examen => examen.examen && examen.cantidad !== undefined);
|
||||
|
||||
return examenesValidos;
|
||||
} catch (error) {
|
||||
console.error("Error al obtener datos de examenes:", error);
|
||||
|
@ -138,6 +124,35 @@ async function obtenerDatosExamenes() {
|
|||
}
|
||||
}
|
||||
|
||||
async function obtenerDatosFechas(filtros = {}) {
|
||||
try {
|
||||
const fechas = await recuperarCantidadFecha("Fechas", filtros);
|
||||
if (!Array.isArray(fechas) || !fechas.length) {
|
||||
return [];
|
||||
}
|
||||
// Solo un objeto con la cantidad total
|
||||
return fechas;
|
||||
} catch (error) {
|
||||
console.error("Error al obtener datos de fechas:", error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function getFiltrosSeleccionados() {
|
||||
return {
|
||||
id_rango_edad: document.getElementById('id_rango_edad')?.value || "NULL",
|
||||
id_genero: document.getElementById('id_genero')?.value || "NULL",
|
||||
id_examen: document.getElementById('id_examen')?.value || "NULL",
|
||||
fechaInicio: document.getElementById('date1')?.value || "",
|
||||
fechaFin: document.getElementById('date2')?.value || ""
|
||||
};
|
||||
}
|
||||
|
||||
export { obtenerDatosGeneros, obtenerDatosEdades, obtenerDatosEstados, obtenerDatosExamenes };
|
||||
export {
|
||||
obtenerDatosGeneros,
|
||||
obtenerDatosEdades,
|
||||
obtenerDatosEstados,
|
||||
obtenerDatosExamenes,
|
||||
obtenerDatosFechas,
|
||||
getFiltrosSeleccionados
|
||||
};
|
401
js/inicio.js
401
js/inicio.js
|
@ -163,10 +163,67 @@ allProgress.forEach(item=> {
|
|||
|
||||
|
||||
|
||||
import { obtenerDatosGeneros, obtenerDatosEdades, obtenerDatosEstados,obtenerDatosExamenes } from './funcionesGraficos.js';
|
||||
import {
|
||||
obtenerDatosGeneros,
|
||||
obtenerDatosEdades,
|
||||
obtenerDatosEstados,
|
||||
obtenerDatosExamenes,
|
||||
obtenerDatosFechas,
|
||||
getFiltrosSeleccionados
|
||||
} from './funcionesGraficos.js';
|
||||
|
||||
async function inicializarGrafico() {
|
||||
const [femenino, masculino, noDefinido] = await obtenerDatosGeneros("");
|
||||
// Variables globales para los graficos
|
||||
let chartGenero = null;
|
||||
let chartEdad = null;
|
||||
let chartEstado = null;
|
||||
let chartExamen = null;
|
||||
let chartFecha = null;
|
||||
|
||||
// Controla si el filtro de fecha está activo
|
||||
let filtroFechaActivo = false;
|
||||
|
||||
async function inicializarGraficoFecha(filtros) {
|
||||
// Solo dibujar si ambas fechas están presentes y el filtro está activo
|
||||
if (!filtroFechaActivo || !filtros.fechaInicio || !filtros.fechaFin) {
|
||||
if (chartFecha) {
|
||||
chartFecha.destroy();
|
||||
chartFecha = null;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const fechas = await obtenerDatosFechas(filtros);
|
||||
|
||||
if (!fechas.length) {
|
||||
if (chartFecha) {
|
||||
chartFecha.destroy();
|
||||
chartFecha = null;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Solo un valor total
|
||||
const cantidad = fechas[0].cantidad;
|
||||
const label = `Del ${fechas[0].fechaInicio} al ${fechas[0].fechaFin}`;
|
||||
|
||||
const options = {
|
||||
series: [{
|
||||
name: 'Candidatos',
|
||||
data: [cantidad]
|
||||
}],
|
||||
chart: { height: 350, type: 'bar' },
|
||||
xaxis: { categories: [label] },
|
||||
dataLabels: { enabled: true },
|
||||
tooltip: { y: { formatter: val => val + " candidatos" } }
|
||||
};
|
||||
|
||||
if (chartFecha) chartFecha.destroy();
|
||||
chartFecha = new ApexCharts(document.querySelector("#chart5"), options);
|
||||
chartFecha.render();
|
||||
}
|
||||
|
||||
async function inicializarGrafico(filtros) {
|
||||
const [femenino, masculino, noDefinido] = await obtenerDatosGeneros(filtros);
|
||||
|
||||
const options = {
|
||||
series: [
|
||||
|
@ -174,268 +231,132 @@ async function inicializarGrafico() {
|
|||
{ name: 'Masculino', data: [masculino] },
|
||||
{ name: 'Prefiero no decirlo', data: [noDefinido] },
|
||||
],
|
||||
chart: {
|
||||
height: 350,
|
||||
type: 'bar',
|
||||
},
|
||||
plotOptions: {
|
||||
bar: {
|
||||
horizontal: false,
|
||||
columnWidth: '55%',
|
||||
borderRadius: 5,
|
||||
},
|
||||
},
|
||||
dataLabels: {
|
||||
enabled: false,
|
||||
},
|
||||
xaxis: {
|
||||
categories: ['Géneros'],
|
||||
},
|
||||
tooltip: {
|
||||
y: {
|
||||
formatter: function (val) {
|
||||
return val + " personas";
|
||||
},
|
||||
},
|
||||
},
|
||||
chart: { height: 350, type: 'bar' },
|
||||
plotOptions: { bar: { horizontal: false, columnWidth: '55%', borderRadius: 5 } },
|
||||
dataLabels: { enabled: false },
|
||||
xaxis: { categories: ['Géneros'] },
|
||||
tooltip: { y: { formatter: val => val + " personas" } }
|
||||
};
|
||||
|
||||
const chart = new ApexCharts(document.querySelector("#chart"), options);
|
||||
chart.render();
|
||||
if (chartGenero) chartGenero.destroy();
|
||||
chartGenero = new ApexCharts(document.querySelector("#chart"), options);
|
||||
chartGenero.render();
|
||||
}
|
||||
|
||||
inicializarGrafico();
|
||||
|
||||
async function inicializarGrafico2() {
|
||||
const [edad1,edad2,edad3,edad4,edad5,edad6,edad7] = await obtenerDatosEdades();
|
||||
async function inicializarGrafico2(filtros) {
|
||||
const [edad1, edad2, edad3, edad4, edad5, edad6, edad7] = await obtenerDatosEdades(filtros);
|
||||
|
||||
const options2 = {
|
||||
series: [
|
||||
{ name: 'Menor de 18 años', data: [edad1] },
|
||||
{ name: '18 a 24 años', data: [edad2] },
|
||||
{ name: '25 a 34 años', data: [edad3] },
|
||||
{ name: '35 a 44 años', data: [edad4] },
|
||||
{ name: '45 a 54 años', data: [edad5] },
|
||||
{ name: '55 a 64 años', data: [edad6] },
|
||||
{ name: '65 años o más', data: [edad7] },
|
||||
{ name: '18 a 24 años', data: [edad2] },
|
||||
{ name: '25 a 34 años', data: [edad3] },
|
||||
{ name: '35 a 44 años', data: [edad4] },
|
||||
{ name: '45 a 54 años', data: [edad5] },
|
||||
{ name: '55 a 64 años', data: [edad6] },
|
||||
{ name: '65 años o más', data: [edad7] },
|
||||
],
|
||||
chart: {
|
||||
height: 350,
|
||||
type: 'bar',
|
||||
},
|
||||
plotOptions: {
|
||||
bar: {
|
||||
horizontal: false,
|
||||
columnWidth: '55%',
|
||||
borderRadius: 5,
|
||||
},
|
||||
},
|
||||
dataLabels: {
|
||||
enabled: false,
|
||||
},
|
||||
xaxis: {
|
||||
categories: ['Edades'],
|
||||
},
|
||||
tooltip: {
|
||||
y: {
|
||||
formatter: function (val) {
|
||||
return val + " Años";
|
||||
},
|
||||
},
|
||||
},
|
||||
chart: { height: 350, type: 'bar' },
|
||||
plotOptions: { bar: { horizontal: false, columnWidth: '55%', borderRadius: 5 } },
|
||||
dataLabels: { enabled: false },
|
||||
xaxis: { categories: ['Edades'] },
|
||||
tooltip: { y: { formatter: val => val + " Años" } }
|
||||
};
|
||||
|
||||
const chart2 = new ApexCharts(document.querySelector("#chart2"), options2);
|
||||
chart2.render();
|
||||
if (chartEdad) chartEdad.destroy();
|
||||
chartEdad = new ApexCharts(document.querySelector("#chart2"), options2);
|
||||
chartEdad.render();
|
||||
}
|
||||
|
||||
inicializarGrafico2();
|
||||
async function inicializarGrafico3(filtros) {
|
||||
const estados = await obtenerDatosEstados(filtros);
|
||||
|
||||
const seriesData = estados.map(estado => ({
|
||||
name: estado.estado,
|
||||
data: [estado.cantidad]
|
||||
}));
|
||||
|
||||
async function inicializarGrafico3() {
|
||||
try {
|
||||
const estados = await obtenerDatosEstados();
|
||||
const options3 = {
|
||||
series: seriesData,
|
||||
chart: { height: 350, type: 'bar' },
|
||||
plotOptions: { bar: { horizontal: false, columnWidth: '55%', borderRadius: 5 } },
|
||||
dataLabels: { enabled: false },
|
||||
xaxis: { categories: estados.map(estado => estado.estado) },
|
||||
tooltip: { y: { formatter: val => val + " personas" } }
|
||||
};
|
||||
|
||||
if (!Array.isArray(estados)) {
|
||||
console.error("Error: 'estados' no es un array. Verifica la funcion obtenerDatosEstados");
|
||||
return;
|
||||
}
|
||||
if (chartEstado) chartEstado.destroy();
|
||||
chartEstado = new ApexCharts(document.querySelector("#chart3"), options3);
|
||||
chartEstado.render();
|
||||
}
|
||||
|
||||
const seriesData = estados.map(estado => ({
|
||||
name: estado.estado,
|
||||
data: [estado.cantidad]
|
||||
}));
|
||||
async function inicializarGrafico4(filtros) {
|
||||
const examenes = await obtenerDatosExamenes(filtros);
|
||||
|
||||
const options3 = {
|
||||
series: seriesData,
|
||||
chart: {
|
||||
height: 350,
|
||||
type: 'bar',
|
||||
},
|
||||
plotOptions: {
|
||||
bar: {
|
||||
horizontal: false,
|
||||
columnWidth: '55%',
|
||||
borderRadius: 5,
|
||||
},
|
||||
},
|
||||
dataLabels: {
|
||||
enabled: false,
|
||||
},
|
||||
xaxis: {
|
||||
categories: estados.map(estado => estado.estado), // categorias en el eje X
|
||||
},
|
||||
tooltip: {
|
||||
y: {
|
||||
formatter: function (val) {
|
||||
return val + " personas";
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
const seriesData = examenes.map(examen => ({
|
||||
name: examen.examen,
|
||||
data: [examen.cantidad]
|
||||
}));
|
||||
|
||||
const chart3 = new ApexCharts(document.querySelector("#chart3"), options3);
|
||||
chart3.render();
|
||||
} catch (error) {
|
||||
console.error("Error al inicializar el gráfico 3:", error);
|
||||
const options4 = {
|
||||
series: seriesData,
|
||||
chart: { height: 350, type: 'bar' },
|
||||
plotOptions: { bar: { horizontal: false, columnWidth: '55%', borderRadius: 5 } },
|
||||
dataLabels: { enabled: false },
|
||||
xaxis: { categories: examenes.map(examen => examen.examen) },
|
||||
tooltip: { y: { formatter: val => val + " examenes" } }
|
||||
};
|
||||
|
||||
if (chartExamen) chartExamen.destroy();
|
||||
chartExamen = new ApexCharts(document.querySelector("#chart4"), options4);
|
||||
chartExamen.render();
|
||||
}
|
||||
|
||||
async function actualizarTodosLosGraficos() {
|
||||
// Si el filtro de fecha está activo, se pasan las fechas, si no, se limpian
|
||||
let filtros = getFiltrosSeleccionados();
|
||||
if (!filtroFechaActivo) {
|
||||
filtros.fechaInicio = "";
|
||||
filtros.fechaFin = "";
|
||||
}
|
||||
await inicializarGrafico(filtros);
|
||||
await inicializarGrafico2(filtros);
|
||||
await inicializarGrafico3(filtros);
|
||||
await inicializarGrafico4(filtros);
|
||||
await inicializarGraficoFecha(filtros);
|
||||
}
|
||||
|
||||
inicializarGrafico3();
|
||||
|
||||
async function inicializarGrafico4() {
|
||||
try {
|
||||
const examenes = await obtenerDatosExamenes();
|
||||
|
||||
if (!Array.isArray(examenes)) {
|
||||
console.error("Error: 'examenes' no es un array. Verifica la función obtenerDatosExamenes");
|
||||
return;
|
||||
}
|
||||
|
||||
const seriesData = examenes.map(examen => ({
|
||||
name: examen.examen,
|
||||
data: [examen.cantidad]
|
||||
}));
|
||||
|
||||
const options4 = {
|
||||
series: seriesData,
|
||||
chart: {
|
||||
height: 350,
|
||||
type: 'bar',
|
||||
},
|
||||
plotOptions: {
|
||||
bar: {
|
||||
horizontal: false,
|
||||
columnWidth: '55%',
|
||||
borderRadius: 5,
|
||||
},
|
||||
},
|
||||
dataLabels: {
|
||||
enabled: false,
|
||||
},
|
||||
xaxis: {
|
||||
categories: examenes.map(examen => examen.examen), // categorías en el eje X
|
||||
},
|
||||
tooltip: {
|
||||
y: {
|
||||
formatter: function (val) {
|
||||
return val + " examenes";
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const chart4 = new ApexCharts(document.querySelector("#chart4"), options4);
|
||||
chart4.render();
|
||||
} catch (error) {
|
||||
console.error("Error al inicializar el grafico 4:", error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inicializarGrafico4();
|
||||
|
||||
|
||||
// Espera a que el DOM esté listo antes de agregar eventos
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const btnbuscar = document.getElementById('buscar');
|
||||
btnbuscar.addEventListener('click', async function () {
|
||||
const fechaInicioInput = document.getElementById('date1').value;
|
||||
const fechaFinInput = document.getElementById('date2').value;
|
||||
// Solo combos, NO fechas
|
||||
['id_rango_edad', 'id_genero', 'id_examen'].forEach(id => {
|
||||
const el = document.getElementById(id);
|
||||
if (el) el.addEventListener('change', actualizarTodosLosGraficos);
|
||||
});
|
||||
|
||||
if (fechaInicioInput === "" || fechaFinInput === "") {
|
||||
alert("Por favor, ingrese ambas fechas.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Convertir las fechas al formato YYYY-MM-DD
|
||||
const fechaInicio = convertirFechaAFormatoISO(fechaInicioInput);
|
||||
const fechaFin = convertirFechaAFormatoISO(fechaFinInput);
|
||||
|
||||
try {
|
||||
const response = await fetch('../controllers/graficos.php', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
tipoConsulta: 'Fechas',
|
||||
fechaInicio: fechaInicio,
|
||||
fechaFin: fechaFin,
|
||||
}),
|
||||
// Botón buscar para fechas
|
||||
const btnBuscar = document.getElementById('buscar');
|
||||
if (btnBuscar) {
|
||||
btnBuscar.addEventListener('click', () => {
|
||||
const date1 = document.getElementById('date1').value;
|
||||
const date2 = document.getElementById('date2').value;
|
||||
// Solo activa el filtro si ambas fechas están presentes
|
||||
filtroFechaActivo = !!(date1 && date2);
|
||||
actualizarTodosLosGraficos();
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
console.log("Respuesta del servidor:", data);
|
||||
|
||||
if (Array.isArray(data) && data.length > 0) {
|
||||
const seriesData = data.map(fecha => fecha.total);
|
||||
const categories = data.map((_, index) => `Registro ${index + 1}`);
|
||||
|
||||
const options5 = {
|
||||
series: [{
|
||||
name: 'Cantidad de registros',
|
||||
data: seriesData,
|
||||
}],
|
||||
chart: {
|
||||
height: 350,
|
||||
type: 'bar',
|
||||
},
|
||||
plotOptions: {
|
||||
bar: {
|
||||
horizontal: false,
|
||||
columnWidth: '55%',
|
||||
borderRadius: 5,
|
||||
},
|
||||
},
|
||||
dataLabels: {
|
||||
enabled: false,
|
||||
},
|
||||
xaxis: {
|
||||
categories: categories,
|
||||
},
|
||||
tooltip: {
|
||||
y: {
|
||||
formatter: function (val) {
|
||||
return val + " registros";
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const chart5 = new ApexCharts(document.querySelector("#chart5"), options5);
|
||||
chart5.render();
|
||||
} else {
|
||||
alert("No se encontraron datos para las fechas seleccionadas.");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error al obtener los datos:", error);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Función para convertir fechas al formato YYYY-MM-DD
|
||||
function convertirFechaAFormatoISO(fecha) {
|
||||
const partes = fecha.split('-'); // Suponiendo que el input usa el formato DD-MM-YYYY
|
||||
return `${partes[0]}-${partes[1]}-${partes[2]}`; // Retorna YYYY-MM-DD
|
||||
}
|
||||
// Botón limpiar para quitar filtro de fecha
|
||||
const btnLimpiar = document.getElementById('limpiar');
|
||||
if (btnLimpiar) {
|
||||
btnLimpiar.addEventListener('click', () => {
|
||||
document.getElementById('date1').value = '';
|
||||
document.getElementById('date2').value = '';
|
||||
filtroFechaActivo = false;
|
||||
actualizarTodosLosGraficos();
|
||||
});
|
||||
}
|
||||
|
||||
filtroFechaActivo = false;
|
||||
actualizarTodosLosGraficos();
|
||||
});
|
|
@ -121,7 +121,27 @@
|
|||
<option value="NULL">Seleccione una opción</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Fecha</h2>
|
||||
<h3>Ingresa una fecha de inicio:</h3>
|
||||
<br>
|
||||
<input type="date" id="date1" name="date1">
|
||||
<h3>Ingresa una fecha de final:</h3>
|
||||
<input type="date" id="date2" name="date2">
|
||||
<br>
|
||||
<button type="button" id="buscar">Buscar</button>
|
||||
<button type="button" id="limpiar">Limpiar</button>
|
||||
<br>
|
||||
<div class="content-data">
|
||||
<div class="head">
|
||||
<h3>Resultado de registros en el rango de fecha ingresado</h3>
|
||||
<div class="menu">
|
||||
</div>
|
||||
</div>
|
||||
<div class="chart">
|
||||
<div id="chart5"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -234,32 +254,6 @@
|
|||
<div id="chart4"></div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<br>
|
||||
<h2>Ingresa una fecha de inicio:</h2>
|
||||
<br>
|
||||
<input type="date" id="date1" name="date1">
|
||||
<h2>Ingresa una fecha de final:</h2>
|
||||
<input type="date" id="date2" name="date2">
|
||||
<br>
|
||||
<button type="button" id="buscar">Buscar</button>
|
||||
<br>
|
||||
<div class="content-data">
|
||||
<div class="head">
|
||||
<h3>Fecha</h3>
|
||||
<div class="menu">
|
||||
<i class='bx bx-dots-horizontal-rounded icon'></i>
|
||||
<ul class="menu-link">
|
||||
<li><a href="#">Edit</a></li>
|
||||
<li><a href="#">Save</a></li>
|
||||
<li><a href="#">Remove</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="chart">
|
||||
<div id="chart5"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
@ -272,6 +266,5 @@
|
|||
<script src="https://website-widgets.pages.dev/dist/sienna.min.js" defer></script>
|
||||
<script src="../js/formulario-candidato.js"></script>
|
||||
<script src="../js/tarjetasPromedio.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue