<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class PermisosModels extends CI_Model
{
    public function __construct()
    {
       
      
        parent::__construct();
        $this->load->model('ConfigModels');
        $this->Sucursales = $this->ConfigModels->Value("Sucursales");
        $this->Almacen = $this->ConfigModels->Value('Almacen');
        $this->Ventas = $this->ConfigModels->Value('Ventas');
        $this->Extintores = $this->ConfigModels->Value('Extintores');
        $this->Balsas = $this->ConfigModels->Value('Balsas');
        $this->Manguera = $this->ConfigModels->Value('Manguera');
        $this->TrajeDeInmercion = $this->ConfigModels->Value('TrajeDeInmercion');
        $this->BANCOCO2 = $this->ConfigModels->Value('BANCOCO2');
        $this->BANCOEX = $this->ConfigModels->Value('BANCOEX');
        $this->CilindroDeAire = $this->ConfigModels->Value('CilindroDeAire');
        $this->firma = $this->ConfigModels->Value('firma');
        $this->UseToken = $this->ConfigModels->Value('UseToken');
  
    }


    private $Tabla = "detalleniveles";
    private $Delimitador= "|";
    private $Separador = "^";
    private $CamposInternos = ['Status'=>'Status', 'ID'=>'ID'];
     private $Array1 = [''=>'','User'=>'Usuarios',
     'Client'=>'Clientes',
     'Store'=>'Tienda',
     'Provider'=>'Proveedores',
     'AnularVenta'=>'Anular Venta',
     'Product'=>'Producto',
     'Classification'=>("Clasificación"),
     'Assignment'=>('Asignación'),
     'ReportAssignment'=>('Reporte De Asignación'),
     'ReportNoAssig'=>('Reporte de productos Asignación'),
     'ReporWarehouse'=>('Reporte de Almacén'),
     'Warehouse'=>('Almacén'),
     'ReporWareDetalle'=>('Reporte detalle Almacén'),
     'Ship'=>'Embarcacion',
     'Raft'=>'Balsa',
     'Valve'=>('Válvula'),
     'Cylinder'=>'Cilindro',
     'Order'=>'Orden',
     'Report'=>'Reportes',
     'ReporShip'=>'Reporte Embarcacion',
     'DetalleOrden'=>'Dellate de Orden',
     'ReporDetalleOrden'=>'Reporte detalle de Orden ',
     'Minutes'=>'Acta',
     'Proof'=>'Pruevas',
     'Extinguisher'=>'Extintor',
     'AirCylinder'=>'Cilindro De Aire',
     'Permisos'=>'Permisos',
     'Ventas'=>'Ventas',
     'ReporCertificadoBalsas'=>'Reporte Certificado Balsa',
     'Firma'=>'Firma',
     'OrderSuppliers'=>'Pedidos',
     'CertificadoBalsa'=>'Certificado Balsas',
     'CertificadoApertura'=>'Certificado Acta de Apertura',
     'CertificadoInsumos'=>'Certificado Acta de insumos',
     'CertificadoExtintores'=>'Certificado Extintores',
     'CertificadoTraje'=>('Certificado Traje de inmersión'),
     'OrdenExtintor'=>('Orden De Trabajo Extintor'),
     'HydraulicHose'=>'HydraulicHose',
     'CertificadoCilindroAire'=>'Certificado Cilindro de Aire', 'Inspetor'=>'Inspetor'];
     private $ArrayExtintores = ['Extinguisher'=>'Extintor',
     'CertificadoExtintores'=>'Certificado Extintores',
     'OrdenExtintor'=>('Orden De Trabajo Extintor')];
     private $ArrayBANCOCO2 = ['BancoC02'=>'Banco CO2',
     'CertificadoC02'=>'Certificado Banco CO2',];
     private $ArrayBANCOEX = ['BancoEx'=>'BANCO EXTINCION INCENDIO',
     'CertificadoBEX'=>'Certificado Banco Extincion',];
     private $ArrayBalsas = [
     'Ship'=>'Embarcacion',
     'Raft'=>'Balsa',
     'Valve'=>('Válvula'),
     'Order'=>'Orden',
     'ReporShip'=>'Reporte Embarcacion',
     'DetalleOrden'=>'Dellate de Orden',
     'ReporDetalleOrden'=>'Reporte detalle de Orden ',
     'Minutes'=>'Acta',
     'Proof'=>'Pruevas',
     'ReporCertificadoBalsas'=>'Reporte Certificado Balsa',
     'CertificadoBalsa'=>'Certificado Balsas',
     'CertificadoApertura'=>'Certificado Acta de Apertura',
     'CertificadoInsumos'=>'Certificado Acta de insumos',
     'Inspetor'=>'Inspetor'];
     private $ArrayManguera = [
     'HydraulicHose'=>'HydraulicHose'];
     private $ArrayTrajeDeInmercion = [
     'CertificadoTraje'=>('Certificado Traje de inmersión')];
     private $ArrayCilindroDeAire = [
     'CertificadoCilindroAire'=>'Certificado Cilindro de Aire',
     'Cylinder'=>'Cilindro',
     'AirCylinder'=>'Cilindro De Aire'];
     private $Arrayfirma = [
     'Firma'=>'Firma'];
     private $ArraySucursales = ['Store'=>'Tienda'];
     private $ArrayAlmacen = [
     'Provider'=>'Proveedores',
     'Product'=>'Producto',
     'Classification'=>("Clasificación"),
     'Assignment'=>('Asignación'),
     'ReportAssignment'=>('Reporte De Asignación'),
     'ReportNoAssig'=>('Reporte de productos Asignación'),
     'ReporWarehouse'=>('Reporte de Almacén'),
     'Warehouse'=>('Almacén'),
     'ReporWareDetalle'=>('Reporte detalle Almacén'),
     'Report'=>'Reportes',
     'OrderSuppliers'=>'Pedidos'];
     private $ArrayVentas = [
     'AnularVenta'=>'Anular Venta',
     'Ventas'=>'Ventas'];

     private $ArrayInicio = [''=>'','User'=>'Usuarios',
     'Client'=>'Clientes',
     'Permisos'=>'Permisos',];

    private $Select = ['Nivel'=>['date'=>'Level','option'=>[],'filter'=>'s','Datos'=>'s01','necessary'=>true],'Ruta'=>['date'=>"",'option'=>[],'filter'=>'','Datos'=>"", "necessary"=>true],'Permiso'=>['date'=>"",'option'=>[''=>'','1'=>'Todo','2'=>'incluir','3'=>'Buscar','4'=>'Buscar incluir ','5'=>'Buscar incluir Modificar','6'=>'Nada'],'filter'=>'','Datos'=>"", "necessary"=>true]];

    private $SoloLetras = ["Ruta"=>"s","Ruta"=>"s" ];
    private $CamposNecesarios = ['Nivel'=>'Nivel', 'Permiso'=>'Permiso','Ruta'=>'Ruta'];
    private function Filtros($Filtros){
        $Filtros= str_replace('ø','/',$Filtros);
        $arr1 = explode($this->Delimitador,$Filtros);
        $array_num = count($arr1);
        for ($i = 0; $i < $array_num; ++$i){
           
            $posicion_coincidencia = strpos($arr1[$i], $this->Separador);
            if(  $posicion_coincidencia != FALSE ){
              $Array2 = explode($this->Separador,$arr1[$i]);
              $Array2[0]= $this->columna($Array2[0]);
              $arr1[$i] =  $Array2;
            }else {
                $arr1[$i]= array("Todo", $arr1[$i]);
            }
        }
        return  $arr1;
    }

   
    private  function columna($id = null,$Mascara = false){
        $fields = $this->db->list_fields($this->Tabla);
        if($id === null){
          
            $array_num = count($fields);
            for ($i = 0; $i < $array_num; ++$i){
                $fields[$i] =  $fields[$i]. " AS ". $this->Mascara($fields[$i]);
            }
            return $fields;

        }

        if(is_numeric($id)===false){
            $array_num = count($fields);
            for ($i = 0; $i < $array_num; ++$i){
                if($id === $fields[$i] ||  $this->Mascara($fields[$i]) === $id ){
                    if($Mascara=== false){
                        return $fields[$i];
                    }else{
                        return $fields[$i]. " AS ". $this->Mascara($fields[$i]);
                    }
                  
                }
              
            }
            return $fields[0];
        }else{

       

        if($Mascara === false){
            if(intval($id) < count($fields) && intval($id) > 0 ){
                return  $fields[intval($id)];
              }else{
                return $fields[0];
              }
        }else{
            if(intval($id) < count($fields) && intval($id) > 0 ){
                return  $fields[intval($id)]. " AS ". $this->Mascara($fields[intval($id)]);
              }else{
                return $fields[0]. " AS ". $this->Mascara($fields[0]);
              }        
        }
    }
       
    }
    private function Columnas($col = null,$Mascara = false){
          if($col=== null){
           $Arra =  $this->columna(null);
           return $Arra;
          }

        $Colu = substr($col, 1);
        $posicion_coincidencia = strpos($Colu, $this->Delimitador);
        if(  $posicion_coincidencia === FALSE ){
            $arr1 = str_split($Colu);
        }else{
            $arr1 = explode($this->Delimitador,$Colu);
        }
     
        $array_num = count($arr1);
        for ($i = 0; $i < $array_num; ++$i){
            $arr1[$i] =  $this->columna($arr1[$i],$Mascara);
        }
        return $arr1;
    }
    public function getPermisos($id=NULL)
    {
       
       if ($id === NULL){
        $this->db->select($this->Columnas());
        return  $this->db->get_where($this->Tabla,array("Status"=>"Activo"))->result();
       }else{
           $Columna = $this->columna(0);
           $this->db->select($this->Columnas());
        return  $this->db->get_where($this->Tabla,array("Status"=>"Activo", "$Columna"=>$id))->result();
       }
       
    }
    public function getPermisosLimite($Canti,$Desde){
        $this->db->select($this->Columnas());
        
        return  $this->db->get_where($this->Tabla,array("Status"=>"Activo"),$Canti,$Desde)->result();
    }
    public function getPermisosLimiteOrden($Canti,$Desde,$Columna,$Orden){
        $Direccion ="Error en el Orden";
        $Direccion = $Orden ==="0" ? "ASC" :   $Direccion;
        $Direccion = $Orden ==="1" ? "DESC" :   $Direccion;
     
        if($Direccion ==="Error en el Orden" ) 
        {
            return array("Error"=> $Direccion);
        }
        $this->db->select($this->Columnas());
        $this->db->order_by($this->columna($Columna), $Direccion);
        return  $this->db->get_where($this->Tabla,array("Status"=>"Activo"),$Canti,$Desde)->result();
    }
    public function getPermisosLimiteOrdenColumnas($Canti,$Desde,$Columna,$Orden,$Columnas){
        $Direccion ="Error en el Orden";
        $Direccion = $Orden ==="0" ? "ASC" :   $Direccion;
        $Direccion = $Orden ==="1" ? "DESC" :   $Direccion;
        if($Direccion ==="Error en el Orden" ) 
        {
            return array("Error"=> $Direccion);
        }
        
       
     
        $this->db->select($this->Columnas($Columnas,true));
        $this->db->order_by($this->columna($Columna), $Direccion);
        return  $this->db->get_where($this->Tabla,array("Status"=>"Activo"),$Canti,$Desde)->result();
    }
    public function getPermisosIdColum($id,$Columnas){
  
        $this->db->select($this->Columnas($Columnas,true));
        $Columna = $this->columna(0);
        return  $this->db->get_where($this->Tabla,array("Status"=>"Activo", "$Columna"=>$id))->result();
    }
    public function getPermisosLimiteColum($Canti,$Desde,$Columnas){
        $this->db->select($this->Columnas($Columnas,true));
        return  $this->db->get_where($this->Tabla,array("Status"=>"Activo"),$Canti,$Desde)->result();
    }
    public function getPermisosFiltro($Filtros){
        $Filtro = substr($Filtros, 1);
        $cont = 0;
      $arrayconsulta=  $this->Filtros($Filtro);
      $this->db->where('Status',"Activo" ); 
      $array_num = count($arrayconsulta);
        for ($i = 0; $i < $array_num; ++$i){
           if($arrayconsulta[$i][0] != "Todo"){
            $this->db->where($arrayconsulta[$i][0],$arrayconsulta[$i][1]);
           }else{
            $cont++;
           }
        }
        if($cont >0){
            $fields = $this->db->list_fields($this->Tabla);
            $poli=false;
            for ($i = 0; $i < $array_num; ++$i){
            if($arrayconsulta[$i][0] === "Todo"){
                 for($e =0 ; $e <count( $fields)-1; ++$e )
                 {
                if( $poli===false){
                    $this->db->like('('.$fields[$e],$arrayconsulta[$i][1] );
                    $poli= true; 
                }else{ 
                    $this->db->or_like($fields[$e],$arrayconsulta[$i][1]);
                }
            }
            $this->db->or_where($fields[count( $fields)-1].' LIKE',"'%".$arrayconsulta[$i][1]."%')",false );
            $this->db->like('('."Status",$arrayconsulta[$i][1] );
               }
            }
            $this->db->or_where('Status =',"'Activo')",false ); 
        }
      
        $this->db->select($this->Columnas());
     return  $this->db->get($this->Tabla)->result();
      
    }
    private function total(){
        $this->db->select("count(*) As Total");
        return  $this->db->get($this->Tabla)->result();
    }
    public function getPermisosFiltroLimite($Filtros,$Canti,$Desde){
        $Filtro = substr($Filtros, 1);
        $cont = 0;
      $arrayconsulta=  $this->Filtros($Filtro);
      $this->db->where('Status',"Activo" ); 
      $array_num = count($arrayconsulta);
        for ($i = 0; $i < $array_num; ++$i){
           if($arrayconsulta[$i][0] != "Todo"){
            $this->db->where($arrayconsulta[$i][0],$arrayconsulta[$i][1]);
           }else{
            $cont++;
           }
        }
        if($cont >0){
            $fields = $this->db->list_fields($this->Tabla);
            $poli=false;
            for ($i = 0; $i < $array_num; ++$i){
            if($arrayconsulta[$i][0] === "Todo"){
                 for($e =0 ; $e <count( $fields)-1; ++$e )
                 {
                if( $poli===false){
                    $this->db->like('('.$fields[$e],$arrayconsulta[$i][1] );
                    $poli= true; 
                }else{ 
                    $this->db->or_like($fields[$e],$arrayconsulta[$i][1]);
                }
            }
            $this->db->or_where($fields[count( $fields)-1].' LIKE',"'%".$arrayconsulta[$i][1]."%')",false );
            $this->db->like('('."Status",$arrayconsulta[$i][1] );
               }
            }
            $this->db->or_where('Status =',"'Activo')",false ); 
        }
      
        $this->db->select($this->Columnas());
     return  $this->db->get($this->Tabla,$Canti,$Desde)->result();
      
    }
    public function getPermisosFiltroLimiteOrden($Filtros,$Canti,$Desde,$Columna,$Orden){
        $Filtro = substr($Filtros, 1);
        $cont = 0;
      $arrayconsulta=  $this->Filtros($Filtro);
      $this->db->where('Status',"Activo" ); 
      $array_num = count($arrayconsulta);
        for ($i = 0; $i < $array_num; ++$i){
           if($arrayconsulta[$i][0] != "Todo"){
            $this->db->where($arrayconsulta[$i][0],$arrayconsulta[$i][1]);
           }else{
            $cont++;
           }
        }
        if($cont >0){
            $fields = $this->db->list_fields($this->Tabla);
            $poli=false;
            for ($i = 0; $i < $array_num; ++$i){
            if($arrayconsulta[$i][0] === "Todo"){
                 for($e =0 ; $e <count( $fields)-1; ++$e )
                 {
                if( $poli===false){
                    $this->db->like('('.$fields[$e],$arrayconsulta[$i][1] );
                    $poli= true; 
                }else{ 
                    $this->db->or_like($fields[$e],$arrayconsulta[$i][1]);
                }
            }
            $this->db->or_where($fields[count( $fields)-1].' LIKE',"'%".$arrayconsulta[$i][1]."%')",false );
            $this->db->like('('."Status",$arrayconsulta[$i][1] );
               }
            }
            $this->db->or_where('Status =',"'Activo')",false ); 
        }
        $Direccion ="Error en el Orden";
        $Direccion = $Orden ==="0" ? "ASC" :   $Direccion;
        $Direccion = $Orden ==="1" ? "DESC" :   $Direccion;
        if($Direccion ==="Error en el Orden" ) 
        {
            return array("Error"=> $Direccion);
        }
        
       
     
        $this->db->select($this->Columnas());
     $this->db->order_by($this->columna($Columna), $Direccion);
     return  $this->db->get($this->Tabla,$Canti,$Desde)->result();
      
    }
    public function getPermisosFiltroLimiteOrdenColumnas($Filtros,$Canti,$Desde,$Columna,$Orden,$Columnas){
        $Filtro = substr($Filtros, 1);
        $cont = 0;
      $arrayconsulta=  $this->Filtros($Filtro);
      $this->db->where('Status',"Activo" ); 
      $array_num = count($arrayconsulta);
        for ($i = 0; $i < $array_num; ++$i){
           if($arrayconsulta[$i][0] != "Todo"){
            $this->db->where($arrayconsulta[$i][0],$arrayconsulta[$i][1]);
           }else{
            $cont++;
           }
        }
        if($cont >0){
            $fields = $this->db->list_fields($this->Tabla);
            $poli=false;
            for ($i = 0; $i < $array_num; ++$i){
            if($arrayconsulta[$i][0] === "Todo"){
                 for($e =0 ; $e <count( $fields)-1; ++$e )
                 {
                if( $poli===false){
                    $this->db->like('('.$fields[$e],$arrayconsulta[$i][1] );
                    $poli= true; 
                }else{ 
                    $this->db->or_like($fields[$e],$arrayconsulta[$i][1]);
                }
            }
            $this->db->or_where($fields[count( $fields)-1].' LIKE',"'%".$arrayconsulta[$i][1]."%')",false );
            $this->db->like('('."Status",$arrayconsulta[$i][1] );
               }
            }
            $this->db->or_where('Status =',"'Activo')",false ); 
        }
        $Direccion ="Error en el Orden";
        $Direccion = $Orden ==="0" ? "ASC" :   $Direccion;
        $Direccion = $Orden ==="1" ? "DESC" :   $Direccion;
        if($Direccion ==="Error en el Orden" ) 
        {
            return array("Error"=> $Direccion);
        }
        
       
     
     $this->db->select($this->Columnas($Columnas,true));
     $this->db->order_by($this->columna($Columna), $Direccion);
     return  $this->db->get($this->Tabla,$Canti,$Desde)->result();
      
    }
    public function getPermisosFiltroColumnas($Filtros,$Columnas){
        $Filtro = substr($Filtros, 1);
        $cont = 0;
      $arrayconsulta=  $this->Filtros($Filtro);
      $this->db->where('Status',"Activo" ); 
      $array_num = count($arrayconsulta);
        for ($i = 0; $i < $array_num; ++$i){
           if($arrayconsulta[$i][0] != "Todo"){
            $this->db->where($arrayconsulta[$i][0],$arrayconsulta[$i][1]);
           }else{
            $cont++;
           }
        }
        if($cont >0){
            $fields = $this->db->list_fields($this->Tabla);
            $poli=false;
            for ($i = 0; $i < $array_num; ++$i){
            if($arrayconsulta[$i][0] === "Todo"){
                 for($e =0 ; $e <count( $fields)-1; ++$e )
                 {
                if( $poli===false){
                    $this->db->like('('.$fields[$e],$arrayconsulta[$i][1] );
                    $poli= true; 
                }else{ 
                    $this->db->or_like($fields[$e],$arrayconsulta[$i][1]);
                }
            }
            $this->db->or_where($fields[count( $fields)-1].' LIKE',"'%".$arrayconsulta[$i][1]."%')",false );
            $this->db->like('('."Status",$arrayconsulta[$i][1] );
               }
            }
            $this->db->or_where('Status =',"'Activo')",false ); 
        }
        $this->db->select($this->Columnas($Columnas,true));

     return  $this->db->get($this->Tabla)->result();
      
    }

    public function getPermisosFiltroLimitesColumnas($Filtros,$Canti,$Desde,$Columnas){
        $Filtro = substr($Filtros, 1);
        $cont = 0;
      $arrayconsulta=  $this->Filtros($Filtro);
      $this->db->where('Status',"Activo" ); 
      $array_num = count($arrayconsulta);
        for ($i = 0; $i < $array_num; ++$i){
           if($arrayconsulta[$i][0] != "Todo"){
            $this->db->where($arrayconsulta[$i][0],$arrayconsulta[$i][1]);
           }else{
            $cont++;
           }
        }
        if($cont >0){
            $fields = $this->db->list_fields($this->Tabla);
            $poli=false;
            for ($i = 0; $i < $array_num; ++$i){
            if($arrayconsulta[$i][0] === "Todo"){
                 for($e =0 ; $e <count( $fields)-1; ++$e )
                 {
                if( $poli===false){
                    $this->db->like('('.$fields[$e],$arrayconsulta[$i][1] );
                    $poli= true; 
                }else{ 
                    $this->db->or_like($fields[$e],$arrayconsulta[$i][1]);
                }
            }
            $this->db->or_where($fields[count( $fields)-1].' LIKE',"'%".$arrayconsulta[$i][1]."%')",false );
            $this->db->like('('."Status",$arrayconsulta[$i][1] );
               }
            }
            $this->db->or_where('Status =',"'Activo')",false ); 
        }
        $this->db->select($this->Columnas($Columnas,true));

     return  $this->db->get($this->Tabla,$Canti,$Desde)->result();
      
    }
   
// desde aqui comianza la configuracion

    private function Mascara($Clave){
$ArrayPermisos["ID"]=  utf8_encode('Código');
$ArrayPermisos["Direccion"]= utf8_encode("Dirección");
$ArrayPermisos["Nombres"]="Nombre";
$ArrayPermisos["Rut"]= 'Rut';
$ArrayPermisos["Razon"]="RS" ;
$ArrayPermisos["correo"]= "Email";
$ArrayPermisos["Apellidos"]= "Apellidos";
$ArrayPermisos["Comuna"]= "Comuna";
$ArrayPermisos["Ciudad"]= "Ciudad";
$ArrayPermisos["Telefono"]= utf8_encode('Teléfono');
$ArrayPermisos["giro"]= "giro";
if (isset($ArrayPermisos[$Clave])){
return $ArrayPermisos[$Clave];
}else{
return $Clave;
}
}

    private function verificarExistencia($dato,$Array)
    {
        $array_num = count($Array);
        for ($id = 0; $id < $array_num; ++$id){
            if($Array[$id]["nombre"] == $dato){
              return $id;
            }
        }
        return false;
    }
private function validar($Datos){
    $meta = $this->MetaData(false);
    $ArrayDatos = array();
    while (current($Datos)!==false) {
        $verificar = current($Datos);
        if(is_numeric(key($Datos))===false){
            $clave=  $this->verificarExistencia(key($Datos),$meta);
            if ($clave=== false){
                return false;
            }
        }else{
            $clave = intval(key($Datos));
        }
        
        if (!isset($meta[$clave])){
            end($Datos);
            return false;
        }else{
        if (intval($meta[$clave]["len"]) < strlen($verificar) && $meta[$clave]["len"]!= null ){
            end($Datos);
            return false;
        } 

        }
        $ArrayDatos[$meta[$clave]["nombre"]] = $verificar;

          next($Datos);
          }
          return $ArrayDatos;     
}
public function Add($datos){
        
    $ArrayDatos= $this->validar($datos);
    if( $ArrayDatos === false){
        return array("Error"=>"Verificar Datos");
    }
        
         foreach ($this->CamposNecesarios as $campo){
            if (!isset($ArrayDatos[$campo])){
                return array("Error"=>"Debe Enviar Campo $campo");
            }
         }
    
     
  
        $ArrayDatos["Status"] = "Activo";
   $Buscar = $this->getPermisosFiltro("sRuta".$this->Separador.$ArrayDatos["Ruta"]."|Nivel".$this->Separador.$ArrayDatos["Nivel"]."|Status^Activo");
  
   if (count($Buscar)===0  ){
    return $this->db->insert($this->Tabla, $ArrayDatos);
   }else{
       $codigo= utf8_encode("Código");
      
       $datos[0]=$Buscar[0]->$codigo;
    $Editamos = $this->Edit($datos);
    return $Editamos;
   }
}
public function Edit($datos){
  
    $ArrayDatos= $this->validar($datos);
    if( $ArrayDatos === false){
        return array("Error"=>"Verificar Datos");
    } 
  
    if (isset($ArrayDatos["Rut"])){
      
        $ArrayDatos["Rut"]=  $this->FormatoRut($ArrayDatos["Rut"]);
      
    }
 
    if (!isset($ArrayDatos["ID"])){
        return array("Error"=>"Debe Enviar el id del Proveedor");
    }
 
   $Buscar = $this->getPermisosFiltro("sID".$this->Separador.$ArrayDatos["ID"]);
 
   if (count($Buscar)===0){
    return array("Error"=>"Permisose No Existe");
   }else{
    
   $where = "ID = '".$ArrayDatos["ID"]."' ";
    return $this->db->update($this->Tabla, $ArrayDatos, $where );

   }
}
public function Delete($ID){

   $Buscar = $this->getPermisosFiltro("sID".$this->Separador.intval($ID));
   if (count($Buscar)===0){
    return array("Error"=>"Ciente No Existe");
   }else{
    $ArrayDatos["ID"] = intval($ID);
    $ArrayDatos["Status"] = "Inactivo";
   $where = "ID = '".$ArrayDatos["ID"]."' ";
    return $this->db->update($this->Tabla, $ArrayDatos, $where );

   }
}

private function FormatoRut($Rut){
    $newRut = str_replace(".", "", $Rut);
    $newRut = str_replace("-", "", $newRut);
    $Ultimo = substr($newRut, -1);
    $rest = substr($newRut, 0, -1);
   
    return $rest."-".$Ultimo;
   }
   Public function MetaData($Mascara = true){
      
    $meta = $this->db->field_data($this->Tabla);

    $meta2 =array();
    $meta3 = array();
    $i=0;
    foreach ($meta as $field)
{ 
if($Mascara=== true){
   
   if(!isset($this->CamposInternos[$field->name]) && !isset($this->Select[$field->name]) ){
    $id= (string)$i;
    $meta2[$id] = [
        "name"=> $this->Mascara($field->name),
        "value"=> $field->type === "date"? date("Y-m-d") : "" ,
        "Tipo"=>  $field->type === "longtext" || $field->type === "varchar" || $field->type === "date" ? "a":"n",       
        "disabled"=> false, 
        "len"=> $field->type === "date"? 10 :$field->max_length,         
        "primary"=>$field->name =="Rut",  
        "type"=> $field->type === "date"? $field->type : "text",    
        "necessary"=> isset($this->CamposNecesarios[$field->name]), 
        "modified"=> false,  
        "Buscar" => $field->name =="Rut",
    ];
    
    if(isset($this->SoloLetras[$field->name])){
        $meta2[$id]["Tipo"] = $this->SoloLetras[$field->name];
    }
   }
   if (isset($this->Select[$field->name])){
    if (Sucursales == true){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArraySucursales);
    }
    if ($this->Almacen == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayAlmacen);
    }
    if ($this->Ventas == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayVentas);
    }
    if ($this->Extintores == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayExtintores);
    }
    if ($this->Balsas == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayBalsas);
    }
    if ($this->Manguera == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayManguera);
    }
    if ($this->TrajeDeInmercion == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayTrajeDeInmercion);
    }
    if ($this->CilindroDeAire == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayCilindroDeAire);
    }
    if ($this->BANCOCO2 == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayBANCOCO2);
    }
    if ($this->BANCOEX == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->ArrayBANCOEX);
    }
    if ($this->firma == TRUE){
        $this->ArrayInicio = array_merge($this->ArrayInicio,$this->Arrayfirma);
    }
    
    $this->Select['Ruta']['option'] =$this->ArrayInicio;
    $id= (string)$i;
    $meta3[$id] = [
        "name"=> $this->Mascara($field->name),
        "value"=> "",     
        "disabled"=> false,      
        "primary"=>$field->name =="Rut",
        "date"=>$this->Select[$field->name]["date"],
        "option"=>$this->Select[$field->name]["option"],
        "filter"=>$this->Select[$field->name]["filter"],
        "Datos"=>$this->Select[$field->name]["Datos"],
        "necessary"=> $this->Select[$field->name]["necessary"], 
        "modified"=> false,  
    ];
   
   } 
   $Total = $this->total();
   $meta2["Total"] = $Total[0]->Total;
   $meta2["Select"]= $meta3;
   $meta2["Delimitador"] = $this->Delimitador;
   $meta2["Separador"]  = $this->Separador;
   $Token = obtnerToken();
   $Autho = "";
   if($Token != FALSE){
   $Autho =str_replace('Bearer ','', $Token);
   }
   if( $Autho !=""){
   $Autho =str_replace('Bearer ','', $Autho);
   $Token = ValidarToken($Autho);
   }
   if(isset($this->session)){
    $ID =  $Token== FALSE ? $this->session->userdata("User") :  $Token ;
}else{
    $ID =   $Token== FALSE ? null :  $Token ;
}
   $User = $this->UserModels->getUser($ID);
   $Nivel =$User[0]->Nivel;
   $Permiso= $this->db->get_where('detalleniveles',array("Status"=>"Activo","Ruta"=>"Permiso","Nivel"=>$Nivel))->result();
        if(  count($Permiso)>0){
            $meta2["Permiso"] = $Permiso[0]->Permiso;
        }else{
            $meta2["Permiso"] = 6;
        }
}else{
    $meta2[$i] = ["nombre"=> $field->name, "len"=> $field->max_length, "type"=> $field->type, "Obligatorio"=>isset($this->CamposNecesarios[$field->name]),"ID"=>$i];
   
}

$i++;
}

   return   $meta2;
} 

}