<?php if ( ! defined('BASEPATH')) exit('No esta permitido el acceso directo al script');
/*Mauricio García - garmauco@gmail.com, developer@3mas1r.com*/
class Usuario_Model extends CI_Model {

	var $details;

    function validate_user( $documento, $password ) {
        //Construir una consulta para recuperar los datos del usuario
        //basado en el nombre de usuario y la contraseña recibida
        $this->db->from('usuario');
        $this->db->where("(documento = '$documento' )");
        $this->db->where( 'password', sha1($password) );
        $login = $this->db->get()->result();

        // Los resultados de la consulta se almacenan en $login.
        // Si existe un valor, entonces existe la cuenta de usuario y se valida
        if ( is_array($login) && count($login) == 1 ) {
            // se establecen los detalles de los usuarios en la propiedad $details de esta clase
            $this->details = $login[0];
            // Llama a set_session  para establecer variables de sesión del usuario a través de CodeIgniter

            return true;
        }

        return false;
    }

    function user_active( $documento ) {
        //Construir una consulta para recuperar los datos del usuario
        //basado en el nombre de usuario y la contraseña recibida
        $this->db->from('usuario');
        $this->db->where("(documento = '$documento')");
        $this->db->where('estado', '1');
        //$this->db->where('email',$username );
        $login = $this->db->get()->result();

        // Los resultados de la consulta se almacenan en $login.
        // Si existe un valor, entonces existe la cuenta de usuario y se valida
        if ( is_array($login) && count($login) == 1 ) {
            // se establecen los detalles de los usuarios en la propiedad $details de esta clase
            $this->details = $login[0];
            // Llama a set_session  para establecer variables de sesión del usuario a través de CodeIgniter
            $this->set_session();
            return true;
        }

        return false;
    }


    function set_session() {
        // session-> set_userdata es una función CodeIgniter que almacena los datos en el almacenamiento de la sesión de CodeIgniter
        //  Algunos de los valores se construyen para CodeIgniter , y otros se añaden
        $this->session->set_userdata( array(
                'id'=>$this->details->id,
                'documento'=>$this->details->documento,
								'nombre'=>$this->details->nombre,
								'apellido'=>$this->details->apellido,
                'rol'=>$this->details->rol,
                'modulo'=>$this->details->modulo,
                'isLoggedIn'=>true
            )
        );
    }

    /*Actualizar ultimo login*/
	public function last_activity($documento){
	    if(!empty($documento)){
		    $array = array(
						'ultima_actividad' => date('Y-m-d H:i:s')

		    );
		    $this->db->where('documento', $documento);
		    $this->db->update('usuario', $array);
	    }



	}

    /*Actualizar datos del registro*/
	public function update($id, $documento, $email, $nombre, $apellido, $genero, $password=NULL, $imagen=NULL, 
	$rol, $eps, $afp, $arl, $ccf, $estado){
	    if(!empty($password)){
	        $password=sha1($password);
		    $array = array(
						'id' => $id,
						'documento' => $documento,
						'email' => $email,
				        'nombre' => $nombre,
			      		'apellido' => $apellido,
						'genero' => $genero,
						'password' => $password,
						'imagen' => $imagen,
						'rol' => $rol,
						'eps' => $eps,
						'afp' => $afp,
						'arl' => $arl,
						'ccf' => $ccf,
						'estado' => $estado,

		    );
	    }
	    else{
	        $array = array(
						'id' => $id,
						'documento' => $documento,
						'email' => $email,
			      		'nombre' => $nombre,
			      		'apellido' => $apellido,
						'genero' => $genero,
						'imagen' => $imagen,
						'rol' => $rol,
						'eps' => $eps,
						'afp' => $afp,
						'arl' => $arl,
						'ccf' => $ccf,
						'estado' => $estado,

		    );
	    }
		$this->db->where('id', $id);
		$this->db->update('usuario', $array);

	}

	function  create_new_user( $documento, $email, $nombre, $apellido, $genero, $password, $imagen=NULL, 
	$rol, $eps, $afp, $arl, $ccf, $estado, $ultimo_login=NULL ) {
      $arrayDatos = array(
            'documento' => $documento,
			      'email' => $email,
			      'nombre' => $nombre,
						'apellido' => $apellido,
						'genero' => $genero,
						'password' => sha1($password),
						'imagen' => $imagen,
						'rol' => $rol,
						'eps' => $eps,
						'afp' => $afp,
						'arl' => $arl,
						'ccf' => $ccf,
						'estado' => $estado,
						'ultima_actividad' => date('Y-m-d H:i:s')
		);

		$this->db->insert('usuario', $arrayDatos);
		/*
		$last_id = $this->db->insert_id();
		foreach($arrayDatos as $campo=>$valor)
	    {

		  if ($campo!=""){
		   $datos_auditoria = array( 'fecha' => date,
			            'hora' => time,
			            'usuario' => $this->session->userdata('id'),
			            'tabla' => 'usuario',
						'id_campo' => $last_id,
						'nombre_campo' => $campo,
						'valor' => $valor,
		            );
		   $this->db->insert('auditoria_insert', $datos_auditoria);
		  }
	    }
		*/
    }

    function get_roles(){
        $this->db->from('rol');
        $this->db->order_by('nombre');
        $result = $this->db->get();
        $return = array();
        if($result->num_rows() > 0) {
            foreach($result->result_array() as $row) {
                $return[$row['id']] = $row['nombre'];
            }
        }
        return $return;
    }

     /*obtener rol para login*/
    function usuario_rol( $documento ) {
    	$this->db->select('rol');
    	$this->db->from('usuario');
    	$this->db->where('documento', $documento);
    	$query = $this->db->get();
    	//print_r($this->db->last_query());
    	//die();
    	$val = $query->row();
    	return $val->rol;
    }
    /*consulta para obtener los datos segun el id que se envie*/
	public function edit($id){
		$this->db->select("id, documento, email,  nombre, apellido, genero, rol, eps, afp, arl, ccf, estado");
		$this->db->from('usuario')->where('id', $id);
		$query = $this->db->get();

		if ($query->num_rows() > 0){
			return $query->result();
		}
	}

	/*eliminar Registro*/
	public function delete($id){
		$this->db->delete('usuario', array('id' => $id));/*Eliminamos datos*/
	}

    private function getPhoto() {
      $photo_names = array();

      foreach(glob('template/img/photos/*.png') as $photo_filename){
        $photo_filename =   str_replace("template/img/photos/","",$photo_filename);
        array_push($photo_names, str_replace(".png","",$photo_filename));
      }

      return $photo_names[array_rand($photo_names)];
    }

    public function get($id)
    {
        $this->db->where('id', $id);
        $query = $this->db->get('usuario');

        return $query->row();
    }

    /*Consulta para obtener datos de todos los registros*/
    public function get_all()
    {
        $this->db->select('u.id, u.documento, u.nombre, u.apellido, r.nombre AS rol, u.estado');
				$this->db->from('usuario u');
				$this->db->join('rol r', 'r.id = u.rol', 'INNER');
                if ($this->session->userdata('rol') == 2 ){
                    $this->db->where('u.rol >', 1);
                }
				$query = $this->db->get();

				return $query->result();
				echo json_encode($query->result());
    }

		/*cambiar contraseña desde la plataforma y logeado*/
		public function Change_password($contraactual, $contranueva){
			  $this->db->select('id');
        $this->db->where('id',$this->session->userdata('id'));
        $this->db->where('password',sha1($contraactual));
        $query=$this->db->get('usuario');

        if ($query->num_rows() > 0)// si la consulta de id usuario = session id + password =  $contraactual, devuelve un resultado
         {
            $data = array(
              'password' => sha1($contranueva)
             );
            $this->db->where('id',$this->session->userdata('id'));
            $this->db->where('password',sha1($contraactual));
                if($this->db->update('usuario', $data))
                {
                    return 1; // Contraseña cambiada con éxito
                }else{
                    return 2; // Algo no funcionó, la contraseña no se Actualizo
                }
         }else{
            return 3; //Contraseña Actual incorrecta;
         }

	}

    /*Compara que la cedula de usuario no este registrado*/
    public function documento_duplicate($id=NULL, $documento){
        $documentoDB='';
        $queryVal = $this->db->where('id', $id)->get('usuario');
        $row =  $queryVal->row();
        if (!empty($row))
            $documentoDB = $row->documento;
        /*comparamos que la cedula a Actualizar sea diferente al que tiene registrado*/
        if ($documentoDB !== $documento){
			$query = $this->db->get_where('usuario', array('documento' => $documento));
			if ($query->num_rows() > 0) {
	  		// Mostrar error si la cedula ya existe en la base de datos
				return TRUE;
			} else {
			  // Actualizar
				return FALSE;
			}
		}
		else{
			// Actualizar
			return FALSE;
		}
	}



    /*Compara que el Email a actualizar no este registrado en otro Usuario*/
	public function email_duplicate($id, $email){
        $emailDB='';
		$queryVal = $this->db->where('id', $id)->get('usuario');
        $row =  $queryVal->row();
        if (!empty($row))
            $emailDB = $row->email;
        /*comparamos que el Email a Actualizar sea diferente al que tiene registrado*/
        if ($emailDB !== $email){
			$query = $this->db->get_where('usuario', array('email' => $email));
			if ($query->num_rows() > 0) {
	  		// Mostrar error si el Email ya existe en la base de datos
				return TRUE;
			} else {
			  // Actualizar
				return FALSE;
			}
		}
		else{
			// Actualizar
			return FALSE;
		}
	}



    function roles(){
        $this->db->from('rol');
        if ($this->session->userdata('rol') == 2 ){
             $this->db->where('id >', 1);
        }
        
        $this->db->order_by('id');
        $result = $this->db->get();
        
        $return = array();
        $rows = $result->result_array();
        if($result->num_rows() > 0) {
        	$return[''] = "Seleccione un Rol*";
            foreach($rows as $row) {
                $return[$row['id']] = $row['nombre'];
            }
        }
        return $return;
    }


    function users_online($tiempo){
        //$time = date('Y-m-d H:i:s')-15;

        $last_min = date('Y-m-d H:i:s', strtotime('-'.$tiempo.' minutes'));
        $this->db->select('u.nombre AS nombre, u.apellido AS apellido, r.nombre AS rol, u.ultima_actividad AS actividad');
		$this->db->from('usuario u');
		$this->db->join('rol r', 'r.id = u.rol', 'INNER');
        $this->db->where('ultima_actividad >=', $last_min);
		$query = $this->db->get();
        //print_r($this->db->last_query());
		//die();
		return $query->result();
    }



		/*======================LOGIN=============================*/

		//Comprueba que el email se encuentre registrado
		 function email_exists($email){
			$this->db->select('id, documento, nombre');
			$this->db->from('usuario');
			$this->db->where('email', $email);
			$query = $this->db->get();
			//print_r($this->db->last_query());
			//die();
			return $query->row();
		}

		//Se actualiza en plano la fecha del token cuando se solicita cambio de contraseña
		function update_date_recover_pass($id,$token){
			if (!empty($id)){
				$array = array(
					'fecha_cambio_pass' => date('ymdHi'),
					'token' => $token
				);
				$this->db->where('id', $id);
				$this->db->update('usuario', $array);
			}
		}

		//consulta para verificar el id del usuario que llega del url, la consulta devuelve otros parametros para seguir la comprobacion
		function verify_user_reset_pass($id){
			$this->db->select('documento, fecha_cambio_pass, token');
			$this->db->from('usuario');
			$this->db->where('id', $id);
			$query = $this->db->get();
			//print_r($this->db->last_query());
			//die();
			if($query->num_rows() > 0) {
					return $query->row();
			}


		}
		function verify_current_password($id, $password){
			$this->db->select('id');
			$this->db->where('id',$id);
			$this->db->where('password',sha1($password));
			$query=$this->db->get('usuario');

			if ($query->num_rows() > 0)// si la consulta de id usuario = session id + password =  $contraactual, devuelve un resultado
				return TRUE;
			else {
				return FALSE;
			}
		}
		function password_update_reset($id, $password){
			$data = array(
				'password' => sha1($password)
			 );
			$this->db->where('id',$id);
			$this->db->update('usuario', $data);
		}


/*======================MODULOS========================**/
/*
function modulo_permiso( $name_module, $rol ) {
	$this->db->select('permisos');
	$this->db->from('modulos');
	$this->db->where('nombre', $name_module);
	$this->db->where('rol', $rol);
	$query = $this->db->get();
	//print_r($this->db->last_query());
	//die();
	$val = $query->row();
	return $val->permisos;
}
*/
/* ============================== IMPORTAR USUARIOS ============================== */
/*
function select()
 {
  $this->db->order_by('id', 'DESC');
  $query = $this->db->get('usuario');
  return $query;
 }

 function insert($data)
 {
  $this->db->insert_batch('usuario', $data);
 }
 */
 

public function sanear_string($string)
{

	$string = trim($string);

	$string = str_replace(
		array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
		array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
		$string
	);

	$string = str_replace(
		array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
		array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
		$string
	);

	$string = str_replace(
		array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
		array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
		$string
	);

	$string = str_replace(
		array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
		array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
		$string
	);

	$string = str_replace(
		array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
		array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
		$string
	);

	$string = str_replace(
		array('ñ', 'Ñ', 'ç', 'Ç'),
		array('n', 'N', 'c', 'C',),
		$string
	);

	//Esta parte se encarga de eliminar cualquier caracter extraño
	$string = str_replace(
		array("¨", "º", "-", "~",
			"#", "@", "|", "!",
			"·", "$", "%", "&", "/",
			"(", ")", "?", "'", "¡",
			"¿", "[", "^", "<code>", "]",
			"+", "}", "{", "¨", "´",
			">", "< ", ";", ",", ":",
			".", " "),
		'',
		$string
	);


	return $string;
}

 function codigo_cargo($cargo){
	$cargo_str=strtoupper($this->sanear_string($cargo));
	$encontrado=FALSE;
	$this->db->select('id, nombre');
	$this->db->from('cargo');
	$query = $this->db->get();
	
	$rows = $query->result_array();
	
	if($query->num_rows() > 0) {
		foreach($rows as $row) {
			$cargoDB=strtoupper($this->sanear_string($row['nombre']));
			if ($cargo_str == $cargoDB){// si se encuentra coincidecia en cadena de busqueda con nombre en la base de datos
				$cargo_id=$row['id'];
				$encontrado = TRUE;
			}
		}
		if ($encontrado == TRUE){
			return $cargo_id;
		}
		else{
			$arrayDatos = array( 
				'nombre' => $cargo,
				'estado' => '1',
			);
			$this->db->insert('cargo', $arrayDatos);
			$cargo_id = $this->db->insert_id();
			return  $cargo_id; // Si no se encuentra coincidencia se agrega y devuelve el id
		}
	}
 }

 function nombre_cargo($id_cargo){
	$this->db->select("nombre");
	$this->db->from("cargo");
	$this->db->where('id', $id_cargo);
	$query = $this->db->get();
	$val = $query->row();

	return $val->nombre;
}

 function codigo_empresa($empresa=NULL){
	if ($empresa != NULL){
		$empresa_str=$this->sanear_string($empresa);
		$encontrado=FALSE;
		$this->db->select('id, nit');
		$this->db->from('empresa');
		$query = $this->db->get();
		
		$rows = $query->result_array();
		if($query->num_rows() > 0) {
			foreach($rows as $row) {
				$empresaDB=$this->sanear_string($row['nit']);
				if ($empresa_str == $empresaDB){// si se encuentra coincidecia en cadena de busqueda con nombre en la base de datos
					$empresa_id=$row['id'];
					$encontrado=TRUE;
				}
			}
			if ($encontrado == TRUE){
				return $empresa_id; // se retorna el codigo encontrado en la tabla cargos
			}
			else{
				return 0;//empresa no existe
			}
		}
	}
	else{
		return NULL;
	}
 }


 function seguridad_social($tabla, $codigo=NULL){
	//if ($codigo != NULL){
		if(is_numeric($codigo)) {
			$this->db->select("nombre");
			$this->db->from($tabla);
			$this->db->where('codigo', $codigo);
			$query = $this->db->get();
			$val = $query->row();

			return $val->nombre;
		}
		else{
			return $codigo;
		}
	/*}
	else{
		return $codigo;
	}
	*/
}
function empresas(){
	$this->db->from('empresa');
			$this->db->where('estado','1');
	$this->db->order_by('nombre');
	$result = $this->db->get();
	$return = array();
	$rows = $result->result_array();
	if($result->num_rows() > 0) {
		$return['T'] = "Todas las Empresas";
		foreach($rows as $row) {
			$return[$row['id']] = $row['nombre'];
		}
	}
	return $return;
}

function contrato_existe($empresa,$usuario,$fecha_inicial){
		$query = $this->db->get_where('contrato', array('empresa' => $empresa, 'usuario' => $usuario, 'fecha_inicial' => $fecha_inicial));
		if ($query->num_rows() > 0) {
		  // NO INSERTAR CONTRATO DUPLICADO
			return TRUE;
		} else {
		  // INSERTAR CONTRATO
			return FALSE;
		}
}

function documento_existe($documento=NULL){
		if ($documento != NULL){
			$query = $this->db->get_where('usuario', array('documento' => $documento));
			if ($query->num_rows() > 0) {
	  		// NO INSERTAR USUARIO DUPLICADO
				return 0;
			} else {
			  // INSERTAR USUARIO
				return 1;
			}
		}
		else{
			// NO INSERTAR USUARIO DATO VACIO
			return 2;
		}
}

function id_usuario($documento){
	$this->db->select("id");
	$this->db->from("usuario");
	$this->db->where('documento', $documento);
	$query = $this->db->get();
	$val = $query->row();

	return $val->id;
}

private $_batchImport;
 
public function setBatchImport($batchImport) {
	$this->_batchImport = $batchImport;
}

// save data
public function importData($table) {
	$data = $this->_batchImport;
	//print_r($data); die();
	$this->db->insert_batch($table, $data);
	//print_r($this->db->last_query());
	//	die();
}

// get users list
public function usersList() {
	$this->db->select(array('u.documento', 'u.nombre', 'u.apellido', 'u.genero'));
	$this->db->from('usuario as u');
	$query = $this->db->get();
	return $query->result_array();
}




}//end class Login




/* End of file usuario_model.php */
/* Location: ./application/models/Usuario_model.php */
