forked from BoletoNet/boletonet
-
Notifications
You must be signed in to change notification settings - Fork 4
/
ArquivoRemessaCNAB400.cs
105 lines (92 loc) · 4.39 KB
/
ArquivoRemessaCNAB400.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
namespace BoletoNet
{
internal class ArquivoRemessaCNAB400 : AbstractArquivoRemessa, IArquivoRemessa
{
#region Construtores
public ArquivoRemessaCNAB400()
{
this.TipoArquivo = TipoArquivo.CNAB400;
}
#endregion
#region Métodos de instância
/// <summary>
/// Método que fará a verificação se a classe está devidamente implementada para a geração da Remessa
/// </summary>
public override bool ValidarArquivoRemessa(string numeroConvenio, IBanco banco, Cedente cedente, Boletos boletos, int numeroArquivoRemessa, out string mensagem)
{
try
{
bool vRetorno = true;
string vMsg = string.Empty;
//
foreach (Boleto boleto in boletos)
{
string vMsgBol = string.Empty;
bool vRetBol = boleto.Banco.ValidarRemessa(this.TipoArquivo, numeroConvenio, banco, cedente, boletos, numeroArquivoRemessa, out vMsgBol);
if (!vRetBol && !String.IsNullOrEmpty(vMsgBol))
{
vMsg += vMsgBol;
vRetorno = vRetBol;
}
}
//
mensagem = vMsg;
return vRetorno;
}
catch (Exception ex)
{
throw ex;
}
}
public override void GerarArquivoRemessa(string numeroConvenio, IBanco banco, Cedente cedente, Boletos boletos, Stream arquivo, int numeroArquivoRemessa)
{
try
{
int numeroRegistro = 2;
string strline;
decimal vltitulostotal = 0; //Uso apenas no registro TRAILER do banco Santander - jsoda em 09/05/2012 - Add no registro TRAILER do banco Banrisul - sidneiklein em 08/08/2013
StreamWriter incluiLinha = new StreamWriter(arquivo, Encoding.GetEncoding("ISO-8859-1"));
cedente.Carteira = boletos[0].Carteira;
strline = banco.GerarHeaderRemessa(numeroConvenio, cedente, TipoArquivo.CNAB400, numeroArquivoRemessa);
incluiLinha.WriteLine(strline);
foreach (Boleto boleto in boletos)
{
boleto.Banco = banco;
strline = boleto.Banco.GerarDetalheRemessa(boleto, numeroRegistro, TipoArquivo.CNAB400);
incluiLinha.WriteLine(strline);
vltitulostotal += boleto.ValorBoleto; //Uso apenas no registro TRAILER do banco Santander - jsoda em 09/05/2012 - Add no registro TRAILER do banco Banrisul - sidneiklein em 08/08/2013
numeroRegistro++;
// 85 - CECRED
if (banco.Codigo == 85) {
if (boleto.PercMulta > 0 || boleto.ValorMulta > 0) {
Banco_Cecred _banco = new Banco_Cecred();
string linhaCECREDRegistroDetalhe5 = _banco.GerarRegistroDetalhe5(boleto, numeroRegistro, TipoArquivo.CNAB400);
incluiLinha.WriteLine(linhaCECREDRegistroDetalhe5);
numeroRegistro++;
}
}
if ((boleto.Instrucoes != null && boleto.Instrucoes.Count > 0) || (boleto.Sacado.Instrucoes != null && boleto.Sacado.Instrucoes.Count > 0))
{
strline = boleto.Banco.GerarMensagemVariavelRemessa(boleto, ref numeroRegistro, TipoArquivo.CNAB400);
if (!string.IsNullOrEmpty(strline) && !string.IsNullOrWhiteSpace(strline))
incluiLinha.WriteLine(strline);
}
}
strline = banco.GerarTrailerRemessa(numeroRegistro, TipoArquivo.CNAB400, cedente, vltitulostotal);
incluiLinha.WriteLine(strline);
incluiLinha.Close();
incluiLinha.Dispose(); // Incluido por Luiz Ponce 07/07/2012.
incluiLinha = null; // Incluido por Luiz Ponce 07/07/2012.
}
catch (Exception ex)
{
throw new Exception("Erro ao gerar arquivo remessa.", ex);
}
}
#endregion
}
}