From d4d05bd338af9c41f40ed7c9b3788c8e8172da30 Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Thu, 23 Nov 2023 09:24:44 +0800 Subject: [PATCH 1/6] Add wip overall reports --- .../Controllers/ReportGadaiController.php | 106 +++------- app/Services/Reports/GadaianService.php | 193 ++++++++++++++++++ app/helpers.php | 15 ++ routes/report.php | 6 + 4 files changed, 247 insertions(+), 73 deletions(-) create mode 100644 app/Services/Reports/GadaianService.php create mode 100644 routes/report.php diff --git a/app/Http/Controllers/ReportGadaiController.php b/app/Http/Controllers/ReportGadaiController.php index 6c2b470..55bd66c 100644 --- a/app/Http/Controllers/ReportGadaiController.php +++ b/app/Http/Controllers/ReportGadaiController.php @@ -3,96 +3,56 @@ namespace App\Http\Controllers; use App\Cawangan; +use App\CawanganDetail; use App\Customer; use App\Gadai; +use App\Marhun; +use DateTime; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use App\Services\Reports\GadaianService as ReportGadaianService; class ReportGadaiController extends Controller { - public function getLaporanGadai($kodcaw, $tarikh) + + public function getLaporanCawangan(string $kod_cawangan, Request $request) { - $cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $kodcaw)->first(); - - $gadai_data = Gadai::on($cawangan['mysql'])->select('t_gadai', 'norujukan', 'nokp', 'semakbarcode', 'masa', 'berat', 'nilaimarhun', 'pinjaman', 'upah12', 'percentpinj', 'teller', 'nokp') - ->where('t_gadai', '=', $tarikh) - ->orderBy('teller') - ->orderBy('sirig') - ->get(); - - $gadai = []; - - if ($gadai_data) { - foreach ($gadai_data as $index => $gadaiData) { - $customer_info = Customer::on('mysql7')->where('kplama', '=', $gadaiData['nokp'])->orWhere('kpbaru', '=', $gadaiData['nokp'])->first(); - array_push($gadai, [ - "t_gadai" => $gadaiData['t_gadai'], - "norujukan" => $gadaiData['norujukan'], - "nama" => $customer_info['nama'], - "nokp" => $gadaiData['nokp'], - "semakbarcode" => $gadaiData['semakbarcode'], - "masa" => $gadaiData['masa'], - "berat" => $gadaiData['berat'], - "nilaimarhun" => $gadaiData['nilaimarhun'], - "pinjaman" => $gadaiData['pinjaman'], - "upah12" => $gadaiData['upah12'], - "percentpinj" => $gadaiData['percentpinj'], - "alamat1" => $customer_info['alamat1'], - "teller" => $gadaiData['teller'], - ]); - } - } - - return response()->json($gadai); + $reportGadaianService = new ReportGadaianService($kod_cawangan, $request); + return $reportGadaianService->getCawanganReport(); } - public function getLaporanGadaiAll() - { - $tarikh = '2023-11-01'; + public function getSummaryLaporanGadai(Request $request) + { + $onDate = $request->onDate; + $startDate = $request->startDate; + $endDate = $request->endDate; $active_cawangan_db_connection = getActiveCawanganDbConnection(); - $active_cawangan_db = array_map(function ($connection) { - return config('database.connections.' . $connection)['database']; + $active_cawangan_db_name = array_map(function ($db_connection) { + return config('database.connections' . '.' . $db_connection . '.' . 'database'); }, $active_cawangan_db_connection); - $active_cawangan_name = Cawangan::whereIn('db_name', $active_cawangan_db)->pluck('details_caw')->toArray(); + $active_cawangan_detail = Cawangan::select('kodcaw', 'details_caw')->whereIn('db_name', $active_cawangan_db_name)->get()->toArray(); - $gadai_data = array_map(function ($db_connection) use ($tarikh) { - $gadai = Gadai::on($db_connection)->select('t_gadai', 'norujukan', 'nokp', 'semakbarcode', 'masa', 'berat', 'nilaimarhun', 'pinjaman', 'upah12', 'percentpinj', 'teller', 'nokp') - ->where('t_gadai', '=', $tarikh) - ->orderBy('teller') - ->orderBy('sirig') - ->get(); + $summary_gadaian_data = array_map(function ($db_connection) use ($request) { + $query = Gadai::on($db_connection); + + $query->select(DB::raw('count(norujukan) as total_gadaian, sum(berat) as sum_berat, sum(nilaimarhun) as sum_nilai_marhun, sum(pinjaman) as sum_pinjaman')); + + $query->when($request->filled('startDate') and $request->filled('endDate'), function ($q) use ($request) { + return $q->where('t_gadai', '>=', $request->startDate) + ->where('t_gadai', '<=', $request->endDate); + }); + + return $query->get()->toArray(); - return $gadai->toArray(); }, $active_cawangan_db_connection); - $gadai_data_with_key = array_combine($active_cawangan_name, $gadai_data); + $response = array_map(function ($cawangan_detail, $summary_gadaian_data) { + return array_merge($cawangan_detail, $summary_gadaian_data[0]); + }, $active_cawangan_detail, $summary_gadaian_data); - $overall_data_gadai = array_map(function ($gadaian_cawangan) { - return array_map(function ($gadai) { - - $customer_info = Customer::on('mysql7')->where('kplama', '=', $gadai['nokp'])->orWhere('kpbaru', '=', $gadai['nokp'])->first()->toArray(); - - return [ - "t_gadai" => $gadai['t_gadai'], - "norujukan" => $gadai['norujukan'], - "nama" => $customer_info['nama'], - "nokp" => $gadai['nokp'], - "semakbarcode" => $gadai['semakbarcode'], - "masa" => $gadai['masa'], - "berat" => $gadai['berat'], - "nilaimarhun" => $gadai['nilaimarhun'], - "pinjaman" => $gadai['pinjaman'], - "upah12" => $gadai['upah12'], - "percentpinj" => $gadai['percentpinj'], - "alamat1" => $customer_info['alamat1'], - "teller" => $gadai['teller'], - ]; - - }, $gadaian_cawangan); - - }, $gadai_data_with_key); - - return response()->json($overall_data_gadai); + return json_encode($response); } } diff --git a/app/Services/Reports/GadaianService.php b/app/Services/Reports/GadaianService.php new file mode 100644 index 0000000..7eb65af --- /dev/null +++ b/app/Services/Reports/GadaianService.php @@ -0,0 +1,193 @@ +kod_cawangan = $kod_cawangan; + $this->startDate = $request->startDate; + $this->endDate = $request->endDate; + } + + public function getCawanganReport() + { + $cawangan_connection = Cawangan::where('kodcaw', $this->kod_cawangan)->first()->mysql; + + $query_total_gadaian = Gadai::on($cawangan_connection); + + $query_total_gadaian->when(!empty($this->startDate) and !empty($this->endDate), function ($q) { + return $q->where('t_gadai', '>=', $this->startDate) + ->where('t_gadai', '<=', $this->endDate); + }); + + $total_gadaian = $this->getTotalGadaian($query_total_gadaian); + $total_summary_gadaian_teller = $this->getTotalSummaryGadaianGroupByTeller($query_total_gadaian); + $total_summary_gadaian = $this->getTotalSummaryGadaian($query_total_gadaian); + $customer_info = $this->getCustomerInfo($total_gadaian); + $marhun_gadaian = $this->getMarhunGadaian($total_gadaian, $cawangan_connection); + $cawangan_detail = $this->getCawanganDetail($cawangan_connection); + + $total_gadaian = $total_gadaian->zip($customer_info, $marhun_gadaian)->map(function ($data) { + + [$gadai, $customer_info, $marhun_gadaian] = $data; + + return [ + 'no_rujukan' => $gadai['norujukan'], + 'nama' => $customer_info['nama'], + 'alamat' => $customer_info['alamat1'], + 'no_kp' => $gadai['nokp'], + 'masa' => $gadai['masa'], + 'marhun' => $marhun_gadaian, + 'berat' => $gadai['berat'], + 'nilai_marhun' => $gadai['nilaimarhun'], + 'pembiayaan' => $gadai['pinjaman'], + 'peratusan_margin_pinjaman' => $gadai['percentpinj'], + 'teller' => $gadai['teller'], + ]; + + }); + + $total_gadaian = $total_gadaian->groupBy('teller'); + + $gadaian_tellers = $total_gadaian->keys(); + + $total_gadaian = $total_gadaian + ->zip($total_summary_gadaian_teller) + ->map(function ($data) { + + [$gadaian, $summary] = $data; + + return [ + 'gadaian' => $gadaian, + 'summary_gadaian_teller' => $summary, + ]; + }); + + $total_gadaian = $gadaian_tellers->combine($total_gadaian); + + $data = [ + 'query' => [ + 'startDate' => formatDate($this->startDate), + 'endDate' => formatDate($this->endDate), + ], + 'cawangan_detail' => $cawangan_detail, + 'gadaian' => $total_gadaian, + 'summary_gadaian' => $total_summary_gadaian, + ]; + + return json_encode($data); + + } + + private function getCawanganDetail($cawangan_connection) + { + $cawangan_detail = CawanganDetail::on($cawangan_connection)->get() + ->map(function ($detail) { + return [ + 'nama' => $detail['namacaw'], + 'code' => $detail['kodcaw'] . ' Ar-Rahn ' . $detail['cawangan'], + 'alamat' => $detail['alamat1'], + 'waktu_operasi' => $detail['alamat4'], + ]; + }); + + return $cawangan_detail[0]; + + } + + private function getTotalSummaryGadaian(Builder $query_total_gadaian) + { + + $total_summary_gadaian = (clone $query_total_gadaian) + ->selectRaw('sum(berat) as total_berat, sum(nilaimarhun) as total_nilai_marhun, sum(pinjaman) as total_pembiayaan') + ->get() + ->map(function ($x) { + return [ + 'total_berat' => $x['total_berat'], + 'total_nilai_marhun' => $x['total_nilai_marhun'], + 'total_pembiayaan' => $x['total_pembiayaan'], + ]; + }); + + return $total_summary_gadaian[0]; + } + private function getTotalSummaryGadaianGroupByTeller(Builder $query_total_gadaian) + { + + $total_summary_gadaian_groupByTeller = (clone $query_total_gadaian) + ->selectRaw('sum(berat) as total_berat, sum(nilaimarhun) as total_nilai_marhun, sum(pinjaman) as total_pembiayaan') + ->groupBy('teller') + ->get(); + return $total_summary_gadaian_groupByTeller; + } + + private function getTotalGadaian(Builder $query_total_gadaian) + { + $total_gadaian = (clone $query_total_gadaian) + ->select('t_gadai', 'norujukan', 'nokp', 'semakbarcode', 'masa', 'berat', 'nilaimarhun', 'pinjaman', 'upah12', 'percentpinj', 'teller', 'nokp') + ->orderBy('teller') + ->orderBy('sirig') + ->get(); + return $total_gadaian; + } + + private function getCustomerInfo($total_gadaian) + { + + $extract_nokp = $total_gadaian->pluck('nokp'); + + $customer_info = Customer::on('mysql7') + ->select(['nama', 'alamat1', 'kpbaru', 'kplama']) + ->where(function ($query) use ($extract_nokp) { + $query->whereIn('kpbaru', $extract_nokp) + ->orWhereIn('kplama', $extract_nokp); + }) + ->get(); + + $customer_info = collect($extract_nokp)->map(function ($nokp) use ($customer_info) { + return $customer_info->where('kpbaru', $nokp)->first() ?? $customer_info->where('kplama', $nokp)->first(); + })->toArray(); + + return $customer_info; + } + + private function getMarhunGadaian($total_gadaian, $cawangan_connection) + { + + $extract_norujukan = $total_gadaian->pluck('norujukan'); + + $marhun_gadaian = Marhun::on($cawangan_connection) + ->select('norujukan', 'bil', 'marhun') + ->whereIn('norujukan', $extract_norujukan) + ->get() + ->groupBy('norujukan') + ->toArray(); + + $marhun_gadaian = array_map(function ($gadaian) { + return array_map(function ($norujukan) { + return $norujukan['bil'] . ' ' . $norujukan['marhun']; + }, $gadaian); + }, $marhun_gadaian); + + $marhun_gadaian = array_map(function ($gadaian) { + return implode(',', $gadaian); + }, $marhun_gadaian); + + return $marhun_gadaian; + } +} diff --git a/app/helpers.php b/app/helpers.php index 322074b..3abf80f 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -3,6 +3,21 @@ use Illuminate\Support\Facades\DB; +if (!function_exists('formatNumber')) { + function formatNumber ($amount) { + $formattedAmount = number_format($amount, 2, '.', ','); + + return $formattedAmount; + }; +} + + +if (!function_exists('formatDate')) { + function formatDate ($date_string) { + return (new DateTime($date_string))->format("d-m-Y"); + }; +} + if (!function_exists('getActiveCawanganDbConnection')) { function getActiveCawanganDbConnection() diff --git a/routes/report.php b/routes/report.php new file mode 100644 index 0000000..25cc03b --- /dev/null +++ b/routes/report.php @@ -0,0 +1,6 @@ +group(['prefix'=>'api'], function () use ($router){ + $router->get('gadailaporanOverallSummary', ['uses' => 'ReportGadaiController@getSummaryLaporanGadai']); + $router->get('gadailaporan/{kod_cawangan}', ['uses' => 'ReportGadaiController@getLaporanCawangan']); +}); From 12ce971b916a1c65c58790f4e19068bd12f18a75 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 16 Nov 2023 09:55:31 +0800 Subject: [PATCH 2/6] fix rebet and ujrah untuk tebus and uncomment all audit --- app/Http/Controllers/GadaiController.php | 45 +++--- app/Http/Controllers/TebusController.php | 173 +++++++++++++++++++---- routes/web.php | 4 +- 3 files changed, 170 insertions(+), 52 deletions(-) diff --git a/app/Http/Controllers/GadaiController.php b/app/Http/Controllers/GadaiController.php index b017e23..f16f5e8 100644 --- a/app/Http/Controllers/GadaiController.php +++ b/app/Http/Controllers/GadaiController.php @@ -292,22 +292,23 @@ class GadaiController extends Controller 'ujrah' => $ujrah, 'onepercent' => $onepercent, 'margin_semasa' => $margin_pinjam, + 'tagbaru' => 1 )); $new_data = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first(); - // $audit = new Audit(); - // $audit->users = $request->teller; - // $audit->actions = $request->transaction; - // $audit->norujukan = $norujukan; - // $audit->new_data = $new_data; - // if($request->transaction == 'Ubah Gadai'){ - // $audit->old_data = $old_data; - // } - // $audit->kodcaw = $request->kodcaw; - // $audit->created_at = $current; - // $audit->updated_at = $current; - // $audit->save(); + $audit = new Audit(); + $audit->users = $request->teller; + $audit->actions = $request->transaction; + $audit->norujukan = $norujukan; + $audit->new_data = $new_data; + if($request->transaction == 'Ubah Gadai'){ + $audit->old_data = $old_data; + } + $audit->kodcaw = $request->kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); return response()->json($gadai, 200); } @@ -547,16 +548,16 @@ class GadaiController extends Controller $new_data = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first(); - // $audit = new Audit(); - // $audit->users = $request->teller; - // $audit->actions = 'Bayaran Ansuran'; - // $audit->norujukan = $norujukan; - // $audit->new_data = $new_data; - // $audit->old_data = $old_data; - // $audit->kodcaw = $kodcaw; - // $audit->created_at = $current; - // $audit->updated_at = $current; - // $audit->save(); + $audit = new Audit(); + $audit->users = $request->teller; + $audit->actions = 'Bayaran Ansuran'; + $audit->norujukan = $norujukan; + $audit->new_data = $new_data; + $audit->old_data = $old_data; + $audit->kodcaw = $kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); if(!$transaction || !$transaction_upah) { throw new \Exception('One of the database operations failed.'); diff --git a/app/Http/Controllers/TebusController.php b/app/Http/Controllers/TebusController.php index 24f7533..0ae3446 100644 --- a/app/Http/Controllers/TebusController.php +++ b/app/Http/Controllers/TebusController.php @@ -39,6 +39,8 @@ use App\AkruNet; use App\Services\OnePercentServices; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; + use Carbon\Carbon; class TebusController extends Controller @@ -52,7 +54,9 @@ class TebusController extends Controller ->where('norujukan','=',$norujukan) ->first(); - $rebet = $this->rebetselepastawarruq($kodcaw,$norujukan); + $jeniskeuntungan = ($gadai_data['tagbaru'] == 1) ? 'onepercent' : 'asal'; + + $rebet = $this->rebetselepastawarruq($kodcaw,$norujukan,$jeniskeuntungan); $harga_tebus = $gadai_data['bakihargajualan'] - $rebet; @@ -65,7 +69,7 @@ class TebusController extends Controller return response()->json($hargatebus); } - public function hargaTebusTawarruq($kodcaw,$norujukan){ + public function hargaTebusTawarruq($kodcaw,$norujukan,$jeniskeuntungan){ $cawangan = Cawangan::on('mysql7') ->where('kodcaw','=',$kodcaw) ->first(); @@ -74,7 +78,7 @@ class TebusController extends Controller ->where('norujukan','=',$norujukan) ->first(); - $rebet = $this->rebetselepastawarruq($kodcaw,$norujukan); + $rebet = $this->rebetselepastawarruq($kodcaw,$norujukan,$jeniskeuntungan); $harga_tebus = $gadai_data['bakihargajualan'] - $rebet; @@ -87,7 +91,7 @@ class TebusController extends Controller return $hargatebus; } - public function kiraupahTawarruq($kodcaw,$norujukan){ + public function kiraupahTawarruq($kodcaw,$norujukan,$jeniskeuntungan){ $onepercentservices = new OnePercentServices(); $cawangan = Cawangan::on('mysql7') @@ -105,10 +109,13 @@ class TebusController extends Controller } $bilang_bln = $tempoh - $gadai_data['tempohbayar']; - $upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['percentpinj']); - // $upahsemasa_raw = $bilang_bln * (($gadai_data['kadarupah']/100 )* $gadai_data['pinjaman']); - $upahsemasa_raw = $bilang_bln * $upah['keuntungan']; - + if($jeniskeuntungan == 'onepercent'){ + $upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['percentpinj']); + $upahsemasa_raw = $bilang_bln * $upah['keuntungan']; + }else{ + $upahsemasa_raw = $bilang_bln * (($gadai_data['kadarupah']/100 )* $gadai_data['pinjaman']); + } + $upah_semasa_round = number_format($upahsemasa_raw,2); if(strpos($upah_semasa_round,',')){ $upah_semasa_round = str_replace(',','',$upah_semasa_round); @@ -121,7 +128,7 @@ class TebusController extends Controller return $upah_semasa; } - public function kiraUpahRebet($kodcaw,$norujukan){ + public function kiraUpahRebet($kodcaw,$norujukan,$jeniskeuntungan){ $onepercentservices = new OnePercentServices(); $cawangan = Cawangan::on('mysql7') @@ -140,9 +147,12 @@ class TebusController extends Controller $bilang_bln = $tempoh - $gadai_data['tempohbayar']; - $upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['bakipjm'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['margin_semasa']); - $upahrebet_raw = $bilang_bln * $upah['keuntungan']; - // $upahrebet_raw = $bilang_bln * (($gadai_data['kadarupah']/100 )* $gadai_data['bakipjm']); + if($jeniskeuntungan == 'onepercent'){ + $upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['bakipjm'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['margin_semasa']); + $upahrebet_raw = $bilang_bln * $upah['keuntungan']; + }else{ + $upahrebet_raw = $bilang_bln * (($gadai_data['kadarupah']/100 )* $gadai_data['bakipjm']); + } $upah_rebet_round = number_format($upahrebet_raw,2); if(strpos($upah_rebet_round,',')){ @@ -192,16 +202,16 @@ class TebusController extends Controller return $keuntungan_rebet_sebenar; } - public function upahTawarruq($kodcaw,$norujukan){ + public function upahTawarruq($kodcaw,$norujukan,$jeniskeuntungan){ - $upah_semasa = $this->kiraupahTawarruq($kodcaw,$norujukan); + $upah_semasa = $this->kiraupahTawarruq($kodcaw,$norujukan,$jeniskeuntungan); return response()->json(number_format($upah_semasa,2)); } - public function upahRebetTawarruq($kodcaw,$norujukan){ + public function upahRebetTawarruq($kodcaw,$norujukan,$jeniskeuntungan){ - $upah_rebet = $this->kiraUpahRebet($kodcaw,$norujukan); + $upah_rebet = $this->kiraUpahRebet($kodcaw,$norujukan,$jeniskeuntungan); return response()->json(number_format($upah_rebet,2)); } @@ -216,7 +226,7 @@ class TebusController extends Controller ->where('norujukan','=',$norujukan) ->first(); - $upahsemasa = $this->kiraupahTawarruq($kodcaw,$norujukan); + $upahsemasa = $this->kiraupahTawarruq($kodcaw,$norujukan,$request->jeniskeuntungan); $array_recno_marhun = $request->array_recno; @@ -418,7 +428,7 @@ class TebusController extends Controller return floatval(number_format($rebet,2)); } - function rebetselepastawarruq($kodcaw,$norujukan){ + function rebetselepastawarruq($kodcaw,$norujukan,$jeniskeuntungan){ $cawangan = Cawangan::on('mysql7') ->where('kodcaw','=',$kodcaw) ->first(); @@ -431,7 +441,7 @@ class TebusController extends Controller ->where('norujukan','=',$norujukan) ->sum('keuntungan_rebet'); - $upah_rebet = $this->kiraUpahRebet($kodcaw,$norujukan); + $upah_rebet = $this->kiraUpahRebet($kodcaw,$norujukan,$jeniskeuntungan); $rebet_raw =$gadai_data['upah12'] - $transaction_keuntungan - $upah_rebet; @@ -452,9 +462,8 @@ class TebusController extends Controller $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); - if($request->jenisbayarantebus == "tawarruq") - { - $rebet = $this->rebetselepastawarruq($kodcaw,$norujukan); + if($request->jenisbayarantebus == "tawarruq"){ + $rebet = $this->rebetselepastawarruq($kodcaw,$norujukan,$request->jeniskeuntungan); } else if($request->jenisbayarantebus == "nottawarruq") { @@ -466,16 +475,25 @@ class TebusController extends Controller $gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first(); + $ujrah=0;$onepercent=0; if($gadai['hargajualan'] == null){ $harga_tebus = $this->hargaTebusNotTawarruq($kodcaw,$norujukan); $upah_tebus = $this->kiraUpahNotTawarruq($kodcaw,$norujukan); $upah_rebet = 0; $upah_rebet_sebenar = 0; }else{ - $harga_tebus = $this->hargaTebusTawarruq($kodcaw,$norujukan); - $upah_tebus = $this->kiraupahTawarruq($kodcaw,$norujukan); + $harga_tebus = $this->hargaTebusTawarruq($kodcaw,$norujukan,$request->jeniskeuntungan); + $upah_tebus = $this->kiraupahTawarruq($kodcaw,$norujukan,$request->jeniskeuntungan); $upah_rebet = $this->kiraUpahRebetSebenar($kodcaw,$norujukan); $upah_rebet_sebenar = $harga_tebus - $gadai['bakipjm']; + + if($request->jeniskeuntungan == 'onepercent'){ + $array_onepercent = $this->kiraupahUjrahOnePercent($kodcaw,$norujukan); + $array_onepercent_rebet = $this->kiraupahUjrahOnePercentRebate($kodcaw,$norujukan); + $margin_semasa = ($gadai['bakipjm']/$gadai['nilaimarhun']) * 100; + $ujrah = $array_onepercent['ujrah']; + $onepercent = $array_onepercent['onepercent']; + } } @@ -502,7 +520,9 @@ class TebusController extends Controller 'marhuntebus' => $request->marhun, 'historygadaian' => $norujukan, 'tarikhbyrn' => $current->toDateString(), - 'teller' => $request->teller + 'teller' => $request->teller, + 'ujrah' => $ujrah, + 'onepercent' => $onepercent, ]); $create_inoutmar = InOutMar::on($cawangan['mysql'])->create([ @@ -525,7 +545,14 @@ class TebusController extends Controller 'bayaran_pembiayaan' => $gadai['bakipjm'], 'keuntungan_rebet' => $upah_rebet_sebenar, 'tarikh_bayaran'=> $current, - 'kodcaw'=> $kodcaw + 'kodcaw'=> $kodcaw, + 'ujrah' => ($request->jeniskeuntungan == 'onepercent') ? $array_onepercent['ujrah'] : 0, + 'ujrah_rebet' => ($request->jeniskeuntungan == 'onepercent') ? $array_onepercent_rebet['ujrah'] : 0, + 'onepercent' => ($request->jeniskeuntungan == 'onepercent') ? $array_onepercent['onepercent'] : 0, + 'onepercent_rebet' => ($request->jeniskeuntungan == 'onepercent') ? $array_onepercent_rebet['onepercent'] : 0, + 'margin_semasa' => ($request->jeniskeuntungan == 'onepercent') ? $margin_semasa : 0, + 'tempoh' => $gadai['tempoh'], + 'beza_tempoh' => ($gadai['tempoh'] - $gadai['tempohbayar']), ]); if($request->jenistebus == 'P'){ @@ -587,7 +614,7 @@ class TebusController extends Controller if($request->jenisbayarantebus == "tawarruq") { - $rebet = $this->rebetselepastawarruq($kodcaw,$norujukan); + $rebet = $this->rebetselepastawarruq($kodcaw,$norujukan,$request->jeniskeuntungan); } else if($request->jenisbayarantebus == "nottawarruq") { @@ -604,7 +631,7 @@ class TebusController extends Controller 't_update' => $current->toDateString(), )); - $upah_rebet = $this->kiraUpahRebet($kodcaw,$norujukan); + $upah_rebet = $this->kiraUpahRebet($kodcaw,$norujukan,$request->jeniskeuntungan); $create_tebus = Tebus::on($cawangan['mysql'])->create([ 'kodcaw'=> $kodcaw, @@ -2196,4 +2223,94 @@ class TebusController extends Controller return response()->json($total_accrual_net); } + public function kiraupahUjrahOnePercent($kodcaw,$norujukan){ + $onepercentservices = new OnePercentServices(); + + $cawangan = Cawangan::on('mysql7') + ->where('kodcaw','=',$kodcaw) + ->first(); + + $gadai_data = Gadai::on($cawangan['mysql']) + ->where('norujukan','=',$norujukan) + ->first(); + + if($gadai_data['tempoh'] >= 12.0){ + $tempoh = 12; + }else{ + $tempoh = $gadai_data['tempoh']; + } + + $bilang_bln = $tempoh - $gadai_data['tempohbayar']; + $array_upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['percentpinj']); + $ujrah = $bilang_bln * $array_upah['ujrah']; + $onepercent = $bilang_bln * $array_upah['onepercent']; + + + $ujrah_semasa_round = number_format($ujrah,2); + if(strpos($ujrah_semasa_round,',')){ + $ujrah_semasa_round = str_replace(',','',$ujrah_semasa_round); + } + $ujrah_semasa = substr($ujrah_semasa_round, 0, -1); + if(strpos($ujrah_semasa,',')){ + $ujrah_semasa = str_replace(',','',$ujrah_semasa); + } + + $onepercent_semasa_round = number_format($onepercent,2); + if(strpos($onepercent_semasa_round,',')){ + $onepercent_semasa_round = str_replace(',','',$onepercent_semasa_round); + } + $onepercent_semasa = substr($onepercent_semasa_round, 0, -1); + if(strpos($onepercent_semasa,',')){ + $onepercent_semasa = str_replace(',','',$onepercent_semasa); + } + + return ['ujrah' => $ujrah_semasa, 'onepercent' => $onepercent_semasa]; + } + + public function kiraupahUjrahOnePercentRebate($kodcaw,$norujukan){ + $onepercentservices = new OnePercentServices(); + + $cawangan = Cawangan::on('mysql7') + ->where('kodcaw','=',$kodcaw) + ->first(); + + $gadai_data = Gadai::on($cawangan['mysql']) + ->where('norujukan','=',$norujukan) + ->first(); + + if($gadai_data['tempoh'] >= 12.0){ + $tempoh = 12; + }else{ + $tempoh = $gadai_data['tempoh']; + } + + $bilang_bln = $tempoh - $gadai_data['tempohbayar']; + $array_upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['bakipjm'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['margin_semasa']); + $ujrah = $bilang_bln * $array_upah['ujrah']; + $onepercent = $bilang_bln * $array_upah['onepercent']; + + + $ujrah_semasa_round = number_format($ujrah,2); + if(strpos($ujrah_semasa_round,',')){ + $ujrah_semasa_round = str_replace(',','',$ujrah_semasa_round); + } + $ujrah_semasa = substr($ujrah_semasa_round, 0, -1); + if(strpos($ujrah_semasa,',')){ + $ujrah_semasa = str_replace(',','',$ujrah_semasa); + } + + $onepercent_semasa_round = number_format($onepercent,2); + if(strpos($onepercent_semasa_round,',')){ + $onepercent_semasa_round = str_replace(',','',$onepercent_semasa_round); + } + $onepercent_semasa = substr($onepercent_semasa_round, 0, -1); + if(strpos($onepercent_semasa,',')){ + $onepercent_semasa = str_replace(',','',$onepercent_semasa); + } + + return ['ujrah' => $ujrah_semasa, 'onepercent' => $onepercent_semasa]; + } + + + } diff --git a/routes/web.php b/routes/web.php index 7250486..0842c8d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -106,8 +106,8 @@ $router->group(['prefix'=>'api'], function () use ($router){ //Tebus API $router->get('tebustawarruq/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusTawarruq']); - $router->get('upahtawarruq/{kodcaw}/{norujukan}',['uses'=>'TebusController@upahTawarruq']); - $router->get('upahrebettawarruq/{kodcaw}/{norujukan}',['uses'=>'TebusController@upahRebetTawarruq']); + $router->get('upahtawarruq/{kodcaw}/{norujukan}/{jeniskeuntungan}',['uses'=>'TebusController@upahTawarruq']); + $router->get('upahrebettawarruq/{kodcaw}/{norujukan}/{jeniskeuntungan}',['uses'=>'TebusController@upahRebetTawarruq']); $router->get('tebusseparuhtawarruq/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusSeparuhTawarruq']); $router->get('tebusseparuhbukantawarruq/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusSeparuhNotTawarruq']); $router->get('tebusbukantawarruq/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusNotTawarruq']); From 8cee477774b8c8598341735a961afb4b2d5da7b8 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 16 Nov 2023 10:20:55 +0800 Subject: [PATCH 3/6] add seeder for kadarupah --- app/KadarUpah.php | 1 + database/seeds/KadarUpahSeeder.php | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 database/seeds/KadarUpahSeeder.php diff --git a/app/KadarUpah.php b/app/KadarUpah.php index fa897d6..4170fd9 100644 --- a/app/KadarUpah.php +++ b/app/KadarUpah.php @@ -9,6 +9,7 @@ class KadarUpah extends Model protected $table = 'kadarupah'; protected $connection = 'mysql7'; + public $timestamps = false; /** * The attributes that are mass assignable. * diff --git a/database/seeds/KadarUpahSeeder.php b/database/seeds/KadarUpahSeeder.php new file mode 100644 index 0000000..4137c44 --- /dev/null +++ b/database/seeds/KadarUpahSeeder.php @@ -0,0 +1,30 @@ +where('kadarupdah', '=', 1.20)->update([ + 'kadarujrah' => 0.14, + 'kadaronepercent' => 1, + ]); + + KadarUpah::on('mysql7')->where('kadarupdah', '=', 1.50)->update([ + 'kadarujrah' => 0.40, + 'kadaronepercent' => 1, + ]); + + KadarUpah::on('mysql7')->where('kadarupdah', '=', 1.70)->update([ + 'kadarujrah' => 0.56, + 'kadaronepercent' => 1, + ]); + } +} From 0e340c0ea2d82abc1122a3fbd0870c44958434b8 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 16 Nov 2023 14:34:28 +0800 Subject: [PATCH 4/6] add migration script --- app/Console/Commands/MigrationOnePercent.php | 49 ++++++++++++++++++ app/Console/Commands/TestOnePercent.php | 54 -------------------- app/Console/Kernel.php | 2 +- 3 files changed, 50 insertions(+), 55 deletions(-) create mode 100644 app/Console/Commands/MigrationOnePercent.php delete mode 100644 app/Console/Commands/TestOnePercent.php diff --git a/app/Console/Commands/MigrationOnePercent.php b/app/Console/Commands/MigrationOnePercent.php new file mode 100644 index 0000000..1aff5b2 --- /dev/null +++ b/app/Console/Commands/MigrationOnePercent.php @@ -0,0 +1,49 @@ + 'KadarUpahSeeder', + ]); + + $this->info('The command was successfully generated!'); + } +} \ No newline at end of file diff --git a/app/Console/Commands/TestOnePercent.php b/app/Console/Commands/TestOnePercent.php deleted file mode 100644 index 5d8af0a..0000000 --- a/app/Console/Commands/TestOnePercent.php +++ /dev/null @@ -1,54 +0,0 @@ -onepercentserv = $onepercentserv; - parent::__construct(); - } - - /** - * Execute the console command. - * - * @return int - */ - public function handle() - { - $pemb = $this->ask('Pembiayaan?'); - $nm = $this->ask('Nilaimarhun?'); - $ku = $this->ask('Kadarujrah?'); - $marg = $this->ask('Margin?'); - - $test = $this->onepercentserv->kiraanKeuntunganSebenar($pemb,$nm,$ku,$marg); - - dd($test); - return $test; - } -} \ No newline at end of file diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index e18917f..3fe6529 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -18,7 +18,7 @@ class Kernel extends ConsoleKernel */ protected $commands = [ Commands\DailyGadai::class, - Commands\TestOnePercent::class, + Commands\MigrationOnePercent::class, ]; From 698259188a181aacfaec4150fa74d0b7adabe206 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Tue, 21 Nov 2023 12:32:25 +0800 Subject: [PATCH 5/6] fix model tebus added ujrah and onepercent, also, fix upah from 0.14 to 0.16 --- app/Tebus.php | 2 ++ database/seeds/KadarUpahSeeder.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Tebus.php b/app/Tebus.php index 63531bb..4d01786 100644 --- a/app/Tebus.php +++ b/app/Tebus.php @@ -51,6 +51,8 @@ class Tebus extends Model 'historygadaian', 'pinjamanterkini', 'tarikhbyrn', + 'ujrah', + 'onepercent' ]; /** diff --git a/database/seeds/KadarUpahSeeder.php b/database/seeds/KadarUpahSeeder.php index 4137c44..c4a37ee 100644 --- a/database/seeds/KadarUpahSeeder.php +++ b/database/seeds/KadarUpahSeeder.php @@ -13,7 +13,7 @@ class KadarUpahSeeder extends Seeder public function run() { KadarUpah::on('mysql7')->where('kadarupdah', '=', 1.20)->update([ - 'kadarujrah' => 0.14, + 'kadarujrah' => 0.16, 'kadaronepercent' => 1, ]); From af4d1a3d1f2cacb9f3d18039c7e63213e90b631f Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Tue, 21 Nov 2023 14:18:22 +0800 Subject: [PATCH 6/6] added log in transaction ansuran --- app/Http/Controllers/GadaiController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/GadaiController.php b/app/Http/Controllers/GadaiController.php index f16f5e8..e443a22 100644 --- a/app/Http/Controllers/GadaiController.php +++ b/app/Http/Controllers/GadaiController.php @@ -33,6 +33,7 @@ use App\InOutMar; use Illuminate\Http\Request; use App\Services\OnePercentServices; +use Log; use Illuminate\Support\Facades\DB; @@ -564,12 +565,14 @@ class GadaiController extends Controller } DB::commit(); - return response()->json("success", 200); }); }catch(\Exception $e){ + Log::error("Transaction failed: " . $e->getMessage()); return response()->json("Transaction failed: " . $e->getMessage(),500); } + + return response()->json("success",200); } public function getGadaianSemasa($kodcaw){