Marcus Vinicius Nash Postado Julho 2, 2013 Postado Julho 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
Marco Antonio Postado Julho 2, 2013 Postado Julho 2, 2013 Opa, ! Obrigado por compartilhar, a comunidade agradece...
juliocsc Postado Julho 10, 2013 Postado Julho 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 ?
juliocsc Postado Julho 11, 2013 Postado Julho 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.
Stylle Postado Novembro 20, 2013 Postado Novembro 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.
Supernova Postado Novembro 20, 2013 Postado Novembro 20, 2013 Infelizmente não tenho o conhecimento necessário para saber o que pode esta errado.
ESerra Postado Novembro 20, 2013 Postado Novembro 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.
Supernova Postado Novembro 25, 2013 Postado Novembro 25, 2013 Quebrei a cabeça para tentar entender onde está o problema mas não consegui. Se alguém puder ajudar, agradeço.
Posts Recomendados