Exception when you will generate boleto bancário with Boleto.Net

4

I have a system that generates Santander tickets using a specific DLL that has been downloaded from the internet. The name is "Boleto.net". I need to create a Bradesco ticket. I changed where the Santander bank data passed to the Bradesco data, but at the time of generating the ticket an error saying that the value was not passed for a specific object. What is the TipoArquivo of Bradesco to pass validation on the ticket?

        public BoletoBancario GerarBoletoBradesco(BoletoModel bol)
        {
            BoletoBancario boletoBancario = new BoletoBancario();

            boletoBancario.CodigoBanco = 237;

            ContaBancaria cb = new ContaBancaria();

            cb.Agencia = bol.cedente.Agencia;
            if (bol.cedente.DigAgencia != "")
                cb.DigitoAgencia = bol.cedente.DigAgencia;

            cb.Conta = bol.cedente.Conta;
            if (bol.cedente.DigConta != "")
            cb.DigitoConta = bol.cedente.DigConta;

            Cedente c = new Cedente();
            c.CPFCNPJ = bol.cedente.CNPJ;
            c.Nome = bol.cedente.Nome;
            c.Carteira = bol.Carteira;
            c.ContaBancaria = cb;
            c.Codigo = bol.cedente.Codigo;
            if (bol.cedente.DigCedente != "")
                c.DigitoCedente = int.Parse(bol.cedente.DigCedente);    
            //Até o momento o Convênio é o mesmo número do código do cedente
            c.Convenio = int.Parse(c.Codigo);

            BoletoNet.Boleto b = new BoletoNet.Boleto(bol.DataVencimento, bol.ValorBoleto, bol.Carteira, 
                bol.NossoNumero, c);

            b.NumeroDocumento = bol.NumeroDocumento;
            b.DataProcessamento = DateTime.Now.Date;
            b.DataDocumento = bol.DataDocumento;
            b.JurosMora = bol.ValorMulta;

            BoletoNet.Endereco end = new BoletoNet.Endereco();
            end.Bairro = "";
            end.End = bol.sacado.Endereco;
            end.CEP = bol.sacado.CEP;
            end.Cidade = bol.sacado.Cidade;
            end.Complemento = "";
            end.Email = "";
            end.Logradouro = "";
            end.Numero = "";
            end.UF = bol.sacado.UF;

            BoletoNet.Sacado s = new BoletoNet.Sacado(bol.sacado.CNPJCPF, bol.sacado.Nome, end);
            b.Sacado = s;

            //Aqui passa o codigo do banco bradesco
            //b.EspecieDocumento = new EspecieDocumento_Santander("17");
            b.EspecieDocumento = new EspecieDocumento_Bradesco("13");

            Instrucao objInst1 = new Instrucao(237);
            objInst1.Descricao = bol.infAdicional.Instrucao1;
            Instrucao objInst2 = new Instrucao(237);
            objInst2.Descricao = bol.infAdicional.Instrucao2;
            Instrucao objInst3 = new Instrucao(237);
            objInst3.Descricao = bol.infAdicional.Instrucao3;
            Instrucao objInst4 = new Instrucao(237);
            objInst4.Descricao = bol.infAdicional.Instrucao4;

            b.Instrucoes.Add(objInst1);
            b.Instrucoes.Add(objInst2);
            b.Instrucoes.Add(objInst3);
            b.Instrucoes.Add(objInst4);

            //Importante para o calculo do digito verificador
            //b.PercentualIOS = 0;

            boletoBancario.Boleto = b;
            boletoBancario.MostrarCodigoCarteira = true;
            boletoBancario.Boleto.Valida();

            return boletoBancario;
        }

public ActionResult GeraRemessa()
        {
            BoletoNet.Boletos lb = new BoletoNet.Boletos();
            BoletoNet.Cedente cd = new BoletoNet.Cedente();
            foreach (var item in listaBoletos)
            {
                Boleto bol = new Boleto();
                BoletoNet.BoletoBancario bolBanc = new BoletoNet.BoletoBancario();
                //bolBanc = bol.GerarBoleto(RetornarItemList(item.NumeroDocumento));
                bolBanc = bol.GerarBoletoBradesco(RetornarItemList(item.NumeroDocumento));
                cd = bolBanc.Cedente;
                lb.Add(bolBanc.Boleto);
                break;

            }

            System.IO.FileStream arq = new System.IO.FileStream("C:\Temp\arqRemessa.txt", System.IO.FileMode.Append);

            cd.Endereco = new BoletoNet.Endereco
            {
                Bairro = "Teste",
                CEP = "02764-020",
                Cidade = "São Paulo",
                End = "Teste end",
                Logradouro = "Rua",
                Numero= "4",
                UF= "SP"
            };

            BoletoNet.ArquivoRemessa arqRem = new BoletoNet.ArquivoRemessa(BoletoNet.TipoArquivo.Outro);

            arqRem.GerarArquivoRemessa("3480291", new BoletoNet.Banco(237), cd, lb,
                arq, 1);


            return View("/home/index");
        }

public ActionResult ImprimirBoleto(string Fatura, string NovaDtVenc = "")
        {
            Boleto bol = new Boleto();
            BoletoNet.BoletoBancario bolBanc = new BoletoNet.BoletoBancario();

            bolBanc = bol.GerarBoletoBradesco(RetornarItemList(Fatura));

            if (NovaDtVenc != "")
            {
                bolBanc.Boleto.DataVencimento = DateTime.Parse(NovaDtVenc);
                bolBanc.Boleto.DataDocumento = DateTime.Now;
            }

            //HTML que monta o boleto.
 // Aqui dá o erro falando que não foi passado o valor pro objeto BoletoNet.Conta
            var htmlBoleto = bolBanc.MontaHtml(Server.MapPath(@"~/Content/Boletos/"), "");
            htmlBoleto = htmlBoleto
            .Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], "\") // convertendo o caminho absoluto para relativo
            .Replace(System.IO.Path.GetTempPath(), Url.Action("Temporario", "Faturas") + "/?filename=") // convertendo o caminho temporário em relativo
            .Replace(".w666{width:666px}", ".w666{width:21cm}")
            .Replace("<body>", "<body style=\"height:29cm\">")
            //.Replace("</html>", "<a length=\"0\" href=\"/Faturas/PrintBoleto?Fatura=subsFatura\" >Exportar PDF</a></html>")
            .Replace("</html>", "<a length=\"0\" href=\"#\" onclick=\"window.print();\">Imprimir/Exportar PDF</a></html>")
            .Replace("subsFatura", Fatura.Replace("/","%2F"))
            //.Replace("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">", "")
            //.Replace("Imprimir em impressora jato de tinta (ink jet) ou laser em qualidade normal. (Não use modo econômico).<br>Utilize folha A4 (210 x 297 mm) ou Carta (216 x 279 mm) - Corte na linha indicada<br>","")
            //.Replace("&nbsp;","")
            ;
            ViewBag.Boleto = htmlBoleto.ToString();

            return View();

        }
    
asked by anonymous 05.08.2015 / 14:27

1 answer

6

This software is poorly done and incomplete. If you want to use this way you will have to complete it. Here's what causes the problem:

        switch (Banco.Codigo)
        {
            case 1:
                descricaoCarteira = new Carteira_BancoBrasil(carteira).Codigo;
                break;
            case 353:
            case 8:
            case 33:
                descricaoCarteira = new Carteira_Santander(carteira).Codigo;
                break;
            case 104:
                descricaoCarteira = new Carteira_Caixa(carteira).Codigo;
                break;
            case 341:
                descricaoCarteira = new Carteira_Itau(carteira).Codigo;
                break;

            default:
                throw new Exception(string.Format("A descrição para o banco {0} não foi implementada.", Boleto.Banco));
                throw new Exception(string.Format("A descrição da carteira {0} / banco {1} não foi implementada (marque false na propriedade MostrarCodigoCarteira)", carteira, Banco.Codigo));

        }

There is no Bradesco. You will need to add a case there in this code . But of course this is not enough. This should not be treated this way, it hurts several programming principles, but that's what it has.

See that in the repository there is no portfolio implementation that you want to use. You will have to create one for Bradesco. I believe it will be easy to copy a file from another bank and adapt only what is needed. It should be even easier than this but the code does not help, it's poorly architected.

That is, only with the DLL, you will not solve the problem, you will have to tinker with their code. Which is absurd. If you do this right, try sending it to GitHub and see if they accept it so that others can benefit from it.

But you might have another solution if you can give up a feature. If you change a property, this error-giving code does not execute. See the source you should have created for Bradesco and change the property MostrarCodigoCarteira to false . See where you are in Santander's existing file Santander's existing file .

    
05.08.2015 / 15:15