public void CampoLivre_Sicoob() { Boleto blt = new Boleto(); string cl; // Logica Unica! // Mas vale lembrar que um dos requisitos no NossoNumero é iniciar sempre em '1' cl = Banco_SICOOB.CampoLivre(blt, "1", "1", "2222", "33", "7654321", "1234567"); Console.WriteLine( "Campo Livre: " + cl + " Agencia/Conta: " + blt.AgenciaConta + " Nosso Número: " + blt.NossoNumeroExibicao); Assert.IsTrue(cl == "1222233765432112345670001", "Erro"); }
/// <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); }