public override string Executar(object entidade)
        {
            if (entidade is CopiaDeAutorizacao)
            {
                CopiaDeAutorizacao copia = entidade as CopiaDeAutorizacao;
                string             msg   = this.Executar(copia.AutorizacaoOrigem);
                if (msg == null)
                {
                    msg = this.Executar(copia.AutorizacaoDestino);
                }
                return(msg);
            }
            Autorizacao             auth    = entidade as Autorizacao;
            IFachada <Profissional> fachada = new FachadaAdmWeb <Profissional>();

            fachada.SalvaConexaoAtiva(this.conexao);     // Manter conexão anterior
            fachada.SalvaTransacaoAtiva(this.transacao); // Manter transação anterior
            fachada.DefineTemQueFecharConexao(false);    // Não fechar ao finalizar

            Orgao aux = auth.Usuario.OrgaoAtual;

            auth.Usuario.OrgaoAtual = null;
            IList <Profissional> retorno = fachada.Consultar(auth.Usuario);

            auth.Usuario.OrgaoAtual = aux;

            if (retorno == null)
            {
                return("O Usuário informado não existe!");
            }

            return(null);
        }
        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 string Executar(object entidade)
        {
            CopiaDeAutorizacao copia = entidade as CopiaDeAutorizacao;

            if (copia.AutorizacaoOrigem == null || copia.AutorizacaoOrigem.Usuario == null ||
                copia.AutorizacaoOrigem.Usuario.Codigo == null ||
                copia.AutorizacaoOrigem.Usuario.Codigo.Trim() == "")
            {
                return("O usuário de Origem (usuário a copiar) é origatório! Favor informá-lo");
            }


            if (copia.AutorizacaoDestino == null || copia.AutorizacaoDestino.Usuario == null ||
                copia.AutorizacaoDestino.Usuario.Codigo == null ||
                copia.AutorizacaoDestino.Usuario.Codigo.Trim() == "")
            {
                return("O usuário de destino (usuário que terá as permissões copiadas) " +
                       "é origatório! Favor informá-lo");
            }

            return(null);
        }
        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);
        }
        public ActionResult CopiarAutorizacao(CopiarAutorizacaoViewModel model, AutorizarUsuarioViewModel modelRetorno)
        {
            #region Decidir se deve proseguir com a requisição

            ActionResult urlRetorno = DecideUrlFormulários("/Autorizacao/AutorizarUsuario", modelRetorno);
            if (urlRetorno != null)
            {
                if (usuario != null) // Usuario preenchido com os dados da seção na superclasse
                {
                    modelRetorno = PreencheModel(modelRetorno);
                }
                return(urlRetorno); // ação que deve ser retornada para o browser
            }
            #endregion

            modelRetorno.UsuarioLiberacao = model.UsuarioLiberacao = usuario;

            IList <Autorizacao> autorizacoes = modelRetorno.CriarModelo();

            CopiaDeAutorizacao copia = model.CriarModelo();

            IList <CopiaDeAutorizacao>    retorno = new List <CopiaDeAutorizacao>();
            IFachada <CopiaDeAutorizacao> fachada = new FachadaAdmWeb <CopiaDeAutorizacao>();
            fachada.DefineTemQueFecharConexao(false); // manter transação e conexão aberta

            string msgValidacao = fachada.ConsultarComValidacao(copia, retorno);


            if (msgValidacao != null)
            {
                ViewBag.Mensagem = msgValidacao;

                fachadaVM = new FachadaAdmWeb <AutorizarUsuarioViewModel>();
                fachadaVM.SalvaConexaoAtiva(fachada.RetornaConexaoAtiva());     // mantém conexão anterior
                fachadaVM.SalvaTransacaoAtiva(fachada.RetornaTransacaoAtiva()); // mantém transação anterior


                return(View("AutorizarUsuario", PreencheModel(autorizacoes, modelRetorno)));
            }
            else if (retorno == null || retorno.Count == 0)
            {
                fachadaVM = new FachadaAdmWeb <AutorizarUsuarioViewModel>();    // Por padrão fecha a conexão
                fachadaVM.SalvaConexaoAtiva(fachada.RetornaConexaoAtiva());     // mantém conexão anterior
                fachadaVM.SalvaTransacaoAtiva(fachada.RetornaTransacaoAtiva()); // mantém transação anterior

                ViewBag.Mensagem = "Não há validações para copiar";


                return(View("AutorizarUsuario", PreencheModel(autorizacoes, modelRetorno)));
            }



            fachada.DefineTemQueFecharConexao(true); // a próxima operação é a última
            msgValidacao = fachada.SalvarTodos(retorno);

            if (msgValidacao != null)
            {
                ViewBag.Mensagem = msgValidacao;
            }
            else
            {
                ViewBag.Mensagem = "Autorizações copiadas com sucesso.";
            }

            //return View("AutorizarUsuario", PreencheModel(autorizacoes, modelRetorno));
            return(View("../Home/Index"));
        } // CopiarAutorizações