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