/**
  * 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;
 }
 /**
  * Retorna os dados do boleto
  *
  * @return ArrayObject
  */
 protected function setDadosBoleto()
 {
     $data = new ArrayObject(array('Banco' => $this->convenio->getBanco()->getNumero(), 'Moeda' => $this->moeda, 'Valor' => $this->getValorFormatado(), 'Agencia' => $this->getAgenciaFormatada(), 'Carteira' => $this->convenio->getCarteira()->getNumero(), 'Conta' => $this->getContaFormatada(), 'NossoNumero' => $this->convenio->getNossoNumero(), 'FatorVencimento' => Number::fatorVencimento($this->getDataVencimento()), 'CodigoCedente' => $this->convenio->getConvenio()));
     $data->setFlags(ArrayObject::ARRAY_AS_PROPS);
     return $data;
 }