<?php // File: Modelos/CapacitacionModel.php require_once 'Database.php'; class CapacitacionModel { private $db; public function __construct() { $this->db = Database::getInstance()->getConnection(); } /** * Inserta una nueva capacitación. */ public function crearCapacitacion($codigo, $tema, $empresaId) { if (empty($codigo) || empty($tema) || empty($empresaId)) { return ['success' => false, 'message' => "El código, el tema y la empresa son campos obligatorios."]; } $sql = "INSERT INTO capacitaciones (CODIGO, CAPACITACION, empresa_id) VALUES (:codigo, :tema, :empresa_id)"; try { $stmt = $this->db->prepare($sql); $stmt->bindParam(':codigo', $codigo, PDO::PARAM_STR); $stmt->bindParam(':tema', $tema, PDO::PARAM_STR); $stmt->bindParam(':empresa_id', $empresaId, PDO::PARAM_INT); if ($stmt->execute()) { return ['success' => true, 'message' => "Capacitación '$tema' registrada con éxito."]; } $errorInfo = $stmt->errorInfo(); if ($errorInfo[1] == 1062) { return ['success' => false, 'message' => "Error: Ya existe una capacitación con el código '$codigo'."]; } return ['success' => false, 'message' => "Error al registrar: " . $errorInfo[2]]; } catch (PDOException $e) { if ($e->getCode() == '23000' && strpos($e->getMessage(), '1452') !== false) { return ['success' => false, 'message' => "Error: El ID de Empresa seleccionado no existe."]; } return ['success' => false, 'message' => "Error de base de datos: " . $e->getMessage()]; } } /** * Actualiza una capacitación existente identificada por su código original. */ public function actualizarCapacitacion($codigoOriginal, $nuevoCodigo, $tema, $empresaId) { if (empty($codigoOriginal) || empty($nuevoCodigo) || empty($tema) || empty($empresaId)) { return ['success' => false, 'message' => "Todos los campos son obligatorios para actualizar."]; } $sql = "UPDATE capacitaciones SET CODIGO = :nuevo_codigo, CAPACITACION = :tema, empresa_id = :empresa_id WHERE CODIGO = :codigo_original"; try { $stmt = $this->db->prepare($sql); $stmt->bindParam(':nuevo_codigo', $nuevoCodigo, PDO::PARAM_STR); $stmt->bindParam(':tema', $tema, PDO::PARAM_STR); $stmt->bindParam(':empresa_id', $empresaId, PDO::PARAM_INT); $stmt->bindParam(':codigo_original', $codigoOriginal, PDO::PARAM_STR); if ($stmt->execute()) { if ($stmt->rowCount() > 0) { return ['success' => true, 'message' => "Capacitación '$nuevoCodigo' actualizada con éxito."]; } return ['success' => false, 'message' => "No se encontró la capacitación con código '$codigoOriginal'."]; } $errorInfo = $stmt->errorInfo(); if ($errorInfo[1] == 1062) { return ['success' => false, 'message' => "Error: Ya existe una capacitación con el código '$nuevoCodigo'."]; } return ['success' => false, 'message' => "Error al actualizar: " . $errorInfo[2]]; } catch (PDOException $e) { if ($e->getCode() == '23000' && strpos($e->getMessage(), '1452') !== false) { return ['success' => false, 'message' => "Error: El ID de Empresa seleccionado no existe."]; } return ['success' => false, 'message' => "Error de base de datos: " . $e->getMessage()]; } } /** * Elimina una capacitación por su código. */ public function eliminarCapacitacion($codigo) { if (empty($codigo)) { return ['success' => false, 'message' => "El código es obligatorio para eliminar."]; } $sql = "DELETE FROM capacitaciones WHERE CODIGO = :codigo"; try { $stmt = $this->db->prepare($sql); $stmt->bindParam(':codigo', $codigo, PDO::PARAM_STR); if ($stmt->execute()) { if ($stmt->rowCount() > 0) { return ['success' => true, 'message' => "Capacitación '$codigo' eliminada con éxito."]; } return ['success' => false, 'message' => "No se encontró la capacitación con código '$codigo'."]; } return ['success' => false, 'message' => "Error al eliminar la capacitación."]; } catch (PDOException $e) { // Error de FK: la capacitación tiene registros dependientes if ($e->getCode() == '23000') { return ['success' => false, 'message' => "No se puede eliminar: la capacitación tiene registros asociados."]; } return ['success' => false, 'message' => "Error de base de datos: " . $e->getMessage()]; } } /** * Obtiene una capacitación por su código (para el modo edición). */ public function getCapacitacionPorCodigo($codigo) { $sql = "SELECT c.CODIGO, c.CAPACITACION, c.empresa_id, e.nombre_empresa FROM capacitaciones c JOIN empresa e ON c.empresa_id = e.id WHERE c.CODIGO = :codigo LIMIT 1"; try { $stmt = $this->db->prepare($sql); $stmt->bindParam(':codigo', $codigo, PDO::PARAM_STR); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC); } catch (PDOException $e) { error_log("CapacitacionModel ERROR getCapacitacionPorCodigo: " . $e->getMessage()); return null; } } /** * Obtiene todas las capacitaciones (para la tabla de listado). */ public function getCapacitaciones() { $sql = "SELECT c.CODIGO, c.CAPACITACION, c.empresa_id, e.nombre_empresa FROM capacitaciones c JOIN empresa e ON c.empresa_id = e.id ORDER BY c.CAPACITACION ASC"; try { $stmt = $this->db->query($sql); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { error_log("CapacitacionModel ERROR getCapacitaciones: " . $e->getMessage()); return []; } } } ?>