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()); }
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}"); } }