/** * 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; }
/** * 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'; }
/** * 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); }
/** * Insere os dados do boleto no layout do convênio * * @param $layout * @param $dados * @return string */ protected function aplicarDadosAoLayout($layout, $dados) { $chaveAsbace = $dados['Agencia'] . $dados['Conta'] . $dados['NossoNumero'] . $dados['Banco']; $primeiroDvAsbace = Number::primeiroDvAsbace($chaveAsbace); $segundoDvAsbace = Number::segundoDvAsbace($chaveAsbace, $primeiroDvAsbace); $codigoBarras = StringBuilder::insert($layout, $dados); $codigoBarras = $this->inserirDigitoVerificador($codigoBarras, $primeiroDvAsbace, 41); $codigoBarras = $this->inserirDigitoVerificador($codigoBarras, $segundoDvAsbace, 42); return $codigoBarras; }
/** * 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 a linha digitável baseado em um código de barras. * * @param string $codigoBarras * @return string */ protected function gerarLinhaDigitavel($codigoBarras) { // Campo1 - Posições de 1-4 e 20-24 $linhaDigitavel = substr($codigoBarras, 0, 4) . substr($codigoBarras, 19, 5) . substr($codigoBarras, 24, 10) . substr($codigoBarras, 34, 10) . substr($codigoBarras, 4, 1) . substr($codigoBarras, 5, 14); $dv1 = Number::modulo10(substr($linhaDigitavel, 0, 9)); $dv2 = Number::modulo10(substr($linhaDigitavel, 9, 10)); $dv3 = Number::modulo10(substr($linhaDigitavel, 19, 10)); $linhaDigitavel = StringBuilder::putAt($linhaDigitavel, $dv3, 29); $linhaDigitavel = StringBuilder::putAt($linhaDigitavel, $dv2, 19); $linhaDigitavel = StringBuilder::putAt($linhaDigitavel, $dv1, 9); return StringBuilder::applyMask($linhaDigitavel, $this->mascara); }
/** * 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; }