public async Task AbastecerPicking(long idEnderecoArmazenagem, long idLote, long idProduto, int quantidade, long idEmpresa, string idUsuarioOperacao) { ValidarEnderecoAbastecer(idEnderecoArmazenagem); ValidarLoteAbastecer(idEnderecoArmazenagem, idLote, idProduto); ValidarQuantidadeAbastecer(idEnderecoArmazenagem, idLote, idProduto, quantidade); var loteProduto = _unitOfWork.LoteProdutoRepository.ConsultarPorLoteProduto(idLote, idProduto); var loteProdutoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorEndereco(idEnderecoArmazenagem); try { using (var transacao = _unitOfWork.CreateTransactionScope()) { loteProduto.Saldo -= quantidade; _unitOfWork.LoteProdutoRepository.Update(loteProduto); await _unitOfWork.SaveChangesAsync(); loteProdutoEndereco.Quantidade += quantidade; _unitOfWork.LoteProdutoEnderecoRepository.Update(loteProdutoEndereco); await _unitOfWork.SaveChangesAsync(); var loteMovimentacao = new LoteMovimentacao { IdEmpresa = idEmpresa, IdLote = idLote, IdProduto = idProduto, IdEnderecoArmazenagem = idEnderecoArmazenagem, IdUsuarioMovimentacao = idUsuarioOperacao, Quantidade = quantidade, IdLoteMovimentacaoTipo = LoteMovimentacaoTipoEnum.Abastecimento, DataHora = DateTime.Now }; _unitOfWork.LoteMovimentacaoRepository.Add(loteMovimentacao); await _unitOfWork.SaveChangesAsync(); 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 = idUsuarioOperacao }; _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisicao); } catch { throw new BusinessException($"Erro ao abastecer o picking com o produto {loteProduto.Produto.Referencia} do lote {loteProduto.Lote.IdLote}"); } }
public async Task FinalizarConferencia(long idEnderecoArmazenagem, long idProduto, int quantidade, long idEmpresa, string idUsuarioOperacao, bool conferenciaManual) { var volume = ValidarEnderecoConferir(idEnderecoArmazenagem); ValidarProdutoConferir(idEnderecoArmazenagem, idProduto); if (quantidade != volume.Quantidade) { throw new BusinessException("Quantidade de produtos informada diverge da quantidade instalada."); } using (var transacao = _unitOfWork.CreateTransactionScope()) { var idLote = volume.IdLote.GetValueOrDefault(); var referenciaProduto = volume.Produto.Referencia; var codigoEndereco = volume.EnderecoArmazenagem.Codigo; var detalhesVolume = ConsultaDetalhesVolumeInformado(idEnderecoArmazenagem, idLote, idProduto, idEmpresa); var descricao = $"Conferiu {(conferenciaManual ? "manualmente" : string.Empty)} o produto {detalhesVolume.Produto.Referencia} quantidade {quantidade} peso {detalhesVolume.PesoTotal} do lote {detalhesVolume.IdLote} do endereço {detalhesVolume.EnderecoArmazenagem.Codigo}."; await RetirarVolumeEndereco(idEnderecoArmazenagem, idLote, volume.IdProduto, idEmpresa, idUsuarioOperacao); var loteMovimentacao = new LoteMovimentacao { IdEmpresa = idEmpresa, IdLote = idLote, IdProduto = volume.IdProduto, IdEnderecoArmazenagem = idEnderecoArmazenagem, IdUsuarioMovimentacao = idUsuarioOperacao, Quantidade = quantidade, IdLoteMovimentacaoTipo = LoteMovimentacaoTipoEnum.Conferencia, DataHora = DateTime.Now }; _unitOfWork.LoteMovimentacaoRepository.Add(loteMovimentacao); await _unitOfWork.SaveChangesAsync(); var coletorHistorico = new ColetorHistorico { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ConferirEndereco, DataHora = DateTime.Now, Descricao = descricao, IdEmpresa = idEmpresa, IdUsuario = idUsuarioOperacao }; _unitOfWork.ColetorHistoricoTipoRepository.GravarHistorico(coletorHistorico); transacao.Complete(); } }
public async Task RetirarVolumeEndereco(long idEnderecoArmazenagem, long idLote, long idProduto, long idEmpresa, string idUsuarioRetirada) { ValidarProdutoRetirar(idEnderecoArmazenagem, idLote, idProduto, idEmpresa); var volume = ConsultaDetalhesVolumeInformado(idEnderecoArmazenagem, idLote, idProduto, idEmpresa); var gravarHistoricoColetorRequisicao = new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.RetirarProduto, Descricao = $"Retirou o produto {volume.Produto.Referencia} quantidade {volume.Quantidade} peso {volume.PesoTotal} do lote {volume.Lote.IdLote} do endereço {volume.EnderecoArmazenagem.Codigo}", IdEmpresa = idEmpresa, IdUsuario = idUsuarioRetirada }; using (var transacao = _unitOfWork.CreateTransactionScope()) { _unitOfWork.LoteProdutoEnderecoRepository.Delete(volume); await _unitOfWork.SaveChangesAsync(); var loteMovimentacao = new LoteMovimentacao { IdEmpresa = idEmpresa, IdLote = idLote, IdProduto = idProduto, IdEnderecoArmazenagem = idEnderecoArmazenagem, IdUsuarioMovimentacao = idUsuarioRetirada, Quantidade = volume.Quantidade, IdLoteMovimentacaoTipo = LoteMovimentacaoTipoEnum.Saida, DataHora = DateTime.Now }; _unitOfWork.LoteMovimentacaoRepository.Add(loteMovimentacao); await _unitOfWork.SaveChangesAsync(); transacao.Complete(); } _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisicao); }
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 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}"); } }