<?php
/*****************************************************************************************************************************************
 * DEV: CONTRALORIA DE ESTADOS
 * PROYECTO: SISTEMA INTEGRAL ADMINISTRATIVO DE CONTRALORIAS DE ESTADOS
 * MODULO: Control de Documentos
 * PROCESO: Particulares
 * PROGRAMADORES:
 * | # |          NOMBRES Y APELLIDOS              |               CORREO               |          TELEFONO              |
 * | 1 |          Ana Hurtado                    |ahurtado@contraloriadebolivar.gob.ve   |         0416-6867197           |
 * |   |                                           |                                    |                                |
 * |___|___________________________________________|____________________________________|________________________________|
 *
 * VERSION
 *
 * |          PROGRAMADOR                  |          FECHA          |       VERSION      |
 * |               #1                      |        03-08-2015       |         1.0        |
 * |                                       |                         |                    |
 * |_______________________________________|_________________________|____________________|
 *
 *****************************************************************************************************************************************/


class particularControlador extends Controlador
{
    private $atTipoParticular;
	private $atPaisModelo;
    private $atEstadoModelo;
    private $atMunicipioModelo;
    private $atCiudadModelo;

    public function __construct()
    {
        parent::__construct();
		Session::metAcceso();
        $this->atTipoParticular=$this->metCargarModelo('particular');
		$this->atPaisModelo   = $this->metCargarModelo('pais',false,'APP');
        $this->atEstadoModelo = $this->metCargarModelo('estado',false,'APP');
        $this->atMunicipioModelo = $this->metCargarModelo('municipio',false,'APP');
        $this->atCiudadModelo = $this->metCargarModelo('ciudad',false,'APP');
		$this->atIdUsuario    = Session::metObtener('idUsuario');
    }

    //public function metIndex()
		public function metIndex()
	{
	     $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
		$js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);
	  	//$this->atVista->assign('listado',$this->atTipoParticular->metListarParticular());
		$this->atVista->metRenderizar('listado');
    }
	
	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(ind_nombre1,' ',ind_apellido1)  AS nombre_particular,
			a006.ind_nombre_detalle
			 FROM a003_persona  a003
			LEFT JOIN
            a006_miscelaneo_detalle a006 ON a006.pk_num_miscelaneo_detalle = a003.fk_a006_num_miscelaneo_det_tipopersona			
        ";
        if ($busqueda['value']) {
            #concateno la busqueda si existe, Nota: esto es obligatorio
            $sql .="
			    WHERE 
                (
					a003.ind_cedula_documento LIKE '%$busqueda[value]%' OR 
					a003.ind_nombre1 LIKE '%$busqueda[value]%' OR 
					a003.ind_nombre2 LIKE '%$busqueda[value]%' OR 
					a003.ind_apellido1 LIKE '%$busqueda[value]%' OR 
					a003.ind_apellido2 LIKE '%$busqueda[value]%'
				)				
            ";
        }
		//$sql .= " AND a006.cod_detalle IN ('PART','REP','OTRO','EMP') GROUP BY a003.pk_num_persona";
        //	$sql .= " GROUP BY a003.pk_num_persona";
        	//$sql .= "   ORDER BY a003.ind_cedula_documento ASC ";

		//echo $sql;
        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('ind_cedula_documento','ind_nombre1','ind_nombre2','ind_apellido1','ind_apellido2','num_estatus');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_persona';
        #construyo el listado de botones
        if (in_array('CD-01-03-01-04-02-M',$rol)) {
            $campos['boton']['Editar'] = '
					<button class="modificar logsUsuario btn ink-reaction btn-raised btn-xs btn-primary" data-toggle="modal" data-target="#formModal"
							data-keyboard="false" data-backdrop="static" idParticular="'.$clavePrimaria.'" title="Modificar" 
							descipcion="El Usuario a Modificado un Particular de Personas" titulo="Modificar Particular">
						<i class="fa fa-edit" style="color: #ffffff;"></i>
					</button>
                ';
        } else {
            $campos['boton']['Editar'] = false;
        }
        /*if (in_array('CD-01-03-01-04-03-E',$rol)) {
            $campos['boton']['Eliminar'] = '
 					<button class="eliminar logsUsuario btn ink-reaction btn-raised btn-xs btn-danger" idParticular="'.$clavePrimaria.'"  title="Eliminar" boton="si, Eliminar"
							descipcion="El usuario a eliminado un Particular" titulo="Estas Seguro?" mensaje="Estas seguro que desea eliminar el particular!!">
						<i class="md md-delete" style="color: #ffffff;"></i>
					</button>
                ';
        } else {
            $campos['boton']['Eliminar'] = false;
        }*/

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

    public function metConsultaCne()
    {
    

        $idCedula=$this->metObtenerInt('idCedula');
        $url="http://www4.cne.gov.ve/web/registro_electoral/ce.php?nacionalidad=V&cedula=$idCedula";


        $resource = self::getContent($url);
        $text = strip_tags($resource);

        $find1 = 'REGISTRO ELECTORAL';
        $pos1 = stripos($text, $find1);

        $find2 = 'ADVERTENCIA';
        $pos2 = stripos($text, $find2);

        if ( $pos1 AND $pos2 == FALSE ) {

            $patterns   = ['Cédula:', 'Nombre:', 'Estado:', 'Municipio:', 'Parroquia:', 'Centro:', 'Dirección:', 'SERVICIO ELECTORAL'];
            $patterns   = trim(str_ireplace($patterns, '|', self::clean($text)));
            $resource   = array_map('self::clean', explode("|", $patterns));
            $nombre     = self::formatearNombre($resource[2]);


            $response = [

                    'nacionalidad' => 'V'
                    , 'cedula' => $idCedula
                    , 'nombres' => $nombre[0]
                    , 'apellidos' => $nombre[1]
                    , 'completo' => $resource[2]
                    , 'mayor' => TRUE
                    , 'estado' => $resource[3]
                    , 'status' => 'correcto'

            ];
        }
        else
        {
            $response = [
                    'nacionalidad' => 'V'
                    , 'cedula' => $idCedula
                    , 'inscrito' => FALSE
                    , 'status' => '404'

            ];
        }







        echo json_encode($response);
        exit;

    } 
	
    public function metParticular($lista=false)
	{
	     $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
		
		  if(!$lista){
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);
			}
	  	$this->atVista->assign('listado',$this->atTipoParticular->metListarParticular());
        if($lista){
		$this->atVista->metRenderizar('listadoParticular','modales');
	     }else{
		$this->atVista->metRenderizar('listado');
        }
    }
	
	
	public function metpersona($persona=false)
	{
	     $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
		
		  if(!$persona){
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);
			}
	  	$this->atVista->assign('listado',$this->atTipoParticular->metListarTipoPart());
        if($persona){
		$this->atVista->metRenderizar('listadoEmpleado','modales');
	     }else{
		$this->atVista->metRenderizar('listado');
        }
    }



    public function metBuscarPersona()
    {
        $idCedula=$this->metObtenerInt('idCedula');
        $validacion = $this->atTipoParticular->metBuscarPersona($idCedula);

        echo json_encode($validacion);
        exit;

    }
	public function metdestinatario($destinatario=false)
	{
	     $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
		
		  if(!$destinatario){
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);
			}
	  	$this->atVista->assign('listado',$this->atTipoParticular->metListarTipoParticular());
        if($destinatario){
		$this->atVista->metRenderizar('listadoEmplDes','modales');
	     }else{
		$this->atVista->metRenderizar('listado');
        }
    }
	
    public function metCrearModificar()
    {
	
	 $js[] = 'modCD/modCDFunciones';
		 
	  $complementoJs =array(
            'inputmask/jquery.inputmask.bundle.min'
        );
        $this->atVista->metCargarJsComplemento($complementoJs);
		$this->atVista->metCargarJs($js);
		
        $valido=$this->metObtenerInt('valido');
        $idParticular=$this->metObtenerInt('idParticular');
        if($valido==1){
            $this->metValidarToken();
            $Excceccion=array('ind_apellido2','ind_nombre2','ind_email','ind_tipo_persona');
             $Excceccion2=array('ind_email');
		 
			$formula = $this->metValidarFormArrayDatos('form', 'formula', $Excceccion2);
            $ind = $this->metValidarFormArrayDatos('form', 'int');
            $txt = $this->metValidarFormArrayDatos('form', 'txt',$Excceccion);
            if ($formula != null && $ind == null && $txt==null) {
                $validacion = $formula;
            } elseif ($formula == null && $ind != null && $txt==null) {
                $validacion = $ind;
            } elseif($formula != null && $ind != null && $txt==null) {
                $validacion = array_merge($formula, $ind);
            } elseif($formula != null && $txt != null &&$ind == null) {
                $validacion = array_merge($formula, $txt);
            } elseif($ind != null && $txt != null && $formula == null) {
                $validacion = array_merge($ind, $txt);
            }else{
                $validacion = array_merge($ind, $txt,$formula);
            }


			
            if(in_array('error',$validacion)){
                $validacion['status']='error';
                echo json_encode($validacion);
                exit;
            }
       
            if(!isset($validacion['num_estatus'])){
                $validacion['num_estatus']=0;
            }

            if($idParticular==0){
                $id=$this->atTipoParticular->metCrearTipoParticular($validacion['ind_cedula_documento'],$validacion['ind_nombre1'],$validacion['ind_nombre2'],
				$validacion['ind_apellido1'],$validacion['ind_apellido2'],$validacion['ind_email'],$validacion['ind_tipo_persona'],
				$validacion['num_estatus'],$validacion['fk_a006_num_miscelaneo_det_tipopersona'],
				$validacion['fk_a010_num_ciudad']);
                $validacion['status']='nuevo';
            }else{
                $id=$this->atTipoParticular->metModificarTipoParticular($validacion['ind_cedula_documento'],$validacion['ind_nombre1'],$validacion['ind_nombre2'],
				$validacion['ind_apellido1'],$validacion['ind_apellido2'],$validacion['ind_email'],$validacion['ind_tipo_persona'],
				$validacion['num_estatus'],$validacion['fk_a006_num_miscelaneo_det_tipopersona'],
				$validacion['fk_a010_num_ciudad'],$idParticular);
                $validacion['status']='modificar';
            }

            if(is_array($id)){
                foreach ($validacion as $titulo => $valor){
                    if(strpos($id[2],$validacion[$titulo])){
                        $validacion[$titulo]='error';
                    }
                }
                $validacion['status']='errorSQL';
                echo json_encode($validacion);
                exit;
            }
            $validacion['idParticular']=$id;

            echo json_encode($validacion);
            exit;
        }

        if($idParticular!=0){
            $this->atVista->assign('formDB',$this->atTipoParticular->metMostrarTipoParticular($idParticular));
            $this->atVista->assign('idParticular',$idParticular);
			
			//var_dump($this->atTipoParticular->metMostrarTipoParticular($idParticular)); 
			//exit;
        }
		
		$PAIS = Session::metObtener('DEFAULTPAIS');
        $ESTADO = Session::metObtener('DEFAULTESTADO');
        $MUNICIPIO = Session::metObtener('DEFAULTMUNICIPIO');
        $CIUDAD = Session::metObtener('DEFAULTCIUDAD');
		$this->atVista->assign('DefaultPais',$PAIS);
        $this->atVista->assign('DefaultEstado',$ESTADO);
        $this->atVista->assign('DefaultMunicipio',$MUNICIPIO);
        $this->atVista->assign('DefaultCiudad',$CIUDAD);

	    /*PARA LISTAR SELECT PAISES, ESTADO, MUNICIPIO, CIUDAD*/
        $this->atVista->assign('listadoPais',$this->atPaisModelo->metListarPais(1));
        $this->atVista->assign('listadoEstado',$this->atEstadoModelo->metJsonEstado($PAIS));
        $this->atVista->assign('listadoMunicipio',$this->atMunicipioModelo->metJsonMunicipio($ESTADO));
        $this->atVista->assign('listadoCiudad',$this->atCiudadModelo->metJsonCiudad($ESTADO));	
		
		$miscelaneo=$this->atTipoParticular->metListarMiscelaneos();
        $this->atVista->assign('miscelaneo',$miscelaneo);
		
		$miscelaneop=$this->atTipoParticular->metListarMiscelaneosp();
        $this->atVista->assign('miscelaneop',$miscelaneop);

        $this->atVista->metRenderizar('CrearModificar','modales');
    }
	
    public function metEliminar()
    {
        $idParticular = $this->metObtenerInt('idParticular');
                    $id=$this->atTipoParticular->metEliminarTipoParticular($idParticular);
           
                $valido=array(
                    'status'=>'ok',
                    'idParticular'=>$id
                );

        echo json_encode($valido);
        exit;
    }

    /**
     *
     * @param string $url
     * @return string
     */
    private static function getContent($url)
    {
        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HEADER, FALSE);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        if (curl_exec($curl) === false)
        {
            echo 'Curl error: ' . curl_error($curl);
        }
        else
        {
            $return = curl_exec($curl);
        }
        curl_close($curl);

        return $return;
    }

    /**
     * Formatea el nombre de la persona según la cantidad de palabras que lo componen.
     *
     * Format the name of the person according to the number of words that compose it.
     *
     * @param string $text
     * @return string
     */
    private static function formatearNombre( $text )
    {
        $text = self::clean($text);
        $text = explode(' ', $text);
        switch ( count($text) ) {

            //Un nombre y un apellido
            case 2:
                $nombres = $text[0] ;
                $apellidos = $text[1];
                break;

            //Dos nombre y un apellido
            case 3:
                $nombres = $text[0] .' '. $text[1];
                $apellidos = $text[2];
                break;

            //dos nombre y dos apellidos
            case 4:
                $nombres = $text[0] .' '. $text[1];
                $apellidos = $text[2] .' '. $text[3];
                break;

            default:
                $count = count($text);
                $mitad = round($count/2);
                $nombres = $apellidos = '';
                for ($i=0; $i < $mitad; $i++) {
                    $nombres .= $text[$i] .' ';
                }
                for ($i=$mitad; $i < $count; $i++) {
                    $apellidos .= $text[$i].' ';
                }
                break;
        }

        return [trim($nombres), trim($apellidos)];

    }


    /**
     * Elimina saltos de líneas y tabulaciones.
     *
     * Eliminates line breaks and tab stops.
     *
     * @param string $value
     * @return string
     */
    private static function clean($value)
    {
        $patterns = array('\n', '\t');
        $r = trim(str_ireplace($patterns, ' ', $value));
        return str_ireplace("\r", "", str_replace("\n", "", str_replace("\t", "", $r)));
    }
	
}