From 20253121cacf10bda560857256e27182e7f3da9a Mon Sep 17 00:00:00 2001 From: Fernando Friedrich Date: Mon, 24 Jun 2024 15:04:57 -0300 Subject: [PATCH] Adicionado tipo de protesto para Bancoob/Sicoob --- src/Boleto/AbstractBoleto.php | 38 ++++++++++++++++++++++ src/Cnab/Remessa/Cnab240/Banco/Bancoob.php | 20 ++++++++++-- src/Contracts/Boleto/Boleto.php | 7 ++++ 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/Boleto/AbstractBoleto.php b/src/Boleto/AbstractBoleto.php index 11c38932..06138497 100644 --- a/src/Boleto/AbstractBoleto.php +++ b/src/Boleto/AbstractBoleto.php @@ -123,6 +123,12 @@ abstract class AbstractBoleto implements BoletoContract */ public $diasProtesto = 0; + /** + * Tipo de prostesto se dias úteis, dias corridos, não protestar + * @var int + */ + public $tipoProtesto = 0; + /** * Dias para baixa automática * @@ -1435,6 +1441,38 @@ public function getDiasProtesto($default = 0) return $this->diasProtesto > 0 ? $this->diasProtesto : $default; } + /** + * Seta dias para protesto + * 0 = Não protestar, 1 = Dias corridos, 2 = Dias úteis, 3 = Negativar dias corridos, 4 = Não negativar + * @param int $tipoProtesto + * + * @return AbstractBoleto + * @throws \Exception + */ + public function setTipoProtesto($tipoProtesto) + { + $tipoProtesto = (int)$tipoProtesto; + $this->tipoProtesto = $tipoProtesto > 0 ? $tipoProtesto : 0; + + if (!empty($tipoProtesto) && $this->getDiasProtesto() == 0) { + throw new \Exception('Você deve informar dias de protesto se informar tipo de protesto'); + } + + return $this; + } + + /** + * Retorna os diasProtesto + * + * @param int $default + * + * @return int + */ + public function getTipoProtesto($default = 0) + { + return $this->tipoProtesto > 0 ? $this->tipoProtesto : $default; + } + /** * Seta os dias para baixa automática * diff --git a/src/Cnab/Remessa/Cnab240/Banco/Bancoob.php b/src/Cnab/Remessa/Cnab240/Banco/Bancoob.php index 3728d316..d0e6d88e 100644 --- a/src/Cnab/Remessa/Cnab240/Banco/Bancoob.php +++ b/src/Cnab/Remessa/Cnab240/Banco/Bancoob.php @@ -152,7 +152,21 @@ protected function segmentoP(BoletoContract $boleto) $this->add(196, 220, Util::formatCnab('X', $boleto->getNumeroControle(), 25)); $this->add(221, 221, self::PROTESTO_NAO_PROTESTAR); if ($boleto->getDiasProtesto() > 0) { - $this->add(221, 221, self::PROTESTO_DIAS_UTEIS); + switch ($boleto->getTipoProtesto()) { + case 1: + $this->add(221, 221, self::PROTESTO_DIAS_CORRIDOS); + break; + case 2: + default: + $this->add(221, 221, self::PROTESTO_DIAS_UTEIS); + break; + case 3: + $this->add(221, 221, self::PROTESTO_NEGATIVAR_DIAS_CORRIDOS); + break; + case 4: + $this->add(221, 221, self::PROTESTO_NAO_NEGATIVAR); + break; + } } $this->add(222, 223, Util::formatCnab('9', $boleto->getDiasProtesto(), 2)); $this->add(224, 224, '0'); @@ -239,7 +253,7 @@ public function segmentoR(BoletoContract $boleto) $this->add(43, 50, '00000000'); $this->add(51, 65, '000000000000000'); $this->add(66, 66, $boleto->getMulta() > 0 ? '2' : '0'); //0 = ISENTO | 1 = VALOR FIXO | 2 = PERCENTUAL - $this->add(67, 74, $boleto->getMulta() > 0 ? $boleto->getDataVencimento()->copy()->addDays($boleto->getMultaApos())->format('dmY') : '00000000'); + $this->add(67, 74, $boleto->getMulta() > 0 ? $boleto->getDataVencimento()->copy()->addDays($boleto->getMultaApos())->format('dmY') : '00000000'); $this->add(75, 89, Util::formatCnab('9', $boleto->getMulta(), 15, 2)); //2,20 = 0000000000220 $this->add(90, 199, ''); $this->add(200, 207, '00000000'); @@ -338,7 +352,7 @@ protected function trailerLote() { $this->iniciaTrailerLote(); - $valor = array_reduce($this->boletos, function ($valor, $boleto) { + $valor = array_reduce($this->boletos, function($valor, $boleto) { return $valor + $boleto->getValor(); }, 0); diff --git a/src/Contracts/Boleto/Boleto.php b/src/Contracts/Boleto/Boleto.php index 001e0abe..cfac9587 100644 --- a/src/Contracts/Boleto/Boleto.php +++ b/src/Contracts/Boleto/Boleto.php @@ -180,6 +180,13 @@ public function getMultaApos(); */ public function getDiasProtesto($default = 0); + /** + * @param int $default + * + * @return mixed + */ + public function getTipoProtesto($default = 0); + /** * @param int $default *