public async Task FinalizarConferenciaEnderecoRequisicao(FinalizarConferenciaEnderecoRequisicao requisicao, long idEmpresa, string idUsuarioExecucao) { using (var transacao = _unitOfWork.CreateTransactionScope()) { LoteProdutoEndereco loteProdutoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorEndereco(requisicao.IdEnderecoArmazenagem); if (loteProdutoEndereco == null) { throw new BusinessException("O produto não está instalado neste endereço."); } var qtdAnterior = loteProdutoEndereco.Quantidade; if (requisicao.QuantidadeFinal == 0) { await _armazenagemService.RetirarVolumeEndereco(requisicao.IdEnderecoArmazenagem, loteProdutoEndereco.IdLote.Value, requisicao.IdProduto, idEmpresa, idUsuarioExecucao); } else { await _armazenagemService.AjustarVolumeLote(new AjustarVolumeLoteRequisicao { IdEmpresa = idEmpresa, IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem, IdLote = loteProdutoEndereco.IdLote.Value, IdProduto = requisicao.IdProduto, IdUsuarioAjuste = idUsuarioExecucao, Quantidade = requisicao.QuantidadeFinal }); await _unitOfWork.SaveChangesAsync(); } var atividadeEstoque = _unitOfWork.AtividadeEstoqueRepository.GetById(requisicao.IdAtividadeEstoque); atividadeEstoque.QuantidadeInicial = qtdAnterior; atividadeEstoque.QuantidadeFinal = requisicao.QuantidadeFinal; atividadeEstoque.IdUsuarioExecucao = idUsuarioExecucao; atividadeEstoque.DataExecucao = DateTime.Now; atividadeEstoque.Finalizado = true; await _unitOfWork.SaveChangesAsync(); _coletorHistoricoService.GravarHistoricoColetor(new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ConferirEndereco, Descricao = $"Conferiu a atividade do endereço {atividadeEstoque.EnderecoArmazenagem.Codigo} do produto {atividadeEstoque.Produto.Referencia}," + $" a quantidade anterior era de {atividadeEstoque.QuantidadeInicial} e quantidade conferida foi {atividadeEstoque.QuantidadeFinal}.", IdEmpresa = idEmpresa, IdUsuario = idUsuarioExecucao }); await _unitOfWork.SaveChangesAsync(); transacao.Complete(); } }
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}"); } }
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 void ValidarEnderecoInstalacao(ValidarEnderecoInstalacaoRequisicao requisicao) { if (requisicao.IdEnderecoArmazenagem <= 0) { throw new BusinessException("O endereço deve ser informado."); } var validarLoteRequisicao = new ValidarLoteRequisicao { IdLote = requisicao.IdLote, IdEmpresa = requisicao.IdEmpresa }; ValidarLote(validarLoteRequisicao); var validarLoteProdutoRequisicao = new ValidarLoteProdutoInstalacaoRequisicao { IdEmpresa = requisicao.IdEmpresa, IdLote = requisicao.IdLote, IdProduto = requisicao.IdProduto }; ValidarLoteProdutoInstalacao(validarLoteProdutoRequisicao); var validarQuantidadeRequisicao = new ValidarQuantidadeInstalacaoRequisicao { IdEmpresa = requisicao.IdEmpresa, IdLote = requisicao.IdLote, IdProduto = requisicao.IdProduto, Quantidade = requisicao.Quantidade }; ValidarQuantidadeInstalacao(validarQuantidadeRequisicao); EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(requisicao.IdEnderecoArmazenagem); if (enderecoArmazenagem == null) { throw new BusinessException("O endereço não foi encontrado."); } if (enderecoArmazenagem.IsPontoSeparacao) { throw new BusinessException("Não é possível instalar volume em um endereço de Picking."); } if (enderecoArmazenagem.PontoArmazenagem.IdTipoArmazenagem != TipoArmazenagemEnum.Volume) { throw new BusinessException("Tipo de Movimentação inválido."); } if (enderecoArmazenagem.Ativo == false) { throw new BusinessException("O endereço não está ativo."); } if (enderecoArmazenagem.PontoArmazenagem.Ativo == false) { throw new BusinessException("O ponto de armazenagem não está ativo."); } if (enderecoArmazenagem.PontoArmazenagem.NivelArmazenagem.Ativo == false) { throw new BusinessException("O nível de armazenagem não está ativo."); } LoteProdutoEndereco loteProdutoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorEndereco(requisicao.IdEnderecoArmazenagem); if (loteProdutoEndereco != null) { throw new BusinessException("O endereço já está ocupado."); } Produto produto = _unitOfWork.ProdutoRepository.GetById(requisicao.IdProduto); decimal pesoInstalacao = produto.PesoLiquido / produto.MultiploVenda * requisicao.Quantidade; ValidarPeso(enderecoArmazenagem, pesoInstalacao); }
public void AtualizarOuInserirEnderecoArmazenagem(long idProduto, long idEnderecoArmazenagem, long idEmpresa, string idUsuario) { var produtoEstoque = _unitOfWork.ProdutoEstoqueRepository.ConsultarPorProduto(idProduto, idEmpresa); if (produtoEstoque == null) { throw new BusinessException("Produto não localizado!"); } LoteProdutoEndereco loteProdutoEndereco = null; if (produtoEstoque.IdEnderecoArmazenagem.HasValue) { loteProdutoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorEnderecoProdutoEmpresaPicking(produtoEstoque.IdEnderecoArmazenagem.Value, produtoEstoque.IdProduto, produtoEstoque.IdEmpresa); } if (loteProdutoEndereco?.Quantidade > 0) { throw new BusinessException("Existem peças no picking, não é possível alterar"); } using (var transacao = _unitOfWork.CreateTransactionScope()) { if (loteProdutoEndereco != null && loteProdutoEndereco.IdEnderecoArmazenagem != idEnderecoArmazenagem) { _unitOfWork.LoteProdutoEnderecoRepository.Delete(loteProdutoEndereco); _unitOfWork.SaveChanges(); loteProdutoEndereco = null; } produtoEstoque.IdEnderecoArmazenagem = idEnderecoArmazenagem; _unitOfWork.ProdutoEstoqueRepository.Update(produtoEstoque); _unitOfWork.SaveChanges(); if (loteProdutoEndereco == null) { var newLoteProdutoEndereco = new LoteProdutoEndereco(); newLoteProdutoEndereco.IdLoteProdutoEndereco = 0; newLoteProdutoEndereco.IdEnderecoArmazenagem = idEnderecoArmazenagem; newLoteProdutoEndereco.IdProduto = produtoEstoque.IdProduto; newLoteProdutoEndereco.IdLote = null; newLoteProdutoEndereco.Quantidade = 0; newLoteProdutoEndereco.PesoTotal = 0; newLoteProdutoEndereco.IdEmpresa = produtoEstoque.IdEmpresa; newLoteProdutoEndereco.IdUsuarioInstalacao = idUsuario; newLoteProdutoEndereco.DataHoraInstalacao = DateTime.Now; _unitOfWork.LoteProdutoEnderecoRepository.Add(newLoteProdutoEndereco); } else { loteProdutoEndereco.IdEnderecoArmazenagem = idEnderecoArmazenagem; loteProdutoEndereco.DataHoraInstalacao = DateTime.Now; _unitOfWork.LoteProdutoEnderecoRepository.Update(loteProdutoEndereco); } _unitOfWork.SaveChanges(); transacao.Complete(); } }