public async Task InstalarVolumeLote(InstalarVolumeLoteRequisicao requisicao) { var validarEnderecoInstalacaoRequisicao = new ValidarEnderecoInstalacaoRequisicao { IdEmpresa = requisicao.IdEmpresa, IdLote = requisicao.IdLote, IdProduto = requisicao.IdProduto, Quantidade = requisicao.Quantidade, IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem }; ValidarEnderecoInstalacao(validarEnderecoInstalacaoRequisicao); Produto produto = _unitOfWork.ProdutoRepository.GetById(requisicao.IdProduto); EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(requisicao.IdEnderecoArmazenagem); decimal pesoInstalacao = produto.PesoLiquido / produto.MultiploVenda * requisicao.Quantidade; using (var transacao = _unitOfWork.CreateTransactionScope()) { var loteProdutoEndereco = new LoteProdutoEndereco { IdEmpresa = requisicao.IdEmpresa, DataHoraInstalacao = DateTime.Now, IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem, IdLote = requisicao.IdLote, IdProduto = requisicao.IdProduto, IdUsuarioInstalacao = requisicao.IdUsuarioInstalacao, Quantidade = requisicao.Quantidade, QuantidadeCaixas = requisicao.QuantidadeCaixas, PesoTotal = pesoInstalacao }; _unitOfWork.LoteProdutoEnderecoRepository.Add(loteProdutoEndereco); await _unitOfWork.SaveChangesAsync(); var loteMovimentacao = new LoteMovimentacao { IdEmpresa = requisicao.IdEmpresa, IdLote = requisicao.IdLote, IdProduto = requisicao.IdProduto, IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem, IdUsuarioMovimentacao = requisicao.IdUsuarioInstalacao, Quantidade = requisicao.Quantidade, IdLoteMovimentacaoTipo = LoteMovimentacaoTipoEnum.Entrada, DataHora = DateTime.Now }; _unitOfWork.LoteMovimentacaoRepository.Add(loteMovimentacao); await _unitOfWork.SaveChangesAsync(); transacao.Complete(); } var gravarHistoricoColetorRequisicao = new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.InstalarProduto, Descricao = $"Instalou o produto {produto.Referencia} quantidade {requisicao.Quantidade} peso {pesoInstalacao} do lote {requisicao.IdLote} no endereço {enderecoArmazenagem.Codigo}", IdEmpresa = requisicao.IdEmpresa, IdUsuario = requisicao.IdUsuarioInstalacao }; _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisicao); }
public bool AtualizarAtividadeAbastecerPicking(AtividadeEstoqueRequisicao atividadeEstoqueRequisicao, long IdEmpresa, string IdUsuario) { bool finalizouuAtividadeEstoque = false; var atividade = _unitOfWork.AtividadeEstoqueRepository.GetById(atividadeEstoqueRequisicao.IdAtividadeEstoque); _armazenagemService.ValidarEnderecoAbastecer(atividade.IdEnderecoArmazenagem); _armazenagemService.ValidarLoteAbastecer(atividade.IdEnderecoArmazenagem, atividadeEstoqueRequisicao.IdLote, atividade.IdProduto); _armazenagemService.ValidarQuantidadeAbastecer(atividade.IdEnderecoArmazenagem, atividadeEstoqueRequisicao.IdLote, atividade.IdProduto, atividadeEstoqueRequisicao.QuantidadeFinal); var loteProduto = _unitOfWork.LoteProdutoRepository.ConsultarPorLoteProduto(atividadeEstoqueRequisicao.IdLote, atividade.IdProduto); var loteProdutoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorEndereco(atividade.IdEnderecoArmazenagem); var enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(atividade.IdEnderecoArmazenagem); try { using (var transacao = _unitOfWork.CreateTransactionScope()) { loteProduto.Saldo -= atividadeEstoqueRequisicao.QuantidadeFinal; _unitOfWork.LoteProdutoRepository.Update(loteProduto); _unitOfWork.SaveChanges(); loteProdutoEndereco.Quantidade += atividadeEstoqueRequisicao.QuantidadeFinal; _unitOfWork.LoteProdutoEnderecoRepository.Update(loteProdutoEndereco); _unitOfWork.SaveChanges(); var loteMovimentacao = new LoteMovimentacao { IdEmpresa = IdEmpresa, IdLote = atividadeEstoqueRequisicao.IdLote, IdProduto = atividade.IdProduto, IdEnderecoArmazenagem = atividade.IdEnderecoArmazenagem, IdUsuarioMovimentacao = IdUsuario, Quantidade = atividadeEstoqueRequisicao.QuantidadeFinal, IdLoteMovimentacaoTipo = LoteMovimentacaoTipoEnum.Abastecimento, DataHora = DateTime.Now }; _unitOfWork.LoteMovimentacaoRepository.Add(loteMovimentacao); _unitOfWork.SaveChanges(); if (loteProdutoEndereco.Quantidade >= enderecoArmazenagem.EstoqueMinimo) { atividade.QuantidadeInicial = atividadeEstoqueRequisicao.QuantidadeInicial; atividade.QuantidadeFinal = atividade.QuantidadeInicial + atividadeEstoqueRequisicao.QuantidadeFinal; atividade.IdUsuarioExecucao = IdUsuario; atividade.DataExecucao = DateTime.Now; atividade.Finalizado = true; _unitOfWork.SaveChanges(); finalizouuAtividadeEstoque = true; } transacao.Complete(); } var gravarHistoricoColetorRequisicao = new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.AjustarQuantidade, Descricao = $"Abasteceu o produto {loteProdutoEndereco.Produto.Referencia} do lote {loteProduto.Lote.IdLote} no endereço de picking {loteProdutoEndereco.EnderecoArmazenagem.Codigo}", IdEmpresa = IdEmpresa, IdUsuario = IdUsuario }; _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisicao); return(finalizouuAtividadeEstoque); } catch { throw new BusinessException($"Erro ao abastecer o picking com o produto {loteProduto.Produto.Referencia} do lote {loteProduto.Lote.IdLote}"); } }