File "requisicionModel.php"

Full Path: C:/wamp64/www/Seleccion/models/requisicionModel.php
File size: 5.03 KB
MIME-type: text/x-php
Charset: utf-8

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