= 1){ return; } $ujrah = ($kadarujrah/100) * $nilaimarhun; $formula_margin = ($this->maks_margin - $margin) / $this->maks_margin; $ujrah_margin = $formula_margin * $kadarujrah; $rebate_ujrah = $nilaimarhun*($ujrah_margin/100); $ujrah_sebenar = $ujrah - $rebate_ujrah; return $ujrah_sebenar; } private function kiraanOnePercent(float $pembiayaan = 0.0){ //periksa adakah pembiayaan adalah null atau kosong. if($pembiayaan == 0 || $pembiayaan == null) return; $onepercent = ($this->one_percent/100) * $pembiayaan; return $onepercent; } public function kiraanUjrahSebenar(float $nilaimarhun = 0.0,float $kadarujrah = 0.0,float $margin = 0.0){ if($kadarujrah >= 1){ return; } $ujrah = ($kadarujrah/100) * $nilaimarhun; $formula_margin = ($this->maks_margin - $margin) / $this->maks_margin; $rebate_ujrah = $formula_margin * $ujrah; $ujrah_sebenar = $ujrah - $rebate_ujrah; return $ujrah_sebenar; } public function kiraanKeuntunganRebet(float $pembiayaan = 0.0,float $nilaimarhun = 0.0,float $kadarujrah = 0.0,float $margin = 0.0, $kodcaw = null){ $this->one_percent = $this->getKadarUpah($nilaimarhun); $onepercent = $this->kiraanOnePercent($pembiayaan); $ujrah_sebenar = $this->kiraanUjrahSebenar($nilaimarhun,$kadarujrah,$margin); $onepercent = (!empty($onepercent)) ? $this->getRoundedMethod($onepercent) : 0; $ujrah_sebenar = (!empty($ujrah_sebenar)) ? $this->getRoundedMethod($ujrah_sebenar) : 0; $keuntungan = $onepercent + $ujrah_sebenar; $annur = $this->kiraanDiskaunAnnur($kodcaw, $pembiayaan, $keuntungan); return [ 'keuntungan' => $keuntungan, 'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar, 'diskaun' => $annur['diskaun'], 'kadarrebet' => $annur['kadarrebet'], ]; } /** * Annur promotional discount. Other cawangan get 0 unless rebet_annur is enabled. */ public function kiraanDiskaunAnnur($kodcaw, float $pembiayaan = 0.0, float $keuntungan = 0.0) { $empty = ['kadarrebet' => 0, 'diskaun' => 0]; try { if (!$kodcaw || !Feature::enabled($kodcaw, Feature::REBET_ANNUR)) { return $empty; } } catch (\Exception $e) { return $empty; } $percent = $this->kiraanRebetAnnur($pembiayaan); if ($percent <= 0 || $keuntungan <= 0) { return ['kadarrebet' => $percent, 'diskaun' => 0]; } return [ 'kadarrebet' => $percent, 'diskaun' => $this->getRoundedMethod($keuntungan * ($percent / 100)), ]; } private function kiraanRebetAnnur(float $pembiayaan = 0.0) { try { if (!Schema::connection('mysql7')->hasTable('kadar_rebet')) { return 0; } $kadarrebet = KadarRebet::on('mysql7') ->where('pembiayaan_min', '<=', $pembiayaan) ->where('pembiayaan_max', '>=', $pembiayaan) ->sum('kadarrebet'); return (float) $kadarrebet; } catch (\Exception $e) { return 0; } } public function kiraanKeuntunganSebenar(float $pembiayaan = 0.0,float $nilaimarhun = 0.0,float $kadarujrah = 0.0,float $margin = 0.0){ $this->one_percent = $this->getKadarUpah($nilaimarhun); $onepercent = $this->kiraanOnePercent($pembiayaan); $ujrah_sebenar = $this->kiraanUjrah($nilaimarhun,$kadarujrah,$margin); $onepercent = (!empty($onepercent)) ? $this->getRoundedMethod($onepercent) : 0; $ujrah_sebenar = (!empty($ujrah_sebenar)) ? $this->getRoundedMethod($ujrah_sebenar) : 0; $keuntungan = $onepercent + $ujrah_sebenar; return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; } public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid) : Float{ $kadarujrah = KadarUpah::on('mysql7')->select('kadarujrah')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',$groupid)->get()->toArray(); return isset($kadarujrah[0]) ? $kadarujrah[0]['kadarujrah'] : 0; } public function getKadarUpah(float $nilaimarhun = 0.0){ $kadarupah = KadarUpah::on('mysql7')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',1)->first(); return isset($kadarupah) ? $kadarupah['kadaronepercent'] : 1; } public function getRoundedMethod(float $number = 0.0) : Float{ // $multiplied = number_format($number * 100,2); // $floorResult = floor($multiplied); // $number_string = number_format($floorResult/100,2); $number_string = number_format(floor($number * 100)/100,2); $rounded = substr($number_string, 0, -1); $lastDigit = substr($number_string, -1); if ($lastDigit >= 0 && $lastDigit <= 2) { if(strpos($rounded,',')){ $rounded = str_replace(',','',$rounded); } return $rounded; } elseif ($lastDigit >= 3 && $lastDigit <= 7) { $rounded = $rounded . '5'; if(strpos($rounded,',')){ $rounded = str_replace(',','',$rounded); } return $rounded; } else { return round($number,PHP_ROUND_HALF_UP); } } /* End of Line Calculation */ }