Skip to content

Commit

Permalink
boleto ajuste daycoval
Browse files Browse the repository at this point in the history
  • Loading branch information
eduardokum committed Oct 11, 2024
1 parent df8b209 commit 8e1dbff
Show file tree
Hide file tree
Showing 3 changed files with 145 additions and 5 deletions.
11 changes: 9 additions & 2 deletions src/Boleto/Banco/Daycoval.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ class Daycoval extends AbstractBoleto implements BoletoContract
*/
protected $codigoBanco = Boleto::COD_BANCO_DAYCOVAL;

/**
* Linha de local de pagamento
*
* @var string
*/
protected $localPagamento = 'PAGAVEL EM QUALQUER AGÊNCIA BANCÁRIA, MESMO APÓS VENCIMENTO';

/**
* Define as carteiras disponíveis para este banco
* 3 Cobrança Caucionada
Expand Down Expand Up @@ -58,7 +65,7 @@ class Daycoval extends AbstractBoleto implements BoletoContract
public function __construct(array $params = [])
{
parent::__construct($params);
$this->setCamposObrigatorios('numero', 'agencia', 'carteira', 'operacao');
$this->setCamposObrigatorios('numero', 'agencia', 'carteira', 'operacao', 'conta');
}

/**
Expand Down Expand Up @@ -141,7 +148,7 @@ protected function gerarNossoNumero()
*/
public function getNossoNumeroBoleto()
{
return substr_replace($this->getNossoNumero(), '-', -1, 0);
return $this->getCarteira() . '/' . substr_replace($this->getNossoNumero(), '-', -1, 0);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/Cnab/Remessa/Cnab400/Banco/Daycoval.php
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ protected function header()
$this->add(3, 9, 'REMESSA');
$this->add(10, 11, '01');
$this->add(12, 26, Util::formatCnab('X', 'COBRANCA', 15));
$this->add(27, 46, Util::formatCnab('X', $this->getCodigoCliente(), 20));
$this->add(27, 42, Util::formatCnab('X', $this->getCodigoCliente(), 20));
$this->add(47, 76, Util::formatCnab('X', $this->getBeneficiario()->getNome(), 30));
$this->add(77, 79, $this->getCodigoBanco());
$this->add(80, 94, Util::formatCnab('X', 'BANCO DAYCOVAL', 15));
Expand Down Expand Up @@ -208,7 +208,7 @@ public function addBoleto(BoletoContract $boleto)
$this->add(395, 400, Util::formatCnab('9', $this->iRegistros + 1, 6));

$instrucoes = array_filter($boleto->getInstrucoes());
if (count($boleto->getInstrucoes()) > 0) {
if (count($instrucoes) > 0) {
$this->iniciaDetalhe();
$this->add(1, 1, '2');
$this->add(2, 2, '0');
Expand Down
135 changes: 134 additions & 1 deletion src/Cnab/Retorno/Cnab400/Banco/Daycoval.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,139 @@

namespace Eduardokum\LaravelBoleto\Cnab\Retorno\Cnab400\Banco;

class Daycoval
use Illuminate\Support\Arr;
use Eduardokum\LaravelBoleto\Util;
use Eduardokum\LaravelBoleto\Contracts\Cnab\RetornoCnab400;
use Eduardokum\LaravelBoleto\Exception\ValidationException;
use Eduardokum\LaravelBoleto\Cnab\Retorno\Cnab400\AbstractRetorno;
use Eduardokum\LaravelBoleto\Contracts\Boleto\Boleto as BoletoContract;

class Daycoval extends AbstractRetorno implements RetornoCnab400
{
/**
* Código do banco
*
* @var string
*/
protected $codigoBanco = BoletoContract::COD_BANCO_DAYCOVAL;

/**
* Array com as ocorrencias do banco;
*
* @var array
*/
private $ocorrencias = [

];

/**
* Array com as possiveis rejeicoes do banco.
*
* @var array
*/
private $rejeicoes = [

];

/**
* Roda antes dos metodos de processar
*/
protected function init()
{
$this->totais = [
'liquidados' => 0,
'entradas' => 0,
'baixados' => 0,
'protestados' => 0,
'alterados' => 0,
];
}

/**
* @param array $header
*
* @return bool
* @throws ValidationException
*/
protected function processarHeader(array $header)
{
$this->getHeader()
->setOperacaoCodigo($this->rem(2, 2, $header))
->setOperacao($this->rem(3, 9, $header))
->setServicoCodigo($this->rem(10, 11, $header))
->setServico($this->rem(12, 26, $header))
->setCodigoCliente($this->rem(27, 46, $header))
->setData($this->rem(95, 100, $header));

return true;
}

/**
* @param array $detalhe
*
* @return bool
* @throws ValidationException
*/
protected function processarDetalhe(array $detalhe)
{
$d = $this->detalheAtual();
$d->setCarteira($this->rem(108, 108, $detalhe))
->setNossoNumero($this->rem(63, 73, $detalhe))
->setNumeroDocumento($this->rem(117, 126, $detalhe))
->setNumeroControle($this->rem(38, 62, $detalhe))
->setOcorrencia($this->rem(109, 110, $detalhe))
->setOcorrenciaDescricao(Arr::get($this->ocorrencias, $d->getOcorrencia(), 'Desconhecida'))
->setDataOcorrencia($this->rem(111, 116, $detalhe))
->setDataVencimento($this->rem(147, 152, $detalhe))
->setValor(Util::nFloat($this->rem(153, 165, $detalhe) / 100, 2, false))
->setValorTarifa(Util::nFloat($this->rem(176, 188, $detalhe) / 100, 2, false))
->setValorIOF(Util::nFloat($this->rem(215, 227, $detalhe) / 100, 2, false))
->setValorAbatimento(Util::nFloat($this->rem(228, 240, $detalhe) / 100, 2, false))
->setValorDesconto(Util::nFloat($this->rem(241, 253, $detalhe) / 100, 2, false))
->setValorRecebido(Util::nFloat($this->rem(254, 266, $detalhe) / 100, 2, false))
->setValorMora(Util::nFloat($this->rem(267, 279, $detalhe) / 100, 2, false));

$msgAdicional = str_split(sprintf('%08s', $this->rem(378, 385, $detalhe)), 2) + array_fill(0, 4, '');
if ($d->hasOcorrencia('06', '08', '10')) {
$this->totais['liquidados']++;
$d->setOcorrenciaTipo($d::OCORRENCIA_LIQUIDADA);
} elseif ($d->hasOcorrencia('01', '02')) {
$this->totais['entradas']++;
$d->setOcorrenciaTipo($d::OCORRENCIA_ENTRADA);
} elseif ($d->hasOcorrencia('09')) {
$this->totais['baixados']++;
$d->setOcorrenciaTipo($d::OCORRENCIA_BAIXADA);
} elseif ($d->hasOcorrencia('43')) {
$this->totais['protestados']++;
$d->setOcorrenciaTipo($d::OCORRENCIA_PROTESTADA);
} elseif ($d->hasOcorrencia('05', '14', '22')) {
$this->totais['alterados']++;
$d->setOcorrenciaTipo($d::OCORRENCIA_ALTERACAO);
} elseif ($d->hasOcorrencia('03', '15', '16')) {
$this->totais['erros']++;
$error = Util::appendStrings(Arr::get($this->rejeicoes[sprintf('%02s', $d->getOcorrencia())], $msgAdicional[0], ''), Arr::get($this->rejeicoes[sprintf('%02s', $d->getOcorrencia())], $msgAdicional[1], ''), Arr::get($this->rejeicoes[sprintf('%02s', $d->getOcorrencia())], $msgAdicional[2], ''), Arr::get($this->rejeicoes[sprintf('%02s', $d->getOcorrencia())], $msgAdicional[3], ''));
$d->setError($error);
} else {
$d->setOcorrenciaTipo($d::OCORRENCIA_OUTROS);
}

return true;
}

/**
* @param array $trailer
*
* @return bool
*/
protected function processarTrailer(array $trailer)
{
$this->getTrailer()
->setQuantidadeTitulos($this->count())
->setQuantidadeEntradas((int) $this->totais['entradas'])
->setQuantidadeLiquidados((int) $this->totais['liquidados'])
->setQuantidadeBaixados((int) $this->totais['baixados'])
->setQuantidadeAlterados((int) $this->totais['alterados']);

return true;
}
}

0 comments on commit 8e1dbff

Please sign in to comment.