예제 #1
0
파일: Login.aspx.cs 프로젝트: lulzzz/SAT
 /// <summary>
 /// Metodo Valida Token
 /// </summary>
 private void ValidandoToken()
 {
     //Asigna a control NoServicio el valor del queryString
     this._token = Convert.ToString(Request.QueryString["ustk"]);
     //Instanciando Token
     using (SAT_CL.Seguridad.UsuarioToken objtoken = new SAT_CL.Seguridad.UsuarioToken(this._token))
         using (SAT_CL.Seguridad.Usuario objusuario = new SAT_CL.Seguridad.Usuario(objtoken.id_usuario_registra))
         {
             if (objtoken.habilitar && objusuario.habilitar)
             {
                 //AutenticandoUsuario
                 autenticaUsuario(objusuario.email);
             }
             else
             {
                 //Obteniendo Acceso por Defecto
                 string acceso = TSDK.Base.Cadena.RutaRelativaAAbsoluta("~/Externa/Login.aspx", "~/Externa/TokenInvalido.aspx");
                 if (!acceso.Equals(""))
                 {
                     //Redireccionando a forma  por Default
                     Response.Redirect(acceso);
                 }
             }
         }
 }
예제 #2
0
파일: Usuario.svc.cs 프로젝트: lulzzz/SAT
        /// <summary>
        /// Método encargado de Validar la Existencia de un Usuario
        /// </summary>
        /// <param name="email">E-mail</param>
        /// <param name="contrasena">Contraseña</param>
        /// <returns></returns>
        public string ValidaUsuarioContrasena(string email, string contrasena)
        {
            //Declarando objeto de retorno
            RetornoOperacion result = new RetornoOperacion();

            //Instanciando usuario
            using (SAT_CL.Seguridad.Usuario u = new SAT_CL.Seguridad.Usuario(email))
            {
                //Validando si existe
                if (u.habilitar)
                {
                    //Realizando autenticación de usuario solicitado
                    result = u.AutenticaUsuario(contrasena);

                    //Validando Operación Exitosa
                    if (result.OperacionExitosa)
                    {
                        //Instanciando Usuario
                        result = new RetornoOperacion(u.id_usuario);
                    }
                }
                else
                {
                    //Instanciando Excepción
                    result = new RetornoOperacion("No Existe el Usuario");
                }
            }

            //Devolviendo Resultado Obtenido
            return(result.ToXMLString());
        }
예제 #3
0
        private void cargaContenidoControles()
        {
            //Determinando el estatus de la página
            switch ((TSDK.ASP.Pagina.Estatus)Session["estatus"])
            {
            case TSDK.ASP.Pagina.Estatus.Nuevo:
                //Borrando el contenido
                lblId.Text          = "Por Asignar";
                txtNombre.Text      = "";
                txtNombreCorto.Text = "";
                txtIdNombre.Text    = "";
                //txtIdPatio.Text = "";

                chkactivo.Checked = true;

                //txtActivo.Text = "";
                break;

            case TSDK.ASP.Pagina.Estatus.Lectura:
            case TSDK.ASP.Pagina.Estatus.Edicion:
                //Instanciando registro operador
                using (SAT_CL.ControlPatio.OperadorPatio c = new SAT_CL.ControlPatio.OperadorPatio(Convert.ToInt32(Session["id_registro"])))
                {
                    //Si el registro existe
                    if (c.habilitar)
                    {
                        //Borrando el contenido
                        lblId.Text          = c.id_operador_patio.ToString();
                        txtNombre.Text      = c.nombre;
                        txtNombreCorto.Text = c.nombre_corto;
                        using (SAT_CL.Seguridad.Usuario t = new SAT_CL.Seguridad.Usuario(c.id_usuario_sistema))
                        {
                            //Si el registro existe
                            if (t.habilitar)
                            {
                                txtIdNombre.Text = String.Format("{0} ID:{1}", t.nombre, c.id_usuario_sistema);
                            }
                        }
                        ddlPatio.SelectedValue = c.id_patio.ToString();

                        chkactivo.Checked = c.bit_activo;
                    }
                }
                break;
            }

            //Limpiando errores
            lblError.Text = "";
        }
예제 #4
0
 /// <summary>
 /// Método encaragdo de inicializar las variables de sesión
 /// </summary>
 /// <param name="usuario">Objeto usuario actual</param>
 private void inicializaVariablesSesion(SAT_CL.Seguridad.Usuario usuario)
 {
     //INICIALIZANDO VALORES DE VARIABLES DE SESION
     //Objeto usuario
     Session["usuario"] = usuario;
     //Id de Registro
     Session["id_registro"] = 0;
     //Id de registro b
     Session["id_registro_b"] = 0;
     //Id de registro c
     Session["id_registro_c"] = 0;
     //Variable de sesion estatus siempre a nuevo registro
     Session["estatus"] = Pagina.Estatus.Nuevo;
     //Vaciando el DataSet de sesion
     Session["DS"] = null;
 }
예제 #5
0
 /// <summary>
 /// Inicializando contenido de GV
 /// </summary>
 private void inicializaForma()
 {
     //Recupera token
     this._token = Convert.ToString(Request.QueryString["ustk"]);
     //Instanciando
     using (SAT_CL.Seguridad.UsuarioToken objtoken = new SAT_CL.Seguridad.UsuarioToken(this._token))
         using (SAT_CL.Seguridad.Usuario objUsario = new SAT_CL.Seguridad.Usuario(objtoken.id_usuario_registra))
             using (SAT_CL.Seguridad.PerfilSeguridadUsuario objperfilactivo = SAT_CL.Seguridad.PerfilSeguridadUsuario.ObtienePerfilActivo(objUsario.id_usuario))
             {
                 if (objtoken.habilitar && objUsario.habilitar && objperfilactivo.habilitar)
                 {
                     //Cargando lista de reportes de la compañía
                     CapaNegocio.m_capaNegocio.CargaCatalogo(ddlReporte, 198, "- Seleccione un Reporte -", objtoken.id_compania, Convert.ToString(objperfilactivo.id_perfil), 0, "");
                 }
                 else
                 {
                     Error();
                 }
             }
 }
예제 #6
0
        private void bajaContacto()
        {
            //Creación del objeto retorno
            RetornoOperacion retorno = new RetornoOperacion();

            //Inicializando Bloque Transaccional
            using (TransactionScope trans = TSDK.Datos.Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
            {
                //Invoca al constructor de la clase y asigna el valor de la variable de session id_registro.
                using (SAT_CL.Global.Contacto c = new SAT_CL.Global.Contacto((int)Session["id_registro"]))
                {
                    //Valida si el registro existe.
                    if (c.id_contacto > 0)
                    {
                        //Asigna al objeto retorno los datos del usuario que realizo el cambio de estado del registro (Deshabilitó)
                        retorno = c.DeshabilitaContacto(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);

                        //Validando Operación Exitosa
                        if (retorno.OperacionExitosa)
                        {
                            //Invoca al constructor de la clase y asigna el valor de la variable de session id_registro.
                            using (SAT_CL.Seguridad.Usuario us = new SAT_CL.Seguridad.Usuario(c.id_usuario_sistema))
                            {
                                //Valida si el registro existe.
                                if (us.id_usuario > 0)
                                {
                                    //Asigna al objeto retorno los datos del usuario que realizo el cambio de estado del registro(Deshabilito)
                                    retorno = us.DeshabilitaUsuario(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);

                                    //Validando Operación Exitosa
                                    if (retorno.OperacionExitosa)
                                    {
                                        //Instanciando registro de Usuario - Compania
                                        using (SAT_CL.Seguridad.UsuarioCompania uc = new SAT_CL.Seguridad.UsuarioCompania(us.id_usuario, c.id_compania_emisor))
                                        {
                                            //Validando que Existe el Registro
                                            if (uc.id_usuario_compania > 0)
                                            {
                                                //Deshabilitando
                                                retorno = uc.DeshabilitaUsuarioCompania(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);

                                                if (retorno.OperacionExitosa)
                                                {
                                                    SAT_CL.Seguridad.PerfilSeguridadUsuario IdPSU = SAT_CL.Seguridad.PerfilSeguridadUsuario.ObtienePerfilActivo(c.id_usuario_sistema);
                                                    //Instanciando Perfil Activo de Perfil Seguridad Usuario
                                                    using (SAT_CL.Seguridad.PerfilSeguridadUsuario psu = new SAT_CL.Seguridad.PerfilSeguridadUsuario(IdPSU.id_perfil_usuario))
                                                    {
                                                        if (psu.id_perfil_usuario > 0)
                                                        {
                                                            retorno = psu.DeshabilitaPerfilSeguridadUsuario(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);
                                                            if (retorno.OperacionExitosa)
                                                            {
                                                                using (UsuarioToken activo = UsuarioToken.ObtieneTokenActivo(c.id_usuario_sistema, c.id_compania_emisor))
                                                                {
                                                                    retorno = activo.TerminaUsuarioToken(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                //Valida que la operacion de inserción se realizo correctamente
                if (retorno.OperacionExitosa)
                {
                    //Mostrando Mensaje de Operación
                    ScriptServer.MuestraNotificacion(this, retorno, ScriptServer.PosicionNotificacion.AbajoDerecha);

                    //Completando Transacción
                    trans.Complete();
                }
                else
                {
                    //Mostrando Mensaje de Operación
                    ScriptServer.MuestraNotificacion(this, retorno, ScriptServer.PosicionNotificacion.AbajoDerecha);
                }
            }

            //Valida si la operación se realizo correctamente.
            if (retorno.OperacionExitosa)
            {
                //Asigna el valor de estado lectura a la variable de session estatus
                Session["estatus"] = Pagina.Estatus.Nuevo;
                //Asigna el valor 0 a la variable de session id_registro
                Session["id_registro"] = 0;
                //invoca al método inicializaForma().
                inicializaForma();
            }
        }
예제 #7
0
        /// <summary>
        /// Inserta o actualiza los valores del registro
        /// </summary>
        private void guardaContacto()
        {
            //Declarando Variables Auxiliares
            int    id_usuario   = 0;
            string pwdAleatoria = TSDK.Base.Cadena.CadenaAleatoria(20);
            string QtnAwr       = TSDK.Base.Cadena.CadenaAleatoria(20);
            //Declarando objeto de resultado
            RetornoOperacion resultado  = new RetornoOperacion();
            RetornoOperacion resultadoP = new RetornoOperacion();

            //Inicializando Bloque Transaccional
            using (TransactionScope trans = TSDK.Datos.Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
            {
                //En base al estatus
                switch ((TSDK.ASP.Pagina.Estatus)Session["estatus"])
                {
                case TSDK.ASP.Pagina.Estatus.Nuevo:
                    //Validando que se halla seleccionado un Perfil
                    if (ddlPerfil.SelectedValue != "0" && ddlClienteProveedor.SelectedValue != "0")
                    {
                        //Asigna al objeto retorno los valores obtenidos del formulario Contacto, invocando al método de insercion de la clase usuario.
                        resultado = SAT_CL.Seguridad.Usuario.InsertaUsuario(txtNombre.Text, txtEmail.Text, pwdAleatoria, DateTime.Today,
                                                                            0, 0, "NA", QtnAwr, 0, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);

                        //Validando que la Operación fuese Exitosa
                        if (resultado.OperacionExitosa)
                        {
                            //Obteniendo Registro de Usuario
                            id_usuario = resultado.IdRegistro;

                            //Insertando Usuario - Compania
                            resultado = SAT_CL.Seguridad.UsuarioCompania.InsertaUsuarioCompania(id_usuario, ((SAT_CL.Seguridad.UsuarioSesion)Session["usuario_sesion"]).id_compania_emisor_receptor,
                                                                                                1, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);
                            if (resultado.OperacionExitosa)
                            {
                                //Insertando Perfil
                                resultado = SAT_CL.Seguridad.PerfilSeguridadUsuario.InsertaPerfilSeguridadUsuario(Convert.ToInt32(ddlPerfil.SelectedValue), id_usuario,
                                                                                                                  ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);

                                if (resultado.OperacionExitosa)
                                {
                                    //Registrando el Contacto con el ID de Usuario del sistema generado
                                    resultado = SAT_CL.Global.Contacto.InsertaContacto(
                                        ((SAT_CL.Seguridad.UsuarioSesion)Session["usuario_sesion"]).id_compania_emisor_receptor,
                                        Convert.ToInt32(Cadena.RegresaCadenaSeparada(txtClienteProveedor.Text, "ID:", 1)),
                                        txtNombre.Text.ToUpper(),
                                        txtTelefono.Text,
                                        txtEmail.Text,
                                        id_usuario,
                                        ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario
                                        );
                                }
                            }
                        }
                    }
                    else
                    {
                        //Instanciando Excepción
                        resultado = new RetornoOperacion("* Seleccione un Perfil y un Tipo de Contacto de la Lista");
                    }
                    break;

                case TSDK.ASP.Pagina.Estatus.Edicion:
                    //Validando que se halla seleccionado un Perfil
                    if (ddlClienteProveedor.SelectedValue != "0")
                    {
                        //Instanciando contacto actual
                        using (SAT_CL.Global.Contacto c = new SAT_CL.Global.Contacto(Convert.ToInt32(Session["id_registro"])))
                        {
                            //Si el Contacto existe
                            if (c.habilitar)
                            {
                                //Insertando Nuevo Perfil Asignado (Si es que lo hay)

                                /*resultadoP = SAT_CL.Seguridad.PerfilSeguridadUsuario.InsertaPerfilSeguridadUsuario(Convert.ToInt32(ddlPerfil.SelectedValue), c.id_usuario_sistema,
                                 *                             ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);*/

                                resultado = c.EditaContacto(
                                    Convert.ToInt32(Cadena.RegresaCadenaSeparada(txtClienteProveedor.Text, "ID:", 1)),
                                    txtNombre.Text.ToUpper(),
                                    txtTelefono.Text,
                                    txtEmail.Text,
                                    ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario
                                    );

                                if (resultado.OperacionExitosa)
                                {
                                    using (SAT_CL.Seguridad.Usuario u = new SAT_CL.Seguridad.Usuario(c.id_usuario_sistema))
                                    {
                                        if (u.id_usuario > 0)
                                        {
                                            Usuario OldU = u;
                                            resultado = u.EditaInformacionGeneral(
                                                txtNombre.Text.ToUpper(),
                                                txtEmail.Text,
                                                OldU.sesiones_disponibles,
                                                ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario
                                                );
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        //Instanciando Excepción
                        resultado = new RetornoOperacion("* Seleccione un tipo de Contacto de la Lista.");
                    }
                    break;
                }

                //Valida que la operacion de inserción se realizo correctamente
                if (resultado.OperacionExitosa)
                {
                    //Mostrando Mensaje de Operación
                    ScriptServer.MuestraNotificacion(this, resultado, ScriptServer.PosicionNotificacion.AbajoDerecha);

                    //Completando Transacción
                    trans.Complete();
                }
                else
                {
                    //Mostrando Mensaje de Operación
                    ScriptServer.MuestraNotificacion(this, resultado, ScriptServer.PosicionNotificacion.AbajoDerecha);
                }
            }

            //Si no hay errores de guardado
            if (resultado.OperacionExitosa)
            {
                //Guardando datos de registro para carga de estatus de lectura
                Session["id_registro"] = resultado.IdRegistro;
                Session["estatus"]     = Pagina.Estatus.Lectura;
                inicializaForma();
            }
        }
예제 #8
0
        public IHttpActionResult Authenticate(LoginRequest login)
        {
            if (login == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            //Declaramos Objeto Resultado
            RetornoOperacion Resultado = new RetornoOperacion();

            //Instanciamos Usuario de acuerdo al e-mail proporcionado
            using (Usuario objUsuario = new SAT_CL.Seguridad.Usuario(login.UserName))
            {
                //Autenticando Usuario
                Resultado = objUsuario.AutenticaUsuario(login.Password);

                //Si la Autenticación es correcta
                if (Resultado.OperacionExitosa)
                {
                    DataTable UsuarioCompanias = SAT_CL.Seguridad.UsuarioCompania.ObtieneCompaniasUsuario(objUsuario.id_usuario);
                    if (UsuarioCompanias.Rows.Count == 1)
                    {
                        DataRow DR    = UsuarioCompanias.Rows[0];
                        string  token = TokenGenerator.GenerateTokenJwt(objUsuario.id_usuario + "|" + Convert.ToString(DR["IdCompaniaEmisorReceptor"]));

                        AuthResponse authresponse = new AuthResponse
                        {
                            success = true,
                            data    = new DataLogin {
                                Token = token
                            },
                            errors = new Errors {
                                code = 0, source = new Source {
                                    pointer = ""
                                }, title = "", detail = "Sin errores"
                            }
                        };
                        //string json = JsonConvert.SerializeObject(authresponse);
                        return(Ok(authresponse));
                    }
                    else
                    {
                        FailAuthResponse failauthresponse = new FailAuthResponse
                        {
                            isSucceded = false,
                            message    = "El usuario tiene asignadas más de una compañía."
                        };
                        //string json = JsonConvert.SerializeObject(failauthresponse);
                        return(Json(failauthresponse));
                    }
                }
                else
                {
                    FailAuthResponse failauthresponse = new FailAuthResponse
                    {
                        isSucceded = false,
                        message    = "No se encontraron datos para este cliente."
                    };
                    //string json = JsonConvert.SerializeObject(failauthresponse);
                    return(Json(failauthresponse));
                }
            }
        }
예제 #9
0
        /// <summary>
        /// Cambio en la selección del reporte a visualizar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlReporte_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Asigna Atributos
            asignaAtributos();
            //Instanciando
            using (SAT_CL.Seguridad.UsuarioToken objtoken = new SAT_CL.Seguridad.UsuarioToken(this._token))
                using (SAT_CL.Seguridad.Usuario objUsario = new SAT_CL.Seguridad.Usuario(objtoken.id_usuario_registra))
                    using (SAT_CL.Global.CompaniaReporte objReporte = new SAT_CL.Global.CompaniaReporte(Convert.ToInt32(ddlReporte.SelectedValue)))
                    {
                        if (objtoken.habilitar && objUsario.habilitar && objReporte.habilitar)
                        {
                            if (objReporte.habilitar)

                            {
                                //En base al tipo de reporte definido para el botón
                                switch (objReporte.id_tipo_reporte)
                                {
                                case 1:
                                {
                                    rvSSRS.Visible = true;
                                    rvPBI.Visible  = false;
                                    rvAND.Visible  = false;
                                    //Instanciando reporte seleccionado
                                    using (SAT_CL.Global.CompaniaReporte reporte = new SAT_CL.Global.CompaniaReporte(Convert.ToInt32(ddlReporte.SelectedValue)))
                                    {
                                        /*** CONFIGURANDO VISOR DE REPORTE ***/
                                        //Indicando el servidor al que será conectado el visor
                                        rvSSRS.ServerReport.ReportServerUrl = new Uri(ConfigurationManager.AppSettings["ServidorSSRS"]);
                                        //Credenciales de Autenticación en servidor de reportes
                                        rvSSRS.ServerReport.ReportServerCredentials = new SAT_CL.Seguridad.CredencialServidorReportes(ConfigurationManager.AppSettings["UsuarioSSRS"],
                                                                                                                                      ConfigurationManager.AppSettings["ContrasenaSSRS"], ConfigurationManager.AppSettings["DominioSSRS"]);
                                        //ASigna al reporte la variable compania
                                        rvSSRS.ServerReport.ReportPath = reporte.url_reporte_ssrs;
                                        ReportParameter param = new ReportParameter("param1", Convert.ToString(objtoken.id_compania));
                                        rvSSRS.ServerReport.SetParameters(new ReportParameter[] { param });
                                    }
                                    break;
                                }

                                case 2:
                                {
                                    rvSSRS.Visible = false;
                                    rvPBI.Visible  = false;
                                    rvAND.Visible  = false;
                                    break;
                                }

                                case 3:
                                {
                                    rvSSRS.Visible = false;
                                    rvPBI.Visible  = true;
                                    rvAND.Visible  = false;

                                    break;
                                }

                                case 4:
                                {
                                    rvSSRS.Visible = false;
                                    rvPBI.Visible  = false;
                                    rvAND.Visible  = true;
                                    break;
                                }
                                }
                            }
                            else
                            {
                                Error();
                            }
                        }
                        else
                        {
                            Error();
                        }
                    }
        }
예제 #10
0
파일: Usuario.svc.cs 프로젝트: lulzzz/SAT
        /// <summary>
        /// Realiza las validaciones necesarias sobre la cuenta de usuario indicada y permite el acceso remoto a la plataforma.
        /// </summary>
        /// <param name="email">Email registrado en cuenta de usuario activa</param>
        /// <param name="contrasena">Contraseña asignada por el usuario para su inicio de sesión</param>
        /// <returns>TSDK.Base.RetornoOperacion en formato xml</returns>
        public string AutenticaUsuario(string email, string contrasena)
        {
            //Declarando objeto de retorno
            RetornoOperacion resultado;
            int idTipoReferencia = 0;

            //Validando conjunto de datos requeridos
            if (!string.IsNullOrEmpty(email) && !string.IsNullOrEmpty(contrasena))
            {
                //Instanciando usuario
                using (SAT_CL.Seguridad.Usuario u = new SAT_CL.Seguridad.Usuario(email))
                {
                    //Realizando autenticación de usuario solicitado
                    resultado = u.AutenticaUsuario(contrasena);

                    //Validando Operación Exitosa
                    if (resultado.OperacionExitosa)
                    {
                        //Obteniendo Tipo
                        idTipoReferencia = ReferenciaTipo.ObtieneIdReferenciaTipo(0, 30, "Codigo Acceso", 0, "Configuración");

                        //Obteniendo Referencia de Codigo
                        using (DataTable dtReferencias = Referencia.CargaReferencias(u.id_usuario, 30, idTipoReferencia))
                        {
                            //Validando que exista la Referencia
                            if (Validacion.ValidaOrigenDatos(dtReferencias))
                            {
                                //Recorriendo Ciclo
                                foreach (DataRow dr in dtReferencias.Rows)
                                {
                                    //Editando Referencia
                                    resultado = Referencia.EditaReferencia(Convert.ToInt32(dr["Id"]), idTipoReferencia, Cadena.CadenaAleatoria(0, 0, 4), u.id_usuario);

                                    //Terminando Ciclo
                                    break;
                                }
                            }
                            else
                            {
                                //Insertando Referencia de Usuario
                                resultado = Referencia.InsertaReferencia(u.id_usuario, 30, idTipoReferencia, Cadena.CadenaAleatoria(0, 0, 4), Fecha.ObtieneFechaEstandarMexicoCentro(), u.id_usuario);
                            }
                        }
                    }

                    //Validando Operación
                    if (resultado.OperacionExitosa)
                    {
                        //Instanciando Id de Usuario
                        resultado = new RetornoOperacion(u.id_usuario);
                    }
                }
            }
            else
            {
                //Instanciando Excepción
                resultado = new RetornoOperacion(string.Format("{0} {1}", string.IsNullOrEmpty(email) ? "Falta email." : "", string.IsNullOrEmpty(contrasena) ? "Falta contraseña." : ""));
            }

            //Devolvemos Resultado
            return(resultado.ToXMLString());
        }
예제 #11
0
        /// <summary>
        /// Eventos Producido al Seleccionar el Perfil de Usuario
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lnkSeleccionar_Click(object sender, EventArgs e)
        {
            //Validando que Existan Perfiles
            if (gvPerfilesUsuario.DataKeys.Count > 0)
            {
                //Seleccionando Fila
                Controles.SeleccionaFila(gvPerfilesUsuario, sender, "lnk", false);

                //Declarando Objeto de Retorno
                RetornoOperacion result = new RetornoOperacion();

                //Inicializando Bloque Transaccional
                using (TransactionScope trans = TSDK.Datos.Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                {
                    //Instanciando Perfil de Usuario
                    using (SAT_CL.Seguridad.PerfilSeguridadUsuario psu = new SAT_CL.Seguridad.PerfilSeguridadUsuario(Convert.ToInt32(gvPerfilesUsuario.SelectedDataKey["IdPerfilUsuario"])))
                    {
                        //Validando que Exista el Perfil
                        if (psu.id_perfil_usuario > 0)
                        {
                            //Instanciando Perfil de Usuario
                            using (SAT_CL.Seguridad.PerfilSeguridadUsuario pActivo = SAT_CL.Seguridad.PerfilSeguridadUsuario.ObtienePerfilActivo(this._id_usuario))
                            {
                                //Validando que Exista un Perfil Activo
                                if (pActivo.id_perfil_usuario > 0)
                                {
                                    //Validando que sean Distintos
                                    if (pActivo.id_perfil_usuario != psu.id_perfil_usuario)
                                    {
                                        //Actualizando Perfil Activo
                                        result = pActivo.EditaPerfilSeguridadUsuario(pActivo.id_perfil, pActivo.id_usuario, false, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);

                                        //Validando que la Operación fuese Exitosa
                                        if (result.OperacionExitosa)
                                        {
                                            //Actualizando Perfil Actual
                                            result = psu.EditaPerfilSeguridadUsuario(psu.id_perfil, psu.id_usuario, true, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);
                                        }
                                    }
                                    else
                                    {
                                        //Actualizando Perfil Actual
                                        result = psu.EditaPerfilSeguridadUsuario(psu.id_perfil, psu.id_usuario, true, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);
                                    }
                                }
                                else
                                {
                                    //Actualizando Perfil Actual
                                    result = psu.EditaPerfilSeguridadUsuario(psu.id_perfil, psu.id_usuario, true, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);
                                }

                                //Validando que la Operación fuese Exitosa
                                if (result.OperacionExitosa)
                                {
                                    //Instanciando Usuario
                                    using (SAT_CL.Seguridad.Usuario user = (SAT_CL.Seguridad.Usuario)Session["usuario"])
                                    {
                                        //Actualizando Atributos
                                        if (user.ActualizaAtributos())
                                        {
                                            //Actualizando Perfil de Usuario
                                            psu.ActualizaPerfilSeguridadUsuario();

                                            //Instanciando Perfil
                                            using (SAT_CL.Seguridad.PerfilSeguridad ps = new PerfilSeguridad(psu.id_perfil))
                                            {
                                                //Instanciando Perfil de Seguridad
                                                if (ps.id_perfil_seguridad > 0)
                                                {
                                                    //Instanciando Forma
                                                    using (SAT_CL.Seguridad.Forma form = new SAT_CL.Seguridad.Forma(ps.id_forma_inicio))
                                                    {
                                                        //Completando Transacción
                                                        trans.Complete();

                                                        //Inicializando variables de Sesión
                                                        inicializaVariablesSesion(user);

                                                        //Obteniendo Ruta Relativa
                                                        string url = TSDK.Base.Cadena.RutaRelativaAAbsoluta(Page.AppRelativeVirtualPath, form.ruta_relativa);

                                                        //Redireccionando a la Forma Inicio del Perfil
                                                        Response.Redirect(url);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }