/// <summary> /// Adiciona um boleto e seu respectivo sacado (será armazenado uma cópia (cole) destas instancias /// </summary> public void Add(BoletoInfo bol, SacadoInfo sac) { BoletoInfo boleto = bol.Clone(); // é feita uma cópia do boleto com os dados adicionais para não alterar o original boleto.SacadoInit((SacadoInfo)CobUtil.Clone(sac)); cnab.Boletos.Add(boleto); #if TEST_LOG cnab.Log += "\r\n +" + boleto.NossoNumero + " QTD: " + cnab.Boletos.Count + "\r\n"; BoletoInfo b; foreach (string n in Boletos.NossoNumeros) { b = Boletos[n]; cnab.Log += string.Format("'{0}' '{1}' / ", n, b.NossoNumero); } //cnab.Log += " - bi - "; //foreach (string n in bi.Keys) //{ // b = null; // if (bi.TryGetValue(n, out b)) // cnab.Log += string.Format("'{0}' '{1}' / ", n, b.NossoNumero); // else // cnab.Log += n + "! "; //} #endif }
protected void btnRemessa_Click(object sender, EventArgs e) { // (Não é o foco validar dados de entrada, e sim testar a geração de registro) // Definição dos dados do cedente - QUEM RECEBE / EMITE CedenteInfo Cedente = new CedenteInfo(); Cedente.Cedente = "Exemplo de empresa cedente"; Cedente.Banco = "237"; Cedente.Agencia = "1510"; Cedente.Conta = "001466-4"; Cedente.Carteira = "09"; Cedente.Modalidade = "05"; Cedente.CedenteCOD = "00000000000004047726"; // 20 digitos //Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = "Pedro Alvarez Cabral"; Sacado.Documento = "123.123.134-12"; Sacado.Endereco = "Rua 21 de Abril"; Sacado.Cidade = "São Paulo"; Sacado.Bairro = "Vera Cruz"; Sacado.Cep = "98765-000"; Sacado.UF = "SP"; Sacado.Email = "*****@*****.**"; //Definição das Variáveis do boleto BoletoInfo Boleto; //WebControl BoletoWeb blt; // define o emissor da remessa // Remessa r = new Remessa(Cedente); CNAB400Bradesco r = new CNAB400Bradesco(); r.Cedente = Cedente; // O lote padrão gera AADDDHH (Ano, Dia do ano, Hora) r.NumeroLote += 2000000; // inicia com 3 o numero do lote! (soma 20 anos) //r.ShowDumpReg = true; // customiza campos para Bradesco // r.onRegItem += new RemessaReg(r_onRegItem); for (int n = 0; n < Int32.Parse(txtQTD.Text); n++) { Boleto = new BoletoInfo(); Boleto.BoletoID = n; Boleto.NossoNumero = (Int32.Parse(txtNossoNumero.Text) + n).ToString(); Boleto.NumeroDocumento = Boleto.NossoNumero; Boleto.ValorDocumento = double.Parse(txtValor.Text) + n; Boleto.DataDocumento = DateTime.Now; Boleto.DataVencimento = DateTime.Parse(txtVencimento.Text).AddDays(n); Boleto.Instrucoes = "Todas as informações deste bloqueto são de exclusiva responsabilidade do cedente"; blt = new BoletoWeb(); dvBoletos.Controls.Add(blt); blt.ImagePath = "../imagens/"; // Define o diretório de imagens blt.ExibeReciboSacado = false; // Apenas para exibir a parte que interessa do boleto blt.CssCell = "BolCell"; blt.CssField = "BolField"; // Gera um boleto blt.MakeBoleto(Cedente, Sacado, Boleto); // Gera um registro Boleto.SacadoInit(Sacado); // obrigatório para o registro r.Boletos.Add(Boleto, null); } // o numero de exemplo '123' é apenas um numero de teste // este numero é muito importante que seja gerado de forma exclusiva e sequencial txtRemessa.Text = r.Remessa(); //r.CNAB400(123); }
// Este exemplo tem os mesmos parametros, mas a imagem é rederizada de forma externa // A instancia do boleto é serializada e fica na sessão ou cache, e é recuperada pelo gerador da imagem do boleto protected void Page_Init(object sender, EventArgs e) { // A Definição dos cedente fica dentro do gerador da imagem // Cria uma tabela em memoria DataTable tbDados = new DataTable(); // Estrutura da tabela tbDados.Columns.Add("Nome", typeof(string)); tbDados.Columns.Add("Vencimento", typeof(DateTime)); tbDados.Columns.Add("Valor", typeof(double)); tbDados.Columns.Add("NossoNumero", typeof(int)); // Insere os dados tbDados.Rows.Add("Fábio", new DateTime(2015, 12, 30), 123.45, 345678); tbDados.Rows.Add("Érika", new DateTime(2015, 7, 25), 60, 12332); tbDados.Rows.Add("Milena", new DateTime(2015, 10, 20), 10.30, 234); tbDados.Rows.Add("Cecília", new DateTime(2015, 3, 4), 20.53, 456445); tbDados.Rows.Add("Roberto", new DateTime(2015, 6, 5), 32.78, 47319); tbDados.Rows.Add("Marcelo", DateTime.MinValue, 20320.23, 18445); tbDados.Rows.Add("Ricardo", DateTime.MinValue, 97023.51, 2465445); tbDados.Rows.Add("Maria", new DateTime(2016, 9, 12), 7890.23, 61756); tbDados.Rows.Add("Samara", new DateTime(2015, 8, 12), 78.1, 656); tbDados.Rows.Add("Marcio", new DateTime(2015, 2, 10), 790.3, 5672); int nBoleto = 0; foreach (DataRow row in tbDados.Rows) { // O loop apenas gera os objetos que serão memorizados em sessão ou cache // Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = (string)row["Nome"]; // Definição das Variáveis do boleto BoletoInfo Boleto = new BoletoInfo(); Boleto.DataVencimento = (DateTime)row["Vencimento"]; Boleto.ValorDocumento = (double)row["Valor"]; Boleto.NossoNumero = row["NossoNumero"].ToString(); Boleto.NumeroDocumento = Boleto.NossoNumero; // Vincula o Sacado ao boleto Boleto.SacadoInit(Sacado); // Crio um identificador unico para o boleto, poderia ser só um ID, ou mesmo o NossoNumero, mas depende dos critérios de segurança string cID = "boleto-" + Guid.NewGuid().ToString(); // Se não for StateServer, ou sessão em banco de dados é possivel usar Session[cID] = Boleto; // Funciona é mais simples, mas a memoria vai ficando com todos os boletos gerados até a sessão expirar // Uma forma melhor é colocar em cache, com tempo de expiração //Cache.Insert(cID, Boleto, null, DateTime.MaxValue, new TimeSpan(0, 5, 0)); // Adiciona a imagem do boleto em base64 no HTML // Para facilitar a depuração também adiciono um link para a propria imagem form1.Controls.Add(new LiteralControl("<a href='BoletoImagem2.ashx?id=" + cID + "' target='_blank'><img src='BoletoImagem2.ashx?id=" + cID + "' /></a>")); // form1.Controls.Add(new LiteralControl("<img src='BoletoImagem2.ashx?id=" + cID + "' />")); // incrementa o contador de boletos nBoleto++; if (nBoleto % 3 == 0) // Mas aplicar muito zoom pode dar problema na leitura do código de barras // somente nos boletos pares a iniciar de 2 força uma quebra de linha form1.Controls.Add(new LiteralControl("<div style='page-break-after: always'><br/></div>")); else // if (nBoleto<tbDados.Rows.Count) // caso não queira imprimir a ultima imagem de tesoura // nos boletos impares adiciona a imagem de recorte, ou um HR // form1.Controls.Add(new LiteralControl("<img src='imagens/corte.gif' style='margin: 5px 0 5px 0;'/>")); form1.Controls.Add(new LiteralControl("<hr size='1' style='color: gray; margin: 5px 0 5px 0;'/>")); } }
protected void btnRemessa_Click(object sender, EventArgs e) { // (Não é o foco validar dados de entrada, e sim testar a geração de registro) //Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = "Pedro Alvarez Cabral"; Sacado.Documento = "123.123.134-12"; Sacado.Endereco = "Rua 21 de Abril"; Sacado.Cidade = "São Paulo"; Sacado.Bairro = "Vera Cruz"; Sacado.Cep = "01500-000"; Sacado.UF = "SP"; Sacado.Email = "*****@*****.**"; // Usando a classe bradesco diretamente // CNAB400Bradesco r = new CNAB400Bradesco(); // r.Cedente = Cedente; // r.NumeroLote += 2000000; // inicia com 3 o numero do lote! (soma 20 anos) var r = new LayoutBancos(); r.Init(Cedente); r.Lote = 123456; // é o NumeroLote do CNAB: é preciso gerar uma sequencia armazenada em banco que não se repita // O lote padrão gera AADDDHH (Ano, Dia do ano, Hora) //r.ShowDumpReg = true; // customiza campos r.onRegBoleto = CustomRegBoleto; for (int n = 0; n < Int32.Parse(txtQTD.Text); n++) { //Definição das Variáveis do boleto var Boleto = new BoletoInfo(); Boleto.BoletoID = n; Boleto.NossoNumero = (Int32.Parse(txtNossoNumero.Text) + n).ToString(); Boleto.NumeroDocumento = Boleto.NossoNumero; Boleto.ValorDocumento = double.Parse(txtValor.Text) + n; Boleto.DataDocumento = DateTime.Now; Boleto.DataVencimento = DateTime.Parse(txtVencimento.Text).AddDays(n); Boleto.Instrucoes = "Todas as informações deste bloqueto são de exclusiva responsabilidade do cedente"; // WebControl var blt = new BoletoWeb(); dvBoletos.Controls.Add(blt); blt.ImagePath = "../imagens/"; // Define o diretório de imagens blt.ExibeReciboSacado = false; // Apenas para exibir a parte que interessa do boleto blt.CssCell = "BolCell"; blt.CssField = "BolField"; // Gera um boleto blt.MakeBoleto(Cedente, Sacado, Boleto); // Gera um registro Boleto.SacadoInit(Sacado); // obrigatório para o registro r.Boletos.Add(Boleto, null); } // o numero de exemplo '123' é apenas um numero de teste // este numero é muito importante que seja gerado de forma exclusiva e sequencial txtRemessa.Text = r.Remessa(); //r.CNAB400(123); }
// Este exemplo tem os mesmos parametros, mas a imagem é rederizada de forma externa // A instancia do boleto é serializada e fica na sessão ou cache, e é recuperada pelo gerador da imagem do boleto protected void Page_Init(object sender, EventArgs e) { // A Definição dos cedente fica dentro do gerador da imagem // Cria uma tabela em memoria DataTable tbDados = new DataTable(); // Estrutura da tabela tbDados.Columns.Add("Nome", typeof(string)); tbDados.Columns.Add("Vencimento", typeof(DateTime)); tbDados.Columns.Add("Valor", typeof(double)); tbDados.Columns.Add("NossoNumero", typeof(int)); // Insere os dados tbDados.Rows.Add("Fábio", new DateTime(2015, 12, 30), 123.45, 345678); tbDados.Rows.Add("Érika", new DateTime(2015, 7, 25), 60, 12332); tbDados.Rows.Add("Milena", new DateTime(2015, 10, 20), 10.30, 234); tbDados.Rows.Add("Cecília", new DateTime(2015, 3, 4), 20.53, 456445); tbDados.Rows.Add("Roberto", new DateTime(2015, 6, 5), 32.78, 47319); tbDados.Rows.Add("Marcelo", DateTime.MinValue, 20320.23, 18445); tbDados.Rows.Add("Ricardo", DateTime.MinValue, 97023.51, 2465445); tbDados.Rows.Add("Maria", new DateTime(2016, 9, 12), 7890.23, 61756); tbDados.Rows.Add("Samara", new DateTime(2015, 8, 12), 78.1, 656); tbDados.Rows.Add("Marcio", new DateTime(2015, 2, 10), 790.3, 5672); int nBoleto = 0; foreach (DataRow row in tbDados.Rows) { // O loop apenas gera os objetos que serão memorizados em sessão ou cache // Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = (string)row["Nome"]; // Definição das Variáveis do boleto BoletoInfo Boleto = new BoletoInfo(); Boleto.DataVencimento = (DateTime)row["Vencimento"]; Boleto.ValorDocumento = (double)row["Valor"]; Boleto.NossoNumero = row["NossoNumero"].ToString(); Boleto.NumeroDocumento = Boleto.NossoNumero; // Vincula o Sacado ao boleto Boleto.SacadoInit(Sacado); // Crio um identificador unico para o boleto, poderia ser só um ID, ou mesmo o NossoNumero, mas depende dos critérios de segurança string cID = "boleto-" + Guid.NewGuid().ToString(); // Se não for StateServer, ou sessão em banco de dados é possivel usar Session[cID] = Boleto; // Funciona é mais simples, mas a memoria vai ficando com todos os boletos gerados até a sessão expirar // Uma forma melhor é colocar em cache, com tempo de expiração //Cache.Insert(cID, Boleto, null, DateTime.MaxValue, new TimeSpan(0, 5, 0)); // Adiciona a imagem do boleto em base64 no HTML // Para facilitar a depuração também adiciono um link para a propria imagem form1.Controls.Add(new LiteralControl("<a href='BoletoImagem2.ashx?id=" + cID + "' target='_blank'><img src='BoletoImagem2.ashx?id=" + cID + "' /></a>")); // form1.Controls.Add(new LiteralControl("<img src='BoletoImagem2.ashx?id=" + cID + "' />")); // incrementa o contador de boletos nBoleto++; if (nBoleto % 3 == 0) // Mas aplicar muito zoom pode dar problema na leitura do código de barras // somente nos boletos pares a iniciar de 2 força uma quebra de linha { form1.Controls.Add(new LiteralControl("<div style='page-break-after: always'><br/></div>")); } else // if (nBoleto<tbDados.Rows.Count) // caso não queira imprimir a ultima imagem de tesoura // nos boletos impares adiciona a imagem de recorte, ou um HR // form1.Controls.Add(new LiteralControl("<img src='imagens/corte.gif' style='margin: 5px 0 5px 0;'/>")); { form1.Controls.Add(new LiteralControl("<hr size='1' style='color: gray; margin: 5px 0 5px 0;'/>")); } } }
protected void btnRemessa_Click(object sender, EventArgs e) { // (Não é o foco validar dados de entrada, e sim testar a geração de registro) // Definição dos dados do cedente - QUEM RECEBE / EMITE CedenteInfo Cedente = new CedenteInfo(); Cedente.Cedente = "Exemplo de empresa cedente"; Cedente.Banco = Request["banco"] ?? "341"; Cedente.Agencia = "1510"; Cedente.Conta = "001466-4"; Cedente.Carteira = "09"; Cedente.Modalidade = "05"; Cedente.CedenteCOD = "00000000000004047726"; // 20 digitos //Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = "Pedro Alvarez Cabral"; Sacado.Documento = "123.123.134-12"; Sacado.Endereco = "Rua 21 de Abril"; Sacado.Cidade = "São Paulo"; Sacado.Bairro = "Vera Cruz"; Sacado.Cep = "98765-000"; Sacado.UF = "SP"; Sacado.Email = "*****@*****.**"; //Definição das Variáveis do boleto BoletoInfo Boleto; //WebControl BoletoWeb blt; // define o emissor da remessa // Remessa r = new Remessa(Cedente); CNAB400Bradesco r = new CNAB400Bradesco(); r.Cedente = Cedente; // O lote padrão gera AADDDHH (Ano, Dia do ano, Hora) r.NumeroLote += 2000000; // inicia com 3 o numero do lote! (soma 20 anos) //r.ShowDumpReg = true; // customiza campos para Bradesco // r.onRegItem += new RemessaReg(r_onRegItem); for (int n = 0; n < Int32.Parse(txtQTD.Text); n++) { Boleto = new BoletoInfo(); Boleto.BoletoID = n; Boleto.NossoNumero = (Int32.Parse(txtNossoNumero.Text) + n).ToString(); Boleto.NumeroDocumento = Boleto.NossoNumero; Boleto.ValorDocumento = double.Parse(txtValor.Text) + n; Boleto.DataDocumento = DateTime.Now; Boleto.DataVencimento = DateTime.Parse(txtVencimento.Text).AddDays(n); Boleto.Instrucoes = "Todas as informações deste bloqueto são de exclusiva responsabilidade do cedente"; blt = new BoletoWeb(); dvBoletos.Controls.Add(blt); blt.ImagePath = "../imagens/"; // Define o diretório de imagens blt.ExibeReciboSacado = false; // Apenas para exibir a parte que interessa do boleto blt.CssCell = "BolCell"; blt.CssField = "BolField"; // Gera um boleto blt.MakeBoleto(Cedente, Sacado, Boleto); // Gera um registro Boleto.SacadoInit(Sacado); // obrigatório para o registro r.Boletos.Add(Boleto,null); } // o numero de exemplo '123' é apenas um numero de teste // este numero é muito importante que seja gerado de forma exclusiva e sequencial txtRemessa.Text = r.Remessa(); //r.CNAB400(123); }