I believe that previous developer did not use the tool correctly. I currently use Boleto2net which is a refatoring of Boletonet https://github.com/BoletoNet/boleto2net, here is a quick explanation of what changes between projects: https://github.com/BoletoNet/boleto2net/issues/1.
I understood how to use the component with a response from one of the contributors in an Issue, he posted a code snippet that is present in the unit tests that virtually Sana all doubts to fill the attributes (https://github.com/BoletoNet/boleto2net/issues/31#issuecomment-328541440).
After the filled ticket (independent if Santander, Itau, etc)... just follow the example I posted in this other Issue: https://github.com/BoletoNet/boleto2net/issues/46.
The code I use to generate billet in my software is this
Boletos boletos = null;
boletos = new Boletos();
//Cabeçalho
boletos.Banco = Banco.Instancia(this.Conta.Banco.Numero);
boletos.Banco.Cedente = new Cedente
{
CPFCNPJ = Globals.DadosEmpresa.Cnpj,
Nome = this.Conta.Titular,
Observacoes = string.Empty,
ContaBancaria = new ContaBancaria
{
Agencia = this.Conta.Agencia,
DigitoAgencia = this.Conta.AgenciaDigito,
OperacaoConta = string.Empty,
Conta = this.Conta.Numero,
DigitoConta = this.Conta.NumeroDigito,
CarteiraPadrao = this.Conta.CarteiraBoleto,
VariacaoCarteiraPadrao = this.Conta.VariacaoCarteira,
TipoCarteiraPadrao = TipoCarteira.CarteiraCobrancaSimples,
TipoFormaCadastramento = TipoFormaCadastramento.ComRegistro,
TipoImpressaoBoleto = this.Conta.Emissor == EmissaoBoleto.Banco ? TipoImpressaoBoleto.Banco : TipoImpressaoBoleto.Empresa,
TipoDocumento = TipoDocumento.Tradicional
},
Codigo = this.Conta.CedenteNumero,
CodigoDV = this.Conta.CedenteDigito.ToString(),
CodigoTransmissao = string.Empty,
Endereco = new Boleto2Net.Endereco
{
LogradouroEndereco = Globals.DadosEmpresa.Endereco.Logradouro,
LogradouroNumero = Globals.DadosEmpresa.Endereco.Numero,
LogradouroComplemento = Globals.DadosEmpresa.Endereco.Complemento,
Bairro = Globals.DadosEmpresa.Endereco.Bairro,
Cidade = Globals.DadosEmpresa.Endereco.Cidade.Nome,
UF = Globals.DadosEmpresa.Endereco.Cidade.Uf.ToString(),
CEP = Globals.DadosEmpresa.Endereco.Cep
}
};
boletos.Banco.FormataCedente();
//Títulos
foreach (var cr in crs)
{
var boleto = new Boleto(boletos.Banco);
boleto.Sacado = new Sacado
{
CPFCNPJ = cr.Cliente.Cnpj,
Nome = cr.Cliente.Razao,
Observacoes = string.Empty,
Endereco = new Boleto2Net.Endereco
{
LogradouroEndereco = cr.Cliente.Endereco.Logradouro,
LogradouroNumero = cr.Cliente.Endereco.Numero,
LogradouroComplemento = cr.Cliente.Endereco.Complemento,
Bairro = cr.Cliente.Endereco.Bairro,
Cidade = cr.Cliente.Endereco.Cidade.Nome,
UF = cr.Cliente.Endereco.Cidade.Uf.ToString(),
CEP = cr.Cliente.Endereco.Cep
}
};
boleto.CodigoOcorrencia = "01"; //Registrar remessa
boleto.DescricaoOcorrencia = "Remessa Registrar";
boleto.NumeroDocumento = cr.Codigo.ToString();
boleto.NumeroControleParticipante = cr.Codigo.ToString();
boleto.NossoNumero = cr.Codigo.ToString();
boleto.DataEmissao = cr.Lancamento;
boleto.DataVencimento = cr.Vencimento;
boleto.ValorTitulo = cr.ValorAberto;
boleto.Aceite = "N";
boleto.EspecieDocumento = TipoEspecieDocumento.DM;
//boleto.DataDesconto = DateTime.Today;
//boleto.ValorDesconto = 0;
if (this.Conta.PercentualMulta > 0)
{
boleto.DataMulta = cr.Vencimento.AddDays(1);
boleto.PercentualMulta = this.Conta.PercentualMulta;
boleto.ValorMulta = boleto.ValorTitulo * boleto.PercentualMulta / 100;
boleto.MensagemInstrucoesCaixa = $"Cobrar Multa de {boleto.ValorMulta.FormatoMoeda()} após o vencimento.";
}
if (this.Conta.PercentualMora > 0)
{
boleto.DataJuros = cr.Vencimento.AddDays(1);
boleto.PercentualJurosDia = (this.Conta.PercentualMora / 30);
boleto.ValorJurosDia = boleto.ValorTitulo * boleto.PercentualJurosDia / 100;
string instrucao = $"Cobrar juros de {boleto.PercentualJurosDia.FormatoPorcentagem()} por dia de atraso";
if (string.IsNullOrEmpty(boleto.MensagemInstrucoesCaixa))
boleto.MensagemInstrucoesCaixa = instrucao;
else
boleto.MensagemInstrucoesCaixa += Environment.NewLine + instrucao;
}
/*
boleto.CodigoInstrucao1 = string.Empty;
boleto.ComplementoInstrucao1 = string.Empty;
boleto.CodigoInstrucao2 = string.Empty;
boleto.ComplementoInstrucao2 = string.Empty;
boleto.CodigoInstrucao3 = string.Empty;
boleto.ComplementoInstrucao3 = string.Empty;
*/
boleto.CodigoProtesto = this.Conta.DiasProtesto == 0 ? TipoCodigoProtesto.NaoProtestar : TipoCodigoProtesto.ProtestarDiasuteis;
boleto.DiasProtesto = this.Conta.DiasProtesto;
boleto.CodigoBaixaDevolucao = TipoCodigoBaixaDevolucao.NaoBaixarNaoDevolver;
boleto.DiasBaixaDevolucao = 0;
boleto.ValidarDados();
boletos.Add(boleto);
}
#endregion Daddos do título
//Gerar Remessa
var stream = new MemoryStream();
var remessa = new ArquivoRemessa(boletos.Banco, this.Conta.LayoutRemessa == LayoutRemessa.Cnab240 ? TipoArquivo.CNAB240 : TipoArquivo.CNAB400, this.Conta.SequencialRemessa);
remessa.GerarArquivoRemessa(boletos, stream);
//Gerar boletos - aqui eu gravo os arquivos um a um porque mando via e-mail.
foreach (var boleto in boletos)
{
var boletoBancario = new BoletoBancario() { Boleto = boleto };
var pdf = boletoBancario.MontaBytesPDF(false);
var pathPDF = GArquivos.CombinarDiretorio(PathRemessa, $"{boleto.NumeroControleParticipante}.pdf");
File.WriteAllBytes(pathPDF, pdf);
}
It’s really confusing, but I’ve already implemented shipping file by the API itself. I had to make some modifications, but in the end it worked.
– Ayrton Giffoni