Пример #1
0
        public async Task <IHttpActionResult> AjustarVolumeLote(AjustarVolumeLoteModelRequisicao requisicao)
        {
            try
            {
                var instalarVolumeLoteRequisicao = new AjustarVolumeLoteRequisicao
                {
                    IdLote                = requisicao.IdLote,
                    IdProduto             = requisicao.IdProduto,
                    Quantidade            = requisicao.Quantidade,
                    IdEmpresa             = IdEmpresa,
                    IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem,
                    IdUsuarioAjuste       = IdUsuario
                };

                await _armazenagemService.AjustarVolumeLote(instalarVolumeLoteRequisicao);
            }
            catch (BusinessException ex)
            {
                return(ApiBadRequest(ex.Message));
            }
            catch
            {
                throw;
            }

            return(ApiOk());
        }
Пример #2
0
        public async Task AjustarVolumeLote(AjustarVolumeLoteRequisicao requisicao)
        {
            var validarEnderecoInstalacaoRequisicao = new ValidarEnderecoAjusteRequisicao
            {
                IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem
            };

            ValidarEnderecoAjuste(validarEnderecoInstalacaoRequisicao);

            ValidarProdutoAjuste(requisicao.IdEnderecoArmazenagem, requisicao.IdLote, requisicao.IdProduto, requisicao.IdEmpresa);

            ValidarQuantidadeAjuste(new ValidarQuantidadeAjusteRequisicao
            {
                IdEmpresa             = requisicao.IdEmpresa,
                IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem,
                IdLote     = requisicao.IdLote,
                IdProduto  = requisicao.IdProduto,
                Quantidade = requisicao.Quantidade
            });

            Produto             produto         = _unitOfWork.ProdutoRepository.GetById(requisicao.IdProduto);
            LoteProdutoEndereco produtoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorEndereco(requisicao.IdEnderecoArmazenagem);
            decimal             pesoInstalacao  = produto.PesoLiquido / produto.MultiploVenda * requisicao.Quantidade;
            int quantidadeAnterior;

            try
            {
                using (var transacao = _unitOfWork.CreateTransactionScope())
                {
                    quantidadeAnterior = produtoEndereco.Quantidade;

                    produtoEndereco.Quantidade = requisicao.Quantidade;
                    produtoEndereco.PesoTotal  = pesoInstalacao;

                    _unitOfWork.LoteProdutoEnderecoRepository.Update(produtoEndereco);
                    await _unitOfWork.SaveChangesAsync();

                    var loteMovimentacao = new LoteMovimentacao
                    {
                        IdEmpresa              = requisicao.IdEmpresa,
                        IdLote                 = requisicao.IdLote,
                        IdProduto              = requisicao.IdProduto,
                        IdEnderecoArmazenagem  = requisicao.IdEnderecoArmazenagem,
                        IdUsuarioMovimentacao  = requisicao.IdUsuarioAjuste,
                        Quantidade             = requisicao.Quantidade,
                        IdLoteMovimentacaoTipo = LoteMovimentacaoTipoEnum.Ajuste,
                        DataHora               = DateTime.Now
                    };

                    _unitOfWork.LoteMovimentacaoRepository.Add(loteMovimentacao);
                    await _unitOfWork.SaveChangesAsync();

                    transacao.Complete();
                }

                var gravarHistoricoColetorRequisicao = new GravarHistoricoColetorRequisicao
                {
                    IdColetorAplicacao     = ColetorAplicacaoEnum.Armazenagem,
                    IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.AjustarQuantidade,
                    Descricao = $"Ajustou a quantidade de {quantidadeAnterior} para {produtoEndereco.Quantidade} unidade(s) do produto {produtoEndereco.Produto.Referencia} do lote {produtoEndereco.Lote.IdLote} do endereço {produtoEndereco.EnderecoArmazenagem.Codigo}",
                    IdEmpresa = requisicao.IdEmpresa,
                    IdUsuario = requisicao.IdUsuarioAjuste
                };

                _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisicao);
            }
            catch
            {
                throw new BusinessException($"Erro ao ajustar a quantidade do produto {produto.Referencia} do lote {produtoEndereco.Lote.IdLote} e do endereço {produtoEndereco.EnderecoArmazenagem.Codigo}");
            }
        }