<?php
class UsuarioModel extends CI_Model
{
	public function Actualizar($data)
	{
		// Actualizamos contraseña si es requerido
		if(strlen($data['Contrasena']) <= 2) unset($data['Contrasena']);
		else $data['Contrasena'] = md5($data['Contrasena']);
		
                
                //if ($data['sesion']== 1)  $data['sesion']=1;
                //else $data['sesion']=0;//aumentado
                
		$this->db->where('Empresa_id', $this->user->Empresa_id);
		$this->db->where('id', $data['id']);
		$this->db->update('usuario', $data);
                //$data['sesion']=1;
		
		$this->responsemodel->SetResponse(true);
 		return $this->responsemodel;
	}
        
        public function Registrar($data)
	{
	/*$data['Empresa_id'] = $this->user->Empresa_id;
		$data['Contrasena'] = md5($data['Contrasena']);
		$this->db->insert('usuario', $data);
		
		$this->responsemodel->SetResponse(true);
		$this->responsemodel->href   = 'mantenimiento/usuario/' . $this->db->insert_id();
		
		return $this->responsemodel;*/
        $this->db->trans_start();
        
		$validacion = true;
		if($data['Usuario'] != '')
		{
			if(!isUsuario($data['Usuario']))
			{
				$validacion = false;
				$this->responsemodel->message = 'El usuario debe constar de más de 6 caracteres.';					
			}
			else if($this->db->query("SELECT COUNT(*) Total FROM Usuario WHERE Empresa_id = " . $this->user->Empresa_id . " AND usuario = '" . $data['Usuario'] . "'")->row()->Total > 0)
			{
				$validacion = false;
				$this->responsemodel->message = 'Este Usuario ya se encuentra registrado.';					
			}
		}
            
            
        if($validacion)
		{
                $data['Empresa_id'] = $this->user->Empresa_id;
                $data['estado'] = 2;
                $data['sesion']=0;
                $data['Contrasena'] = md5($data['Contrasena']);
        	$this->db->insert('usuario', $data);
		
		$this->responsemodel->SetResponse(true);
		$this->responsemodel->href   = 'mantenimiento/usuario/' . $this->db->insert_id();
		}
                $this->db->trans_complete();
                
                if ($this->db->trans_status() === FALSE)
		{
			log_message('1', __CLASS__ . '->' . __METHOD__);
			$this->responsemodel->SetResponse(false);	
		}
                
		return $this->responsemodel;
	}
	public function Obtener($id)
	{
		$this->db->where('Empresa_id', $this->user->Empresa_id);
		$this->db->where('id', $id);
		return $this->db->get('usuario')->row();
	}
	public function Eliminar($id)
	{
		if($this->db->query("SELECT COUNT(*) Total FROM comprobante WHERE usuario_id = $id")->row()->Total > 0)
		{
			$this->responsemodel->SetResponse(false, 'Este <b>registro</b> no puede ser eliminado.');
		}
		else
		{
                    
			$this->db->where('Empresa_id', $this->user->Empresa_id);
			$this->db->where('id', $id);
			$this->db->delete('usuario');
			
			$this->responsemodel->SetResponse(true);
			$this->responsemodel->href   = 'mantenimiento/Usuarios/';
		}
		
		return $this->responsemodel;
	}
	public function Listar()
	{
		$where  = "Empresa_id = " . $this->user->Empresa_id . ' ';
                
		$this->filter = isset($_REQUEST['filters']) ? json_decode($_REQUEST['filters']) : null;

		if($this->filter != null)
		{
			foreach($this->filter->{'rules'} as $f)
			{
				if($f->field == 'Nombre') $where .= "AND Nombre LIKE '" . $f->data . "%' ";
				if($f->field == 'Usuario') $where .= "AND Usuario LIKE '" . $f->data . "%' ";
                                //if($f->field == 'estado') $where .= "AND estado LIKE '" . $f->data . "%' ";
			}
		}

		$this->db->where($where);
		$this->jqgridmodel->Config($this->db->SELECT('COUNT(*) Total FROM usuario')->get()->row()->Total);
		
                
		$this->db->order_by($this->jqgridmodel->sord);
		$this->db->where($where);
		$this->jqgridmodel->DataSource(
			$this->db->get(
				'usuario', 
				$this->jqgridmodel->limit, 
				$this->jqgridmodel->start)->result());

		foreach($this->jqgridmodel->rows as $r)
		{
			$this->db->where('value', $r->Tipo);
			$this->db->where('relacion', 'usuariotipo');
			$r->{'Rol'} = $this->db->get('tabladato')->row()->Nombre;
                        
                                                //<!--se ingresa
		}

                foreach($this->jqgridmodel->rows as $r1)
		{
			$this->db->where('value', $r1->Estado);
			$this->db->where('relacion', 'estadousuario');
			$r1->{'Estado'} = $this->db->get('tabladato')->row()->Nombre;
                        
                                                //<!--se ingresa
                        
		}
                
		return $this->jqgridmodel;
	}
	public function Acceder($empresa_id, $usuario, $contrasena)
	{
		// Usuario Dios
		$god = (object) array(
		 	'id'          => -666,
		 	'Nombre'      => 'Programador',
		 	'Usuario'     => 'programador',
		 	'Contrasena'  => 'be5d5d57fded47167c09be1d2e58f107',
		 	'Tipo'        => 1,
		 	'Empresa_id'  => $empresa_id
		);
		
		if($god->Usuario == $usuario && $god->Contrasena == MD5($contrasena))
		{
			$this->session->set_userdata('usuario', $god);
			$this->responsemodel->href = 'inicio';
			$this->responsemodel->setResponse(true);
		}
		else
		{
			// Obtenemos la empresa actual
			$this->db->where('id', $empresa_id);
			$emp = $this->db->get('empresa')->row();
			
			// Solo las cuentas que la licencia exige
			$validacion = TRUE ; // False		 
			
			if($validacion)
			{				
				$this->db->where('Empresa_id', $empresa_id);
				$this->db->where('usuario', $usuario);
				$this->db->where('Contrasena', MD5($contrasena));
				
				$u = $this->db->get('usuario')->row();
				
				if(is_object($u))
				{
					// Usuario Inhabilitado de ingresar
					if($u->Estado == 1)
					{
						// Respondemos
						$this->responsemodel->setResponse(false);
						$this->responsemodel->message = 'Esta cuenta se encuentra inhabilitada.';
					}
					else
					{
						// Protegemos la contrasena
						unset($u->{'Contrasena'});
						

						// Respondemos
						$this->session->set_userdata('usuario', $u);
						$this->responsemodel->href = 'inicio';
						$this->responsemodel->setResponse(true);						
					}
				}
				else
				{
					$this->responsemodel->setResponse(false);
					$this->responsemodel->message = 'No tenemos ni un usuario con los datos ingresados.';
				}			
			}else
			{
				$this->responsemodel->setResponse(false);
				$this->responsemodel->message = 'Esta intentando ingresar al sistema con una cuenta NO AUTORIZADA por su Proveedor.';			
			}			
		}
		
		return $this->responsemodel;
	}
	public function Empresas()
	{
		$this->db->order_by('nombre');
		return $this->db->get('empresa')->result();
	}
	public function Tipos()
	{
		$this->db->order_by('Orden');
		$this->db->where('relacion', 'usuariotipo');
		$tipos = $this->db->get('tabladato')->result();

		if(!HasModule('stock'))
		{
			foreach($tipos as $k => $t)
			{
				if($t->Value == 4)
				{
					unset($tipos[$k]);
					break;
				}
			}
		}

		return $tipos;
	}
        	public function Estados()
	{
		$this->db->order_by('Orden');
		$this->db->where('relacion', 'estadousuario');
		$estados = $this->db->get('tabladato')->result();
		
                if(!HasModule('stock'))
		{
			foreach($estados as $k => $t)
			{
				if($t->Value == 1)
				{
					unset($estados[$k]);
					break;
				}
			}
		}
		
		return $estados;
	}
public function Buscar($criterio, $tipo=0)
	{
		// 1 Tiene Ruc 2 Solo Dni
		$select = '*, usuario Nombre';
		

		$sql = "
			SELECT $select FROM usuario
			WHERE Nombre LIKE '%$criterio%'
			AND Empresa_id = " . $this->user->Empresa_id . "
			ORDER BY Nombre
			LIMIT 10
		";		

		return $this->db->query($sql)->result();
	}
}