예제 #1
0
파일: Bobina.cs 프로젝트: njmube/openposbr
        /// <summary>
        /// Subtotaliza o cupom fiscal
        /// </summary>
        /// <param name="venda">Instancia corrente da venda </param>
        public void SubTotaliza(IMovimento venda)
        {
            double totalVenda = Math.Round(venda.ValorTotalLiquido, 2);
            string line = string.Empty;
            double totalDescontoItem = 0.0;
            double totalAcrescimoItem = 0.0;
            double totalDescontoAcresc = 0.0;

            if (Unimake.Convert.ToBoolean(Settings.Setting.EmissaoConsumidorFinalNFCe) &&
                (StatusImpressao == BobinaStatusImpressao.Subtotaliza ||
                StatusImpressao == BobinaStatusImpressao.FormaPagamento))
                return;

            //Se possuir desconto ou acréscimo temos que subtotalizá-lo
            if (venda.ValorTotalAcrescimo > 0 || venda.ValorTotalDesconto > 0)
            {
                //Separar o valor dos descontos dos acréscimos
                foreach (Model.Faturamento.Lancamento.Movimento.Item.IItem item in venda.Itens)
                {
                    if (venda.ValorTotalDesconto > 0)
                        totalDescontoItem += item.ValorTotalDesconto * item.Quantidade;
                    else if (venda.ValorTotalAcrescimo > 0)
                        totalAcrescimoItem += item.ValorTotalAcrescimo * item.Quantidade;
                }

                //Cálculo para determinar se irá ser aplicado o desconto ou acréscimo no subtotal
                totalDescontoAcresc = (venda.ValorTotalAcrescimo - totalAcrescimoItem) - (venda.ValorTotalDesconto - totalDescontoItem);
                line = "SUBTOTAL R${0}{1:N2}";
                WriteLine(line, "".PadLeft((MaxLengthLine - 18 - totalVenda.ToString().Length)), totalDescontoAcresc);

                if (totalDescontoAcresc > 0)
                {
                    line = "(+) ACRESCIMO R${0}{1:N2}";
                    WriteLine(line, "".PadLeft((MaxLengthLine - 18 - totalVenda.ToString().Length)), totalDescontoAcresc);
                }
                else if (totalDescontoAcresc < 0)
                {
                    line = "(-) DESCONTO R${0}{1:N2}";
                    WriteLine(line, "".PadLeft((MaxLengthLine - 18 - totalVenda.ToString().Length)), totalDescontoAcresc);
                }
            }

            line = "TOTAL R${0}{1:N2}";
            WriteLine(line, "".PadLeft(MaxLengthLine - 11 - totalVenda.ToString().Length), totalVenda - totalDescontoAcresc);

            StatusImpressao = BobinaStatusImpressao.Subtotaliza;
        }
예제 #2
0
파일: Bobina.cs 프로젝트: njmube/openposbr
        /// <summary>
        /// Método para impressão dos pagamentos no cupom fiscal e atualização na bobina 
        /// </summary>
        /// <param name="venda">Instancia da venda </param>
        /// <param name="totalDinheiro">Total do pagamento </param>
        /// <param name="forma">Forma de pagamento com os dados da impressora como índice, etc.
        /// Observação: se não for informado nenhuma forma é utilizado a forma de pagamento DINHEIRO
        /// </param>
        public void ImprimePagamento(IMovimento venda, double totalDinheiro, IFormaPagamento forma = null)
        {
            string line = string.Empty;
            double troco = Math.Round(venda.Baixa.Formas.Where(k => k.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.Dinheiro ||
               k.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.Voucher)
               .Sum(k => k.ValorLiquido) - venda.ValorTotalLiquido, 2);
            double totalVenda = Math.Round(venda.ValorTotalLiquido, 2);

            if (StatusImpressao != BobinaStatusImpressao.Subtotaliza)
                return;

            if (forma == null)
                line = "DINHEIRO R${0}{1:N2}";
            else
            {
                switch (forma.TipoForma)
                {
                    case Enuns.Cadastro.TipoForma.CartaoCredito:
                    case Enuns.Cadastro.TipoForma.CartaoDebito:
                    case Enuns.Cadastro.TipoForma.CartaoPrivateLabel:
                        line = "CARTÃO   R${0}{1:N2}";
                        break;
                    case Enuns.Cadastro.TipoForma.Cheque:
                        line = "CHEQUE   R${0}{1:N2}";
                        break;
                    case Enuns.Cadastro.TipoForma.ConfirmacaoPreAutorizacao:
                    case Enuns.Cadastro.TipoForma.CreditoConsumidor:
                        line = "CDC R${0}{1:N2}";
                        break;
                    case Enuns.Cadastro.TipoForma.Dinheiro:
                        line = "DINHEIRO R${0}{1:N2}";
                        break;
                    case Enuns.Cadastro.TipoForma.Voucher:
                        line = "VOUCHER R${0}{1:N2}";
                        break;
                    case Enuns.Cadastro.TipoForma.Parcelado:
                        line = "PARCELADO R${0}{1:N2}";
                        break;
                }
            }

            if (troco > 0 &&
                !ImpressoTroco)
            {
                WriteLine(line, "".PadLeft(MaxLengthLine - 14 - totalDinheiro.ToString().Length), totalDinheiro);
                line = "TROCO R${0}{1:N2}";
                WriteLine(line, "".PadLeft(MaxLengthLine - 11 - troco.ToString().Length), troco);
                ImpressoTroco = true;
            }
            else
            {
                WriteLine(line, "".PadLeft(MaxLengthLine - 14 - totalDinheiro.ToString().Length), totalDinheiro);
            }

            StatusImpressao = BobinaStatusImpressao.FormaPagamento;
        }
예제 #3
0
파일: Bobina.cs 프로젝트: njmube/openposbr
        /// <summary>
        /// Imprime o item na impressora e na tela
        /// </summary>
        /// <param name="item">item do movimento</param>
        /// <param name="itemNumero">número do item</param>
        public void ImprimirItem(IItem item, int itemNumero, bool imprimeItemECF = true)
        {
            #region buffer
            if (!fromBuffer)
            {
                buffer.Add(new BufferItem
                    {
                        VendeItem = new VendeItemArgs
                        {
                            Item = item,
                            ItemNumero = itemNumero,
                            ImprimeItemECF = imprimeItemECF
                        }
                    });
            }
            #endregion

            LastIndex = itemNumero - 1;

            string line = String.Format("{0} {1} {2}",
                itemNumero.ToString().PadLeft(3, '0'),
                item.ItemMovimentado.EGUID,
                item.ItemMovimentado.Descricao);

            WriteLine(line);

            string subtotal = (item.Quantidade * item.ValorUnitarioBruto).ToString("N2");
            line = String.Format("    {0:N2}{1} X {2:N2}     F1",
                item.Quantidade,
                 "UN",
                item.ValorUnitarioBruto);

            line = line.PadRight(MaxLengthLine - subtotal.Length, '_') + subtotal;

            if ((fromBuffer || Settings.ECF.Concomitante) && imprimeItemECF)
            {
                using (ICupomFiscal c = new CupomFiscal(Unimake.Convert.ToEnum<ModeloECF>(Settings.ECF.ECFAtual.ModeloACBR), Settings.ECF.ECFAtual.Porta))
                {

                    IVendaCF venda = item.Parent as IVendaCF;
                    if (venda != null)
                    {
                        venda.NumeroSerieECF = c.NumeroSerie;
                        venda.NumeroOrdemECF = Unimake.Convert.ToInt(c.NumeroECF);
                        venda.COO = c.COO;
                        venda.COOFinal = 0; // Todo: o valor do coo final será atualizado posteriormente pela emissão da redução z
                        venda.CRO = c.CRO;
                        venda.CCF = c.CCF;
                        venda.CRZ = c.CRZ;
                        venda.ValorGrandeTotalECF = c.GrandeTotal;
                    }
                    Model.Faturamento.Lancamento.Movimento.Item.VendaCF.IItem i = (Model.Faturamento.Lancamento.Movimento.Item.VendaCF.IItem)item;
                    i.COO = c.COO;
                    i.Ordem = itemNumero;

                    c.VendeItem(item.ItemMovimentado.EGUID, item.ItemMovimentado.Descricao, i.SituacaoTributaria.ToString(), Unimake.Convert.ToDecimal(item.Quantidade), Unimake.Convert.ToDecimal(item.ValorUnitarioBruto),
                        0.0M, item.Unidade.Descricao, "%", "D", -1);

                    WriteLine(line);

                    //Descontos nos itens dos movimentos vinculados, tais como, DAV, DAV-OS, Pré-Venda, etc.
                    if (item.ValorTotalDesconto > 0 || item.ValorTotalAcrescimo > 0)
                    {
                        decimal vlrDescAcresc = item.ValorTotalDesconto > 0 ? Unimake.Convert.ToDecimal(item.ValorTotalDesconto * item.Quantidade) : Unimake.Convert.ToDecimal(item.ValorTotalAcrescimo * item.Quantidade);
                        string descAcresc = item.ValorTotalDesconto > 0 ? "D" : "A";
                        int numeroItem = item.Ordem;

                        using (ICupomFiscal cf = new CupomFiscal(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta))
                            cf.DescontoAcrescimoItemAnterior(vlrDescAcresc, descAcresc, "$", numeroItem);

                        if (descAcresc.Equals("D"))
                            line = "(-) DESCONTO ITEM {0} R${1}{2:N2}";
                        else
                            line = "(+) ACRÉSCIMO ITEM {0} R${1}{2:N2}";

                        WriteLine(line, (venda.Itens.Count).ToString("D3"), "".PadLeft((MaxLengthLine - 27 -
                                venda.ValorTotalLiquido.ToString().Length)), vlrDescAcresc);
                    }
                }
            }

            StatusImpressao = BobinaStatusImpressao.ItemImpresso;
        }
예제 #4
0
파일: Bobina.cs 프로젝트: njmube/openposbr
        public void ImprimeItem(IItem item)
        {
            IMovimento movimento = item.Parent;

            LastIndex = movimento.Itens
                .Where(k => k.Status == 0)
                .Count();

            string line = String.Format("{0} {1} {2}",
                LastIndex.ToString().PadLeft(3, '0'),
                item.ItemMovimentado.EGUID,
                item.ItemMovimentado.Descricao);

            WriteLine(line);

            string subtotal = (item.Quantidade * item.ValorUnitarioBruto).ToString("N2");
            line = String.Format("    {0:N2}{1} X {2:N2}     F1",
                item.Quantidade,
                 "UN",
                item.ValorUnitarioBruto);

            line = line.PadRight(MaxLengthLine - subtotal.Length, '_') + subtotal;
            WriteLine(line);

            if (item.ValorTotalDesconto > 0 || item.ValorTotalAcrescimo > 0)
            {
                decimal vlrDescAcresc = item.ValorTotalDesconto > 0 ? Unimake.Convert.ToDecimal(item.ValorTotalDesconto * item.Quantidade) : Unimake.Convert.ToDecimal(item.ValorTotalAcrescimo * item.Quantidade);
                string descAcresc = item.ValorTotalDesconto > 0 ? "D" : "A";
                int numeroItem = item.Ordem;

                if (descAcresc.Equals("D"))
                    line = "(-) DESCONTO ITEM {0} R${1}{2:N2}";
                else
                    line = "(+) ACRÉSCIMO ITEM {0} R${1}{2:N2}";

                WriteLine(line, (movimento.Itens.Count).ToString("D3"), "".PadLeft((MaxLengthLine - 27 -
                        movimento.ValorTotalLiquido.ToString().Length)), vlrDescAcresc);
            }

            StatusImpressao = BobinaStatusImpressao.ItemImpresso;
        }
예제 #5
0
파일: Bobina.cs 프로젝트: njmube/openposbr
        public void FechaCupom()
        {
            MD5 md = new MD5("Bobina OpenPOS", Unimake.Convert.ToInt(Settings.Setting.PasswordMD5Loop), Unimake.Convert.ToBoolean(Settings.Setting.PasswordMD5UseKey) ? "123" : "");

            DrawLine();
            WriteLine("MD-5:{0}", md.Hash);

            WriteLine("OpenPOS");
            WriteLine("VERSÃO {0}", Application.ProductVersion);
            WriteLine("QQQQQQQQQQQWQQQQQTEI {0}", DateTime.Now);
            WriteLine("BR".PadLeft(MaxLengthLine));

            StatusImpressao = BobinaStatusImpressao.CupomFechado;

            DrawLine();
            WriteLine("{0} ", "            Obrigado - Volte sempre!");
        }
예제 #6
0
파일: Bobina.cs 프로젝트: njmube/openposbr
        /// <summary>
        /// Finaliza o cupom na bobina
        /// </summary>
        /// <param name="venda">Venda efetuada</param>
        /// <param name="totalDinheiro">total de dinheiro informado</param>
        public void FechaCupom(IVendaCF venda, double totalDinheiro)
        {
            #region Variáveis locais
            string ECFRodapePersonalizado = "";
            double troco = Math.Round(totalDinheiro - venda.ValorTotalLiquido, 2);
            double totalVenda = Math.Round(venda.ValorTotalLiquido, 2);
            totalDinheiro = Math.Round(totalDinheiro, 2);
            IsErrorFechamentoCupom = false;
            string modeloecf = string.Empty;
            string marcaecf = string.Empty;
            string versaoecf = string.Empty;
            string numecf = string.Empty;
            double impostoAprox = 0;
            double percImpostoAprox = 0;
            string[] linhasRodape = new string[7];
            string tipoMovimento = string.Empty;
            string codigoMovimento = string.Empty;
            #endregion

            ImpressoTroco = false;
            impostoAprox = venda.ValorTotalImpostoAproximado;
            percImpostoAprox = venda.PercentualTotalImpostoAproximado;
            #if IsPAF
            //TODO André: Comentado as linhas referente ao manejo do arquivo auxiliar. Para o pessoal do suporte poder testar o OpenPOS sem travar.
            IArquivoAuxiliar arqAux = new ArquivoAuxiliar();
            #endif

            #region Fechamento do Cupom Fiscal

            using (ICupomFiscal c = new CupomFiscal(Unimake.Convert.ToEnum<ModeloECF>(Settings.ECF.ECFAtual.ModeloACBR), Settings.ECF.ECFAtual.Porta))
            {
                venda.NumeroSerieECF = c.NumeroSerie;
                venda.NumeroOrdemECF = Unimake.Convert.ToInt(c.NumeroECF);
                venda.COO = c.COO;
                venda.COOFinal = 0; // Todo: o valor do coo final será atualizado posteriormente pela emissão da redução z
                venda.CRO = c.CRO;
                venda.CCF = c.CCF;
                venda.CRZ = c.CRZ;
                venda.ValorGrandeTotalECF = c.GrandeTotal;
            #if IsPAF
                //Atualizar o valor do grande total do ECF no arquivo auxiliar
                arqAux.GrandeTotal = c.GrandeTotal.ToString();
                arqAux.NumeroSerie = c.NumeroSerie.ToString();
                arqAux.Gerar();
            #endif
                //Faz a impressão do rodapé do cupom fiscal de maneira personalizada
                if (Settings.PAF.UsaInformacoesRodapeMD5)
                {
                    Model.Cadastro.Pessoa.IEndereco endereco = Settings.EmpresaAtual.Enderecos.First(i => i.Principal);
                    c.Rodape.MD5 = OpenPOS.Cryptography.Files.MD5.GetMD5Hash(OpenPOS.Cryptography.Files.MD5.FromExe());

            #if IsPAF
                    if (endereco != null)
                        switch (Settings.EmpresaAtual.Enderecos.First(i => i.Principal).Endereco.Estado.UF.Sigla.ToString())
                        {
                            case "PB":
                                c.Rodape.ParaibaLegal = true;
                                break;
                            case "DF":
                                c.Rodape.NotaLegalDF.Imprimir = true;
                                //Todo Luciano: Quando desenvolvido a parte tributaria informar o valor dos tributos dos itens
                                c.Rodape.NotaLegalDF.ValorICMS = 0.0M;
                                c.Rodape.NotaLegalDF.ValorISS = 0.0M;
                                break;
                            case "MG":
                                c.Rodape.MinasLegal = true;
                                break;
                            case "RJ":
                                c.Rodape.CupomMania = true;
                                break;
                        }
            #endif
                    //De acordo com o movimento vinculado, sabemos qual é o tipo: Pré-venda, DAV, DAVO-OS
                    if (venda.MovimentosVinculados.FirstOrDefault() != null)
                    {
                        switch (venda.MovimentosVinculados.FirstOrDefault().Tipo)
                        {
                            case Tipo.DAV:
                                tipoMovimento = "DAV";
                                codigoMovimento = venda.MovimentosVinculados.FirstOrDefault().EGUID.ToString();
                                break;
                            case Tipo.DAVOS:
                                tipoMovimento = "DAV-OS";
                                codigoMovimento = venda.MovimentosVinculados.FirstOrDefault().EGUID.ToString();
                                break;
                            case Tipo.PreVenda:
                                tipoMovimento = "PV";
                                codigoMovimento = venda.MovimentosVinculados.FirstOrDefault().EGUID.ToString();
                                break;
                            case Tipo.NotaFiscalManual:
                                tipoMovimento = "NF";
                                codigoMovimento = venda.MovimentosVinculados.FirstOrDefault().EGUID;
                                break;
                            case Tipo.NotaFiscalEletronica:
                            case Tipo.CupomFiscal:
                            case Tipo.Sangria:
                            case Tipo.Suprimento:
                            case Tipo.Recebimento:
                            case Tipo.LancamentoGeral:
                            case Tipo.ContasPagar:
                            case Tipo.ContasReceber:
                            default:
                                tipoMovimento = string.Empty;
                                break;
                        }
                    }

                    MD5 md = new MD5("Bobina OpenPOS", Unimake.Convert.ToInt(Settings.Setting.PasswordMD5Loop), Unimake.Convert.ToBoolean(Settings.Setting.PasswordMD5UseKey) ? "123" : "");

                    // Prepara as informações antes de imprimir as linhas
                    linhasRodape = Settings.ECF.PreparaRodapeCupom(venda, md);

                    //Conteúdo que será impresso no rodapé do cupom fiscal do ECF
                    ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha1.Trim()) ? "" : linhasRodape[0].Trim() + "\n";
                    ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha2.Trim()) ? "" : linhasRodape[1].Trim() + "\n";
                    ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha3.Trim()) ? "" : linhasRodape[2].Trim() + "\n";
                    ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha4.Trim()) ? "" : linhasRodape[3].Trim() + "\n";
                    ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha5.Trim()) ? "" : linhasRodape[4].Trim() + "\n";
                    ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha6.Trim()) ? "" : linhasRodape[5].Trim() + "\n";
                    ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha7.Trim()) ? "" : linhasRodape[6].Trim();

                    //Conteúdo que será impresso no rodapé do cupom fiscal na Bobina
                    WriteLine("MD-5:{0}", md.Hash);

                    for (int i = 0; i < linhasRodape.Length; i++)
                    {
                        linhasRodape[i] = linhasRodape[i].Trim();

                        if (!String.IsNullOrEmpty(linhasRodape[i]))
                            WriteLine("{0}", linhasRodape[i]);
                    }

                    Settings.ECF.PopulateECFRodape();
                }
                else
                    WriteLine("Obrigado! Volte Sempre.");

                modeloecf = c.SubModeloECF.ToString();
                marcaecf = c.Modelo.ToString();
                versaoecf = c.NumeroVersao;
                numecf = c.NumeroECF;

                DrawLine();
                WriteLine("{0} {1}", marcaecf, modeloecf);
                WriteLine("VERSÃO:{0} ECF:{1} LJ:{2}", versaoecf, numecf, venda.Empresa.EGUID);
                string serieECF = String.Format("FAB:{0}", venda.NumeroSerieECF);
                WriteLine(serieECF + " BR".PadLeft(25));

                if (!Settings.PAF.UsaInformacoesRodapeMD5)
                    ECFRodapePersonalizado = string.Empty;

                c.FechaCupom(ECFRodapePersonalizado);

                venda.Status = Status.ImpressoCupom;
                venda.SaveTemp();

            }
            #endregion

            #region Impressão das parcelas
            if (venda.Parcelas.Count > 0)
            {
                if (Unimake.Convert.ToBoolean(Settings.Setting.ImprimirViasParcelamento))
                {
                    //-------------------------------------------------------------------------
                    // Imprimir a primeira via, esta via é do estabelecimento
                    //-------------------------------------------------------------------------
                    ImprimeParcela(venda, "--- VIA DO ESTABELECIMENTO ---");
                    //-------------------------------------------------------------------------
                    // Imprimir a segunda via, esta via é do cliente
                    //-------------------------------------------------------------------------
                    ImprimeParcela(venda, "--- VIA DO CLIENTE ---");
                }
                else if (Unimake.Convert.ToBoolean(Settings.Setting.ImprimirViaClienteParcelamento))
                {
                    //-------------------------------------------------------------------------
                    // Imprimir a segunda via, esta via é do cliente
                    //-------------------------------------------------------------------------
                    ImprimeParcela(venda, "--- VIA DO CLIENTE ---");
                }
                else if (Unimake.Convert.ToBoolean(Settings.Setting.ImprimirViaEstabelecimentoParcelamento))
                {
                    //-------------------------------------------------------------------------
                    // Imprimir a primeira via, esta via é do estabelecimento
                    //-------------------------------------------------------------------------
                    ImprimeParcela(venda, "--- VIA DO ESTABELECIMENTO ---");
                }

            }
            #endregion

            StatusImpressao = BobinaStatusImpressao.CupomFechado;
            buffer.Clear();
        }
예제 #7
0
파일: Bobina.cs 프로젝트: njmube/openposbr
        /// <summary>
        /// Faz a impressão do cancelamento na bobina
        /// </summary>
        public void CancelarCupom()
        {
            string ECFRodapePersonalizado = "";

            MD5 md = new MD5("Bobina OpenPOS", Unimake.Convert.ToInt(Settings.Setting.PasswordMD5Loop), Unimake.Convert.ToBoolean(Settings.Setting.PasswordMD5UseKey) ? "123" : "");

            WriteLine("-----------------      CANCELADO       -----------------");
            DrawLine();
            WriteLine("MD-5:{0}", md.Hash);

            if (Settings.PAF.UsaInformacoesRodapeMD5)
            {
                ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha1) ? "" : Settings.ECF.ConfiguracaoRodape.Linha1 + "\n";
                ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha2) ? "" : Settings.ECF.ConfiguracaoRodape.Linha2 + "\n";
                ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha3) ? "" : Settings.ECF.ConfiguracaoRodape.Linha3 + "\n";
                ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha4) ? "" : Settings.ECF.ConfiguracaoRodape.Linha4 + "\n";
                ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha5) ? "" : Settings.ECF.ConfiguracaoRodape.Linha5 + "\n";
                ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha6) ? "" : Settings.ECF.ConfiguracaoRodape.Linha6 + "\n";
                ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha7) ? "" : Settings.ECF.ConfiguracaoRodape.Linha7 + "\n";

                WriteLine(Settings.ECF.ConfiguracaoRodape.Linha1);
                WriteLine(Settings.ECF.ConfiguracaoRodape.Linha2);
                WriteLine(Settings.ECF.ConfiguracaoRodape.Linha3);
                WriteLine(Settings.ECF.ConfiguracaoRodape.Linha4);
                WriteLine(Settings.ECF.ConfiguracaoRodape.Linha5);
                WriteLine(Settings.ECF.ConfiguracaoRodape.Linha6);
                WriteLine(Settings.ECF.ConfiguracaoRodape.Linha7);
            }

            WriteLine("OpenPOS");
            WriteLine("VERSÃO {0}", Application.ProductVersion);
            WriteLine("QQQQQQQQQQQWQQQQQTEI {0}", DateTime.Now);
            WriteLine("BR".PadLeft(MaxLengthLine));

            StatusImpressao = BobinaStatusImpressao.CupomCancelado;
        }
예제 #8
0
파일: Bobina.cs 프로젝트: njmube/openposbr
        /// <summary>
        /// Simula a impressão de uma abertura de cupom.
        /// </summary>
        /// <param name="cpf_cnpj">Número de CPF e CNPJ do cliente</param>
        /// <param name="abreCupomECF">se true, abre o cupom na ECF</param>
        /// ´<param name="pessoa">Pessoa relacionada ao cupom, pode ser informado apenas o CPF/CNPJ no parâmetro cpf_cnpj</param>
        public virtual void AbreVenda(string cpf_cnpj = "", IDadoPessoa pessoa = null, bool abreCupomECF = true)
        {
            ICupomFiscal cf = null;

            #region Buffer
            if (!fromBuffer)
            {
                buffer = new List<BufferItem>();
                buffer.Add(new BufferItem
                {
                    AbreCupom = new AbreCupomArgs
                    {
                        AbreCupomECF = abreCupomECF,
                        CPF_CNPJ = cpf_cnpj,
                        Pessoa = pessoa
                    }
                });
            }

            #endregion
            #if IsPAF
            //TODO André: Comentado as linhas referente ao manejo do arquivo auxiliar. Para o pessoal do suporte poder testar o OpenPOS sem travar.

            IArquivoAuxiliar arqAux = new ArquivoAuxiliar();
            #endif
            OpenPOS.Model.Cadastro.Endereco.IEndereco endereco = null;
            endereco = Settings.EmpresaAtual.Enderecos[0].Endereco;

            string numero = Settings.EmpresaAtual.Enderecos[0].Numero;

            ICanalComunicacao canalcomunicacao = null;
            canalcomunicacao = Settings.EmpresaAtual.CanaisComunicacao[0];

            string nome = string.Empty;
            string ccf = string.Empty;
            string coo = string.Empty;
            string enderecoPessoa = string.Empty;

            //Todo: Implementar os dados do cliente no cupom
            if (pessoa != null)
            {
                nome = pessoa.NomeFantasia;
                enderecoPessoa = pessoa.Cliente.Enderecos.Count == 0 ? "" : pessoa.Cliente.Enderecos.FirstOrDefault().Endereco.Endereco;

                if (pessoa.Cliente.FisicaJuridica == Enuns.Cadastro.Pessoa.FisicaJuridica.Fisica)
                    cpf_cnpj = Unimake.Format.CPF(cpf_cnpj);
                else if (pessoa.Cliente.FisicaJuridica == Enuns.Cadastro.Pessoa.FisicaJuridica.Juridica)
                    cpf_cnpj = Unimake.Format.CNPJ(cpf_cnpj);

                if (String.IsNullOrEmpty(cpf_cnpj))
                    cpf_cnpj = pessoa.Cliente.GetCPFCNPJ();
            }

            #region impressora
            if (abreCupomECF)
            {
                cf = new CupomFiscal(Unimake.Convert.ToEnum<ModeloECF>(Settings.ECF.ECFAtual.ModeloACBR), Settings.ECF.ECFAtual.Porta);
                if ((fromBuffer || Settings.ECF.Concomitante) && abreCupomECF)
                {
                    using (cf)
                    {
            #if IsPAF
                    arqAux.Carregar();
                    if (!arqAux.NumeroFabricacaoEquals())
                    {
                        throw new OpenPOS.Exceptions.Faturamento.Lancamento.Movimento.ArquivoAuxiliarInvalido();
                    }
                    ////Comparar o valor do grande total do ECF com o valor do grande total do arquivo auxiliar, se estiverem iguais permitir o faturamento de um cupom fiscal.
                    ////É feito o mesmo tratamento para o número de fabricação do ECF
                    if ((cf.Estado != EstadoECF.Livre) ||
                       !arqAux.PermiteFaturamento(cf.GrandeTotal))
                    {
                        //TODO André: Essa parte do código só vai ser executado quando por algum motivo ocorreu a perda
                        //acidentalmente dos dados do
                        //arquivo auxiliar criptografado, onde será reconstituído o valor do Grande Total e Número de Série do Equipamento Emissor de Cupom Fiscal conectado
                        //Requisito XXIV - item 8

                        using (IInformacao info = new Informacao(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta))
                        {
                            DadosReducaoZClass dadosReducao = info.DadosReducaoZ;
                            if (arqAux.RecomporTotalizadorGeral(info.CRZ,info.CRO,dadosReducao.ValorVendaBruta,dadosReducao.DataHoraEmissao))
                                arqAux.CorrigeDados(cf.GrandeTotal);
                            else
                            {
                                MessageBox.ShowWarning("Não é permitido o faturamento na impressora fiscal, pois os dados do Grande Total ou Número de série, diferem dos que estão no arquivo auxiliar criptografado!");
                                BloquearVenda = true;
                                return;
                            }
                        }
                    }
            #else
                        if ((cf.Estado != EstadoECF.Livre))
                        {
                            MessageBox.ShowWarning("Não é permitido o faturamento na impressora!");
                            return;
                        }
            #endif
                        cf.AbreCupom(cpf_cnpj, nome, endereco.Logradouro.ToString(), false);

                        BloquearVenda = false;
                        ccf = Unimake.Convert.ToString(cf.CCF);
                        coo = Unimake.Convert.ToString(cf.COO);
                    }
                }
            }
            #endregion

            #region bobina
            Clear();
            WriteLine("{0} {1}-{2}", Settings.EmpresaAtual.NomeFantasia.ToUpper(),
                Unimake.Convert.ToString(endereco.Cidade).ToUpper(),
                endereco.Estado.UF.Sigla.ToUpper());
            WriteLine("{0} {1}, {2} FONE:{3} ", Unimake.Convert.ToString(endereco.Endereco).ToUpper(),
                                                numero.ToString(),
                                                Unimake.Convert.ToString(endereco.Bairro).ToUpper(),
                                                (Telefone)canalcomunicacao.IdentificadorCanal.ToString());
            WriteLine("CNPJ: {0}", Unimake.Format.CNPJ(Settings.EmpresaAtual.Juridica.CNPJ));
            WriteLine("IE: {0}", Settings.EmpresaAtual.Juridica.IE);
            WriteLine("IM: {0}", Settings.EmpresaAtual.Juridica.IM);
            DrawLine();
            if (abreCupomECF)
                WriteLine("{0} CCF: {1} COO: {2}", cf.DataHora, ccf.Trim().PadLeft(6, '0'), coo.Trim().PadLeft(6, '0'));
            WriteLine("CNPJ/CPF consumidor:{0}", cpf_cnpj);
            WriteLine("NOME: {0}", nome);
            WriteLine("END: {0}", Unimake.Convert.ToString(enderecoPessoa).ToUpper());
            WriteLine(Unimake.Convert.ToBoolean(Settings.Setting.EmissaoConsumidorFinalNFCe) ?
              "         NOTA FISCAL AO CONSUMIDOR ELETRÔNICA"
             : "                     CUPOM FISCAL");

            DrawLine();
            WriteLine("ITEM CÓDIGO DESCRIÇÃO QTD.UN.VL UNIT(R$) ST VL ITEM(R$)");
            DrawLine();

            StatusImpressao = BobinaStatusImpressao.CupomAberto;

            #endregion
        }