Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
                }
            }
        }