-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathUtilFunc.cs
118 lines (102 loc) · 5.59 KB
/
UtilFunc.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
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Impactro.Cobranca;
using Impactro.Layout;
using System.IO;
namespace Test
{
[TestClass]
public class Sicredi
{
CedenteInfo Cedente;
[TestInitialize]
public void Init()
{
Cedente = new CedenteInfo();
Cedente.Cedente = "TESTE QUALQUER LTDA";
Cedente.CNPJ = "12.345.678/0001-99";
Cedente.Cedente = "Exemplo de empresa cedente";
Cedente.Banco = "748-2";
Cedente.Agencia = "4444";
Cedente.Conta = Cedente.CodCedente = "55555";
Cedente.Modalidade = "04"; // posto
Cedente.Layout = LayoutTipo.CNAB400;
}
[TestMethod, TestCategory("Remessa")]
public void Remessa_Sicredi()
{
LayoutBancos lb = new LayoutBancos();
lb.Init(Cedente);
// Somente apos inicializar, pode-se definir alguns valores!
lb.DataHoje = Util.DataTeste; // Data a ser usada no header da remessa, para dar sempre o mesmo resultado nos testes
lb.Lote = 1234; // apenas para sempre gerar o mesmo numero de lote a cada teste
// E em seguida adiciona os boletos
Util.AddBoletos(lb);
// Exibir as informações de DUMP ajuda a char os erros e diferenças
// lb.ShowDumpLine = true;
// Mas atenção, a geração do nosso numero usa o ANO atual como parametro
// Alguns clientes usam a data de vencimento, dependendo do tipo de solução
string txt = lb.Remessa();
Console.Write(txt);
File.WriteAllText(@"..\..\TXT\Teste_Sicredi.txt", txt); // Gera um arquivo para testes
//File.WriteAllText(@"..\..\TXT\Remessa_Sicredi.txt", txt); // Gera um novo modelo
string cAnterior = File.ReadAllText(@"..\..\TXT\Remessa_Sicredi.txt");
// Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
Assert.IsTrue(cAnterior == txt, "O resultado da remessa mudou");
}
[TestMethod, TestCategory("Retorno")]
public void Retorno_Sicredi()
{
LayoutBancos r = new LayoutBancos();
r.Init(Cedente);
string cFileRET = File.ReadAllText(@"..\..\TXT\Retorno_Sicredi.txt");
r.ErroType = BoletoDuplicado.Lista;
Layout ret = r.Retorno(cFileRET);
// O resultado pode vir completo em uma tabela
// var tb = ret.Table(typeof(CNAB400Retorno1Bradesco));
//string cErros = r.ErroLinhas;
//Assert.IsTrue(string.IsNullOrEmpty(cErros), cErros);
// Ou usa-se o array de boletos
foreach (string nn in r.Boletos.NossoNumeros)
{
BoletoInfo Boleto = r.Boletos[nn];
Console.Write("{0} {1:dd/MM/yyyy} {2:C}\r\n", Boleto.NossoNumero, Boleto.DataPagamento, Boleto.ValorDocumento);
}
// por causa do tipo (r.ErroType) pode haver duplicidade de dados
// pois um boleto pode ter sido baixado e protestado ou pago,
// e com alguma ocorrencia e assim cada registro informa algo
Console.WriteLine("Duplicados:");
foreach (var Boleto in r.Boletos.Duplicados)
Console.Write("{0} {1:dd/MM/yyyy} {2:C}\r\n", Boleto.NossoNumero, Boleto.DataPagamento, Boleto.ValorDocumento);
}
[TestMethod, TestCategory("CampoLivre")]
public void CampoLivre_Sicredi()
{
Boleto blt = new Boleto();
string cl;
// Logica Unica!
// Mas vale lembrar que um dos requisitos no NossoNumero é iniciar sempre em '1'
cl = Banco_Sicredi.CampoLivre(blt, "1111", "22", "33333", "44444", "3");
Console.WriteLine(
"Campo Livre: " + cl +
" Nosso Número: " + blt.NossoNumeroExibicao );
Assert.IsTrue(cl == "3117244444811112233333001", "Erro"); // O Ano atual é usado como referencia para gerar o nosso numero
/* Do exemplo da documentação página 16 (https://github.com/impactro/Boleto-Test/blob/master/DOC/sicredi_cnab400.pdf)
Linha digitável: 74891.11422 00001.03544 02000.921078 9 618700000010000 (usando http://exemplos.boletoasp.com.br/BoletoNet/FuncTeste_DecodIPTE.aspx para obter o código de barras)
Código de barras: 748.9.6.1870.0000010000-1114200001035442000921078
Temos o Campo Livre: 1 1 14 2 00001 0 3544 20 00921 0 7 8
onde: R C yy b nnnnn d AAAA PP CCCCC V 0 D
X => Note que este campo deveria ser ZERO e é 7!
Isso é estrano, pois não está de acordo com a documentação, assim no exemplo estou assumindo como 0
Logico que o deigito verificar seguinte muda com isso
*/
blt = new Boleto();
blt.DataVencimento = new DateTime(2014, 9, 15); // O ano de vencimento entra na formação do nosso numero
cl = Banco_Sicredi.CampoLivre(blt, "3544", "20", "00921", "00001", "1");
Console.WriteLine(
"Campo Livre: " + cl +
" Nosso Número: " + blt.NossoNumeroExibicao);
Assert.IsTrue(cl == "1117200001835442000921003", "Erro"); // Embora seja o Ano, alguns clientes usam a data de vencimento, ou seja, depende de cada implementação
}
}
}