public ExploracaoFlorestalAutorizacaoPDF(ExploracaoFlorestal exploracaoFlorestal)
 {
     TipoExploracao = exploracaoFlorestal.TipoExploracaoTexto;
     if (exploracaoFlorestal.Exploracoes.FirstOrDefault().GeometriaTipoId == (int)eExploracaoFlorestalGeometria.Ponto)
     {
         TotalPoligono = exploracaoFlorestal.Exploracoes.Sum(x => Convert.ToDecimal(string.IsNullOrWhiteSpace(x.QuantidadeArvores) ? "0" : x.QuantidadeArvores)).ToString("N2");
         Detalhe       = exploracaoFlorestal.Exploracoes.GroupBy(x => new { x.ClassificacaoVegetacaoTexto, x.GeometriaTipoId }, x => Convert.ToDecimal(x.QuantidadeArvores),
                                                                 (key, g) => new ExploracaoFlorestalAutorizacaoDetalhePDF()
         {
             VegetacaoTipo     = key.ClassificacaoVegetacaoTexto,
             GeometriaTipoId   = key.GeometriaTipoId,
             AreaCroquiDecimal = g.Sum(x => x)
         }).ToList();
     }
     else
     {
         TotalPoligono = exploracaoFlorestal.Exploracoes.Sum(x => x.AreaCroqui).ToString("N2");
         Detalhe       = exploracaoFlorestal.Exploracoes.GroupBy(x => new { x.ClassificacaoVegetacaoTexto, x.GeometriaTipoId }, x => x.AreaCroqui,
                                                                 (key, g) => new ExploracaoFlorestalAutorizacaoDetalhePDF()
         {
             VegetacaoTipo     = key.ClassificacaoVegetacaoTexto,
             GeometriaTipoId   = key.GeometriaTipoId,
             AreaCroquiDecimal = g.Sum(x => x)
         }).ToList();
     }
     UnidadeMedida = Detalhe?.FirstOrDefault().UnidadeMedida;
 }
Exemple #2
0
        public ActionResult Editar(int id)
        {
            if (!_caracterizacaoValidar.Basicas(id))
            {
                return(RedirectToAction("Index", "../Empreendimento", Validacao.QueryParamSerializer()));
            }

            if (!_validar.Acessar(id))
            {
                return(RedirectToAction("", "Caracterizacao", new { id = id, Msg = Validacao.QueryParam() }));
            }

            ExploracaoFlorestal caracterizacao = _bus.ObterPorEmpreendimento(id);
            string textoMerge = _caracterizacaoValidar.DependenciasAlteradas(
                caracterizacao.EmpreendimentoId,
                (int)eCaracterizacao.ExploracaoFlorestal,
                eCaracterizacaoDependenciaTipo.Caracterizacao,
                caracterizacao.Dependencias);

            if (!string.IsNullOrEmpty(textoMerge))
            {
                caracterizacao = _bus.MergiarGeo(caracterizacao);
            }

            ExploracaoFlorestalVM vm = new ExploracaoFlorestalVM(caracterizacao, _listaBus.ExploracaoFlorestalFinalidadesExploracoes,
                                                                 _listaBus.ExploracaoFlorestalClassificacoesVegetais, _listaBus.ExploracaoFlorestalExploracoesTipos, _listaBus.CaracterizacaoProdutosExploracao);

            vm.TextoMerge = textoMerge;
            vm.AtualizarDependenciasModalTitulo = Mensagem.Caracterizacao.AtualizarDependenciasModalTitulo.Texto;
            vm.TextoAbrirModal = _validar.AbrirModalAcessar(caracterizacao);

            return(View(vm));
        }
Exemple #3
0
        public ExploracaoFlorestalPDF(ExploracaoFlorestal exploracaoFlorestal)
        {
            _exploracoes = exploracaoFlorestal.Exploracoes.Select(x => new ExploracaoFlorestalExploracaoPDF(x)).ToList();

            int auxFinalidades = (exploracaoFlorestal.FinalidadeExploracao.HasValue) ? exploracaoFlorestal.FinalidadeExploracao.Value : 0;

            Finalidades = EntitiesBus.ObterFinalidades(auxFinalidades);
        }
Exemple #4
0
        public ExploracaoFlorestalPDF(ExploracaoFlorestal exploracaoFlorestal)
        {
            _exploracoes = exploracaoFlorestal.Exploracoes.Select(x => new ExploracaoFlorestalExploracaoPDF(x)).ToList();
            var exploracoesFirst = exploracaoFlorestal.Exploracoes.FirstOrDefault() ?? new ExploracaoFlorestalExploracao();
            int auxFinalidades   = (exploracoesFirst.FinalidadeExploracao.HasValue) ? exploracoesFirst.FinalidadeExploracao.Value : 0;

            Finalidades      = EntitiesBus.ObterFinalidades(auxFinalidades);
            CodigoExploracao = exploracaoFlorestal.CodigoExploracaoTexto;
            TipoExploracao   = exploracaoFlorestal.TipoExploracaoTexto;
            DataCadastro     = exploracaoFlorestal.DataCadastro.DataTexto;
        }
Exemple #5
0
        public ActionResult GeoMergiar(ExploracaoFlorestal exploracao)
        {
            ExploracaoFlorestalVM vm = new ExploracaoFlorestalVM(_bus.MergiarGeo(exploracao), _listaBus.ExploracaoFlorestalFinalidadesExploracoes,
                                                                 _listaBus.ExploracaoFlorestalClassificacoesVegetais, _listaBus.ExploracaoFlorestalExploracoesTipos, _listaBus.CaracterizacaoProdutosExploracao);

            return(Json(new
            {
                @EhValido = Validacao.EhValido,
                @Msg = Validacao.Erros,
                @Html = ViewModelHelper.RenderPartialViewToString(ControllerContext, "ExploracaoFlorestal", vm),
                @Dependencias = ViewModelHelper.Json(vm.Caracterizacao.Dependencias)
            }, JsonRequestBehavior.AllowGet));
        }
        internal void Salvar(ExploracaoFlorestal caracterizacao, BancoDeDados banco)
        {
            if (caracterizacao == null)
            {
                throw new Exception("A Caracterização é nula.");
            }

            if (caracterizacao.Id <= 0)
            {
                Criar(caracterizacao, banco);
            }
            else
            {
                Editar(caracterizacao, banco);
            }
        }
        public ExploracaoFlorestal ObterPorEmpreendimento(int empreendimento, bool simplificado = false, BancoDeDados banco = null)
        {
            ExploracaoFlorestal caracterizacao = null;

            try
            {
                caracterizacao = _da.ObterPorEmpreendimento(empreendimento, simplificado: simplificado);
                caracterizacao.Dependencias = _busCaracterizacao.ObterDependencias(caracterizacao.Id, eCaracterizacao.ExploracaoFlorestal, eCaracterizacaoDependenciaTipo.Caracterizacao);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(caracterizacao);
        }
        public ExploracaoFlorestal MergiarGeo(ExploracaoFlorestal caracterizacaoAtual)
        {
            var dadosGeo = ObterDadosGeo(caracterizacaoAtual.EmpreendimentoId);

            foreach (var dado in dadosGeo)
            {
                foreach (ExploracaoFlorestalExploracao exploracao in dado.Exploracoes)
                {
                    if (!caracterizacaoAtual.Exploracoes.Exists(x => x.Identificacao == exploracao.Identificacao))
                    {
                        caracterizacaoAtual.Exploracoes.Add(exploracao);
                    }
                }
            }

            List <ExploracaoFlorestalExploracao> exploracoesRemover = new List <ExploracaoFlorestalExploracao>();

            foreach (ExploracaoFlorestalExploracao exploracao in caracterizacaoAtual.Exploracoes)
            {
                foreach (var dado in dadosGeo)
                {
                    if (!dado.Exploracoes.Exists(x => x.Identificacao == exploracao.Identificacao))
                    {
                        exploracoesRemover.Add(exploracao);
                        continue;
                    }
                    else
                    {
                        ExploracaoFlorestalExploracao exploracaoAux = dado.Exploracoes.SingleOrDefault(x => x.Identificacao == exploracao.Identificacao) ?? new ExploracaoFlorestalExploracao();
                        exploracao.Identificacao      = exploracaoAux.Identificacao;
                        exploracao.GeometriaTipoId    = exploracaoAux.GeometriaTipoId;
                        exploracao.GeometriaTipoTexto = exploracaoAux.GeometriaTipoTexto;
                        exploracao.AreaCroqui         = exploracaoAux.AreaCroqui;
                    }
                }
            }

            foreach (ExploracaoFlorestalExploracao exploracaoFlorestal in exploracoesRemover)
            {
                caracterizacaoAtual.Exploracoes.Remove(exploracaoFlorestal);
            }

            return(caracterizacaoAtual);
        }
        internal ExploracaoFlorestal ObterPorEmpreendimento(int empreendimento, bool simplificado = false, BancoDeDados banco = null)
        {
            ExploracaoFlorestal caracterizacao = new ExploracaoFlorestal();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                Comando comando = bancoDeDados.CriarComando(@"select s.id from {0}crt_exploracao_florestal s where s.empreendimento = :empreendimento", EsquemaBanco);
                comando.AdicionarParametroEntrada("empreendimento", empreendimento, DbType.Int32);

                object valor = bancoDeDados.ExecutarScalar(comando);

                if (valor != null && !Convert.IsDBNull(valor))
                {
                    caracterizacao = Obter(Convert.ToInt32(valor), bancoDeDados, simplificado);
                }
            }

            return(caracterizacao);
        }
        public string AbrirModalAcessar(ExploracaoFlorestal caracterizacao)
        {
            EmpreendimentoCaracterizacao empreendimento = _caracterizacaoBus.ObterEmpreendimentoSimplificado(caracterizacao.EmpreendimentoId);

            if (empreendimento.ZonaLocalizacao == eZonaLocalizacao.Rural)
            {
                DominialidadeDa dominialidadeDa = new DominialidadeDa();
                Dominialidade   dominialidade   = dominialidadeDa.ObterPorEmpreendimento(caracterizacao.EmpreendimentoId);

                foreach (Dominio dominio in dominialidade.Dominios)
                {
                    if (dominio.ReservasLegais.Exists(x => x.SituacaoId == (int)eReservaLegalSituacao.NaoInformada))
                    {
                        return(Mensagem.ExploracaoFlorestal.EmpreendimentoRuralReservaIndefinida.Texto);
                    }
                }
            }

            return(string.Empty);
        }
Exemple #11
0
        public ExploracaoFlorestalVM(ExploracaoFlorestal caracterizacao, List <FinalidadeExploracao> finalidades, List <Lista> classificacoesVegetais, List <Lista> exploracaoTipos, List <Lista> produtos, bool isVisualizar = false)
        {
            // passa o item "Outros" para a ultiam posição
            FinalidadeExploracao finalidade = finalidades.SingleOrDefault(x => x.Texto == "Outros");

            if (finalidade != null)
            {
                finalidades.Remove(finalidade);
                finalidades.Add(finalidade);
            }

            Finalidades    = finalidades;
            Caracterizacao = caracterizacao;
            IsVisualizar   = isVisualizar;

            foreach (ExploracaoFlorestalExploracao exploracao in caracterizacao.Exploracoes)
            {
                ExploracaoFlorestalExploracaoVM exploracaoVM = new ExploracaoFlorestalExploracaoVM(exploracaoTipos, classificacoesVegetais, produtos, exploracao, isVisualizar);
                ExploracaoFlorestalExploracaoVM.Add(exploracaoVM);
            }
        }
Exemple #12
0
        public ActionResult Criar(ExploracaoFlorestal caracterizacao)
        {
            string textoMerge = _caracterizacaoValidar.DependenciasAlteradas(
                caracterizacao.EmpreendimentoId,
                (int)eCaracterizacao.ExploracaoFlorestal,
                eCaracterizacaoDependenciaTipo.Caracterizacao,
                caracterizacao.Dependencias);

            if (!string.IsNullOrEmpty(textoMerge))
            {
                return(Json(new { @TextoMerge = textoMerge }, JsonRequestBehavior.AllowGet));
            }

            _bus.Salvar(caracterizacao);
            return(Json(new
            {
                @EhValido = Validacao.EhValido,
                @Msg = Validacao.Erros,
                @UrlRedirecionar = Url.Action("", "Caracterizacao", new { id = caracterizacao.EmpreendimentoId, Msg = Validacao.QueryParam() })
            }, JsonRequestBehavior.AllowGet));
        }
        public ExploracaoFlorestalVM(ExploracaoFlorestal caracterizacao, List <FinalidadeExploracao> finalidades, List <Lista> classificacoesVegetais,
                                     List <Lista> exploracaoTipos, List <Lista> produtos, List <Lista> destinacao, List <Lista> tipoExploracao, bool isVisualizar = false)
        {
            Caracterizacao = caracterizacao;
            IsVisualizar   = isVisualizar;
            TipoExploracao = ViewModelHelper.CriarSelectList(tipoExploracao, selecionado: caracterizacao.TipoExploracao.ToString());

            var codigoExploracao = new List <Lista>();

            if (caracterizacao.CodigoExploracao > 0)
            {
                codigoExploracao = new List <Lista>()
                {
                    new Lista()
                    {
                        Id    = caracterizacao.CodigoExploracao.ToString(),
                        Texto = tipoExploracao.FirstOrDefault(x => x.Id == caracterizacao.TipoExploracao.ToString()).Texto.Substring(0, 3) + caracterizacao.CodigoExploracao.ToString().PadLeft(3, '0')
                    }
                };
            }
            CodigoExploracao = ViewModelHelper.CriarSelectList(codigoExploracao, selecionado: caracterizacao.CodigoExploracao.ToString());

            var finalidadesFiltradas = new List <FinalidadeExploracao>();

            if (caracterizacao.TipoExploracao == (int)eTipoExploracao.UAS)
            {
                finalidadesFiltradas = finalidades.Where(x => x.Codigo != (int)eExploracaoFlorestalFinalidade.AproveitamentoMadeira).ToList();
            }
            else
            {
                finalidadesFiltradas = finalidades;
            }

            foreach (ExploracaoFlorestalExploracao exploracao in caracterizacao.Exploracoes)
            {
                ExploracaoFlorestalExploracaoVM exploracaoVM = new ExploracaoFlorestalExploracaoVM(finalidadesFiltradas, exploracaoTipos, classificacoesVegetais, produtos, destinacao, exploracao, isVisualizar);
                ExploracaoFlorestalExploracaoVM.Add(exploracaoVM);
            }
        }
        internal ExploracaoFlorestal Obter(int id, BancoDeDados banco = null, string tid = null, bool simplificado = false)
        {
            ExploracaoFlorestal caracterizacao = new ExploracaoFlorestal();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                if (tid == null)
                {
                    caracterizacao = Obter(id, bancoDeDados, simplificado);
                }
                else
                {
                    Comando comando = bancoDeDados.CriarComando(@"select count(s.id) existe from {0}crt_exploracao_florestal s where s.id = :id and s.tid = :tid", EsquemaBanco);

                    comando.AdicionarParametroEntrada("id", id, DbType.Int32);
                    comando.AdicionarParametroEntrada("tid", DbType.String, 36, tid);

                    caracterizacao = (Convert.ToBoolean(bancoDeDados.ExecutarScalar(comando))) ? Obter(id, bancoDeDados, simplificado) : ObterHistorico(id, bancoDeDados, tid, simplificado);
                }
            }

            return(caracterizacao);
        }
        public bool Salvar(ExploracaoFlorestal caracterizacao)
        {
            try
            {
                if (_validar.Salvar(caracterizacao))
                {
                    GerenciadorTransacao.ObterIDAtual();

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

                        _da.Salvar(caracterizacao, bancoDeDados);

                        //Gerencia as dependências da caracterização
                        _busCaracterizacao.Dependencias(new Caracterizacao()
                        {
                            Id             = caracterizacao.Id,
                            Tipo           = eCaracterizacao.ExploracaoFlorestal,
                            DependenteTipo = eCaracterizacaoDependenciaTipo.Caracterizacao,
                            Dependencias   = caracterizacao.Dependencias
                        }, bancoDeDados);

                        Validacao.Add(Mensagem.ExploracaoFlorestal.Salvar);

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

            return(Validacao.EhValido);
        }
Exemple #16
0
        public ActionResult Criar(int id)
        {
            if (!_caracterizacaoValidar.Basicas(id))
            {
                return(RedirectToAction("Index", "../Empreendimento", Validacao.QueryParamSerializer()));
            }

            ExploracaoFlorestal caracterizacao = _bus.ObterDadosGeo(id);

            caracterizacao.EmpreendimentoId = id;

            if (!_validar.Acessar(caracterizacao.EmpreendimentoId))
            {
                return(RedirectToAction("", "Caracterizacao", new { id = id, Msg = Validacao.QueryParam() }));
            }

            caracterizacao.Dependencias = _caracterizacaoBus.ObterDependenciasAtual(id, eCaracterizacao.ExploracaoFlorestal, eCaracterizacaoDependenciaTipo.Caracterizacao);
            ExploracaoFlorestalVM vm = new ExploracaoFlorestalVM(caracterizacao, _listaBus.ExploracaoFlorestalFinalidadesExploracoes,
                                                                 _listaBus.ExploracaoFlorestalClassificacoesVegetais, _listaBus.ExploracaoFlorestalExploracoesTipos, _listaBus.CaracterizacaoProdutosExploracao);

            vm.AtualizarDependenciasModalTitulo = Mensagem.Caracterizacao.AtualizarDependenciasModalTitulo.Texto;
            vm.TextoAbrirModal = _validar.AbrirModalAcessar(caracterizacao);
            return(View(vm));
        }
        internal void Editar(ExploracaoFlorestal caracterizacao, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                #region Exploração Florestal

                bancoDeDados.IniciarTransacao();

                Comando comando = bancoDeDados.CriarComando(@"update {0}crt_exploracao_florestal c set c.finalidade = :finalidade, 
				c.finalidade_outros = :finalidade_outros, c.tid = :tid where c.id = :id"                , EsquemaBanco);

                comando.AdicionarParametroEntrada("finalidade", caracterizacao.FinalidadeExploracao, DbType.Decimal);
                comando.AdicionarParametroEntrada("finalidade_outros", DbType.String, 80, caracterizacao.FinalidadeEspecificar);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                comando.AdicionarParametroEntrada("id", caracterizacao.Id, DbType.Int32);

                bancoDeDados.ExecutarNonQuery(comando);

                #endregion

                #region Limpar os dados do banco

                comando = bancoDeDados.CriarComando(@"delete from {0}crt_exp_florestal_produto c where c.exp_florestal_exploracao in 
				(select a.id from {0}crt_exp_florestal_exploracao a where a.exploracao_florestal = :exploracao_florestal "                , EsquemaBanco);

                comando.DbCommand.CommandText += comando.AdicionarNotIn("and", "a.id", DbType.Int32, caracterizacao.Exploracoes.Select(x => x.Id).ToList());

                comando.DbCommand.CommandText += ")";

                comando.AdicionarParametroEntrada("exploracao_florestal", caracterizacao.Id, DbType.Int32);

                bancoDeDados.ExecutarNonQuery(comando);

                foreach (ExploracaoFlorestalExploracao item in caracterizacao.Exploracoes)
                {
                    comando = bancoDeDados.CriarComando(@"delete from {0}crt_exp_florestal_produto c 
					where c.exp_florestal_exploracao in (select a.id from {0}crt_exp_florestal_exploracao a where a.exploracao_florestal = :exploracao_florestal and a.id = :exp_florestal_exploracao)"                    , EsquemaBanco);
                    comando.DbCommand.CommandText += String.Format(" {0}", comando.AdicionarNotIn("and", "c.id", DbType.Int32, item.Produtos.Select(x => x.Id).ToList()));

                    comando.AdicionarParametroEntrada("exp_florestal_exploracao", item.Id, DbType.Int32);
                    comando.AdicionarParametroEntrada("exploracao_florestal", caracterizacao.Id, DbType.Int32);

                    bancoDeDados.ExecutarNonQuery(comando);
                }

                //Explorações
                comando = bancoDeDados.CriarComando("delete from {0}crt_exp_florestal_exploracao c ", EsquemaBanco);
                comando.DbCommand.CommandText += String.Format("where c.exploracao_florestal = :exploracao_florestal{0}",
                                                               comando.AdicionarNotIn("and", "c.id", DbType.Int32, caracterizacao.Exploracoes.Select(x => x.Id).ToList()));
                comando.AdicionarParametroEntrada("exploracao_florestal", caracterizacao.Id, DbType.Int32);
                bancoDeDados.ExecutarNonQuery(comando);

                #endregion

                #region Explorações

                if (caracterizacao.Exploracoes != null && caracterizacao.Exploracoes.Count > 0)
                {
                    foreach (ExploracaoFlorestalExploracao item in caracterizacao.Exploracoes)
                    {
                        if (item.Id > 0)
                        {
                            comando = bancoDeDados.CriarComando(@"update {0}crt_exp_florestal_exploracao c set c.identificacao = :identificacao, c.geometria = :geometria, 
							c.area_croqui = :area_croqui, c.classificacao_vegetacao = :classificacao_vegetacao, c.area_requerida = :area_requerida, c.arvores_requeridas = :arvores_requeridas,
							c.exploracao_tipo = :exploracao_tipo, c.quantidade_arvores = :quantidade_arvores, c.tid = :tid where c.id = :id"                            , EsquemaBanco);

                            comando.AdicionarParametroEntrada("id", item.Id, DbType.Int32);
                        }
                        else
                        {
                            comando = bancoDeDados.CriarComando(@"insert into {0}crt_exp_florestal_exploracao c (id, exploracao_florestal, identificacao, geometria, area_croqui, 
							classificacao_vegetacao, area_requerida, arvores_requeridas, exploracao_tipo, quantidade_arvores, tid) values ({0}seq_crt_exp_flores_exploracao.nextval, :exploracao_florestal, :identificacao, 
							:geometria, :area_croqui, :classificacao_vegetacao, :area_requerida, :arvores_requeridas, :exploracao_tipo, :quantidade_arvores, :tid) returning c.id into :id"                            , EsquemaBanco);

                            comando.AdicionarParametroEntrada("exploracao_florestal", caracterizacao.Id, DbType.Int32);
                            comando.AdicionarParametroSaida("id", DbType.Int32);
                        }

                        comando.AdicionarParametroEntrada("identificacao", DbType.String, 100, item.Identificacao);
                        comando.AdicionarParametroEntrada("geometria", item.GeometriaTipoId, DbType.Int32);
                        comando.AdicionarParametroEntrada("area_croqui", item.AreaCroqui, DbType.Decimal);
                        comando.AdicionarParametroEntrada("classificacao_vegetacao", item.ClassificacaoVegetacaoId, DbType.Int32);
                        comando.AdicionarParametroEntrada("area_requerida", item.AreaRequerida, DbType.Decimal);
                        comando.AdicionarParametroEntrada("arvores_requeridas", item.ArvoresRequeridas, DbType.Decimal);
                        comando.AdicionarParametroEntrada("quantidade_arvores", item.QuantidadeArvores, DbType.Int32);
                        comando.AdicionarParametroEntrada("exploracao_tipo", item.ExploracaoTipoId, DbType.Int32);
                        comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());

                        bancoDeDados.ExecutarNonQuery(comando);

                        if (item.Id <= 0)
                        {
                            item.Id = Convert.ToInt32(comando.ObterValorParametro("id"));
                        }

                        #region Produtos

                        if (item.Produtos != null && item.Produtos.Count > 0)
                        {
                            foreach (ExploracaoFlorestalProduto itemAux in item.Produtos)
                            {
                                if (itemAux.Id > 0)
                                {
                                    comando = bancoDeDados.CriarComando(@"update {0}crt_exp_florestal_produto c set c.produto = :produto, c.quantidade = :quantidade, 
									c.tid = :tid where c.id = :id"                                    , EsquemaBanco);

                                    comando.AdicionarParametroEntrada("id", itemAux.ProdutoId, DbType.Int32);
                                }
                                else
                                {
                                    comando = bancoDeDados.CriarComando(@"insert into {0}crt_exp_florestal_produto c (id, exp_florestal_exploracao, produto, quantidade, tid)
									values ({0}seq_crt_exp_florestal_produto.nextval, :exp_florestal_exploracao, :produto, :quantidade, :tid)"                                    , EsquemaBanco);

                                    comando.AdicionarParametroEntrada("exp_florestal_exploracao", item.Id, DbType.Int32);
                                }

                                comando.AdicionarParametroEntrada("produto", itemAux.ProdutoId, DbType.Int32);
                                comando.AdicionarParametroEntrada("quantidade", itemAux.Quantidade, DbType.Decimal);
                                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());

                                bancoDeDados.ExecutarNonQuery(comando);
                            }
                        }

                        #endregion
                    }
                }

                #endregion

                #region Histórico

                Historico.Gerar(caracterizacao.Id, eHistoricoArtefatoCaracterizacao.exploracaoflorestal, eHistoricoAcao.atualizar, bancoDeDados, null);

                #endregion

                bancoDeDados.Commit();
            }
        }
        internal int?Criar(ExploracaoFlorestal caracterizacao, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                #region Exploração Florestal

                bancoDeDados.IniciarTransacao();

                Comando comando = bancoDeDados.CriarComando(@"insert into {0}crt_exploracao_florestal c (id, empreendimento, finalidade, finalidade_outros, tid) 
				values ({0}seq_crt_exploracao_florestal.nextval, :empreendimento, :finalidade, :finalidade_outros, :tid) returning c.id into :id"                , EsquemaBanco);

                comando.AdicionarParametroEntrada("empreendimento", caracterizacao.EmpreendimentoId, DbType.Int32);
                comando.AdicionarParametroEntrada("finalidade", caracterizacao.FinalidadeExploracao, DbType.Decimal);
                comando.AdicionarParametroEntrada("finalidade_outros", DbType.String, 80, caracterizacao.FinalidadeEspecificar);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                comando.AdicionarParametroSaida("id", DbType.Int32);

                bancoDeDados.ExecutarNonQuery(comando);

                caracterizacao.Id = Convert.ToInt32(comando.ObterValorParametro("id"));

                #endregion

                #region Explorações

                if (caracterizacao.Exploracoes != null && caracterizacao.Exploracoes.Count > 0)
                {
                    foreach (ExploracaoFlorestalExploracao item in caracterizacao.Exploracoes)
                    {
                        comando = bancoDeDados.CriarComando(@"insert into {0}crt_exp_florestal_exploracao c (id, exploracao_florestal, identificacao, geometria, area_croqui, 
						classificacao_vegetacao, area_requerida, arvores_requeridas, exploracao_tipo, quantidade_arvores, tid) values ({0}seq_crt_exp_flores_exploracao.nextval, :exploracao_florestal, :identificacao, 
						:geometria, :area_croqui, :classificacao_vegetacao, :area_requerida, :arvores_requeridas, :exploracao_tipo, :quantidade_arvores, :tid) returning c.id into :id"                        , EsquemaBanco);

                        comando.AdicionarParametroEntrada("exploracao_florestal", caracterizacao.Id, DbType.Int32);
                        comando.AdicionarParametroEntrada("identificacao", DbType.String, 100, item.Identificacao);
                        comando.AdicionarParametroEntrada("geometria", item.GeometriaTipoId, DbType.Int32);
                        comando.AdicionarParametroEntrada("area_croqui", item.AreaCroqui, DbType.Decimal);
                        comando.AdicionarParametroEntrada("classificacao_vegetacao", item.ClassificacaoVegetacaoId, DbType.Int32);
                        comando.AdicionarParametroEntrada("area_requerida", item.AreaRequerida, DbType.Decimal);
                        comando.AdicionarParametroEntrada("arvores_requeridas", item.ArvoresRequeridas, DbType.Decimal);
                        comando.AdicionarParametroEntrada("quantidade_arvores", item.QuantidadeArvores, DbType.Int32);
                        comando.AdicionarParametroEntrada("exploracao_tipo", item.ExploracaoTipoId, DbType.Int32);
                        comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                        comando.AdicionarParametroSaida("id", DbType.Int32);

                        bancoDeDados.ExecutarNonQuery(comando);

                        item.Id = Convert.ToInt32(comando.ObterValorParametro("id"));

                        #region Produtos

                        if (item.Produtos != null && item.Produtos.Count > 0)
                        {
                            foreach (ExploracaoFlorestalProduto itemAux in item.Produtos)
                            {
                                comando = bancoDeDados.CriarComando(@"insert into {0}crt_exp_florestal_produto c (id, exp_florestal_exploracao, produto, quantidade, tid)
								values ({0}seq_crt_exp_florestal_produto.nextval, :exp_florestal_exploracao, :produto, :quantidade, :tid)"                                , EsquemaBanco);

                                comando.AdicionarParametroEntrada("exp_florestal_exploracao", item.Id, DbType.Int32);
                                comando.AdicionarParametroEntrada("produto", itemAux.ProdutoId, DbType.Int32);
                                comando.AdicionarParametroEntrada("quantidade", itemAux.Quantidade, DbType.Decimal);
                                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());

                                bancoDeDados.ExecutarNonQuery(comando);
                            }
                        }

                        #endregion
                    }
                }

                #endregion

                #region Histórico

                Historico.Gerar(caracterizacao.Id, eHistoricoArtefatoCaracterizacao.exploracaoflorestal, eHistoricoAcao.criar, bancoDeDados, null);

                #endregion

                bancoDeDados.Commit();

                return(caracterizacao.Id);
            }
        }
        internal ExploracaoFlorestal ObterDadosGeo(int empreendimento, BancoDeDados banco = null)
        {
            ExploracaoFlorestal caracterizacao = new ExploracaoFlorestal();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                #region Dados Geo
                /*Verificar classificação com analista*/
                Comando comando = bancoDeDados.CriarComando(@"
					select tab.*,
						   (case
								when substr(tab.avn,1,1) = 'I' then 2/*Floresta Nativa - Estágio inicial*/
								when substr(tab.avn,1,1) = 'M' then 3/*Floresta Nativa - Estágio médio*/
								when substr(tab.avn,1,1) = 'A' then 4/*Floresta Nativa - Estágio avançado*/
								when substr(tab.avn,1,1) = 'N' and Instr(tab.aa, 'FLORESTA-PLANTADA') > 0	then 1/*aa - Floresta Plantada*/
								when substr(tab.avn,1,1) = 'N' and Instr(tab.aa, 'CULTURAS-PERENES') > 0	then 6/*aa - CULTURAS-PERENES*/
								when substr(tab.avn,1,1) = 'N' and Instr(tab.aa, 'CULTURAS-ANUAIS') > 0		then 9/*aa - CULTURAS-ANUAIS*/
								when substr(tab.avn,1,1) = 'N' and Instr(tab.aa, 'PASTAGEM') > 0			then 7/*aa - PASTAGEM*/								
								when substr(tab.avn,1,1) = 'N' and Instr(tab.aa, 'OUTRO') > 0				then 8/*aa - OUTRO*/
								when tab.avn = '[x]' then 5 /*Arvores isoladas->Ponto e Linha*/
						   end) class_vegetal
					  from (select a.atividade,
								   a.codigo             identificacao,
								   3					 geometria_tipo,
								   a.area_m2            area_croqui,
								   a.avn,
								   a.aa
							  from {1}geo_aativ       a,
								   {0}crt_projeto_geo         g,
								   {0}lov_caracterizacao_tipo lc
							 where a.atividade = lc.texto
							   and a.projeto = g.id
							   and lc.id = :caracterizacao
							   and g.empreendimento = :empreendimento
							   and g.caracterizacao = :caracterizacao
							union all
							select a.atividade,
								   a.codigo             identificacao,
								   2 geometria_tipo,
								   null                 area_croqui,
								   '[x]' avn,
								   a.aa
							  from {1}geo_lativ       a,
								   {0}crt_projeto_geo         g,
								   {0}lov_caracterizacao_tipo lc
							 where a.atividade = lc.texto
							   and a.projeto = g.id
							   and lc.id = :caracterizacao
							   and g.empreendimento = :empreendimento
							   and g.caracterizacao = :caracterizacao
							union all
							select a.atividade,
								   a.codigo             identificacao,
								   1 geometria_tipo,
								   null                 area_croqui,
								   '[x]' avn,
								   a.aa
							  from {1}geo_pativ       a,
								   {0}crt_projeto_geo         g,
								   {0}lov_caracterizacao_tipo lc
							 where a.atividade = lc.texto
							   and a.projeto = g.id
							   and lc.id = :caracterizacao
							   and g.empreendimento = :empreendimento
							   and g.caracterizacao = :caracterizacao
							union all
							select a.atividade,
								   a.codigo             identificacao,
								   3 geometria_tipo,
								   a.area_m2            area_croqui,
								   a.avn,
								   a.aa
							  from {1}geo_aiativ      a,
								   {0}crt_projeto_geo         g,
								   {0}lov_caracterizacao_tipo lc
							 where a.atividade = lc.texto
							   and a.projeto = g.id
							   and lc.id = :caracterizacao
							   and g.empreendimento = :empreendimento
							   and g.caracterizacao = :caracterizacao) tab"                            , EsquemaBanco, EsquemaBancoGeo);

                comando.AdicionarParametroEntrada("empreendimento", empreendimento, DbType.Int32);
                comando.AdicionarParametroEntrada("caracterizacao", (int)eCaracterizacao.ExploracaoFlorestal, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    ExploracaoFlorestalExploracao exploracao = null;
                    while (reader.Read())
                    {
                        exploracao = new ExploracaoFlorestalExploracao();
                        exploracao.Identificacao   = reader["identificacao"].ToString();
                        exploracao.GeometriaTipoId = Convert.ToInt32(reader["geometria_tipo"]);

                        exploracao.ClassificacaoVegetacaoId = reader.GetValue <int>("class_vegetal");

                        exploracao.AreaCroqui = reader.GetValue <decimal>("area_croqui");

                        exploracao.GeometriaTipoTexto = _caracterizacaoConfig.Obter <List <Lista> >(ConfiguracaoCaracterizacao.KeyCaracterizacaoGeometriaTipo).
                                                        SingleOrDefault(x => x.Id == (exploracao.GeometriaTipoId).ToString()).Texto;

                        caracterizacao.Exploracoes.Add(exploracao);
                    }

                    reader.Close();
                }

                #endregion
            }

            return(caracterizacao);
        }
        private ExploracaoFlorestal ObterHistorico(int id, BancoDeDados banco = null, string tid = null, bool simplificado = false)
        {
            ExploracaoFlorestal caracterizacao = new ExploracaoFlorestal();
            int hst = 0;

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                #region Exploração Florestal

                Comando comando = bancoDeDados.CriarComando(@"select c.id, c.empreendimento_id, c.finalidade, c.finalidade_outros, c.tid 
				from {0}hst_crt_exploracao_florestal c where c.exploracao_florestal_id = :id and c.tid = :tid"                , EsquemaBanco);

                comando.AdicionarParametroEntrada("id", id, DbType.Int32);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, tid);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    if (reader.Read())
                    {
                        hst = Convert.ToInt32(reader["id"]);

                        caracterizacao.Id = id;
                        caracterizacao.EmpreendimentoId      = Convert.ToInt32(reader["empreendimento_id"]);
                        caracterizacao.FinalidadeExploracao  = Convert.ToInt32(reader["finalidade"]);
                        caracterizacao.FinalidadeEspecificar = reader["finalidade_outros"].ToString();
                        caracterizacao.Tid = reader["tid"].ToString();
                    }

                    reader.Close();
                }

                #endregion

                if (caracterizacao.Id <= 0 || simplificado)
                {
                    return(caracterizacao);
                }

                #region Explorações

                comando = bancoDeDados.CriarComando(@"select c.id, c.exp_florestal_exploracao_id, c.identificacao, c.geometria_id, c.geometria_texto, c.area_croqui, c.area_requerida, 
				c.arvores_requeridas, c.classificacao_vegetacao_id, c.classificacao_vegetacao_texto, c.exploracao_tipo_id, c.exploracao_tipo_texto, c.quantidade_arvores, c.tid 
				from {0}hst_crt_exp_florest_exploracao c where c.id_hst = :id"                , EsquemaBanco);

                comando.AdicionarParametroEntrada("id", hst, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    ExploracaoFlorestalExploracao exploracao = null;

                    while (reader.Read())
                    {
                        hst = Convert.ToInt32(reader["id"]);

                        exploracao                   = new ExploracaoFlorestalExploracao();
                        exploracao.Id                = Convert.ToInt32(reader["exp_florestal_exploracao_id"]);
                        exploracao.Tid               = reader["tid"].ToString();
                        exploracao.Identificacao     = reader["identificacao"].ToString();
                        exploracao.AreaCroqui        = reader.GetValue <decimal>("area_croqui");
                        exploracao.AreaRequerida     = reader.GetValue <decimal>("area_requerida");
                        exploracao.QuantidadeArvores = reader["quantidade_arvores"].ToString();
                        exploracao.ArvoresRequeridas = reader["arvores_requeridas"].ToString();

                        if (reader["geometria_id"] != null && !Convert.IsDBNull(reader["geometria_id"]))
                        {
                            exploracao.GeometriaTipoId    = Convert.ToInt32(reader["geometria_id"]);
                            exploracao.GeometriaTipoTexto = reader["geometria_texto"].ToString();
                        }

                        if (reader["classificacao_vegetacao_id"] != null && !Convert.IsDBNull(reader["classificacao_vegetacao_id"]))
                        {
                            exploracao.ClassificacaoVegetacaoId    = Convert.ToInt32(reader["classificacao_vegetacao_id"]);
                            exploracao.ClassificacaoVegetacaoTexto = reader["classificacao_vegetacao_texto"].ToString();
                        }

                        if (reader["exploracao_tipo_id"] != null && !Convert.IsDBNull(reader["exploracao_tipo_id"]))
                        {
                            exploracao.ExploracaoTipoId    = Convert.ToInt32(reader["exploracao_tipo_id"]);
                            exploracao.ExploracaoTipoTexto = reader["exploracao_tipo_texto"].ToString();
                        }

                        #region Produtos

                        comando = bancoDeDados.CriarComando(@"select c.exp_florestal_produto_id, c.produto_id, c.produto_texto, c.quantidade, c.tid 
						from {0}hst_crt_exp_florestal_produto c where c.id_hst = :id"                        , EsquemaBanco);

                        comando.AdicionarParametroEntrada("id", hst, DbType.Int32);

                        using (IDataReader readerAux = bancoDeDados.ExecutarReader(comando))
                        {
                            ExploracaoFlorestalProduto produto = null;

                            while (readerAux.Read())
                            {
                                produto            = new ExploracaoFlorestalProduto();
                                produto.Id         = Convert.ToInt32(readerAux["exp_florestal_produto_id"]);
                                produto.Tid        = readerAux["tid"].ToString();
                                produto.Quantidade = readerAux["quantidade"].ToString();

                                if (reader["produto_id"] != null && !Convert.IsDBNull(readerAux["produto_id"]))
                                {
                                    produto.ProdutoId    = Convert.ToInt32(readerAux["produto_id"]);
                                    produto.ProdutoTexto = readerAux["produto_texto"].ToString();
                                }

                                exploracao.Produtos.Add(produto);
                            }

                            readerAux.Close();
                        }

                        #endregion

                        caracterizacao.Exploracoes.Add(exploracao);
                    }

                    reader.Close();
                }

                #endregion
            }

            return(caracterizacao);
        }
        internal bool Salvar(ExploracaoFlorestal caracterizacao)
        {
            if (!_caracterizacaoValidar.Basicas(caracterizacao.EmpreendimentoId))
            {
                return(false);
            }

            if (caracterizacao.Id <= 0 && (_da.ObterPorEmpreendimento(caracterizacao.EmpreendimentoId, true) ?? new ExploracaoFlorestal()).Id > 0)
            {
                Validacao.Add(Mensagem.Caracterizacao.EmpreendimentoCaracterizacaoJaCriada);
                return(false);
            }

            if (!Acessar(caracterizacao.EmpreendimentoId))
            {
                return(false);
            }

            if (caracterizacao.FinalidadeExploracao <= 0)
            {
                Validacao.Add(Mensagem.ExploracaoFlorestal.FinalidadeExploracaoObrigatorio);
            }
            else
            {
                if (caracterizacao.FinalidadeExploracao == (int)eExploracaoFlorestalFinalidade.Outros && String.IsNullOrWhiteSpace(caracterizacao.FinalidadeEspecificar))
                {
                    Validacao.Add(Mensagem.ExploracaoFlorestal.FinalidadeExploracaoEspecificarObrigatorio);
                }
            }

            foreach (ExploracaoFlorestalExploracao item in caracterizacao.Exploracoes)
            {
                if (item.GeometriaTipoId == (int)eExploracaoFlorestalGeometria.Poligono)
                {
                    if (!String.IsNullOrWhiteSpace(item.AreaRequeridaTexto))
                    {
                        if (!ValidacoesGenericasBus.ValidarDecimal(DecimalEtx.ClearMask(item.AreaRequeridaTexto), 7, 2))
                        {
                            Validacao.Add(Mensagem.ExploracaoFlorestal.AreaRequiridaInvalida(item.Identificacao));
                        }
                        else if (item.AreaRequerida <= 0)
                        {
                            Validacao.Add(Mensagem.ExploracaoFlorestal.AreaRequiridaMaiorZero(item.Identificacao));
                        }
                    }
                    else
                    {
                        Validacao.Add(Mensagem.ExploracaoFlorestal.AreaRequiridaObrigatoria(item.Identificacao));
                    }
                }
                else
                {
                    if (item.GeometriaTipoId == (int)eExploracaoFlorestalGeometria.Ponto || item.GeometriaTipoId == (int)eExploracaoFlorestalGeometria.Linha)
                    {
                        #region Arvores Requeridas

                        if (!String.IsNullOrWhiteSpace(item.ArvoresRequeridas))
                        {
                            if (Convert.ToDecimal(item.ArvoresRequeridas) <= 0)
                            {
                                Validacao.Add(Mensagem.ExploracaoFlorestal.ArvoresRequeridasMaiorZero(item.Identificacao));
                            }
                        }
                        else
                        {
                            Validacao.Add(Mensagem.ExploracaoFlorestal.ArvoresRequeridasObrigatoria(item.Identificacao));
                        }

                        #endregion

                        #region Numero de Arvores

                        if (!String.IsNullOrWhiteSpace(item.QuantidadeArvores))
                        {
                            bool existeProdutoSemRendimento = item.Produtos.Where(x => x.ProdutoId == (int)eProduto.SemRendimento).ToList().Count() > 0;

                            if (!existeProdutoSemRendimento)
                            {
                                if (Convert.ToInt32(item.QuantidadeArvores) <= 0)
                                {
                                    Validacao.Add(Mensagem.ExploracaoFlorestal.QdeArvoresRequeridasMaiorZero(item.Identificacao));
                                }
                            }
                        }
                        else
                        {
                            Validacao.Add(Mensagem.ExploracaoFlorestal.QdeArvoresRequeridasObrigatoria(item.Identificacao));
                        }

                        #endregion
                    }
                }

                if (item.ExploracaoTipoId <= 0)
                {
                    Validacao.Add(Mensagem.ExploracaoFlorestal.ExploracaoTipoObrigatorio(item.Identificacao));
                }

                if (item.ClassificacaoVegetacaoId <= 0)
                {
                    Validacao.Add(Mensagem.ExploracaoFlorestal.ClassificacaoVegetacaoObrigatoria(item.Identificacao));
                }

                if (item.Produtos.Count == 0)
                {
                    Validacao.Add(Mensagem.ExploracaoFlorestal.ProdutoObrigatorio(item.Identificacao));
                }
                else
                {
                    foreach (ExploracaoFlorestalProduto produto in item.Produtos)
                    {
                        if (produto.ProdutoId == (int)eProduto.SemRendimento)
                        {
                            continue;
                        }

                        if (!String.IsNullOrWhiteSpace(produto.Quantidade))
                        {
                            if (!ValidacoesGenericasBus.ValidarDecimal(DecimalEtx.ClearMask(produto.Quantidade), 7, 2))
                            {
                                Validacao.Add(Mensagem.Dominialidade.AreaInvalida("exploracao" + item.Identificacao, "Quantidade"));
                            }
                            else if (DecimalEtx.ToDecimalMask(produto.Quantidade).GetValueOrDefault() <= 0)
                            {
                                Validacao.Add(Mensagem.Dominialidade.AreaMaiorZero("exploracao" + item.Identificacao, "Quantidade"));
                            }
                        }
                        else
                        {
                            Validacao.Add(Mensagem.Dominialidade.AreaObrigatoria("exploracao" + item.Identificacao, "Quantidade"));
                        }
                    }
                }
            }

            return(Validacao.EhValido);
        }