コード例 #1
0
        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}");
            }
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
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}");
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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}");
            }
        }