File "CandidatoController.php"
Full Path: C:/wamp64/www/Seleccion/controllers/CandidatoController.php
File size: 10.69 KB
MIME-type: text/x-php
Charset: utf-8
<?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]);
}
}
}
?>