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