When using Boleto.NET is it necessary to assemble the shipment file manually?

Asked

Viewed 4,231 times

-1

In a financial system already built by another developer the Boleto.NET library was used to generate boletos Itaú. I would need to add support for Santander billet generation, but I can’t figure out how to use the library at all.

The other developer’s code is extremely confusing. It’s an absurd mess, I can’t figure out what he’s doing.

Although using the library it generates the shipment files in hand, using a code that seems extremely dependent on the database.

Already in the library examples on Github, the shipment file is generated by her own API.

My question here is the following: when using Boleto.NET I can use its methods to generate the shipment file, or is this manual work necessary?

  • 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.

1 answer

4

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);
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.