Пример #1
0
        public IHttpActionResult ValidarEnderecoInstalacao(ValidarEnderecoInstalacaoModelRequisicao requisicao)
        {
            try
            {
                var validarEnderecoRequisicao = new ValidarEnderecoInstalacaoRequisicao
                {
                    IdLote                = requisicao.IdLote,
                    IdProduto             = requisicao.IdProduto,
                    Quantidade            = requisicao.Quantidade,
                    IdEmpresa             = IdEmpresa,
                    IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem
                };

                _armazenagemService.ValidarEnderecoInstalacao(validarEnderecoRequisicao);
            }
            catch (BusinessException ex)
            {
                return(ApiBadRequest(ex.Message));
            }
            catch
            {
                throw;
            }

            return(ApiOk());
        }
Пример #2
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);
        }
Пример #3
0
        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);
        }