Ejemplo n.º 1
0
        public bool Salvar(EmissaoCFOC entidade)
        {
            try
            {
                if (entidade.TipoNumero == (int)eDocumentoFitossanitarioTipoNumero.Digital)
                {
                    if (entidade.Id <= 0)
                    {
                        if (_validar.VerificarNumeroDigitalDisponivel())
                        {
                            entidade.Numero = ObterNumeroDigital();

                            if (entidade.Numero.IndexOf("/") >= 0)
                            {
                                string[] tmpNum = entidade.Numero.Split('/');
                                entidade.Numero = tmpNum[0];
                                entidade.Serie  = tmpNum[1];
                            }
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        EmissaoCFOC entidadeBanco = Obter(entidade.Id, simplificado: true);
                        entidade.Numero = entidadeBanco.Numero;

                        if (entidade.Numero.IndexOf("/") >= 0)
                        {
                            string[] tmpNum = entidade.Numero.Split('/');
                            entidade.Numero = tmpNum[0];
                            entidade.Serie  = tmpNum[1];
                        }
                    }
                }

                CulturaInternoBus culturaBus = new CulturaInternoBus();


                List <Cultivar> cultivares = culturaBus.ObterCultivares(entidade.Produtos.Select(x => x.CulturaId).ToList(), entidade.Produtos.Select(y => y.LoteId).ToList()) ?? new List <Cultivar>();

                var declaracoesAdicionais = cultivares
                                            .Where(x => entidade.Produtos.Select(y => y.CultivarId).ToList().Any(y => y == x.Id))
                                            .SelectMany(x => x.LsCultivarConfiguracao.Where(y => entidade.Produtos.Count(z => z.CultivarId == y.Cultivar && y.TipoProducaoId == (int)ValidacoesGenericasBus.ObterTipoProducao(z.UnidadeMedidaId)) > 0))
                                            .Where(x => entidade.Pragas.Any(y => y.Id == x.PragaId))
                                            .Select(x => x.DeclaracaoAdicionalTexto)
                                            .Distinct().ToList();

                var declaracoesAdicionaisHtml = cultivares
                                                .Where(x => entidade.Produtos.Select(y => y.CultivarId).ToList().Any(y => y == x.Id))
                                                .SelectMany(x => x.LsCultivarConfiguracao.Where(y => entidade.Produtos.Count(z => z.CultivarId == y.Cultivar && y.TipoProducaoId == (int)ValidacoesGenericasBus.ObterTipoProducao(z.UnidadeMedidaId)) > 0))
                                                .Where(x => entidade.Pragas.Any(y => y.Id == x.PragaId))
                                                .Select(x => x.DeclaracaoAdicionalTextoHtml)
                                                .Distinct().ToList();

                entidade.DeclaracaoAdicional     = String.Join(" ", declaracoesAdicionais);
                entidade.DeclaracaoAdicionalHtml = String.Join(" ", declaracoesAdicionaisHtml);

                _validar.Salvar(entidade);

                if (!Validacao.EhValido)
                {
                    return(false);
                }

                GerenciadorTransacao.ObterIDAtual();

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

                    _da.Salvar(entidade, bancoDeDados);

                    CFOCFOCInternoBus CFOCFOCInternoBus = new CFOCFOCInternoBus();
                    CFOCFOCInternoBus.SetarNumeroUtilizado(entidade.Numero, entidade.TipoNumero.GetValueOrDefault(), eDocumentoFitossanitarioTipo.CFOC, entidade.Serie);

                    if (string.IsNullOrEmpty(entidade.Serie))
                    {
                        Validacao.Add(Mensagem.EmissaoCFOC.Salvar(entidade.Numero));
                    }
                    else
                    {
                        Validacao.Add(Mensagem.EmissaoCFOC.Salvar(entidade.Numero + "/" + entidade.Serie));
                    }

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

            return(Validacao.EhValido);
        }