Package br.com.caelum.stella.boleto.bancos

Source Code of br.com.caelum.stella.boleto.bancos.BancoDoBrasil

package br.com.caelum.stella.boleto.bancos;

import br.com.caelum.stella.boleto.Banco;
import br.com.caelum.stella.boleto.Beneficiario;
import br.com.caelum.stella.boleto.Boleto;
import br.com.caelum.stella.boleto.exception.CriacaoBoletoException;
import static br.com.caelum.stella.boleto.utils.StellaStringUtils.leftPadWithZeros;

/**
* Gera dados de um boleto relativos ao Banco do Brasil.
*
* @author Cauê Guerra
* @author Paulo Silveira
*/
public class BancoDoBrasil extends AbstractBanco implements Banco {

  private static final long serialVersionUID = 1L;

  private static final String NUMERO_BB = "001";
  private static final String DIGITO_NUMERO_BB = "9";
  private static final String CARTEIRA_16 = "16";
  private static final String CARTEIRA_17 = "17";
  private static final String CARTEIRA_18 = "18";
  private static final String ZEROS_CONVENIOS_NOVOS = "000000";
  private static final String TIPO_MODALIDADE_COBRANCA_CARTEIRA_SEM_REGISTRO = "21";


  @Override
  public String geraCodigoDeBarrasPara(Boleto boleto) {
    StringBuilder campoLivre = new StringBuilder();
    Beneficiario beneficiario = boleto.getBeneficiario();
   
    if (convenioAntigo(beneficiario.getNumeroConvenio())) {
      if (beneficiario.getCarteira().equals(CARTEIRA_16) || beneficiario.getCarteira().equals(CARTEIRA_18)) {
        campoLivre.append(getNumeroConvenioFormatado(beneficiario));
        campoLivre.append(getNossoNumeroFormatado(beneficiario));
        campoLivre.append(TIPO_MODALIDADE_COBRANCA_CARTEIRA_SEM_REGISTRO);
      } else {
        campoLivre.append(getNossoNumeroFormatado(beneficiario));
        campoLivre.append(beneficiario.getAgenciaFormatada());
        campoLivre.append(beneficiario.getCodigoBeneficiario());
        campoLivre.append(boleto.getBanco().getCarteiraFormatado(beneficiario));
      }
    } else if (beneficiario.getCarteira().equals(CARTEIRA_17) || beneficiario.getCarteira().equals(CARTEIRA_18)) {
      campoLivre.append(ZEROS_CONVENIOS_NOVOS);
      campoLivre.append(getNumeroConvenioFormatado(beneficiario));
      campoLivre.append(getNossoNumeroParaCarteiras17e18(beneficiario));
      campoLivre.append(boleto.getBanco().getCarteiraFormatado(beneficiario));
    } else {
      throw new CriacaoBoletoException(
          "Erro na geração do código de barras. Nenhuma regra se aplica. " +
          "Verifique carteira e demais dados.");
    }
    return new CodigoDeBarrasBuilder(boleto).comCampoLivre(campoLivre);
  }

  private String getNossoNumeroParaCarteiras17e18(Beneficiario beneficiario) {
    int indice = beneficiario.getCarteira().equals(CARTEIRA_17) ? 1 : 7;
    return  getNossoNumeroFormatado(beneficiario).substring(indice);
  }

  private boolean convenioAntigo(String convenio) {
    long numeroConvenio = Long.parseLong(convenio);
    return numeroConvenio < 1000000;
  }

  @Override
  public String getNumeroFormatado() {
    return NUMERO_BB;
  }

  @Override
  public java.net.URL getImage() {
    String arquivo = "/br/com/caelum/stella/boleto/img/%s.png";
    String imagem = String.format(arquivo, getNumeroFormatado());
    return getClass().getResource(imagem);
  }

  public String getNumeroConvenioFormatado(Beneficiario beneficiario) {
    if (convenioAntigo(beneficiario.getNumeroConvenio())) {
      return leftPadWithZeros(beneficiario.getNumeroConvenio(), 6);
    } else {
      return leftPadWithZeros(beneficiario.getNumeroConvenio(), 7);
    }
  }

  @Override
  public String getCodigoBeneficiarioFormatado(Beneficiario beneficiario) {
    return leftPadWithZeros(beneficiario.getCodigoBeneficiario(), 8);
  }

  @Override
  public String getCarteiraFormatado(Beneficiario beneficiario) {
    return leftPadWithZeros(beneficiario.getCarteira(),2);
  }

  @Override
  public String getNossoNumeroFormatado(Beneficiario beneficiario) {
    if (beneficiario.getCarteira().equals(CARTEIRA_18) || beneficiario.getCarteira().equals(CARTEIRA_16)) {
      return leftPadWithZeros(beneficiario.getNossoNumero(), 17);
    } else {
      return leftPadWithZeros(beneficiario.getNossoNumero(), 11);
    }
  }

  @Override
  public String getNumeroFormatadoComDigito() {
    return NUMERO_BB + "-" + DIGITO_NUMERO_BB;
  }

  @Override
  public String getNossoNumeroECodigoDocumento(Boleto boleto) {
    return getNossoNumeroFormatado(boleto.getBeneficiario());
  }

}
TOP

Related Classes of br.com.caelum.stella.boleto.bancos.BancoDoBrasil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.