Example #1
0
 /**
  * Gera o campo livre do código de barras.
  * 
  * @param  ArrayObject $data
  * @return $data
  */
 public function gerarCampoLivre(ArrayObject $data)
 {
     $this->alterarTamanho('NossoNumero', 17);
     $this->alterarTamanho('CodigoCedente', 7);
     // 06 digitos + DV
     $this->alterarTamanho('CampoLivre', 18);
     // 17 digitos + DV
     $data['CodigoCedente'] .= Number::modulo11($data['CodigoCedente'], 0, 0, false);
     $nossoNumero = String::normalize($data['NossoNumero'], 17);
     $constante1 = '2';
     // 1ª posição do Nosso Numero: Tipo de Cobrança (1-Registrada / 2-Sem Registro)
     $constante2 = '4';
     // 2ª posição do Nosso Número: Identificador da Emissão do Boleto (4-Beneficiário)
     $sequencia1 = (string) substr($nossoNumero, 2, 3);
     $sequencia2 = (string) substr($nossoNumero, 5, 3);
     $sequencia3 = (string) substr($nossoNumero, 8, 9);
     if ($data['Carteira'] == 'RG') {
         $constante1 = '1';
         // 1ª posição do Nosso Numero: Tipo de Cobrança (1-Registrada / 2-Sem Registro)
     }
     $data['CampoLivre'] = $sequencia1 . $constante1 . $sequencia2 . $constante2 . $sequencia3;
     // Calculando o DV do campo livre
     $campoLivre = $data['CodigoCedente'] . $data['CampoLivre'];
     $data['CampoLivre'] .= Number::modulo11($campoLivre, 0, 0, false);
     $this->layout = ':Banco:Moeda:FatorVencimento:Valor:CodigoCedente:CampoLivre';
 }
 /**
  * Gera o código de barras, baseado nas informações do banco.
  *
  * @return string
  */
 protected function gerarCodigoBarras()
 {
     $banco = $this->convenio->getBanco();
     $convenio = $this->convenio;
     $total = $this->getTotal();
     if ($total < 0) {
         throw new \LogicException("Valor total do boleto não pode ser negativo");
     }
     $valor = Number::format($total);
     $agencia = substr($banco->getAgencia(), 0, 4);
     $conta = substr($banco->getConta(), 0, 4);
     $data = new ArrayObject(array('Banco' => $banco->getNumero(), 'Moeda' => $this->moeda, 'Valor' => $valor, 'Agencia' => $agencia, 'Carteira' => $convenio->getCarteira()->getNumero(), 'Conta' => $conta, 'NossoNumero' => $convenio->getNossoNumero(), 'FatorVencimento' => Number::fatorVencimento($this->getDataVencimento()), 'CodigoCedente' => $convenio->getConvenio()));
     $data->setFlags(ArrayObject::ARRAY_AS_PROPS);
     $this->getConvenio()->gerarCampoLivre($data);
     $tamanhos = $convenio->getTamanhos();
     foreach ($data as $var => $value) {
         if (array_key_exists($var, $tamanhos)) {
             $data[$var] = String::normalize($data[$var], $tamanhos[$var]);
         }
     }
     //Chamada do método que ajusta o NossoNumero
     $this->getConvenio()->ajustarNossoNumero($data);
     $convenio->setNossoNumero($data['NossoNumero']);
     $cod = String::insert($convenio->getLayout(), $data);
     $dv = Number::modulo11($cod, 1, 1);
     $codigoBarras = String::putAt($cod, $dv, 4);
     return $codigoBarras;
 }