示例#1
0
        /// <summary>
        /// Inicia um novo cupom
        /// </summary>
        private void NovoCupom()
        {
            this.ClearControls();
            frmNovoCupom f = new frmNovoCupom();
            f.ShowDialog();
            Bobina.AbreCupom(f.CPF_CNPJ);
            venda = new Data.Faturamento.Lancamento.Movimento.VendaCF.VendaCF();

            f.Close();
            f.Dispose();
        }
示例#2
0
 public Pagamento(IECF ecf, IVendaCF venda)
     : base(ecf)
 {
     CurrentVendaCF = venda;
 }
示例#3
0
 /// <summary>
 /// Imprime desconto item na bobina
 /// </summary>
 /// <param name="venda">Venda corrente</param>
 /// <param name="vlrDescAcresc">Valor a ser impresso como desconto</param>
 public void ImprimeDescontoItem(IVendaCF venda, double vlrDescAcresc)
 {
     double totalVenda = Math.Round(venda.ValorTotalLiquido, 2);
     string line = "(-) DESCONTO ITEM {0} R${1}{2:N2}";
     WriteLine(line, (venda.Itens.Count).ToString("D3"), "".PadLeft((MaxLengthLine - 27 -
                     totalVenda.ToString().Length)), vlrDescAcresc);
 }
示例#4
0
        /// <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();
        }
示例#5
0
        /// <summary>
        /// Imprime as parcelas do faturamento
        /// </summary>
        /// <param name="venda">Venda que contem as parcelas</param>
        private void ImprimeParcela(IVendaCF venda, string mensagem = "")
        {
            using (IRelatorioGerencial rel = new OpenPOS.ECF.RelatorioGerencial(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta))
            {
                string modeloecf = rel.SubModeloECF.ToString();
                string marcaecf = rel.Modelo.ToString();
                string versaoecf = rel.NumeroVersao;
                string numecf = rel.NumeroECF;

                rel.AbreRelatorioGerencial();
                WriteLine(string.Empty);
                WriteLine(string.Empty);
                WriteLine("{0} {1}", marcaecf, modeloecf);
                WriteLine(Settings.EmpresaAtual.NomeFantasia);
                WriteLine(string.Format("{0}, {1}", Settings.EmpresaAtual.Enderecos[0].Endereco.Logradouro, Settings.EmpresaAtual.Enderecos[0].Numero));
                WriteLine("CEP: {0} {1} {2}", Settings.EmpresaAtual.Enderecos[0].Endereco.CEP, Settings.EmpresaAtual.Enderecos[0].Endereco.Cidade, Settings.EmpresaAtual.Enderecos[0].Endereco.Estado);
                WriteLine("CNPJ: {0}", Settings.EmpresaAtual.Juridica.CNPJ);
                WriteLine("IE: {0}", Settings.EmpresaAtual.Juridica.IE);
                DrawLine();
                WriteLine("{0:dd/mm/yyyy} {0:hh:mm:ss} GNF: {1} COO: {2}", rel.DataHora, rel.GNF.ToString().PadLeft(6, '0'), rel.COO.ToString().PadLeft(6, '0'));
                WriteLine("         NÃO É UM DOCUMENTO FISCAL");
                WriteLine("             RELATÓRIO GERENCIAL");

                rel.LinhaRelatorioGerencial(string.Format("REFERENTE AO CUPOM FISCAL NÚMERO: {0}", venda.COO.ToString().PadLeft(6, '0')));
                WriteLine(string.Format("REFERENTE AO CUPOM FISCAL NÚMERO: {0}", venda.COO.ToString().PadLeft(6, '0')));

                rel.LinhaRelatorioGerencial(string.Format("{0}", venda.DadoPessoa.Cliente.NomeFantasia));
                WriteLine(string.Format("{0}", venda.DadoPessoa.Cliente.NomeFantasia));

                rel.LinhaRelatorioGerencial(string.Format("DT EMI: {0:dd/MM/yyyy} DT COMPRA: {1:dd/MM/yyyy}", venda.DataEmissao, venda.DataHoraMovimento));
                WriteLine(string.Format("DT EMI: {0:dd/MM/yyyy} DT COMPRA: {1:dd/MM/yyyy}", venda.DataEmissao, venda.DataHoraMovimento));

                rel.LinhaRelatorioGerencial(string.Format("VALOR DA COMPRA: R$ {0:N2}", venda.ValorTotalLiquido));
                WriteLine(string.Format("VALOR DA COMPRA: R$ {0:N2}", venda.ValorTotalLiquido));

                rel.LinhaRelatorioGerencial(string.Format("+--------------------------------------+"));
                WriteLine(string.Format("+--------------------------------------+"));

                rel.LinhaRelatorioGerencial(string.Format("                PARCELAS                "));
                WriteLine(string.Format("                PARCELAS                "));

                rel.LinhaRelatorioGerencial(string.Format("+--------------------------------------+"));
                WriteLine(string.Format("+--------------------------------------+"));

                rel.LinhaRelatorioGerencial(string.Format("PARCELA        DT DO VECTO         VALOR"));
                WriteLine(string.Format("PARCELA        DT DO VECTO         VALOR"));

                rel.LinhaRelatorioGerencial(string.Format("+--------------------------------------+"));
                WriteLine(string.Format("+--------------------------------------+"));

                foreach (Model.Financeiro.Lancamento.IParcela item in venda.Parcelas)
                {
                    rel.LinhaRelatorioGerencial(string.Format("{0} {1:dd/MM/yyyy} {2,14:0.00}", item.Parcela.ToString().PadLeft(2, '0').PadRight(14), item.DataVencimento, Unimake.Format.Currency(item.Valor)));
                    WriteLine(string.Format("{0} {1:dd/MM/yyyy} {2,14:0.00}", item.Parcela.ToString().PadLeft(2, '0').PadRight(14), item.DataVencimento, Unimake.Format.Currency(item.Valor)));

                    rel.LinhaRelatorioGerencial(string.Format("+--------------------------------------+"));
                    WriteLine(string.Format("+--------------------------------------+"));
                }

                rel.LinhaRelatorioGerencial("");
                WriteLine("");
                rel.LinhaRelatorioGerencial("________________________________________");
                WriteLine("________________________________________");
                rel.LinhaRelatorioGerencial("               Assinatura               ");
                WriteLine("               Assinatura               ");

                if (!String.IsNullOrEmpty(mensagem))
                {
                    rel.LinhaRelatorioGerencial(mensagem);
                    WriteLine(mensagem);
                }

                rel.FechaRelatorio(Enuns.ECF.TipoOutrosDocumentos.RG);

                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));
            }
        }
示例#6
0
            /// <summary>
            /// Ajusta as Linhas do Rodapé para serem impressas no cupom fiscal
            /// </summary>
            /// <param name="vlrImpostoAprox">Valor do imposto aproximado</param>
            /// <param name="vlrPercImpostoAprox">Valor do percentual do imposto aproximado</param>
            /// <param name="numeroDocumento">Número do documento(DAV-OS ou Nota Fiscal Manual(Bloquinho))</param>
            public string[] PreparaRodapeCupom(IVendaCF cupomFiscal, MD5 md5)
            {
                string[] result = new string[7];
                string[] newtext = new string[7];
                string tipoMovimento = string.Empty;
                string fonte = string.Empty;
                string mascara = string.Empty;
                fonte = String.Format("IBPT/{0}", Settings.EmpresaAtual.Enderecos.First(f => f.Principal == true).Endereco.Estado.UF.Sigla);

                double vlrImpostoImport = cupomFiscal.Itens.Sum(s => s.ValorImpostoAproximadoImportado);
                double vlrImpostoFederal = cupomFiscal.Itens.Sum(s => s.ValorImpostoAproximadoFederal);
                double vlrImpostoEstadual = cupomFiscal.Itens.Sum(s => s.ValorImpostoAproximadoEstadual);
                double vlrImpostoMunicipal = cupomFiscal.Itens.Sum(s => s.ValorImpostoAproximadoMunicipio);

                //Identifica o tipo do movimento vinculado ao cupom fiscal
                if (cupomFiscal.MovimentosVinculados.FirstOrDefault() != null)
                {
                    switch (cupomFiscal.MovimentosVinculados.FirstOrDefault().Tipo)
                    {
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.DAVOS:
                            tipoMovimento = "DAV-OS";
                            break;
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.NotaFiscalManual:
                            tipoMovimento = "NF";
                            break;
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.PreVenda:
                            tipoMovimento = "PV";
                            break;
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.DAV:
                            tipoMovimento = "DAV";
                            break;
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.NotaFiscalEletronica:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.CupomFiscal:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.NotaFiscalConsumidorEletronica:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.Sangria:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.Suprimento:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.Recebimento:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.LancamentoGeral:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.ContasPagar:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.ContasReceber:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.ValeTransporte:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.AdiantamentoFuncionario:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.PagamentoAoFornecedor:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.DevolucaoMercadoria:
                        case OpenPOS.Enuns.Faturamento.Lancamento.Tipo.Voucher:
                        default:
                            tipoMovimento = string.Empty;
                            break;
                    }
                }

                //Atribuir os valores nas variáveis pré-definidas do rodapé do cupom fiscal
                foreach (Enuns.Configuracao.VariaveisRodapeECF item in Enum.GetValues(typeof(VariaveisRodapeECF)).Cast<VariaveisRodapeECF>())
                {
                    switch (item)
                    {
                        case VariaveisRodapeECF.TipoMovimento:
                            newtext[0] = String.Format("{0}:{1}", tipoMovimento == string.Empty ? "" : tipoMovimento, tipoMovimento == string.Empty ? "" : cupomFiscal.MovimentosVinculados.FirstOrDefault().EGUID.ToString());
                            break;
                        case VariaveisRodapeECF.Tributos:
                            newtext[1] = String.Format("Importado: R$ {0:0.00} - Federal: R$ {1:0.00} - Estadual: R$ {2:0.00} - Municipal: R$ {3:0.00} - Fonte: {4}",
                                cupomFiscal.Itens.Sum(s => s.ValorImpostoAproximadoImportado),
                                cupomFiscal.Itens.Sum(s => s.ValorImpostoAproximadoFederal),
                                cupomFiscal.Itens.Sum(s => s.ValorImpostoAproximadoEstadual),
                                cupomFiscal.Itens.Sum(s => s.ValorImpostoAproximadoMunicipio),
                                fonte);
                            break;
                        case VariaveisRodapeECF.Vendedor:
                            newtext[2] = Settings.UsuarioAtual.NomeFantasia;
                            break;
                        case VariaveisRodapeECF.Sistema:
                            newtext[3] = String.Format("Sistema: {0}", Settings.SoftwareHouse.NomeApp);
                            break;
                        case VariaveisRodapeECF.Versao:
                            newtext[4] = String.Format("Versão: {0}", Settings.SoftwareHouse.VersaoER);
                            break;
                    }
                }

                //Ajustes nas linhas do rodapé do cupom fiscal
                if (!String.IsNullOrEmpty(tipoMovimento))
                {
                    result[0] = ConfiguracaoRodape.Linha1 = ConfiguracaoRodape.Linha1.Replace("$TipoMovimento", newtext[0]);
                    result[0] = result[0].Trim();
                    result[1] = ConfiguracaoRodape.Linha2 = ConfiguracaoRodape.Linha2.Replace("$Tributos", newtext[1]);
                    result[1] = result[1].Trim();
                    result[2] = ConfiguracaoRodape.Linha3 = ConfiguracaoRodape.Linha3.Replace("$Vendedor", newtext[2]);
                    result[2] = result[2].Trim();
                    result[3] = ConfiguracaoRodape.Linha4 = ConfiguracaoRodape.Linha4.Replace("$Sistema", newtext[3]).Replace("$Versão", newtext[4]);
                    result[3] = result[3].Trim();
                    result[4] = ConfiguracaoRodape.Linha5;
                    result[4] = result[4].Trim();
                }
                else
                {
                    result[0] = ConfiguracaoRodape.Linha1 = string.Empty;
                    result[0] = ConfiguracaoRodape.Linha1 = ConfiguracaoRodape.Linha2.Replace("$Tributos", newtext[1]);
                    result[0] = result[0].Trim();
                    result[1] = ConfiguracaoRodape.Linha2 = string.Empty;
                    result[1] = ConfiguracaoRodape.Linha2 = ConfiguracaoRodape.Linha3.Replace("$Vendedor", newtext[2]);
                    result[1] = result[1].Trim();
                    result[2] = ConfiguracaoRodape.Linha3 = string.Empty;
                    result[2] = ConfiguracaoRodape.Linha3 = ConfiguracaoRodape.Linha4.Replace("$Sistema", newtext[3]).Replace("$Versão", newtext[4]);
                    result[2] = result[2].Trim();
                    result[3] = ConfiguracaoRodape.Linha4 = string.Empty;
                    result[3] = ConfiguracaoRodape.Linha4 = ConfiguracaoRodape.Linha5;
                    result[3] = result[3].Trim();
                    result[4] = string.Empty;
                }

                result[5] = ConfiguracaoRodape.Linha6;
                result[5] = result[5].Trim();
                result[6] = ConfiguracaoRodape.Linha7;
                result[6] = result[6].Trim();

                return result;
            }