Marcus Vinicius Nash Posted July 2, 2013 Share Posted July 2, 2013 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. 1 Link to comment Share on other sites More sharing options...
Marco Antonio Posted July 2, 2013 Share Posted July 2, 2013 Opa, ! Obrigado por compartilhar, a comunidade agradece... Link to comment Share on other sites More sharing options...
juliocsc Posted July 10, 2013 Share Posted July 10, 2013 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 ? Link to comment Share on other sites More sharing options...
juliocsc Posted July 11, 2013 Share Posted July 11, 2013 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. Link to comment Share on other sites More sharing options...
Supernova Posted November 19, 2013 Share Posted November 19, 2013 Alguém encontrou a solução? Link to comment Share on other sites More sharing options...
Stylle Posted November 20, 2013 Share Posted November 20, 2013 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. Link to comment Share on other sites More sharing options...
Supernova Posted November 20, 2013 Share Posted November 20, 2013 Infelizmente não tenho o conhecimento necessário para saber o que pode esta errado. Link to comment Share on other sites More sharing options...
ESerra Posted November 20, 2013 Share Posted November 20, 2013 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. Link to comment Share on other sites More sharing options...
Supernova Posted November 25, 2013 Share Posted November 25, 2013 Quebrei a cabeça para tentar entender onde está o problema mas não consegui. Se alguém puder ajudar, agradeço. Link to comment Share on other sites More sharing options...
Supernova Posted December 19, 2013 Share Posted December 19, 2013 Alguém? Link to comment Share on other sites More sharing options...
Recommended Posts