Permalink
Browse files

Mudancas estruturais

  • Loading branch information...
klawdyo committed May 31, 2011
1 parent a593e9d commit 10e2ef1ec48d29cc24d5351471ad6aaaf519f932
Showing with 177 additions and 56 deletions.
  1. +14 −14 lib/bancos/Bancoob.php
  2. +95 −33 lib/bancos/Hsbc.php
  3. +3 −4 lib/bancos/Itau.php
  4. +65 −5 lib/core/Banco.php
View
@@ -30,23 +30,23 @@ class Bancoob extends Banco{
@var array $tamanhos
Armazena os tamanhos dos campos na geração do código de barras
e da linha digitável
-
+
1 5 10 15 20 25 30 35 40 44
| | | | | | | | | |
75692100100000550002010001000000111228563001
- \./||\../\......../|\../\/\...../\/\..../\./
- . .. . . . . . . . . .... Número da Parcela do boleto
- . .. . . . . . . . ......... Nosso número
- . .. . . . . . . ............. Ano da emisão
- . .. . . . . . ................. Código do Cedente
- . .. . . . . ...................... Modalidade de cobrança (01)
- . .. . . . ......................... Agência
- . .. . . ........................... Carteira
- . .. . ................................. Valor
- . .. ....................................... Fator de Vencimento
- . ........................................... Dígito do código de barras
- . ........................................... Código da moeda
- ............................................. Código do banco
+ └-┘↓↓└--┘└--------┘↓└--┘└┘└-----┘└┘└----┘└-┘
+ | || | | | | | | | | └--- Número da Parcela do boleto
+ | || | | | | | | | └-------- Nosso número
+ | || | | | | | | └------------ Ano da emisão
+ | || | | | | | └---------------- Código do Cedente
+ | || | | | | └--------------------- Modalidade de cobrança (01)
+ | || | | | └------------------------ Agência
+ | || | | └-------------------------- Carteira
+ | || | └-------------------------------- Valor
+ | || └-------------------------------------- Fator de Vencimento
+ | |└----------------------------------------- Dígito do código de barras
+ | └------------------------------------------ Código da moeda
+ └-------------------------------------------- Código do banco
*/
View
@@ -31,34 +31,32 @@ class Hsbc extends Banco{
Armazena os tamanhos dos campos na geração do código de barras
e da linha digitável
- 1 5 10 15 20 25 30 35 40 44
- | | | | | | | | | |
- 39994100100000550000351202003910476634000002
- └-┘↓↓└--┘└--------┘└-----┘└-----------┘└--┘↓
- | || | | | | | └-- Código do aplicativo (2 fixo)
- | || | | | | └---- Data no formato juliano
- | || | | | └------------- Nosso número
- | || | | └----------------------- Código do cedente
- | || | └------------------------------- Valor
- | || └-------------------------------------- Fator de vencimento
- | |└----------------------------------------- Dígito verificador do código
- | └------------------------------------------ Código da Moeda
- └-------------------------------------------- Código do banco
-
-
- Array
- (
- [Banco] => 399
- [Moeda] => 9
- [Valor] => 0000055000
- [NossoNumero] => 0039104766340
- [FatorVencimento] => 1001
- [CodigoCedente] => 0351202
- [DataVencimentoCalendarioJuliano] => 0000
- )
-
-
-
+ 1 5 10 15 20 25 30 35 40 44
+ | | | | | | | | | |
+ 39999498900002952951122334000001234567815512
+ 39991498900002952951122334001234567894315512
+ └-┘↓↓└--┘└--------┘└-----┘└-----------┘└--┘↓
+ | || | | | | | └-- Código do aplicativo (2 fixo)
+ | || | | | | └---- Data no formato juliano
+ | || | | | └------------- Nosso número
+ | || | | └----------------------- Código do cedente
+ | || | └------------------------------- Valor
+ | || └-------------------------------------- Fator de vencimento
+ | |└----------------------------------------- Dígito verificador do código
+ | └------------------------------------------ Código da Moeda
+ └-------------------------------------------- Código do banco
+
+
+ Array
+ (
+ [Banco] => 399
+ [Moeda] => 9
+ [Valor] => 0000055000
+ [NossoNumero] => 0039104766340
+ [FatorVencimento] => 1001
+ [CodigoCedente] => 0351202
+ [DataVencimentoCalendarioJuliano] => 0000
+ )
*/
public $tamanhos = array(
#Campos comuns a todos os bancos
@@ -74,7 +72,26 @@ class Hsbc extends Banco{
//'CodigoAplicativo' => 1,
);
- public $carteiras = array(4, 5);
+
+ /*
+ @var $carteiras
+ Identifica as carteiras disponíveis para esse banco.
+
+ - A primeira carteira sempre é a carteira padrão.
+ - Se a carteira for um array, esse array deverá conter as diferenças
+ nos tamanhos entre essa carteira e a carteira padrão. Se for uma
+ string, será considerado que os tamanahos são os mesmos da carteira
+ padrão, e o valor será o nome da carteira.
+ - Só é necessário informar os campos cujos tamanhos sejam diferentes
+ dos da carteira padrão.
+ Abaixo, "CNR" é a carteira padrão, e "CNR Fácil" é a segunda opção
+ de carteira. No "CNR Fácil", há apenas as mudanças no NossoNumero e no
+ CodigoCedente. Os demais campos são iguais
+ */
+ public $carteiras = array(
+ 'CNR',
+ 'CNR Fácil' => array('NossoNumero' => 7, 'CodigoCedente' => 13),
+ );
/*
@var string $layoutCodigoBarras
@@ -94,16 +111,61 @@ class Hsbc extends Banco{
* @version 0.1 28/05/2011 Initial
*/
public function particularidade($object){
- $object->Data['DataVencimentoCalendarioJuliano'] = '0000';
+ if($object->Vendedor->Carteira == 'CNR Fácil'){
+ $object->Data['DataVencimentoCalendarioJuliano'] = '0000';
+ }
+ else{
+ $object->Data['DataVencimentoCalendarioJuliano'] = $this->julianDays($object->Boleto->Vencimento);
+ }
$object->Data['NossoNumero'] = $this->geraCodigoDocumento($object->Data);
}
+ /**
+ * HSBC usa um dígito verificador triplo no NossoNumero.
+ *
+ * @version 0.1 28/05/2011 Inicial
+ */
public function geraCodigoDocumento($dados){
+ #dv1 é o Mod11 do NossoNumero
$dv1 = Math::Mod11($dados['NossoNumero']);
- $dv2 = $dados['Carteira'];
- $codigo = (int) $dados['NossoNumero'] . $dv1 . $dv2;
+
+ #Concatena o NossoNumero a dv1
+ $codigo = (int) $dados['NossoNumero'] . $dv1;
+
+ #Calcula a data de vencimento no formato dmy, em barras e com o ano com 2 digitos
$data = OB::fatorVencimentoParaData($dados['FatorVencimento'], 'dmy');
- $dv3 = Math::Mod11($codigo + $data + $dados['CodigoCedente']);
+
+ #Se o identificador for "4", dv3 é o Mod11 da soma do NossoNumero
+ #concatenado a dv1 e dv2, a data sem barras e o código do cedente.
+ #Se o identificador for "5", dv3 é o modulo 11 da soma donosso
+ #numero concatenado e do codigo do cedente
+ if($dados['Carteira'] == 'CNR'){
+ $codigo .= 4;
+ $dv3 = Math::Mod11($codigo + $data + $dados['CodigoCedente']);
+ }
+ else{
+ $codigo .= 5;
+ $dv3 = Math::Mod11($codigo + $dados['CodigoCedente']);
+ }
+
+ #Retorno com 13 caracteres
return OB::zeros($codigo . $dv3, $this->tamanhos['NossoNumero']);
}
+
+ /**
+ * Calcula a data juliana para uma data informada no formato d/m/a
+ *
+ * @version 0.1 28/05/2011 Initial
+ * 0.2 31/05/2011 Formatação geral
+ */
+ public function julianDays($date) {
+ $date = preg_split('%[/-]+%', $date);
+
+ $dataFinal = mktime(0,0,0,$date[1],$date[0],$date[2]);
+ $dataInicial = mktime(0,0,0,12,31,$date[2]-1);
+
+ return OB::zeros((int)(($dataFinal - $dataInicial)/(60*60*24)), 3) . String::right($date[2],1);
+ }
+
+
}
View
@@ -59,11 +59,10 @@ class Itau extends Banco{
'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997)
'Valor' => 10, //Valor nominal do título
#Campos variávies
- 'Carteira' => 3,
- //'CodigoCedente' => 0, //Código do cedente
+ 'Carteira' => 3,
'NossoNumero' => 8, //Nosso número
- 'Agencia' => 4,
- 'Conta' => 5
+ 'Agencia' => 4,
+ 'Conta' => 5
);
/*
View
@@ -25,7 +25,11 @@ class Banco{
*/
public $Css;
-
+ /*
+ @var array $object
+ Armazena o objeto OB
+ */
+ public $parent;
/*
@var array $relacoes
@@ -59,6 +63,13 @@ class Banco{
*/
public $tamanhos = array();
+
+ /*
+ @var array $carteiras
+ Armazena todas as carteiras disponíveis e as diferenças de tamanhos
+ dos campos entre elas.
+ */
+ public $carteiras = array();
/*
@var $layoutCodigoBarras
@@ -78,23 +89,27 @@ class Banco{
*
* @version 0.1 18/05/2011 Initial
*/
- public function __construct(){
-
+ public function __construct($object = null){
+ if(!empty($object)){
+ $this->parent = $object;
+ }
}
/**
* Carrega o arquivo e as configurações de layout do banco informado
*
* @version 0.1 20/05/2011 Initial
*/
- public function load($codigo){
+ public function load($codigo, $object){
+
+
if(array_key_exists($codigo, $this->relacoes)){
$banco = $this->relacoes[$codigo];
$filename = OB_DIR . '/lib/bancos/' . $banco . '.php';
if(file_exists($filename)){
require $filename;
- return new $banco;
+ return new $banco($object);
}
else{
throw new Exception('O arquivo /lib/bancos/' . $banco. '.php não existe.');
@@ -155,4 +170,49 @@ public function verificaObrigatorios($data){
}/**/
}
+ /**
+ * Retorna as carteiras aceitas por esse boleto
+ *
+ * @version 0.1 31/05/2011
+ */
+ public function getCarteiras(){
+ $buff = array();
+
+ foreach($this->carteiras as $key => $carteira){
+ if(is_array($carteira)){
+ $buff[] = $key;
+ }
+ else{
+ $buff[] = $carteira;
+ }
+ }
+ return $buff;
+ }
+
+ /**
+ * Retorna as posições desse banco, para essa carteira,
+ * já considerando as diferenças
+ *
+ * @version 0.1 31/05/2011
+ * 0.2 31/05/2011 Se passar um nome de campo, ele retorna só aquele campo específico
+ */
+ public function getTamanhos($campo = null){
+ if(is_null($campo)){
+ $carteira = $this->parent->Vendedor->Carteira;
+ if(array_key_exists($carteira, $this->carteiras)){
+ return array_merge($this->tamanhos,
+ $this->carteiras[$carteira]);
+ }
+ else{
+ return $this->tamanhos;
+ }
+ }
+ else{
+ $tamanhos = $this->getTamanhos();
+ if(array_key_exists($campo, $tamanhos)){
+ return $tamanhos[$campo];
+ }
+ }
+ }
+
}

0 comments on commit 10e2ef1

Please sign in to comment.