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);
    }
}