From dde4d910bb8ac9b1d0c55d3f827fa3769bd23bb4 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 10 Nov 2025 19:11:13 +0800 Subject: [PATCH] calculation for kadar anggota koperasi --- app/Services/OnePercentServices.php | 39 +++++++++++++++++-- app/Support/OnePercent.php | 28 ++++++++++---- app/Support/v2/Calculation.php | 59 ++++++++++++++++++++++++++--- app/Support/v2/GadaiV2.php | 37 +++++++++++++++--- 4 files changed, 141 insertions(+), 22 deletions(-) diff --git a/app/Services/OnePercentServices.php b/app/Services/OnePercentServices.php index 6e8e834..ad5b9ff 100644 --- a/app/Services/OnePercentServices.php +++ b/app/Services/OnePercentServices.php @@ -3,6 +3,7 @@ namespace App\Services; use App\KadarUpah; +use App\Customer; class OnePercentServices { @@ -79,13 +80,43 @@ class OnePercentServices return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; } - public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid) : Float{ +public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid, $nokp = null): float +{ + //Semak status pelanggan dalam table customer + if ($nokp) { + $customer = Customer::on('mysql7') + ->select('tag_anggota') + ->where(function($q) use ($nokp) { + $q->where('kpbaru', $nokp) + ->orWhere('kplama', $nokp); + }) + ->first(); - $kadarujrah = KadarUpah::on('mysql7')->select('kadarujrah')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',1)->get()->toArray(); - - return isset($kadarujrah[0]) ? $kadarujrah[0]['kadarujrah'] : 0; + // Jika anggota koperasi → kadar tetap + if ($customer && (int)$customer->tag_anggota === 1) { + return 0.16; // kadar ujrah tetap untuk anggota + } } + //Jika bukan anggota → ambil dari jadual kadar_upah + $kadar = KadarUpah::on('mysql7') + ->select('kadarujrah') + ->where([ + ['min', '<=', $nilaimarhun], + ['max', '>=', $nilaimarhun], + ]) + ->where('group_id', $groupid) + ->first(); + + //Jika jumpa kadar dalam jadual + if ($kadar && isset($kadar->kadarujrah)) { + return (float) $kadar->kadarujrah; + } + + //Default fallback + return 0.0; +} + public function getRoundedMethod(float $number = 0.0) : Float{ $number_string = number_format(floor($number * 100)/100,2); diff --git a/app/Support/OnePercent.php b/app/Support/OnePercent.php index e924fc1..941b245 100644 --- a/app/Support/OnePercent.php +++ b/app/Support/OnePercent.php @@ -9,6 +9,8 @@ use Illuminate\Http\Request as HttpRequest; use App\Support\v2\GadaiV2 as Version2Gadai; use App\Support\v2\Penebusan; +use Illuminate\Support\Facades\Log; + class OnePercent extends MasterServices { protected $kodcaw; @@ -61,18 +63,30 @@ class OnePercent extends MasterServices return $response; } - public function getKadarUjrah(HttpRequest $request){ - $cawangan = Cawangan::on('mysql7')->where('kodcaw',$request->kodcaw)->first(); - $onePercentServices = new Calculation(); - $kadarujrah = $onePercentServices->getKadarUjrah($request->nilaimarhun,$cawangan['group_id']); + public function getKadarUjrah(HttpRequest $request) +{ + Log::info('[DEBUG-CONTROLLER] Data request', [ + 'nokp' => $request->nokp, + 'kodcaw' => $request->kodcaw, + 'nilaimarhun' => $request->nilaimarhun + ]); - return $kadarujrah; - } + $cawangan = Cawangan::on('mysql7')->where('kodcaw', $request->kodcaw)->first(); + $onePercentServices = new Calculation(); + + $kadarujrah = $onePercentServices->getKadarUjrah( + $request->nilaimarhun, + $cawangan['group_id'], + $request->nokp + ); + + return $kadarujrah; +} public function getOnePercent(HttpRequest $request){ $margin = (!is_numeric($request->margin)) ? 0 : $request->margin; $onePercentServices = new Calculation(); - $keuntungan = $onePercentServices->kiraanKeuntunganSebenar($request->pembiayaan,$request->nilaimarhun,$request->kadarujrah,$margin); + $keuntungan = $onePercentServices->kiraanKeuntunganSebenar($request->pembiayaan,$request->nilaimarhun,$request->kadarujrah,$margin, $request->nokp); return $keuntungan; } diff --git a/app/Support/v2/Calculation.php b/app/Support/v2/Calculation.php index 178b275..18f31a6 100644 --- a/app/Support/v2/Calculation.php +++ b/app/Support/v2/Calculation.php @@ -3,6 +3,9 @@ namespace App\Support\v2; use App\KadarUpah; +use App\Customer; +use Illuminate\Support\Facades\Log; + use Illuminate\Http\Request; class Calculation @@ -58,7 +61,6 @@ class Calculation public function kiraanKeuntunganRebet(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->kiraanUjrahSebenar($nilaimarhun,$kadarujrah,$margin); @@ -83,13 +85,60 @@ class Calculation return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; } - public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid) : Float{ +public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid, $nokp = null): float +{ + // 1️⃣ Semak status pelanggan dalam table customer + if ($nokp) { + $customer = Customer::on('mysql7') + ->select('tag_anggota') + ->where(function($q) use ($nokp) { + $q->where('kpbaru', $nokp) + ->orWhere('kplama', $nokp); + }) + ->first(); - $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; + // 2️⃣ Jika anggota koperasi → kadar tetap + if ($customer && (int)$customer->tag_anggota === 1) { + Log::info('[DEBUG-UJRAH] Anggota koperasi', [ + 'nokp' => $nokp, + 'kadarujrah' => 0.16, + 'groupid' => $groupid, + 'nilaimarhun' => $nilaimarhun, + ]); + return 0.16; + } } + // 3️⃣ Jika bukan anggota → ambil dari jadual kadar_upah + $kadar = KadarUpah::on('mysql7') + ->select('kadarujrah') + ->where([ + ['min', '<=', $nilaimarhun], + ['max', '>=', $nilaimarhun], + ]) + ->where('group_id', $groupid) + ->first(); + + if ($kadar && isset($kadar->kadarujrah)) { + Log::info('[DEBUG-UJRAH] Bukan anggota - dari jadual kadar_upah', [ + 'nokp' => $nokp, + 'kadarujrah' => (float)$kadar->kadarujrah, + 'groupid' => $groupid, + 'nilaimarhun' => $nilaimarhun, + ]); + return (float) $kadar->kadarujrah; + } + + // 4️⃣ Default fallback + Log::info('[DEBUG-UJRAH] Tiada kadar ditemui', [ + 'nokp' => $nokp, + 'groupid' => $groupid, + 'nilaimarhun' => $nilaimarhun, + ]); + return 0.0; +} + + public function getKadarUpah(float $nilaimarhun = 0.0){ $kadarupah = KadarUpah::on('mysql7')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',1)->first(); diff --git a/app/Support/v2/GadaiV2.php b/app/Support/v2/GadaiV2.php index dd006a5..b0af4af 100644 --- a/app/Support/v2/GadaiV2.php +++ b/app/Support/v2/GadaiV2.php @@ -4,6 +4,7 @@ namespace App\Support\v2; use App\Audit; use App\Cawangan; +use App\Customer; use App\KadarUpah; use App\Support\v2\Calculation; use Carbon\Carbon; @@ -57,6 +58,31 @@ class GadaiV2 } } + private function getKadarUpahAnggota($nokp,$total_nilai_marhun = 0,$groupid = 2) : Float{ + Log::info('DEBUG NOKP:' . $nokp); + if($nokp){ + $customer = Customer::on('mysql7') + ->select('tag_anggota') + ->where(function($q) use ($nokp) { + $q->where('kpbaru', $nokp) + ->orWhere('kplama', $nokp); + }) + ->first(); + $customer = $customer ? $customer->toArray() : []; + if(isset($customer) && $customer['tag_anggota'] == 1){ + return 0.16; + }else{ + return KadarUpah::where('min', '<=', $total_nilai_marhun) + ->where('max', '>=', $total_nilai_marhun) + ->where('group_id', $groupid) + ->value('kadarujrah'); + } + } + + return 0.0; + + } + public function createMarhun($norujukan,HttpRequest $request){ $current = Carbon::now(); $current = new Carbon(); @@ -83,14 +109,13 @@ class GadaiV2 $total_berat = Marhun::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->sum('berat'); //query kadar upah baru - $kadar_raw = KadarUpah::where('min','<=',$total_nilai_marhun)->where('max','>=',$total_nilai_marhun)->where('group_id',$cawangan['group_id'])->first(); - + $kadar_raw = $this->getKadarUpahAnggota($request->nokp,$total_nilai_marhun,$cawangan['group_id']); // query kadar upah lama // $kadar_raw = KadarUpah::where('min','<=',$total_nilai_marhun)->where('max','>=',$total_nilai_marhun)->first(); $onepercentservices = new Calculation(); - $keuntungan = $onepercentservices->kiraanKeuntunganSebenar($request->pinjaman,$total_nilai_marhun,$kadar_raw['kadarujrah'],$margin_pinjam); + $keuntungan = $onepercentservices->kiraanKeuntunganSebenar($request->pinjaman,$total_nilai_marhun,$kadar_raw,$margin_pinjam); // $upah1 = $request->pinjaman * ($kadar_raw['kadarupdah']/100); // $upah6 = $upah1 * 6; // $upah12 = $upah1 * 12; @@ -102,7 +127,7 @@ class GadaiV2 $hargajualan = $request->pinjaman + $upah12; - $akrual = $this->kiraupahTawarruqStokAuditUjrahOnePercent(0.5,0,$kadar_raw['kadarujrah'],$request->pinjaman,$total_nilai_marhun,$margin_pinjam); + $akrual = $this->kiraupahTawarruqStokAuditUjrahOnePercent(0.5,0,$kadar_raw,$request->pinjaman,$total_nilai_marhun,$margin_pinjam); $gadai = Gadai::on($cawangan['mysql']) ->where('norujukan','=',$norujukan) @@ -110,7 +135,7 @@ class GadaiV2 'nilaimarhun' => $total_nilai_marhun, 'berat'=> $total_berat, 'pinjaman' => $request->pinjaman, - 'kadarupah' => $kadar_raw['kadarujrah'], + 'kadarupah' => $kadar_raw, 'marhun' => $request->marhun, 'percentpinj' => $margin_pinjam, 'teller' => $request->teller, @@ -131,7 +156,7 @@ class GadaiV2 'upahdibayar' => 0.00, 'tempohbayar' => 0.00, 'lelong_tawarruq' => 1, - 'kadarujrah' => $kadar_raw['kadarujrah'], + 'kadarujrah' => $kadar_raw, 'ujrah' => $ujrah, 'onepercent' => $onepercent, 'margin_semasa' => $margin_pinjam,