public void ImprimirEtiquetaArmazenagemVolume(ImprimirEtiquetaArmazenagemVolume request) { Produto produto = _unitOfWork.ProdutoRepository.Todos().First(x => x.Referencia.ToUpper() == request.ReferenciaProduto.ToUpper()); ProdutoEstoque empresaProduto = _unitOfWork.ProdutoEstoqueRepository.ObterPorProdutoEmpresa(produto.IdProduto, request.IdEmpresa); decimal multiplo = request.Multiplo ?? produto.MultiploVenda; string codReferencia = produto.CodigoBarras; string endereco = empresaProduto?.EnderecoArmazenagem?.Codigo ?? string.Empty; var etiquetaImprimir = new StringBuilder(); etiquetaImprimir.Append("^XA"); // Define quantidade de etiquetas a imprimir etiquetaImprimir.Append($"^PQ{request.QuantidadeEtiquetas}^FS"); // Configuração Padrão do Barcode etiquetaImprimir.Append("^BY3,,250"); // Linha de contorno da etiqueta etiquetaImprimir.Append("^FO16,010^GB696,550,8^FS"); // Linhas de separação etiquetaImprimir.Append("^FO260,10^GB0,550,4^FS"); etiquetaImprimir.Append("^FO440,10^GB0,550,4^FS"); etiquetaImprimir.Append("^FO590,10^GB0,550,4^FS"); // Fundo e Conteúdo do Título [1 Linha] etiquetaImprimir.Append("^FO16,10^GB120,550,120^FS"); etiquetaImprimir.Append($"^FO33^FB550,1,0,C,0^A0B,130,80^FR^FD{produto.Referencia}^FS"); // Label e Barcode Número do Lote [2 Linha] etiquetaImprimir.Append("^FO145,400^A0B,20,20^FDNumero do Lote^FS"); etiquetaImprimir.Append($"^FO170,85^BCB,60,Y,N^FD{request.NroLote.ToString().PadLeft(10, '0')}^FS"); // Fundo e Conteúdo de "MULTIPLO" etiquetaImprimir.Append("^FO260,480^GB331,80,80,^FS"); etiquetaImprimir.Append($"^FO280,480^A0I,60,50^FR^FDMULTIPLO: {multiplo}^FS"); // Labels e Barcode de "Quantidade" [3 Linha] etiquetaImprimir.Append("^FO275,350^A0B,20,20^FDQuantidade^FS"); etiquetaImprimir.Append($"^FO280,180^A0B,100,100^FD{request.QuantidadePorCaixa.ToString().PadBoth(6)}^FS"); etiquetaImprimir.Append($"^FO370,100^BCR,50,N,N^FD{request.QuantidadePorCaixa.ToString().PadLeft(6, '0')}^FS"); // Barcode [4 Linha] etiquetaImprimir.Append($"^BEB,100,Y,N^FO460,100^FD{codReferencia}^FS"); // TODO: onde extrair este dado // Nome do Colaborador [5 Linha] int tamanhoNome = 13; string usuario = request.Usuario.Length > tamanhoNome?request.Usuario.Substring(0, tamanhoNome) : request.Usuario; usuario = usuario.Normalizar(); etiquetaImprimir.Append($"^FO610,220^FB330,2,100,C,0^A0B,95,40^FD{usuario}^FS"); // Endereço Picking [5 Linha] etiquetaImprimir.Append($"^FO610,30^A0B,50,40^FD{endereco}^FS"); // Data e Hora [5 Linha] etiquetaImprimir.Append($"^FO665,30^A0B,40,25^FD{DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")}*^FS"); etiquetaImprimir.Append("^XZ"); byte[] etiqueta = Encoding.ASCII.GetBytes(etiquetaImprimir.ToString()); _impressoraService.Imprimir(etiqueta, request.IdImpressora); }
public JsonResult LoteImprimir(LoteEtiquetaViewModel viewModel) { try { if (!ModelState.IsValid) { return(Json(new AjaxGenericResultModel { Success = false, Message = "Não foi possível solicitar impressão." })); } //Instância a lote produto. var loteProduto = _unitOfWork.LoteProdutoRepository.PesquisarProdutoNoLote(IdEmpresa, viewModel.NroLote.Value, viewModel.IdProduto); if (loteProduto == null) { return(Json(new AjaxGenericResultModel { Success = false, Message = "Não foi possível consultar o saldo do lote. Por favor, tente nvoamente!" })); } var quantidadeTotalProduto = viewModel.QtdCaixas * viewModel.QtdPorCaixa; //Verifica se o saldo do produto no lote é menor que a quantidade informada. if (loteProduto.Saldo < quantidadeTotalProduto) { return(Json(new AjaxGenericResultModel { Success = false, Message = "O saldo do produto no lote é menor que a quantidade informada. Por favor, tente novamente!" })); } var produto = _unitOfWork.ProdutoRepository.GetById(viewModel.IdProduto); var request = new ImprimirEtiquetaArmazenagemVolume { NroLote = viewModel.NroLote.GetValueOrDefault(), QuantidadeEtiquetas = viewModel.QtdCaixas.GetValueOrDefault(), QuantidadePorCaixa = viewModel.QtdPorCaixa.GetValueOrDefault(), ReferenciaProduto = produto.Referencia, Usuario = _unitOfWork.PerfilUsuarioRepository.GetByUserId(User.Identity.GetUserId())?.Nome, IdImpressora = viewModel.IdImpressora.GetValueOrDefault(), IdEmpresa = IdEmpresa }; _etiquetaService.ImprimirEtiquetaArmazenagemVolume(request); // Lote: a quantidade salva é a quantidade de caixas/volume do lote. var logEtiquetagem = new LogEtiquetagem { //IdTipoEtiquetagem = viewModel.TipoEtiquetagem, IdTipoEtiquetagem = Data.Models.TipoEtiquetagemEnum.Lote.GetHashCode(), IdEmpresa = IdEmpresa, Quantidade = viewModel.QtdCaixas.Value, IdUsuario = User.Identity.GetUserId() }; _logEtiquetagemService.Registrar(logEtiquetagem); return(Json(new AjaxGenericResultModel { Success = true, Message = "Impressão enviada com sucesso." }, JsonRequestBehavior.AllowGet)); } catch (Exception ex) { _log.Error(ex.Message, ex); return(Json(new AjaxGenericResultModel { Success = false, Message = "Ocorreu um erro na impressão." }, JsonRequestBehavior.AllowGet)); } }