public ActionResult Visualizar(int id) { PTVOutro ptv = _bus.Obter(id); PTVOutroVM vm = new PTVOutroVM( ptv, ListaCredenciadoBus.PTVSituacao, ListaCredenciadoBus.DocumentosFitossanitario.Where(x => ListTipoOrigem.Contains(x.Id)).ToList(), ListaCredenciadoBus.Estados, ListaCredenciadoBus.Municipios(ptv.Estado), ListaCredenciadoBus.Estados, ListaCredenciadoBus.Municipios(ptv.InteressadoEstadoId)); DestinatarioPTVBus _destinatarioBus = new DestinatarioPTVBus(); vm.PTV.Destinatario = _destinatarioBus.Obter(ptv.DestinatarioID); vm.LstUnidades = ViewModelHelper.CriarSelectList(ListaCredenciadoBus.PTVUnidadeMedida); vm.IsVisualizar = true; return(View("Visualizar", vm)); }
public decimal ObterSaldoDocOrigem(PTVProduto prod) { decimal saldo = 0; switch ((eDocumentoFitossanitarioTipo)prod.OrigemTipo) { case eDocumentoFitossanitarioTipo.CFO: EmissaoCFOBus emissaoCFOBus = new EmissaoCFOBus(); EmissaoCFO cfo = emissaoCFOBus.Obter(prod.Origem); saldo = cfo.Produtos.Where(x => x.CultivarId == prod.Cultivar && x.UnidadeMedidaId == prod.UnidadeMedida).Sum(x => x.Quantidade); break; case eDocumentoFitossanitarioTipo.CFOC: EmissaoCFOCBus emissaoCFOCBus = new EmissaoCFOCBus(); EmissaoCFOC cfoc = emissaoCFOCBus.Obter(prod.Origem); saldo = cfoc.Produtos.Where(x => x.CultivarId == prod.Cultivar && x.UnidadeMedidaId == prod.UnidadeMedida).Sum(x => x.Quantidade); break; case eDocumentoFitossanitarioTipo.PTVOutroEstado: PTVOutroBus ptvOutroBus = new PTVOutroBus(); PTVOutro ptvOutro = ptvOutroBus.Obter(prod.Origem); saldo = ptvOutro.Produtos.Where(x => x.Cultivar == prod.Cultivar && x.UnidadeMedida == prod.UnidadeMedida).Sum(x => x.Quantidade); break; case eDocumentoFitossanitarioTipo.PTV: PTVBus ptvBus = new PTVBus(); PTV ptv = ptvBus.Obter(prod.Origem); saldo = ptv.Produtos.Where(x => x.Cultivar == prod.Cultivar && x.UnidadeMedida == prod.UnidadeMedida).Sum(x => x.Quantidade); break; } decimal saldoOutrosDoc = _da.ObterOrigemQuantidade((eDocumentoFitossanitarioTipo)prod.OrigemTipo, prod.Origem, prod.OrigemNumero, prod.Cultivar, prod.UnidadeMedida, 0); //o último parâmetro, idPTV, nesse caso não importa, porque o PTV atual não deve ser desconsiderado do cálculo saldo = saldo - saldoOutrosDoc; //if (prod.OrigemTipo != (int)eDocumentoFitossanitarioTipo.CFCFR && prod.OrigemTipo != (int)eDocumentoFitossanitarioTipo.TF && prod.OrigemTipo != (int)eDocumentoFitossanitarioTipo.SemDocOrigem) //{ // decimal saldoOutrosDoc = _da.ObterOrigemQuantidade((eDocumentoFitossanitarioTipo)prod.OrigemTipo, prod.Origem, prod.OrigemNumero, prod.Cultivar, prod.UnidadeMedida, ptvData.Data.GetValueOrDefault().Year, ptvID); // decimal quantidadeAdicionada = lista.Where(x => x.OrigemTipo == prod.OrigemTipo && x.Origem == prod.Origem && x.Cultivar == prod.Cultivar && x.UnidadeMedida == prod.UnidadeMedida && !x.Equals(prod)).Sum(x => x.Quantidade); // if ((saldoOutrosDoc + quantidadeAdicionada + (prod.ExibeQtdKg ? prod.Quantidade / 1000 : prod.Quantidade)) > saldo) // { // Validacao.Add(Mensagem.PTV.SomaQuantidadeInvalida); // } //} return(saldo); }
public decimal ObterSaldoDocOrigem(PTVProduto prod) { decimal saldo = 0; switch ((eDocumentoFitossanitarioTipo)prod.OrigemTipo) { case eDocumentoFitossanitarioTipo.CFO: EmissaoCFOBus emissaoCFOBus = new EmissaoCFOBus(); EmissaoCFO cfo = emissaoCFOBus.Obter(prod.Origem); saldo = cfo.Produtos.Where(x => x.CultivarId == prod.Cultivar && x.UnidadeMedidaId == prod.UnidadeMedida).Sum(x => x.Quantidade); break; case eDocumentoFitossanitarioTipo.CFOC: EmissaoCFOCBus emissaoCFOCBus = new EmissaoCFOCBus(); EmissaoCFOC cfoc = emissaoCFOCBus.Obter(prod.Origem); saldo = cfoc.Produtos.Where(x => x.CultivarId == prod.Cultivar && x.UnidadeMedidaId == prod.UnidadeMedida).Sum(x => x.Quantidade); break; case eDocumentoFitossanitarioTipo.PTVOutroEstado: PTVOutroBus ptvOutroBus = new PTVOutroBus(); PTVOutro ptvOutro = ptvOutroBus.Obter(prod.Origem); saldo = ptvOutro.Produtos.Where(x => x.Cultivar == prod.Cultivar && x.UnidadeMedida == prod.UnidadeMedida).Sum(x => x.Quantidade); break; case eDocumentoFitossanitarioTipo.PTV: PTVInternoBus ptvBus = new PTVInternoBus(); PTV ptv = ptvBus.Obter(prod.Origem); saldo = ptv.Produtos.Where(x => x.Cultivar == prod.Cultivar && x.UnidadeMedida == prod.UnidadeMedida).Sum(x => x.Quantidade); break; } decimal saldoOutrosDoc = _da.ObterOrigemQuantidade((eDocumentoFitossanitarioTipo)prod.OrigemTipo, prod.Origem, prod.OrigemNumero, prod.Cultivar, prod.UnidadeMedida, 0); //o último parâmetro, idPTV, nesse caso não importa, porque o PTV atual não deve ser desconsiderado do cálculo saldo = saldo - saldoOutrosDoc; return(saldo); }
public bool ValidarProduto(PTVProduto item, DateTecno ptvData, List <PTVProduto> lista, int ptvID) { lista = lista ?? new List <PTVProduto>(); if (item.OrigemTipo <= 0) { Validacao.Add(Mensagem.PTV.TipoOrigemObrigatorio); } if (item.Origem <= 0 && string.IsNullOrEmpty(item.OrigemNumero)) { Validacao.Add(Mensagem.PTV.OrigemObrigatorio); } var loteBus = new LoteBus(); if (item.OrigemTipo == (int)eDocumentoFitossanitarioTipo.CFO && loteBus.VerificarSeCfoJaAssociadaALote(item.Origem)) { Validacao.Add(Mensagem.EmissaoCFO.DocumentoOrigemDeveSerDeMesmaUC); return(false); } #region Saldo //TODO decimal saldo = 0; int produtorItem = 0; switch ((eDocumentoFitossanitarioTipo)item.OrigemTipo) { case eDocumentoFitossanitarioTipo.CFO: EmissaoCFOBus emissaoCFOBus = new EmissaoCFOBus(); EmissaoCFO cfo = emissaoCFOBus.Obter(item.Origem); saldo = cfo.Produtos.Where(x => x.CultivarId == item.Cultivar && x.UnidadeMedidaId == item.UnidadeMedida).Sum(x => x.Quantidade); produtorItem = cfo.ProdutorId; if (cfo.SituacaoId != (int)eDocumentoFitossanitarioSituacao.Valido) { Validacao.Add(Mensagem.PTV.OrigemSituacaoInvalida(item.OrigemTipoTexto)); } DateTime dataVencimentoCFO = cfo.DataEmissao.Data.GetValueOrDefault().AddDays(cfo.ValidadeCertificado); if (dataVencimentoCFO < DateTime.Today) { Validacao.Add(Mensagem.Lote.OrigemVencida(item.OrigemTipoTexto)); } if (cfo.DataEmissao.Data > ptvData.Data) { Validacao.Add(Mensagem.Lote.OrigemDataMaiorLoteData); } break; case eDocumentoFitossanitarioTipo.CFOC: EmissaoCFOCBus emissaoCFOCBus = new EmissaoCFOCBus(); EmissaoCFOC cfoc = emissaoCFOCBus.Obter(item.Origem); saldo = 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.PTV.OrigemSituacaoInvalida(item.OrigemTipoTexto)); } DateTime dataVencimentoCFOC = cfoc.DataEmissao.Data.GetValueOrDefault().AddDays(cfoc.ValidadeCertificado); if (dataVencimentoCFOC < DateTime.Today) { Validacao.Add(Mensagem.Lote.OrigemVencida(item.OrigemTipoTexto)); } if (cfoc.DataEmissao.Data > ptvData.Data) { Validacao.Add(Mensagem.Lote.OrigemDataMaiorLoteData); } break; case eDocumentoFitossanitarioTipo.PTVOutroEstado: PTVOutroBus ptvOutroBus = new PTVOutroBus(); PTVOutro ptvOutro = ptvOutroBus.Obter(item.Origem); saldo = ptvOutro.Produtos.Where(x => x.Cultivar == item.Cultivar && x.UnidadeMedida == item.UnidadeMedida).Sum(x => x.Quantidade); if (ptvOutro.Situacao != (int)ePTVOutroSituacao.Valido) { Validacao.Add(Mensagem.PTV.OrigemSituacaoInvalida(item.OrigemTipoTexto)); } if (ptvOutro.ValidoAte.Data.GetValueOrDefault() < DateTime.Today) { Validacao.Add(Mensagem.Lote.OrigemVencida(item.OrigemTipoTexto)); } if (ptvOutro.DataEmissao.Data > ptvData.Data) { Validacao.Add(Mensagem.Lote.OrigemDataMaiorLoteData); } break; case eDocumentoFitossanitarioTipo.PTV: PTVInternoBus ptvBus = new PTVInternoBus(); PTV ptv = ptvBus.Obter(item.Origem); saldo = ptv.Produtos.Where(x => x.Cultivar == item.Cultivar && x.UnidadeMedida == item.UnidadeMedida).Sum(x => x.Quantidade); produtorItem = ptv.ResponsavelEmpreendimento; break; } #endregion Saldo if (lista.Count > 0 && produtorItem > 0) { int produtorOrigem = 0; PTVProduto primeiroItem = lista.FirstOrDefault(x => x.OrigemTipo == (int)eDocumentoFitossanitarioTipo.CFO || x.OrigemTipo == (int)eDocumentoFitossanitarioTipo.PTV); if (primeiroItem != null) { switch ((eDocumentoFitossanitarioTipo)primeiroItem.OrigemTipo) { case eDocumentoFitossanitarioTipo.CFO: EmissaoCFOBus emissaoCFOBus = new EmissaoCFOBus(); EmissaoCFO cfo = emissaoCFOBus.Obter(primeiroItem.Origem, true); produtorOrigem = cfo.ProdutorId; break; case eDocumentoFitossanitarioTipo.PTV: PTVInternoBus ptvBus = new PTVInternoBus(); PTV ptv = ptvBus.Obter(primeiroItem.Origem, true); produtorOrigem = ptv.ResponsavelEmpreendimento; break; } if (produtorItem != produtorOrigem) { Validacao.Add(Mensagem.PTV.ProdutorDiferente); } } } if (!Validacao.EhValido) { return(false); } if (item.Cultura <= 0) { Validacao.Add(Mensagem.PTV.CulturaObrigatorio); } if (item.Cultivar <= 0) { Validacao.Add(Mensagem.PTV.CultivarObrigatorio); } if (item.UnidadeMedida <= 0) { Validacao.Add(Mensagem.PTV.UnidadeMedidaObrigatorio); } if (item.Quantidade <= 0) { Validacao.Add(Mensagem.PTV.QuantidadeObrigatorio); } if (lista.Count(x => !x.Equals(item)) >= 5) { Validacao.Add(Mensagem.PTV.QauntidadeItensUltrapassado); } if (Validacao.EhValido && lista.Count > 0) { if (lista.Count(x => x.Origem == item.Origem && item.Cultivar == x.Cultivar && x.UnidadeMedida == item.UnidadeMedida && !x.Equals(item)) > 0) { Validacao.Add(Mensagem.PTV.ITemProdutoJaAdicionado(item.OrigemTipoTexto)); } if (lista.Count(x => x.EmpreendimentoId != item.EmpreendimentoId && x.EmpreendimentoId > 0) > 0) { Validacao.Add(Mensagem.PTV.EmpreendimentoOrigemDiferente); } } if (Validacao.EhValido) { if (_da.EmpreendimentoPossuiEPTVBloqueado(item.EmpreendimentoId)) { Validacao.Add(Mensagem.PTV.EmpreendimentoEPTVBloqueado); } } if (Validacao.EhValido) { if (item.OrigemTipo != (int)eDocumentoFitossanitarioTipo.CFCFR && item.OrigemTipo != (int)eDocumentoFitossanitarioTipo.TF) { decimal saldoOutrosDoc = _da.ObterOrigemQuantidade((eDocumentoFitossanitarioTipo)item.OrigemTipo, item.Origem, item.OrigemNumero, item.Cultivar, item.UnidadeMedida, ptvData.Data.GetValueOrDefault().Year, ptvID); 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); if ((saldoOutrosDoc + quantidadeAdicionada + item.Quantidade) > saldo) { Validacao.Add(Mensagem.PTV.SomaQuantidadeInvalida); } } } return(Validacao.EhValido); }
//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; } }