Esempio n. 1
0
        public void Excluir(long idEnderecoArmazenagem)
        {
            EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(idEnderecoArmazenagem);

            _unitOfWork.EnderecoArmazenagemRepository.Delete(enderecoArmazenagem);
            _unitOfWork.SaveChanges();
        }
        public ActionResult Editar(long id)
        {
            EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(id);

            var viewModel = Mapper.Map <EnderecoArmazenagemEditarViewModel>(enderecoArmazenagem);

            return(View(viewModel));
        }
        public IHttpActionResult Perquisar(string idCod)
        {
            if (string.IsNullOrEmpty(idCod))
            {
                return(ApiBadRequest("Informe o código de barras ou o código do endereço."));
            }

            var resposta = new EnderecosArmazenagemResposta {
                Lista = new List <EnderecoArmazenagemResposta>()
            };

            if (long.TryParse(idCod, out long idEnderecoArmazenagem))
            {
                EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(idEnderecoArmazenagem);

                if (enderecoArmazenagem != null)
                {
                    var itemResposta = new EnderecoArmazenagemResposta
                    {
                        Codigo = enderecoArmazenagem.Codigo,
                        IdEnderecoArmazenagem = enderecoArmazenagem.IdEnderecoArmazenagem,
                        DescricaoNivel        = enderecoArmazenagem.NivelArmazenagem.Descricao,
                        DescricaoPonto        = enderecoArmazenagem.PontoArmazenagem.Descricao,
                        IsPontoSeparacao      = enderecoArmazenagem.IsPontoSeparacao
                    };

                    resposta.Lista.Add(itemResposta);

                    return(ApiOk(resposta));
                }
            }

            List <EnderecoArmazenagem> enderecosArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.PesquisarPorCodigo(idCod, IdEmpresa);

            if (enderecosArmazenagem.Count == 0)
            {
                return(ApiNotFound("Nenhum endereço foi encontrado."));
            }

            foreach (EnderecoArmazenagem enderecoArmazenagem in enderecosArmazenagem)
            {
                var itemResposta = new EnderecoArmazenagemResposta
                {
                    Codigo = enderecoArmazenagem.Codigo,
                    IdEnderecoArmazenagem = enderecoArmazenagem.IdEnderecoArmazenagem,
                    DescricaoNivel        = enderecoArmazenagem.NivelArmazenagem.Descricao,
                    DescricaoPonto        = enderecoArmazenagem.PontoArmazenagem.Descricao,
                    IsPontoSeparacao      = enderecoArmazenagem.IsPontoSeparacao
                };

                resposta.Lista.Add(itemResposta);
            }

            return(ApiOk(resposta));
        }
Esempio n. 4
0
        public void Editar(EnderecoArmazenagem enderecoArmazenagem)
        {
            enderecoArmazenagem.Codigo = enderecoArmazenagem.Codigo.ToUpper();

            string[] endereco = enderecoArmazenagem.Codigo.Split('.');
            enderecoArmazenagem.Corredor   = int.Parse(endereco[0]);
            enderecoArmazenagem.Horizontal = endereco[1];
            enderecoArmazenagem.Vertical   = int.Parse(endereco[2]);
            enderecoArmazenagem.Divisao    = int.Parse(endereco[3]);

            _unitOfWork.EnderecoArmazenagemRepository.Update(enderecoArmazenagem);
            _unitOfWork.SaveChanges();
        }
Esempio n. 5
0
        public void ValidarEnderecoInstalacaoLoteVolume(long idEnderecoArmazenagem, long idEmpresa)
        {
            if (idEnderecoArmazenagem <= 0)
            {
                throw new BusinessException("O endereço deve ser informado.");
            }

            EnderecoArmazenagem enderecoArmazenagem = _uow.EnderecoArmazenagemRepository.GetById(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 ponto de separação.");
            }

            if (enderecoArmazenagem.IsPicking)
            {
                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.");
            }

            if (enderecoArmazenagem.IdEmpresa != idEmpresa)
            {
                throw new BusinessException("Local não pertence a empresa selecionada.");
            }
        }
        public ActionResult Detalhes(long id)
        {
            EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(id);

            var viewModel = Mapper.Map <EnderecoArmazenagemDetalhesViewModel>(enderecoArmazenagem);

            var loteProdutoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarRegistrosPorEndereco(viewModel.IdEnderecoArmazenagem);

            // Popula Itens na lista de produtos do Endereço Armazenagem
            loteProdutoEndereco.ForEach(lpe =>
            {
                if (!lpe.EnderecoArmazenagem.IsPicking)
                {
                    var item = new ProdutoItem
                    {
                        NumeroLote          = lpe.Lote == null ? "-" : lpe.Lote.IdLote.ToString(),
                        NumeroNf            = lpe.Lote == null ? "-" : lpe.Lote.NotaFiscal.Numero.ToString(),
                        CodigoReferencia    = lpe.Produto.Referencia,
                        DataInstalacao      = lpe.DataHoraInstalacao.ToString("dd/MM/yyyy HH:mm:ss"),
                        Descricao           = lpe.Produto.Descricao,
                        Multiplo            = lpe.Produto.MultiploVenda.ToString(),
                        Peso                = lpe.Produto.PesoBruto.ToString("n2"),
                        QuantidadeInstalada = lpe.Quantidade.ToString(),
                        UsuarioResponsavel  = _unitOfWork.PerfilUsuarioRepository.GetByUserId(lpe.AspNetUsers.Id).Nome
                    };

                    viewModel.Items.Add(item);
                }
                else
                {
                    var item = new ProdutoItem
                    {
                        CodigoReferencia    = lpe.Produto.Referencia,
                        DataInstalacao      = lpe.DataHoraInstalacao.ToString("dd/MM/yyyy HH:mm:ss"),
                        Descricao           = lpe.Produto.Descricao,
                        Multiplo            = lpe.Produto.MultiploVenda.ToString("n2"),
                        Peso                = lpe.Produto.PesoBruto.ToString("n2"),
                        QuantidadeInstalada = lpe.Quantidade.ToString(),
                        UsuarioResponsavel  = _unitOfWork.PerfilUsuarioRepository.GetByUserId(lpe.AspNetUsers.Id).Nome
                    };

                    viewModel.Items.Add(item);
                }
            });

            return(View(viewModel));
        }
        public IHttpActionResult PesquisarPorId(long id)
        {
            if (id <= 0)
            {
                return(ApiBadRequest("O endereço deve ser informado."));
            }

            EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(id);

            if (enderecoArmazenagem == null)
            {
                return(ApiNotFound("O endereço não foi encontrado."));
            }

            var enderecoArmazenagemResposta = Mapper.Map <PesquisarEnderecoArmazenagemPorIdResposta>(enderecoArmazenagem);

            return(ApiOk(enderecoArmazenagemResposta));
        }
Esempio n. 8
0
        private void ValidarPeso(EnderecoArmazenagem enderecoArmazenagem, decimal pesoInstalacao)
        {
            var siglasNaoVerificaPeso = new List <string>()
            {
                "SA", //FW - SANTO ANDRE
                "K3", //CAMPINAS BATERIAS - SANTO ANDRE
                "NM", //FW -PQ NOVO MUNDO
                "OS", //FW -OSASCO
                "SO", //FW -SOCORRO
                "BU", //FW -BAURU
            };

            if (!(siglasNaoVerificaPeso.Contains(enderecoArmazenagem.Empresa.Sigla) && enderecoArmazenagem.Horizontal == "C"))
            {
                //limite de peso do endereço
                if (enderecoArmazenagem.LimitePeso.HasValue)
                {
                    if (pesoInstalacao > enderecoArmazenagem.LimitePeso)
                    {
                        throw new BusinessException("Quantidade ultrapassa limite de peso do endereço.");
                    }
                }

                //limite de peso vertical do ponto
                if (enderecoArmazenagem.PontoArmazenagem.LimitePesoVertical.HasValue)
                {
                    List <EnderecoArmazenagem> enderecosPontoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.PesquisarPorPontoArmazenagem(enderecoArmazenagem.IdPontoArmazenagem);

                    List <long> enderecosVertical = enderecosPontoArmazenagem.
                                                    Where(w => w.Corredor == enderecoArmazenagem.Corredor && w.Vertical == enderecoArmazenagem.Vertical && w.Ativo).
                                                    Select(w => w.IdEnderecoArmazenagem).ToList();

                    List <LoteProdutoEndereco> lotesProdutoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorEnderecos(enderecosVertical);

                    decimal pesoVerticalInstalado   = lotesProdutoEndereco.Sum(s => s.PesoTotal);
                    decimal limitePesoVerticalPonto = enderecoArmazenagem.PontoArmazenagem.LimitePesoVertical.Value;

                    if (pesoVerticalInstalado + pesoInstalacao > limitePesoVerticalPonto)
                    {
                        throw new BusinessException("Quantidade ultrapassa limite de peso vertical.");
                    }
                }
            }
        }
Esempio n. 9
0
        public void ValidarQuantidadeAjuste(ValidarQuantidadeAjusteRequisicao requisicao)
        {
            if (requisicao.Quantidade <= 0)
            {
                throw new BusinessException("A quantidade deve ser informada.");
            }

            var validarLoteRequisicao = new ValidarLoteRequisicao
            {
                IdLote    = requisicao.IdLote,
                IdEmpresa = requisicao.IdEmpresa
            };

            ValidarLote(validarLoteRequisicao);

            var validarLoteProdutoRequisicao = new ValidarLoteProdutoAjusteRequisicao
            {
                IdEmpresa = requisicao.IdEmpresa,
                IdLote    = requisicao.IdLote,
                IdProduto = requisicao.IdProduto
            };

            ValidarLoteProdutoAjuste(validarLoteProdutoRequisicao);

            var listaEnderecosLoteProduto = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorLoteProduto(requisicao.IdLote, requisicao.IdProduto);

            LoteProduto loteProduto = _unitOfWork.LoteProdutoRepository.PesquisarProdutoNoLote(requisicao.IdEmpresa, requisicao.IdLote, requisicao.IdProduto);

            int saldoLote      = loteProduto.Saldo;
            int totalInstalado = listaEnderecosLoteProduto.Where(w => w.IdEnderecoArmazenagem != requisicao.IdEnderecoArmazenagem).Sum(s => s.Quantidade);

            if ((totalInstalado + requisicao.Quantidade) > saldoLote)
            {
                throw new BusinessException("Quantidade maior que o saldo do produto no lote.");
            }

            EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(requisicao.IdEnderecoArmazenagem);
            Produto             produto             = _unitOfWork.ProdutoRepository.GetById(requisicao.IdProduto);
            decimal             pesoInstalacao      = produto.PesoLiquido / produto.MultiploVenda * requisicao.Quantidade;

            ValidarPeso(enderecoArmazenagem, pesoInstalacao);
        }
        public ActionResult Editar(EnderecoArmazenagemEditarViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(viewModel.IdEnderecoArmazenagem);

            if (!enderecoArmazenagem.Codigo.Equals(viewModel.Codigo, StringComparison.OrdinalIgnoreCase))
            {
                List <EnderecoArmazenagem> enderecosPontoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.PesquisarPorPontoArmazenagem(viewModel.IdPontoArmazenagem.Value);
                int numeroEnderecos = enderecosPontoArmazenagem.Where(w =>
                                                                      w.IdEnderecoArmazenagem != viewModel.IdEnderecoArmazenagem &&
                                                                      w.Codigo.Equals(viewModel.Codigo, StringComparison.OrdinalIgnoreCase)).Count();

                if (numeroEnderecos > 0)
                {
                    Notify.Error("Endereço já existe no ponto de armazenagem.");
                    return(View(viewModel));
                }
            }

            enderecoArmazenagem.Ativo              = viewModel.Ativo;
            enderecoArmazenagem.IsEntrada          = viewModel.IsEntrada;
            enderecoArmazenagem.Codigo             = viewModel.Codigo;
            enderecoArmazenagem.EstoqueMaximo      = viewModel.EstoqueMaximo;
            enderecoArmazenagem.EstoqueMinimo      = viewModel.EstoqueMinimo;
            enderecoArmazenagem.IdNivelArmazenagem = viewModel.IdNivelArmazenagem.Value;
            enderecoArmazenagem.IdPontoArmazenagem = viewModel.IdPontoArmazenagem.Value;
            enderecoArmazenagem.IsFifo             = viewModel.IsFifo;
            enderecoArmazenagem.IsPontoSeparacao   = viewModel.IsPontoSeparacao;
            enderecoArmazenagem.LimitePeso         = viewModel.LimitePeso;
            enderecoArmazenagem.IdEmpresa          = IdEmpresa;
            enderecoArmazenagem.IsPicking          = viewModel.IsPicking;

            _enderecoArmazenagemService.Editar(enderecoArmazenagem);

            Notify.Success("Endereço de Armazenagem editado com sucesso.");
            return(RedirectToAction("Index"));
        }
Esempio n. 11
0
        public ActionResult EditarProduto(long id)
        {
            ProdutoEstoque produtoEstoque = _unitOfWork.ProdutoEstoqueRepository.ObterPorProdutoEmpresa(id, IdEmpresa);

            var viewModel = new ProdutoEditarViewModel
            {
                IdProduto = produtoEstoque.IdProduto
            };

            if (produtoEstoque.IdEnderecoArmazenagem != null)
            {
                EnderecoArmazenagem enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(produtoEstoque.IdEnderecoArmazenagem.Value);

                viewModel.IdEnderecoArmazenagem     = enderecoArmazenagem.IdEnderecoArmazenagem;
                viewModel.CodigoEnderecoArmazenagem = enderecoArmazenagem.Codigo;
                viewModel.IdNivelArmazenagem        = enderecoArmazenagem.IdNivelArmazenagem;
                viewModel.DescricaoNivelArmazenagem = enderecoArmazenagem.NivelArmazenagem.Descricao;
                viewModel.IdPontoArmazenagem        = enderecoArmazenagem.IdPontoArmazenagem;
                viewModel.DescricaoPontoArmazenagem = enderecoArmazenagem.PontoArmazenagem.Descricao;
            }

            return(View(viewModel));
        }
Esempio n. 12
0
        public void ImprimirEtiquetaPicking(ImprimirEtiquetaPickingRequest request)
        {
            Produto produto = _unitOfWork.ProdutoRepository.GetById(request.IdProduto);

            if (produto == null)
            {
                throw new BusinessException("Produto não encontrado.");
            }

            EnderecoArmazenagem endereco = _unitOfWork.EnderecoArmazenagemRepository.GetById(request.IdEnderecoArmazenagem);

            if (endereco == null)
            {
                throw new BusinessException("Endereço não encontrado.");
            }

            string referenciaProduto   = produto.Referencia;
            string codigoEndereco      = endereco.Codigo ?? string.Empty;
            string idEnderecoFormatado = endereco.IdEnderecoArmazenagem.ToString().PadLeft(7, '0');

            var etiquetaZpl = new StringBuilder();

            etiquetaZpl.AppendLine($"^XA");
            etiquetaZpl.AppendLine($"^FO16,20^GB270,880,200^FS");

            etiquetaZpl.AppendLine($"^FO55,85^FB430,1,0,C,0^A0B,250,60^FR^FD{referenciaProduto}^FS");

            etiquetaZpl.AppendLine($"^FO370,45^A0B,180,110^FD{codigoEndereco}^FS");

            etiquetaZpl.AppendLine($"^FO600,180^BCR,100,N,N^FD{idEnderecoFormatado}^FS");

            etiquetaZpl.AppendLine($"^XZ");

            byte[] etiqueta = Encoding.ASCII.GetBytes(etiquetaZpl.ToString());

            _impressoraService.Imprimir(etiqueta, request.IdImpressora);
        }
Esempio n. 13
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);
        }
Esempio n. 14
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);
        }