private List <LoteDivergencia> GravarTratamentoDivergencia(TratarDivergenciaRequest request) { List <LoteDivergencia> loteDivergenciasMenos = new List <LoteDivergencia>(); foreach (TratarDivergenciaItemRequest divergencia in request.Divergencias) { LoteDivergencia loteDivergencia = _uow.LoteDivergenciaRepository.GetById(divergencia.IdLoteDivergencia); loteDivergencia.QuantidadeDivergenciaMais = divergencia.QuantidadeMaisTratado ?? 0; loteDivergencia.QuantidadeDivergenciaMenos = divergencia.QuantidadeMenosTratado ?? 0; loteDivergencia.IdUsuarioDivergencia = request.IdUsuario; loteDivergencia.IdLoteDivergenciaStatus = LoteDivergenciaStatusEnum.DivergenciaTratada; loteDivergencia.DataTratamentoDivergencia = DateTime.Now; _uow.LoteDivergenciaRepository.Update(loteDivergencia); if (loteDivergencia.QuantidadeDivergenciaMenos > 0) { loteDivergenciasMenos.Add(loteDivergencia); } } _uow.SaveChanges(); return(loteDivergenciasMenos); }
public async Task <LoteStatusEnum> TratarDivergencia(TratarDivergenciaRequest request, string IdUsuario) { ValidarDadosDivergencia(request); NotaFiscal notafiscal = _uow.NotaFiscalRepository.GetById(request.IdNotaFiscal); Lote lote = _uow.LoteRepository.ObterLoteNota(request.IdNotaFiscal); lote.ObservacaoDivergencia = request.ObservacaoDivergencia; if ((request.Divergencias.Any(a => a.QuantidadeMaisTratado > 0) && request.Divergencias.Any(a => a.QuantidadeMenosTratado > 0)) || request.Divergencias.Any(a => a.QuantidadeMenosTratado > 0)) { lote.IdLoteStatus = LoteStatusEnum.AguardandoCriacaoNFDevolucao; } else if (request.Divergencias.Any(a => a.QuantidadeMaisTratado > 0)) { lote.IdLoteStatus = LoteStatusEnum.FinalizadoDivergenciaPositiva; } else { lote.IdLoteStatus = LoteStatusEnum.Finalizado; } await AtualizarNotaFiscalIntegracao(notafiscal, lote.IdLoteStatus); await ConfirmarNotaFiscalIntegracao(notafiscal.CodigoIntegracao); Dictionary <long, List <NotaFiscalItem> > nfItens = notafiscal.NotaFiscalItens.GroupBy(g => g.IdProduto).ToDictionary(g => g.Key, g => g.ToList()); using (TransactionScope transactionScope = _uow.CreateTransactionScope()) { notafiscal.IdNotaFiscalStatus = NotaFiscalStatusEnum.Confirmada; _uow.SaveChanges(); List <LoteDivergencia> loteDivergenciasMenos = GravarTratamentoDivergencia(request); //Registrar quantidade recebida na entidade LoteProduto. RegistrarLoteProduto(nfItens, lote, loteDivergenciasMenos); AtualizarSaldoArmazenagem(nfItens, notafiscal, loteDivergenciasMenos); if (lote.IdLoteStatus == LoteStatusEnum.FinalizadoDivergenciaPositiva && loteDivergenciasMenos.NullOrEmpty()) { CriarQuarentena(lote, IdUsuario); } transactionScope.Complete(); } return(lote.IdLoteStatus); }
private void ValidarDadosDivergencia(TratarDivergenciaRequest request) { NotaFiscal notafiscal = _uow.NotaFiscalRepository.GetById(request.IdNotaFiscal); var divergenciasNegativa = request.Divergencias.Where(w => w.QuantidadeMenosTratado > 0).ToList(); foreach (var divergenciaMenos in divergenciasNegativa) { var divergencia = _uow.LoteDivergenciaRepository.GetById(divergenciaMenos.IdLoteDivergencia); var qtdNF = notafiscal.NotaFiscalItens.Where(w => w.IdProduto == divergencia.IdProduto).Sum(s => s.Quantidade); if (qtdNF - divergenciaMenos.QuantidadeMenosTratado < 0) { throw new BusinessException(string.Format("A quantidade A- não pode ser maior que a quantidade total do item {0} na nota fiscal.", divergencia.Produto.Referencia)); } } }