/// <summary> /// Cria uma nova instancia do WebControl do Boleto /// </summary> public BoletoWeb() { try { blt = new Boleto(); // Lê do web.config a opção padrão de renderização HTML/IMAGEM // <add key = "BoletoRenderImage" value = "true" /> if (cRenderImage == null) { RenderCountImage = CobUtil.GetInt(System.Configuration.ConfigurationManager.AppSettings["BoletoRenderImage"]); } } catch { } }
/// <summary> /// Gera o aquivo baseado nas coleção de todas informações passada até o momento /// </summary> /// <returns></returns> public override string Remessa() { string[] cAgDig = Cedente.Agencia.Split('-'); string[] cCCDig = Cedente.Conta.Split('-'); string[] cBanco = Cedente.Banco.Split('-'); Bancos banco = (Bancos)CobUtil.GetInt(cBanco[0]); if (banco != Bancos.BRADESCO) { throw new Exception("Esta classe é valida apenas para o Bradesco"); } //if (Cedente.CedenteCOD.Length != 20) // throw new Exception("Erro nas definições do Código da Empresa ('" + Cedente.CedenteCOD + "') verifique os dados do Cedente: Banco, Agencia, Conta, Cod.Cedente"); // Adicionado por Alexandre Savelli Bencz if (Cedente.CodCedente.Length != 20) { Cedente.CodCedente = Cedente.CodCedente.PadLeft(20, '0'); } // Limpa os objetos de saida/entrada Data.Clear(); Clear(); // Proximo item SequencialRegistro = 1; regArqHeader[CNAB400Header1Bradesco.Empresa_Codigo] = Cedente.CedenteCOD; regArqHeader[CNAB400Header1Bradesco.Empresa_Nome] = Cedente.Cedente; regArqHeader[CNAB400Header1Bradesco.Data] = DataHoje; regArqHeader[CNAB400Header1Bradesco.Lote] = NumeroLote; // atualiza o lote regArqHeader[CNAB400Header1Bradesco.Sequencia] = SequencialRegistro++; // o sequencial do header é sempre 1 (FIXO) Add(regArqHeader); BoletoInfo boleto; SacadoInfo sacado; Reg <CNAB400Remessa1Bradesco> regBoleto; Reg <CNAB400Remessa2Bradesco> regBoleto2; // Adicionado por Alexandre Savelli Bencz foreach (string n in this.Boletos.NossoNumeros) { boleto = Boletos[n]; sacado = boleto.Sacado; regBoleto = new Reg <CNAB400Remessa1Bradesco>(); // 21-37: Identificação da Empresa Cedente no Banco regBoleto[CNAB400Remessa1Bradesco.Carteira] = Cedente.Carteira; regBoleto[CNAB400Remessa1Bradesco.Agencia] = cAgDig[0]; regBoleto[CNAB400Remessa1Bradesco.Conta] = cCCDig[0]; regBoleto[CNAB400Remessa1Bradesco.ContaDAC] = cCCDig[1]; if (boleto.BoletoID > 0) // 38-62 { regBoleto[CNAB400Remessa1Bradesco.Identificacao] = boleto.BoletoID; } regBoleto[CNAB400Remessa1Bradesco.MultaTipo] = boleto.PercentualMulta == 0 ? 0 : 2; // 66 regBoleto[CNAB400Remessa1Bradesco.MultaPercentual] = boleto.PercentualMulta; // 67 // 71-82 string cModalidade = Cedente.Modalidade; string cNossoNumero = boleto.NossoNumero; // Primeiro prepara e calcula o DV para ajustar o nosso numero de acordo com a modalidade e carteira regBoleto[CNAB400Remessa1Bradesco.NossoNumeroDig] = Banco_Bradesco.NossoNumero(Cedente.Carteira, ref cModalidade, ref cNossoNumero); regBoleto[CNAB400Remessa1Bradesco.NossoNumero] = cModalidade + cNossoNumero; regBoleto[CNAB400Remessa1Bradesco.Ocorrencia] = (int)boleto.Ocorrencia; // 109 - 01-Remessa regBoleto[CNAB400Remessa1Bradesco.NumeroDocumento] = boleto.NumeroDocumento; // 111 regBoleto[CNAB400Remessa1Bradesco.Vencimento] = boleto.DataVencimento; // 121 regBoleto[CNAB400Remessa1Bradesco.ValorDocumento] = boleto.ValorDocumento; // 127 regBoleto[CNAB400Remessa1Bradesco.Especie] = (int)boleto.Especie; // 148 - 01 - Duplicata Mercantil regBoleto[CNAB400Remessa1Bradesco.Aceite] = boleto.Aceite; // 150 - 'N' padrão regBoleto[CNAB400Remessa1Bradesco.Emissao] = boleto.DataDocumento; // 151 regBoleto[CNAB400Remessa1Bradesco.Instrucao1] = boleto.Instrucao1; // 157 regBoleto[CNAB400Remessa1Bradesco.Instrucao2] = boleto.Instrucao2; // 159 regBoleto[CNAB400Remessa1Bradesco.Juros] = boleto.ValorMora; // 161 if (boleto.ValorDesconto > 0) { regBoleto[CNAB400Remessa1Bradesco.DescontoData] = boleto.DataDesconto; // 174 regBoleto[CNAB400Remessa1Bradesco.DescontoValor] = boleto.ValorDesconto; // 180 } regBoleto[CNAB400Remessa1Bradesco.Abatimento] = boleto.ValorOutras < 0 ? -boleto.ValorOutras : 0; // 206 regBoleto[CNAB400Remessa1Bradesco.SacadoTipo] = sacado.Tipo; // 219 regBoleto[CNAB400Remessa1Bradesco.SacadoInscricao] = sacado.DocumentoNumeros; // 221 regBoleto[CNAB400Remessa1Bradesco.Nome] = sacado.Sacado; // 235 regBoleto[CNAB400Remessa1Bradesco.Endereco] = sacado.Endereco; // 275 regBoleto[CNAB400Remessa1Bradesco.CEP] = sacado.CepNumeros; // 332 regBoleto[CNAB400Remessa1Bradesco.Avalista] = sacado.Avalista; // 335 regBoleto[CNAB400Remessa1Bradesco.Sequencia] = SequencialRegistro++; // adiciona o boleto convertido em registro AddBoleto(regBoleto, boleto); // Em breve por, padrão esse registro opcional será definido externamente // Adicionado por Alexandre Savelli Bencz // Gera o registro tipo 2 na remessa if (!string.IsNullOrEmpty(boleto.Instrucoes) || boleto.ValorDesconto2 != 0 || boleto.ValorDesconto3 != 0) { var mensagens = new string[4] { "", "", "", "" }; var msgs = boleto.Instrucoes.Replace("\r", "").Replace("<br/>", "\n").Replace("<br>", "\n").Split('\n'); for (int i = 0; i < msgs.Length; i++) { mensagens[i] = msgs[i].Trim(); } regBoleto2 = new Reg <CNAB400Remessa2Bradesco>(); regBoleto2[CNAB400Remessa2Bradesco.Mensagem1] = mensagens[0]; regBoleto2[CNAB400Remessa2Bradesco.Mensagem2] = mensagens[1]; regBoleto2[CNAB400Remessa2Bradesco.Mensagem3] = mensagens[2]; regBoleto2[CNAB400Remessa2Bradesco.Mensagem4] = mensagens[3]; regBoleto2[CNAB400Remessa2Bradesco.DataLimiteDesconto2] = boleto.DataLimiteDesconto2; regBoleto2[CNAB400Remessa2Bradesco.ValorDesconto2] = boleto.ValorDesconto2; regBoleto2[CNAB400Remessa2Bradesco.DataLimiteDesconto3] = boleto.DataLimiteDesconto3; regBoleto2[CNAB400Remessa2Bradesco.ValorDesconto3] = boleto.ValorDesconto3; regBoleto2[CNAB400Remessa2Bradesco.Carteira] = Cedente.Carteira; regBoleto2[CNAB400Remessa2Bradesco.Agencia] = cAgDig[0]; regBoleto2[CNAB400Remessa2Bradesco.Conta] = cCCDig[0]; regBoleto2[CNAB400Remessa2Bradesco.ContaDAC] = cCCDig[1]; regBoleto2[CNAB400Remessa2Bradesco.NossoNumero] = cModalidade + cNossoNumero; regBoleto2[CNAB400Remessa2Bradesco.NossoNumeroDig] = Banco_Bradesco.NossoNumero(Cedente.Carteira, ref cModalidade, ref cNossoNumero); regBoleto2[CNAB400Remessa2Bradesco.Sequencia] = SequencialRegistro++; AddBoleto(regBoleto2, boleto); } AddOpcionais(boleto); } regArqTrailer[CNAB400ArquivoTrailer.Sequencia] = SequencialRegistro; Add(regArqTrailer); // Gera o Texto de saida da forma padrão return(this.Conteudo); }
/// <summary> /// Gera o aquivo baseado nas coleção de todas informações passada até o momento /// </summary> /// <returns></returns> public override string Remessa() { // Existe algum BUG na executação de template e reflection com ActiveX que dentro do doreach de conteudo da classe e layout acaba por não gerar o arquivo final. // Então, cada linha já será gerada imediatamente em uma String Builder, liberando assim a necessidade de memorizar os itens que iriam conter no arquivo. string[] cBanco = Cedente.Banco.Split('-'); string[] cAgDig = Cedente.Agencia.Split('-'); string cContaDigitos = CobUtil.SoNumeros(Cedente.Conta); Bancos banco = (Bancos)CobUtil.GetInt(cBanco[0]); if (!(banco == Bancos.SANTANDER || banco == Bancos.BANESPA_SANTANDER)) { throw new Exception("Esta classe é valida apenas para o Santander"); } else if (cContaDigitos.Length != 10) { throw new Exception("Erro na Conta não tem 10 dígitos"); } else if (Cedente.CodCedente.Length != 7) { throw new Exception("Erro no CodCedente não tem 7 dígitos"); } else if (Cedente.CedenteCOD.Length != 20) { throw new Exception("Erro no CedenteCOD não tem 20 dígitos"); } else if (Cedente.Convenio.Length != 25) { throw new Exception("Erro no Convenio não tem 25 dígitos"); } regArqHeader[CNAB400SantanderHeader.Empresa_Codigo] = Cedente.CedenteCOD; regArqHeader[CNAB400SantanderHeader.Empresa_Nome] = Cedente.Cedente; regArqHeader[CNAB400SantanderHeader.Banco_Codigo] = (int)banco; regArqHeader[CNAB400SantanderHeader.Data] = DataHoje; // Limpa os objetos de saida/entrada Data.Clear(); Clear(); // Inicia o contador Sequencial regArqHeader[CNAB400SantanderHeader.Sequencia] = SequencialRegistro = 1; // o sequencial do header é sempre 1 (FIXO) Add(regArqHeader); // Proximo item SequencialRegistro = 2; BoletoInfo boleto; SacadoInfo sacado; Reg <CNAB400SantanderRemessa1> regBoleto; double nValor = 0; #if TEST_LOG Log += "Remessa " + Boletos.Count + "!\r\n"; #endif foreach (string n in Boletos.NossoNumeros) { boleto = Boletos[n]; sacado = boleto.Sacado; nValor += boleto.ValorDocumento; #if TEST_LOG Log += string.Format("{0} {1} {2:C}", n, boleto.NossoNumero, boleto.ValorDocumento); #endif regBoleto = new Reg <CNAB400SantanderRemessa1>(); regBoleto[CNAB400SantanderRemessa1.CedenteTipo] = Cedente.Tipo; regBoleto[CNAB400SantanderRemessa1.CedenteCNPJ] = Cedente.DocumentoNumeros; regBoleto[CNAB400SantanderRemessa1.CedenteCOD] = Cedente.CedenteCOD; regBoleto[CNAB400SantanderRemessa1.CedenteControle] = Cedente.Convenio; regBoleto[CNAB400SantanderRemessa1.Banco] = 33; regBoleto[CNAB400SantanderRemessa1.CarteiraTipo] = Cedente.CarteiraTipo; regBoleto[CNAB400SantanderRemessa1.Agencia] = Cedente.CarteiraTipo == "5" ? cAgDig[0] : "0"; regBoleto[CNAB400SantanderRemessa1.NossoNumero] = boleto.NossoNumero; #if TEST_LOG Log += string.Format(" ? {0} ? {1}\r\n", regBoleto[CNAB400SantanderRemessa1.NossoNumero], boleto.NossoNumero); #endif regBoleto[CNAB400SantanderRemessa1.NossoNumeroDig] = CobUtil.Modulo11Especial(boleto.NossoNumero, 9); regBoleto[CNAB400SantanderRemessa1.MultaTipo] = boleto.PercentualMulta == 0 ? 0 : 4; regBoleto[CNAB400SantanderRemessa1.MultaPercentual] = boleto.PercentualMulta; regBoleto[CNAB400SantanderRemessa1.Ocorrencia] = (int)boleto.Ocorrencia; regBoleto[CNAB400SantanderRemessa1.SeuNumero] = boleto.BoletoID; regBoleto[CNAB400SantanderRemessa1.DataVencimento] = boleto.DataVencimento; regBoleto[CNAB400SantanderRemessa1.Valor] = boleto.ValorDocumento; regBoleto[CNAB400SantanderRemessa1.Especie] = (int)boleto.Especie; regBoleto[CNAB400SantanderRemessa1.Aceite] = boleto.Aceite; regBoleto[CNAB400SantanderRemessa1.DataDocumento] = boleto.DataDocumento; int nInstrucao1 = boleto.Instrucao1; int nInstrucao2 = boleto.Instrucao2; if (nInstrucao1 == 0 && nInstrucao2 > 0) { nInstrucao1 = nInstrucao2; nInstrucao2 = 0; } // Prioriza protesto na instrução 1 if (nInstrucao1 > 0) { regBoleto[CNAB400SantanderRemessa1.Instrucao1] = nInstrucao1; if (nInstrucao1 == 6) { if (boleto.DiasProtesto == 0) { throw new Exception("Não é possivel dar instrução de protesto sem 'DiasProtesto'"); } regBoleto[CNAB400SantanderRemessa1.DiasProtesto] = boleto.DiasProtesto; } } // Trata a mora na segunda instrução (Se tem Mora maior de 1 centavo adiciona a mora) if (boleto.ValorMora > 0.01) { regBoleto[CNAB400SantanderRemessa1.Mora] = boleto.ValorMora; } else // Caso contrario não cobra { if (nInstrucao1 == 0) { regBoleto[CNAB400SantanderRemessa1.Instrucao1] = 8; } else { regBoleto[CNAB400SantanderRemessa1.Instrucao2] = 8; } } // Mas se a instrução 2 algo diferente adicona também, talvez sobrescrevendo... if (nInstrucao2 != 0) { regBoleto[CNAB400SantanderRemessa1.Instrucao2] = nInstrucao2; } regBoleto[CNAB400SantanderRemessa1.DataDesconto] = boleto.DataDesconto; regBoleto[CNAB400SantanderRemessa1.ValorIOF] = boleto.ValorIOF; regBoleto[CNAB400SantanderRemessa1.ValorDesconto] = boleto.ValorDesconto; regBoleto[CNAB400SantanderRemessa1.ValorAbatimento] = boleto.ValorOutras < 0 ? -boleto.ValorOutras : 0; regBoleto[CNAB400SantanderRemessa1.Sacado_Tipo] = sacado.Tipo; regBoleto[CNAB400SantanderRemessa1.Sacado_Inscricao] = sacado.DocumentoNumeros; regBoleto[CNAB400SantanderRemessa1.Nome] = sacado.Sacado; regBoleto[CNAB400SantanderRemessa1.Endereco] = sacado.Endereco; regBoleto[CNAB400SantanderRemessa1.Bairro] = sacado.Bairro; regBoleto[CNAB400SantanderRemessa1.Cidade] = sacado.Cidade; regBoleto[CNAB400SantanderRemessa1.UF] = sacado.UF; regBoleto[CNAB400SantanderRemessa1.CEP] = sacado.CepNumeros; regBoleto[CNAB400SantanderRemessa1.Avalista] = sacado.Avalista; regBoleto[CNAB400SantanderRemessa1.Complemento] = cContaDigitos.Substring(8, 2); regBoleto[CNAB400SantanderRemessa1.Sequencia] = SequencialRegistro++; // adiciona o boleto convertido em registro AddBoleto(regBoleto, boleto); AddOpcionais(boleto); } regArqTrailer[CNAB400SantanderTrailer.Quantidade] = Boletos.NossoNumeros.Count; //regArqTrailer[CNAB400SantanderTrailer.Quantidade] = Boletos.NossoNumeros.Count + 2; // adicionando o proprio header e trailer regArqTrailer[CNAB400SantanderTrailer.Valor] = nValor; regArqTrailer[CNAB400SantanderTrailer.Sequencia] = SequencialRegistro; Add(regArqTrailer); //ShowDumpLine = true; // Gera o Texto de saida da forma padrão return(this.Conteudo); }
protected void btnGerar_Click(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(txtArquivo.Text)) { ltrOut.Text = "Informe o nome do arquivo com o layout CSV editado"; return; } string cFile = MapPath(txtArquivo.Text); if (!File.Exists(cFile)) { ltrOut.Text = "Arquivo não existe"; return; } CSV csv = new CSV(); csv.Load(cFile); DataTable tb = csv.data; if (tb.Columns.Count < 4) { ltrOut.Text = "É preciso ter ao menos 4 colunas"; return; } StringBuilder sb = new StringBuilder(); string cCampo; string cTamanho; string cTipo; string cRegFormat; int nPos = 1; sb.AppendLine("[RegLayout(@\"^1\")]"); sb.AppendLine("public enum GenerateLayout \n{"); // local dos campos int nPosNome = 1; int nPosComentario = 2; int nPosTamanho = 0; int nPosTipo = 3; foreach (DataRow row in tb.Rows) { // Campo1: Nome do campo cCampo = (string)row[nPosNome]; if (!Regex.IsMatch(cCampo, @"[A-Za-z]\w+$")) { ltrOut.Text = "Nome invalido na posição " + nPos + " - Campo: " + cCampo; return; } // Campo2: Comentário descritivo do campo if (!string.IsNullOrEmpty((string)row[nPosComentario])) { sb.AppendLine("\t/// <summary>\n\t/// " + row[nPosComentario] + " \n\t/// </summary>"); } // Campo3: Posição Inicial/final cRegFormat = "[RegFormat(RegType.P"; // Colocar o numero da linha que define o tamanho cTamanho = (string)row[nPosTamanho]; // Há documentações que é informado o tamanho e outros que é informado o numero de caracteres iniciais e final, aqui vou tratar os 2 casos string[] c = cTamanho.Replace(" a ", " ").Split(' '); if (c.Length >= 2) { cTamanho = (CobUtil.GetInt(c[1]) - CobUtil.GetInt(c[0]) + 1).ToString(); } else if (c.Length == 1) { cTamanho = c[0]; } else { ltrOut.Text = "O tamanho não pode ser identificado '" + cTamanho + "' no Campo: " + cCampo; return; } // Campo4: Tipo de Campo cTipo = (string)row[nPosTipo]; // Só será usado a primeira letra, edite no Excel/google doscs, o no CSV direto possíveis conversões de numeros para data ou valor cTipo = cTipo.Substring(0, 1).ToUpper(); // Desde a época do Cobol os tipos de dado e a forma de representa-los é muito parecido // 9 - Valores numéricos inteiros // V - Valores mão inteiros (double) // D - Datas // X - Textos // H - Hora if (!Regex.IsMatch(cTipo, "[9VDXHNA]")) { ltrOut.Text = "Tipo Inválido '" + cTipo + "' no Campo: " + cCampo; return; } if (cTipo == "N") { cTipo = "9"; } else if (cTipo == "A") { cTipo = "X"; } cRegFormat += cTipo; // Sendo que os tipos válidos são: cRegFormat += ", " + cTamanho; // Campo5: Valor padrão do campo (caso exista) //if (tb.Columns.Count > 4 && !string.IsNullOrEmpty((string)row[4])) // cRegFormat += ", Default =\"" + row[4] + "\""; // Fecha o atributo e coloca um informativo dos tamanhos de posição atual cRegFormat += ")] // " + nPos; nPos += CobUtil.GetInt(cTamanho); cRegFormat += "-" + (nPos - 1); // Por fim adiciona o campo sb.AppendLine("\t" + cRegFormat + "\n\t" + cCampo + ",\n"); } sb.AppendLine("}"); ltrOut.Text = "Copie e cole o código abaixo em um arquivo .CS<br/><hr/><pre>" + sb.ToString() + "</pre>"; } catch (Exception ex) { ltrOut.Text = "<b>" + ex.Message + "</b><br/><pre>" + ex.StackTrace + "</pre>"; } }
public override string Remessa() { string[] cBanco = Cedente.Banco.Split('-'); Bancos banco = (Bancos)CobUtil.GetInt(cBanco[0]); if (banco != Bancos.UniCred) { throw new Exception("Esta classe é valida apenas para o Banco UniCred"); } // Proximo item SequencialRegistro = 1; regArqHeader[CNAB400HeaderUniCred.Conta] = Cedente.CodCedente; regArqHeader[CNAB400HeaderUniCred.Empresa] = Cedente.Cedente; regArqHeader[CNAB400HeaderUniCred.Data] = DataHoje; regArqHeader[CNAB400HeaderUniCred.SequenciaArquivo] = NumeroLote; regArqHeader[CNAB400HeaderUniCred.Sequencia] = SequencialRegistro++; // Limpa os objetos de saida/entrada Data.Clear(); Clear(); // o sequencial do header é sempre 1 (FIXO) Add(regArqHeader); string cAgenciaNumero = Cedente.Agencia.Split('-')[0]; string cModalidade = Cedente.Modalidade; string cCodCedente = Cedente.CodCedente; BoletoInfo boleto; SacadoInfo sacado; Reg <CNAB400Remessa1UniCred> regBoleto; foreach (string n in this.Boletos.NossoNumeros) { boleto = Boletos[n]; sacado = boleto.Sacado; regBoleto = new Reg <CNAB400Remessa1UniCred>(); string cNossoNumero = boleto.NossoNumero; //Banco_UniCred.MontaNossoNumero(ref cNossoNumero, ref cAgenciaNumero, ref cModalidade, ref cCodCedente, boleto.DataVencimento); regBoleto[CNAB400Remessa1UniCred.NumeroDocumento] = boleto.NumeroDocumento; regBoleto[CNAB400Remessa1UniCred.NossoNumero] = cNossoNumero; regBoleto[CNAB400Remessa1UniCred.DataVencimento] = boleto.DataVencimento; regBoleto[CNAB400Remessa1UniCred.ValorDocumento] = boleto.ValorDocumento; regBoleto[CNAB400Remessa1UniCred.DataEmissao] = boleto.DataDocumento; regBoleto[CNAB400Remessa1UniCred.Instrucao1] = boleto.Instrucao1; regBoleto[CNAB400Remessa1UniCred.DataDesconto] = boleto.DataDesconto; regBoleto[CNAB400Remessa1UniCred.ValorDesconto] = boleto.ValorDesconto; regBoleto[CNAB400Remessa1UniCred.SacadoTipo] = sacado.Tipo; regBoleto[CNAB400Remessa1UniCred.SacadoDocumento] = sacado.DocumentoNumeros; regBoleto[CNAB400Remessa1UniCred.Sacado] = sacado.Sacado; regBoleto[CNAB400Remessa1UniCred.Endereco] = sacado.Endereco; regBoleto[CNAB400Remessa1UniCred.CEP] = sacado.CepNumeros; regBoleto[CNAB400Remessa1UniCred.Bairro] = sacado.Bairro; regBoleto[CNAB400Remessa1UniCred.Cidade] = sacado.Cidade; regBoleto[CNAB400Remessa1UniCred.UF] = sacado.UF; regBoleto[CNAB400Remessa1UniCred.Sequencia] = SequencialRegistro++; // adiciona o boleto convertido em registro AddBoleto(regBoleto, boleto); AddOpcionais(boleto); } regArqTrailer[CNAB400Trailer1UniCred.Sequencia] = SequencialRegistro; Add(regArqTrailer); // Gera o Texto de saida da forma padrão return(this.Conteudo); }
protected void btnRun_Click(object sender, EventArgs e) { try { string[] linhas = txtLayout.Text.Replace("\r", "").Split('\n'); DataTable tb = new DataTable(); int n, c; DataRow row; if (rblTipo.SelectedValue == "l") { int nColunas = CobUtil.GetInt(txtPrm.Text); if (nColunas < 4) { ltrOut.Text = "É preciso ter pelo menos 4 campos: Nome, Comentário, Tamanho/Posições, Tipo"; return; } if (linhas.Length / nColunas < 3) { ltrOut.Text = "O arquivo precisa conter pelo menos 3 registros alem do cabeçalho"; return; } for (n = 0; n < nColunas; n++) { tb.Columns.Add(linhas[n], typeof(string)); } row = tb.NewRow(); n = nColunas; c = 0; while (n < linhas.Length) { row[c] = linhas[n].Trim(); n++; c++; if (c == nColunas) { c = 0; tb.Rows.Add(row); row = tb.NewRow(); } } ltrOut.Text = "OK"; gvCSV.DataSource = tb; gvCSV.DataBind(); string cFile = "layout-" + rblTipo.SelectedValue + ".csv"; ltrOut.Text = "OK arquivo gerado: <a href='" + cFile + "' download>" + cFile + "</a>"; string cCSV = CSV.TableCSV(tb, "|"); File.WriteAllText(MapPath(cFile), cCSV); } else // por separador ... tipo csv... { if (linhas.Length < 3) { ltrOut.Text = "O arquivo precisa conter pelo menos 3 registros alem do cabeçalho"; return; } char sep = txtPrm.Text[0]; string[] col = linhas[0].Split(sep); int nColunas = col.Length; if (nColunas < 4) { ltrOut.Text = "É preciso haver pelo menos os 4 campos basicos"; return; } for (c = 0; c < nColunas; c++) { tb.Columns.Add(col[c], typeof(string)); } n = 1; while (n < linhas.Length) { col = CSV.SepararCampos(linhas[n], sep); row = tb.NewRow(); for (c = 0; c < nColunas && c < col.Length; c++) { row[c] = col[c]; } n++; tb.Rows.Add(row); } ltrOut.Text = "OK"; gvCSV.DataSource = tb; gvCSV.DataBind(); string cFile = "layout-" + rblTipo.SelectedValue + ".csv"; ltrOut.Text = "OK arquivo gerado: <a href='" + cFile + "' download>" + cFile + "</a>"; string cCSV = CSV.TableCSV(tb, "|"); File.WriteAllText(MapPath(cFile), cCSV); } } catch (Exception ex) { ltrOut.Text = "<b>" + ex.Message + "</b><br/><pre>" + ex.StackTrace + "</pre>"; } }
public override string Remessa() { string[] cBanco = Cedente.Banco.Split('-'); Bancos banco = (Bancos)CobUtil.GetInt(cBanco[0]); if (banco != Bancos.SICREDI) { throw new Exception("Esta classe é valida apenas para o Banco Sicredi"); } // Proximo item SequencialRegistro = 1; regArqHeader[CNAB400HeaderSicredi.CodCedente] = Cedente.CodCedente; regArqHeader[CNAB400HeaderSicredi.CNPJ] = Cedente.DocumentoNumeros; regArqHeader[CNAB400HeaderSicredi.Data] = DataHoje; regArqHeader[CNAB400HeaderSicredi.NumeroRemessa] = NumeroLote; regArqHeader[CNAB400HeaderSicredi.Sequencia] = SequencialRegistro++; // Limpa os objetos de saida/entrada Data.Clear(); Clear(); // o sequencial do header é sempre 1 (FIXO) Add(regArqHeader); string cAgenciaNumero = Cedente.Agencia.Split('-')[0]; string cModalidade = Cedente.Modalidade; string cCodCedente = Cedente.CodCedente; BoletoInfo boleto; SacadoInfo sacado; Reg <CNAB400Remessa1Sicredi> regBoleto; foreach (string n in this.Boletos.NossoNumeros) { boleto = Boletos[n]; sacado = boleto.Sacado; regBoleto = new Reg <CNAB400Remessa1Sicredi>(); string cNossoNumero = boleto.NossoNumero; Banco_Sicredi.MontaNossoNumero(ref cNossoNumero, ref cAgenciaNumero, ref cModalidade, ref cCodCedente); regBoleto[CNAB400Remessa1Sicredi.NossoNumero] = cNossoNumero; regBoleto[CNAB400Remessa1Sicredi.NumeroDocumento] = boleto.NumeroDocumento; regBoleto[CNAB400Remessa1Sicredi.DataVencimento] = boleto.DataVencimento; regBoleto[CNAB400Remessa1Sicredi.ValorDocumento] = boleto.ValorDocumento; regBoleto[CNAB400Remessa1Sicredi.Especie] = EspecieSicred(boleto.Especie); regBoleto[CNAB400Remessa1Sicredi.Aceite] = boleto.Aceite == "A" ? "S" : "N"; regBoleto[CNAB400Remessa1Sicredi.Data] = boleto.DataDocumento; regBoleto[CNAB400Remessa1Sicredi.DataEmissao] = boleto.DataDocumento; if (boleto.ParcelaTotal > 0) { regBoleto[CNAB400Remessa1Sicredi.TipoImpressao] = "B"; regBoleto[CNAB400Remessa1Sicredi.ParcelaNumero] = boleto.ParcelaNumero; regBoleto[CNAB400Remessa1Sicredi.ParcelaTotal] = boleto.ParcelaTotal; } regBoleto[CNAB400Remessa1Sicredi.Instrucao] = boleto.Instrucao1; regBoleto[CNAB400Remessa1Sicredi.Protesto] = boleto.DiasProtesto > 6 ? "06":"00"; regBoleto[CNAB400Remessa1Sicredi.DiasProtesto] = boleto.DiasProtesto; regBoleto[CNAB400Remessa1Sicredi.PercentualMora] = boleto.PercentualMora; regBoleto[CNAB400Remessa1Sicredi.DataDesconto] = boleto.DataDesconto; regBoleto[CNAB400Remessa1Sicredi.ValorDesconto] = boleto.ValorDesconto; regBoleto[CNAB400Remessa1Sicredi.SacadoTipo] = sacado.Tipo; regBoleto[CNAB400Remessa1Sicredi.SacadoDocumento] = sacado.DocumentoNumeros; regBoleto[CNAB400Remessa1Sicredi.Sacado] = sacado.Sacado; regBoleto[CNAB400Remessa1Sicredi.Endereco] = sacado.Endereco; regBoleto[CNAB400Remessa1Sicredi.Cooperativa] = "00000"; regBoleto[CNAB400Remessa1Sicredi.CEP] = sacado.CepNumeros; regBoleto[CNAB400Remessa1Sicredi.Sequencia] = SequencialRegistro++; // adiciona o boleto convertido em registro AddBoleto(regBoleto, boleto); AddOpcionais(boleto); } regArqTrailer[CNAB400Trailer1Sicredi.Conta] = CobUtil.GetInt(Cedente.Conta.Split('-')[0]); regArqTrailer[CNAB400Trailer1Sicredi.Sequencia] = SequencialRegistro; Add(regArqTrailer); // Gera o Texto de saida da forma padrão return(this.Conteudo); }
/// <summary> /// Gera o aquivo baseado nas coleção de todas informações passada até o momento /// </summary> /// <returns></returns> public override string Remessa() { string[] cAgDig = Cedente.Agencia.Split('-'); string[] cCCDig = Cedente.Conta.Split('-'); string[] cBanco = Cedente.Banco.Split('-'); Bancos banco = (Bancos)CobUtil.GetInt(cBanco[0]); if (banco != Bancos.BANCO_DO_BRASIL) { throw new Exception("Esta classe é valida apenas para o Banco do Brasil"); } else if (cAgDig.Length != 2) { throw new Exception("Informe a agência e digito no formato 9999-9"); } else if (cCCDig.Length != 2) { throw new Exception("Informe a conta e digito no formato 99999999-9"); } // Proximo item SequencialRegistro = 1; regArqHeader[CNAB400Header1BB.Agencia] = cAgDig[0]; regArqHeader[CNAB400Header1BB.AgenciaDV] = cAgDig[1]; regArqHeader[CNAB400Header1BB.ContaCorrente] = cCCDig[0]; regArqHeader[CNAB400Header1BB.ContaCorrenteDV] = cCCDig[1]; regArqHeader[CNAB400Header1BB.Cedente] = Cedente.Cedente; regArqHeader[CNAB400Header1BB.Data] = DataHoje; regArqHeader[CNAB400Header1BB.Remessa] = NumeroLote; regArqHeader[CNAB400Header1BB.ConvenioLider] = Cedente.Convenio; regArqHeader[CNAB400Header1BB.Sequencia] = SequencialRegistro++; // Limpa os objetos de saida/entrada Data.Clear(); Clear(); // atualiza o lote //regArqHeader[CNAB400Header1Bradesco.Lote] = NumeroLote; // o sequencial do header é sempre 1 (FIXO) Add(regArqHeader); BoletoInfo boleto; SacadoInfo sacado; Reg <CNAB400Remessa1BB> regBoleto; foreach (string n in this.Boletos.NossoNumeros) { boleto = Boletos[n]; sacado = boleto.Sacado; regBoleto = new Reg <CNAB400Remessa1BB>(); regBoleto[CNAB400Remessa1BB.CedenteTipo] = Cedente.Tipo; regBoleto[CNAB400Remessa1BB.Documento] = Cedente.DocumentoNumeros; regBoleto[CNAB400Remessa1BB.Agencia] = cAgDig[0]; regBoleto[CNAB400Remessa1BB.AgenciaDV] = cAgDig[1]; regBoleto[CNAB400Remessa1BB.ContaCorrente] = cCCDig[0]; regBoleto[CNAB400Remessa1BB.ContaCorrenteDV] = cCCDig[1]; regBoleto[CNAB400Remessa1BB.Convenio] = Cedente.Convenio; regBoleto[CNAB400Remessa1BB.EmpresaCodigo] = sacado.SacadoCodigo; regBoleto[CNAB400Remessa1BB.NossoNumero] = Banco_do_Brasil.NossoNumero(Cedente.Convenio, Cedente.Modalidade, Cedente.Carteira, boleto.NossoNumero); regBoleto[CNAB400Remessa1BB.Indicativo] = " "; // TODO: Fazer indicativo (informações adicionais de sacador/avalista) regBoleto[CNAB400Remessa1BB.Modalidade] = Cedente.Modalidade; regBoleto[CNAB400Remessa1BB.Carteira] = Cedente.Carteira; regBoleto[CNAB400Remessa1BB.Comando] = boleto.Comando; regBoleto[CNAB400Remessa1BB.NumeroDocumento] = boleto.NumeroDocumento; regBoleto[CNAB400Remessa1BB.DataVencimento] = boleto.DataVencimento; regBoleto[CNAB400Remessa1BB.ValorDocumento] = boleto.ValorDocumento; regBoleto[CNAB400Remessa1BB.Especie] = (int)boleto.Especie; regBoleto[CNAB400Remessa1BB.Aceite] = boleto.Aceite; regBoleto[CNAB400Remessa1BB.DataDocumento] = boleto.DataDocumento; regBoleto[CNAB400Remessa1BB.Instrucao1] = boleto.Instrucao1; regBoleto[CNAB400Remessa1BB.Instrucao2] = boleto.Instrucao2; regBoleto[CNAB400Remessa1BB.JurosValor] = boleto.ValorMora; regBoleto[CNAB400Remessa1BB.DataDesconto] = boleto.DataDesconto; regBoleto[CNAB400Remessa1BB.ValorDesconto] = boleto.ValorDesconto; regBoleto[CNAB400Remessa1BB.SacadoTipo] = sacado.Tipo; regBoleto[CNAB400Remessa1BB.SacadoDocumento] = sacado.DocumentoNumeros; regBoleto[CNAB400Remessa1BB.Sacado] = sacado.Sacado; regBoleto[CNAB400Remessa1BB.Endereco] = sacado.Endereco; regBoleto[CNAB400Remessa1BB.Bairro] = sacado.Bairro; regBoleto[CNAB400Remessa1BB.CEP] = sacado.CepNumeros; regBoleto[CNAB400Remessa1BB.Cidade] = sacado.Cidade; regBoleto[CNAB400Remessa1BB.UF] = sacado.UF; regBoleto[CNAB400Remessa1BB.IndicativoValor] = ""; // TODO: valor de acordo com o indicativo if (boleto.DiasProtesto > 0) { regBoleto[CNAB400Remessa1BB.DiasProtesto] = boleto.DiasProtesto; } regBoleto[CNAB400Remessa1BB.Sequencia] = SequencialRegistro++; // adiciona o boleto convertido em registro AddBoleto(regBoleto, boleto); AddOpcionais(boleto); } regArqTrailer[CNAB400ArquivoTrailer.Sequencia] = SequencialRegistro; Add(regArqTrailer); // Gera o Texto de saida da forma padrão return(this.Conteudo); }
/// <summary> /// Retorna no layout CNAB240 /// </summary> public override string Remessa() { // Limpa os objetos de saida/entrada Data.Clear(); Clear(); string[] cAgenciaDig = Cedente.Agencia.Split('-'); string[] cContaDig = Cedente.Conta.Split('-'); if (cAgenciaDig.Length == 1) { cAgenciaDig = new string[] { cAgenciaDig[0], "0" } } ; // Header do Arquivo regHeaderArquivo[CNAB240HeaderArquivoSicoob.InscricaoTipo] = Cedente.Tipo; regHeaderArquivo[CNAB240HeaderArquivoSicoob.InscricaoNumero] = Cedente.DocumentoNumeros; regHeaderArquivo[CNAB240HeaderArquivoSicoob.Agencia] = cAgenciaDig[0]; regHeaderArquivo[CNAB240HeaderArquivoSicoob.AgenciaDAC] = cAgenciaDig[1]; regHeaderArquivo[CNAB240HeaderArquivoSicoob.Conta] = cContaDig[0]; regHeaderArquivo[CNAB240HeaderArquivoSicoob.ContaDAC] = cContaDig[1]; regHeaderArquivo[CNAB240HeaderArquivoSicoob.EmpresaNome] = Cedente.Cedente; regHeaderArquivo[CNAB240HeaderArquivoSicoob.Data] = DataHoje; regHeaderArquivo[CNAB240HeaderArquivoSicoob.NumeroLote] = NumeroLote; regHeaderArquivo[CNAB240HeaderArquivoSicoob.ReservadoEmpresa] = Producao ? "REMESSA-PRODUÇÃO" : "REMESSA-TESTE"; Add(regHeaderArquivo); // Header do lote regHeaderLote[CNAB240HeaderLoteSicoob.Lote] = SequencialLote; regHeaderLote[CNAB240HeaderLoteSicoob.InscricaoTipo] = Cedente.Tipo; regHeaderLote[CNAB240HeaderLoteSicoob.InscricaoNumero] = Cedente.DocumentoNumeros; regHeaderLote[CNAB240HeaderLoteSicoob.Agencia] = cAgenciaDig[0]; regHeaderLote[CNAB240HeaderLoteSicoob.AgenciaDAC] = cAgenciaDig[1]; regHeaderLote[CNAB240HeaderLoteSicoob.Conta] = cContaDig[0]; regHeaderLote[CNAB240HeaderLoteSicoob.ContaDAC] = cContaDig[1]; regHeaderLote[CNAB240HeaderLoteSicoob.EmpresaNome] = Cedente.Cedente; regHeaderLote[CNAB240HeaderLoteSicoob.NumeroRemessaRetorno] = NumeroLote; regHeaderLote[CNAB240HeaderLoteSicoob.Data] = DataHoje; Add(regHeaderLote); BoletoInfo boleto; SacadoInfo sacado; Reg <CNAB240SegmentoPSicoob> regP; Reg <CNAB240SegmentoQSicoob> regQ; SequencialRegistro = 1; double ValorTotal = 0; string cConvenio = Cedente.Convenio; string cCodCedente = Cedente.CodCedente; string cNossoNumero; foreach (string n in this.Boletos.NossoNumeros) { boleto = Boletos[n]; sacado = boleto.Sacado; // Define as informações do segmento P regP = new Reg <CNAB240SegmentoPSicoob>(); regP[CNAB240SegmentoPSicoob.Lote] = SequencialLote; regP[CNAB240SegmentoPSicoob.Nregistro] = SequencialRegistro++; regP[CNAB240SegmentoPSicoob.Agencia] = cAgenciaDig[0]; regP[CNAB240SegmentoPSicoob.AgenciaDAC] = cAgenciaDig[1]; regP[CNAB240SegmentoPSicoob.Conta] = cContaDig[0]; regP[CNAB240SegmentoPSicoob.ContaDAC] = cContaDig[1]; cNossoNumero = boleto.NossoNumero; string cDV = Banco_SICOOB.NossoNumero(ref cConvenio, ref cCodCedente, ref cNossoNumero); regP[CNAB240SegmentoPSicoob.NossoNumero] = cNossoNumero += cDV; regP[CNAB240SegmentoPSicoob.Parcela] = boleto.ParcelaNumero; regP[CNAB240SegmentoPSicoob.Modalidade] = CobUtil.GetInt(Cedente.Modalidade); regP[CNAB240SegmentoPSicoob.NumeroDocumento] = boleto.NumeroDocumento; regP[CNAB240SegmentoPSicoob.Vencimento] = boleto.DataVencimento; regP[CNAB240SegmentoPSicoob.ValorDocumento] = boleto.ValorDocumento; if (boleto.ValorMora >= 0.01) { regP[CNAB240SegmentoPSicoob.Juros] = 1; regP[CNAB240SegmentoPSicoob.JurosData] = boleto.DataVencimento.AddDays(1); regP[CNAB240SegmentoPSicoob.JurosMora] = boleto.ValorMora; } else { regP[CNAB240SegmentoPSicoob.Juros] = 0; // isento (bug! antes era 3) } regP[CNAB240SegmentoPSicoob.Especie] = (int)boleto.Especie; regP[CNAB240SegmentoPSicoob.Aceite] = boleto.Aceite; regP[CNAB240SegmentoPSicoob.Emissao] = boleto.DataDocumento; regP[CNAB240SegmentoPSicoob.UsoEmpresaCedente] = boleto.BoletoID; int nDiasBaixa; if (boleto.DiasProtesto > 1) { regP[CNAB240SegmentoPSicoob.ProtestoCodigo] = 1; regP[CNAB240SegmentoPSicoob.ProtestoPrazo] = boleto.DiasProtesto; regP[CNAB240SegmentoPSicoob.BaixaDevolucaoCodigo] = 2; // Não Baixar / Não Devolver // Baixar em no minimo 8 dias apos o protesto baseado na data de geração do arquivo nDiasBaixa = 0; // boleto.DataVencimento.AddDays(boleto.DiasProtesto + 8).Subtract(DateTime.Now).Days; } else { regP[CNAB240SegmentoPSicoob.ProtestoCodigo] = 3; // não protestar regP[CNAB240SegmentoPSicoob.BaixaDevolucaoCodigo] = boleto.DiasBaixa > 0 ? 1 : 2; // 1 => Baixar / Devolver if (boleto.DiasBaixa > 0) { nDiasBaixa = boleto.DataVencimento.AddDays(boleto.DiasBaixa).Subtract(DataHoje).Days; } else { nDiasBaixa = 0; } } if (nDiasBaixa <= 0) { nDiasBaixa = 0; } else if (nDiasBaixa < 5) { nDiasBaixa = 5; } else if (nDiasBaixa > 120) { nDiasBaixa = 120; } if (nDiasBaixa > 0) { regP[CNAB240SegmentoPSicoob.BaixaDevolucaoPrazo] = nDiasBaixa.ToString("000"); } ValorTotal += boleto.ValorDocumento; // Define as informações do segmento Q regQ = new Reg <CNAB240SegmentoQSicoob>(); regQ[CNAB240SegmentoQSicoob.Lote] = SequencialLote; regQ[CNAB240SegmentoQSicoob.Nregistro] = SequencialRegistro++; regQ[CNAB240SegmentoQSicoob.Sacado_Tipo] = boleto.Sacado.Tipo; regQ[CNAB240SegmentoQSicoob.Sacado_Numero] = CobUtil.GetLong(CobUtil.SoNumeros(boleto.Sacado.DocumentoNumeros)); regQ[CNAB240SegmentoQSicoob.Nome] = boleto.Sacado.Sacado; regQ[CNAB240SegmentoQSicoob.Endereco] = boleto.Sacado.Endereco; regQ[CNAB240SegmentoQSicoob.Bairro] = boleto.Sacado.Bairro; regQ[CNAB240SegmentoQSicoob.CEP] = boleto.Sacado.CepNumeros; regQ[CNAB240SegmentoQSicoob.Cidade] = boleto.Sacado.Cidade; regQ[CNAB240SegmentoQSicoob.UF] = boleto.Sacado.UF; long avalista = CobUtil.GetLong(boleto.Sacado.AvalistaNumeros); if (avalista > 0) { regQ[CNAB240SegmentoQSicoob.Avalista_Tipo] = boleto.Sacado.AvalistaTipo; regQ[CNAB240SegmentoQSicoob.Avalista_Numero] = avalista; regQ[CNAB240SegmentoQSicoob.Avalista_Nome] = boleto.Sacado.Avalista; } AddBoleto(regP, boleto); AddBoleto(regQ, boleto); AddOpcionais(boleto); } regTrailerLote[CNAB240TrailerLoteSicoob.Lote] = SequencialLote; regTrailerLote[CNAB240TrailerLoteSicoob.QTD] = SequencialRegistro + 1; // tem que incluir o header regTrailerLote[CNAB240TrailerLoteSicoob.CobrancaQTD] = this.Boletos.Count; regTrailerLote[CNAB240TrailerLoteSicoob.CobrancaValor] = ValorTotal; Add(regTrailerLote); regTrailerArquivo[CNAB240TrailerArquivoSicoob.LotesQTD] = 1; regTrailerArquivo[CNAB240TrailerArquivoSicoob.RegistrosQTD] = itens.Count + 1; Add(regTrailerArquivo); // Gera o Texto de saida da forma padrão return(this.Conteudo); }
/// <summary> /// Gera o aquivo baseado nas coleção de todas informações passada até o momento /// </summary> /// <returns></returns> public override string Remessa() { // Existe algum BUG na executação de template e reflection com ActiveX que dentro do doreach de conteudo da classe e layout acaba por não gerar o arquivo final. // Então, cada linha já será gerada imediatamente em uma String Builder, liberando assim a necessidade de memorizar os itens que iriam conter no arquivo. string[] cBanco = Cedente.Banco.Split('-'); string[] cAgDig = Cedente.Agencia.Split('-'); string[] cCCDig = Cedente.Conta.Split('-'); Bancos banco = (Bancos)CobUtil.GetInt(cBanco[0]); if (banco != Bancos.BRB) { throw new Exception("Esta classe é valida apenas para o BRB"); } regArqHeader[CNAB400BRBHeader.Agencia] = cAgDig[0]; regArqHeader[CNAB400BRBHeader.Conta] = cCCDig[0]; regArqHeader[CNAB400BRBHeader.DataHora] = DataHoje; // Limpa os objetos de saida/entrada Data.Clear(); Clear(); // o sequencial do header é sempre 1 (FIXO) Add(regArqHeader); // Proximo item SequencialRegistro = 2; BoletoInfo boleto; SacadoInfo sacado; Reg <CNAB400BRBRemessa1> regBoleto; double nValor = 0; #if TEST_LOG Log += "Remessa " + Boletos.Count + "!\r\n"; #endif foreach (string n in Boletos.NossoNumeros) { boleto = Boletos[n]; sacado = boleto.Sacado; nValor += boleto.ValorDocumento; #if TEST_LOG Log += string.Format("{0} {1} {2:C}", n, boleto.NossoNumero, boleto.ValorDocumento); #endif regBoleto = new Reg <CNAB400BRBRemessa1>(); regBoleto[CNAB400BRBRemessa1.Agencia] = cAgDig[0]; regBoleto[CNAB400BRBRemessa1.Conta] = cCCDig[0]; regBoleto[CNAB400BRBRemessa1.Sacado_Inscricao] = sacado.DocumentoNumeros; regBoleto[CNAB400BRBRemessa1.Nome] = sacado.Sacado; regBoleto[CNAB400BRBRemessa1.Endereco] = sacado.Endereco; regBoleto[CNAB400BRBRemessa1.Cidade] = sacado.Cidade; regBoleto[CNAB400BRBRemessa1.UF] = sacado.UF; regBoleto[CNAB400BRBRemessa1.CEP] = sacado.CepNumeros; regBoleto[CNAB400BRBRemessa1.Sacado_Tipo] = sacado.Tipo; regBoleto[CNAB400BRBRemessa1.SeuNumero] = boleto.BoletoID; regBoleto[CNAB400BRBRemessa1.NossoNumero] = boleto.NossoNumero; regBoleto[CNAB400BRBRemessa1.Emissao] = boleto.DataDesconto; if (boleto.Especie == Especies.DM) { regBoleto[CNAB400BRBRemessa1.Tipo_Documento] = 21; } else if (boleto.Especie == Especies.NP) { regBoleto[CNAB400BRBRemessa1.Tipo_Documento] = 22; } else if (boleto.Especie == Especies.RC) { regBoleto[CNAB400BRBRemessa1.Tipo_Documento] = 25; } else { regBoleto[CNAB400BRBRemessa1.Tipo_Documento] = 39; } regBoleto[CNAB400BRBRemessa1.DataVencimento] = boleto.DataVencimento; regBoleto[CNAB400BRBRemessa1.Valor] = boleto.ValorDocumento; regBoleto[CNAB400BRBRemessa1.Instrucao1] = boleto.Instrucao1; regBoleto[CNAB400BRBRemessa1.Instrucao2] = boleto.Instrucao2; SequencialRegistro++; // adiciona o boleto convertido em registro AddBoleto(regBoleto, boleto); AddOpcionais(boleto); } // Atualiza o Header com o numero total de registros regArqHeader[CNAB400BRBHeader.Sequencia] = SequencialRegistro - 1; //ShowDumpLine = true; // Gera o Texto de saida da forma padrão return(this.Conteudo); }
/// <summary> /// Inicializa o gerador de layouts de acordo com o cedente, usando a instancia apropriada para cada banco /// </summary> public void Init(CedenteInfo cedente) { string[] cBanco = cedente.Banco.Split('-'); Bancos banco = (Bancos)CobUtil.GetInt(cBanco[0]); if (banco == Bancos.SANTANDER || banco == Bancos.BANESPA_SANTANDER) { if (cedente.Layout == LayoutTipo.CNAB240) { cnab = new CNAB240Santander(); } else { cnab = new CNAB400Santander(); } } else if (banco == Bancos.BRADESCO) { cnab = new CNAB400Bradesco(); } else if (banco == Bancos.ITAU) { cnab = new CNAB400Itau(); } else if (banco == Bancos.BANCO_DO_BRASIL) { cnab = new CNAB400BB(); } else if (banco == Bancos.SICREDI) { cnab = new CNAB400Sicredi(); } else if (banco == Bancos.UniCred) { cnab = new CNAB400UniCred(); } else if (banco == Bancos.BANESTES) // Em homologação { cnab = new CNAB400Banestes(); } else if (banco == Bancos.BRB) // Em homologação { cnab = new CNAB400BRB(); } else if (banco == Bancos.CAIXA_ECONOMICA_FEDERAL) { if (cedente.Layout == LayoutTipo.Auto || cedente.Layout == LayoutTipo.CNAB240) { cnab = new CNAB240Caixa(); } } else if (banco == Bancos.SICOOB) { cnab = new CNAB240Sicoob(); } if (cnab == null) { throw new Exception("Banco " + banco.ToString() + " não implementado para layout " + cedente.Layout); } cnab.Cedente = CobUtil.Clone(cedente) as CedenteInfo; }