Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
Seleccion
/
controllers
:
CandidatoController.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php // controllers/CandidatoController.php require_once __DIR__ . '/../models/candidatoModel.php'; require_once __DIR__ . '/../models/entrevistaModel.php'; require_once __DIR__ . '/../models/examenModel.php'; require_once __DIR__ . '/../config/Database.php'; class CandidatoController { private $db; private $candidato; private $entrevista; private $examen; public function __construct() { $database = new Database(); $this->db = $database->connect(); $this->candidato = new Candidato($this->db); $this->entrevista = new Entrevista($this->db); $this->examen = new Examen($this->db); } // ✅ NUEVO: Buscar candidatos por múltiples cédulas public function buscarPorCedulas() { if($_SERVER['REQUEST_METHOD'] == 'POST') { // Obtener el JSON del body $json = file_get_contents('php://input'); $datos = json_decode($json, true); if(!isset($datos['cedulas']) || !is_array($datos['cedulas'])) { echo json_encode([ 'success' => false, 'message' => 'Formato de datos inválido' ]); return; } $cedulas = array_slice($datos['cedulas'], 0, 10); // Limitar a 10 if(count($cedulas) === 0) { echo json_encode([ 'success' => false, 'message' => 'No se proporcionaron cédulas para buscar' ]); return; } // Buscar historial de cada cédula $resultados = []; foreach($cedulas as $cedula) { $historial = $this->candidato->obtenerHistorialPorCedula($cedula); $resultados[$cedula] = $historial; } echo json_encode([ 'success' => true, 'data' => $resultados, 'total_cedulas' => count($cedulas) ]); } } // FASE 1: Crear candidato public function crearFase1() { if($_SERVER['REQUEST_METHOD'] == 'POST') { $datos = [ 'requisicion_id' => $_POST['requisicion_id'], 'cedula' => $_POST['cedula'], 'nombres_apellidos' => $_POST['nombres_apellidos'], 'antecedentes' => $_POST['antecedentes'] ?? 'Pendiente', 'celular' => $_POST['celular'] ]; $id = $this->candidato->crear($datos); if($id) { $veces = $this->candidato->obtenerVecesProceso($datos['cedula']); echo json_encode([ 'success' => true, 'message' => 'Candidato registrado en Fase 1', 'id' => $id, 'alerta' => $veces > 1 ? "ALERTA: Este candidato ha estado en proceso $veces veces" : null, 'veces_proceso' => $veces ]); } else { echo json_encode(['success' => false, 'message' => 'Error al registrar candidato']); } } } // FASE 2: Registrar entrevista public function crearFase2() { if($_SERVER['REQUEST_METHOD'] == 'POST') { $candidato_id = $_POST['candidato_id']; $datos = [ 'candidato_id' => $candidato_id, 'referidor_nombre' => $_POST['referidor_nombre'] ?? null, 'referidor_cedula' => $_POST['referidor_cedula'] ?? null, 'referidor_area' => $_POST['referidor_area'] ?? null, 'centro_costos' => $_POST['centro_costos'] ?? null, 'area' => $_POST['area'] ?? null, 'cargo' => $_POST['cargo'] ?? null, 'ciudad_vacante' => $_POST['ciudad_vacante'] ?? null, 'entidad_reclutadora' => $_POST['entidad_reclutadora'] ?? null, 'fecha_entrevista' => $_POST['fecha_entrevista'] ?? null, 'supervisor_entrevista' => $_POST['supervisor_entrevista'] ?? null, 'concepto_entrevista' => $_POST['concepto_entrevista'] ?? null, 'resultado_entrevista' => $_POST['resultado_entrevista'] ?? 'Pendiente' ]; $id = $this->entrevista->crear($datos); if($id) { // Actualizar fase del candidato $this->candidato->actualizarFase($candidato_id, 'fase2'); echo json_encode([ 'success' => true, 'message' => 'Entrevista registrada - Fase 2 completada', 'id' => $id ]); } else { echo json_encode(['success' => false, 'message' => 'Error al registrar entrevista']); } } } // FASE 3: Registrar exámenes public function crearFase3() { if($_SERVER['REQUEST_METHOD'] == 'POST') { $candidato_id = $_POST['candidato_id']; $datos = [ 'candidato_id' => $candidato_id, 'examenes_medicos' => $_POST['examenes_medicos'] ?? 'Pendiente', 'poligrafo' => $_POST['poligrafo'] ?? 'Pendiente', 'contratado' => $_POST['contratado'] ?? 'No', 'fecha_contratacion' => !empty($_POST['fecha_contratacion']) ? $_POST['fecha_contratacion'] : date('Y-m-d'), 'observaciones' => $_POST['observaciones'] ?? null, 'motivo_rechazo_examen' => $_POST['observacion_rechazada'] ?? null ]; $id = $this->examen->crear($datos); if($id) { // Actualizar fase y estado del candidato $this->candidato->actualizarFase($candidato_id, 'fase3'); if($datos['contratado'] == 'Si') { $this->candidato->actualizarEstado($candidato_id, 'Contratado'); $this->candidato->actualizarFase($candidato_id, 'contratado'); } echo json_encode([ 'success' => true, 'message' => 'Exámenes registrados - Fase 3 completada', 'id' => $id ]); } else { echo json_encode(['success' => false, 'message' => 'Error al registrar exámenes']); } } } // Listar candidatos por fase public function listarPorFase() { $fase = $_GET['fase'] ?? 'fase1'; $candidatos = $this->candidato->obtenerTodosPorFase($fase); echo json_encode(['success' => true, 'data' => $candidatos]); } // Obtener detalle completo de candidato public function obtenerCompleto($id) { $candidato = $this->candidato->obtenerCompleto($id); $entrevista = $this->entrevista->obtenerPorCandidato($id); $examen = $this->examen->obtenerPorCandidato($id); echo json_encode([ 'success' => true, 'data' => [ 'candidato' => $candidato, 'entrevista' => $entrevista, 'examen' => $examen ] ]); } // Obtener alertas de un candidato public function obtenerAlertas() { $cedula = $_GET['cedula']; $alertas = $this->candidato->obtenerAlertas($cedula); echo json_encode([ 'success' => true, 'data' => $alertas, 'total' => count($alertas) ]); } // Actualizar fase 2 public function actualizarFase2() { if($_SERVER['REQUEST_METHOD'] == 'POST') { $id = $_POST['id']; $datos = [ 'referidor_nombre' => $_POST['referidor_nombre'], 'referidor_cedula' => $_POST['referidor_cedula'], 'referidor_area' => $_POST['referidor_area'], 'centro_costos' => $_POST['centro_costos'], 'area' => $_POST['area'], 'cargo' => $_POST['cargo'], 'ciudad_vacante' => $_POST['ciudad_vacante'], 'entidad_reclutadora' => $_POST['entidad_reclutadora'], 'fecha_entrevista' => $_POST['fecha_entrevista'], 'supervisor_entrevista' => $_POST['supervisor_entrevista'], 'concepto_entrevista' => $_POST['concepto_entrevista'], 'resultado_entrevista' => $_POST['resultado_entrevista'] ]; $resultado = $this->entrevista->actualizar($id, $datos); echo json_encode(['success' => $resultado]); } } // Vista de detalle completo del candidato por fases public function detalleCandidato() { $id = $_GET['id'] ?? null; if (!$id) { header('Location: index.php?controller=candidato&action=gestion'); exit; } // Obtener datos de las 3 fuentes $candidatoRaw = $this->candidato->obtenerCompleto($id); // Si la vista no devuelve los campos de requisicion, buscar por ID directo if (empty($candidatoRaw)) { $stmt = $this->db->prepare( "SELECT c.*, r.codigo as requisicion_codigo, r.nombre_cargo, r.area FROM candidatos c LEFT JOIN requisiciones r ON c.requisicion_id = r.id WHERE c.id = :id" ); $stmt->bindValue(':id', $id); $stmt->execute(); $candidatoRaw = $stmt->fetch(); } $candidato = $candidatoRaw; $entrevista = $this->entrevista->obtenerPorCandidato($id); $examen = $this->examen->obtenerPorCandidato($id); require_once 'views/candidato/detalleCandidato.php'; } // Actualizar fase 3 public function actualizarFase3() { if($_SERVER['REQUEST_METHOD'] == 'POST') { $id = $_POST['id']; $candidato_id = $_POST['candidato_id']; $datos = [ 'examenes_medicos' => $_POST['examenes_medicos'], 'poligrafo' => $_POST['poligrafo'], 'contratado' => $_POST['contratado'], 'fecha_contratacion' => !empty($_POST['fecha_contratacion']) ? $_POST['fecha_contratacion'] : date('Y-m-d'), 'observaciones' => $_POST['observaciones'], 'motivo_rechazo_examen' => $_POST['observacion_rechazada'] ?? null ]; $resultado = $this->examen->actualizar($id, $datos); if($resultado && $datos['contratado'] == 'Si') { $this->candidato->actualizarEstado($candidato_id, 'Contratado'); $this->candidato->actualizarFase($candidato_id, 'contratado'); } echo json_encode(['success' => $resultado]); } } } ?>