File "AsistenciaController.php"
Full Path: C:/wamp64/www/Asistencia_Capacitacion/Controladores/AsistenciaController.php
File size: 6.08 KB
MIME-type: text/x-php
Charset: utf-8
<?php
// File: Controladores/AsistenciaController.php
require_once 'Controladores/BaseController.php';
require_once 'Modelos/AsistenciaModel.php';
class AsistenciaController extends BaseController {
private $asistenciaModel;
private $empresaNombre;
public function __construct() {
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
// Verificar sesión activa
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {
// Si es una petición AJAX, responder con JSON en lugar de redirigir
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
header('Content-Type: application/json');
echo json_encode(['success' => false, 'message' => 'Sesión expirada. Por favor recargue la página.']);
exit;
}
header('Location: index.php?url=login/index');
exit;
}
$this->asistenciaModel = new AsistenciaModel();
// Obtener empresa de la sesión y limpiar valor
$this->empresaNombre = isset($_SESSION['empresa']) ? trim($_SESSION['empresa']) : null;
// Si no tiene empresa asignada, responder apropiadamente
if (empty($this->empresaNombre)) {
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
header('Content-Type: application/json');
echo json_encode(['success' => false, 'message' => 'Error: El usuario no tiene empresa asignada en la sesión.']);
exit;
}
die("Error: El usuario logueado no tiene una empresa asignada en la sesión.");
}
}
// -----------------------------------------------------------------
// MÉTODO 1: Mostrar el formulario de ENTRADA (GET)
// URL: index.php?url=asistencia/registro
// -----------------------------------------------------------------
public function registro() {
$capacitaciones = $this->asistenciaModel->getCapacitaciones($this->empresaNombre);
$capacitacion_seleccionada = $_SESSION['capacitacion_seleccionada'] ?? null;
if (empty($capacitacion_seleccionada) && !empty($capacitaciones)) {
$capacitacion_seleccionada = $capacitaciones[0]['CODIGO'] ?? 'No Disponible';
}
$data = [
'capacitaciones' => $capacitaciones,
'capacitacion_seleccionada'=> $capacitacion_seleccionada,
'columnaCapacitacion' => 'CODIGO'
];
$this->view('asistencia/entrada', $data);
}
// -----------------------------------------------------------------
// MÉTODO 2: Procesar el registro de ENTRADA (POST/AJAX)
// URL: index.php?url=asistencia/registrar
// -----------------------------------------------------------------
public function registrar() {
header('Content-Type: application/json');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['success' => false, 'message' => 'Método no permitido.']);
return;
}
// Limpiar valor del escáner (puede traer \r\n al final)
$codigo = isset($_POST['codBar']) ? trim(str_replace(["\r", "\n"], '', $_POST['codBar'])) : null;
$capacitacion = isset($_POST['capacitacion']) ? trim($_POST['capacitacion']) : null;
if (empty($codigo) || empty($capacitacion)) {
echo json_encode(['success' => false, 'message' => 'Faltan datos requeridos (código o capacitación).']);
return;
}
$response = $this->asistenciaModel->registrarEntrada($codigo, $capacitacion, $this->empresaNombre);
echo json_encode($response);
}
// -----------------------------------------------------------------
// MÉTODO 3: Mostrar el formulario de SALIDA (GET)
// URL: index.php?url=asistencia/salida
// -----------------------------------------------------------------
public function salida() {
$capacitaciones = $this->asistenciaModel->getCapacitaciones($this->empresaNombre);
$capacitacion_seleccionada = $_SESSION['capacitacion_seleccionada'] ?? null;
if (empty($capacitacion_seleccionada) && !empty($capacitaciones)) {
$capacitacion_seleccionada = $capacitaciones[0]['CODIGO'] ?? 'No Disponible';
}
$data = [
'capacitaciones' => $capacitaciones,
'capacitacion_seleccionada'=> $capacitacion_seleccionada,
'columnaCapacitacion' => 'CODIGO'
];
$this->view('asistencia/salida', $data);
}
// -----------------------------------------------------------------
// MÉTODO 4: Procesar el registro de SALIDA (POST/AJAX)
// URL: index.php?url=asistencia/procesarsalida <-- todo minúsculas por el router
// -----------------------------------------------------------------
public function procesarsalida() {
header('Content-Type: application/json');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['success' => false, 'message' => 'Método no permitido.']);
return;
}
// Limpiar valor del escáner (puede traer \r\n al final)
$codigo = isset($_POST['codBar']) ? trim(str_replace(["\r", "\n"], '', $_POST['codBar'])) : null;
$capacitacion = isset($_POST['capacitacion']) ? trim($_POST['capacitacion']) : null;
if (empty($codigo) || empty($capacitacion)) {
echo json_encode(['success' => false, 'message' => 'Faltan datos requeridos.']);
return;
}
$response = $this->asistenciaModel->registrarSalida($codigo, $capacitacion, $this->empresaNombre);
echo json_encode($response);
}
}