<?php

/****************************************************************************************
 * DEV: CONTRALORIA DEL ESTADO.
 * MODULO: Prueba
 * PROGRAMADORES.________________________________________________________________________
 * | # | NOMBRE.              | CORREO.                              | TELEFONO.
 * | 1 | Fernando Mendoza     | dt.ait.programador1@cgesucre.gob.ve  | 0424-8942068      03-09-2019
 * | 2 |
 * |_____________________________________________________________________________________
 *****************************************************************************************/
class certificadosFiiControlador extends Controlador
{
    private $atCertificados;
    private $atKey;

    public function __construct()
    {
        parent::__construct();
        Session::metAcceso();
        $this->atIdUsuario = Session::metObtener('idUsuario');
        $this->atIdEmpleado = Session::metObtener('idEmpleado');
        $this->atIdPersona = Session::metObtener('idPersona');
        $this->atNombreUsuario = Session::metObtener('nombreUsuario');
        #se carga el Modelo.
        $this->atCertificados  = $this->metCargarModelo('certificadosFii');
        $this->atKey = 'Ug_r4gB@&S7~Q9CN^8,_+vtTN~=yN[zW6Q<Z;*U`PVcm\*qD)3hR_9?EF]y2busKCGKg]7$';
    }

    #Metodo Index del controlador Prueba.
    public function metIndex()
    {

        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
        $complementoJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
        );

        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $js[] = 'materialSiace/core/demo/Demo';
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJsComplemento($complementoJs);
        $this->atVista->metCargarJs($js);
        $this->atVista->assign('certificados',$this->atCertificados->metListarCertificados($this->atIdEmpleado));
        $this->atVista->metRenderizar('certificados');
    }

    #Metodo que muestra el formulario para cargar los certificados
    public function metCargar()
    {
        #ARCHIVO JAVASCRIPT CON FUNCIONES COMPLEMENTARIAS DEL MODULO
        $js = array('materialSiace/App','Aplicacion/appFunciones','modRH/modRHFunciones','materialSiace/core/demo/DemoFormComponents');
        $complementoJs = array(
            'jquery-validation/dist/jquery.validate.min','jquery-validation/dist/additional-methods.min'
        );
        $this->atVista->metCargarJsComplemento($complementoJs);
        $this->atVista->metCargarJs($js);

        $this->atVista->metRenderizar('formulario');
    }

    public function metAdministrar()
    {
        #ARCHIVO JAVASCRIPT CON FUNCIONES COMPLEMENTARIAS DEL MODULO
        $js = array('materialSiace/App','Aplicacion/appFunciones','modRH/modRHFunciones','materialSiace/core/demo/DemoFormComponents');
        $complementoJs = array(
            'jquery-validation/dist/jquery.validate.min','jquery-validation/dist/additional-methods.min'
        );
        $this->atVista->metCargarJsComplemento($complementoJs);
        $this->atVista->metCargarJs($js);
        $idCert = $_POST['idcrt'];
        $datos = $this->atCertificados->metMostrarCertificado($idCert);
        $this->atVista->assign('datos',$datos);
        $this->atVista->metRenderizar('administrar');
    }

    #Metodo que muestra el listados de los certificados cargados
    public function metListar()
    {
        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            'select2/select2.min'
        );
        $complementoCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
            'bootstrap-datepicker/datepicker',
            'select2/select201ef'
        );
        $js[] = 'Aplicacion/appFunciones';
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $this->atVista->metCargarCssComplemento($complementoCss);
        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarJs($js);
        $this->atVista->assign('dependencia',$this->atCertificados->metListarDependencias());

        $this->atVista->metRenderizar('certificadosFii');
    }

    #Metodo que permite mostrar el formulario para consultar un certificado
    public function metConsultar()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);
        $this->atVista->metRenderizar('consultar');
    }

    #Metodo que permite mostrar el formulario para consultar un certificado
    public function metConsultarCertificadosFuncionarios()
    {
        $idEmpleado = $_POST['idEmpleado'];
        $consulta = $this->atCertificados->metConsultarCertificadosFuncionarios($idEmpleado);
        $data = array(
            'cantidad' => $consulta
        );
        echo json_encode($data);
    }

    #Metodo que permite consultar un certificado
    public function metConsultarCertificado()
    {
        $cedula = $_POST['cedula'];
        $consulta = $this->atCertificados->metConsultarCertificado($cedula);
        $n = count($consulta);
        $arreglo = array();
        foreach ($consulta as $resultado){
            #foto
            if($resultado['ind_foto'] == ''){
                $foto = '<img class="img-circle width-0" src="{$_Parametros.ruta_Img}avatar.jpg" />';
            }else{
                $foto = '<img class="img-circle width-0" id="x" src="publico/imagenes/modRH/fotos/'.$resultado['ind_foto'].'"/>';
            }
            #vigencia
            if(strcmp($resultado['estatus_cert'],'Vigente')==0){
                $vigencia = '<span class="badge style-primary">'.$resultado['estatus_cert'].'</span>';
            }
            else if(strcmp($resultado['estatus_cert'],'Vencido')==0){
                $vigencia = '<span class="badge style-danger">'.$resultado['estatus_cert'].'</span>';
            }else{
                $vigencia = '<span class="badge style-warning">'.$resultado['estatus_cert'].'</span>';
            }
            #estado
            if($resultado['num_estatus']==1){
                $estado = '<span class="badge style-success">Activo</span>';
            }
            else{
                $estado =  '<span class="badge style-danger">No Activo</span>';
            }
            #boton descargar
            $rol = Session::metObtener('perfil');
            if (in_array('FE-01-04-06-DE',$rol)) {
                $descargar = '<button class="btnDescargarCert btn ink-reaction btn-raised btn-xs btn-danger" data-toggle="modal" data-target="#formModal" data-keyboard="false" data-backdrop="static" title="Descargar Certificado" idCert="'.$resultado['pk_num_certificadofii'].'" idEmpleado="'.$resultado['fk_rhb001_num_empleado'].'" crt="'.$resultado['ind_certificado'].'">
                            <i class="md md-file-download" style="color: #ffffff;"></i>
                    </button>';
            }else{
                $descargar = '';
            }
            $array = array(
                'ind_foto' => $foto,
                'ind_cedula' => $resultado['ind_cedula'],
                'ind_funcionario' => $resultado['ind_funcionario'],
                'fec_valido_desde_format' => $resultado['fec_valido_desde_format'],
                'fec_valido_hasta_format' => $resultado['fec_valido_hasta_format'],
                'vigencia' => $vigencia,
                'estado' => $estado,
                'descargar' => $descargar

            );
            $arreglo[] = $array;

        }

        $data = array(
           'datos' => $arreglo,
           'reg' => $n
        );
        echo json_encode($data);
    }


    public function metVerificarCertificado()
    {

        $archivo  = (isset($_FILES['certificado'])) ? $_FILES['certificado'] : null;
        $password = $_POST['pass'];
        $actual   = date('Y');

        if ($archivo) {

            if (!$almacen_cert = file_get_contents($_FILES['certificado']['tmp_name'])) {
                $resultado = array(
                    'estatus' => 'E1'
                );
                echo json_encode($resultado);
            }

            if (openssl_pkcs12_read($almacen_cert, $info_cert, $password)) {

                $x = openssl_x509_parse($info_cert['cert']);

                $validFrom = date('d-m-Y H:i:s', $x['validFrom_time_t']);
                $validTo   = date('d-m-Y H:i:s', $x['validTo_time_t']);

                $cedula_certificado = $x['subject']['serialNumber'];
                $aux = explode("-",$cedula_certificado);

                #buscar el id empleado segun cedula del certificado
                $id_empleado = $this->atCertificados->metBuscarIdEmpleado($aux[2]);
                $foto = $this->atCertificados->metBuscarFotoEmpleado($aux[2]);

                $resultado = array(
                    'estatus' => 'OK',
                    'resultado' => $info_cert,
                    'f_ini' => $validFrom,
                    'f_fin' => $validTo,
                    'datos' => $x,
                    'id_empleado' => $id_empleado,
                    'foto' => $foto
                );

                echo json_encode($resultado);


            } else {
                 $resultado = array(
                    'estatus' => 'E2'
                );
                 echo json_encode($resultado);
 
            }

        }

    }

    #guardar certificado
    public function metGuardarCertificado()
    {


            $formTxt   = $this->metObtenerTexto('form','txt');
            $formInt   = $this->metObtenerInt('form','int');
            $formForm  = $this->metObtenerFormulas('form','formula');

            if(!empty($formInt)) {
                foreach ($formInt as $tituloInt => $valorInt) {
                    if (!empty($formInt[$tituloInt])) {
                        $validacion[$tituloInt] = $valorInt;
                    } else {
                        $validacion[$tituloInt] = '';
                    }
                }
            }
            if(!empty($formTxt)) {
                foreach ($formTxt as $tituloTxt => $valorTxt) {
                    if (!empty($formTxt[$tituloTxt])) {
                        $validacion[$tituloTxt] = $valorTxt;
                    } else {
                        $validacion[$tituloTxt] = '';

                    }
                }
            }
            if(!empty($formForm)) {
                foreach ($formForm as $tituloTxt => $valorTxt) {
                    if (!empty($formForm[$tituloTxt])) {
                        $validacion[$tituloTxt] = $valorTxt;
                    } else {
                        $validacion[$tituloTxt] = '';

                    }
                }
            }


            $archivo  = (isset($_FILES['imagen_f'])) ? $_FILES['imagen_f'] : null;
            $r_certificado  = (isset($_FILES['certificado'])) ? $_FILES['certificado'] : null;


            //array de datos
            $datos = array(
                'fec_valido_desde' => $validacion['fec_valido_desde'], 
                'fec_valido_hasta' => $validacion['fec_valido_hasta'], 
                'fk_rhb001_num_empleado' => $validacion['fk_rhb001_num_empleado'],
                'ind_cedula' => $validacion['ind_cedula'], 
                'ind_organismo'=> $validacion['ind_organismo'], 
                'ind_dependencia'=> $validacion['ind_dependencia'], 
                'ind_funcionario'=> $validacion['ind_funcionario'], 
                'ind_email'=> $validacion['ind_email'], 
                'ind_cargo'=> $validacion['ind_cargo'], 
                'num_estatus'=> 1,
                'data_certificado' => $r_certificado,
                'archivo' => $archivo,
                'pass' => Hash::metObtenerHash($_POST['pass']),
                'ind_certificado' => $this->metEncriptar($r_certificado['name'])
            );
        $cantidad = $this->atCertificados->metValidarCertificadoByFecha(
            $validacion['fk_rhb001_num_empleado'],
            $validacion['fec_valido_desde'],
            $validacion['fec_valido_hasta'],
            $validacion['ind_cedula'],
            $validacion['ind_dependencia'],
            $validacion['ind_funcionario'],
            $validacion['ind_email'],
            $validacion['ind_cargo']
        );

        if($cantidad > 0 ){
            $validacion['status'] = 'errorCertificadoDuplicado';
            echo json_encode($validacion);
            exit;
        }
        $validacion['cantidad1'] = $cantidad;


            $id = $this->atCertificados->metRegistrarCertificadoFii($datos);
            if(is_array($id)){
                $validacion['status'] = 'error';
                echo json_encode($validacion);
                exit;
            }else{
                echo json_encode($validacion);
                exit;
            }

    }

    #guardar certificado
    public function metGuardarCertificadoDesactivar()
    {


        $formTxt   = $this->metObtenerTexto('form','txt');
        $formInt   = $this->metObtenerInt('form','int');
        $formForm  = $this->metObtenerFormulas('form','formula');

        if(!empty($formInt)) {
            foreach ($formInt as $tituloInt => $valorInt) {
                if (!empty($formInt[$tituloInt])) {
                    $validacion[$tituloInt] = $valorInt;
                } else {
                    $validacion[$tituloInt] = '';
                }
            }
        }
        if(!empty($formTxt)) {
            foreach ($formTxt as $tituloTxt => $valorTxt) {
                if (!empty($formTxt[$tituloTxt])) {
                    $validacion[$tituloTxt] = $valorTxt;
                } else {
                    $validacion[$tituloTxt] = '';

                }
            }
        }
        if(!empty($formForm)) {
            foreach ($formForm as $tituloTxt => $valorTxt) {
                if (!empty($formForm[$tituloTxt])) {
                    $validacion[$tituloTxt] = $valorTxt;
                } else {
                    $validacion[$tituloTxt] = '';

                }
            }
        }


        $archivo  = (isset($_FILES['imagen_f'])) ? $_FILES['imagen_f'] : null;
        $r_certificado  = (isset($_FILES['certificado'])) ? $_FILES['certificado'] : null;


        //array de datos
        $datos = array(
            'fec_valido_desde' => $validacion['fec_valido_desde'],
            'fec_valido_hasta' => $validacion['fec_valido_hasta'],
            'fk_rhb001_num_empleado' => $validacion['fk_rhb001_num_empleado'],
            'ind_cedula' => $validacion['ind_cedula'],
            'ind_organismo'=> $validacion['ind_organismo'],
            'ind_dependencia'=> $validacion['ind_dependencia'],
            'ind_funcionario'=> $validacion['ind_funcionario'],
            'ind_email'=> $validacion['ind_email'],
            'ind_cargo'=> $validacion['ind_cargo'],
            'num_estatus'=> 1,
            'data_certificado' => $r_certificado,
            'archivo' => $archivo,
            'pass' => Hash::metObtenerHash($_POST['pass']),
            'ind_certificado' => $this->metEncriptar($r_certificado['name'])
        );

        $cantidad = $this->atCertificados->metValidarCertificadoByFecha(
            $validacion['fk_rhb001_num_empleado'],
            $validacion['fec_valido_desde'],
            $validacion['fec_valido_hasta'],
            $validacion['ind_cedula'],
            $validacion['ind_dependencia'],
            $validacion['ind_funcionario'],
            $validacion['ind_email'],
            $validacion['ind_cargo']
        );

        if($cantidad > 0 ){
            $validacion['status'] = 'errorCertificadoDuplicado';
            echo json_encode($validacion);
            exit;
        }
        $validacion['cantidad1'] = $cantidad;


        $id = $this->atCertificados->metRegistrarCertificadoFiiDesactivar($datos);
        if(is_array($id)){
            $validacion['status'] = 'error';
            echo json_encode($validacion);
            exit;
        }else{
            echo json_encode($validacion);
            exit;
        }

    }

    #modificar certificado
    public function metModificarCertificado()
    {

        $formInt   = $this->metObtenerInt('form','int');

        if(!empty($formInt)) {
            foreach ($formInt as $tituloInt => $valorInt) {
                if (!empty($formInt[$tituloInt])) {
                    $validacion[$tituloInt] = $valorInt;
                } else {
                    $validacion[$tituloInt] = '';
                }
            }
        }

        if(!isset($validacion['num_estatus'])){
            $validacion['num_estatus']=0;
        }

        $idcert = $_POST['idcert'];

        $id = $this->atCertificados->metModificarCertificadoFii($idcert,$validacion['num_estatus']);
        if(is_array($id)){
            $validacion['status'] = 'error';
            echo json_encode($validacion);
            exit;
        }else{
            echo json_encode($validacion);
            exit;
        }

    }

    public function metJsonDataTabla($dependenciaL=false,$desdeV=false, $hastaV=false,$desdeL=false,$hastaL=false, $estadoL=false)
    {
        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol = Session::metObtener('perfil');
        #cacturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "SELECT
                IF
                    ( fec_valido_hasta < NOW( ), 'Vencido', IF ( DATEDIFF( fe_c008_certificadosfii.fec_valido_hasta, CURDATE( ) ) <= 15 , 'Proximo a Vencer', 'Vigente' ) ) AS estatus_cert,
                    fe_c008_certificadosfii.fk_rhb001_num_empleado,
                    fe_c008_certificadosfii.pk_num_certificadofii,
                    fe_c008_certificadosfii.fec_valido_desde,
                    fe_c008_certificadosfii.fec_valido_hasta,
                    DATE_FORMAT(fe_c008_certificadosfii.fec_valido_desde,'%W, %e de %M, %Y %H:%i %p') as fec_valido_desde_format,
	                DATE_FORMAT(fe_c008_certificadosfii.fec_valido_hasta,'%W, %e de %M, %Y %H:%i %p') as fec_valido_hasta_format,                    
                    fe_c008_certificadosfii.ind_cedula,
                    fe_c008_certificadosfii.num_estatus,
                    fe_c008_certificadosfii.num_estatus as num_estatus_estado,
                    fe_c008_certificadosfii.ind_certificado,
                    fe_c008_certificadosfii.fec_ultima_modificacion,
                    fe_c008_certificadosfii.fk_a018_num_seguridad_usuario,
                    fe_c008_certificadosfii.ind_funcionario,
                    a003_persona.ind_foto
                FROM
                    fe_c008_certificadosfii
                INNER JOIN rh_b001_empleado ON rh_b001_empleado.pk_num_empleado = fe_c008_certificadosfii.fk_rhb001_num_empleado
                INNER JOIN a003_persona ON rh_b001_empleado.fk_a003_num_persona = a003_persona.pk_num_persona
                INNER JOIN rh_c076_empleado_organizacion ON rh_b001_empleado.pk_num_empleado =rh_c076_empleado_organizacion.fk_rhb001_num_empleado
            ";
        if ($busqueda['value']) {
            $sql .= " WHERE
                        (
                        ind_cedula LIKE '%$busqueda[value]%' OR
                        ind_funcionario LIKE '%$busqueda[value]%' OR
                        fec_valido_desde LIKE '%$busqueda[value]%'
                          )
                        ";

        }
        $cond=false;

        if (strpos($sql, 'WHERE') !== false) {
            $cond=true;
        }

        if($dependenciaL!='' AND $dependenciaL!='false'){
            if ($cond){
                $sql .= " AND rh_c076_empleado_organizacion.fk_a004_num_dependencia=$dependenciaL ";
            }else{
                $sql .= " WHERE rh_c076_empleado_organizacion.fk_a004_num_dependencia=$dependenciaL ";
            }

        }
        if (strpos($sql, 'WHERE') !== false) {
            $cond=true;
        }

        if($estadoL != "" AND $estadoL !="false"){
            if ($cond){
                if ($estadoL == "Vencido"){
                    $sql .= " AND fec_valido_hasta < NOW( )";
                }elseif ($estadoL == "PorVencer"){
                    $sql .= " AND fec_valido_hasta > NOW( ) AND DATEDIFF( fe_c008_certificadosfii.fec_valido_hasta, CURDATE( ) ) <= 15 ";
                }else{
                    $sql .=" AND DATE(fe_c008_certificadosfii.fec_valido_hasta) >= DATE(NOW()) + INTERVAL 15 DAY AND rh_b001_empleado.num_estatus=1 ";
                }
            }else{
                if ($estadoL == "Vencido"){
                    $sql .= " WHERE fec_valido_hasta < NOW( )";
                }elseif ($estadoL == "PorVencer"){
                    $sql .= " WHERE fec_valido_hasta > NOW( ) AND DATEDIFF( fe_c008_certificadosfii.fec_valido_hasta, CURDATE( ) ) <= 15 ";
                }else{
                    $sql .=" WHERE DATE(fe_c008_certificadosfii.fec_valido_hasta) >= DATE(NOW()) + INTERVAL 15 DAY  AND rh_b001_empleado.num_estatus=1 ";
                }
            }

        }

        if (strpos($sql, 'WHERE') !== false) {
            $cond=true;
        }
        if($desdeV!='' AND $desdeV!='false' AND $hastaV!='' AND $hastaV!='false'){
            if ($cond){
                $sql .= " AND (fec_valido_hasta>='$desdeV 00:00:00' AND fec_valido_hasta<='$hastaV 23:59:59') ";
            }else{
                $sql .= " WHERE (fec_valido_hasta>='$desdeV 00:00:00' AND fec_valido_hasta<='$hastaV 23:59:59') ";
            }

        }
        if (strpos($sql, 'WHERE') !== false) {
            $cond=true;
        }
        if($desdeL!='' AND $desdeL!='false' AND $hastaL!='' AND $hastaL!='false'){
            if ($cond){
                $sql .= " AND (fec_valido_desde>='$desdeL 00:00:00' AND fec_valido_desde<='$hastaL 23:59:59') ";
            }else{
                $sql .= " WHERE (fec_valido_desde>='$desdeL 00:00:00' AND fec_valido_desde<='$hastaL 23:59:59') ";
            }

        }


        //var_dump($sql);
        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('pk_num_certificadofii','fk_rhb001_num_empleado','fec_valido_desde_format','fec_valido_hasta_format', 'ind_cedula','estatus_cert','ind_funcionario','ind_foto','num_estatus');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_certificadofii';
        $camposExtra = array("fk_rhb001_num_empleado","ind_certificado");

        if (in_array('FE-01-04-05-AD',$rol)) {
            $campos['boton']['Administrar'] = array("
                    <button class='btnAdministrarCert btn ink-reaction btn-raised btn-xs btn-info' title='Administrar Certificado' idCert='$clavePrimaria'  titulo='Administrar Certificado' >
                            <i class='md md-settings' style='color: #ffffff;'></i>
                    </button>
                ",'if( $i["num_estatus_estado"] == 1) { $valor2 = "#botonEval"; } else { $valor2 = ""; }');
        } else {
            $campos['boton']['Administrar'] = false;
        }
        if (in_array('FE-01-04-06-DE',$rol)) {
            $campos['boton']['Descargar'] = '
                    <button class="btnDescargarCert btn ink-reaction btn-raised btn-xs btn-danger" data-toggle="modal" data-target="#formModal" data-keyboard="false" data-backdrop="static" title="Descargar Certificado" idCert="'.$clavePrimaria.'" idEmpleado=fk_rhb001_num_empleado crt=ind_certificado>
                            <i class="md md-file-download" style="color: #ffffff;"></i>
                    </button>
                ';
        } else {
            $campos['boton']['Descargar'] = false;
        }

        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTablaListadoCert($sql,$campos,$clavePrimaria,$camposExtra);

    }

    public function metDataTablaListadoCert($sql,$listado,$clavePrimaria,$datosExtraBotones = false,$flagSistema = false)
    {

        #Instancio la clase principal del modelo
        $modelo = new Modelo();
        #Accedo a la base de datos desde el controlador
        $db = $modelo->metAccesoControladorDB();
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        #Parametros enviados desde el datatable
        $pagina = $this->metObtenerFormulas('draw');
        $limiteTabla = $this->metObtenerFormulas('length');
        $inicio = $this->metObtenerFormulas('start');
        $columnas = $this->metObtenerFormulas('columns');
        $orden = $this->metObtenerFormulas('order');
        $busqueda = $this->metObtenerFormulas('search');
        $busqueda = $busqueda['value'];
        $tituloColumna = $columnas[$orden[0]['column']]['data'];
        $ordenColumna = $orden[0]['dir'];
        if ($inicio == 0) {
            $inicio = '0';
        }
        if ($pagina > 1) {
            $inicio = ($inicio / $limiteTabla) + 1;
        }
        if ($inicio != 0) {
            $primerResultado = $limiteTabla * ($inicio - 1);
        } else {
            $primerResultado = 0;
        }
        #concateno el orden de la columna
        $sql .="ORDER BY $tituloColumna $ordenColumna ";
        $resultado = $db->prepare($sql);
        //times a español
        $db->query("SET lc_time_names = 'es_ES'");
        $resultado->execute();
        $numeroTotalRegistros = $resultado->rowCount();
        $arrayResultado['recordsTotal'] = $numeroTotalRegistros;
        $arrayResultado['recordsFiltered'] = $numeroTotalRegistros;
        $arrayResultado['draw'] = $pagina;
        $arrayResultado['length'] = $limiteTabla;
        #concateno el Limite de la consulta
        $sql .= "LIMIT $primerResultado, $limiteTabla ";
        $resultados2 = $db->prepare($sql);
        $resultados2->execute();
        $detalle = array();
        foreach ($resultados2->fetchAll(PDO::FETCH_ASSOC) AS $i) {

            //FOTO
            if(isset($i['ind_foto'])){
                $foto = $i['ind_foto'];
                $i['ind_foto'] = '<img class="img-circle width-0" src="'.BASE_URL.'publico/imagenes/modRH/fotos/'.$foto.'"/>';
            }else{
                $i['ind_foto'] = '<img class="img-circle width-0" src="'.BASE_URL.'publico/imagenes/modRH/fotos/foto.png"/>';
            }
            //ESTATUS CERTIFICADO
            if(isset($i['estatus_cert'])){
                if(strcmp($i['estatus_cert'],'Vigente')==0){
                    $i['estatus_cert'] = '<span class="badge style-primary">'.$i['estatus_cert'].'</span>';
                }
                elseif(strcmp($i['estatus_cert'],'Vencido')==0){
                    $i['estatus_cert'] = '<span class="badge style-danger">'.$i['estatus_cert'].'</span>';
                }else{
                    $i['estatus_cert'] = '<span class="badge style-warning">'.$i['estatus_cert'].'</span>';
                }
            }

            if(isset($i['num_estatus'])){
                if($i['num_estatus']==1){
                    $i['num_estatus'] = '<span class="badge style-success">Activo</span>';
                }
                else{
                    $i['num_estatus'] = '<span class="badge style-danger">No Activo</span>';
                }
            }



            #recorro los datos
            foreach ($listado AS $titulo => $valor){
                if(!is_array($valor)){
                    $detalle[$valor]=$i[$valor];
                }else{
                    $detalle['acciones'] = '';
                    foreach ($listado[$titulo] AS $titulo2 => $valor2){
                        if($titulo == 'boton'){

                            if(is_array($valor2)){
                                $valorArreglo = str_replace("$clavePrimaria", $i[$clavePrimaria], $valor2[0]);
                                $valorEval = str_replace("#botonEval", $valorArreglo, $valor2[1]);

                                eval($valorEval);
                            }else{
                                #sustituyo el parametro del texto de la clave primaria en el boton
                                # por el valor extraido de la base de datos
                                $valor2 = str_replace("$clavePrimaria", $i[$clavePrimaria], $valor2);
                            }
                            if($datosExtraBotones){
                                foreach ($datosExtraBotones AS $datoExtraBoton){
                                    $valor2 = str_replace("$datoExtraBoton", $i[$datoExtraBoton], $valor2);
                                }
                            }
                            $detalle['acciones'] .= "$valor2 ";
                        }
                    }
                }
            }
            $arrayResultado['data'][]=$detalle;
        }
        if (!isset($arrayResultado['data'])) {
            $arrayResultado['data'] = array();
        }
        echo json_encode($arrayResultado);

    }
    #encriptar archivo
    public function metEncriptar($data)
    {
        /*$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
        $encryptado=openssl_encrypt($data, "aes-256-cbc", $this->atKey, false, $iv);
        $e = base64_encode($encryptado."::".$iv);
        return str_replace("/", "(ces)", $e);*/
        $encriptado = base64_encode($data);
        return $encriptado;

    }
    #desencriptar archivo
    public function metDesencriptar($data)
    {
        /*$rw = str_replace("(ces)", "/", $data);
        list($encrypted_data, $iv) = explode('::', base64_decode($rw), 2);
        return openssl_decrypt($encrypted_data, 'aes-256-cbc', $this->atKey, false, $iv);*/
        $desencriptado = base64_decode($data);
        return $desencriptado;
    }

    #mostrar formulario para introducir la contraseña para la descarga del certificado
    public function metDescargar()
    {
        $crt = $_POST['crt'];
        $idcrt = $_POST['idcrt'];
        $idEmpleado = $_POST['idEmpleado'];
        $this->atVista->assign('certificado_encriptado', $crt);
        $this->atVista->assign('idEmpleado', $idEmpleado);
        $this->atVista->assign('idcrt', $idcrt);
        $this->atVista->metRenderizar('descargarFii', 'modales');
    }
    #verificar la contraseña
    public function metVerficarContrasena()
    {
        //primero verificamos que la contraseña introducida sea la correcta
        $pass  = $_GET['pass'];
        $idcrt = $_GET['idcrt'];
        $verificar = $this->atCertificados->metVerificarPassword($pass,$idcrt);
        if($verificar==1){
            echo json_encode($verificar);
        }else{
            echo json_encode(0);
        }

    }
    #Descargar Certificado
    public function metDescargarCertificado($idEmpleado,$crt)
    {
        $file = $this->metDesencriptar($crt);
        $path = 'publico/certificados/'.$idEmpleado.'/'.$file;
        $type = '';

        if (is_file($path)) {
            $size = filesize($path);
            if (function_exists('mime_content_type')) {
                $type = mime_content_type($path);
            } else if (function_exists('finfo_file')) {
                $info = finfo_open(FILEINFO_MIME);
                $type = finfo_file($info, $path);
                finfo_close($info);
            }
            if ($type == '') {
                $type = "application/force-download";//audio/mpeg audio/x-ms-wma
            }
            // Definir headers
            header("Content-Type: $type");
            header("Content-Disposition: attachment; filename=$file");
            header("Content-Transfer-Encoding: binary");
            header("Content-Length: " . $size);
            // Descargar archivo
            readfile($path);
        } else {
            die("El archivo no existe.");
        }

    }


}
