public void GerarHeaderArquivoRemessaBradescoCnab400() { var banco = Fabricas.BancoFactory.ObterBanco("237", "2"); var contaBancariaCedente = new ContaBancaria("0534", "7", "2801", "0"); var cedente = new Cedente("4879962", 0, "99.999.999/9999-99", "Razão Social X", contaBancariaCedente, null); var sacado = new Sacado("Sacado Fulano de Tal", "999.999.999-99", new Endereco() { TipoLogradouro = "R", Logradouro = "1", Bairro = "Bairro X", Cidade = "Cidade X", SiglaUf = "XX", Cep = "12345-000", Complemento = "Comp X", Numero = "9" }); var carteira = new CarteiraCobranca { Codigo = "02", BancoEmiteBoleto = false }; var boleto = new Boleto(carteira, cedente, sacado, null) { NumeroDocumento = "55617", ValorBoleto = Convert.ToDecimal(501.81), IdentificadorInternoBoleto = "55617", DataVencimento = new DateTime(2016, 11, 25), Moeda = "9", BancoBoleto = banco }; banco.FormatarBoleto(boleto); var remessa = new RemessaCnab400 { Header = new HeaderRemessaCnab400(boleto, 1, 1), RegistrosDetalhe = new List <DetalheRemessaCnab400>(), Trailer = new TrailerRemessaCnab400(boleto.ValorBoleto, 1) }; var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa); var detalhe = new DetalheRemessaCnab400(boleto, 2); remessa.RegistrosDetalhe.Add(detalhe); var fabricaRemessa = new RemessaFactory(); var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, new List <Boleto>() { boleto }, remessa.RegistrosDetalhe, remessa.Trailer); var linhasEscrever = escritor.EscreverTexto(remessaPronta); const string header = "01REMESSA01COBRANCA 00000000000004879962HOT BEACH SUITES OLIMPIA - EMP237BRADESCO 251116 MX0000002 000001"; Assert.AreEqual(header, remessaPronta.Header); }
public void TestGeracaoArquivoRemessaSicoob() { var database = 2010; var dataatual = 2012; var periodo = 2; var resultado = (dataatual - dataatual) % periodo; var dadosRemessa = new Remessa(Remessa.EnumTipoAmbiemte.Homologacao, EnumCodigoOcorrenciaRemessa.Registro, "2"); var banco = Fabricas.BancoFactory.ObterBanco("756", "0"); var contaBancariaCedente = new ContaBancaria("3249", "2", "7341", "5"); var cedente = new Cedente("999999", "123456", 0, "99.999.999/9999-99", "Razão Social X", contaBancariaCedente, null); var sacado = new Sacado("Sacado Fulano de Tal", "99.999.999/9999-98", new Endereco { TipoLogradouro = "R", Logradouro = "1", Bairro = "Bairro X", Cidade = "Cidade X", SiglaUf = "XX", Cep = "12345-000", Complemento = "Comp X", Numero = "9", }); var carteira = new CarteiraCobranca { Codigo = "1/01" }; var boleto = new Boleto(carteira, cedente, sacado, dadosRemessa) { BancoBoleto = banco, NumeroDocumento = "19", ValorBoleto = (decimal)1000.51, IdentificadorInternoBoleto = "19", DataVencimento = new DateTime(2014, 06, 30), Especie = banco.ObtemEspecieDocumento(EnumEspecieDocumento.DuplicataMercantil), }; var listaBoleto = new List <Boleto>(); listaBoleto.Add(boleto); banco.FormatarBoleto(boleto); #region GERAÇÃO 1 var remessa = new RemessaCnab240(); //var listaDetalhes = new List<DetalheRemessaCnab240>(); remessa.Header = new HeaderRemessaCnab240(listaBoleto.FirstOrDefault(), 1); //var detalheSegmentoP = new DetalheSegmentoPRemessaCnab240(boleto) //{ // CodigoCedente = "123456", // NossoNumero = "123456", // NumeroDocumento = "123456", // CodigoOcorrencia = new CodigoOcorrencia(01), // Especie = banco.ObtemEspecieDocumento(EnumEspecieDocumento.DuplicataMercantil), // Aceite = "N", // DataVencimento = new DateTime(2014, 10, 01), // ValorBoleto = (decimal)100.51, //}; remessa.Lotes = new List <LoteRemessaCnab240> { }; var loteAdd = new LoteRemessaCnab240(); loteAdd.HeaderLote = new HeaderLoteRemessaCnab240(listaBoleto.FirstOrDefault(), 1); loteAdd.TrailerLote = new TrailerLoteRemessaCnab240(1); //loteAdd.RegistrosDetalheSegmentos = new List<DetalheRemessaCnab240>(); //var detalheRemessaAdd = new DetalheRemessaCnab240(); //detalheRemessaAdd.SegmentoP = detalheSegmentoP; //loteAdd.RegistrosDetalheSegmentos.Add(detalheRemessaAdd); remessa.Lotes.Add(loteAdd); remessa.Trailer = new TrailerRemessaCnab240(1, 1); #endregion GERAÇÃO 1 var fabricaRemessa = new RemessaFactory(); var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, loteAdd.HeaderLote, listaBoleto, loteAdd.TrailerLote, remessa.Trailer); var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa); var linhasEscrever = escritor.EscreverTexto(remessaPronta); var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); var data = String.Format("{0}_{1}", DateTime.Now.ToString("ddMMyyyy"), DateTime.Now.ToString("HHmmss")); var nomeArquivo = string.Format("{0}{1}{2}{3}", banco.CodigoBanco, @"_REMESSA_", data, ".txt"); StringBuilder sb = new StringBuilder(); foreach (var linha in linhasEscrever) { sb.AppendLine(linha); } //Assert.Equals(1, 1); File.WriteAllLines($@"{path}\\{nomeArquivo}", linhasEscrever.ToArray()); var esperadoHeader = "75600000 299999999999999 0324920000009999990 RAZÃO SOCIAL X SICOOB 10902201808483100000108100000 "; Assert.IsTrue(linhasEscrever[0].Length == 240 && linhasEscrever[0].Substring(0, 143) == esperadoHeader.Substring(0, 143) && esperadoHeader.Substring(157, esperadoHeader.Length - 157) == linhasEscrever[0].Substring(157, esperadoHeader.Length - 157)); Assert.IsTrue(linhasEscrever[1].Length == 240 && linhasEscrever[1] == "75600011R01 040 2099999999999999 0324920000009999990 Razão Social X 000000011202201800000000 "); Assert.IsTrue(linhasEscrever[2].Length == 240 && linhasEscrever[2] == "7560001300001P 010324920000009999990 00000019-401014 10 220000000000000193006201400000000010005100000 02N12022018030062014000000000000000000000000000000000000000000000000000000000000000000000DOC0000019-4 0000 090000000000 "); Assert.IsTrue(linhasEscrever[3].Length == 240 && linhasEscrever[3] == "7560001300002Q 012099999999999998SACADO FULANO DE TAL 1,9,COMP X BAIRRO X 12345000CIDADE X XX0000000000000000 000 "); Assert.IsTrue(linhasEscrever[4].Length == 240 && linhasEscrever[4] == "75600015 00000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 "); Assert.IsTrue(linhasEscrever[5].Length == 240 && linhasEscrever[5] == "75699999 000001000001000000 "); }
public void TestGerarRemessaPagamento() { var contaBancariaCedente = new ContaBancaria("3249", "2", "7341", "5"); var empresaPagadora = new Cedente("999999", "123456", 0, "99.999.999/9999-99", "Razão Social X", contaBancariaCedente, null); empresaPagadora.EnderecoCedente = new Endereco() { Bairro = "Jardins", Cep = "75690000", Cidade = "Goiabalândia", Complemento = "EDF EXECUTIVO", Logradouro = "Rua x", Numero = "25", SiglaUf = "GO", }; var objEndereco = new Endereco() { Bairro = "Trenzim", Cep = "75690000", Cidade = "Mangalandia", Complemento = "Galho esquerdo", Logradouro = "Rua 3", Numero = "5", SiglaUf = "GO", }; var contaBancariaFavorecido = new BoletoBr.ContaBancaria("4343", "0", "35432", "2"); var favorecido = new BoletoBr.Sacado("012.365.489-01", "1", objEndereco, contaBancariaFavorecido); favorecido.Nome = "RAFAEL TAVEIRA"; var bancoEmpresa = BancoFactory.ObterBanco("756", "0"); var bancoFavorecido = BancoFactory.ObterBanco("237", ""); var pagamento = new BoletoBr.Pagamento() { BancoEmpresa = bancoEmpresa, BancoFavorecido = bancoFavorecido, CodigoBanco = bancoEmpresa.CodigoBanco, CodigoBancoFavorecido = bancoFavorecido.CodigoBanco, CodigoCamaraCentralizadora = "018", CodigoFinalidadeDoc = "", CodigoFinalidadeTed = "5", FinalidadePagamento = "CC", DataVencimento = new DateTime(2021, 4, 21), Empresa = empresaPagadora, Favorecido = favorecido, ValorPagamento = 5M, ValorDesconto = 0, ValorJurosMora = 0, ValorMulta = 0, CodigoConvenio = "7980171", SeuNumero = "1015", TipoServico = "0", FormaDePagamento = "01", FormaDeLancamento = "03", ValorTitulo = 5M, CodBarras = "24691859100000299845004110028796200000000150" }; var remessa = new RemessaCnab240 { Header = new HeaderRemessaCnab240(pagamento, 1) }; var loteRemessa = new LoteRemessaCnab240 { HeaderLote = new HeaderLoteRemessaCnab240(pagamento, 1), TrailerLote = new TrailerLoteRemessaCnab240(4) }; remessa.Trailer = new TrailerRemessaCnab240(1, 6); var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessaPagamento(remessa); var listaBoletoBrRemessa = new List <Pagamento>() { pagamento }; var fabricaRemessa = new RemessaFactory(); var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, loteRemessa.HeaderLote, listaBoletoBrRemessa, loteRemessa.TrailerLote, remessa.Trailer); var linhasEscrever = escritor.EscreverTexto(remessaPronta); StringBuilder sb = new StringBuilder(); foreach (var linha in linhasEscrever) { sb.AppendLine(linha); } }
public void TestGeracaoArquivoRemessaSicoob() { var database = 2010; var dataatual = 2012; var periodo = 2; var resultado = (dataatual - dataatual) % periodo; var tiporemessa = new Remessa(Remessa.EnumTipoAmbiemte.Homologacao, EnumCodigoOcorrenciaRemessa.Registro, "2"); var banco = Fabricas.BancoFactory.ObterBanco("246", "0"); var contaBancariaCedente = new ContaBancaria("0001", "9", "107228", "5"); var cedente = new Cedente("28796", "1234", 2, "99.999.999/9999-99", "Razão Social X", contaBancariaCedente, null); var sacado = new Sacado("Sacado Fulano de Tal", "999.999.999-99", new Endereco() { TipoLogradouro = "R", Logradouro = "1", Bairro = "Bairro X", Cidade = "Cidade X", SiglaUf = "XX", Cep = "12345-000", Complemento = "Comp X", Numero = "9" }); var carteira = new CarteiraCobranca { Codigo = "110" }; var boleto = new Boleto(carteira, cedente, sacado, tiporemessa) { NumeroDocumento = "106", ValorBoleto = Convert.ToDecimal(465.82), IdentificadorInternoBoleto = "0004309540", DataVencimento = new DateTime(2016, 11, 30), BancoBoleto = banco, Especie = banco.ObtemEspecieDocumento(EnumEspecieDocumento.DuplicataMercantil), JurosMora = 2.5M, DataJurosMora = DateTime.Now }; boleto.PercentualJurosMora = decimal.Round(boleto.PercentualJurosMora.GetValueOrDefault(), 4); var listaBoleto = new List <Boleto>(); listaBoleto.Add(boleto); banco.FormatarBoleto(boleto); #region GERAÇÃO 1 var remessa = new RemessaCnab240(); //var listaDetalhes = new List<DetalheRemessaCnab240>(); remessa.Header = new HeaderRemessaCnab240(listaBoleto.FirstOrDefault(), 1); //var detalheSegmentoP = new DetalheSegmentoPRemessaCnab240(boleto) //{ // CodigoCedente = "123456", // NossoNumero = "123456", // NumeroDocumento = "123456", // CodigoOcorrencia = new CodigoOcorrencia(01), // Especie = banco.ObtemEspecieDocumento(EnumEspecieDocumento.DuplicataMercantil), // Aceite = "N", // DataVencimento = new DateTime(2014, 10, 01), // ValorBoleto = (decimal)100.51, //}; remessa.Lotes = new List <LoteRemessaCnab240> { }; var loteAdd = new LoteRemessaCnab240(); loteAdd.HeaderLote = new HeaderLoteRemessaCnab240(listaBoleto.FirstOrDefault(), 1); loteAdd.TrailerLote = new TrailerLoteRemessaCnab240(1); //loteAdd.RegistrosDetalheSegmentos = new List<DetalheRemessaCnab240>(); //var detalheRemessaAdd = new DetalheRemessaCnab240(); //detalheRemessaAdd.SegmentoP = detalheSegmentoP; //loteAdd.RegistrosDetalheSegmentos.Add(detalheRemessaAdd); remessa.Lotes.Add(loteAdd); remessa.Trailer = new TrailerRemessaCnab240(1, 1); #endregion GERAÇÃO 1 var fabricaRemessa = new RemessaFactory(); var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, loteAdd.HeaderLote, listaBoleto, loteAdd.TrailerLote, remessa.Trailer); var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa); var linhasEscrever = escritor.EscreverTexto(remessaPronta); var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); var data = String.Format("{0}_{1}", DateTime.Now.ToString("ddMMyyyy"), DateTime.Now.ToString("HHmmss")); var nomeArquivo = string.Format("{0}{1}{2}{3}", banco.CodigoBanco, @"_REMESSA_", data, ".txt"); StringBuilder sb = new StringBuilder(); foreach (var linha in linhasEscrever) { sb.AppendLine(linha); } File.WriteAllLines($@"{path}\\{nomeArquivo}", linhasEscrever.ToArray()); }
public static string GerarArquivoRemessa(CarteiraBoleto carteiraBoleto, SacadoBoleto sacado, decimal valor, DateTime dataVencimento, string numeroDocumento) { try { var listaBoletoBrRemessa = new List <Boleto>(); var sequenciaRemessaCarteiraBoleto = 1; try { // Transforma boletos e adiciona lançamentos na lista listaBoletoBrRemessa.Add(TransformaDeFormatoBoletoParaFormatoBoletoBr(carteiraBoleto, sacado, valor, dataVencimento, numeroDocumento)); } catch (Exception ex) { throw ex; } #region Validações (Banco e Carteira) /* Garantir que todos os boletos pertencem a mesmo banco e carteira de boleto */ var bancosEncontrados = listaBoletoBrRemessa.GroupBy(gb => gb.BancoBoleto.CodigoBanco); if (bancosEncontrados.Count() > 1) { throw new Exception( "Há mais de 1 banco associado aos boletos que foram informados para geração de remessa."); } var carteirasCobrancaEncontradas = listaBoletoBrRemessa.GroupBy(gb => gb.CarteiraCobranca.Codigo); if (carteirasCobrancaEncontradas.Count() > 1) { throw new Exception( "Há mais de 1 tipo de carteira de cobrança associado aos boletos que foram informados para geração de remessa."); } if (listaBoletoBrRemessa.Any(qry => qry.DataVencimento.Date < DateTime.Now.Date)) { throw new Exception( "Há boletos com data de vencimento menor que a data atual. Impossível continuar."); } #endregion var carteiraCobrancaPadrao = listaBoletoBrRemessa.First().CarteiraCobranca; var boletoPadrao = listaBoletoBrRemessa.First(); var fabricaRemessa = new RemessaFactory(); #region #Criação do Diretório e Arquivo.REM var data = $"{DateTime.Now.ToString("ddMMyy")}"; var dataBradesco = $"{DateTime.Now.ToString("ddMM")}"; string nomeArquivo = null; // Se for BRADESCO formata nome do arquivo para CBDDMM??.REM if (boletoPadrao.BancoBoleto.CodigoBanco == "237") { nomeArquivo = $"{"CB"}{dataBradesco}{"TS"}{".REM"}"; } else { /* * C -> Cobrança * Data da geração em formato DDMMAA * G -> Geral */ nomeArquivo = $"{"C"}{data}{"G"}{".REM"}"; } var dir = Directory.CreateDirectory(Path.Combine( AppDomain.CurrentDomain.BaseDirectory, boletoPadrao.BancoBoleto.CodigoBanco)); var caminho = dir.FullName + "\\" + nomeArquivo; #endregion #region #Informações Essenciais /* Usado no Header do Arquivo * Cada arquivo enviado a CAIXA deverá conter um número único. */ // TODO: Criar tabela para controlar quantidade de arquivos remessa enviados ao banco. const int sequencialArquivo = 1; /* Usado no Header de Lote * Para cada remessa enviada deverá ser acrescido em 1, se a remessa for recusada a numeração não poderá ser aproveitada. */ // TODO: Criar tabela para controlar quantidade de arquivos remessa gerados. int sequencialRemessa = sequenciaRemessaCarteiraBoleto; /* Usado no Trailer de Lote * Conta a quantidade de itens na lista multiplica por 2 ( cada boleto terá um detalhe segmento P e um detalhe segmento Q ) e adiciona + 2 (Header do Lote e Trailer do Lote) */ // TODO: Atualmente só considera 1 lote de informações no arquivo. var qtdRegistrosNoLote = (listaBoletoBrRemessa.Count * 2) + 2; /* Usado no Trailer do Arquivo */ // TODO: Atualmente só gera 1 lote de informações no arquivo. const int qtdLotesArquivo = 1; // Conta a quantidade de itens na lista multiplica por 2 ( cada boleto terá um detalhe segmento P e um detalhe segmento Q ) e adiciona + 4 (Header do Arquivo, Header do Lote, Trailer do Lote e Trailer do Arquivo) var qtdRegistrosNoArquivoCnab240 = (listaBoletoBrRemessa.Count * 2) + 4; // Conta a quantidade de itens na lista e adiciona + 2 (Header do Arquivo + Trailer do Arquivo) var qtdRegistrosNoArquivoCnab400 = listaBoletoBrRemessa.Count(); qtdRegistrosNoArquivoCnab400 += 2; // Pega número de linhas de instruções de cada boleto // No caso do Bradesco desconsiderar a qtd de instruções // Itau desconsiderar // HSBC desconsiderar var qtdRegInstrucoes = 0; if (boletoPadrao.BancoBoleto.CodigoBanco != "237" && boletoPadrao.BancoBoleto.CodigoBanco != "341" && boletoPadrao.BancoBoleto.CodigoBanco != "399") { qtdRegInstrucoes += listaBoletoBrRemessa.Sum(boleto => boleto.InstrucoesDoBoleto.Count); } Boleto primeiroBoletoDaLista = listaBoletoBrRemessa.First(); #endregion #region CNAB240 // Gera Remessa Cnab240 if (carteiraCobrancaPadrao.Tipo == "CNAB240") { var remessa = new RemessaCnab240 { Header = new HeaderRemessaCnab240(primeiroBoletoDaLista, sequencialRemessa) }; var loteRemessa = new LoteRemessaCnab240 { HeaderLote = new HeaderLoteRemessaCnab240(primeiroBoletoDaLista, sequencialRemessa), TrailerLote = new TrailerLoteRemessaCnab240(qtdRegistrosNoLote) }; remessa.Trailer = new TrailerRemessaCnab240(qtdLotesArquivo, qtdRegistrosNoArquivoCnab240); var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa); var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, loteRemessa.HeaderLote, listaBoletoBrRemessa, loteRemessa.TrailerLote, remessa.Trailer); var linhasEscrever = escritor.EscreverTexto(remessaPronta); // Escreve em UTF-8 File.WriteAllLines(caminho, linhasEscrever.ToArray(), Encoding.GetEncoding(1252)); } #endregion #region CNAB400 // Gera Remessa Cnab400 if (carteiraCobrancaPadrao.Tipo == "CNAB400") { var remessa = new RemessaCnab400 { Header = new HeaderRemessaCnab400(primeiroBoletoDaLista, sequencialRemessa, 1), RegistrosDetalhe = new List <DetalheRemessaCnab400>(), Trailer = new TrailerRemessaCnab400(listaBoletoBrRemessa.Sum(s => s.ValorBoleto), qtdRegistrosNoArquivoCnab400 + qtdRegInstrucoes) }; var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa); var sequencial = 2; DetalheRemessaCnab400 detalhe; foreach (var boletoRemessa400 in listaBoletoBrRemessa) { detalhe = new DetalheRemessaCnab400(boletoRemessa400, sequencial); remessa.RegistrosDetalhe.Add(detalhe); sequencial++; } var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, listaBoletoBrRemessa, remessa.RegistrosDetalhe, remessa.Trailer); var linhasEscrever = escritor.EscreverTexto(remessaPronta); var linhasTratadasEscrever = new List <string>(); foreach (var linha in linhasEscrever) { /*/ * -> Codificação ASCII 8-bit (Estendido) * Encoding.GetEncoding(437) * * -> Codificação ASCII 7-bit * Encoding.GetEncoding(1252) * * /*/ if (boletoPadrao.BancoBoleto.CodigoBanco == "756") { var bytes = System.Text.Encoding.Default.GetBytes(linha); var linhaConvertida = System.Text.Encoding.Default.GetString(bytes); var linhaTratada = linhaConvertida; linhasTratadasEscrever.Add(linhaTratada); } else { var bytes = System.Text.Encoding.GetEncoding("iso-8859-8").GetBytes(linha); var linhaConvertida = System.Text.Encoding.UTF8.GetString(bytes); var linhaTratada = linhaConvertida; linhasTratadasEscrever.Add(linhaTratada); } } if (boletoPadrao.BancoBoleto.CodigoBanco == "756") { File.WriteAllLines(caminho, linhasTratadasEscrever, Encoding.Default); } else { File.WriteAllLines(caminho, linhasTratadasEscrever); } } #endregion return(caminho); } catch (Exception) { throw; } }
public static string GerarArquivoRemessaPagamento(CarteiraBoleto carteiraBoleto, SacadoBoleto sacado, decimal valor, DateTime dataVencimento, string numeroDocumento) { try { var listaBoletoBrRemessa = new List <Pagamento>(); var sequenciaRemessaCarteiraBoleto = 1; try { // Transforma boletos e adiciona lançamentos na lista listaBoletoBrRemessa.Add(TransformaDeFormatoPagamentoParaFormatoBoletoBr(carteiraBoleto, sacado, valor, dataVencimento, numeroDocumento)); } catch (Exception ex) { throw ex; } #region Validações (Banco e Carteira) /* Garantir que todos os boletos pertencem a mesmo banco e carteira de boleto */ var bancosEncontrados = listaBoletoBrRemessa.GroupBy(gb => gb.BancoEmpresa.CodigoBanco); if (bancosEncontrados.Count() > 1) { throw new Exception( "Há mais de 1 banco associado aos boletos que foram informados para geração de remessa."); } if (listaBoletoBrRemessa.Any(qry => qry.DataVencimento < DateTime.Now.Date)) { throw new Exception( "Há boletos com data de vencimento menor que a data atual. Impossível continuar."); } #endregion var boletoPadrao = listaBoletoBrRemessa.First(); var fabricaRemessa = new RemessaFactory(); #region #Criação do Diretório e Arquivo.REM var data = $"{DateTime.Now.ToString("ddMMyy")}"; var dataBradesco = $"{DateTime.Now.ToString("ddMM")}"; string nomeArquivo = null; // Se for BRADESCO formata nome do arquivo para CBDDMM??.REM if (boletoPadrao.CodigoBanco == "237") { nomeArquivo = $"{"CB"}{dataBradesco}{"TS"}{".REM"}"; } else { /* * C -> Cobrança * Data da geração em formato DDMMAA * G -> Geral */ nomeArquivo = $"{"C"}{data}{"G"}{".REM"}"; } var dir = Directory.CreateDirectory(Path.Combine( AppDomain.CurrentDomain.BaseDirectory, boletoPadrao.CodigoBanco)); var caminho = dir.FullName + "\\" + nomeArquivo; #endregion #region #Informações Essenciais /* Usado no Header do Arquivo * Cada arquivo enviado a CAIXA deverá conter um número único. */ // TODO: Criar tabela para controlar quantidade de arquivos remessa enviados ao banco. //const int sequencialArquivo = 1; /* Usado no Header de Lote * Para cada remessa enviada deverá ser acrescido em 1, se a remessa for recusada a numeração não poderá ser aproveitada. */ // TODO: Criar tabela para controlar quantidade de arquivos remessa gerados. int sequencialRemessa = sequenciaRemessaCarteiraBoleto; /* Usado no Trailer de Lote * Conta a quantidade de itens na lista multiplica por 2 ( cada boleto terá um detalhe segmento P e um detalhe segmento Q ) e adiciona + 2 (Header do Lote e Trailer do Lote) */ // TODO: Atualmente só considera 1 lote de informações no arquivo. var qtdSegmantos = carteiraBoleto.ValorMulta > 0 && carteiraBoleto.BancoGeraBoleto ? 3 : 2; var qtdRegistrosNoLote = (listaBoletoBrRemessa.Count * qtdSegmantos) + 2; /* Usado no Trailer do Arquivo */ // TODO: Atualmente só gera 1 lote de informações no arquivo. const int qtdLotesArquivo = 1; // Conta a quantidade de itens na lista multiplica por 2 ( cada boleto terá um detalhe segmento P e um detalhe segmento Q ) e adiciona + 4 (Header do Arquivo, Header do Lote, Trailer do Lote e Trailer do Arquivo) var qtdRegistrosNoArquivoCnab240 = (listaBoletoBrRemessa.Count * 2) + 4; // Conta a quantidade de itens na lista e adiciona + 2 (Header do Arquivo + Trailer do Arquivo) var qtdRegistrosNoArquivoCnab400 = listaBoletoBrRemessa.Count(); qtdRegistrosNoArquivoCnab400 += 2; Pagamento primeiroPagamentoDaLista = listaBoletoBrRemessa.First(); #endregion #region CNAB240 // Gera Remessa Cnab240 var remessa = new RemessaCnab240 { Header = new HeaderRemessaCnab240(primeiroPagamentoDaLista, sequencialRemessa) }; var loteRemessa = new LoteRemessaCnab240 { HeaderLote = new HeaderLoteRemessaCnab240(primeiroPagamentoDaLista, sequencialRemessa), TrailerLote = new TrailerLoteRemessaCnab240(qtdRegistrosNoLote) }; remessa.Trailer = new TrailerRemessaCnab240(qtdLotesArquivo, qtdRegistrosNoArquivoCnab240); var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa); var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, loteRemessa.HeaderLote, listaBoletoBrRemessa, loteRemessa.TrailerLote, remessa.Trailer); var linhasEscrever = escritor.EscreverTexto(remessaPronta); // Escreve em UTF-8 File.WriteAllLines(caminho, linhasEscrever.ToArray(), Encoding.GetEncoding(1252)); #endregion return(caminho); } catch (Exception) { throw; } }