public void CompletarValores(string id)
    {
      int idPerfil = id.ValidaEntero("id_perfil");
      IList<co_ca_opciones> listNoDisponibles = new List<co_ca_opciones>();
      IList<co_ca_opciones> listOpciones = new bf_ca_opciones().GetData(new co_ca_opciones());
      IList<co_ca_opciones> listDisponibles = new List<co_ca_opciones>();

      IList<co_ca_perfilesopciones> listOpcionesNoDisponibles = new bf_ca_perfilesopciones().GetData(new co_ca_perfilesopciones { id_perfil = { id = idPerfil } });

      foreach (co_ca_opciones opcion in listOpciones)
      {
        bool sw = true;
        var opcion1 = opcion;
        foreach (co_ca_perfilesopciones disponible in listOpcionesNoDisponibles.Where(c => c.id_opcion.id == opcion1.id_opcion).Select(opciones => new co_ca_perfilesopciones()))
        {
          sw = false;
        }
        if (sw)
        {
          listDisponibles.Add(opcion1);
        }

      }

      foreach (co_ca_perfilesopciones opcion in listOpcionesNoDisponibles)
      {
        listNoDisponibles.Add(new co_ca_opciones { id_opcion = opcion.id_opcion.id, op_opcion = opcion.id_opcion.descripcion });
      }

      grdOpcionesDisponibles.GetStore().DataSource = listDisponibles.OrderBy(c => c.op_opcion);
      grdOpcionesDisponibles.GetStore().DataBind();

      grdOpcionesNoDisponibles.GetStore().DataSource = listNoDisponibles.OrderBy(c => c.op_opcion);
      grdOpcionesNoDisponibles.GetStore().DataBind();
    }
    protected void strOpciones_OnReadData(object sender, StoreReadDataEventArgs e)
    {
      try
      {
        int start = e.Start;
        int limit = NumInt.Init(e.Parameters.GetParameter("limit").Value);
        limit = limit == 0 ? e.Limit : limit;
        int page = (start / limit) + 1;
        btnAsociar.Disabled = false;
        btnDesasociar.Disabled = false;

        co_ca_perfilesopciones_no Nomina = new co_ca_perfilesopciones_no();
        Nomina.Pagina = page;
        Nomina.RegistrosPorPaginas = limit;
        Nomina.ColumnaOrden = e.Sort[0].Property;
        Nomina.OrdenColumna = (FwpServerControls.FwpDataGridDataBound.Orden)
          Enum.Parse(typeof(FwpServerControls.FwpDataGridDataBound.Orden), e.Sort[0].Direction.ToString(), true);
        Nomina.id_perfil = e.Parameters.GetParameter("id_perfil").Value.ValidaEntero("id_perfil");

        IList<object> lista = new List<object>();

        AgregarFiltrosOpciones(ref Nomina);
        Nomina<co_ca_perfilesopciones_no> data = new bf_ca_perfilesopciones().GetNomina(Nomina);

        foreach (co_ca_perfilesopciones_no no in data.DataSource)
        {
          lista.Add(new
            {
              id_perfilopcion = no.id_perfilopcion,
              id_perfil = no.id_perfil,
              pe_perfil = no.pe_perfil,
              id_opcion = no.id_opcion,
              op_opcion = no.op_opcion,
              op_constante = no.op_constante,

            });
        }

        strOpciones.DataSource = lista;
        strOpciones.PageSize = limit;
        PageProxy pageProxy = strOpciones.Proxy[0] as PageProxy;
        if (pageProxy != null) pageProxy.Total = data.Registros;
        strOpciones.DataBind();

      }
      catch (Exception)
      {
        Mensajes.Error(ErrorText.ERROR_LIST_OPCIONES);
      }
    }
    protected void btnLogin_Click(object sender, DirectEventArgs e)
    {
      try
      {
        string accesos = new bf_ca_perfilesopciones().GetAccesos(cmbPerfil.SelectedItem.Value.ValidaEntero(cmbPerfil.FieldLabel), 1);
        co_ca_usuarios usuario = new co_ca_usuarios();
        bf_ca_usuarios bfUsuarios = new bf_ca_usuarios();
        usuario.us_consuser = txtUsername.Text.Trim();
        usuario.us_password = txtPassword.Text.Trim();
        usuario = bfUsuarios.Login(usuario);
        if (usuario.id != 0)
        {
          Session["id_usuario"] = usuario.id_usuario;
          FWPConfiguration.set_Cons_User(Session.SessionID, usuario.us_consuser);
          FWPConfiguration.set_ID_User(Session.SessionID, usuario.id_usuario);
          FWPConfiguration.set_Perfil(Session.SessionID, cmbPerfil.SelectedItem.Value.ValidaEntero(cmbPerfil.FieldLabel));
          FWPConfiguration.set_ID_Person(Session.SessionID, usuario.id_persona.id);
          FWPConfiguration.set_Name_Person(Session.SessionID, usuario.id_persona.descripcion);
          FWPConfiguration.set_Accesos(Session.SessionID, accesos);

          co_ca_usuarios us = bfUsuarios.GetData(usuario.id_usuario);
          us.us_ultimoacceso.Fecha = DateTime.Now;
          us.us_intentosfallidos = 0;

          bfUsuarios.Save(us);
          Response.Redirect("Desktop.aspx");

        }
        else
        {
          usuario.us_esvigente= TiposBases.EstadoRegistro.TODOS;
          usuario = new bf_ca_usuarios().GetData(usuario).FirstOrDefault();

          if (usuario != null && usuario.us_cambioPassword == TiposBases.EstadoRegistro.ACT)
          {
            Session["id_usuario"] = usuario.id_usuario;
            FWPConfiguration.set_Cons_User(Session.SessionID, usuario.us_consuser);
            FWPConfiguration.set_ID_User(Session.SessionID, usuario.id_usuario);
            FWPConfiguration.set_Perfil(Session.SessionID, cmbPerfil.SelectedItem.Value.ValidaEntero(cmbPerfil.FieldLabel));
            FWPConfiguration.set_ID_Person(Session.SessionID, usuario.id_persona.id);
            FWPConfiguration.set_Name_Person(Session.SessionID, usuario.id_persona.descripcion);
            FWPConfiguration.set_Accesos(Session.SessionID, accesos);
            Mensajes.Show("Mensaje", "La clave ingresada es una Clave Temporal, debe ingresar una nueva Clave",
              "window.location.href='CambiarContrasena.aspx'", MessageBox.Icon.INFO);
          }
          else
          {
            Mensajes.Error(ErrorText.LOGUEO_INCORRECTO);
            //veo si ingreso bien el usuario para asi contar los intentos fallidos 
            var user = bfUsuarios.GetData(new co_ca_usuarios {us_consuser = txtUsername.Text});
            if (user.Any())
            {
              var coCaUsuarios = user.FirstOrDefault();
              if (coCaUsuarios != null)
              {
                coCaUsuarios.us_intentosfallidos = coCaUsuarios.us_intentosfallidos + 1;
                if (coCaUsuarios.us_intentosfallidos >= Constantes.INTENTOS_FALLIDOS)
                {
                  Mensajes.Error(Constantes.EXCEDIO_INTENTOS_FALLIDOS);
                  coCaUsuarios.us_esvigente = TiposBases.EstadoRegistro.DES;
                }
                bfUsuarios.Save(coCaUsuarios);
                frmLogin.Reset();
              }
            }
          }
        }
      }
      catch (Exception ex)
      {
        Mensajes.Error(ErrorText.LOGUEO + "<br> Excepcion: " + ex.Message);
      }
    }
 protected void OnCheckedChangedPerfil(object sender, DirectEventArgs eventArgs)
 {
   try
   {
     int idPerfil = int.TryParse(eventArgs.ExtraParams["idPerfil"], out idPerfil) ? idPerfil : 0;
     if (idPerfil == 0) return;
     string accesos = new bf_ca_perfilesopciones().GetAccesos(idPerfil, 1);
     FWPConfiguration.set_Perfil(Session.SessionID, idPerfil);
     FWPConfiguration.set_Accesos(Session.SessionID, accesos);
     Response.Redirect(Request.RawUrl);
   }
   catch (Exception ex)
   {
     Mensajes.Error(ex.Message);
   }
 }
    private void Desasocia(int id_opcion)
    {
      try
      {
        int id_perfil = hid_id.Text.ValidaEntero(hid_id.FieldLabel);
        co_ca_perfilesopciones perfilesopciones = new co_ca_perfilesopciones();
        perfilesopciones.id_opcion.id = id_opcion;
        perfilesopciones.id_perfil.id = id_perfil;

        var list = new bf_ca_perfilesopciones().GetData(perfilesopciones);
        if (list.Any() && list.Count == 1)
        {
          new bf_ca_perfilesopciones().Delete(list.FirstOrDefault().id_perfilopcion);
        }
      }
      catch (Exception)
      {
        Mensajes.Error(ErrorText.ERROR_GUARDAR_REGISTRO);
      }
    }