public bool ExcluirCaracterizacoes(int empreendimento, BancoDeDados banco = null)
        {
            List <CaracterizacaoLst> caracterizacoes = CaracterizacaoConfig.Obter <List <CaracterizacaoLst> >(ConfiguracaoCaracterizacao.KeyCaracterizacoes);
            List <DependenciaLst>    dependencias    = CaracterizacaoConfig.Obter <List <DependenciaLst> >(ConfiguracaoCaracterizacao.KeyCaracterizacoesDependencias);

            caracterizacoes = caracterizacoes.Where(x => dependencias.Exists(y => y.TipoId == x.Id && y.ExibirCredenciado)).ToList();
            ICaracterizacaoBus caracterizacao;

            try
            {
                if (!ValidarEmPosse(empreendimento))
                {
                    return(Validacao.EhValido);
                }

                if (caracterizacoes != null && caracterizacoes.Count > 0)
                {
                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco, UsuarioCredenciado))
                    {
                        bancoDeDados.IniciarTransacao();

                        GerenciadorTransacao.ObterIDAtual();

                        foreach (CaracterizacaoLst car in caracterizacoes)
                        {
                            caracterizacao = CaracterizacaoBusFactory.Criar((eCaracterizacao)car.Id);

                            if (caracterizacao == null)
                            {
                                Validacao.Add(eTipoMensagem.Erro, String.Format("{0} Bus não criada", car.Texto));
                                continue;
                            }

                            caracterizacao.Excluir(empreendimento, bancoDeDados, false);
                        }

                        bancoDeDados.Commit();
                    }
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(Validacao.EhValido);
        }
        public void CopiarDadosInstitucional(int empreendimentoID, eCaracterizacao caracterizacaoTipo, int projetoDigitalID, DesassociarDependencias desassociarDependencias)
        {
            try
            {
                EmpreendimentoCaracterizacao empreendimento       = ObterEmpreendimentoSimplificado(empreendimentoID);
                ProjetoGeograficoBus         projetoGeograficoBus = new ProjetoGeograficoBus();

                GerenciadorTransacao.ObterIDAtual();

                using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(UsuarioCredenciado))
                {
                    bancoDeDados.IniciarTransacao();

                    if (caracterizacaoTipo != eCaracterizacao.UnidadeProducao && caracterizacaoTipo != eCaracterizacao.UnidadeConsolidacao && caracterizacaoTipo != eCaracterizacao.BarragemDispensaLicenca)
                    {
                        projetoGeograficoBus.CopiarDadosInstitucional(empreendimentoID, empreendimento.InternoID, (eCaracterizacao)caracterizacaoTipo, bancoDeDados);
                    }

                    if (!Validacao.EhValido)
                    {
                        bancoDeDados.Rollback();
                        return;
                    }

                    ICaracterizacaoBus caracterizacaoBus = CaracterizacaoBusFactory.Criar(caracterizacaoTipo);
                    if (caracterizacaoBus == null)
                    {
                        Validacao.Add(eTipoMensagem.Erro, "Caracterizacao Bus não criada");
                    }

                    caracterizacaoBus.CopiarDadosInstitucional(empreendimentoID, empreendimento.InternoID, bancoDeDados);

                    if (!Validacao.EhValido)
                    {
                        bancoDeDados.Rollback();
                        return;
                    }

                    #region Alterar Projeto Digital

                    ProjetoDigital projetoDigital = new ProjetoDigital();
                    projetoDigital.Id = projetoDigitalID;
                    projetoDigital.EmpreendimentoId = empreendimentoID;
                    projetoDigital.Dependencias.Add(new Dependencia()
                    {
                        DependenciaCaracterizacao = (int)caracterizacaoTipo
                    });
                    desassociarDependencias(projetoDigital, bancoDeDados);

                    #endregion

                    if (!Validacao.EhValido)
                    {
                        bancoDeDados.Rollback();
                    }

                    Validacao.Erros.Clear();
                    Validacao.Add(Mensagem.ProjetoDigital.CopiarCaracterizacao);
                    bancoDeDados.Commit();
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }