Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
Actas_Usuarios
/
models
:
CapacitacionModel.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?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; } }