public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            Opcion opc = obj as Opcion;

            if (opc == null)
            {
                return(false);
            }
            else
            {
                if (opc.Codigo == this.Codigo &&
                    opc.Aplicacion == this.Aplicacion)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
        private static List <Opcion> ObtenerPorPerfil(int codigoPerfil, string appName, SqlConnection connection)
        {
            connection = Connection.Conectar("login");
            if (connection != null)
            {
                if (connection.State != ConnectionState.Open)
                {
                    connection.Open();
                }

                List <Opcion> opciones = null;
                using (SqlCommand cmd = new SqlCommand("dbo.ObtieneOpciones", connection))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    AddParameters(cmd, codigoPerfil, appName);

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        opciones = new List <Opcion>();
                        while (reader.Read())
                        {
                            Opcion opc = new Opcion();
                            opc.Codigo      = Convert.ToInt32(reader["opc_codigo"]);
                            opc.Aplicacion  = reader["opc_aplicacion"].ToString();
                            opc.Descripcion = reader["opc_descripcion"].ToString();
                            opc.CanSelect   = Convert.ToInt32(reader["opc_can_select"]) == 1 ? true : false;
                            opc.CanInsert   = Convert.ToInt32(reader["opc_can_insert"]) == 1 ? true : false;
                            opc.CanUpdate   = Convert.ToInt32(reader["opc_can_update"]) == 1 ? true : false;
                            opc.CanDelete   = Convert.ToInt32(reader["opc_can_delete"]) == 1 ? true : false;
                            opc.CanBajaAlta = Convert.ToInt32(reader["opc_can_baal"]) == 1 ? true : false;

                            opciones.Add(opc);
                        }
                    }
                }

                if (connection.State != ConnectionState.Closed)
                {
                    connection.Close();
                }

                connection.Dispose();

                return(opciones);
            }
            else
            {
                throw new Exception("La conexión está vacía.");
            }
        }
        private static Perfil ObtenerPerfilPorUsuario(Usuario usuario, string appName, SqlConnection connection)
        {
            connection = Connection.Conectar("login");
            if (connection != null)
            {
                if (connection.State != ConnectionState.Open)
                {
                    connection.Open();
                }

                Perfil perfil = null;
                using (SqlCommand cmd = new SqlCommand("dbo.ObtienePerfil", connection))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    AddParameters(cmd, usuario);

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            perfil             = new Perfil();
                            perfil.Codigo      = Convert.ToInt32(reader["per_codigo"]);
                            perfil.Descripcion = reader["per_descripcion"].ToString();
                            perfil.Opciones    = Opcion.ObtenerPorPerfil(perfil.Codigo, appName);
                        }
                    }
                }

                if (connection.State != ConnectionState.Closed)
                {
                    connection.Close();
                }

                connection.Dispose();

                return(perfil);
            }
            else
            {
                throw new Exception("La conexión está vacía.");
            }
        }