private void LerLinhaDoArquivoRetornoCNAB240(string registro) { var tipoRegistro = registro.Substring(7, 1); var tipoSegmento = registro.Substring(13, 1); if (tipoRegistro == "0") { //REGISTRO HEADER DO ARQUIVO RETORNO Banco.LerHeaderRetornoCNAB240(this, registro); return; } if (tipoRegistro == "3" & tipoSegmento == "T") { // Segmento T - Indica um novo boleto var boleto = new Boleto(this.Banco, _ignorarCarteiraBoleto); Banco.LerDetalheRetornoCNAB240SegmentoT(ref boleto, registro); Boletos.Add(boleto); return; } if (tipoRegistro == "3" & tipoSegmento == "U") { // Segmento U - Continuação do segmento T anterior (localiza o último boleto da lista) var boleto = Boletos.LastOrDefault(); // Se não encontrou um boleto válido, ocorreu algum problema, pois deveria ter criado um novo objeto no registro que foi analisado anteriormente. if (boleto == null) { throw new Exception("Objeto boleto não identificado"); } Banco.LerDetalheRetornoCNAB240SegmentoU(ref boleto, registro); return; } }
public Boletos LerArquivoRetorno(Stream arquivo) { Boletos.Clear(); try { if (TipoArquivo == TipoArquivo.CNAB400 && Banco.IdsRetornoCnab400RegistroDetalhe.Count == 0) { throw new Exception("Banco " + Banco.Codigo.ToString() + " não implementou os Ids do Registro Retorno do CNAB400."); } using (StreamReader arquivoRetorno = new StreamReader(arquivo, System.Text.Encoding.UTF8)) { while (!arquivoRetorno.EndOfStream) { var registro = arquivoRetorno.ReadLine(); if (TipoArquivo == TipoArquivo.CNAB240) { LerLinhaDoArquivoRetornoCNAB240(registro); } if (TipoArquivo == TipoArquivo.CNAB400) { LerLinhaDoArquivoRetornoCNAB400(registro); } } } } catch (Exception ex) { throw new Exception("Erro ao ler arquivo.", ex); } return(Boletos); }
public bool LerRetorno(int formatoArquivo, Stream nomeArquivo, ref string mensagemErro) { try { if (boletos.Banco == null) { mensagemErro = "Banco não definido."; return(false); } if (formatoArquivo != 0 & formatoArquivo != 1) { // Formato do Arquivo - CNAB240 = 0 / CNAB400 = 1 mensagemErro = "Tipo do arquivo inválido: 0-CNAB240, 1-CNAB400"; return(false); } boletos.Clear(); var arquivoRetorno = new ArquivoRetorno(boletos.Banco, (TipoArquivo)formatoArquivo); boletos = arquivoRetorno.LerArquivoRetorno(nomeArquivo); return(true); } catch (Exception ex) { while (ex != null) { mensagemErro += ex.Message + Environment.NewLine; ex = ex.InnerException; } return(false); } }
private void LerArquivoRetorno2(Stream arquivo) { Boletos.Clear(); try { using (StreamReader arquivoRetorno = new StreamReader(arquivo, System.Text.Encoding.UTF8)) { if (arquivoRetorno.EndOfStream) { return; } //busca o primeiro registro do arquivo var registro = arquivoRetorno.ReadLine(); //atribui o tipo de acordo com o conteúdo do arquivo TipoArquivo = registro.Length == 240 ? TipoArquivo.CNAB240 : TipoArquivo.CNAB400; if (TipoArquivo == TipoArquivo.CNAB400 && Banco.IdsRetornoCnab400RegistroDetalhe.Count == 0) { throw new Exception("Banco " + Banco.Codigo.ToString() + " não implementou os Ids do Registro Retorno do CNAB400."); } //instacia o banco de acordo com o codigo/id do banco presente no arquivo de retorno Banco = BoletoNetCore.Banco.Instancia(Utils.ToInt32(registro.Substring(TipoArquivo == TipoArquivo.CNAB240 ? 0 : 76, 3))); //define a posicao do reader para o início arquivoRetorno.DiscardBufferedData(); arquivoRetorno.BaseStream.Seek(0, SeekOrigin.Begin); while (!arquivoRetorno.EndOfStream) { registro = arquivoRetorno.ReadLine(); if (TipoArquivo == TipoArquivo.CNAB240) { LerLinhaDoArquivoRetornoCNAB240(registro); } else if (TipoArquivo == TipoArquivo.CNAB400) { LerLinhaDoArquivoRetornoCNAB400(registro); } } } } catch (Exception ex) { throw new Exception("Erro ao ler arquivo.", ex); } }
public static Stream GerarRemessa(this Boletos boletos, int numArquivoRemessa, TipoArquivo tipoArquivo = TipoArquivo.CNAB240) { ArquivoRemessa rem = new ArquivoRemessa(boletos.Banco, TipoArquivo.CNAB240, numArquivoRemessa); MemoryStream ms = new MemoryStream(2048); try { rem.GerarArquivoRemessa(boletos, ms, false); ms.Position = 0; return(ms as Stream); } catch (Exception) { return(null); } }
public static byte[] ImprimirCarnePdf(this Boletos listaBoletos) { return(new BoletoCarne().BoletoPdf(listaBoletos)); }
public void GerarArquivoRemessa(Boletos boletos, Stream stream, bool fecharRemessa = true) { try { int numeroRegistroGeral = 0, numeroRegistroCobrancaSimples = 0, numeroRegistroCobrancaVinculada = 0, numeroRegistroCobrancaCaucionada = 0, numeroRegistroCobrancaDescontada = 0; decimal valorBoletoGeral = 0, valorCobrancaSimples = 0, valorCobrancaVinculada = 0, valorCobrancaCaucionada = 0, valorCobrancaDescontada = 0; int tamanhoRegistro; switch (this.TipoArquivo) { case TipoArquivo.CNAB240: tamanhoRegistro = 240; break; case TipoArquivo.CNAB400: tamanhoRegistro = 400; break; case TipoArquivo.CNAB150: tamanhoRegistro = 150; break; default: throw new Exception("Layout não encontrado"); } StreamWriter arquivoRemessa = new StreamWriter(stream, Encoding.GetEncoding("ISO-8859-1")); string strline = String.Empty; // Header do Arquivo strline = Banco.GerarHeaderRemessa(this.TipoArquivo, this.NumeroArquivoRemessa, ref numeroRegistroGeral); if (String.IsNullOrWhiteSpace(strline)) { throw new Exception("Registro HEADER obrigatório."); } strline = FormataLinhaArquivoCNAB(strline, tamanhoRegistro); arquivoRemessa.WriteLine(strline); foreach (Boleto boleto in boletos) { // Todos os boletos da coleção devem ser do mesmo banco da geração do arquivo remessa // A solução aqui é forçar essa relação, mas talvez seja melhor subir uma exceção detalhando o erro. boleto.Banco = this.Banco; // Detalhe do arquivo strline = boleto.Banco.GerarDetalheRemessa(this.TipoArquivo, boleto, ref numeroRegistroGeral); if (String.IsNullOrWhiteSpace(strline)) { throw new Exception("Registro DETALHE obrigatório."); } strline = FormataLinhaArquivoCNAB(strline, tamanhoRegistro); arquivoRemessa.WriteLine(strline); // Ajusta Totalizadores valorBoletoGeral += boleto.ValorTitulo; switch (boleto.TipoCarteira) { case TipoCarteira.CarteiraCobrancaSimples: numeroRegistroCobrancaSimples++; valorCobrancaSimples += boleto.ValorTitulo; break; case TipoCarteira.CarteiraCobrancaVinculada: numeroRegistroCobrancaVinculada++; valorCobrancaVinculada += boleto.ValorTitulo; break; case TipoCarteira.CarteiraCobrancaCaucionada: numeroRegistroCobrancaCaucionada++; valorCobrancaCaucionada += boleto.ValorTitulo; break; case TipoCarteira.CarteiraCobrancaDescontada: numeroRegistroCobrancaDescontada++; valorCobrancaDescontada += boleto.ValorTitulo; break; case TipoCarteira.CarteiraCobrancaDebito: numeroRegistroCobrancaSimples++; valorCobrancaSimples += boleto.ValorTitulo; valorCobrancaDescontada += boleto.ValorIOF; break; default: break; } } // Trailler do Arquivo strline = Banco.GerarTrailerRemessa(this.TipoArquivo, this.NumeroArquivoRemessa, ref numeroRegistroGeral, valorBoletoGeral, numeroRegistroCobrancaSimples, valorCobrancaSimples, numeroRegistroCobrancaVinculada, valorCobrancaVinculada, numeroRegistroCobrancaCaucionada, valorCobrancaCaucionada, numeroRegistroCobrancaDescontada, valorCobrancaDescontada); if (!String.IsNullOrWhiteSpace(strline)) { strline = FormataLinhaArquivoCNAB(strline, tamanhoRegistro); arquivoRemessa.WriteLine(strline); } if (fecharRemessa) { arquivoRemessa.Close(); arquivoRemessa.Dispose(); arquivoRemessa = null; } else { arquivoRemessa.Flush(); } } catch (Exception ex) { throw new Exception("Erro ao gerar arquivo remessa.", ex); } }
private void LerLinhaDoArquivoRetornoCNAB400(string registro) { // Identifica o tipo do registro (primeira posição da linha) var tipoRegistro = registro.Substring(0, 1); // Registro HEADER if (tipoRegistro == "0") { Banco.LerHeaderRetornoCNAB400(registro); return; } // Registro TRAILER if (tipoRegistro == "9") { Banco.LerTrailerRetornoCNAB400(registro); return; } // Se o registro não estiver na lista a ser processada pelo banco selecionado, ignora o registro if (!Banco.IdsRetornoCnab400RegistroDetalhe.Contains(tipoRegistro)) { return; } // O primeiro ID da lista, identifica um novo boleto. bool novoBoleto = false; if (tipoRegistro == Banco.IdsRetornoCnab400RegistroDetalhe.First()) { novoBoleto = true; } // Se for um novo boleto, cria um novo objeto, caso contrário, seleciona o último boleto // Estamos considerando que, quando houver mais de um registro para o mesmo boleto, no arquivo retorno, os registros serão apresentados na sequencia. Boleto boleto; if (novoBoleto) { boleto = new Boleto(this.Banco, _ignorarCarteiraBoleto); } else { boleto = Boletos.Last(); // Se não encontrou um boleto válido, ocorreu algum problema, pois deveria ter criado um novo objeto no registro que foi analisado anteriormente. if (boleto == null) { throw new Exception("Objeto boleto não identificado"); } } // Identifica o tipo de registro que deve ser analisado pelo Banco. switch (tipoRegistro) { case "1": Banco.LerDetalheRetornoCNAB400Segmento1(ref boleto, registro); break; case "7": Banco.LerDetalheRetornoCNAB400Segmento7(ref boleto, registro); break; default: break; } // Se for um novo boleto, adiciona na lista de boletos. if (novoBoleto) { Boletos.Add(boleto); } }
public byte[] BoletoPdf(BoletoNetCore.Boletos listaBoletos) { this.listaBoletos = listaBoletos; return(this.GeneratePdf()); }
/// <summary> /// /// </summary> /// <param name="boletos"></param> /// <returns></returns> public static byte[] ImprimirLoteHtml(this Boletos boletos) { throw new NotImplementedException(); }