Marcus Vinicius Nash Postado Julho 2, 2013 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
Marco Antonio Postado Julho 2, 2013 Compartilhar Postado Julho 2, 2013 Opa, ! Obrigado por compartilhar, a comunidade agradece... Link para o comentário Compartilhar em outros sites More sharing options...
juliocsc Postado Julho 10, 2013 Compartilhar 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 ? Link para o comentário Compartilhar em outros sites More sharing options...
juliocsc Postado Julho 11, 2013 Compartilhar 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. Link para o comentário Compartilhar em outros sites More sharing options...
Supernova Postado Novembro 19, 2013 Compartilhar Postado Novembro 19, 2013 Alguém encontrou a solução? Link para o comentário Compartilhar em outros sites More sharing options...
Stylle Postado Novembro 20, 2013 Compartilhar 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. Link para o comentário Compartilhar em outros sites More sharing options...
Supernova Postado Novembro 20, 2013 Compartilhar Postado Novembro 20, 2013 Infelizmente não tenho o conhecimento necessário para saber o que pode esta errado. Link para o comentário Compartilhar em outros sites More sharing options...
ESerra Postado Novembro 20, 2013 Compartilhar 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. Link para o comentário Compartilhar em outros sites More sharing options...
Supernova Postado Novembro 25, 2013 Compartilhar 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. Link para o comentário Compartilhar em outros sites More sharing options...
Supernova Postado Dezembro 19, 2013 Compartilhar Postado Dezembro 19, 2013 Alguém? Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados