caelum / caelum-stella

O Caelum Stella visa suprir as necessidades do dia a dia do desenvolvedor brasileiro
http://stella.caelum.com.br
664 stars 340 forks source link

Boletos Bradesco #150

Closed leandrohsilveira closed 10 years ago

leandrohsilveira commented 10 years ago

Olá, parabens pela API, está muito boa. Porém tem um problema que encontrei para gerar boletos do bradesco, um erro pontual acredito que tem a ver com a mudança dos métodos "comCarteira(int)" para "comCarteira(String)".

Segue o problema:

A linha 83 da classe br.com.caelum.stella.boleto.bancos.Bradesco está: StringBuilder builder = new StringBuilder().append( String.format("%02d", emissor.getCarteira()));

Isto lança exceção de formatter, pois o emissor.getCarteira() é uma String e o pattern de formatação é 02d (numérico de dois dígitos).

Caused by: java.util.IllegalFormatConversionException: d != java.lang.String at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4045) at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2748) at java.util.Formatter$FormatSpecifier.print(Formatter.java:2702) at java.util.Formatter.format(Formatter.java:2488) at java.util.Formatter.format(Formatter.java:2423) at java.lang.String.format(String.java:2797) at br.com.caelum.stella.boleto.bancos.Bradesco.getNossoNumeroECodDocumento(Bradesco.java:83) at br.com.caelum.stella.boleto.Boleto.getNossoNumeroECodDocumento(Boleto.java:406) ... 50 more

leandrohsilveira commented 10 years ago

Pode ser feito o seguinte workaround: Banco banco = new Bradesco() {

        @Override
        public String getNossoNumeroECodDocumento(Boleto boleto) {
            Emissor emissor = boleto.getEmissor();
            StringBuilder builder = new StringBuilder().append(String.format("%s", emissor.getCarteira()));
            builder.append("/").append(getNossoNumeroDoEmissorFormatado(emissor));
            return builder.append(getDigitoNossoNumero(emissor)).toString();
        }
        private String getDigitoNossoNumero(Emissor emissor) {
            return emissor.getDigitoNossoNumero() != null
                    && !emissor.getDigitoNossoNumero().isEmpty()
                    ? "-" + emissor.getDigitoNossoNumero() : "";
        }
    };

leandrohsilveira commented 10 years ago

Eu estava usando uma versão antiga. Desculpe pelo equivoco.