<?php // models/Requisicion.php class Requisicion { private $conn; private $table = 'requisiciones'; public function __construct($db) { $this->conn = $db; } public function crear($datos) { $query = "INSERT INTO " . $this->table . " (fecha_solicitud, empresa, regional, area, ciudad_ubicacion, centro_costo, nombre_cargo, adjunto_descripcion, numero_vacantes, tipo_contrato, salario_fijo, proporcion_flexible, salario_variable, tiene_comisiones, tiene_rodamiento, rango_rodamiento, tabla_comisiones, requiere_vehiculo, flexibilidad_ubicacion, clausula_transversalidad, observaciones_perfil, otras_condiciones, justificacion_requisicion, tipo_busqueda, firma_jefe, firma_aprobacion, usuario_solicita_id, email_solicita, reemplazo) VALUES (:fecha_solicitud, :empresa, :regional, :area, :ciudad_ubicacion, :centro_costo, :nombre_cargo, :adjunto_descripcion, :numero_vacantes, :tipo_contrato, :salario_fijo, :proporcion_flexible, :salario_variable, :tiene_comisiones, :tiene_rodamiento, :rango_rodamiento, :tabla_comisiones, :requiere_vehiculo, :flexibilidad_ubicacion, :clausula_transversalidad, :observaciones_perfil, :otras_condiciones, :justificacion_requisicion, :tipo_busqueda, :firma_jefe, :firma_aprobacion, :usuario_solicita_id, :email_solicita, :reemplazo)"; $stmt = $this->conn->prepare($query); foreach($datos as $key => $value) { $stmt->bindValue(':' . $key, $value); } if($stmt->execute()) { return $this->conn->lastInsertId(); } return false; } public function obtenerTodas($filtros = []) { $query = "SELECT * FROM " . $this->table . " WHERE 1=1"; if(!empty($filtros['estado'])) { $query .= " AND estado = :estado"; } $query .= " ORDER BY fecha_creacion DESC"; $stmt = $this->conn->prepare($query); if(!empty($filtros['estado'])) { $stmt->bindValue(':estado', $filtros['estado']); } $stmt->execute(); return $stmt->fetchAll(); } public function obtenerPorId($id) { $query = "SELECT * FROM " . $this->table . " WHERE id = :id"; $stmt = $this->conn->prepare($query); $stmt->bindValue(':id', $id); $stmt->execute(); return $stmt->fetch(); } // ✅ Obtener todas las áreas para el select public function obtenerAreas() { $query = "SELECT DISTINCT area FROM areas ORDER BY area ASC"; $stmt = $this->conn->prepare($query); $stmt->execute(); return $stmt; } // ✅ Obtener todos los cargos para el select public function obtenerCargos() { $query = "SELECT DISTINCT cargo FROM cargo ORDER BY cargo ASC"; $stmt = $this->conn->prepare($query); $stmt->execute(); return $stmt; } public function obtenerPorCodigo($codigo) { $query = "SELECT * FROM " . $this->table . " WHERE codigo = :codigo"; $stmt = $this->conn->prepare($query); $stmt->bindValue(':codigo', $codigo); $stmt->execute(); return $stmt->fetch(); } // ✅ ACTUALIZADO: Incluir observacion_anulacion public function actualizarEstado($id, $estado, $fecha_notificacion = null, $observacion_anulacion = null) { $query = "UPDATE " . $this->table . " SET estado = :estado"; if($fecha_notificacion) { $query .= ", fecha_notificacion = :fecha_notificacion"; } // ✅ NUEVO: Agregar observacion_anulacion si el estado es "Anulada" if($estado === 'Anulada' && $observacion_anulacion) { $query .= ", observacion_anulacion = :observacion_anulacion"; } $query .= " WHERE id = :id"; $stmt = $this->conn->prepare($query); $stmt->bindValue(':estado', $estado); $stmt->bindValue(':id', $id); if($fecha_notificacion) { $stmt->bindValue(':fecha_notificacion', $fecha_notificacion); } if($estado === 'Anulada' && $observacion_anulacion) { $stmt->bindValue(':observacion_anulacion', $observacion_anulacion); } return $stmt->execute(); } public function eliminar($id) { $query = "DELETE FROM " . $this->table . " WHERE id = :id"; $stmt = $this->conn->prepare($query); $stmt->bindValue(':id', $id); return $stmt->execute(); } public function contarPorEstado() { $query = "SELECT estado, COUNT(*) as total FROM " . $this->table . " GROUP BY estado"; $stmt = $this->conn->prepare($query); $stmt->execute(); return $stmt->fetchAll(); } } ?>