<?php
/*****************************************************************************************************************************************
 * DEV: CONTRALORIA DE ESTADOS
 * PROYECTO: SISTEMA INTEGRAL ADMINISTRATIVO DE CONTRALORIAS DE ESTADOS
 * MODULO: Control de Visitas
 * PROCESO: Registro de Visitas
 * PROGRAMADORES:
 * | # |          NOMBRES Y APELLIDOS              |               CORREO               |          TELEFONO              |
 * | 1 |          Sergio Zabaleta                  |zsergio01@gmail.com                 |         0414-3638131           |
 * |   |                                           |                                    |                                |
 * |___|___________________________________________|____________________________________|________________________________|
 *
 * VERSION
 *
 * |          PROGRAMADOR                  |          FECHA          |       VERSION      |
 * |               #1                      |        04-12-2015       |         1.0        |
 * |                                       |                         |                    |
 * |_______________________________________|_________________________|____________________|
 *
 *****************************************************************************************************************************************/

class visitaControlador extends Controlador
{
    private $atVisita;
    private $atConsultarVisita;
    private $atOrganismo;
    private $atListarVisitas;
    //private $atUsuarioModelo;

    public function __construct()
    {
        parent::__construct();
        Session::metAcceso();
        $this->atVisita = $this->metCargarModelo('registrarVisitas', 'visita');
        $this->atConsultarVisita = $this->metCargarModelo('consultarVisitas','consultarVisitas');
        //$this->atUsuarioModelo = $this->metCargarModelo('usuarioModelo','modelos');
        //$this->atIdUsuario = Session::metObtener("idUsuario");
    }

    public function metIndex()
    {

        $this->atVista->assign('visitasRegistradas', $this->atVisita->atListarVisitas->metMostrarVisita());
       // $this->atVista->assign('listado', $this->atVisita->metListarPersona());
        $this->atVista->metRenderizar('listadoPersona','modales');
    }

    public function metRegistrarVisita ()
    {
        header( "Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
        header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
        header( "Cache-Control: no-cache, must-revalidate" );
        header( "Pragma: no-cache" );
        //$js[] = 'Aplicacion/appFunciones';
        //$complementosJs[] = 'JPEGCam/webcam';

        //$this->atVista->metCargarJs($js);
        //$this->atVista->metCargarJsComplemento($complementosJs);

        $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[] = 'materialSiace/core/demo/DemoTableDynamic';
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarCssComplemento($complementoCss);
        $this->atVista->metCargarJs($js);

        $valido=$this->metObtenerInt('valido');
        $idVisita=$this->metObtenerInt('idVisita');
        $idPersona=$this->metObtenerInt('idPersona');
        if($idPersona){
            $validarPersona=$this->atVisita->atListarVisitas->metMostrarVisita($idPersona);
            if($validarPersona){
                echo "Tienes que darle salida primero";
                exit;
            }
        }

        if($valido==1){
            $this->metValidarToken();
            $excepcion=array('num_estatus','id_ente','proveedor','asisA','txt_observacion');
            $alphaNum=$this->metValidarFormArrayDatos('form','alphaNum',$excepcion);
            $ind=$this->metValidarFormArrayDatos('form','int',$excepcion);
            $foto = $this->metValidarFormArrayDatos('form','formula');


            if($ind!=null && $alphaNum == null){
                $validacion=$ind;
            }elseif($ind==null && $alphaNum != null){
                $validacion=$alphaNum;
            }else{
                $validacion=array_merge($ind, $alphaNum, $foto);
            }

            if (in_array('error', $validacion)) {
                $validacion['status'] = 'error';
                echo json_encode($validacion);
                exit;
            }
            if($idVisita==0){
                $pos = strpos($validacion['fk_a006_num_miscelaneo_detalle_destino'], 'D');
                if ($pos === false) {
                    $destino = preg_replace('/[^0-9 .,]/', '', $validacion['fk_a006_num_miscelaneo_detalle_destino']);
                    $dependencia = null;
                } else {
                    $destino = null;
                    $dependencia = preg_replace('/[^0-9 .,]/', '', $validacion['fk_a006_num_miscelaneo_detalle_destino']);
                }



                $id=$this->atVisita->metRegistrarEntrada(
                    $validacion['idPersona'], $validacion['ind_tipo_visita'], $validacion['id_ente'], $validacion['proveedor'],
                    $destino, $dependencia, $validacion['asisA'], $validacion['fk_a006_num_miscelaneo_detalle_motivo_visita'],$validacion['ind_foto'], $validacion['txt_observacion']
                );
                $validacion['status']='registrarEntrada';


            }
            if(is_array($id)){
                //var_dump($id);exit;

                foreach ($validacion as $titulo => $valor){
                    if(strpos($id[2],$validacion[$titulo])){
                        $validacion[$titulo]='error';
                    }
                }

                $validacion['status']='errorSQL';
                echo json_encode($validacion);
                exit;
            }
            $validacion['idVisita']=$id;
            echo json_encode($validacion);
            exit;
        }


        if($idVisita!=0){
            $this->atVista->assign('formDB',$this->atVisita->metMostrarVisita($idVisita));
            $this->atVista->assign('idVisita',$idVisita);

        }
        $destino=array();
        foreach($this->atVisita->metListarDependencias() AS $i){
            $destino[] = array(
                'id'=>'D'.$i['pk_num_dependencia'],
                'nombre'=>$i['ind_dependencia']
            );
        }
        foreach($this->atVisita->metMostrarSelect('CVDESVIS') AS $i){
            $destino[] = array(
                'id'=>'M'.$i['pk_num_miscelaneo_detalle'],
                'nombre'=>$i['ind_nombre_detalle']
            );
        }

        $this->atVista->assign('prueba',ROOT);

        $formDB = $this->atVisita->metListarPersona($idPersona);
        $formSancion = $this->atConsultarVisita->metConsultarSancion($formDB['ind_cedula_documento']);

        $organoControlFiscal="";
        if (count($formSancion)>0){
            $organoControlFiscal=$formSancion[0]['ind_descripcion_empresa'];
        }

        $this->atVista->assign('idPersona',$idPersona);
        $this->atVista->assign('formDB', $formDB);
        $this->atVista->assign('formSancion', $formSancion);
        $this->atVista->assign('organoControlFiscal', $organoControlFiscal);
        //var_dump($formSancion);exit;
        $this->atVista->assign('ente', $this->atVisita->metListarEntes());
        $this->atVista->assign('destino', $destino);
        $this->atVista->assign('motivo', $this->atVisita->metMostrarSelect('CVMOTVIS'));

        $this->atVista->metRenderizar('registrarVisita','modales');
    }

    public function metRegistrarSalida()
    {
        $idVisita = $this->metObtenerInt('idVisita');
          if ($idVisita != 0) {
            $id = $this->atVisita->metRegistrarSalida($idVisita);
            if (is_array($id)) {
                $valido = array(
                    'status' => 'error',
                    'mensaje' => 'Disculpa. Pero el Motivo se encuentra en uso y no se puede eliminar'
                );
            } else {
                $valido = array(
                    'status' => 'ok',
                    'idVisita' => $id
                );
            }
        }
        echo json_encode($valido);
        exit;
    }

    public function metCargarFoto($ci)
    {
        $fecha=date("Y-m-d_H:i:s");
        $foto = $_POST['foto'];
        $base = explode(',', $foto);
        $data = base64_decode($base[1]);
        $fotoname = /*ROOT.*/'/home/www/archivos/publico'.DS.'imagenes'.DS.'modCV'.DS."fotosVisitantes".DS.$ci.'_'.$fecha.'.jpg';//nombre del archivo
        $result = file_put_contents( $fotoname, $data );//renombramos la fotografia y la subimos

        $url=array();

        if (!$result) {
            exit("No se pudo subir al servidor");
        }


        if(BASE_URL_ARCHIVOS != '/'){
            $base=BASE_URL_ARCHIVOS;
        }else{
            $base='http://'.$_SERVER['HTTP_HOST'].'/';
        }
        //$base='http://'.$_SERVER['HTTP_HOST'].'/';

        $url = $base.'publico/imagenes/modCV/fotosVisitantes/'.$ci.'_'.$fecha.'.jpg';

        print $url;
    }

    public function metEliminarFoto()
    {
        $foto=$_POST['foto'];
        $json="";
        if (is_file($foto)) {
            chmod($foto,0777);
            if(!unlink($foto)) {
                echo false;
            }
            echo $json['success'] = true;
        } else {
            echo false;
        }
    }

    /**
     * Aqui mostramos la modal para el registro de una novedad
     */
    public function metRegistrarNovedad()
    {
        # code...

        $form = array(
            'fec_fecha_novedad'   => date('d-m-Y'),
            'nombreUsuario' => Session::metObtener('nombreUsuario'),
            'idUsuario' => Session::metObtener('idUsuario')
        );
        $this->atVista->assign('form',$form);
        $this->atVista->metRenderizar('registrarNovedad','modales');
    }

    /**
     * Aqui recibimos los datos de la modal para guardar la novedad
     */
    public function metGuardarNovedad()
    {
        # code...
        $formAlphaNum=$this->metObtenerTexto('form','alphaNum');
        if(!empty($formAlphaNum)) {
            foreach ($formAlphaNum as $tituloAlphaNum => $valorAlphaNum) {
                if (!empty($formAlphaNum[$tituloAlphaNum]) && $formAlphaNum[$tituloAlphaNum] != '') {
                    $validacion[$tituloAlphaNum] = $valorAlphaNum;
                } else {
                    $validacion[$tituloAlphaNum] = 'error';
                }
            }
        }
        if($validacion['ind_observaciones']!=='error' && strlen($validacion['ind_observaciones']) <=10){
            $validacion['ind_observaciones']='error';
        }
        /*if($validacion['ind_foto']=='error'){
            $validacion['ind_foto']='1';
        }*/
        if(in_array('error',$validacion)){
            $validacion['status']=false;
            echo json_encode($validacion);
            exit;
        }else{
            if($this->atVisita->metRegistrarNovedad($validacion)){
            //if(true){
                $validacion['status'] = true;
                echo json_encode($validacion);
                exit;
            }else{
                $validacion['status']=false;
                echo json_encode($validacion);
                exit;
            }

        }
        //$validacion['idUsuario'] = Session::metObtener('idUsuario');
        //$validacion['usuario'] = 'prueba';
        //$validacion['usuario'] = $this->atUsuarioModelo2->metMostrarUsuario(Session::metObtener('idUsuario'));
        //$validacion['usuario'] = $atUsuarioModelo->metMostrarUsuario(Session::metObtener('idUsuario'));
        /*$valido = array(
            'status' => false,
            'idUsuario' => Session::metObtener('idUsuario')
        );
        echo json_encode($validacion);
        exit;*/
    }

    public function metJsonDataTabla()
    {
        #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 a003.*, CONCAT(a003.ind_nombre1,' ',a003.ind_apellido1) as nombrecompleto FROM  a003_persona a003 WHERE 1 
        ";
        if ($busqueda['value']) {
            $sql .= " AND
                        (
                        ind_cedula_documento LIKE '%$busqueda[value]%' OR
                        ind_nombre1 LIKE '%$busqueda[value]%' OR
                        ind_apellido1 LIKE '%$busqueda[value]%'
                        )
                        ";
        }

        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('pk_num_persona','ind_cedula_documento','nombrecompleto');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_persona';



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

    }

}
