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