/** * 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 = StringBuilder::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 campo livre do código de barras. * * @param ArrayObject $data * @return $data */ public function gerarCampoLivre(ArrayObject $data) { $carteira = $this->carteira; switch (strlen($this->convenio)) { case 4: $this->nossoNumero = $this->convenio . $this->getNossoNumero(); $this->alterarTamanho("CodigoCedente", 4); $this->alterarTamanho("NossoNumero", 7); $this->layout = ":Banco:Moeda:FatorVencimento:Valor:CodigoCedente:NossoNumero:Agencia:Conta:Carteira"; break; case 6: if ($carteira instanceof Carteira21) { $this->alterarTamanho("NossoNumero", 17); $this->layout = ":Banco:Moeda:FatorVencimento:Valor:NossoNumero:Agencia:Conta:Carteira"; } else { $this->nossoNumero = $this->convenio . Number::modulo11($this->getNossoNumero(), 0, 0, true); $this->alterarTamanho("CodigoCedente", 6); $this->alterarTamanho("NossoNumero", 5); $this->layout = ":Banco:Moeda:FatorVencimento:Valor:CodigoCedente:NossoNumero:Agencia:Conta:Carteira"; } break; case 7: $this->nossoNumero = $this->convenio . $this->nossoNumero; $this->alterarTamanho("CodigoCedente", 7); $this->alterarTamanho("NossoNumero", 10); $this->layout = ":Banco:Moeda:FatorVencimento:Valor000000:NossoNumero:Carteira"; break; default: throw new \LogicException("O codigo do convenio precisa ter 4, 6 ou 7 digitos!"); } return $data; }
/** * Ajusta o Nosso Numero antes de seta-lo no objeto Convenio. * * @param ArrayObject $data * @return mixed */ public function ajustarNossoNumero(ArrayObject $data) { $nossoNumero = $data['NossoNumero']; $dvNossoNumero = Number::modulo11($nossoNumero); $data['NossoNumero'] = $nossoNumero . $dvNossoNumero; return $data['NossoNumero']; }
/** * Inicializa uma nova instância da classe. * * @param string $numero Número do banco * @param string $nome Nome do banco * @param string $agencia Agência favorecida * @param string $conta Conta favorecida */ public function __construct($numero, $nome, $agencia, $conta) { $this->numero = $numero; $this->nome = $nome; $this->agencia = $agencia; $this->conta = $conta; $this->codigo = Number::modulo11($this->numero); }
/** * Gera o campo livre do código de barras. * * @param ArrayObject $data */ public function gerarCampoLivre(ArrayObject $data) { $this->alterarTamanho('Fixo', 1); $this->alterarTamanho('Ios', 1); $this->alterarTamanho('CodigoCedente', 7); $this->alterarTamanho('NossoNumero', 13); $data['Fixo'] = "9"; $data['Ios'] = $this->banco->getIos(); $nossoNumero = $data['NossoNumero']; $dvNossoNumero = Number::modulo11($nossoNumero); $this->nossoNumero = $nossoNumero . $dvNossoNumero; $this->layout = ':Banco:Moeda:FatorVencimento:Valor:Fixo:CodigoCedente:NossoNumero:Ios:Carteira'; }
/** * Seta o dígito verificador do nosso número. * * @param string $carteira * @param string $nossoNumero * @param string $ifTen * @param string $ifZero * @return \Umbrella\YaBoleto\AbstractConvenio $this */ public function setDvNossoNumero($carteira, $nossoNumero, $ifTen = 'P', $ifZero = '0') { $this->dvNossoNumero = Number::modulo11($carteira . $nossoNumero, $ifTen, $ifZero, false, 7); return $this; }
/** * Gera o código de barras, baseado nas informações do banco. * * @return string */ protected function gerarCodigoBarras() { $data = $this->setDadosBoleto(); $this->getConvenio()->gerarCampoLivre($data); $tamanhos = $this->convenio->getTamanhos(); foreach ($data as $var => $value) { if (array_key_exists($var, $tamanhos)) { $data[$var] = StringBuilder::normalize($data[$var], $tamanhos[$var]); } } //Chamada do método que ajusta o NossoNumero $this->getConvenio()->ajustarNossoNumero($data); $this->convenio->setNossoNumero($data['NossoNumero']); $cod = $this->aplicarDadosAoLayout($this->convenio->getLayout(), $data); $dv = Number::modulo11($cod, 1, 1); $codigoBarras = $this->inserirDigitoVerificador($cod, $dv, 4); return $codigoBarras; }
/** * 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; }
/** * Ajusta o Nosso Numero antes de seta-lo no objeto Convenio. * * @param ArrayObject $data * @return ArrayObject */ public function ajustarNossoNumero(ArrayObject $data) { $carteira = $this->carteira; switch (strlen($this->convenio)) { case 6: if (!$carteira instanceof Carteira21) { $data['NossoNumero'] = $this->convenio . Number::modulo11($data['NossoNumero'], 0, 0, true); } break; case 4: case 7: $data['NossoNumero'] = $this->convenio . $data['NossoNumero']; break; default: throw new \LogicException('O codigo do convenio precisa ter 4, 6 ou 7 digitos!'); } return $data; }