public override void Salvar(object entidade)
        {
            CopiaDeAutorizacao copia = entidade as CopiaDeAutorizacao;

            copia.AutorizacaoDestino.Aplicativo      = copia.AutorizacaoOrigem.Aplicativo;
            copia.AutorizacaoDestino.OrgaoAutorizado = copia.AutorizacaoOrigem.OrgaoAutorizado;


            IContextoDAO dao = new ContextoAutorizacao();

            dao.CompartilhaConexao(this.RetornaConexao());
            dao.CompartilharTransacao(this.RetornaTransacao());

            dao.Salvar(copia.AutorizacaoDestino);
        }
        public override IList <object> Consultar(object entidade)
        {
            CopiaDeAutorizacao copia = entidade as CopiaDeAutorizacao;
            string             sql;

            IContextoDAO dao = new ContextoAutorizacao();

            dao.CompartilhaConexao(this.RetornaConexao());      // para manter a mesma conexão
            dao.CompartilharTransacao(this.RetornaTransacao()); // para manter a mesma transação

            IList <Autorizacao> retornoAutorizacoes;
            var auxiliar = dao.Consultar(copia.AutorizacaoOrigem);

            if (auxiliar != null)
            {
                retornoAutorizacoes = auxiliar.OfType <Autorizacao>().ToList();
            }
            else
            {
                return(null);
            }

            IList <object> ListaDeCopias = new List <object>();
            IList <string> siglasOrgaos  = new List <string>();

            // Selecionar o órgão padrão:
            sql = "select sig_orgao, " +    // 0
                  "o.cod_orgao " +          // 1
                  "from   orgao o, " +
                  "usuario u " +
                  "where  o.cod_orgao = u.cod_orgao_padrao and " +
                  "u.cod_usuari = ? ";

            comando = new SqlCommand(sql, conexao, transacao);
            comando.Parameters.Add(new SqlParameter("cod_usuari",
                                                    copia.AutorizacaoDestino.Usuario.Codigo));

            dataReader = comando.ExecuteReader();
            if (dataReader.Read())
            {
                Profissional usuarioAuxiliar = copia.AutorizacaoDestino.Usuario;
                usuarioAuxiliar.OrgaosDoUsuario = new List <Orgao>();

                siglasOrgaos.Add(dataReader.GetString(0)); // sig_orgao

                usuarioAuxiliar.OrgaosDoUsuario.Add(new Orgao
                {
                    Sigla  = siglasOrgaos.Last(),     // sig_orgao
                    Codigo = dataReader.GetString(1), // cod_orgao
                });
            }
            dataReader.Close();

            // selecionar os outros órgãos:
            sql = "select sig_orgao " + // 0
                  "from   orgao o, " +
                  "rel_usuario_orgao r " +
                  "where  o.cod_orgao = r.cod_orgao and " +
                  "r.cod_usuari = ? and " +
                  "o.cod_orgao <> ? ";

            comando = new SqlCommand(sql, conexao, transacao);
            comando.Parameters.Add(new SqlParameter("cod_usuari", // cod_usuari
                                                    copia.AutorizacaoDestino.Usuario.Codigo));
            comando.Parameters.Add(new SqlParameter("cod_orgao",
                                                    copia.AutorizacaoDestino.Usuario.OrgaosDoUsuario[0].Codigo));


            dataReader = comando.ExecuteReader();
            while (dataReader.Read())
            {
                Profissional usuarioAuxiliar = copia.AutorizacaoDestino.Usuario;

                siglasOrgaos.Add(dataReader.GetString(0)); // sig_orgao

                usuarioAuxiliar.OrgaosDoUsuario.Add(new Orgao
                {
                    Sigla = siglasOrgaos.Last(), // sig_orgao
                });
            } // while
            dataReader.Close();

            retornoAutorizacoes = (from Autorizacao a in retornoAutorizacoes
                                   where siglasOrgaos.Contains(a.OrgaoAutorizado.Sigla)
                                   select a).ToList();

            foreach (Autorizacao a in retornoAutorizacoes)
            {
                CopiaDeAutorizacao retornoFinal = new CopiaDeAutorizacao();

                retornoFinal.AutorizacaoOrigem = new Autorizacao
                {
                    Usuario            = copia.AutorizacaoOrigem.Usuario,
                    UsuarioAutorizando = copia.AutorizacaoOrigem.UsuarioAutorizando,
                    OrgaoAutorizado    = a.OrgaoAutorizado,
                    Aplicativo         = a.Aplicativo,
                };

                retornoFinal.AutorizacaoDestino = new Autorizacao
                {
                    Usuario            = copia.AutorizacaoDestino.Usuario,
                    UsuarioAutorizando = copia.AutorizacaoDestino.UsuarioAutorizando,
                };

                ListaDeCopias.Add(retornoFinal); // salvando cópia na lista
            }

            if (ListaDeCopias.Count == 0)
            {
                return(null);
            }
            return(ListaDeCopias);
        }