Ir para conteúdo
View in the app

A better way to browse. Learn more.

Portal do Host

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Caculo De Juros E Atualização Da Data De Vencimento Do Boleto.

Featured Replies

Postado

Olá Amigos,

 

Gostaria de compartilhar um script que fiz usando uma class de calculo de juros que poderá ajuda-los. 

Para quem usa o PHPBoleto integrado ao WHMCS, basta editar o arquivo /whmcs/modules/boleto/include/funcoes_SEUBANCO.php

/********************************************************************************************
 * CALCULO DE JUROS E MULTA 
 *******************************************************************************************/
include 'juros.php';

//FUNÇÃO PARA CALCULO DE X DIAS APÓS A DATA ATUAL

$boleto = new Juros($dadosboleto["valor_boleto"],$dadosboleto["data_vencimento"],$multa,$juros);
if($boleto->VerificaBoleto()){

    
	// RETORNA O VALOR COM JUROS
    
    $boleto->CalculaOsJuros();
     
    $mensagem_juros  = "
   
      <B>Valor do Documento:</B> R$ ".$boleto->Moeda($boleto->getValor())."  
    | <B>Juros:</B> R$ ".$boleto->getJurosTotal()." 
    | <B>Multa:</B> R$ ".$boleto->getMultaTotal()."
    | <B>Dias em atraso:</B> ".(int)$boleto->getDiasEmAberto();      
    
    $dadosboleto["valor_boleto"]  = $boleto->getValorTotal();
    $dadosboleto["demonstrativo3"] = $mensagem_juros;
    
    /* ADCIONA MAIS 1 DIA */
    $dadosboleto["data_vencimento"] =  date('d/m/Y', strtotime("+1 days"));
    
                 
} else { 
	
    // RETORNA O VALOR SEM JUROS
    $dadosboleto["valor_boleto"]  = $boleto->Moeda($boleto->getValor());
    $dadosboleto["demonstrativo3"] = "";
     
}
    

Também vamos precisar da Class juros.php, não me recordo onde localizei ela, segue o script (adicione ele junto do arquivo que está sendo editado). Informe os valores em %

<?php

$multa = 2; //% 
$juros = 0.033; //%
    
class Juros {
    
    private $valor;
    private $vencimento;
    private $multa;
    private $juros;
    
    private $valorTotal;
    private $jurosTotal;
    private $multaTotal;
    private $diasEmAberto;
    	
    public function __construct($valor,$vencimento,$multa,$juros){
		$this->valor      = $valor;
        $this->vencimento = $vencimento;
        $this->multa      = $multa;
        $this->juros      = $juros;
    }
	public function getValor()     { return $this->valor; }
    public function getVencimento(){ return $this->vencimento; }
    public function getMulta()     { return $this->multa; }
    public function getJuros()     { return $this->juros; }
    
    public function getValorTotal()     { return $this->valorTotal; }
    public function getJurosTotal()     { return $this->jurosTotal; }
    public function getMultaTotal()     { return $this->multaTotal; }
    public function getDiasEmAberto()   { return $this->diasEmAberto; }
            
    
    function ConverteData($data, $tipo){
    	if ($tipo == 0) {
    		$datatrans = explode ("/", $data);
    		$data = "$datatrans[2]-$datatrans[1]-$datatrans[0]";
    	} elseif ($tipo == 1) {
    		$datatrans = explode ("-", $data);
    		$data = "$datatrans[2]/$datatrans[1]/$datatrans[0]";
    	}elseif ($tipo == 2) {
    		$datatrans = explode ("-", $data);
    		$data = "$datatrans[1]/$datatrans[2]/$datatrans[0]";
    	} elseif ($tipo == 3) {
    		$datatrans = explode ("/", $data);
    		$data = "$datatrans[2]-$datatrans[1]-$datatrans[0]";
    	}
               
    	return $data;
    }    
    
       
    function VerificaBoleto(){
        
        list($ano,$mes,$dia) = explode("-",$this->ConverteData($this->vencimento,3));
        
        $VerificaBoleto['data']['vencimento'] = mktime (0, 0, 0, $mes, $dia, $ano);
        $VerificaBoleto['data']['atual'] = mktime (0, 0, 0, date("m"), date("d"), date("Y"));
        if($VerificaBoleto['data']['atual'] <= $VerificaBoleto['data']['vencimento']){
            return false; // BOLETO EM ABERTO            
        } else {             
            return true; // BOLETO VENCIDO      
        }

    }
    
    function DiasEntreData($date_ini, $date_end){
	    $data_ini = strtotime( $this->ConverteData($this->ConverteData($date_ini,3),2)); 
	    $hoje = $this->ConverteData($date_end,3);
    	$foo = strtotime($hoje);
    	$dias = ($foo - $data_ini)/86400; 
	    return $dias;
    }

    function Moeda($value){
    	return number_format($value, 2, ",", ".");
    }
    
    function CalculaOsJuros(){        
        $juros = (($this->juros * ($this->DiasEntreData($this->vencimento,date("d/m/Y")))));
              
        if($this->DiasEntreData($this->vencimento,date("d/m/Y"))==0){
            $multa = 0;
        } else {
            $multa = (($this->multa * $this->valor) / 100);
        }
        
        $this->valorTotal    = $this->Moeda($this->valor + ($juros + $multa));
        $this->jurosTotal    = $this->Moeda($juros);
        $this->multaTotal    = $this->Moeda($multa);
        $this->diasEmAberto  = $this->DiasEntreData($this->vencimento,date("d/m/Y"));

    }
    
}
?>

Bom aproveito. 



Postado

Boa noite,

Estou utilizando o código, porém tenho uma dúvida.

 

O script deveria calcular

valor do boleto + valor dos juros + valor da multa = Total a pagar

 

Porém, ele calcula apenas

valor do boleto + valor da multa = total a pagar

 

 

O script, chega a calcular a porcentagem da multa em atraso e os (juros de dias em atraso), porém o valor final do boleto para pagamento nao é acrescidos o valor dos (juros de dias em atraso), só é acrescentado o valor da multa.

 

Alguém pode me ajudar ?


Postado

outro fato inusitado, é que por exemplo:

R$14,50 é o valor da fatura + 2,10 taxa bancária.

Ao em vez do script calcular o valor de R$16,60   ele calcula apenas 16,00  dando prejuizo de 0,60 centavos.


Postado

Alguém encontrou a solução?


Postado

Esse calculo tem de ser feito com muito cuidado e ser bem revisado.

Já temos em nossos boletos, deu um certo trabalho pra fazer, se observarem com mais cuidado vão compreender que o cálculo não está levando em conta os centavos.


Postado

Infelizmente não tenho o conhecimento necessário para saber o que pode esta errado. 


Postado

O problema é simples, os dados estão sendo passados no nosso padrão xxxx,xx (centavos separdos por vírgula), o correto é separar os centavos por ponto xxxx.xx, senão é exatamente isto que acontece, o que vem depois da vírgula é ignorado.


Postado

Quebrei a cabeça para tentar entender onde está o problema mas não consegui. 

 

Se alguém puder ajudar, agradeço. 



Visitante
Este tópico está impedido de receber novos posts.

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Informação Importante

Concorda com os nossos termos?

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.