Skip to content

Commit

Permalink
Merge branch 'eduardokum:develop' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
Rainzart authored Jul 15, 2024
2 parents 2025312 + 0932260 commit e48e2f6
Show file tree
Hide file tree
Showing 24 changed files with 2,013 additions and 989 deletions.
46 changes: 46 additions & 0 deletions exemplos/abc_boleto.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

require 'autoload.php';
$beneficiario = new Eduardokum\LaravelBoleto\Pessoa([
'nome' => 'ACME',
'endereco' => 'Rua um, 123',
'bairro' => 'Bairro',
'cep' => '99999-999',
'uf' => 'UF',
'cidade' => 'CIDADE',
'documento' => '99.999.999/9999-99',
]);

$pagador = new Eduardokum\LaravelBoleto\Pessoa([
'nome' => 'Cliente',
'endereco' => 'Rua um, 123',
'bairro' => 'Bairro',
'cep' => '99999-999',
'uf' => 'UF',
'cidade' => 'CIDADE',
'documento' => '999.999.999-99',
]);

$boleto = new Eduardokum\LaravelBoleto\Boleto\Banco\Abc([
'logo' => realpath(__DIR__ . '/../logos/') . DIRECTORY_SEPARATOR . '246.png',
'dataVencimento' => new Carbon\Carbon(),
'valor' => 100,
'multa' => false,
'juros' => false,
'numero' => '0004309540',
'numeroDocumento' => 1,
'descricaoDemonstrativo' => ['demonstrativo 1', 'demonstrativo 2', 'demonstrativo 3'],
'instrucoes' => ['instrucao 1', 'instrucao 2', 'instrucao 3'],
'aceite' => 'S',
'especieDoc' => 'DM',
'pagador' => $pagador,
'beneficiario' => $beneficiario,
'carteira' => 6,
'operacao' => 1234567,
'agencia' => '0001',
'conta' => '7654321',
]);

$pdf = new Eduardokum\LaravelBoleto\Boleto\Render\Pdf();
$pdf->addBoleto($boleto);
$pdf->gerarBoleto($pdf::OUTPUT_SAVE, __DIR__ . DIRECTORY_SEPARATOR . 'arquivos' . DIRECTORY_SEPARATOR . 'abc.pdf');
52 changes: 52 additions & 0 deletions exemplos/abc_remessa.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

require 'autoload.php';
$beneficiario = new Eduardokum\LaravelBoleto\Pessoa([
'nome' => 'ACME',
'endereco' => 'Rua um, 123',
'cep' => '99999-999',
'uf' => 'UF',
'cidade' => 'CIDADE',
'documento' => '99.999.999/9999-99',
]);

$pagador = new Eduardokum\LaravelBoleto\Pessoa([
'nome' => 'Cliente',
'endereco' => 'Rua um, 123',
'bairro' => 'Bairro',
'cep' => '99999-999',
'uf' => 'UF',
'cidade' => 'CIDADE',
'documento' => '999.999.999-99',
]);

$boleto = new Eduardokum\LaravelBoleto\Boleto\Banco\Abc([
'logo' => realpath(__DIR__ . '/../logos/') . DIRECTORY_SEPARATOR . '246.png',
'dataVencimento' => new Carbon\Carbon(),
'valor' => 100,
'multa' => false,
'juros' => false,
'numero' => '0004309540',
'numeroDocumento' => 1,
'descricaoDemonstrativo' => ['demonstrativo 1', 'demonstrativo 2', 'demonstrativo 3'],
'instrucoes' => ['instrucao 1', 'instrucao 2', 'instrucao 3'],
'aceite' => 'S',
'especieDoc' => 'DM',
'pagador' => $pagador,
'beneficiario' => $beneficiario,
'carteira' => 6,
'operacao' => 1234567,
'agencia' => '0001',
'conta' => '7654321',
]);

$remessa = new Eduardokum\LaravelBoleto\Cnab\Remessa\Cnab400\Banco\Abc([
'agencia' => '0001',
'conta' => '7654321',
'carteira' => 6,
'codigoCliente' => '00011234567',
'beneficiario' => $beneficiario,
]);
$remessa->addBoleto($boleto);

echo $remessa->gerar();
Binary file added logos/246.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added manuais/ABC/DV Nosso Número ABC400.xls
Binary file not shown.
Binary file added manuais/ABC/LayoutCobrancaABCBrasil400_2024.pdf
Binary file not shown.
Binary file added manuais/ABC/MANUAL BOLETOS BANCO ABC 2021.pdf
Binary file not shown.
Binary file added manuais/ABC/VALIDA BOLETO POSIÇÕES CNAB400.xlsx
Binary file not shown.
5 changes: 3 additions & 2 deletions src/Boleto/AbstractBoleto.php
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ abstract class AbstractBoleto implements BoletoContract
* @var float
*/
public $multaApos = 0;

/**
* Valor para mora juros
*
Expand Down Expand Up @@ -1393,7 +1394,7 @@ public function getJurosApos()
*/
public function setMultaApos($multaApos)
{
$multaApos = (int)$multaApos;
$multaApos = (int) $multaApos;
$this->multaApos = $multaApos > 0 ? $multaApos : 0;

return $this;
Expand Down Expand Up @@ -1481,7 +1482,7 @@ public function getTipoProtesto($default = 0)
*/
public function setDiasBaixaAutomatica($baixaAutomatica)
{
$exception = sprintf('O banco %s não suporta baixa automática, pode usar também: setDiasProtesto(%s)', basename(get_class($this)), $baixaAutomatica);
$exception = sprintf('O banco %s não suporta baixa automática, pode usar também', basename(get_class($this)));
throw new ValidationException($exception);
}

Expand Down
216 changes: 216 additions & 0 deletions src/Boleto/Banco/Abc.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
<?php

namespace Eduardokum\LaravelBoleto\Boleto\Banco;

use Eduardokum\LaravelBoleto\Util;
use Eduardokum\LaravelBoleto\CalculoDV;
use Eduardokum\LaravelBoleto\Boleto\AbstractBoleto;
use Eduardokum\LaravelBoleto\Contracts\Boleto\Boleto;
use Eduardokum\LaravelBoleto\Contracts\Boleto\Boleto as BoletoContract;

class Abc extends AbstractBoleto implements BoletoContract
{
public function __construct(array $params = [])
{
parent::__construct($params);
$this->setCamposObrigatorios('numero', 'agencia', 'carteira', 'operacao');
}

/**
* Código do banco
*
* @var string
*/
protected $codigoBanco = Boleto::COD_BANCO_ABC;

/**
* Define as carteiras disponíveis para este banco
* 1 - Cobrança Normal com emissão de bloquetes, pelo banco. Ordem para Classificação: Banco preferencial do Cedente, nosso banco e nossos correspondentes, segundo ordem de escolha, ditada pelo nosso banco.
* 2 - Ordem para Classificação: Banco preferencial do Cedente, nossos correspondentes, nosso banco.
* 3 - Cobrança com determinação do Cobrador nas posições 140 – 142, (que não é o Nosso Banco).
* 4 - O código do Banco cobrador (que não é o Nosso Banco) deve vir nas posições 140-142;. Nosso Número do Banco cobrador deve vir nas posições 74 a 86. Nesta carteira, o cliente envia o título para o Nosso Banco, já com o Nosso Número do correspondente e seu DV calculado (Exceto Banco Itaú, cujo layout exige Nosso Número sem DV na remessa). O campo deve ocupar as 13 posições, com zeros à esquerda.
* 5 - Cobrança exclusivamente para o próprio banco. As posições 140 a 142 devem estar preenchidas com o código do nosso banco.
* 6 - Cobrança Expressa (sem emissão de bloquetes)
* 7 - O código do Banco cobrador (que não é o Nosso Banco) deve vir nas posições 140-142. Após a aceitação do título pelo Nosso Banco, o Nosso Número do correspondente será gerado pelo sistema.
* @var array
*/
protected $carteiras = [1, 2, 3, 4, 5, 6, 7];

/**
* Espécie do documento, coódigo para remessa
*
* @var string
*/
protected $especiesCodigo = [
'DM' => '01', // Duplicata Mercantil
'NP' => '02', // Nota Promissória
'CH' => '03', // Cheque
'LC' => '04', // Letra de Câmbio
'RC' => '05', // Recibo
'AS' => '08', // Apólice de Seguro
'DS' => '12', // Duplicata de Serviço
'CC' => '31', // Cartão de Crédito
'O' => '99', // Outros
];

/**
* Moeda
*
* @var int
*/
protected $moeda = 0;

/**
* @var string
*/
protected $operacao;

/**
* Código de range de composição do nosso número.
*
* @var int
*/
protected $range = 0;

/**
* @return int
*/
public function getRange()
{
return $this->range;
}

/**
* @param int $range
*
* @return Abc
*/
public function setRange($range)
{
$this->range = (int) $range;

return $this;
}

/**
* @return string
*/
public function getOperacao()
{
return $this->operacao;
}

/**
* @param $operacao
*
* @return Abc
*/
public function setOperacao($operacao)
{
$this->operacao = $operacao;

return $this;
}

/**
* Retorna o número definido pelo cliente para compor o nosso número
*
* @return int
*/
public function getNumero()
{
return $this->numero < $this->getRange() ? $this->getRange() + $this->numero : $this->numero;
}

/**
* Retorna o código da carteira (Com ou sem registro)
*
* @return string
*/
public function getCarteira()
{
return $this->carteira == 6 ? 121 : 110;
}

/**
* Gera o Nosso Número.
*
* @return string
*/
protected function gerarNossoNumero()
{
if ($this->getCarteira() != 121) {
return Util::numberFormatGeral(0, 11);
}

/** 6 = 121
*
* Para o cliente enviar um arquivo remessa para o banco, no padrão CNAB400, referente aos
* títulos de cobrança expressa, a carteira deve ser 6 (corresponde a 121, utilizada cálculo do N/N e
* boleto)
*/
$nn = $this->getNumero();
$dv = CalculoDV::abcNossoNumero($this->getAgencia(), $this->getCarteira(), $nn);

return Util::numberFormatGeral($nn, 10) . $dv;
}

/**
* Método que retorna o nosso número usado no boleto. Alguns bancos possuem algumas diferenças.
*
* @return string
*/
public function getNossoNumeroBoleto()
{
return substr_replace($this->getNossoNumero(), '-', -1, 0);
}

/**
* Método para gerar o código da posição de 20 a 44
*
* @return string
*/
protected function getCampoLivre()
{
if ($this->campoLivre) {
return $this->campoLivre;
}

$campoLivre = Util::numberFormatGeral($this->getAgencia(), 4);
$campoLivre .= Util::numberFormatGeral($this->getCarteira(), 3);
$campoLivre .= Util::numberFormatGeral($this->getOperacao(), 7);
$campoLivre .= Util::numberFormatGeral($this->getNossoNumero(), 11);

return $this->campoLivre = $campoLivre;
}

/**
* @return bool
*/
public function imprimeBoleto()
{
return $this->getCarteira() == 121;
}

/**
* Método onde qualquer boleto deve extender para gerar o código da posição de 20 a 44
*
* @param $campoLivre
*
* @return array
*/
public static function parseCampoLivre($campoLivre)
{
return [
'convenio' => null,
'agenciaDv' => null,
'contaCorrenteDv' => null,
'agencia' => substr($campoLivre, 0, 4),
'carteira' => substr($campoLivre, 4, 3),
'operacao' => substr($campoLivre, 7, 7),
'nossoNumero' => substr($campoLivre, 14, 10),
'nossoNumeroDv' => substr($campoLivre, 24, 1),
'nossoNumeroFull' => substr($campoLivre, 14, 11),
];
}
}
Loading

0 comments on commit e48e2f6

Please sign in to comment.