public ActionResult Salvar(ProjetoGeografico projeto, string url)
        {
            if (!_caracterizacaoValidar.Basicas(projeto.EmpreendimentoId))
            {
                return(Json(new { @EhValido = Validacao.EhValido, Msg = Validacao.Erros, urlRedirect = Url.Action("Index", "../Empreendimento", Validacao.QueryParamSerializer()) }));
            }

            var urlCriar  = CaracterizacaoVM.GerarUrl(projeto.EmpreendimentoId, true, eCaracterizacao.ExploracaoFlorestal);
            var urlEditar = CaracterizacaoVM.GerarUrl(projeto.EmpreendimentoId, false, eCaracterizacao.ExploracaoFlorestal);

            if (url.Contains(urlCriar) || url.Contains(urlEditar))
            {
                if (!_validar.Finalizar(projeto))
                {
                    return(Json(new { EhValido = Validacao.EhValido, Msg = Validacao.Erros, Url = url }));
                }
                if (_exploracaoFlorestalBus.ExisteExploracaoGeoNaoCadastrada(projeto.Id))
                {
                    url = urlCriar;
                }
            }

            _bus.Salvar(projeto);
            if (projeto.CaracterizacaoId == (int)eCaracterizacao.ExploracaoFlorestal)
            {
                _caracterizacaoBus.AtualizarDependentes(projeto.Id, eCaracterizacao.ExploracaoFlorestal, eCaracterizacaoDependenciaTipo.Caracterizacao, projeto.Tid);
            }

            return(Json(new { EhValido = Validacao.EhValido, Msg = Validacao.Erros, Url = url }));
        }
        public ActionResult Criar(int empreendimento, int tipo, bool isCadastrarCaracterizacao)
        {
            if (!_caracterizacaoValidar.Dependencias(empreendimento, tipo))
            {
                return(RedirectToAction("", "Caracterizacao", new { id = empreendimento, Msg = Validacao.QueryParam() }));
            }

            DescricaoLicenciamentoAtividadeVM vm = new DescricaoLicenciamentoAtividadeVM();

            DescricaoLicenciamentoAtividade dscLicAtividade = _bus.ObterPorEmpreendimento(empreendimento, (eCaracterizacao)tipo);

            dscLicAtividade = _bus.ObterDadosGeo(empreendimento, (eCaracterizacao)tipo, dscLicAtividade);
            if (dscLicAtividade.Id == 0)
            {
                dscLicAtividade.Tipo = tipo;
            }

            vm.CaracterizacaoTipoTexto       = _caracterizacaoBus.ObterCaracterizacoesEmpreendimento(empreendimento).SingleOrDefault(x => (int)x.Tipo == tipo).Nome;
            dscLicAtividade.EmpreendimentoId = empreendimento;
            vm.DscLicAtividade           = dscLicAtividade;
            vm.IsCadastrarCaracterizacao = isCadastrarCaracterizacao;

            vm.ResponsaveisEmpreendimento   = ViewModelHelper.CriarSelectList(_bus.ObterResponsaveis(empreendimento));
            vm.FontesAbastecimentoAguaTipo  = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvFontesAbastecimentoAguaTipo);
            vm.PontosLancamentoEfluenteTipo = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvPontosLancamentoEfluenteTipo);
            vm.OutorgaAguaTipo   = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvOutorgaAguaTipo);
            vm.FontesGeracaoTipo = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvFontesGeracaoTipo);
            vm.UnidadeTipo       = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvUnidadeTipo);
            vm.CombustivelTipo   = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvCombustivelTipo);

            vm.VegetacaoAreaUtil = _listaBus.DscLicAtvVegetacaoAreaUtil;
            vm.Acondicionamento  = _listaBus.DscLicAtvAcondicionamento;
            vm.Estocagem         = _listaBus.DscLicAtvEstocagem;
            vm.Tratamento        = _listaBus.DscLicAtvTratamento;
            vm.DestinoFinal      = _listaBus.DscLicAtvDestinoFinal;

            if (vm.DscLicAtividade.Id > 0)
            {
                vm.DscLicAtividade.Dependencias = _caracterizacaoBus.ObterDependencias(vm.DscLicAtividade.Id, vm.DscLicAtividade.GetTipo, eCaracterizacaoDependenciaTipo.DescricaoLicenciamentoAtividade);

                vm.TextoMerge = _caracterizacaoValidar.DependenciasAlteradas(
                    vm.DscLicAtividade.EmpreendimentoId,
                    vm.DscLicAtividade.Tipo,
                    eCaracterizacaoDependenciaTipo.DescricaoLicenciamentoAtividade,
                    vm.DscLicAtividade.Dependencias);
                vm.AtualizarDependenciasModalTitulo = Mensagem.Caracterizacao.AtualizarDependenciasModalTitulo.Texto;
            }

            if (vm.ResponsaveisEmpreendimento != null && vm.ResponsaveisEmpreendimento.Count == 2)
            {
                vm.DscLicAtividade.RespAtividade = Int32.Parse(vm.ResponsaveisEmpreendimento.First(x => int.Parse(x.Value) > 0).Value);
            }

            vm.UrlAvancar = CaracterizacaoVM.GerarUrl(empreendimento, isCadastrarCaracterizacao, (eCaracterizacao)tipo);

            return(View("Criar", vm));
        }
        public ActionResult Visualizar(int empreendimento, int tipo, bool isCadastrarCaracterizacao)
        {
            if (!_caracterizacaoValidar.Dependencias(empreendimento, tipo))
            {
                return(RedirectToAction("", "Caracterizacao", new { id = empreendimento, Msg = Validacao.QueryParam() }));
            }

            DescricaoLicenciamentoAtividadeVM vm = new DescricaoLicenciamentoAtividadeVM();

            DescricaoLicenciamentoAtividade dscLicAtividade = _bus.ObterPorEmpreendimento(empreendimento, (eCaracterizacao)tipo);

            dscLicAtividade = _bus.ObterDadosGeo(empreendimento, (eCaracterizacao)tipo, dscLicAtividade);

            vm.CaracterizacaoTipoTexto       = _caracterizacaoBus.ObterCaracterizacoesEmpreendimento(empreendimento).SingleOrDefault(x => (int)x.Tipo == tipo).Nome;
            dscLicAtividade.EmpreendimentoId = empreendimento;
            vm.DscLicAtividade           = dscLicAtividade;
            vm.IsCadastrarCaracterizacao = isCadastrarCaracterizacao;

            vm.ResponsaveisEmpreendimento   = ViewModelHelper.CriarSelectList(_bus.ObterResponsaveis(empreendimento));
            vm.FontesAbastecimentoAguaTipo  = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvFontesAbastecimentoAguaTipo);
            vm.PontosLancamentoEfluenteTipo = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvPontosLancamentoEfluenteTipo);
            vm.OutorgaAguaTipo   = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvOutorgaAguaTipo);
            vm.FontesGeracaoTipo = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvFontesGeracaoTipo);
            vm.UnidadeTipo       = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvUnidadeTipo);
            vm.CombustivelTipo   = ViewModelHelper.CriarSelectList(_listaBus.DscLicAtvCombustivelTipo);

            vm.VegetacaoAreaUtil = _listaBus.DscLicAtvVegetacaoAreaUtil;
            vm.Acondicionamento  = _listaBus.DscLicAtvAcondicionamento;
            vm.Estocagem         = _listaBus.DscLicAtvEstocagem;
            vm.Tratamento        = _listaBus.DscLicAtvTratamento;
            vm.DestinoFinal      = _listaBus.DscLicAtvDestinoFinal;

            if (vm.DscLicAtividade.Id > 0)
            {
                vm.DscLicAtividade.Dependencias = _caracterizacaoBus.ObterDependencias(vm.DscLicAtividade.Id, vm.DscLicAtividade.GetTipo, eCaracterizacaoDependenciaTipo.DescricaoLicenciamentoAtividade);

                vm.TextoMerge = _caracterizacaoValidar.DependenciasAlteradas(
                    vm.DscLicAtividade.EmpreendimentoId,
                    vm.DscLicAtividade.Tipo,
                    eCaracterizacaoDependenciaTipo.DescricaoLicenciamentoAtividade,
                    vm.DscLicAtividade.Dependencias, true);
                vm.AtualizarDependenciasModalTitulo = Mensagem.Caracterizacao.AtualizarDependenciasModalTitulo.Texto;
            }

            Boolean podeCriarEditar = new PermissaoValidar().ValidarAny(new[] { ePermissao.DescricaoLicenciamentoAtividadeCriar, ePermissao.DescricaoLicenciamentoAtividadeEditar }, false);

            if (!String.IsNullOrWhiteSpace(vm.TextoMerge) && !podeCriarEditar)
            {
                Validacao.Add(Mensagem.DescricaoLicenciamentoAtividadeMsg.NaoPodeVisualizarComDependenciasAlteradas(vm.CaracterizacaoTipoTexto));
                return(RedirectToAction("", "Caracterizacao", new { id = empreendimento, Msg = Validacao.QueryParam() }));
            }

            vm.UrlAvancar   = CaracterizacaoVM.GerarUrl(empreendimento, isCadastrarCaracterizacao, (eCaracterizacao)tipo);
            vm.IsVisualizar = true;

            return(View("Criar", vm));
        }
        public ActionResult Salvar(DescricaoLicenciamentoAtividade dscLicAtividade, bool isCadastrarCaracterizacao)
        {
            _bus.Salvar(dscLicAtividade);

            return(Json(new
            {
                @EhValido = Validacao.EhValido,
                @Msg = Validacao.Erros,
                @UrlRedirecionar = CaracterizacaoVM.GerarUrl(dscLicAtividade.EmpreendimentoId, isCadastrarCaracterizacao, dscLicAtividade.GetTipo),
                @AtividadeId = dscLicAtividade.Id
            }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult Carregar(ProjetoGeograficoVM vm, bool mostrarModalDependencias = true, bool isVisualizar = false)
        {
            Empreendimento emp = _busEmpreendimento.Obter(vm.Projeto.EmpreendimentoId);

            if (emp.Coordenada.EastingUtm.GetValueOrDefault() <= 0 || emp.Coordenada.NorthingUtm.GetValueOrDefault() <= 0)
            {
                Validacao.Add(Mensagem.ProjetoGeografico.CoordenadaObrigatoria);
                return(RedirectToAction("", "Caracterizacao", new { id = vm.Projeto.EmpreendimentoId, Msg = Validacao.QueryParam() }));
            }

            if (!isVisualizar && !_caracterizacaoValidar.Dependencias(vm.Projeto.EmpreendimentoId, vm.Projeto.CaracterizacaoId, validarProjetoGeoProprio: false))
            {
                return(RedirectToAction("", "Caracterizacao", new { id = vm.Projeto.EmpreendimentoId, Msg = Validacao.QueryParam() }));
            }

            eCaracterizacao tipo = (eCaracterizacao)vm.Projeto.CaracterizacaoId;

            vm.CaracterizacaoTipo     = vm.Projeto.CaracterizacaoId;
            vm.ArquivoEnviadoTipo     = (int)eProjetoGeograficoArquivoTipo.ArquivoEnviado;
            vm.ArquivoEnviadoFilaTipo = (tipo == eCaracterizacao.Dominialidade) ? (int)eFilaTipoGeo.Dominialidade : (int)eFilaTipoGeo.Atividade;

            vm.NiveisPrecisao    = ViewModelHelper.CriarSelectList(_bus.ObterNiveisPrecisao());
            vm.SistemaCoordenada = ViewModelHelper.CriarSelectList(_bus.ObterSistemaCoordenada());

            vm.Projeto.EmpreendimentoEasting  = emp.Coordenada.EastingUtm.Value;
            vm.Projeto.EmpreendimentoNorthing = emp.Coordenada.NorthingUtm.Value;

            vm.Projeto.CaracterizacaoTexto = (_listaBus.Caracterizacoes.SingleOrDefault(x => x.Id == vm.Projeto.CaracterizacaoId) ?? new CaracterizacaoLst()).Texto;
            vm.Projeto.SistemaCoordenada   = ConcatenarSistemaCoordenada(emp);

            vm.Dependentes = _caracterizacaoBus.Dependentes(vm.Projeto.EmpreendimentoId, tipo, eCaracterizacaoDependenciaTipo.ProjetoGeografico);
            vm.AtualizarDependenciasModalTitulo = Mensagem.Caracterizacao.AtualizarDependenciasModalTitulo.Texto;

            vm.UrlBaixarOrtofoto  = _config.Obter <string>(ConfiguracaoSistema.KeyUrlGeoBasesWebServices) + "/Arquivo/DownloadArquivoOrtoFoto";
            vm.UrlValidarOrtofoto = _config.Obter <string>(ConfiguracaoSistema.KeyUrlGeoBasesWebServices) + "/Arquivo/ValidarChaveArquivoOrtoFoto";

            vm.UrlsArquivo = ViewModelHelper.Json(ObterUrlsArquivo());

            #region Verificar o Redirecionamento

            vm.UrlAvancar = CaracterizacaoVM.GerarUrl(vm.Projeto.EmpreendimentoId, vm.isCadastrarCaracterizacao, (eCaracterizacao)tipo);

            List <DependenciaLst> dependencias = _caracterizacaoConfig.Obter <List <DependenciaLst> >(ConfiguracaoCaracterizacao.KeyCaracterizacoesDependencias);

            if (dependencias.Exists(x => x.DependenteTipo == (int)tipo && x.TipoDetentorId == (int)eCaracterizacaoDependenciaTipo.DescricaoLicenciamentoAtividade))
            {
                String           url = "Visualizar";
                PermissaoValidar permissaoValidar = new PermissaoValidar();

                if (permissaoValidar.ValidarAny(new[] { ePermissao.DescricaoLicenciamentoAtividadeCriar, ePermissao.DescricaoLicenciamentoAtividadeEditar }, false))
                {
                    url = "Criar";
                }

                vm.UrlAvancar = Url.Action(url, "DescricaoLicenciamentoAtividade", new { empreendimento = vm.Projeto.EmpreendimentoId, tipo = (int)tipo, isCadastrarCaracterizacao = vm.isCadastrarCaracterizacao });
            }

            #endregion

            if (vm.Projeto.Dependencias == null || vm.Projeto.Dependencias.Count == 0)
            {
                vm.Projeto.Dependencias = _caracterizacaoBus.ObterDependenciasAtual(vm.Projeto.EmpreendimentoId, tipo, eCaracterizacaoDependenciaTipo.ProjetoGeografico);
            }

            if (vm.Projeto.Id > 0 && mostrarModalDependencias)
            {
                vm.TextoMerge = _caracterizacaoValidar.DependenciasAlteradas(
                    vm.Projeto.EmpreendimentoId,
                    vm.Projeto.CaracterizacaoId,
                    eCaracterizacaoDependenciaTipo.ProjetoGeografico,
                    vm.Projeto.Dependencias, isVisualizar);
            }

            vm.Projeto.Dependencias = _caracterizacaoBus.ObterDependenciasAtual(vm.Projeto.EmpreendimentoId, tipo, eCaracterizacaoDependenciaTipo.ProjetoGeografico);

            //Busca as dependencias desse projeto geográfico
            _bus.ObterDependencias(vm.Projeto, true);

            if (vm.Projeto.Id > 0)
            {
                vm.CarregarVMs();
            }

            return(View("ProjetoGeografico", vm));
        }
Beispiel #6
0
        public ActionResult Index(int id)
        {
            EmpreendimentoCaracterizacao empreendimento = _bus.ObterEmpreendimentoSimplificado(id);

            if (empreendimento.Id == 0)
            {
                Validacao.Add(Mensagem.Caracterizacao.EmpreendimentoNaoEncontrado);
                return(RedirectToAction("Index", "../Empreendimento", Validacao.QueryParamSerializer()));
            }

            CaracterizacaoVM vm = new CaracterizacaoVM(empreendimento);

            List <CaracterizacaoLst> caracterizacoes = _bus.CaracterizacaoConfig.Obter <List <CaracterizacaoLst> >(ConfiguracaoCaracterizacao.KeyCaracterizacoes);
            List <ProjetoGeografico> projetos        = _bus.ObterProjetosEmpreendimento(id);

            if (!_bus.ValidarAcessarTela(caracterizacoes))
            {
                return(RedirectToAction("Index", "../Empreendimento", Validacao.QueryParamSerializer()));
            }

            List <Caracterizacao> cadastradas = _bus.ObterCaracterizacoesEmpreendimento(id) ?? new List <Caracterizacao>();

            vm.CaracterizacoesNaoCadastradas = caracterizacoes
                                               .Where(x => !cadastradas.Any(y => y.Id > 0 && (int)y.Tipo == x.Id))
                                               .Select(z => new CaracterizacaoVME()
            {
                Tipo = (eCaracterizacao)z.Id, Nome = z.Texto
            }).ToList();

            vm.CaracterizacoesCadastradas = caracterizacoes
                                            .Where(x => cadastradas.Any(y => y.Id > 0 && (int)y.Tipo == x.Id))
                                            .Select(z => new CaracterizacaoVME()
            {
                Tipo = (eCaracterizacao)z.Id, Nome = z.Texto
            }).ToList();

            List <DependenciaLst> dependencias = _bus.CaracterizacaoConfig.Obter <List <DependenciaLst> >(ConfiguracaoCaracterizacao.KeyCaracterizacoesDependencias);

            vm.CaracterizacoesNaoCadastradas.ForEach(x =>
            {
                x.PodeCadastrar         = User.IsInRole(String.Format("{0}Criar", x.Tipo.ToString()));
                x.ProjetoGeografico     = User.IsInRole("ProjetoGeograficoCriar");
                x.DscLicAtividade       = User.IsInRole("DescricaoLicenciamentoAtividadeCriar");
                x.ProjetoGeoObrigatorio = dependencias.Exists(y =>
                                                              y.DependenteTipo == (int)x.Tipo &&
                                                              y.DependenciaTipo == (int)x.Tipo &&
                                                              y.TipoId == (int)eCaracterizacaoDependenciaTipo.ProjetoGeografico);

                x.DscLicAtividadeObrigatorio = dependencias.Exists(y =>
                                                                   y.DependenteTipo == (int)x.Tipo &&
                                                                   y.DependenciaTipo == (int)x.Tipo &&
                                                                   y.TipoId == (int)eCaracterizacaoDependenciaTipo.DescricaoLicenciamentoAtividade);

                Caracterizacao cadastrada = cadastradas.SingleOrDefault(y => y.Tipo == x.Tipo) ?? new Caracterizacao();
                x.ProjetoGeograficoId     = cadastrada.ProjetoRascunhoId;
                x.DscLicAtividadeId       = cadastrada.DscLicAtividadeId;

                if (x.ProjetoGeograficoId <= 0)
                {
                    x.ProjetoGeograficoId = cadastrada.ProjetoId;
                }

                x.UrlCriar = Url.Action("Criar", x.Tipo.ToString());
            });

            vm.CaracterizacoesCadastradas.ForEach(x =>
            {
                if (User.IsInRole("ProjetoGeograficoEditar") || User.IsInRole("ProjetoGeograficoVisualizar"))
                {
                    x.ProjetoGeografico = true;
                }

                x.ProjetoGeograficoVisualizar =
                    User.IsInRole(ePermissao.ProjetoGeograficoVisualizar.ToString()) &&
                    !User.IsInRole(ePermissao.ProjetoGeograficoCriar.ToString()) &&
                    !User.IsInRole(ePermissao.ProjetoGeograficoEditar.ToString());

                if (User.IsInRole("DescricaoLicenciamentoAtividadeEditar") || User.IsInRole("DescricaoLicenciamentoAtividadeVisualizar"))
                {
                    x.DscLicAtividade = true;
                }

                x.DscLicAtividadeVisualizar =
                    User.IsInRole(ePermissao.DescricaoLicenciamentoAtividadeVisualizar.ToString()) &&
                    !User.IsInRole(ePermissao.DescricaoLicenciamentoAtividadeCriar.ToString()) &&
                    !User.IsInRole(ePermissao.DescricaoLicenciamentoAtividadeEditar.ToString());

                x.PodeEditar     = User.IsInRole(String.Format("{0}Editar", x.Tipo.ToString()));
                x.PodeVisualizar = User.IsInRole(String.Format("{0}Visualizar", x.Tipo.ToString()));
                x.PodeExcluir    = User.IsInRole(String.Format("{0}Excluir", x.Tipo.ToString()));

                Caracterizacao cadastrada = cadastradas.SingleOrDefault(y => y.Tipo == x.Tipo) ?? new Caracterizacao();
                x.ProjetoGeograficoId     = cadastrada.ProjetoId;
                x.DscLicAtividadeId       = cadastrada.DscLicAtividadeId;

                x.UrlEditar         = Url.Action("Editar", x.Tipo.ToString());
                x.UrlVisualizar     = Url.Action("Visualizar", x.Tipo.ToString());
                x.UrlExcluirConfirm = Url.Action("ExcluirConfirm", x.Tipo.ToString());
                x.UrlExcluir        = Url.Action("Excluir", x.Tipo.ToString());
            });

            #region CAR

            vm.CaracterizacoesCadastradas.Where(x => x.Tipo == eCaracterizacao.CadastroAmbientalRural).ToList().ForEach(x =>
            {
                x.ProjetoGeografico           = false;
                x.ProjetoGeograficoVisualizar = false;
                x.ProjetoGeograficoId         = 0;

                x.DscLicAtividade           = false;
                x.DscLicAtividadeVisualizar = false;
                x.DscLicAtividadeId         = 0;
            });

            #endregion

            return(View("Caracterizacao", vm));
        }
        public ActionResult Index(int id, int projetoDigitalId, bool visualizar = false)
        {
            ProjetoDigitalCredenciadoBus projetoDigitalCredenciadoBus = new ProjetoDigitalCredenciadoBus();

            if (id == 0)
            {
                if (!visualizar)
                {
                    ProjetoDigital projetoDigital = projetoDigitalCredenciadoBus.AlterarEtapa(projetoDigitalId, eProjetoDigitalEtapa.Envio);
                }
                return(RedirectToAction("Operar", "ProjetoDigital", Validacao.QueryParamSerializer(new { id = projetoDigitalId, area = "" })));
            }

            EmpreendimentoCaracterizacao empreendimento = _bus.ObterEmpreendimentoSimplificado(id);
            CaracterizacaoVM             vm             = new CaracterizacaoVM(empreendimento);

            if (empreendimento.InternoID > 0)
            {
                Empreendimento empreendimentoInterno = new EmpreendimentoInternoBus().ObterSimplificado(empreendimento.InternoID);

                if (empreendimento.InternoTID != empreendimentoInterno.Tid)
                {
                    vm.MensagensNotificacoes.Add(Mensagem.Caracterizacao.EmpreendimentoDesatualizado(empreendimentoInterno.Denominador).Texto);
                }
            }

            if (empreendimento.Id == 0)
            {
                Validacao.Add(Mensagem.Caracterizacao.EmpreendimentoNaoEncontrado);
                return(RedirectToAction("Operar", "ProjetoDigital", Validacao.QueryParamSerializer(new { id = projetoDigitalId, area = "" })));
            }

            vm.ProjetoDigitalId = projetoDigitalId;
            vm.IsVisualizar     = visualizar;

            List <CaracterizacaoLst> caracterizacoes = _bus.ObterCaracterizacoesPorProjetoDigital(projetoDigitalId);

            if (caracterizacoes.All(carac => carac.Permissao == ePermissaoTipo.NaoPermitido))
            {
                Validacao.Add(Mensagem.Caracterizacao.UsuarioNaoPermitidoParaCaracterizacao);
            }

            caracterizacoes.RemoveAll(caract => caract.Permissao == ePermissaoTipo.NaoPermitido);

            #region Projeto Digital

            if (caracterizacoes == null || caracterizacoes.Count <= 0)
            {
                ProjetoDigital projetoDigital = projetoDigitalCredenciadoBus.AlterarEtapa(projetoDigitalId, eProjetoDigitalEtapa.Envio);

                return(RedirectToAction("Operar", "ProjetoDigital", Validacao.QueryParamSerializer(new { id = projetoDigitalId, area = "" })));
            }

            ProjetoDigitalCredenciadoValidar projetoDigitalCredenciadoValidar = new ProjetoDigitalCredenciadoValidar();
            if (!projetoDigitalCredenciadoValidar.PossuiCaracterizacaoAtividade(caracterizacoes, projetoDigitalId))
            {
                if (!visualizar)
                {
                    ProjetoDigital projetoDigital = projetoDigitalCredenciadoBus.AlterarEtapa(projetoDigitalId, eProjetoDigitalEtapa.Envio);
                }
                return(RedirectToAction("Operar", "ProjetoDigital", Validacao.QueryParamSerializer(new { id = projetoDigitalId, area = "" })));
            }
            else
            {
                vm.MostrarFinalizar = (projetoDigitalCredenciadoBus.Obter(projetoDigitalId).Etapa == (int)eProjetoDigitalEtapa.Caracterizacao) && !visualizar;
            }

            #endregion

            List <Caracterizacao> caracterizacoesAssociadas = _bus.ObterCaracterizacoesAssociadasProjetoDigital(projetoDigitalId);
            List <Caracterizacao> cadastradas        = _bus.ObterCaracterizacoesEmpreendimento(id, projetoDigitalId) ?? new List <Caracterizacao>();
            List <Caracterizacao> cadastradasInterno = _internoBus.ObterCaracterizacoesAtuais(empreendimento.InternoID, caracterizacoes);

            if (cadastradas != null && cadastradas.Count > 0)
            {
                List <int> desatualizadas    = new List <int>();
                string     msgDesatualizadas = _validar.CaracterizacoesCadastradasDesatualizadas(empreendimento.Id, cadastradas, cadastradasInterno, out desatualizadas);
                if (!string.IsNullOrEmpty(msgDesatualizadas))
                {
                    vm.MensagensNotificacoes.Add(msgDesatualizadas);
                }
                vm.CaracterizacoesPossivelCopiar = _bus.ObterPossivelCopiar(cadastradas);
                vm.CaracterizacoesPossivelCopiar.AddRange(desatualizadas.Where(x => !vm.CaracterizacoesPossivelCopiar.Exists(y => y == x)));
            }

            vm.CaracterizacoesNaoCadastradas = caracterizacoes
                                               .Where(x => !cadastradas.Any(y => y.Id > 0 && (int)y.Tipo == x.Id))
                                               .Select(z => new CaracterizacaoVME()
            {
                Tipo = (eCaracterizacao)z.Id, Nome = z.Texto
            }).ToList();

            vm.CaracterizacoesCadastradas = caracterizacoes
                                            .Where(x => cadastradas.Where(y => !caracterizacoesAssociadas.Exists(z => z.Tipo == y.Tipo)).Any(y => y.Id > 0 && (int)y.Tipo == x.Id))
                                            .Select(z => new CaracterizacaoVME()
            {
                Tipo = (eCaracterizacao)z.Id, Nome = z.Texto
            }).ToList();

            vm.CaracterizacoesAssociadas = caracterizacoesAssociadas
                                           .Select(z => new CaracterizacaoVME()
            {
                Tipo = (eCaracterizacao)z.Tipo, Nome = z.Nome
            }).ToList();

            List <DependenciaLst> dependencias = _bus.CaracterizacaoConfig.Obter <List <DependenciaLst> >(ConfiguracaoCaracterizacao.KeyCaracterizacoesDependencias);

            #region Não Cadastradas

            vm.CaracterizacoesNaoCadastradas.ForEach(x =>
            {
                ICaracterizacaoBus caracterizacaoBus = CaracterizacaoBusFactory.Criar(x.Tipo);
                if (caracterizacaoBus != null)
                {
                    x.PodeCopiar = cadastradasInterno.Exists(y => y.Tipo == x.Tipo) && caracterizacaoBus.PodeCopiar(empreendimento.InternoID);
                }

                x.PodeCadastrar         = User.IsInRole(String.Format("{0}Criar", x.Tipo.ToString()));
                x.ProjetoGeografico     = User.IsInRole("ProjetoGeograficoCriar");
                x.ProjetoGeoObrigatorio = dependencias.Exists(y =>
                                                              y.DependenteTipo == (int)x.Tipo &&
                                                              y.DependenciaTipo == (int)x.Tipo &&
                                                              y.TipoId == (int)eCaracterizacaoDependenciaTipo.ProjetoGeografico);

                x.ProjetoGeograficoId = (cadastradas.FirstOrDefault(y => y.Tipo == x.Tipo) ?? new Caracterizacao()).ProjetoRascunhoId;

                if (x.ProjetoGeograficoId <= 0)
                {
                    x.ProjetoGeograficoId = (cadastradas.SingleOrDefault(y => y.Tipo == x.Tipo) ?? new Caracterizacao()).ProjetoId;
                }

                x.UrlCriar = Url.Action("Criar", x.Tipo.ToString());
            });

            #endregion

            #region Cadastradas

            vm.CaracterizacoesCadastradas.ForEach(x =>
            {
                if (User.IsInRole("ProjetoGeograficoEditar") || User.IsInRole("ProjetoGeograficoVisualizar"))
                {
                    x.ProjetoGeografico = true;
                }

                x.ProjetoGeograficoVisualizar = visualizar;
                x.PodeEditar     = User.IsInRole(String.Format("{0}Editar", x.Tipo.ToString()));
                x.PodeVisualizar = User.IsInRole(String.Format("{0}Visualizar", x.Tipo.ToString()));
                x.PodeExcluir    = (User.IsInRole(String.Format("{0}Excluir", x.Tipo.ToString())) && (x.Tipo == eCaracterizacao.UnidadeConsolidacao || x.Tipo == eCaracterizacao.UnidadeProducao));

                x.PodeCopiar   = cadastradasInterno.Exists(y => y.Tipo == x.Tipo);
                x.PodeAssociar = !caracterizacoesAssociadas.Exists(y => y.Tipo == x.Tipo);

                x.ProjetoGeograficoId = cadastradas.SingleOrDefault(y => y.Tipo == x.Tipo).ProjetoId;

                x.UrlEditar         = Url.Action("Editar", x.Tipo.ToString());
                x.UrlVisualizar     = Url.Action("Visualizar", x.Tipo.ToString());
                x.UrlExcluirConfirm = Url.Action("ExcluirConfirm", x.Tipo.ToString());
                x.UrlExcluir        = Url.Action("Excluir", x.Tipo.ToString());
            });

            #endregion

            #region Associadas

            vm.CaracterizacoesAssociadas.ForEach(x =>
            {
                if (User.IsInRole("ProjetoGeograficoVisualizar"))
                {
                    x.ProjetoGeografico           = true;
                    x.ProjetoGeograficoVisualizar = true;
                    x.ProjetoGeograficoId         = cadastradas.SingleOrDefault(y => y.Tipo == x.Tipo).ProjetoId;
                }

                x.PodeVisualizar = User.IsInRole(String.Format("{0}Visualizar", x.Tipo.ToString()));
                x.UrlVisualizar  = Url.Action("Visualizar", x.Tipo.ToString());
            });

            #endregion

            return(View("Caracterizacao", vm));
        }