diff --git a/app/Http/Controllers/GadaiController.php b/app/Http/Controllers/GadaiController.php index b53b472..3f3ac2b 100644 --- a/app/Http/Controllers/GadaiController.php +++ b/app/Http/Controllers/GadaiController.php @@ -3205,8 +3205,11 @@ class GadaiController extends Controller $totalpinjaman = $audit->sum('pinjaman'); $totalbakipjm = $audit->sum('bakipjm'); $totaltunggakan = $audit->sum('tunggakan'); + $totalujrah = $audit->sum('tunggakanujrah'); + $totalonepercent = $audit->sum('tunggakanonepercent'); - $arrayrekod = ['rekod' => $rekodaudit, 'total' => $totalrekod,'totalberat' => $totalberat,'totalnilaimarhun' => $totalnilaimarhun,'totalpinjaman'=>$totalpinjaman,'totalbakipjm'=>$totalbakipjm,'totaltunggakan'=>$totaltunggakan]; + + $arrayrekod = ['rekod' => $rekodaudit, 'total' => $totalrekod,'totalberat' => $totalberat,'totalnilaimarhun' => $totalnilaimarhun,'totalpinjaman'=>$totalpinjaman,'totalbakipjm'=>$totalbakipjm,'totaltunggakan'=>$totaltunggakan,'totalujrah'=>$totalujrah,'totalonepercent'=>$totalonepercent]; return response()->json($arrayrekod,200); } diff --git a/app/Http/Controllers/TebusController.php b/app/Http/Controllers/TebusController.php index 3eca0fc..676c960 100644 --- a/app/Http/Controllers/TebusController.php +++ b/app/Http/Controllers/TebusController.php @@ -42,6 +42,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Carbon\Carbon; +use Illuminate\Support\Facades\DB; class TebusController extends Controller { @@ -1603,12 +1604,15 @@ class TebusController extends Controller if($determine_past->isToday()) { $audit_now = Gadai::on($cawangan['mysql']) + ->select(DB::raw('sum(tunggakan) as "akru", + sum(tunggakanujrah) as "akruujrah", + sum(tunggakanonepercent) as "akruonepercent"')) ->where([['tagpalsu','=',0],['t_gadai','<=',$request->tarikh],['sttebus','=','']]) ->orWhere([['tagpalsu','=',0],['t_update','>',$request->tarikh],['sttebus','!=',''],['t_gadai','<=',$request->tarikh]]) ->orderBy('t_gadai', 'ASC') - ->orderBy('sirig', 'ASC'); + ->orderBy('sirig', 'ASC')->first(); - $totaltunggakan_now = $audit_now->sum('tunggakan'); + $totaltunggakan_now = $audit_now['akru'] + $audit_now['akruujrah'] + $audit_now['akruonepercent']; }else{ $result_audit_backdate = $this->StokAuditGenerateTerakru($month_sekarang,$cawangan,$year_generate); diff --git a/app/Services/Miscellaneous/PanjarServices.php b/app/Services/Miscellaneous/PanjarServices.php new file mode 100644 index 0000000..107f797 --- /dev/null +++ b/app/Services/Miscellaneous/PanjarServices.php @@ -0,0 +1,306 @@ + 100,'bd5' => 500,'bd10' => 1000,'bd20' => 1000,'bd50' => 5000,'bd100' => 5000, + 'txtsen1' => 0.01,'txtsen5' => 0.05,'txtsen10' => 0.10,'txtsen20' => 0.20,'txtsen50' => 0.50, + 'txtring1' => 1,'txtring5' => 5,'txtring10' => 10,'txtring20' => 20,'txtring50' => 50, + 'txtring100' => 100,'txtring1000' => 1000, + ]; + + public function __construct($kodcaw){ + $this->cawangan = $kodcaw; + } + + private function calculation_denominasi($array_deno = [],$denominasi = [],$jenis_panjar){ + + if(isset($array_deno) <= 0 || isset($denominasi) <= 0){ + return 'no data'; + } + + if($jenis_panjar != 'masuk' || $jenis_panjar != 'keluar') return 'no data'; + + $records = []; + foreach($this->namelist_deno as $deno => $value){ + $total_deno = 0;$total = 0; + $total_deno = ($jenis_panjar == 'masuk') ? $denominasi[$deno] += intval($array_deno[$deno]) : $denominasi[$deno] -= intval($array_deno[$deno]); + $total = ($total_deno * $value); + + $records[$deno] = [ + 'keping' => $total_deno, + 'jumlah' => $total + ]; + } + + /* total Keping */ + $total_keping = array_sum(array_column($records, 'jumlah')); + + /* Total Bundle */ + $filteredKeys = array_filter(array_keys($records), function($key) { + return strpos($key, 'bd') !== false; + }); + + $filteredRecords = array_filter($records, function($record,$key) use ($filteredKeys) { + return in_array($key, $filteredKeys); + }, ARRAY_FILTER_USE_BOTH); + + $total_bundle = array_sum(array_column($filteredRecords, 'jumlah')); + + return [ + 'deno' => $records, + 'total' => $total_keping, + 'total_bundle' => $total_bundle, + 'total_all' => ($total_keping + $total_bundle), + ]; + } + + public function delete(Request $request){ + $current = Carbon::now(); + $current = new Carbon(); + + $cawangan = Cawangan::on('mysql7')->where('kodcaw', $this->cawangan)->first(); + $denominasi = Denominasi::on($cawangan['mysql'])->latest('tarikh')->first(); + $panjar = Panjar::on($cawangan['mysql'])->latest('tarikh')->where('nobaucer', $request->nobaucer)->first(); + $vault = Vault::on($cawangan['mysql'])->latest('tarikh')->first(); + $deno_panjar = DenoPanjar::on('mysql7')->where('kodcaw', $this->cawangan)->where('recno', $request->recno)->latest('tarikh','masa')->first(); + + try{ + if (!$panjar) throw new \Exception('Custom Exception: Panjar Does Not Exist!'); + if (!$denominasi) throw new \Exception('Custom Exception: Denominasi Does Not Exist!'); + if (!$vault) throw new \Exception('Custom Exception: Vault Does Not Exist!'); + if (!$deno_panjar) throw new \Exception('Custom Exception: Denominasi Panjar Does Not Exist!'); + + DB::transaction(function () use ($cawangan,$deno_panjar,$panjar,$denominasi,$current,$vault) { + + $return_data = $this->calculation_denominasi($deno_panjar,$denominasi,'masuk'); + if($return_data == 'no data') throw new \Exception('Custom Exception: Denominasi Panjar Not Return Data'); + + Denominasi::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()]])->update(array( + 'bd1' => $return_data['deno']['bd1']['keping'], + 'b1'=> $return_data['deno']['bd1']['jumlah'], + 'bd5'=> $return_data['deno']['bd5']['keping'], + 'b5'=> $return_data['deno']['bd5']['keping'], + 'bd10'=> $return_data['deno']['bd10']['keping'], + 'b10'=> $return_data['deno']['bd10']['jumlah'], + 'bd20'=> $return_data['deno']['bd20']['keping'], + 'b20'=> $return_data['deno']['bd20']['jumlah'], + 'bd50'=> $return_data['deno']['bd50']['keping'], + 'b50'=> $return_data['deno']['bd50']['jumlah'], + 'bd100'=> $return_data['deno']['bd100']['keping'], + 'b100'=> $return_data['deno']['bd100']['jumlah'], + 'txtring1'=> $return_data['deno']['txtring1']['keping'], + 'k1'=> $return_data['deno']['txtring1']['jumlah'], + 'txtring5'=> $return_data['deno']['txtring5']['keping'], + 'k5'=> $return_data['deno']['txtring5']['jumlah'], + 'txtsen1'=> $return_data['deno']['txtsen1']['keping'], + 'k01'=> $return_data['deno']['txtsen1']['jumlah'], + 'txtsen5'=> $return_data['deno']['txtsen5']['keping'], + 'k05'=> $return_data['deno']['txtsen5']['jumlah'], + 'txtsen10'=> $return_data['deno']['txtsen10']['keping'], + 'k010'=> $return_data['deno']['txtsen10']['jumlah'], + 'txtsen20'=> $return_data['deno']['txtsen20']['keping'], + 'k020'=> $return_data['deno']['txtsen20']['jumlah'], + 'txtsen50'=> $return_data['deno']['txtsen50']['keping'], + 'k050'=> $return_data['deno']['txtsen50']['jumlah'], + 'txtring10'=> $return_data['deno']['txtring10']['keping'], + 'k10'=> $return_data['deno']['txtring10']['jumlah'], + 'txtring20'=> $return_data['deno']['txtring20']['keping'], + 'k20'=> $return_data['deno']['txtring20']['jumlah'], + 'txtring50'=> $return_data['deno']['txtring50']['keping'], + 'k50'=> $return_data['deno']['txtring50']['jumlah'], + 'txtring100'=> $return_data['deno']['txtring100']['keping'], + 'k100'=> $return_data['deno']['txtring100']['jumlah'], + 'txtring1000'=> $return_data['deno']['txtring1000']['keping'], + 'k1000'=> $return_data['deno']['txtring1000']['jumlah'], + 'jumlahbundle'=> $return_data['total_bundle'], + 'txtjumlah'=> $return_data['total_all'], + 'jumlahkeping' => $return_data['total'] + ) ); + + $totalpanjar = ($vault['totpanjar'] - $deno_panjar['serahan']); + $bakiakhir = ($vault['bakiawal'] - $vault['keluar'] + $vault['masuk'] + $vault['pendahuluan'] - $vault['serahan'] - $totalpanjar); + + if($bakiakhir <= 0) throw new \Exception('Custom Exception: Amaun Baki Akhir Cannot Be Zero'); + if($totalpanjar < 0) throw new \Exception('Custom Exception: Amaun Panjar Cannot Be Zero'); + + Vault::on($cawangan['mysql'])->where('kodcaw','=', $cawangan['kodcaw'])->latest('tarikh')->update(array( + 'totpanjar' => $totalpanjar, + 'bakiakhir'=>$bakiakhir, + 'bakieod'=>$bakiakhir + )); + + DenoPanjar::on('mysql7')->where('kodcaw', $this->cawangan)->where('recno', $panjar['recno'])->latest('tarikh','masa')->delete(); + Panjar::on($cawangan['mysql'])->where('recno',$panjar['recno'])->delete(); + + $audit = new Audit(); + $audit->users = $request->tuntutoleh; + $audit->actions = "Keluarkan Perbelanjaan"; + $audit->new_data = $panjar; + $audit->kodcaw = $this->cawangan; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); + + }); + }catch(\Exception $e){ + dd($e->getMessage()); + Log::error('Exception: ' , $e->getMessage()); + } + } + + public function create(Request $request){ + $current = Carbon::now(); + $current = new Carbon(); + + $cawangan = Cawangan::on('mysql7')->where('kodcaw', $this->cawangan)->first(); + $denominasi = Denominasi::on($cawangan['mysql'])->latest('tarikh')->first(); + $vault = Vault::on($cawangan['mysql'])->latest('tarikh')->first(); + + try{ + if (!$denominasi) throw new \Exception('Custom Exception: Denominasi Does Not Exist!'); + if (!$vault) throw new \Exception('Custom Exception: Vault Does Not Exist!'); + + DB::transaction(function () use ($cawangan,$denominasi,$current,$vault,$request) { + + $panjar = Panjar::on($cawangan['mysql']) + ->create([ + 'tarikh'=> $current->toDateString(), + 'deskripsi'=> $request->deskripsi, + 'bayaran' => $request->bayaran, + 'tag' => $request->tag, + 'kategori' => $request->kategori, + 'id' => $request->id, + 'bakiperubatan' => $request->bakiperubatan, + 'nobaucer' => $request->nobaucer, + 'nobil' => $request->nobil, + 'tuntutoleh' => $request->tuntutoleh + ]); + + $denopanjar = DenoPanjar::on('mysql7')->create([ + 'tarikh' => $current->toDateString(), + 'masa' => $current->toTimeString(), + 'kodcaw' => $this->cawangan, + 'kodlaluan' => $request->kodlaluan, + 'serahan' => $request->serahan, + 'bd1' => $request->bd1, + 'bd5' => $request->bd5, + 'bd10' => $request->bd10, + 'bd20' => $request->bd20, + 'bd50' => $request->bd50, + 'bd100' => $request->bd100, + 'txtring1' => $request->txtring1, + 'txtring5' => $request->txtring5, + 'txtring10' => $request->txtring10, + 'txtring20' => $request->txtring20, + 'txtring50' => $request->txtring50, + 'txtring100' => $request->txtring100, + 'txtring1000' => $request->txtring1000, + 'txtsen1' => $request->txtsen1, + 'txtsen5' => $request->txtsen5, + 'txtsen10' => $request->txtsen10, + 'txtsen20' => $request->txtsen20, + 'txtsen50' => $request->txtsen50, + 'jenis' =>$request->jenis, + 'recno' =>$panjar['recno'], + 'update' => '0' + ]); + + $return_data = $this->calculation_denominasi($denopanjar,$denominasi,'masuk'); + if($return_data == 'no data') throw new \Exception('Custom Exception: Denominasi Panjar Not Return Data'); + + Denominasi::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()]])->update(array( + 'bd1' => $return_data['deno']['bd1']['keping'], + 'b1'=> $return_data['deno']['bd1']['jumlah'], + 'bd5'=> $return_data['deno']['bd5']['keping'], + 'b5'=> $return_data['deno']['bd5']['keping'], + 'bd10'=> $return_data['deno']['bd10']['keping'], + 'b10'=> $return_data['deno']['bd10']['jumlah'], + 'bd20'=> $return_data['deno']['bd20']['keping'], + 'b20'=> $return_data['deno']['bd20']['jumlah'], + 'bd50'=> $return_data['deno']['bd50']['keping'], + 'b50'=> $return_data['deno']['bd50']['jumlah'], + 'bd100'=> $return_data['deno']['bd100']['keping'], + 'b100'=> $return_data['deno']['bd100']['jumlah'], + 'txtring1'=> $return_data['deno']['txtring1']['keping'], + 'k1'=> $return_data['deno']['txtring1']['jumlah'], + 'txtring5'=> $return_data['deno']['txtring5']['keping'], + 'k5'=> $return_data['deno']['txtring5']['jumlah'], + 'txtsen1'=> $return_data['deno']['txtsen1']['keping'], + 'k01'=> $return_data['deno']['txtsen1']['jumlah'], + 'txtsen5'=> $return_data['deno']['txtsen5']['keping'], + 'k05'=> $return_data['deno']['txtsen5']['jumlah'], + 'txtsen10'=> $return_data['deno']['txtsen10']['keping'], + 'k010'=> $return_data['deno']['txtsen10']['jumlah'], + 'txtsen20'=> $return_data['deno']['txtsen20']['keping'], + 'k020'=> $return_data['deno']['txtsen20']['jumlah'], + 'txtsen50'=> $return_data['deno']['txtsen50']['keping'], + 'k050'=> $return_data['deno']['txtsen50']['jumlah'], + 'txtring10'=> $return_data['deno']['txtring10']['keping'], + 'k10'=> $return_data['deno']['txtring10']['jumlah'], + 'txtring20'=> $return_data['deno']['txtring20']['keping'], + 'k20'=> $return_data['deno']['txtring20']['jumlah'], + 'txtring50'=> $return_data['deno']['txtring50']['keping'], + 'k50'=> $return_data['deno']['txtring50']['jumlah'], + 'txtring100'=> $return_data['deno']['txtring100']['keping'], + 'k100'=> $return_data['deno']['txtring100']['jumlah'], + 'txtring1000'=> $return_data['deno']['txtring1000']['keping'], + 'k1000'=> $return_data['deno']['txtring1000']['jumlah'], + 'jumlahbundle'=> $return_data['total_bundle'], + 'txtjumlah'=> $return_data['total_all'], + 'jumlahkeping' => $return_data['total'] + ) ); + + $totalpanjar = ($vault['totpanjar'] + $denopanjar['serahan']); + $bakiakhir = ($vault['bakiawal'] - $vault['keluar'] + $vault['masuk'] + $vault['pendahuluan'] - $vault['serahan'] - $totalpanjar); + + if($bakiakhir <= 0) throw new \Exception('Custom Exception: Amaun Baki Akhir Cannot Be Zero'); + if($totalpanjar < 0) throw new \Exception('Custom Exception: Amaun Panjar Cannot Be Zero'); + + Vault::on($cawangan['mysql'])->where('kodcaw','=', $cawangan['kodcaw'])->latest('tarikh')->update(array( + 'totpanjar' => $totalpanjar, + 'bakiakhir'=>$bakiakhir, + 'bakieod'=>$bakiakhir + )); + + $audit = new Audit(); + $audit->users = $request->tuntutoleh; + $audit->actions = "Daftar Perbelanjaan"; + $audit->new_data = $panjar; + $audit->kodcaw = $this->cawangan; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); + + }); + }catch(\Exception $e){ + dd($e->getMessage()); + Log::error('Exception: ' , $e->getMessage()); + } + } +} diff --git a/app/Services/Reports/OnePercentService.php b/app/Services/Reports/OnePercentService.php index 6dede56..a937433 100644 --- a/app/Services/Reports/OnePercentService.php +++ b/app/Services/Reports/OnePercentService.php @@ -46,6 +46,8 @@ class OnePercentService public function getTotalKeuntungan($type = 'B',$start = '2023-12-14',$end = '2023-12-14') : Float{ if($type == 'B'){ + + $akrual = Gadai::on($this->cawangan['mysql'])->where([['sttebus',''],['tagbaru',1]])->sum('tunggakanonepercent'); $norujukan = Gadai::on($this->cawangan['mysql'])->where('sttebus','T')->where('tagbaru',1)->pluck('norujukan'); $keuntungan = TransaksiKeuntungan::on('mysql7') @@ -53,28 +55,37 @@ class OnePercentService ->sum('onepercent_rebet'); }else if($type == 'L'){ + $akrual = Gadai::on($this->cawangan['mysql'])->where([['sttebus',''],['tagbaru',1],['t_update','>=',$start],['t_update','<=',$end]])->sum('tunggakanonepercent'); + $norujukan = Gadai::on($this->cawangan['mysql'])->where('sttebus','T')->where('tagbaru',1)->where('t_update','>=',$start)->where('t_update','<=',$end)->pluck('norujukan'); $keuntungan = TransaksiKeuntungan::on('mysql7') ->whereIn('norujukan',$norujukan) ->whereDate('tarikh_bayaran','>=',$start) ->whereDate('tarikh_bayaran','<=',$end) - ->sum('onepercent_rebet');; + ->sum('onepercent_rebet'); } - return $keuntungan; + $totalkeuntungan = $keuntungan + $akrual; + + return $totalkeuntungan; } public function getTotalUjrah($type = 'B',$start = '2023-12-14',$end = '2023-12-14') : Float{ if($type == 'B'){ + $akrual = Gadai::on($this->cawangan['mysql'])->where([['sttebus',''],['tagbaru',1]])->sum('tunggakanujrah'); + $norujukan = Gadai::on($this->cawangan['mysql'])->where('sttebus','T')->where('tagbaru',1)->pluck('norujukan'); $ujrah = TransaksiKeuntungan::on('mysql7') ->whereIn('norujukan',$norujukan) ->sum('ujrah_rebet'); + }else if($type == 'L'){ + $akrual = Gadai::on($this->cawangan['mysql'])->where([['sttebus',''],['tagbaru',1],['t_update','>=',$start],['t_update','<=',$end]])->sum('tunggakanujrah'); + $norujukan = Gadai::on($this->cawangan['mysql'])->where('sttebus','T')->where('tagbaru',1)->pluck('norujukan'); $ujrah = TransaksiKeuntungan::on('mysql7') @@ -84,7 +95,8 @@ class OnePercentService ->sum('ujrah_rebet');; } - return $ujrah; + $totalujrah = $ujrah + $akrual; + return $totalujrah; } diff --git a/app/Support/v2/GadaiV2.php b/app/Support/v2/GadaiV2.php index b9d71ed..96cfd7b 100644 --- a/app/Support/v2/GadaiV2.php +++ b/app/Support/v2/GadaiV2.php @@ -101,6 +101,8 @@ class GadaiV2 $hargajualan = $request->pinjaman + $upah12; + $akrual = $this->kiraupahTawarruqStokAuditUjrahOnePercent(0.5,0,$kadar_raw['kadarujrah'],$request->pinjaman,$total_nilai_marhun,$margin_pinjam); + $gadai = Gadai::on($cawangan['mysql']) ->where('norujukan','=',$norujukan) ->update(array( @@ -132,7 +134,9 @@ class GadaiV2 'ujrah' => $ujrah, 'onepercent' => $onepercent, 'margin_semasa' => $margin_pinjam, - 'tagbaru' => 1 + 'tagbaru' => 1, + 'tunggakanujrah' => $akrual['ujrah'], + 'tunggakanonepercent' => $akrual['keuntungan'], )); $new_data = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first(); @@ -283,6 +287,7 @@ class GadaiV2 DB::connection($cawangan['mysql'])->transaction(function () use($cawangan,$baki_pinjaman,$current,$norujukan,$gadai,$baki_hargajualan,$lelong_tawarruq,$margin_semasa){ $margin_updated = ($baki_pinjaman / $gadai['nilaimarhun']) * 100; + $akrual = $this->kiraupahTawarruqStokAuditUjrahOnePercent($gadai['tempoh'],$gadai['tempohbayar'],$gadai['kadarujrah'],$gadai['bakipjm'],$gadai['nilaimarhun'],$margin_semasa); $update_gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->update(array( 'bakipjm' => $baki_pinjaman, @@ -292,6 +297,8 @@ class GadaiV2 'tempohbayar' => $gadai['tempoh'], 'lelong_tawarruq' => $lelong_tawarruq, 'margin_semasa' => $margin_updated, + 'tunggakanujrah' => $akrual['ujrah'], + 'tunggakanonepercent' => $akrual['keuntungan'] )); }); @@ -364,7 +371,7 @@ class GadaiV2 Gadai::on($cawangan_mysql['mysql'])->where('norujukan','=',$gadai['norujukan'])->update(array( 'jbg' => $tempoh_gadai, 'tempoh' => $tempoh_gadai, - 'tunggakan' => $upah_semasa['pendapatan'], + 'tunggakan' => 0, 'tunggakanujrah' => $upah_semasa['ujrah'], 'tunggakanonepercent' => $upah_semasa['keuntungan'], ));