public ActionResult LoteValidarItem(LoteItem item, DateTecno dataCriacao, int empreendimentoID, List <LoteItem> lista, int loteID)
 {
     _loteValidar.Lote(item, dataCriacao, empreendimentoID, lista, loteID);
     return(Json(new
     {
         @Msg = Validacao.Erros,
         @EhValido = Validacao.EhValido
     }));
 }
Example #2
0
        //Valida um item que está sendo incluído no lote
        public void Lote(LoteItem item, DateTecno loteData, int empreendimentoID, List <LoteItem> lista, int loteID)
        {
            if (empreendimentoID <= 0)
            {
                Validacao.Add(Mensagem.Lote.EmpreendimentoObrigatorio);
                return;
            }

            if (item.OrigemTipo <= 0)
            {
                Validacao.Add(Mensagem.Lote.OrigemObrigatorio);
            }

            if (item.Cultura <= 0)
            {
                Validacao.Add(Mensagem.Lote.CulturaObrigatoria);
            }

            if (item.Cultivar <= 0)
            {
                Validacao.Add(Mensagem.Lote.CultivarObrigatoria);
            }

            if (item.OrigemTipo >= 5 && item.Quantidade <= 0)
            {
                Validacao.Add(Mensagem.Lote.QuantidadeObrigatorio);
            }

            if (lista.Count(x => x.OrigemTipo == item.OrigemTipo && x.OrigemNumero == item.OrigemNumero && x.Serie == item.Serie && !x.Equals(item)) > 0)
            {
                Validacao.Add(Mensagem.Lote.OrigemJaAdicionada(item.OrigemTipoTexto, item.OrigemNumero.ToString()));
            }

            if (lista != null && lista.Count > 0 && !lista.Any(x => x.Cultivar == item.Cultivar))
            {
                Validacao.Add(Mensagem.Lote.CultivarUnico);
            }

            if (lista != null && lista.Count > 0 && lista.Any(x => x.UnidadeMedida != item.UnidadeMedida))
            {
                Validacao.Add(Mensagem.Lote.UnidadeMedidaUnico);
            }

            if (!Validacao.EhValido)
            {
                return;
            }

            int     auxiliar       = 0;
            decimal saldoDocOrigem = 0;
            List <IdentificacaoProduto> produtos = OrigemNumero(item.OrigemNumero, item.OrigemTipo, item.Serie, out auxiliar);

            if (produtos != null)
            {
                switch ((eDocumentoFitossanitarioTipo)item.OrigemTipo)
                {
                case eDocumentoFitossanitarioTipo.CFO:
                    EmissaoCFOBus emissaoCFOBus = new EmissaoCFOBus();
                    EmissaoCFO    cfo           = emissaoCFOBus.Obter(item.Origem);
                    saldoDocOrigem = cfo.Produtos.Where(x => x.CultivarId == item.Cultivar && x.UnidadeMedidaId == item.UnidadeMedida).Sum(x => x.Quantidade);

                    if (cfo.SituacaoId != (int)eDocumentoFitossanitarioSituacao.Valido)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemSituacaoInvalida(item.OrigemTipoTexto));
                    }

                    DateTime dataVencimentoCFO = cfo.DataAtivacao.Data.GetValueOrDefault().AddDays(cfo.ValidadeCertificado);
                    if (dataVencimentoCFO < DateTime.Today)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemVencida(item.OrigemTipoTexto));
                    }

                    if (cfo.DataEmissao.Data > loteData.Data)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemDataMaiorLoteData);
                    }
                    break;

                case eDocumentoFitossanitarioTipo.CFOC:
                    EmissaoCFOCBus emissaoCFOCBus = new EmissaoCFOCBus();
                    EmissaoCFOC    cfoc           = emissaoCFOCBus.Obter(item.Origem);
                    saldoDocOrigem = cfoc.Produtos.Where(x => x.CultivarId == item.Cultivar && x.UnidadeMedidaId == item.UnidadeMedida).Sum(x => x.Quantidade);

                    if (cfoc.SituacaoId != (int)eDocumentoFitossanitarioSituacao.Valido)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemSituacaoInvalida(item.OrigemTipoTexto));
                    }

                    DateTime dataVencimentoCFOC = cfoc.DataAtivacao.Data.GetValueOrDefault().AddDays(cfoc.ValidadeCertificado);
                    if (dataVencimentoCFOC < DateTime.Today)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemVencida(item.OrigemTipoTexto));
                    }

                    if (cfoc.DataEmissao.Data > loteData.Data)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemDataMaiorLoteData);
                    }
                    break;

                case eDocumentoFitossanitarioTipo.PTV:
                    PTVInternoBus ptvInternoBus = new PTVInternoBus();
                    PTV           ptv           = ptvInternoBus.Obter(item.Origem);
                    saldoDocOrigem = ptv.Produtos.Where(x => x.Cultivar == item.Cultivar && x.UnidadeMedida == item.UnidadeMedida).Sum(x => x.Quantidade);

                    if (ptv.Situacao != (int)ePTVOutroSituacao.Valido)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemSituacaoInvalida(item.OrigemTipoTexto));
                    }

                    if (ptv.ValidoAte.Data.GetValueOrDefault() < DateTime.Today)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemVencida(item.OrigemTipoTexto));
                    }

                    if (ptv.DataEmissao.Data > loteData.Data)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemDataMaiorLoteData);
                    }
                    break;

                case eDocumentoFitossanitarioTipo.PTVOutroEstado:
                    PTVOutroBus ptvOutroBus = new PTVOutroBus();
                    PTVOutro    ptvOutro    = ptvOutroBus.Obter(item.Origem);
                    saldoDocOrigem = ptvOutro.Produtos.Where(x => x.Cultivar == item.Cultivar && x.UnidadeMedida == item.UnidadeMedida).Sum(x => x.Quantidade);

                    if (ptvOutro.Situacao != (int)ePTVOutroSituacao.Valido &&
                        ptvOutro.Situacao != (int)ePTVOutroSituacao.Invalido)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemSituacaoInvalida(item.OrigemTipoTexto));
                    }

                    if (ptvOutro.DataEmissao.Data > loteData.Data)
                    {
                        Validacao.Add(Mensagem.Lote.OrigemDataMaiorLoteData);
                    }
                    break;
                }

                string empreendimento = string.Empty;
                if ((eDocumentoFitossanitarioTipo)item.OrigemTipo == eDocumentoFitossanitarioTipo.PTVOutroEstado)
                {
                    empreendimento = _da.PTVOutroEstadoJaAssociado(item.Origem, empreendimentoID);

                    if (!string.IsNullOrEmpty(empreendimento))
                    {
                        Validacao.Add(Mensagem.Lote.OrigemEmpreendimentoUtilizadoOutroUF(item.OrigemTipoTexto, item.OrigemNumero.ToString(), empreendimento));
                    }
                }

                if (item.OrigemTipo == (int)eDocumentoFitossanitarioTipo.CFO ||
                    item.OrigemTipo == (int)eDocumentoFitossanitarioTipo.CFOC ||
                    item.OrigemTipo == (int)eDocumentoFitossanitarioTipo.PTVOutroEstado)
                {
                    if (!_da.UCPossuiCultivar(empreendimentoID, item.Cultivar))
                    {
                        Validacao.Add(Mensagem.Lote.CultivarDesassociadoUC(item.CultivarTexto));
                    }


                    decimal quantidadeAdicionada = lista.Where(x => x.OrigemTipo == item.OrigemTipo && x.Origem == item.Origem && x.Cultivar == item.Cultivar && x.UnidadeMedida == item.UnidadeMedida && !x.Equals(item)).Sum(x => x.Quantidade);



                    decimal saldoOutrosDoc = _da.ObterOrigemQuantidade((eDocumentoFitossanitarioTipo)item.OrigemTipo, item.Origem, item.OrigemNumero, item.Cultivar, item.UnidadeMedida, DateTime.Now.Year, item.Id);


                    if (item.ExibeKg)
                    {
                        item.Quantidade = item.Quantidade / 1000;
                    }

                    if ((saldoOutrosDoc + item.Quantidade) > saldoDocOrigem)
                    {
                        Validacao.Add(Mensagem.PTV.SomaQuantidadeInvalida);
                    }

                    //SALDO DA UC
                    decimal saldoUc = _da.obterSaldoRestanteCultivarUC(empreendimentoID, item.Cultivar, item.Cultura);



                    if (saldoUc <= 0)
                    {
                        Validacao.Add(Mensagem.Lote.CultivarSaldoTodoUtilizado);
                    }


                    if ((quantidadeAdicionada + item.Quantidade) > saldoUc)
                    {
                        Validacao.Add(Mensagem.Lote.CultivarQuantidadeSomaSuperior);
                    }
                }

                item.Quantidade = saldoDocOrigem;
            }
        }