File "CapacitacionModel.php"

Full Path: C:/wamp64/www/Actas_Usuarios/models/CapacitacionModel.php
File size: 5.27 KB
MIME-type: text/x-php
Charset: utf-8

<?php
// models/CapacitacionModel.php

require_once __DIR__ . '/../config/db.php';

class CapacitacionModel
{
    private $db;
    private $dbEmpleados;

    public function __construct()
    {
        $database          = new Database();
        $this->db          = $database->connect();

        $dbEmp             = new DatabaseEmpleados();
        $this->dbEmpleados = $dbEmp->connect();
    }

    // ── Busca nombre completo por cédula en BD empleados ─────────────
    public function buscarEmpleadoPorCedula($cedula)
    {
        $stmt = $this->dbEmpleados->prepare(
            "SELECT CONCAT(nombre, ' ', apellido) AS nombre_completo, cargo
             FROM empleados WHERE cedula = ? LIMIT 1"
        );
        if (!$stmt) return null;
        $stmt->bind_param('s', $cedula);
        $stmt->execute();
        $row = $stmt->get_result()->fetch_assoc();
        $stmt->close();
        return $row ?: null;
    }

    // ── Lista paginada ───────────────────────────────────────────────
    public function listarPaginadas($busqueda = '', $limit = 10, $offset = 0)
    {
        $sql = "SELECT id, nombre_capacitacion, cedula_usuario, nombre_usuario,
                       capacitador, fecha_capacitacion,
                       evidencia_nombre, evidencia_tamano, created_at
                FROM capacitaciones
                WHERE 1=1";

        if (!empty($busqueda)) {
            $sql .= " AND (nombre_capacitacion LIKE ? OR cedula_usuario LIKE ?
                          OR nombre_usuario LIKE ? OR capacitador LIKE ?)";
        }
        $sql .= " ORDER BY created_at DESC LIMIT ? OFFSET ?";

        $stmt = $this->db->prepare($sql);
        if (!empty($busqueda)) {
            $p = "%$busqueda%";
            $stmt->bind_param('ssssii', $p, $p, $p, $p, $limit, $offset);
        } else {
            $stmt->bind_param('ii', $limit, $offset);
        }
        $stmt->execute();
        $result = $stmt->get_result();
        $rows = [];
        while ($row = $result->fetch_assoc()) $rows[] = $row;
        $stmt->close();
        return $rows;
    }

    // ── Cuenta total para paginación ─────────────────────────────────
    public function contarTodas($busqueda = '')
    {
        $sql = "SELECT COUNT(*) AS total FROM capacitaciones WHERE 1=1";
        if (!empty($busqueda)) {
            $sql .= " AND (nombre_capacitacion LIKE ? OR cedula_usuario LIKE ?
                          OR nombre_usuario LIKE ? OR capacitador LIKE ?)";
            $stmt = $this->db->prepare($sql);
            $p = "%$busqueda%";
            $stmt->bind_param('ssss', $p, $p, $p, $p);
        } else {
            $stmt = $this->db->prepare($sql);
        }
        $stmt->execute();
        $total = (int) $stmt->get_result()->fetch_assoc()['total'];
        $stmt->close();
        return $total;
    }

    // ── Guarda nueva capacitación ────────────────────────────────────
    public function crear($nombre, $cedula, $nombre_usuario, $capacitador, $fecha, $archivo_datos)
    {
        $stmt = $this->db->prepare(
            "INSERT INTO capacitaciones
                (nombre_capacitacion, cedula_usuario, nombre_usuario, capacitador,
                 fecha_capacitacion, evidencia, evidencia_nombre, evidencia_tipo,
                 evidencia_tamano, created_at)
             VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())"
        );
        if (!$stmt) throw new RuntimeException("Prepare error: " . $this->db->error);

        if ($archivo_datos) {
            $blob = $archivo_datos['contenido'];
            $nom  = $archivo_datos['nombre'];
            $tipo = $archivo_datos['tipo'];
            $tam  = (int) $archivo_datos['tamano'];
        } else {
            $blob = $nom = $tipo = null;
            $tam  = 0;
        }

        $stmt->bind_param('sssssbssi',
            $nombre, $cedula, $nombre_usuario, $capacitador, $fecha,
            $blob, $nom, $tipo, $tam
        );

        if ($blob) $stmt->send_long_data(5, $blob);

        $ok = $stmt->execute();
        $stmt->close();
        return $ok;
    }

    // ── Obtiene archivo (BLOB) para ver/descargar ────────────────────
    public function obtenerArchivo($id)
    {
        $stmt = $this->db->prepare(
            "SELECT evidencia, evidencia_nombre, evidencia_tipo, evidencia_tamano
             FROM capacitaciones WHERE id = ? LIMIT 1"
        );
        $stmt->bind_param('i', $id);
        $stmt->execute();
        $row = $stmt->get_result()->fetch_assoc();
        $stmt->close();
        return $row ?: null;
    }

    // ── Elimina por ID ───────────────────────────────────────────────
    public function eliminar($id)
    {
        $stmt = $this->db->prepare("DELETE FROM capacitaciones WHERE id = ?");
        $stmt->bind_param('i', $id);
        $ok = $stmt->execute();
        $stmt->close();
        return $ok;
    }
}