public void ValidarEImprimirEtiquetaLote(ImprimirEtiquetaLoteRequest requisicao) { if (requisicao.IdLote <= 0) { throw new BusinessException("O lote deve ser informado."); } var lote = _unitOfWork.LoteRepository.GetById(requisicao.IdLote); if (lote == null) { throw new BusinessException("O lote não foi encontrado."); } if (requisicao.IdProduto <= 0) { throw new BusinessException("O produto deve ser informado."); } var produto = _unitOfWork.ProdutoRepository.GetById(requisicao.IdProduto); if (produto == null) { throw new BusinessException("O produto não foi encontrado."); } var loteProduto = _unitOfWork.LoteProdutoRepository.PesquisarProdutoNoLote(requisicao.IdEmpresa, requisicao.IdLote, requisicao.IdProduto); if (loteProduto == null) { throw new BusinessException("O produto não pertence ao lote."); } if (requisicao.QuantidadeProdutos > loteProduto.Saldo) { throw new BusinessException("Saldo do produto no lote insuficiente."); } ImprimirEtiquetaArmazenagemVolume(new ImprimirEtiquetaArmazenagemVolume() { NroLote = requisicao.IdLote, ReferenciaProduto = produto.Referencia, QuantidadeEtiquetas = requisicao.QuantidadeEtiquetas, QuantidadePorCaixa = requisicao.QuantidadeProdutos, Usuario = _unitOfWork.PerfilUsuarioRepository.GetByUserId(requisicao.IdUsuario)?.Nome, IdImpressora = requisicao.IdImpressora, IdEmpresa = requisicao.IdEmpresa }); var gravarHistoricoColetorRequisciao = new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ImprimirEtiqueta, Descricao = $"Imprimiu a etiqueta do lote {requisicao.IdLote} do(s) produto() {produto.Referencia}", IdEmpresa = requisicao.IdEmpresa, IdUsuario = requisicao.IdUsuario }; _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisciao); }
public void GravarHistoricoColetor(GravarHistoricoColetorRequisicao gravarHistoricoColetorRequisicao) { try { var coletorHistorico = new ColetorHistorico { IdColetorAplicacao = gravarHistoricoColetorRequisicao.IdColetorAplicacao, IdColetorHistoricoTipo = gravarHistoricoColetorRequisicao.IdColetorHistoricoTipo, DataHora = DateTime.Now, Descricao = gravarHistoricoColetorRequisicao.Descricao, IdEmpresa = gravarHistoricoColetorRequisicao.IdEmpresa, IdUsuario = gravarHistoricoColetorRequisicao.IdUsuario }; _unitOfWork.ColetorHistoricoTipoRepository.GravarHistorico(coletorHistorico); } catch (Exception e) { try { _log.Error("Erro ao gravar histórico de ações do usuário", e); } catch { //Fazer nada. } } }
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}"); } }
public void ConfirmaQuantidadeConferenciaAlas(int quantidade, long idProduto, long?idLote, long idEnderecoArmazenagem, long idEmpresa, string idUsuario) { if (quantidade <= 0) { throw new BusinessException("A quantidade deve ser informada."); } if (idProduto <= 0) { throw new BusinessException("O produto deve ser informado."); } var produto = _unitOfWork.ProdutoRepository.GetById(idProduto); if (produto == null) { throw new BusinessException("O produto não foi encontrado."); } if (idLote != null) { var lote = _unitOfWork.LoteRepository.PesquisarPorLoteEmpresa(idLote.Value, idEmpresa); if (lote == null) { throw new BusinessException("O lote não foi encontrado."); } } if (idEnderecoArmazenagem <= 0) { throw new BusinessException("O endereço deve ser informado."); } var enderecoArmazenagem = _unitOfWork.EnderecoArmazenagemRepository.GetById(idEnderecoArmazenagem); if (enderecoArmazenagem == null) { throw new BusinessException("O endereço não foi encontrado."); } if (enderecoArmazenagem.IdEmpresa != idEmpresa) { throw new BusinessException("O endereço não pertence a empresa do usuário."); } var historico = new GravarHistoricoColetorRequisicao() { Descricao = $"A quantidade conferida {quantidade} do produto {produto.Referencia} do lote {(idLote).GetValueOrDefault()} do endereço {enderecoArmazenagem.Codigo} está correta.", IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ConferirEndereco, IdEmpresa = idEmpresa, IdUsuario = idUsuario }; _coletorHistoricoService.GravarHistoricoColetor(historico); }
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); }
public void ImprimirEtiquetaEndereco(ImprimirEtiquetaEnderecoRequest request) { var endereco = _unitOfWork.EnderecoArmazenagemRepository.GetById(request.IdEnderecoArmazenagem); if (endereco == null) { throw new BusinessException("Endereço não encontrado."); } var codigoEnderecoFormatado = endereco.Codigo ?? string.Empty; var idEnderecoFormatado = endereco.IdEnderecoArmazenagem.ToString().PadLeft(7, '0'); var etiquetaZpl = new StringBuilder(); if (request.TipoImpressao == EtiquetaEnderecoTipoImpressao.NORMAL_90_70) { etiquetaZpl.AppendLine("^XA"); etiquetaZpl.AppendLine("^LL880"); //Código diferente do Clipper que define quantidade de etiquetas a serem impressas etiquetaZpl.AppendLine($"^PQ{request.QuantidadeEtiquetas}^FS"); etiquetaZpl.AppendLine("^FO16,20^GB696,520,8^FS"); etiquetaZpl.AppendLine("^FO16,20^GB350,520,200^FS"); etiquetaZpl.AppendLine($"^FO95,20^FB500,1,0,C,0^A0B,240,100^FR^FD{codigoEnderecoFormatado}^FS"); etiquetaZpl.AppendLine($"^FO450,160^BCB,135,Y,N^FD{idEnderecoFormatado}^FS"); etiquetaZpl.AppendLine("^XZ"); } else { etiquetaZpl.AppendLine("^XA"); etiquetaZpl.AppendLine("^LL176"); // Define quantidade de etiquetas a imprimir etiquetaZpl.AppendLine($"^PQ{request.QuantidadeEtiquetas}^FS"); // Contorno da etiqueta etiquetaZpl.AppendLine("^FO5,10^GB900,180,8^FS"); // Fundo do texto de endereço etiquetaZpl.AppendLine("^FO5,10^GB380,180,170^FS"); // Texto do endereço etiquetaZpl.AppendLine($"^FO5,20^FB380,1,0,C,0^A0N,200,85^FR^FD{codigoEnderecoFormatado}^FS"); // Código de barras do endereço etiquetaZpl.AppendLine($"^FO415,35^BY3,,110^BCN,,Y,N^FD{idEnderecoFormatado}^FS"); etiquetaZpl.AppendLine("^XZ"); } byte[] etiqueta = Encoding.ASCII.GetBytes(etiquetaZpl.ToString()); _impressoraService.Imprimir(etiqueta, request.IdImpressora); var gravarHistoricoColetorRequisicao = new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ImprimirEtiqueta, Descricao = $"Imprimiu a etiqueta de endereço com o código {endereco.Codigo}", IdEmpresa = request.IdEmpresa, IdUsuario = request.IdUsuario }; _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisicao); }
public void ImprimirEtiquetaAvulso(ImprimirEtiquetaAvulsoRequest request) { var empresa = _unitOfWork.EmpresaRepository.GetById(request.IdEmpresa); string sac = empresa.TelefoneSAC.MascaraTelefone(); string razaoSocial = empresa.RazaoSocial.Normalizar(); string cnpj = empresa.CNPJ.MascaraCNPJ(); int linhas = (int)Math.Ceiling((decimal)request.QuantidadeEtiquetas / CelulasEtiqueta_102x22.Count); int etiquetasRestantes = request.QuantidadeEtiquetas; var etiquetaZpl = new StringBuilder(); for (int l = 0; l < linhas; l++) { var colunasImpressao = new List <CelulaEtiqueta>(); for (int c = 0; etiquetasRestantes > 0 && c < CelulasEtiqueta_102x22.Count; c++) { colunasImpressao.Add(CelulasEtiqueta_102x22.ElementAt(c)); etiquetasRestantes--; } etiquetaZpl.Append("^XA"); // Velocidade de impressão etiquetaZpl.Append("^PRA^FS"); foreach (CelulaEtiqueta celula in colunasImpressao) { // Posição inicial de desenho da etiqueta etiquetaZpl.Append($"^LH{celula.X},{celula.Y}"); // Label Distribuido por etiquetaZpl.Append("^FO12,40^FB260,1,,C,0^A0N,30,20^FDDISTRIBUIDO POR:^FS"); etiquetaZpl.Append($"^FO12,70^FB260,1,,C,0^A0N,30,20^FD{razaoSocial}^FS"); // Label CNPJ etiquetaZpl.Append($"^FO12,100^FB260,1,,C,0^A0N,30,20^FDCNPJ:{cnpj}^FS"); // Label Telefone SAC etiquetaZpl.Append($"^FO12,130^FB260,1,,C,0^A0N,30,20^FDSAC.:{sac}^FS"); } // Redefinir posição inicial de desenho etiquetaZpl.Append("^LH0,0"); etiquetaZpl.Append("^XZ"); } byte[] etiqueta = Encoding.ASCII.GetBytes(etiquetaZpl.ToString()); _impressoraService.Imprimir(etiqueta, request.IdImpressora); var gravarHistoricoColetorRequisciao = new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ImprimirEtiqueta, Descricao = $"Imprimiu {request.QuantidadeEtiquetas} etiqueta(s) avulsa(s) do produto {request.ReferenciaProduto}", IdEmpresa = request.IdEmpresa, IdUsuario = request.IdUsuario }; _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisciao); }
public void ImprimirEtiquetaPersonalizada(ImprimirEtiquetaProdutoBase request) { Produto produto = _unitOfWork.ProdutoRepository.Todos().First(x => x.Referencia.ToUpper() == request.ReferenciaProduto.ToUpper()); int linhas = (int)Math.Ceiling((decimal)request.QuantidadeEtiquetas / CelulasEtiqueta_102x22.Count); int etiquetasRestantes = request.QuantidadeEtiquetas; var etiquetaZpl = new StringBuilder(); for (int l = 0; l < linhas; l++) { var colunasImpressao = new List <CelulaEtiqueta>(); for (int c = 0; etiquetasRestantes > 0 && c < CelulasEtiqueta_102x22.Count; c++) { colunasImpressao.Add(CelulasEtiqueta_102x22.ElementAt(c)); etiquetasRestantes--; } etiquetaZpl.Append("^XA"); // Velocidade de impressão etiquetaZpl.Append("^PRA^FS"); // Configuração padrão dos códigos de barras etiquetaZpl.Append("^BY2,,164"); foreach (CelulaEtiqueta celula in colunasImpressao) { // Posição inicial de desenho da etiqueta etiquetaZpl.Append($"^LH{celula.X},{celula.Y}"); // Label referência do produto etiquetaZpl.Append("^FO12,12^GB240,25,30^FS"); etiquetaZpl.Append($"^FO14,16^A0N,30,35^FR^FD{produto.Referencia}^FS"); // Label descrição do produto etiquetaZpl.Append($"^FO12,44^FB260,1,,L,0^A0N,16,16^FD{produto.Descricao.Normalizar()}^FS"); // Código de barras do produto etiquetaZpl.Append($"^FO42,62^BEN,75,Y,N^FD{produto.CodigoBarras}^FS"); } // Redefinir posição inicial de desenho etiquetaZpl.Append("^LH0,0"); etiquetaZpl.Append("^XZ"); } byte[] etiqueta = Encoding.ASCII.GetBytes(etiquetaZpl.ToString()); _impressoraService.Imprimir(etiqueta, request.IdImpressora); var gravarHistoricoColetorRequisciao = new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ImprimirEtiqueta, Descricao = $"Imprimiu {request.QuantidadeEtiquetas} etiqueta(s) personalizada(s) do produto {request.ReferenciaProduto}", IdEmpresa = request.IdEmpresa, IdUsuario = request.IdUsuario }; _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisciao); }
public void ImprimirEtiquetaPeca(ImprimirEtiquetaProdutoBase request) { Produto produto = _unitOfWork.ProdutoRepository.Todos().FirstOrDefault(x => x.Referencia.ToUpper() == request.ReferenciaProduto.ToUpper()); ProdutoEstoque empresaProduto = null; if (produto != null) { empresaProduto = _unitOfWork.ProdutoEstoqueRepository.ObterPorProdutoEmpresa(produto.IdProduto, request.IdEmpresa); } if (produto == null || empresaProduto == null) { throw new BusinessException("Produto não encontrado."); } var codigoEndereco = empresaProduto?.EnderecoArmazenagem?.Codigo ?? string.Empty; var unidade = produto.UnidadeMedida?.Sigla ?? string.Empty; var descricaoNormalizada = produto.Descricao.Normalizar(); var quantidadeFormatada = produto.MultiploVenda.ToString().PadLeft(3, '0'); int linhas = (int)Math.Ceiling((decimal)request.QuantidadeEtiquetas / CelulasEtiqueta_102x22.Count); int etiquetasRestantes = request.QuantidadeEtiquetas; var etiquetaZpl = new StringBuilder(); for (int l = 0; l < linhas; l++) { var colunasImpressao = new List <CelulaEtiqueta>(); for (int c = 0; etiquetasRestantes > 0 && c < CelulasEtiqueta_102x22.Count; c++) { colunasImpressao.Add(CelulasEtiqueta_102x22.ElementAt(c)); etiquetasRestantes--; } etiquetaZpl.AppendLine($"^XA"); etiquetaZpl.AppendLine($"^LH32,0"); etiquetaZpl.AppendLine($"^PRA^FS"); etiquetaZpl.AppendLine($"^PQ1^FS"); var imprimeEtiqueta2 = colunasImpressao.Count > 1; var imprimeEtiqueta3 = colunasImpressao.Count > 2; etiquetaZpl.AppendLine($"^FO0,45^GB146,26,30^FS"); if (imprimeEtiqueta2) { etiquetaZpl.AppendLine($"^FO272,45^GB146,26,30^FS"); } if (imprimeEtiqueta3) { etiquetaZpl.AppendLine($"^FO544,45^GB146,26,30^FS"); } etiquetaZpl.AppendLine($"^FO0,49^A0N,30,25^FR^FD{produto.Referencia}^FS"); if (imprimeEtiqueta2) { etiquetaZpl.AppendLine($"^FO272,49^A0N,30,25^FR^FD{produto.Referencia}^FS"); } if (imprimeEtiqueta3) { etiquetaZpl.AppendLine($"^FO544,49^A0N,30,25^FR^FD{produto.Referencia}^FS"); } etiquetaZpl.AppendLine($"^FO154,45^A0N,25,20^FD{codigoEndereco}^FS"); if (imprimeEtiqueta2) { etiquetaZpl.AppendLine($"^FO426,45^A0N,25,20^FD{codigoEndereco}^FS"); } if (imprimeEtiqueta3) { etiquetaZpl.AppendLine($"^FO698,45^A0N,25,20^FD{codigoEndereco}^FS"); } etiquetaZpl.AppendLine($"^FO16,78^A0N,16,16^FD{descricaoNormalizada}^FS"); if (imprimeEtiqueta2) { etiquetaZpl.AppendLine($"^FO288,78^A0N,16,16^FD{descricaoNormalizada}^FS"); } if (imprimeEtiqueta3) { etiquetaZpl.AppendLine($"^FO560,78^A0N,16,16^FD{descricaoNormalizada}^FS"); } etiquetaZpl.AppendLine($"^FO34,91^BY2,,164^BEN,73,Y,N^FD{produto.CodigoBarras}^FS"); if (imprimeEtiqueta2) { etiquetaZpl.AppendLine($"^FO306,91^BY2,,164^BEN,73,Y,N^FD{produto.CodigoBarras}^FS"); } if (imprimeEtiqueta3) { etiquetaZpl.AppendLine($"^FO578,91^BY2,,164^BEN,73,Y,N^FD{produto.CodigoBarras}^FS"); } etiquetaZpl.AppendLine($"^FO016,184^A0N,8,24^FDQuant.p/emb.: {quantidadeFormatada} { unidade}^FS"); if (imprimeEtiqueta2) { etiquetaZpl.AppendLine($"^FO288,184^A0N,8,24^FDQuant.p/emb.: {quantidadeFormatada} { unidade}^FS"); } if (imprimeEtiqueta3) { etiquetaZpl.AppendLine($"^FO560,184^A0N,8,24^FDQuant.p/emb.: {quantidadeFormatada} { unidade}^FS"); } etiquetaZpl.AppendLine($"^XZ"); } byte[] etiqueta = Encoding.ASCII.GetBytes(etiquetaZpl.ToString()); _impressoraService.Imprimir(etiqueta, request.IdImpressora); var gravarHistoricoColetorRequisciao = new GravarHistoricoColetorRequisicao { IdColetorAplicacao = ColetorAplicacaoEnum.Armazenagem, IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ImprimirEtiqueta, Descricao = $"Imprimiu {request.QuantidadeEtiquetas} etiqueta(s) individual(ais) do produto {request.ReferenciaProduto}", IdEmpresa = request.IdEmpresa, IdUsuario = request.IdUsuario }; _coletorHistoricoService.GravarHistoricoColetor(gravarHistoricoColetorRequisciao); }
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}"); } }
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 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}"); } }