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()); }
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); }