formularios

This commit is contained in:
victor.monge 2025-05-02 17:57:20 -06:00
parent 09e4ecd527
commit 0c33aaa6fa
14 changed files with 1096 additions and 411 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea/

View File

@ -22,8 +22,8 @@ class CandidatoController {
$id_tipo_id = $_POST['id_tipo_id'];
$id_rango_edad = $_POST['id_rango_edad'];
$id_genero = $_POST['id_genero'];
$insertId = self::$candidatoModel->registrarCandidato(
return self::$candidatoModel->registrarCandidato(
$nombres,
$primer_apellido,
$segundo_apellido,
@ -34,12 +34,27 @@ class CandidatoController {
$id_rango_edad,
$id_genero
);
return $insertId;
}
public static function registrarInfoCandidato() {
$id_candidato = $_POST['id_candidato'];
$exiteInfo = self::existeRegistroInfoCandidato($id_candidato);
if ($exiteInfo) {
return [
"estado" => "error",
"mensaje" => "Ya existe un registro de información para este candidato."
];
}
if(!self::existeIdCandidato($id_candidato)){
return [
"estado" => "error",
"mensaje" => "El ID del candidato no existe."
];
}
$id_pais = $_POST['id_pais'];
$id_estado = $_POST['id_estado'];
$id_municipio = $_POST['id_municipio'];
@ -50,8 +65,10 @@ class CandidatoController {
$motivo_examen = $_POST['motivo_examen'];
$calificacion_servicio = $_POST['calificacion_servicio'];
$consentimiento_pub = $_POST['consentimiento_pub'];
$insertId = self::$candidatoModel->registrarInfoCandidatos(
$fecha_salida = $_POST['fecha_salida'];
return self::$candidatoModel->registrarInfoCandidatos(
$id_candidato,
$id_pais,
$id_estado,
@ -62,10 +79,22 @@ class CandidatoController {
$nombre_empresa_institucion,
$motivo_examen,
$calificacion_servicio,
$consentimiento_pub
$consentimiento_pub,
$fecha_salida
);
}
return $insertId;
public static function existeRegistroInfoCandidato($id_candidato) {
return self::$candidatoModel->verificarRegistroInfoCandidato($id_candidato);
}
public static function existeIdCandidato($id_candidato){
$resultado = self::$candidatoModel->existeIdCandidato($id_candidato);
if($resultado['estado'] === 'exitoso'){
return true;
} else {
return false;
}
}
}

View File

@ -1,6 +1,6 @@
<?php
require_once __DIR__ . '/../models/Catalogos.php';
require_once __DIR__ . '/../models/CatalogosModel.php';
class CatalogosController {
private static $catalogosModel = null;
@ -12,20 +12,81 @@ class CatalogosController {
}
public static function obtenerInfiCodigoPostal($codigo_postal){
$result = self::$catalogosModel->obtenerInfiCodigoPostal($codigo_postal);
return $result;
return self::$catalogosModel->obtenerInfiCodigoPostal($codigo_postal);
}
public static function obtenerGiros(){
return self::$catalogosModel->obtenerGiros();
}
public static function obtenerNombresExamenes(){
return self::$catalogosModel->obtenerNombresExamenes();
}
public static function obtenerTiposIdentificacion(){
return self::$catalogosModel->obtenerTiposIdentificacion();
}
public static function obtenerRangosEdad(){
return self::$catalogosModel->obtenerRangosEdad();
}
public static function obtenerNivelesEstudio(){
return self::$catalogosModel->obtenerNivelesEstudio();
}
public static function obtenerNombresEmpresasInstituciones(){
return self::$catalogosModel->obtenerNombresEmpresasInstituciones();
}
}
CatalogosController::inicializar();
if($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['codigo_postal'])) {
// Petición GET para información del código postal
if($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['codigo_postal'])) {
header('Content-Type: application/json');
$codigo_postal = $_GET['codigo_postal'];
$result = CatalogosController::obtenerInfiCodigoPostal($codigo_postal);
echo $result;
echo json_encode($result);
}
if($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['obtener']) && $_GET['obtener'] === 'giros') {
header('Content-Type: application/json');
$result = CatalogosController::obtenerGiros();
echo json_encode($result);
}
if($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['obtener']) && $_GET['obtener'] === 'examenes') {
header('Content-Type: application/json');
$result = CatalogosController::obtenerNombresExamenes();
echo json_encode($result);
}
if($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['obtener']) && $_GET['obtener'] === 'identificacion') {
header('Content-Type: application/json');
$result = CatalogosController::obtenerTiposIdentificacion();
echo json_encode($result);
}
if($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['obtener']) && $_GET['obtener'] === 'rangosedad') {
header('Content-Type: application/json');
$result = CatalogosController::obtenerRangosEdad();
echo json_encode($result);
}
if($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['obtener']) && $_GET['obtener'] === 'nivelesestudio') {
header('Content-Type: application/json');
$result = CatalogosController::obtenerNivelesEstudio();
echo json_encode($result);
}
if($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['obtener']) && $_GET['obtener'] === 'empresasinstituciones') {
header('Content-Type: application/json');
$result = CatalogosController::obtenerNombresEmpresasInstituciones();
echo json_encode($result);
}
?>

View File

@ -4,11 +4,20 @@ require_once __DIR__ . '/CandidatoController.php';
// Manejar la solicitud POST para registrar información un candidato
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$insertId = CandidatoController::registrarInfoCandidato();
if($insertId > 0){
echo json_encode(['registroExitoso' => true, 'message' => 'Se ha registrado la información correctamente.']);
} else {
echo json_encode(['registroExitoso' => false, 'message' => 'Error al registrar la información.']);
$respuesta = CandidatoController::registrarInfoCandidato();
if(isset($respuesta["estado"]) && $respuesta["estado"] === "exitoso") {
echo json_encode([
"estado" => "exitoso",
"mensaje" => "Se ha registrado la información correctamente.",
"res" => "id_candidato: " . $respuesta["mensaje"]
]);
} else if( isset($respuesta["estado"]) ){
echo json_encode([
"estado" => "error",
"mensaje" => "Error al registrar la información.",
"res" => $respuesta["mensaje"]
]);
}
}

View File

@ -123,57 +123,28 @@
<div>
<label for="id_examen">Examen:</label>
<select name="id_examen" id="id_examen" required>
<option value="">Selecciona un examen</option>
<option value="1">Cisco</option>
<option value="2">IBM</option>
<option value="3">Microsoft</option>
<option value="4">Oracle</option>
<option value="5">SAP</option>
<option value="6">CompTIA</option>
<option value="7">Amazon Web Services</option>
<option value="8">Google Cloud Platform</option>
<option value="9">Salesforce</option>
<option value="10">Red Hat</option>
<option value="11">VMWare</option>
<option value="12">Palo Alto Networks</option>
<option value="13">Fornitet</option>
<option value="14">Juniper Networks</option>
<option value="15">Otros</option>
<option value="NULL">Selecciona un examen</option>
</select><br>
</div>
<div>
<label for="id_tipo_id">Tipo de Identificación:</label>
<select name="id_tipo_id" id="id_tipo_id" required>
<option value="">Selecciona el tipo de identificación</option>
<option value="1">INE</option>
<option value="2">Pasaporte</option>
<option value="3">CURP</option>
<option value="4">RFC</option>
<option value="5">Cédila Profesional</option>
<option value="6">Licencia de conducir</option>
<option value="7">Otro</option>
<option value="NULL">Selecciona el tipo de identificación</option>
</select><br>
</div>
<div>
<label for="id_rango_edad">Rango de edad:</label>
<select name="id_rango_edad" id="id_rango_edad" required>
<option value="">Selecciona un rango de edad</option>
<option value="1">Menos de 18</option>
<option value="2">18-24</option>
<option value="3">24-34</option>
<option value="4">35-44</option>
<option value="5">45-54</option>
<option value="6">55-64</option>
<option value="7">65 o más</option>
<option value="NULL">Selecciona un rango de edad</option>
</select><br>
</div>
<div>
<label for="id_genero">Género:</label>
<select name="id_genero" id="id_genero" required>
<option value="">Selecciona un género</option>
<option value="NULL">Selecciona un género</option>
<option value="1">Masculino</option>
<option value="2">Femenino</option>
<option value="3">Prefiero no decir</option>
@ -192,7 +163,7 @@
<!-- NAVBAR -->
<script src="js/form.js"></script>
<script src="js/form_datos_basicos.js"""
<script src="js/form_datos_basicos.js"></script>
<script src="https://website-widgets.pages.dev/dist/sienna.min.js" defer></script>
</body>
</html>

View File

@ -1,3 +1,15 @@
<?php
if($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['id_candidato'])){
// Verifica si se ha pasado el id_candidato como parámetro GET
$id_candidato = $_GET['id_candidato'];
// Si no se pasa el id_candidato
//header("Location: inicio.html");
//exit();
} else { // TEST //
$id_candidato = 0;
} // TEST \\
?>
<!DOCTYPE html>
<html lang="en">
<head>
@ -81,66 +93,69 @@
<!-- MAIN -->
<main>
<h1 class="title">Datos Extendidos</h1>
<h1 class="title">Datos</h1>
<ul class="breadcrumbs">
<li><a href="#">Formularios</a></li>
<li><a href="#">Formulario</a></li>
<li class="divider">/</li>
<li><a href="#" class="active">Datos Extendidos</a></li>
<li><a href="#" class="active">Datos</a></li>
</ul>
<div class="form-container">
<!-- Formulario -->
<form id="formulario-datos-extendido" method="post" action="#">
<div class="form-section">
<br>
<h3>Ubicación</h3>
<br>
<div class="form-row">
<input type="hidden" id="id_candidato" name="id_candidato">
<label for="id_candidato">ID del candidato</label>
<input type="number" id="id_candidato" name="id_candidato" value="<?php echo $id_candidato; ?>">
<div class="form-col">
<div class="form-group">
<label for="id_pais" class="required">País</label>
<select id="id_pais" name="id_pais" required>
<option value="">Seleccione...</option>
<!-- Aquí irían los países desde la base de datos -->
<option value="NULL">Seleccione su país</option>
<option value="1">México</option>
<option value="2">Otro</option>
</select>
</div>
</div>
<div class="form-col">
<div class="form-group">
<label for="codigo_postal" class="required">Código Postal</label>
<input type="number" min="0" step="1" id="codigo_postal" name="codigo_postal" maxlength="10" required>
<button type="button" id="buscarBtn"><span class="material-icons">search</span>Buscar</button>
<label for="codigo_postal">Código postal</label>
<input type="number" id="codigo_postal" name="codigo_postal" maxlength="5" disabled>
<br>
<input type="button" class="btn" id="buscarBtn" value="Buscar" disabled>
</div>
</div>
<div class="form-col">
<div class="form-group">
<label for="id_estado">Estado</label>
<select id="id_estado" name="id_estado">
<option value="">Seleccione...</option>
<select id="id_estado" name="id_estado" disabled>
<option value="NULL">Seleccione su estado</option>
<!-- Aquí irían los estados desde la base de datos -->
</select>
</div>
</div>
</div>
<div class="form-row">
<div class="form-col">
<div class="form-group">
<label for="id_municipio">Municipio</label>
<select id="id_municipio" name="id_municipio">
<option value="">Seleccione...</option>
<select id="id_municipio" name="id_municipio" disabled>
<option value="NULL">Seleccione su municipio</option>
<!-- Aquí irían los municipios desde la base de datos -->
</select>
</div>
</div>
<div class="form-col">
<div class="form-group">
<label for="id_colonia">Colonia</label>
<select id="id_colonia" name="id_colonia">
<option value="">Seleccione...</option>
<select id="id_colonia" name="id_colonia" disabled>
<option value="NULL">Seleccione su colonia</option>
<!-- Aquí irían las colonias desde la base de datos -->
</select>
</div>
@ -151,81 +166,58 @@
<!-- Sección 3: Información Académica y Laboral -->
<div class="form-section">
<br>
<h3>Información Académica/Laboral</h3>
<h3>Información académica/laboral</h3>
<br>
<div class="form-row">
<div class="form-col">
<div class="form-group">
<label for="id_nivel" class="required">Nivel de Estudios</label>
<select id="id_nivel" name="id_nivel" required>
<option value="">Seleccione...</option>
<option value="1">Primaria</option>
<option value="2">Secundaria</option>
<option value="3">Bachillerato</option>
<option value="4">Técnico Superior Universitario</option>
<option value="5">Licenciatura</option>
<option value="6">Maestría</option>
<option value="7">Doctorado</option>
<option value="8">Otro</option>
</select>
</div>
</div>
<div class="form-col">
<div class="form-group">
<label for="id_giro" class="required">Giro</label>
<select id="id_giro" name="id_giro" required>
<option value="">Seleccione...</option>
<option value="1">Tecnologías de la Información</option>
<option value="2">Gobierno</option>
<option value="3">Finanzas</option>
<option value="4">Salud</option>
<option value="5">Educación</option>
<option value="6">Telecomunicaciones</option>
<option value="7">Retail</option>
<option value="8">Manufactura</option>
<option value="9">Logística y Transporte</option>
<option value="10">Construcción</option>
<option value="11">Turismo y Hospitalidad</option>
<option value="12">Energía y Recursos Naturales</option>
<option value="13">Agricultura y Alimentación</option>
<option value="14">Medios de Comunicación y Entretenimiento</option>
<option value="15">Otros</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<label for="nombre_empresa">Nombre de la Empresa/Institución</label>
<input type="text" id="nombre_empresa" name="nombre_empresa"
maxlength="100">
</div>
<div class="form-group">
<label for="motivo_examen">Motivo del Examen</label>
<textarea id="motivo_examen" name="motivo_examen" rows="3"></textarea>
</div>
<div class="form-col">
<div class="form-group">
<label for="id_nivel" class="required">Nivel de Estudios</label>
<select id="id_nivel" name="id_nivel" required>
<option value="NULL">Seleccione una opción</option>
</select>
</div>
</div>
<div class="form-col">
<div class="form-group">
<label for="nombre_empresa">Nombre de la empresa/institución</label>
<input type="text" id="nombre_empresa" list="sugerencias_ei" maxlength="100">
<datalist id="sugerencias_ei"></datalist>
</div>
</div>
<div class="form-col">
<div class="form-group">
<label for="id_giro" class="required">Giro de la empresa/institución</label>
<select id="id_giro" name="id_giro" required>
<option value="NULL">Seleccione una opción</option>
</select>
</div>
</div>
<div class="form-group">
<label for="motivo_examen">Motivo del Examen</label>
<textarea id="motivo_examen" name="motivo_examen" rows="3"></textarea>
</div>
</div>
</div>
<!-- Sección 4: Evaluación y Consentimiento -->
<div class="form-section">
<br>
<h3>Evaluación y Consentimiento</h3>
<br>
<br><h3>Evaluación</h3><br>
<div class="form-group">
<p>Calificación del Servicio</p>
<p>Calificación del servicio</p>
<br>
<label for="calificacion_servicio">¿Qué tan satisfecho estás con nuestra institución en general, considerando la calidad de las instalaciones, la atención del personal y el proceso de certificación?</label>
<label for="calificacion_servicio">Considerando la calidad de las instalaciones, la atención del personal y el proceso de certificación, ¿cuál es su nivel general de satisfacción con nuestra institución?</label>
<br>
<select id="calificacion_servicio" name="calificacion_servicio" class="select-emoji">
<option value="">Seleccione una calificación...</option>
<option value="1">😡 Muy insatisfecho</option>
<option value="2">😕 Insatisfecho</option>
<option value="3">😐 Neutral</option>
<option value="4">🙂 Satisfecho</option>
<option value="5">😄 Muy satisfecho</option>
<option value="NULL">Seleccione una calificación...</option>
<option value="1">&#128577 Muy insatisfecho</option>
<option value="2">&#128533 Insatisfecho</option>
<option value="3">&#128528 Neutral</option>
<option value="4">&#128578 Satisfecho</option>
<option value="5">&#128528 Muy satisfecho</option>
</select>
</div>
@ -233,7 +225,7 @@
<div class="form-group">
<input type="checkbox" id="consentimiento_pub" name="consentimiento_pub" value="1" checked>
<label for="consentimiento_pub" style="display: inline;">Doy mi consentimiento para la publicación de mis datos</label>
<label for="consentimiento_pub" style="display: inline;">Consiento que mis datos personales sean tratados de conformidad con los términos y condiciones informados en el presente <a href="#">aviso de privacidad</a>.</label>
</div>
</div>
@ -254,7 +246,7 @@
<script src="js/form.js"></script>
<script src="js/form_datos_extendidos.js"></script>
<script src="js/buscarCodigo.js"></script>
<!-- <script src="js/buscarCodigo.js"></script> -->
<script src="https://website-widgets.pages.dev/dist/sienna.min.js" defer></script>
</body>
</html>

View File

@ -33,7 +33,7 @@
<a href="#"><i class='bx bxs-notepad icon' ></i> Formularios <i class='bx bx-chevron-right icon-right' ></i></a>
<ul class="side-dropdown">
<li><a href="form_datos_basicos.html">Datos Básicos</a></li>
<li><a href="form_datos_extendidos.html">Datos Extendidos</a></li>
<li><a href="form_datos_extendidos.php">Datos Extendidos</a></li>
</ul>
</li>
</ul>

140
js/buscarCodigo Normal file
View File

@ -0,0 +1,140 @@
document.addEventListener("DOMContentLoaded", function () {
const buscarBtn = document.getElementById("buscarBtn");
const paisSelect = document.getElementById("id_pais");
const inputCodigoPostal = document.getElementById("codigo_postal");
const inputButtonBuscarCodigoPostal = document.getElementById("buscarBtn");
const estadoSelect = document.getElementById("id_estado");
const municipioSelect = document.getElementById("id_municipio");
const coloniaSelect = document.getElementById("id_colonia");
const giroSelect = document.getElementById("id_giro");
llenarSelectGiro();
// Añadir un evento de cambio al select de país
paisSelect.addEventListener("change", function() {
// Si el país es México, habilitar el campo de código postal
if (paisSelect.value === "1") {
inputCodigoPostal.removeAttribute("disabled");
inputButtonBuscarCodigoPostal.removeAttribute("disabled");
} else {
// Si el país no es México, deshabilitar el campo de código postal
inputCodigoPostal.setAttribute("disabled", "disabled");
inputButtonBuscarCodigoPostal.setAttribute("disabled", "disabled");
}
});
//Añadir un evento al boton de buscar
buscarBtn.addEventListener("click", function () {
let inputCodigoPostal = document.getElementById("codigo_postal").value;
//verificar si el codigo postal esta vacio
if (inputCodigoPostal) {
// Limpia los selects antes de llenarlos
estadoSelect.innerHTML = "<option value='NULL'>Seleccione su estado</option>";
municipioSelect.innerHTML = "<option value='NULL'>Seleccione su municipio</option>";
coloniaSelect.innerHTML = "<option value='NULL'>Seleccione su colonia</option>";
// Construye la URL para la solicitud
let url = "./controllers/CatalogosController.php?codigo_postal=" + encodeURIComponent(inputCodigoPostal);
// Realiza una solicitud HTTP GET a la URL especificada
fetch(url)
.then(response => {
//console.log("Estado de la respuesta:", response.status);
//console.log("Contenido de la respuesta:", response.json());
// Verifica si la respuesta del servidor es exitosa
if (!response.ok) {
throw new Error("Error en la respuesta del servidor");
}
// Convertir la respuesta a JSON
return response.json();
})
.then(data => {
// Verifica si se recibieron datos
if (data.length > 0) {
// Quitar disable a los selects
estadoSelect.removeAttribute("disabled");
estadoSelect.setAttribute("required", "required");
municipioSelect.removeAttribute("disabled");
municipioSelect.setAttribute("required", "required");
coloniaSelect.removeAttribute("disabled");
coloniaSelect.setAttribute("required", "required");
//Crea conjuntos para almacenar estados, ciudades y colonias
let estados = new Map();
let municipios = new Map();
let colonias = new Map();
// Itera sobre cada fila de datos recibidos
data.forEach(row => {
console.log(row);
estados.set(row['id_estado'], row['estado']);
municipios.set(row['id_municipio'], row['municipio']);
colonias.set(row['id_colonia'], row['colonia']);
});
// Añade las opciones de estados al elemento select
for (let [id_estado, estado] of estados) {
estadoSelect.innerHTML += "<option value='" + id_estado + "'>" + estado + "</option>";
}
// Añade las opciones de ciudades al elemento select
for (let [id_municipio, municipio] of municipios) {
municipioSelect.innerHTML += "<option value='" + id_municipio + "'>" + municipio + "</option>";
}
// Añade las opciones de colonias al elemento select
for (let [id_colonia, colonia] of colonias) {
coloniaSelect.innerHTML += "<option value='" + id_colonia + "'>" + colonia + "</option>";
}
} else {
alert("No se encontraron datos para el código postal ingresado.");
}
})
.catch(error => {
console.error("Error en la solicitud:", error);
});
} else {
alert("Por favor, ingrese un código postal.");
}
});
function llenarSelectGiro() {
// URL para la solicitud
let url = "./controllers/CatalogosController.php?obtener=giros";
// Realiza una solicitud HTTP GET a la URL especificada
fetch(url)
.then(response => {
// Verifica si la respuesta del servidor es exitosa
if (!response.ok) {
throw new Error("Error en la respuesta del servidor");
}
// Convertir la respuesta a JSON
return response.json();
})
.then(data => {
// Verifica si se recibieron datos
if (data.length > 0) {
// Añade las opciones de giros al elemento select
data.forEach(row => {
giroSelect.innerHTML += "<option value='" + row.id_giro + "'>" + row.descripcion + "</option>";
});
} else {
alert("No se encontraron datos para los giros.");
}
})
.catch(error => {
console.error("Error en la solicitud:", error);
});
}
});

View File

@ -1,76 +0,0 @@
document.addEventListener("DOMContentLoaded", function () {
var buscarBtn = document.getElementById("buscarBtn");
//Añadir un evento al boton de buscar
buscarBtn.addEventListener("click", function () {
var codigoPostal = document.getElementById("codigo_postal").value;
console.log(codigoPostal);
//verificar si el codigo postal esta vacio
if (codigoPostal) {
console.log("Código postal ingresado:", codigoPostal);
//crear la url para la peticion
const url = "./controllers/CatalogosController.php?codigo_postal=" + encodeURIComponent(codigoPostal);
//Realiza una solicitud HTTP GET a la URL especificada
fetch(url)
.then(response => {
//console.log("Estado de la respuesta:", response.status);
//console.log("Contenido de la respuesta:", response.json());
// Verifica si la respuesta del servidor es exitosa
if (!response.ok) {
throw new Error("Error en la respuesta del servidor");
}
//Convierte la respuesta que es unu array de objetos a formato JSON
return response.json();
})
.then(data => {
var estadoSelect = document.getElementById("id_estado");
var municipioSelect = document.getElementById("id_municipio");
var coloniaSelect = document.getElementById("id_colonia");
// Inicializa los elementos select con una opción por defecto
estadoSelect.innerHTML = "<option value=''>Seleccionar Estado</option>";
municipioSelect.innerHTML = "<option value=''>Seleccionar Municipios</option>";
coloniaSelect.innerHTML = "<option value=''>Seleccionar Colonia</option>";
// Verifica si se recibieron datos
if (data.length > 0) {
//Crea conjuntos para almacenar estados, ciudades y colonias únicos
let estados = new Set();
let municipios = new Set();
let colonias = [];
// Itera sobre cada fila de datos recibidos
data.forEach(row => {
estados.add(row.estado);
municipios.add(row.municipio);
colonias.push(row.colonia);
});
//Añade las opciones de estados al elemento select
estados.forEach(estado => {
estadoSelect.innerHTML += "<option value='" + estado + "'>" + estado + "</option>";
});
//Añade las opciones de ciudades al elemento select
municipios.forEach(municipio => {
municipioSelect.innerHTML += "<option value='" + municipio + "'>" + municipio + "</option>";
});
//Añade las opciones de colonias al elemento select
colonias.forEach(colonia => {
coloniaSelect.innerHTML += "<option value='" + colonia + "'>" + colonia + "</option>";
});
} else {
alert("No se encontraron datos para el código postal ingresado.");
}
})
.catch(error => {
console.error("Error en la solicitud:", error);
});
} else {
alert("Por favor, ingrese un código postal.");
}
});
});

View File

@ -1,6 +1,101 @@
const formulario = document.getElementById("formulario-datos-basicos");
const notificacion = document.getElementById("mensaje-error");
obtenerNombresExamenes();
obtenerTiposIdentificacion();
obtenerRangosEdad();
function obtenerNombresExamenes(){
let url = "./controllers/CatalogosController.php?obtener=examenes";
fetch(url)
.then(response => response.json())
.then(data => {
const selectExamen = document.getElementById('id_examen');
let examen = new Map();
// Iterar sobre cada fila y mapear por por id_examen, nombre_examen
data.forEach(row =>{
examen.set(row['id_examen'], row['nombre_examen']);
})
// LLenar opciones del select de examen
for (let [id_examen, nombre_examen] of examen) {
selectExamen.innerHTML += "<option value='" + id_examen + "'>" + nombre_examen + "</option>";
}
})
.catch(error => console.error('Error al obtener los exámenes:', error));
}
function obtenerTiposIdentificacion(){
let url = "./controllers/CatalogosController.php?obtener=identificacion";
fetch(url)
.then(response => response.json())
.then(data => {
const selectTipoId = document.getElementById('id_tipo_id');
let tipoId = new Map();
// Iterar sobre cada fila y mapear por por id_tipo_id, descripcion
data.forEach(row =>{
tipoId.set(row['id_tipo_id'], row['descripcion']);
})
// LLenar opciones del select de examen
for (let [id_tipo_id, descripcion] of tipoId) {
selectTipoId.innerHTML += "<option value='" + id_tipo_id + "'>" + descripcion + "</option>";
}
})
.catch(error => console.error('Error al obtener los tipos de identificación:', error));
}
function obtenerRangosEdad(){
let url = "./controllers/CatalogosController.php?obtener=rangosedad";
fetch(url)
.then(response => response.json())
.then(data => {
const selectRangoEdad = document.getElementById('id_rango_edad');
let tipoId = new Map();
// Iterar sobre cada fila y mapear por por id_tipo_id, descripcion
data.forEach(row =>{
tipoId.set(row['id_rango_edad'], row['descripcion']);
})
// LLenar opciones del select de examen
for (let [id_rango_edad, descripcion] of tipoId) {
selectRangoEdad.innerHTML += "<option value='" + id_rango_edad + "'>" + descripcion + "</option>";
}
})
.catch(error => console.error('Error al obtener rangos de edad:', error));
}
// Validaciones - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function selectExamenValido(){
const selectExamen = document.getElementById('id_examen');
const idExamen = selectExamen.value;
return idExamen !== "NULL";
}
function selectTipoIdentificacionValido(){
const selectTipoId = document.getElementById('id_tipo_id');
const idTipoId = selectTipoId.value;
return idTipoId !== "NULL";
}
function selectRangoEdadValido(){
const selectRangoEdad = document.getElementById('id_rango_edad');
const idRangoEdad = selectRangoEdad.value;
return idRangoEdad !== "NULL";
}
function selectGeneroValido(){
const selectGenero = document.getElementById('id_genero');
const idGenero = selectGenero.value;
return idGenero !== "NULL";
}
// Función para validar el nombre
function validarNombre(nombre) {
const nombreRegex = /^[a-zA-ZÀ-ÿ\s]+$/; // Permite letras y espacios
@ -25,6 +120,8 @@ function validarCorreo(correo) {
return correoRegex.test(correo);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Validaciones
formulario.addEventListener("submit", async(event) => {
event.preventDefault();
@ -75,6 +172,19 @@ formulario.addEventListener("submit", async(event) => {
errores.push("El número telefónico debe ser un número de 10 dígitos. ");
}
if(!selectExamenValido()){
errores.push("Seleccione un examen. ");
}
if(!selectTipoIdentificacionValido()){
errores.push("Seleccione un tipo de identificación. ");
}
if(!selectRangoEdadValido()){
errores.push("Seleccione un rango de edad. ");
}
if(!selectGeneroValido()){
errores.push("Seleccione un género. ");
}
// Si hay errores, mostrarlos y detener el envío
if (errores.length > 0) {
notificacion.textContent = errores.join("\n");
@ -84,9 +194,8 @@ formulario.addEventListener("submit", async(event) => {
// Preparar datos para envío
const formData = new FormData();
//formData.append("id_candidato", idCandidato);
//formData.append("fecha_entrada", fechaEntrada);
//formData.append("fecha_salida", fechaSalida);
//formData.append("fecha_entrada", fechaEntrada); // No se usa porque tiene valor default
//formData.append("fecha_salida", fechaSalida); // Se llena al completar el otro formulario de información
formData.append("nombres", nombres);
formData.append("primer_apellido", primerApellido);
formData.append("segundo_apellido", segundoApellido);
@ -103,10 +212,10 @@ formulario.addEventListener("submit", async(event) => {
method: "POST",
body: formData,
});
// Obtener respuesta de petición de registro
const resultado = await respuesta.json();
// Verificar si el registro fue exitoso
if (resultado.registroExitoso) {
alert('Se guardó la información correctamente');

View File

@ -1,65 +1,353 @@
const formulario = document.getElementById("formulario-datos-extendido");
const notificacion = document.getElementById("mensaje-error");
document.addEventListener("DOMContentLoaded", function () {
const formulario = document.getElementById("formulario-datos-extendido");
const notificacion = document.getElementById("mensaje-error");
const buscarBtn = document.getElementById("buscarBtn");
const paisSelect = document.getElementById("id_pais");
const inputCodigoPostal = document.getElementById("codigo_postal");
const inputButtonBuscarCodigoPostal = document.getElementById("buscarBtn");
const estadoSelect = document.getElementById("id_estado");
const municipioSelect = document.getElementById("id_municipio");
const coloniaSelect = document.getElementById("id_colonia");
const giroSelect = document.getElementById("id_giro");
const nivelEstudioSelect = document.getElementById("id_nivel");
const selectCalificacionServicio = document.getElementById("calificacion_servicio");
const dataListEmpresasInstituciones = document.getElementById("sugerencias_ei");
formulario.addEventListener("submit", async(event) => {
event.preventDefault();
// Limpiar mensaje de error previo
notificacion.textContent = "";
notificacion.style.display = "none";
llenarSelectGiro();
llenarSelectNivelesEstudio();
llenarDataListEmpresasInstituciones();
// Obtener valores de los campos
const idCandidato = document.getElementById('id_candidato').value;
const idPais = document.getElementById('id_pais').value;
const codigoPostal = document.getElementById('codigo_postal').value; // campo numérico, no necesita trim
const idEstado = document.getElementById('id_estado').value;
const idMunicipio = document.getElementById('id_municipio').value;
const idColonia = document.getElementById('id_colonia').value;
const idNivel = document.getElementById('id_nivel').value;
const idGiro = document.getElementById('id_giro').value;
const nombreEmpresa = document.getElementById('nombre_empresa').value.trim();
const motivoExamen = document.getElementById('motivo_examen').value.trim();
const calificacionServicio = document.getElementById('calificacion_servicio').value;
const consentimientoPub = document.getElementById('consentimiento_pub').checked;
var id = 6;
// FUNCIONES - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function llenarSelectGiro() {
// URL para la solicitud
let url = "./controllers/CatalogosController.php?obtener=giros";
// Preparar datos para envío
const formData = new FormData();
formData.append("id_candidato", id);
formData.append("id_pais", idPais);
formData.append("codigo_postal", codigoPostal);
formData.append("id_estado", idEstado);
formData.append("id_municipio", idMunicipio);
formData.append("id_colonia", idColonia);
formData.append("id_nivel", idNivel);
formData.append("id_giro", idGiro);
// Realiza una solicitud HTTP GET a la URL especificada
fetch(url)
.then(response => {
// Verifica si la respuesta del servidor es exitosa
if (!response.ok) {
throw new Error("llenarSelectGiro(): Error en la respuesta del servidor.");
}
formData.append("nombre_empresa_institucion", nombreEmpresa);
formData.append("motivo_examen", motivoExamen);
// Convertir la respuesta a JSON
return response.json();
})
.then(data => {
// Verifica si se recibieron datos
if (data.length > 0) {
formData.append("calificacion_servicio", calificacionServicio);
formData.append("consentimiento_pub", consentimientoPub ? 1 : 0);
// Añade las opciones de giros al elemento select
data.forEach(row => {
giroSelect.innerHTML += "<option value='" + row.id_giro + "'>" + row.descripcion + "</option>";
});
} else {
alert("llenarSelectGiro(): No se encontraron datos para los giros.");
}
})
.catch(error => {
console.error("llenarSelectGiro(): Error en la solicitud. ", error);
});
}
try {
const respuesta = await fetch('controllers/registrarInfoCandidato.php', {
method: "POST",
body: formData,
});
const resultado = await respuesta.json();
if (resultado.registroExitoso) {
alert('Se guardó la información correctamente');
window.location.href = 'inicio.html';
function llenarSelectNivelesEstudio(){
let url = "./controllers/CatalogosController.php?obtener=nivelesestudio";
// Petición fetch y llenado de select
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error("llenarSelectNivelesEstudio(): Error en la respuesta del servidor.");
}
return response.json();
})
.then(data => {
if (data.length > 0) {
data.forEach(row => {
nivelEstudioSelect.innerHTML += "<option value='" + row.id_nivel + "'>" + row.descripcion + "</option>";
});
} else {
alert("llenarSelectNivelesEstudio(): No se encontraron datos para los giros.");
}
})
.catch(error => {
console.error("llenarSelectNivelesEstudio(): Error en la solicitud. ", error);
});
}
function llenarDataListEmpresasInstituciones(){
let url = "./controllers/CatalogosController.php?obtener=empresasinstituciones";
fetch(url)
.then(response => response.json())
.then(data => {
if (data.length > 0) {
data.forEach(row => {
dataListEmpresasInstituciones.innerHTML += "<option value='" + row.nombre_empresa_institucion + "'>" + row.nombre_empresa_institucion + "</option>";
});
} else {
alert("llenarDataListEmpresasInstituciones(): No se encontraron datos para las empresas o instituciones.");
}
})
.catch(error => {
console.error("llenarDataListEmpresasInstituciones(): Error en la solicitud. ", error);
});
}
// Función para obtener fecha en formato: 2025-04-27 09:05:18
function obtenerFechaActual() {
const ahora = new Date();
const anio = ahora.getFullYear();
const mes = String(ahora.getMonth() + 1).padStart(2, '0'); // Mes comienza en 0
const dia = String(ahora.getDate()).padStart(2, '0');
const horas = String(ahora.getHours()).padStart(2, '0');
const minutos = String(ahora.getMinutes()).padStart(2, '0');
const segundos = String(ahora.getSeconds()).padStart(2, '0');
return `${anio}-${mes}-${dia} ${horas}:${minutos}:${segundos}`;
}
function selectPaisValido(){
return paisSelect.value !== "NULL";
}
function selectNivelEstudioValido(){
return nivelEstudioSelect.value !== "NULL";
}
function selectGiroValido(){
return giroSelect.value !== "NULL";
}
function selectCalificacionServicioValido(){
return selectCalificacionServicio.value !== "NULL";
}
function selectEstadoValido(){
if(paisSelect.value === "1"){
return estadoSelect.value !== "NULL";
}
return true;
}
function selectMunicipioValido(){
if(paisSelect.value === "1"){
return municipioSelect.value !== "NULL";
}
return true;
}
function selectColoniaValido(){
if(paisSelect.value === "1"){
return coloniaSelect.value !== "NULL";
}
return true;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FUNCIONES
// EVENTOS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Añadir un evento de cambio al select de país
paisSelect.addEventListener("change", function() {
// Si el país es México, habilitar el campo de código postal
if (paisSelect.value === "1") {
inputCodigoPostal.removeAttribute("disabled");
inputButtonBuscarCodigoPostal.removeAttribute("disabled");
} else {
notificacion.textContent = resultado.mensaje;
// Si el país no es México, deshabilitar el campo de código postal
inputCodigoPostal.setAttribute("disabled", "disabled");
inputButtonBuscarCodigoPostal.setAttribute("disabled", "disabled");
}
});
//Añadir un evento al boton de buscar
buscarBtn.addEventListener("click", function () {
let inputCodigoPostal = document.getElementById("codigo_postal").value;
//verificar si el codigo postal esta vacio
if (inputCodigoPostal) {
// Limpia los selects antes de llenarlos
estadoSelect.innerHTML = "<option value='NULL'>Seleccione su estado</option>";
municipioSelect.innerHTML = "<option value='NULL'>Seleccione su municipio</option>";
coloniaSelect.innerHTML = "<option value='NULL'>Seleccione su colonia</option>";
// Construye la URL para la solicitud
let url = "./controllers/CatalogosController.php?codigo_postal=" + encodeURIComponent(inputCodigoPostal);
// Realiza una solicitud HTTP GET a la URL especificada
fetch(url)
.then(response => {
//console.log("Estado de la respuesta:", response.status);
//console.log("Contenido de la respuesta:", response.json());
// Verifica si la respuesta del servidor es exitosa
if (!response.ok) {
throw new Error("Error en la respuesta del servidor");
}
// Convertir la respuesta a JSON
return response.json();
})
.then(data => {
// Verifica si se recibieron datos
if (data.length > 0) {
// Quitar disable a los selects
estadoSelect.removeAttribute("disabled");
estadoSelect.setAttribute("required", "required");
municipioSelect.removeAttribute("disabled");
municipioSelect.setAttribute("required", "required");
coloniaSelect.removeAttribute("disabled");
coloniaSelect.setAttribute("required", "required");
//Crea conjuntos para almacenar estados, ciudades y colonias
let estados = new Map();
let municipios = new Map();
let colonias = new Map();
// Itera sobre cada fila de datos recibidos
data.forEach(row => {
//console.log(row);
estados.set(row['id_estado'], row['estado']);
municipios.set(row['id_municipio'], row['municipio']);
colonias.set(row['id_colonia'], row['colonia']);
});
// Añade las opciones de estados al elemento select
for (let [id_estado, estado] of estados) {
estadoSelect.innerHTML += "<option value='" + id_estado + "'>" + estado + "</option>";
}
// Añade las opciones de ciudades al elemento select
for (let [id_municipio, municipio] of municipios) {
municipioSelect.innerHTML += "<option value='" + id_municipio + "'>" + municipio + "</option>";
}
// Añade las opciones de colonias al elemento select
for (let [id_colonia, colonia] of colonias) {
coloniaSelect.innerHTML += "<option value='" + id_colonia + "'>" + colonia + "</option>";
}
} else {
alert("No se encontraron datos para el código postal ingresado.");
}
})
.catch(error => {
console.error("Error en la solicitud:", error);
});
} else {
alert("Por favor, ingrese un código postal.");
}
});
formulario.addEventListener("submit", async(event) => {
event.preventDefault();
// Limpiar mensaje de error previo
notificacion.textContent = "";
notificacion.style.display = "none";
// Obtener valores de los campos
const idCandidato = document.getElementById('id_candidato').value;
const idPais = document.getElementById('id_pais').value;
const codigoPostal = document.getElementById('codigo_postal').value;
const idEstado = document.getElementById('id_estado').value;
const idMunicipio = document.getElementById('id_municipio').value;
const idColonia = document.getElementById('id_colonia').value;
const idNivel = document.getElementById('id_nivel').value;
const idGiro = document.getElementById('id_giro').value;
const nombreEmpresa = document.getElementById('nombre_empresa').value.trim();
const motivoExamen = document.getElementById('motivo_examen').value.trim();
const calificacionServicio = document.getElementById('calificacion_servicio').value;
const consentimientoPub = document.getElementById('consentimiento_pub').checked;
const fechaSalida = obtenerFechaActual();
let validaciones = [];
if(!selectPaisValido()){
validaciones.push("Seleccione un país. ");
}
if(!selectNivelEstudioValido()){
validaciones.push("Seleccione un nivel de estudio.");
}
if(!selectGiroValido()){
validaciones.push("Seleccione un giro. ");
}
if(!selectCalificacionServicioValido()){
validaciones.push("Seleccione una calificación de servicio. ");
}
if(!selectEstadoValido()){
validaciones.push("Seleccione un estado. ");
}
if(!selectMunicipioValido()){
validaciones.push("Seleccione un municipio. ");
}
if(!selectColoniaValido()){
validaciones.push("Seleccione una colonia. ");
}
if(validaciones.length > 0){
alert("Campos requeridos sin llenar");
notificacion.textContent = validaciones.join("\n");
notificacion.style.display = "block";
return;
}
// Preparar datos para envío
const formData = new FormData();
formData.append("id_candidato", idCandidato);
formData.append("id_pais", idPais);
formData.append("codigo_postal", codigoPostal);
formData.append("id_estado", idEstado);
formData.append("id_municipio", idMunicipio);
formData.append("id_colonia", idColonia);
formData.append("id_nivel", idNivel);
formData.append("id_giro", idGiro);
formData.append("nombre_empresa_institucion", nombreEmpresa);
formData.append("motivo_examen", motivoExamen);
formData.append("calificacion_servicio", calificacionServicio);
if (consentimientoPub) {
formData.append("consentimiento_pub", 1);
} else {
formData.append("consentimiento_pub", 0);
}
formData.append("fecha_salida", fechaSalida);
// TEST
//alert("FORMULARIO ENVIADO");
// TEST: Pintar en consola datos del formData
// for (let [key, value] of formData.entries()) {
// console.log(key + ": ", value);
// }
try {
const respuesta = await fetch('controllers/registrarInfoCandidato.php', {
method: "POST",
body: formData,
});
const resultado = await respuesta.json();
if (resultado.estado === "exitoso") {
console.log(resultado.res);
alert('Se guardó la información correctamente');
//window.location.href = 'inicio.html';
} else if(resultado.estado === "error") {
console.error(resultado.res);
notificacion.textContent = resultado.mensaje;
notificacion.style.display = "block";
}
} catch (error) {
notificacion.textContent = "Lo sentimos, ocurrió un error: " + error.message;
notificacion.style.display = "block";
}
} catch (error) {
notificacion.textContent = "Lo sentimos, ocurrió un error: " + error.message;
notificacion.style.display = "block";
}
});
});
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EVENTOS
});

View File

@ -11,18 +11,21 @@ class CandidatoModel {
}
/**
* Insertar información de candidatos en la base de datos.
* @param int $id_candidato ID del candidato.
* @param int $id_pais ID del país.
* @param int $id_estado ID del estado.
* @param int $id_municipio ID del municipio.
* @param int $id_colonia ID de la colonia.
* @param int $id_nivel ID del nivel máxímo de estudios.
* @param int $id_giro ID del giro de la empresa.
* @param string $nombre_empresa_institucion Nombre de la empresa o institución de la que proviene el candidato.
* @param string $motivo_examen Motivo del examen.
* @param int $calificacion_servicio Calificación del servicio.
* @param int $consentimiento_pub Consentimiento para la publicación de datos.
* Registra la información de un candidato y su fecha de salida
*
* @param int $id_candidato ID del candidato
* @param int $id_pais ID del país
* @param int|null $id_estado ID del estado
* @param int|null $id_municipio ID del municipio
* @param int|null $id_colonia ID de la colonia
* @param int $id_nivel ID del nivel
* @param int $id_giro ID del giro
* @param string $nombre_empresa_institucion Nombre de la empresa o institución
* @param string $motivo_examen Motivo del examen
* @param int $calificacion_servicio Calificación del servicio
* @param int $consentimiento_pub Consentimiento de publicación
* @param string $fecha_salida Fecha de salida
* @return array Retorna un array asociativo con las claves "estado" y "mensaje"
*/
public function registrarInfoCandidatos(
$id_candidato,
@ -35,38 +38,126 @@ class CandidatoModel {
$nombre_empresa_institucion,
$motivo_examen,
$calificacion_servicio,
$consentimiento_pub
$consentimiento_pub,
$fecha_salida
) {
$sql = "INSERT INTO info_candidatos ( id_candidato, id_pais, id_estado, id_municipio, id_colonia, id_nivel, id_giro, nombre_empresa_institucion, motivo_examen, calificacion_servicio, consentimiento_pub ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $this->conn->prepare($sql);
if ($stmt === false) {
throw new Exception("Error en la preparación de la consulta: " . $this->conn->error);
}
$stmt->bind_param(
"iiiiiiissii",
$id_candidato,
$id_pais,
$id_estado,
$id_municipio,
$id_colonia,
$id_nivel,
$id_giro,
$nombre_empresa_institucion,
$motivo_examen,
$calificacion_servicio,
$consentimiento_pub
);
if (!$stmt->execute()) {
throw new Exception("Error al insertar datos de información del candidato: " . $stmt->error);
}
$insertId = $stmt->insert_id;
try {
$stmt->close();
// Si el país no es México (ID 1), se asignan valores nulos a los campos de ubicación
if ($id_pais !== 1) {
$id_estado = null;
$id_municipio = null;
$id_colonia = null;
}
return $insertId;
$sql = "INSERT INTO info_candidatos (
id_candidato, id_pais, id_estado, id_municipio, id_colonia,
id_nivel, id_giro, nombre_empresa_institucion, motivo_examen,
calificacion_servicio, consentimiento_pub
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $this->conn->prepare($sql);
if ($stmt === false) {
return [
"estado" => "error",
"mensaje" => "Error en la preparación de la consulta: " . $this->conn->error
];
}
$stmt->bind_param(
"iiiiiiissii",
$id_candidato,
$id_pais,
$id_estado,
$id_municipio,
$id_colonia,
$id_nivel,
$id_giro,
$nombre_empresa_institucion,
$motivo_examen,
$calificacion_servicio,
$consentimiento_pub
);
if (!$stmt->execute()) {
return [
"estado" => "error",
"mensaje" => "Error al insertar datos del candidato: " . $stmt->error
];
}
$stmt->close();
// Registrar fecha de salida
$resultadoFecha = $this->registrarFechaSalida($id_candidato, $fecha_salida);
if (isset($resultadoFecha["estado"]) && $resultadoFecha["estado"] === "error") {
return $resultadoFecha; // Propagar el error desde registrarFechaSalida
}
// Retornar éxito
return [
"estado" => "exitoso",
"mensaje" => $id_candidato
];
} catch (Exception $e) {
return [
"estado" => "error",
"mensaje" => "Error en el registro: " . $e->getMessage()
];
}
}
/**
* Registra la fecha de salida de un candidato
*
* @param int $id_candidato ID del candidato
* @param string $fecha_salida Fecha de salida
* @return array Retorna un array asociativo con las claves "estado" y "mensaje"
*/
private function registrarFechaSalida($id_candidato, $fecha_salida) {
try {
// Si no hay fecha de salida, retornar éxito sin hacer nada
if (empty($fecha_salida)) {
return [
"estado" => "exitoso",
"mensaje" => "No se registró fecha de salida"
];
}
// Consulta update
$sql = "UPDATE candidato SET fecha_salida = ? WHERE id_candidato = ?";
$stmt = $this->conn->prepare($sql);
if ($stmt === false) {
return [
"estado" => "error",
"mensaje" => "Error en la preparación de la consulta de fecha: " . $this->conn->error
];
}
$stmt->bind_param("si",$fecha_salida,$id_candidato);
if (!$stmt->execute()) {
return [
"estado" => "error",
"mensaje" => "Error al registrar fecha de salida: " . $stmt->error
];
}
$stmt->close();
return [
"estado" => "exitoso",
"mensaje" => "Fecha de salida registrada correctamente"
];
} catch (Exception $e) {
return [
"estado" => "error",
"mensaje" => "Error al registrar fecha de salida: " . $e->getMessage()
];
}
}
/**
@ -117,6 +208,73 @@ class CandidatoModel {
return $insertId;
}
/**
* Verificar si ya existe un registro de información del candidato en la base de datos.
* @param int $id_candidato ID del candidato.
* @return bool true si existe un registro, false en caso contrario.
*/
public function verificarRegistroInfoCandidato($id_candidato) {
$sql = "SELECT COUNT(*) as count FROM info_candidatos WHERE id_candidato = ?";
$stmt = $this->conn->prepare($sql);
if ($stmt === false) {
throw new Exception("Error en la preparación de la consulta: " . $this->conn->error);
}
$stmt->bind_param("i", $id_candidato);
if (!$stmt->execute()) {
throw new Exception("Error al ejecutar la consulta: " . $stmt->error);
}
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$stmt->close();
return $row['count'] > 0;
}
public function existeIdCandidato($id_candidato) {
try {
$sql = "SELECT COUNT(*) as count FROM candidato WHERE id_candidato = ?";
$stmt = $this->conn->prepare($sql);
if ($stmt === false) {
return [
"estado" => "error",
"mensaje" => "Error en la preparación de la consulta: " . $this->conn->error
];
}
$stmt->bind_param("i", $id_candidato);
if (!$stmt->execute()) {
return [
"estado" => "error",
"mensaje" => "Error al ejecutar la consulta: " . $stmt->error
];
}
$result = $stmt->get_result();
$stmt->close();
$row = $result->fetch_assoc();
if($row['count'] > 0){
return [
"estado" => "exitoso",
"mensaje" => "ID de candidato existe"
];
} else {
return [
"estado" => "error",
"mensaje" => "ID de candidato no existe"
];
}
} catch (Exception $e) {
return [
"estado" => "error",
"mensaje" => "Error al verificar ID de candidato: " . $e->getMessage()
];
}
}
public function obtenerCandidatoPorId($id_candidato) {
$sql = "SELECT * FROM candidato WHERE id_candidato = ?";
$stmt = $this->conn->prepare($sql);

View File

@ -9,98 +9,15 @@ class Catalogos{
$this->conn = Database::getInstance();
}
public function obtenerGeneros(){
$sql = "SELECT id_genero, descripcion FROM genero";
$result = $this->conn->query($sql);
$generos = [];
while($row = $result->fetch_assoc()){
$generos[] = $row;
}
return $generos;
}
public function obtenerRangosEdad(){
$sql = "SELECT id_rango_edad, descripcion FROM rango_edad";
$result = $this->conn->query($sql);
$rangos = [];
while($row = $result->fetch_assoc()){
$rangos[] = $row;
}
return $rangos;
}
public function obtenerTiposIdentificacion(){
$sql = "SELECT id_tipo_id, descripcion FROM tipo_identificacion ORDER BY descripcion";
$result = $this->conn->query($sql);
$tipos = [];
while($row = $result->fetch_assoc()){
$tipos[] = $row;
}
return $tipos;
}
public function obtenerNivelesEstudio(){
$sql = "SELECT id_nivel, descripcion FROM nivel_estudio";
$result = $this->conn->query($sql);
$niveles = [];
while($row = $result->fetch_assoc()){
$niveles[] = $row;
}
return $niveles;
}
public function obtenerGiros(){
$sql = "SELECT id_giro, descripcion FROM giro ORDER BY descripcion";
$result = $this->conn->query($sql);
$giros = [];
while($row = $result->fetch_assoc()){
$giros[] = $row;
}
return $giros;
}
public function obtenerExamenes(){
$sql = "SELECT id_examen, nombre_examen FROM examen ORDER BY nombre_examen";
$result = $this->conn->query($sql);
$examenes = [];
while($row = $result->fetch_assoc()){
$examenes[] = $row;
}
return $examenes;
}
public function obtenerPaises(){
$sql = "SELECT int as id, nombre FROM paises ORDER BY nombre";
$result = $this->conn->query($sql);
$paises = [];
while($row = $result->fetch_assoc()){
$paises[] = $row;
}
return $paises;
}
/**
* Obtiene el estado, municipio y colonia en base al código postal proporcionado.
* @param int $codigo_postal El código postal a buscar.
* @return array Un array con los datos de estado, municipio y colonia.
*/
public function obtenerInfiCodigoPostal($codigo_postal){
// Consulta SQL para obtener estado, ciudad y colonia en base al código postal
$sql = "SELECT e.nombre AS estado, m.nombre AS municipio, c.nombre AS colonia
$sql = "SELECT e.id AS id_estado, e.nombre AS estado, m.id AS id_municipio, m.nombre AS municipio, c.id AS id_colonia, c.nombre AS colonia
FROM colonias c
JOIN municipios m ON c.municipio = m.id
JOIN estados e ON m.estado = e.id
@ -114,18 +31,111 @@ class Catalogos{
// Obtener los resultados
$result = $stmt->get_result();
$stmt->close();
$data = [];
// Verificar si hay resultados
if ($result->num_rows > 0) {
$data = [];
while ($row = $result->fetch_assoc()) {
$data[] = $row; // Agregar cada resultado a un array
}
return json_encode($data); // Devolver los resultados en formato JSON
return $data;
} else {
return json_encode([]); // Si no hay resultados, devolver un array vacío
return $data;
}
$stmt->close();
}
/**
* Obtiene los giros.
* @return array
*/
public function obtenerGiros(){
$sql = "SELECT id_giro, descripcion FROM giro ORDER BY descripcion";
$result = $this->conn->query($sql);
$giros = [];
while($row = $result->fetch_assoc()){
$giros[] = $row;
}
return $giros;
}
/**
* Obtiene los nombres de los examenes disponibles.
* @return array Lista del nombre de la institución a la que pertenece el examen.
*/
public function obtenerNombresExamenes(){
$sql = "SELECT id_examen, nombre_examen FROM examen ORDER BY nombre_examen";
$result = $this->conn->query($sql);
$examenes = [];
while($row = $result->fetch_assoc()){
$examenes[] = $row;
}
return $examenes;
}
/**
* Obtener los tipos de identificación.
* @return array
*/
public function obtenerTiposIdentificacion(){
$sql = "SELECT id_tipo_id, descripcion FROM tipo_identificacion ORDER BY descripcion";
$result = $this->conn->query($sql);
$tipos = [];
while($row = $result->fetch_assoc()){
$tipos[] = $row;
}
return $tipos;
}
/**
* Obtiene los rangos de edad.
* @return array
*/
public function obtenerRangosEdad(){
$sql = "SELECT id_rango_edad, descripcion FROM rango_edad";
$result = $this->conn->query($sql);
$rangos = [];
while($row = $result->fetch_assoc()){
$rangos[] = $row;
}
return $rangos;
}
/**
* Obtiene los niveles de estudio.
* @return array
*/
public function obtenerNivelesEstudio(){
$sql = "SELECT id_nivel, descripcion FROM nivel_estudio";
$result = $this->conn->query($sql);
$niveles = [];
while($row = $result->fetch_assoc()){
$niveles[] = $row;
}
return $niveles;
}
public function obtenerNombresEmpresasInstituciones(){
$sql = "SELECT DISTINCT nombre_empresa_institucion FROM info_candidatos";
$result = $this->conn->query($sql);
$empresas = [];
while($row = $result->fetch_assoc()){
$empresas[] = $row;
}
return $empresas;
}
}

View File

@ -4,11 +4,4 @@
// UsuarioController::registrarUsuario("root", "root");
require_once __DIR__ . '/models/Catalogos.php';
$catalogoModel = new Catalogos();
$array = $catalogoModel->obtenerGeneros();
// Pintar arraycompleto en bruto de la variable $arrayInfoCodigoPostal
print_r($array);
?>