Skip to content

Commit

Permalink
Feitas alterações para a primeira versão stable
Browse files Browse the repository at this point in the history
- Corrigido boleto Unicred: A documentação dele é bem ambígua, mas o nosso número possui apenas 10 dígitos, o 11º é um DV.
- Todos os boletos agora utilizam o sequencial como o número único do cliente, use-o em vez do nosso número
- O nosso número agora representa a versão formatada que é impressa no boleto, às vezes com dígitos
- Substituição do método getViewVars no boleto BRB para um mais adequado naquela circunstância
  • Loading branch information
kriansa committed Jul 24, 2013
1 parent 9d30483 commit 974d8c6
Show file tree
Hide file tree
Showing 11 changed files with 126 additions and 53 deletions.
11 changes: 3 additions & 8 deletions samples/unicred.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,9 @@
'sacado' => $sacado,
'cedente' => $cedente,
'agencia' => 3302, // Até 4 dígitos
'carteira' => 51,
'conta' => 2259, // Até 8 dígitos
'sequencial' => '1395-1',

// Caso queira um número sequencial de 17 dígitos, a cobrança deverá:
// - Ser sem registro (Carteiras 16 ou 17)
// - Convênio com 6 dígitos
// Para isso, defina a carteira como 21 (mesmo sabendo que ela é 16 ou 17, isso é uma regra do banco)
'carteira' => 51, // 11, 21, 31, 41 ou 51
'conta' => 2259, // Até 10 dígitos
'sequencial' => '13951', // Até 10 dígitos

// Parâmetros recomendáveis
//'logoPath' => 'http://empresa.com.br/logo.jpg', // Logo da sua empresa
Expand Down
2 changes: 1 addition & 1 deletion src/OpenBoleto/Agente.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class Agente
{
Expand Down
24 changes: 18 additions & 6 deletions src/OpenBoleto/Banco/BancoDoBrasil.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class BancoDoBrasil extends BoletoAbstract
{
Expand Down Expand Up @@ -93,7 +93,14 @@ public function getConvenio()
return $this->convenio;
}

public function getNossoNumero($incluirDv = true)
/**
* Retorna o Nosso Número calculado
*
* @param bool $incluirFormatacao Incluir formatação ou não (pontuação, espaços e barras)
* @return string
* @throws Exception
*/
public function getNossoNumero($incluirFormatacao = true)
{
$convenio = $this->getConvenio();
$sequencial = $this->getSequencial();
Expand All @@ -119,13 +126,18 @@ public function getNossoNumero($incluirDv = true)
case 7:
$numero = self::zeroFill($convenio, 7) . self::zeroFill($sequencial, 10);
break;

// Não é com 4, 6 ou 7 dígitos? Não existe.
default:
throw new Exception('O código do convênio precisa ter 4, 6 ou 7 dígitos!');
}

if ($incluirDv) {
$modulo = static::modulo11($numero);
$numero .= '-' . $modulo['digito'];
$modulo = static::modulo11($numero);
$numero .= '-' . $modulo['digito'];

// Remove a formatação, caso especificado
if (!$incluirFormatacao) {
$numero = static::limparFormatacao($numero);
}

return $numero;
Expand All @@ -140,7 +152,7 @@ public function getNossoNumero($incluirDv = true)
public function getCampoLivre()
{
$length = strlen($this->getConvenio());
$nossoNumero = $this->getNossoNumero(false);
$nossoNumero = substr($this->getNossoNumero(false), 0, -1); // Nosso número sem o DV

// Sequencial do cliente com 17 dígitos
// Apenas para convênio com 6 dígitos, modalidade sem registro - carteira 16 e 18 (definida para 21)
Expand Down
12 changes: 9 additions & 3 deletions src/OpenBoleto/Banco/Bradesco.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class Bradesco extends BoletoAbstract
{
Expand Down Expand Up @@ -76,9 +76,15 @@ class Bradesco extends BoletoAbstract
*/
protected $cip = '000';

public function getNossoNumero($incluirDv = true)
/**
* Retorna o Nosso Número calculado
*
* @param bool $incluirFormatacao Incluir formatação ou não (pontuação, espaços e barras)
* @return string
*/
public function getNossoNumero($incluirFormatacao = true)
{
return $this->sequencial;
return $this->getSequencial();
}

/**
Expand Down
24 changes: 13 additions & 11 deletions src/OpenBoleto/Banco/Brb.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class Brb extends BoletoAbstract
{
Expand Down Expand Up @@ -70,11 +70,15 @@ class Brb extends BoletoAbstract
*/
protected $carteirasNomes = array('1' => 'COB', '2' => 'COB');

public function getNossoNumero($incluirDv = true)
/**
* Retorna o Nosso Número calculado
*
* @param bool $incluirFormatacao Incluir formatação ou não (pontuação, espaços e barras)
* @return string
*/
public function getNossoNumero($incluirFormatacao = true)
{
$campoLivre = $this->getCampoLivre();

return substr($campoLivre, 13);
return substr($this->getCampoLivre(), 13);
}

/**
Expand Down Expand Up @@ -110,14 +114,12 @@ public function getCampoLivre()
}

/**
* Define nomes de campos específicos do boleto do BRB
* Retorna o campo Agência/Cedente do boleto
*
* @return array
* @return string
*/
public function getViewVars()
public function getAgenciaCodigoCedente()
{
return array(
'agencia_codigo_cedente' => '000 - ' . $this->getAgencia() . ' - ' . $this->getConta(),
);
return '000 - ' . $this->getAgencia() . ' - ' . $this->getConta();
}
}
17 changes: 13 additions & 4 deletions src/OpenBoleto/Banco/Itau.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class Itau extends BoletoAbstract
{
Expand Down Expand Up @@ -102,13 +102,22 @@ public function getCodigoCliente()
return $this->codigoCliente;
}

public function getNossoNumero($incluirDv = true)
/**
* Retorna o Nosso Número calculado
*
* @param bool $incluirFormatacao Incluir formatação ou não (pontuação, espaços e barras)
* @return string
*/
public function getNossoNumero($incluirFormatacao = true)
{
$this->getCampoLivre(); // <- Força o calculo do DV.
$numero = self::zeroFill($this->getCarteira(), 3) . '/' . self::zeroFill($this->getSequencial(), 8);

if ($incluirDv) {
$numero .= '-' . $this->carteiraDv;
$numero .= '-' . $this->carteiraDv;

// Remove a formatação, caso especificado
if (!$incluirFormatacao) {
$numero = static::limparFormatacao($numero);
}

return $numero;
Expand Down
12 changes: 9 additions & 3 deletions src/OpenBoleto/Banco/Santander.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class Santander extends BoletoAbstract
{
Expand Down Expand Up @@ -97,9 +97,15 @@ public function getIos()
return $this->ios;
}

public function getNossoNumero($incluirDv = true)
/**
* Retorna o Nosso Número calculado
*
* @param bool $incluirFormatacao Incluir formatação ou não (pontuação, espaços e barras)
* @return string
*/
public function getNossoNumero($incluirFormatacao = true)
{
return self::zeroFill($this->sequencial, 13);
return self::zeroFill($this->getSequencial(), 13);
}

/**
Expand Down
33 changes: 28 additions & 5 deletions src/OpenBoleto/Banco/Unicred.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class Unicred extends BoletoAbstract
{
Expand All @@ -59,9 +59,24 @@ class Unicred extends BoletoAbstract
*/
protected $carteiras = array('11', '21', '31', '41', '51');

public function getNossoNumero($incluirDv = true)
/**
* Retorna o Nosso Número calculado
*
* @param bool $incluirFormatacao Incluir formatação ou não (pontuação, espaços e barras)
* @return string
*/
public function getNossoNumero($incluirFormatacao = true)
{
return $this->getCarteira() . '/' . self::zeroFill($this->sequencial, 12);
$numero = self::zeroFill($this->getSequencial(), 10);
$dv = static::modulo11($numero);
$numero .= '-' . $dv['digito'];

// Remove a formatação, caso especificado
if (!$incluirFormatacao) {
$numero = static::limparFormatacao($numero);
}

return $numero;
}

/**
Expand All @@ -72,8 +87,16 @@ public function getNossoNumero($incluirDv = true)
*/
public function getCampoLivre()
{
$sequencial = self::zeroFill($this->sequencial, 12);
return self::zeroFill($this->getAgencia(), 4) . self::zeroFill($this->getConta(), 10) . self::zeroFill($this->getNossoNumero(false), 11);
}

return self::zeroFill($this->getAgencia(), 4) . self::zeroFill($this->getConta(), 10) . str_replace('-', '', $sequencial);
/**
* Retorna o campo Agência/Cedente do boleto
*
* @return string
*/
public function getAgenciaCodigoCedente()
{
return static::zeroFill($this->getAgencia(), 4) . ' / ' . static::zeroFill($this->getConta(), 10);
}
}
40 changes: 30 additions & 10 deletions src/OpenBoleto/BoletoAbstract.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
abstract class BoletoAbstract
{
Expand Down Expand Up @@ -610,7 +610,6 @@ public function getNumeroDocumento()
public function setSequencial($sequencial)
{
$this->sequencial = $sequencial;

return $this;
}

Expand Down Expand Up @@ -1107,12 +1106,22 @@ public function getLogoPath()
}

/**
* Retorna o Nosso Número cálculado
* Mostra exception ao erroneamente tentar setar o nosso número
*
* @throws Exception
*/
public final function setNossoNumero()
{
throw new Exception('Não é possível definir o nosso número diretamente. Utilize o método setSequencial.');
}

/**
* Retorna o Nosso Número calculado
*
* @param bool $incluirDv Incluir Dígito Verificador
* @param bool $incluirFormatacao Incluir formatação ou não (pontuação, espaços e barras)
* @return string
*/
public abstract function getNossoNumero($incluirDv = true);
public abstract function getNossoNumero($incluirFormatacao = true);

/**
* Método onde qualquer boleto deve extender para gerar o código da posição de 20 a 44
Expand Down Expand Up @@ -1250,7 +1259,7 @@ public function getNumeroFebraban()
public function getCodigoBancoComDv()
{
$codigoBanco = $this->getCodigoBanco();
$digitoVerificador = $this->modulo11($codigoBanco);
$digitoVerificador = static::modulo11($codigoBanco);

return $codigoBanco . '-' . $digitoVerificador['digito'];
}
Expand All @@ -1274,7 +1283,7 @@ public function getLinhaDigitavel()

// Concatenates bankCode + currencyCode + first block of 5 characters and
// calculates its check digit for part1.
$check_digit = $this->modulo10($this->getCodigoBanco() . $this->getMoeda() . $blocks['20-24']);
$check_digit = static::modulo10($this->getCodigoBanco() . $this->getMoeda() . $blocks['20-24']);

// Shift in a dot on block 20-24 (5 characters) at its 2nd position.
$blocks['20-24'] = substr_replace($blocks['20-24'], '.', 1, 0);
Expand All @@ -1284,14 +1293,14 @@ public function getLinhaDigitavel()
$part1 = $this->getCodigoBanco(). $this->getMoeda() . $blocks['20-24'] . $check_digit;

// Calculates part2 check digit from 2nd block of 10 characters.
$check_digit = $this->modulo10($blocks['25-34']);
$check_digit = static::modulo10($blocks['25-34']);

$part2 = $blocks['25-34'] . $check_digit;
// Shift in a dot at its 6th position.
$part2 = substr_replace($part2, '.', 5, 0);

// Calculates part3 check digit from 3rd block of 10 characters.
$check_digit = $this->modulo10($blocks['35-44']);
$check_digit = static::modulo10($blocks['35-44']);

// As part2, we do the same process again for part3.
$part3 = $blocks['35-44'] . $check_digit;
Expand Down Expand Up @@ -1412,7 +1421,7 @@ protected function getDigitoVerificador()
{
$num = self::zeroFill($this->getCodigoBanco(), 4) . $this->getMoeda() . $this->getFatorVencimento() . $this->getValorZeroFill() . $this->getCampoLivre();

$modulo = $this->modulo11($num);
$modulo = static::modulo11($num);
if ($modulo['resto'] == 0 || $modulo['resto'] == 1 || $modulo['resto'] == 10) {
$dv = 1;
} else {
Expand All @@ -1422,6 +1431,17 @@ protected function getDigitoVerificador()
return $dv;
}

/**
* Remove pontos, traços, espaços e barras de uma string
*
* @param string $string
* @return string
*/
protected static function limparFormatacao($string)
{
return str_replace(array('.', '/', ' ', '-'), '', $string);
}

/**
* Helper para Zerofill (0 à esqueda).
* O valor não deve ter mais caracteres do que o número de dígitos especificados
Expand Down
2 changes: 1 addition & 1 deletion src/OpenBoleto/BoletoFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class BoletoFactory
{
Expand Down
2 changes: 1 addition & 1 deletion src/OpenBoleto/Exception.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@
* @author Daniel Garajau <http://github.com/kriansa>
* @copyright Copyright (c) 2013 Estrada Virtual (http://www.estradavirtual.com.br)
* @license MIT License
* @version 0.1
* @version 1.0
*/
class Exception extends \Exception {}

0 comments on commit 974d8c6

Please sign in to comment.