Generate Boleto with Boletonetcore - C#

Asked

Viewed 231 times

0

Friends, I’m trying to generate boleto with the Boletonetcore

I’m trying to run the test Bancoitaucarteira109tests.cs. I created a project, inserted the files, but I’m not sure how to run it. I created an MVC structure, inserted the Bancoitaucarteira109tests.Cs in the Controller and renamed it Payment.cs. In the model I entered the contents of Utils.cs. My idea was to create a button and call the method to display the boleto. I appreciate if someone can help me!

Payment.Cs

using System;
using Microsoft.AspNetCore.Mvc;
using NUnit.Framework;

namespace BoletoNetCore.Testes
{
    [TestFixture]
    [Category("Itau Carteira 109")]
    public class Pagamento : Controller
    {
        readonly IBanco _banco;
        public Pagamento()
        {
            var contaBancaria = new ContaBancaria
            {
                Agencia = "1234",
                DigitoAgencia = "",
                Conta = "56789",
                DigitoConta = "0",
                CarteiraPadrao = "109",
                TipoCarteiraPadrao = TipoCarteira.CarteiraCobrancaSimples,
                TipoFormaCadastramento = TipoFormaCadastramento.ComRegistro,
                TipoImpressaoBoleto = TipoImpressaoBoleto.Empresa
            };
            _banco = Banco.Instancia(Bancos.Itau);
            _banco.Beneficiario = Utils.GerarBeneficiario("", "", "", contaBancaria);

            _banco.FormataBeneficiario();
        }

        [Test]
        public void Itau_109_REM400()
        {
            Utils.TestarHomologacao(_banco, TipoArquivo.CNAB400, nameof(Pagamento), 5, true, "N", 223344);
        }

        [TestCase(600.00, "223350", "BB000001F", "1", "109/00223350-2", "34191719500000600001090022335021234567890000", "34191.09008 22335.021238 45678.900007 1 71950000060000", 2017, 06, 19)]
        [TestCase(800.08, "223352", "BB000001H", "2", "109/00223352-8", "34192719500000800081090022335281234567890000", "34191.09008 22335.281238 45678.900007 2 71950000080008", 2017, 06, 19)]
        [TestCase(100.00, "223345", "BB000001A", "3", "109/00223345-2", "34193719500000100001090022334521234567890000", "34191.09008 22334.521238 45678.900007 3 71950000010000", 2017, 06, 19)]
        [TestCase(200.00, "223346", "BB000002B", "4", "109/00223346-0", "34194722500000200001090022334601234567890000", "34191.09008 22334.601238 45678.900007 4 72250000020000", 2017, 07, 19)]
        [TestCase(900.03, "223353", "BB000001I", "5", "109/00223353-6", "34195719500000900031090022335361234567890000", "34191.09008 22335.361238 45678.900007 5 71950000090003", 2017, 06, 19)]
        [TestCase(700.01, "223351", "BB000001G", "6", "109/00223351-0", "34196719500000700011090022335101234567890000", "34191.09008 22335.101238 45678.900007 6 71950000070001", 2017, 06, 19)]
        [TestCase(400.00, "223348", "BB000004D", "7", "109/00223348-6", "34197728700000400001090022334861234567890000", "34191.09008 22334.861238 45678.900007 7 72870000040000", 2017, 09, 19)]
        [TestCase(500.00, "223349", "BB000005E", "8", "109/00223349-4", "34198731700000500001090022334941234567890000", "34191.09008 22334.941238 45678.900007 8 73170000050000", 2017, 10, 19)]
        [TestCase(300.00, "223347", "BB000003C", "9", "109/00223347-8", "34199725600000300001090022334781234567890000", "34191.09008 22334.781238 45678.900007 9 72560000030000", 2017, 08, 19)]

        public void Itau_109_BoletoOK(decimal valorTitulo, string nossoNumero, string numeroDocumento, string digitoVerificador, string nossoNumeroFormatado, string codigoDeBarras, string linhaDigitavel, params int[] anoMesDia)
        {
            //Ambiente
            var boleto = new Boleto(_banco)
            {
                DataVencimento = new DateTime(anoMesDia[0], anoMesDia[1], anoMesDia[2]),
                ValorTitulo = valorTitulo,
                NossoNumero = nossoNumero,
                NumeroDocumento = numeroDocumento,
                EspecieDocumento = TipoEspecieDocumento.DM,
                Pagador = Utils.GerarPagador()
            };

            //Ação
            boleto.ValidarDados();

            //Assertivas
            Assert.That(boleto.CodigoBarra.DigitoVerificador, Is.EqualTo(digitoVerificador), $"Dígito Verificador diferente de {digitoVerificador}");
            Assert.That(boleto.NossoNumeroFormatado, Is.EqualTo(nossoNumeroFormatado), "Nosso número inválido");
            Assert.That(boleto.CodigoBarra.CodigoDeBarras, Is.EqualTo(codigoDeBarras), "Código de Barra inválido");
            Assert.That(boleto.CodigoBarra.LinhaDigitavel, Is.EqualTo(linhaDigitavel), "Linha digitável inválida");
        }
    }
}

Utils.Cs

using System;
using System.IO;
using System.Text;
using NReco.PdfGenerator;
using NUnit.Framework;

namespace BoletoNetCore.Testes
{
    internal sealed class Utils
    {
        private static int _contador = 1;

        private static int _proximoNossoNumero = 1;

        internal static Beneficiario GerarBeneficiario(string codigoBeneficiario, string digitoCodigoBeneficiario, string codigoTransmissao, ContaBancaria contaBancaria)
        {
            return new Beneficiario
            {
                CPFCNPJ = "86.875.666/0001-09",
                Nome = "Beneficiario Teste",
                Codigo = codigoBeneficiario,
                CodigoDV = digitoCodigoBeneficiario,
                Endereco = new Endereco
                {
                    LogradouroEndereco = "Rua Teste do Beneficiário",
                    LogradouroNumero = "789",
                    LogradouroComplemento = "Cj 333",
                    Bairro = "Bairro",
                    Cidade = "Cidade",
                    UF = "SP",
                    CEP = "65432987"
                },
                ContaBancaria = contaBancaria
            };
        }

        internal static Pagador GerarPagador()
        {
            if (_contador % 2 == 0)
                return new Pagador
                {
                    CPFCNPJ = "443.316.101-28",
                    Nome = "Pagador Teste PF",
                    Observacoes = "Matricula 678/9",
                    Endereco = new Endereco
                    {
                        LogradouroEndereco = "Rua Testando",
                        LogradouroNumero = "456",
                        Bairro = "Bairro",
                        Cidade = "Cidade",
                        UF = "SP",
                        CEP = "56789012"
                    }
                };
            return new Pagador
            {
                CPFCNPJ = "71.738.978/0001-01",
                Nome = "Pagador Teste PJ",
                Observacoes = "Matricula 123/4",
                Endereco = new Endereco
                {
                    LogradouroEndereco = "Avenida Testando",
                    LogradouroNumero = "123",
                    Bairro = "Bairro",
                    Cidade = "Cidade",
                    UF = "SP",
                    CEP = "12345678"
                }
            };
        }

        internal static Boletos GerarBoletos(IBanco banco, int quantidadeBoletos, string aceite, int NossoNumeroInicial)
        {
            var boletos = new Boletos
            {
                Banco = banco
            };
            for (var i = 1; i <= quantidadeBoletos; i++)
                boletos.Add(GerarBoleto(banco, i, aceite, NossoNumeroInicial));
            return boletos;
        }

        internal static Boleto GerarBoleto(IBanco banco, int i, string aceite, int NossoNumeroInicial)
        {
            if (aceite == "?")
                aceite = _contador % 2 == 0 ? "N" : "A";

            var boleto = new Boleto(banco)
            {
                Pagador = GerarPagador(),
                DataEmissao = DateTime.Now.AddDays(-3),
                DataProcessamento = DateTime.Now,
                DataVencimento = DateTime.Now.AddMonths(i),
                ValorTitulo = (decimal)100 * i,
                NossoNumero = NossoNumeroInicial == 0 ? "" : (NossoNumeroInicial + _proximoNossoNumero).ToString(),
                NumeroDocumento = "BB" + _proximoNossoNumero.ToString("D6") + (char)(64 + i),
                EspecieDocumento = TipoEspecieDocumento.DM,
                Aceite = aceite,
                CodigoInstrucao1 = "11",
                CodigoInstrucao2 = "22",
                DataDesconto = DateTime.Now.AddMonths(i),
                ValorDesconto = (decimal)(100 * i * 0.10),
                DataMulta = DateTime.Now.AddMonths(i),
                PercentualMulta = (decimal)2.00,
                ValorMulta = (decimal)(100 * i * (2.00 / 100)),
                DataJuros = DateTime.Now.AddMonths(i),
                PercentualJurosDia = (decimal)0.2,
                ValorJurosDia = (decimal)(100 * i * (0.2 / 100)),
                AvisoDebitoAutomaticoContaCorrente = "2",
                MensagemArquivoRemessa = "Mensagem para o arquivo remessa",
                NumeroControleParticipante = "CHAVEPRIMARIA=" + _proximoNossoNumero
            };
            // Mensagem - Instruções do Caixa
            StringBuilder msgCaixa = new StringBuilder();
            if (boleto.ValorDesconto > 0)
                msgCaixa.AppendLine($"Conceder desconto de {boleto.ValorDesconto.ToString("R$ ##,##0.00")} até {boleto.DataDesconto.ToString("dd/MM/yyyy")}. ");
            if (boleto.ValorMulta > 0)
                msgCaixa.AppendLine($"Cobrar multa de {boleto.ValorMulta.ToString("R$ ##,##0.00")} após o vencimento. ");
            if (boleto.ValorJurosDia > 0)
                msgCaixa.AppendLine($"Cobrar juros de {boleto.ValorJurosDia.ToString("R$ ##,##0.00")} por dia de atraso. ");
            boleto.MensagemInstrucoesCaixa = msgCaixa.ToString();
            // Avalista
            if (_contador % 3 == 0)
            {
                boleto.Avalista = GerarPagador();
                boleto.Avalista.Nome = boleto.Avalista.Nome.Replace("Pagador", "Avalista");
            }
            // Grupo Demonstrativo do Boleto
            var grupoDemonstrativo = new GrupoDemonstrativo { Descricao = "GRUPO 1" };
            grupoDemonstrativo.Itens.Add(new ItemDemonstrativo { Descricao = "Grupo 1, Item 1", Referencia = boleto.DataEmissao.AddMonths(-1).Month + "/" + boleto.DataEmissao.AddMonths(-1).Year, Valor = boleto.ValorTitulo * (decimal)0.15 });
            grupoDemonstrativo.Itens.Add(new ItemDemonstrativo { Descricao = "Grupo 1, Item 2", Referencia = boleto.DataEmissao.AddMonths(-1).Month + "/" + boleto.DataEmissao.AddMonths(-1).Year, Valor = boleto.ValorTitulo * (decimal)0.05 });
            boleto.Demonstrativos.Add(grupoDemonstrativo);
            grupoDemonstrativo = new GrupoDemonstrativo { Descricao = "GRUPO 2" };
            grupoDemonstrativo.Itens.Add(new ItemDemonstrativo { Descricao = "Grupo 2, Item 1", Referencia = boleto.DataEmissao.Month + "/" + boleto.DataEmissao.Year, Valor = boleto.ValorTitulo * (decimal)0.20 });
            boleto.Demonstrativos.Add(grupoDemonstrativo);
            grupoDemonstrativo = new GrupoDemonstrativo { Descricao = "GRUPO 3" };
            grupoDemonstrativo.Itens.Add(new ItemDemonstrativo { Descricao = "Grupo 3, Item 1", Referencia = boleto.DataEmissao.AddMonths(-1).Month + "/" + boleto.DataEmissao.AddMonths(-1).Year, Valor = boleto.ValorTitulo * (decimal)0.37 });
            grupoDemonstrativo.Itens.Add(new ItemDemonstrativo { Descricao = "Grupo 3, Item 2", Referencia = boleto.DataEmissao.Month + "/" + boleto.DataEmissao.Year, Valor = boleto.ValorTitulo * (decimal)0.03 });
            grupoDemonstrativo.Itens.Add(new ItemDemonstrativo { Descricao = "Grupo 3, Item 3", Referencia = boleto.DataEmissao.Month + "/" + boleto.DataEmissao.Year, Valor = boleto.ValorTitulo * (decimal)0.12 });
            grupoDemonstrativo.Itens.Add(new ItemDemonstrativo { Descricao = "Grupo 3, Item 4", Referencia = boleto.DataEmissao.AddMonths(+1).Month + "/" + boleto.DataEmissao.AddMonths(+1).Year, Valor = boleto.ValorTitulo * (decimal)0.08 });
            boleto.Demonstrativos.Add(grupoDemonstrativo);

            boleto.ValidarDados();
            _contador++;
            _proximoNossoNumero++;
            return boleto;
        }

        internal static void TestarHomologacao(IBanco banco, TipoArquivo tipoArquivo, string nomeCarteira, int quantidadeBoletos, bool gerarBoletoPdfHtml, string aceite, int NossoNumeroInicial)
        {
            var boletos = GerarBoletos(banco, quantidadeBoletos, aceite, NossoNumeroInicial);
            Assert.AreEqual(quantidadeBoletos, boletos.Count, "Quantidade de boletos diferente de " + quantidadeBoletos);

            // Define os nomes dos arquivos, cria pasta e apaga arquivos anteriores
            var nomeArquivoREM = Path.Combine(Path.GetTempPath(), "BoletoNetCore", $"{nomeCarteira}_{tipoArquivo}.REM");
            var nomeArquivoPDF = Path.Combine(Path.GetTempPath(), "BoletoNetCore", $"{nomeCarteira}_{tipoArquivo}.PDF");
            var nomeArquivoHTML = Path.Combine(Path.GetTempPath(), "BoletoNetCore", $"{nomeCarteira}_{tipoArquivo}.html");
            if (!Directory.Exists(Path.GetDirectoryName(nomeArquivoREM)))
                Directory.CreateDirectory(Path.GetDirectoryName(nomeArquivoREM));
            if (File.Exists(nomeArquivoREM))
            {
                File.Delete(nomeArquivoREM);
                if (File.Exists(nomeArquivoREM))
                    Assert.Fail("Arquivo Remessa não foi excluído: " + nomeArquivoREM);
            }
            if (File.Exists(nomeArquivoPDF))
            {
                File.Delete(nomeArquivoPDF);
                if (File.Exists(nomeArquivoPDF))
                    Assert.Fail("Arquivo Boletos (PDF) não foi excluído: " + nomeArquivoPDF);
            }
            if (File.Exists(nomeArquivoHTML))
            {
                File.Delete(nomeArquivoHTML);
                if (File.Exists(nomeArquivoHTML))
                    Assert.Fail("Arquivo Boletos (HTML) não foi excluído: " + nomeArquivoHTML);
            }

            // Arquivo Remessa.
            try
            {
                var arquivoRemessa = new ArquivoRemessa(boletos.Banco, tipoArquivo, 1);
                using (var fileStream = new FileStream(nomeArquivoREM, FileMode.Create))
                    arquivoRemessa.GerarArquivoRemessa(boletos, fileStream);
                if (!File.Exists(nomeArquivoREM))
                    Assert.Fail("Arquivo Remessa não encontrado: " + nomeArquivoREM);
            }
            catch (Exception e)
            {
                if (File.Exists(nomeArquivoREM))
                    File.Delete(nomeArquivoREM);
                Assert.Fail(e.InnerException.ToString());
            }

            if (gerarBoletoPdfHtml)
            {


                // Gera arquivo PDF
                try
                {
                    var html = new StringBuilder();
                    foreach (var boletoTmp in boletos)
                    {
                        var boletoParaImpressao = new BoletoBancario
                        {
                            Boleto = boletoTmp,
                            OcultarInstrucoes = false,
                            MostrarComprovanteEntrega = false,
                            MostrarEnderecoBeneficiario = true,
                            ExibirDemonstrativo = true
                        };

                        html.Append("<div style=\"page-break-after: always;\">");
                        html.Append(boletoParaImpressao.MontaHtmlEmbedded());
                        html.Append("</div>");
                        var boletoHtml = html.ToString();
                        File.WriteAllText(nomeArquivoHTML, boletoHtml);

                        var pdf = new HtmlToPdfConverter().GeneratePdf(boletoHtml);
                        using (var fs = new FileStream(nomeArquivoPDF, FileMode.Create))
                            fs.Write(pdf, 0, pdf.Length);
                        if (!File.Exists(nomeArquivoPDF))
                            Assert.Fail("Arquivo Boletos (PDF) não encontrado: " + nomeArquivoPDF);

                    }
                }
                catch (Exception e)
                {
                    if (File.Exists(nomeArquivoPDF))
                        File.Delete(nomeArquivoPDF);
                    Assert.Fail(e.InnerException.ToString());
                }
            }
        }
    }
}

I appreciate any comment. No error is displayed. When running the browser is opened, but I have difficulties to proceed.

  • What mistake is happening?

No answers

Browser other questions tagged

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