Esempio n. 1
0
        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));
            }
        }