From a88f23de68953e79889e6375c285e2d4c8adf7ec Mon Sep 17 00:00:00 2001 From: daengdeni Date: Tue, 4 Jun 2024 15:31:32 +0700 Subject: [PATCH] update perhitungan hapus buku --- Http/Controllers/HapusBukuController.php | 604 ++++++++++++----------- 1 file changed, 314 insertions(+), 290 deletions(-) diff --git a/Http/Controllers/HapusBukuController.php b/Http/Controllers/HapusBukuController.php index daf1f0c..2f11c69 100644 --- a/Http/Controllers/HapusBukuController.php +++ b/Http/Controllers/HapusBukuController.php @@ -4,7 +4,6 @@ use App\Http\Controllers\Controller; use Carbon\Carbon; - use Carbon\CarbonInterval; use Exception; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -56,11 +55,325 @@ } } + public function hitungBunga() + { + $hapusbuku = HapusBuku::where('status', 1)->get(); + $suku_bunga_extra = 60; + $decimal = 2; + $now = Carbon::today(); + $hari_denda = 0; + + + + foreach ($hapusbuku as $key => $value) { + $nomor_pinjaman = $value->nomor_pinjaman; + $tgl_wo = Carbon::parse($value->tanggal_hapus_buku); + $hari_wo = $now->diffInDays($tgl_wo); + $day_wo = $tgl_wo->day; + + + $tgl = $tgl_wo; + $bunga_ekstra = 0; + $bunga_non_ekstra = 0; + + + while ($tgl <= $now) { + $awal = $tgl; + $id = $awal->format('Ymd'); + $awal_ = $awal->format('Y-m-d'); + + $hist = InterestHistory::where('nomor_pinjaman', $nomor_pinjaman) + ->where('periode_bunga', $id) + ->get() + ->first(); + + $cnt = 0; + if ($hist) { + $cnt = 1; + } + + $base = $value->baki_debet; + $sk_bng = $value->suku_bunga; + + if ($cnt == 1) { + $base = $hist->total_kewajiban; + $sk_bng = $hist->suku_bunga; + } + + + if (in_array($awal->format('m'), ['01', '03', '05', '07', '08', '10', '12'])) { + $n = 31; + } else if (in_array($awal->format('m'), ['04', '06', '09', '11'])) { + $n = 30; + } else { + $n = 28; + if ($awal->format('Y') % 4 == 0) { + $n = 29; + } + } + + if ($day_wo <= 28) { + + $tgl = $awal->addDays($n); + } else if ($day_wo == 29) { + $tgl = $awal->addMonths(1); + if ($tgl->format('dmy') == '2802') { + $tgl = $awal->addDays($day_wo); + } + } else if ($day_wo == 30) { + $tgl = $awal->addMonths(1); + if ($tgl->format('dmy') == '2802') { + $tgl = $awal->addDays($day_wo); + } else { + if ($tgl->addDay()->format('d') == '01') { + $tgl = $awal->subDay(); + } + } + } else { + if ($awal->format('m') == '01') { + if ($awal->format('y') % 4 === 0) { + $tgl = $awal->addDays($day_wo - 2); + } else { + $tgl = $awal->addDays($day_wo - 3); + } + + } else if ($awal->format('m') == '02' && $n == '28') { + $tgl = $awal->addDays($n + 3); + } else if ($awal->format('m') == '02' && $n == '29') { + $tgl = $awal->addDays($n + 2); + } else if (in_array($awal->format('m'), ['03', '05', '08', '10'])) { + $tgl = $awal->addDays($n - 1); + } else if (in_array($awal->format('m'), ['04', '06', '09', '11'])) { + $tgl = $awal->addDays($n + 1); + } else { + $tgl = $awal->addMonths(1); + } + } + + + $akhir = $tgl->subDay(); + + $tgl = $akhir; + $hari_b = $akhir->diffInDays($awal_) + 1; + if ($hari_denda == 0) { + $hari_denda = $hari_wo - $hari_b; + } else { + $hari_denda = $hari_denda - $hari_b; + } + $hari_d = $hari_denda;// $now->subDay()->diffInDays($akhir); + + if ($akhir->addDay()->format('dmy') == $now->format('dmy')) { + $hari_d = 0; + } + + if ($akhir >= $now) { + $hari_d = 0; + $akhir = $now; + $hari_b = $now->diffInDays($awal_); + } + + //bunga amount due + //echo $hari_b . 'b ' . $hari_d . 'd ' . $base . 'bs ' . $sk_bng . ' ' . $suku_bunga_extra . '
';exit; + $temp_non = ($base * ($sk_bng / 100) * $hari_b) / 360; + $bunga_non_ekstra += $temp_non; + + //denda + $temp = ($temp_non * ($suku_bunga_extra / 100) * $hari_d) / 360; + $bunga_ekstra += $temp; + + //bunga berjalan + $tagihan_lain = $temp_non; + + + InterestHistory::updateOrCreate([ + 'nomor_pinjaman' => $nomor_pinjaman, + 'periode_bunga' => $id, + ], [ + 'tanggal_awal' => $awal_, + 'tanggal_akhir' => $akhir, + 'hari_bunga' => $hari_b, + 'nilai_bunga' => round($temp_non, $decimal), + 'hari_denda' => $hari_d, + 'nilai_denda' => round($temp, $decimal), + 'total_kewajiban' => $value->baki_debet, + 'suku_bunga' => $value->suku_bunga, + 'suku_bunga_denda' => $suku_bunga_extra + ]); + + + } + + + $bunga_intra = ($value->baki_debet * ($value->suku_bunga / 100) * $hari_wo) / 360; + $bunga_non_ekstra = $bunga_non_ekstra - $tagihan_lain; + + $bunga_intra = round($bunga_intra, $decimal); + $bunga_ekstra = round($bunga_ekstra, $decimal); + $bunga_non_ekstra = round($bunga_non_ekstra, $decimal); + $tagihan_lain = round($tagihan_lain, $decimal); + + $total_all = $value->total_kewajiban + $bunga_intra + $bunga_ekstra + $value->denda + $value->biaya_lain; + + HapusBuku::where('nomor_pinjaman', $nomor_pinjaman)->update([ + 'lama_hari' => $hari_wo, + 'bunga_intra' => $bunga_intra, + 'bunga_ekstra' => $bunga_ekstra, + 'bunga_non_ekstra' => $bunga_non_ekstra, + 'tagihan_lain' => $tagihan_lain, + 'total_all_kewajiban' => $total_all + ]); + } + } + + public function update(UpdateHapusBukuRequest $request, $id) + { + $validated = $request->validated(); + + if ($validated) { + try { + DB::transaction(function () use ($validated, $id) { + // Prepare the data for creating a new user + $data = [ + 'nomor_pinjaman' => $validated['nomor_pinjaman'], + 'kode_jenis_pinjaman' => $validated['kode_jenis_pinjaman'], + 'kode_debitur' => $validated['kode_debitur'], + 'nama_debitur' => $validated['nama_debitur'], + 'alamat_debitur' => $validated['alamat_debitur'], + 'npwp_debitur' => $validated['npwp_debitur'], + 'kode_cabang' => $validated['kode_cabang'], + 'kode_mata_uang' => $validated['kode_mata_uang'], + 'tanggal_hapus_buku' => $validated['tanggal_hapus_buku'], + 'nomor_fasilitas' => $validated['nomor_fasilitas'], + 'kode_jenis_fasilitas' => $validated['kode_jenis_fasilitas'], + 'nilai_plafond_awal' => $validated['nilai_plafond_awal'], + 'suku_bunga' => $validated['suku_bunga'], + 'baki_debet' => $validated['baki_debet'], + 'jumlah_bunga' => $validated['jumlah_bunga'], + 'jumlah_kewajiban_lain' => $validated['jumlah_kewajiban_lain'], + 'total_kewajiban' => $validated['total_kewajiban'], + 'bunga_intra' => $validated['bunga_intra'], + 'bunga_ekstra' => $validated['bunga_ekstra'], + 'bunga_non_ekstra' => $validated['bunga_non_ekstra'], + 'denda' => $validated['denda'], + 'tagihan_lain' => $validated['tagihan_lain'], + 'biaya_lain' => $validated['biaya_lain'], + 'total_all_kewajiban' => $validated['total_all_kewajiban'], + 'memo_persetujuan' => $validated['memo_persetujuan'], + 'lama_hari' => $validated['lama_hari'], + 'proses_hukum' => $validated['proses_hukum'], + 'komitmen_debitur' => $validated['komitmen_debitur'], + 'keterangan' => $validated['keterangan'], + 'status' => $validated['status'] + ]; + + // Emit a success event with a message + $hapus_buku = HapusBuku::find($id); + + $data['updated_by'] = auth()->user()->id; + $data['updated_at'] = now(); + + $approval = [ + 'method' => 'update', + 'menu' => 'Hapus Buku', + 'old_request' => json_encode($hapus_buku), + 'new_request' => json_encode($data), + 'description' => 'Update Hapus Buku', + 'status' => '0', + 'ref' => $validated['nomor_pinjaman'] + ]; + + $is_approval = Approval::where('menu', 'Hapus Buku') + ->where('ref', $validated['nomor_pinjaman']) + ->where('status', '0') + ->where('method', 'update') + ->get() + ->first(); + + if ($is_approval) { + echo json_encode(['status' => 'error', 'message' => 'Data Sedang Menunggu Approval']); + } else { + Approval::create($approval); + echo json_encode([ + 'status' => 'success', + 'message' => 'Data Berhasil Di Update, Menunggu Approval' + ]); + + } + + }); + } catch (Exception $e) { + echo json_encode(['status' => 'error', 'message' => $e->getMessage()]); + } + } + } + + /** + * Display a listing of the SubrogasiJamkrindos. + * + * @param \Modules\Writeoff\DataTables\HapusBukuDataTable $dataTable + * + * @return mixed + */ + public function create(HapusBukuDataTable $dataTable, Request $request) + { + if (is_null($this->user) || !$this->user->can('pencatatan.read')) { + abort(403, 'Sorry !! You are Unauthorized to view any master data !'); + } + + $branch = Branch::all(); + $loan_type = LoanType::all(); + $facility_type = FacilityType::all(); + $currency = Currency::all(); + + $totalbayar = 0; + + if ($request->id) { + $hapusbuku = HapusBuku::find($request->id); + + $totalbayar = DetailPembayaran::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman) + ->where('status', 1) + ->sum('nominal'); + + $rekening = Rekening::with('loan_type', 'debitur', 'branch', 'currency') + ->where('nomor_rekening', $hapusbuku->nomor_pinjaman)/*->whereHas('loan_type', function ($query) { + $query->whereBetween('kode', [3000, 3999]); + })*/ + ->get() + ->first(); + + $jaminan = DetailJaminan::with('guaranteeType') + ->where('nomor_pinjaman', $hapusbuku->nomor_pinjaman) + ->get(); + $bayar = DetailPembayaran::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)->get(); + $penagihan = DetailPenagihan::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)->get(); + + return view('writeoff::pencatatan.hapus_buku.add', compact('branch', 'loan_type', 'facility_type', 'currency', 'rekening', 'totalbayar', 'hapusbuku', 'jaminan', 'bayar', 'penagihan')); + } else { + $rekening = Rekening::with('loan_type', 'debitur', 'branch', 'currency') + ->where('nomor_rekening', $request->rekening) + ->whereDoesntHave('hapusBuku') + ->whereHas('loan_type', function ($query) { + $query->whereBetween('kode', [3000, 3999]); + }) + ->get() + ->first(); + return view('writeoff::pencatatan.hapus_buku.add', compact('branch', 'loan_type', 'facility_type', 'currency', 'rekening', 'totalbayar')); + } + + + } + public function edit($id) { return redirect()->route('pencatatan.hapus_buku.create', ['id' => $id]); } + /* + * + * + * + * */ + public function store(StoreHapusBukuRequest $request) { @@ -141,293 +454,4 @@ } } } - - /** - * Display a listing of the SubrogasiJamkrindos. - * - * @param \Modules\Writeoff\DataTables\HapusBukuDataTable $dataTable - * - * @return mixed - */ - public function create(HapusBukuDataTable $dataTable, Request $request) - { - if (is_null($this->user) || !$this->user->can('pencatatan.read')) { - abort(403, 'Sorry !! You are Unauthorized to view any master data !'); - } - - $branch = Branch::all(); - $loan_type = LoanType::all(); - $facility_type = FacilityType::all(); - $currency = Currency::all(); - - $totalbayar = 0; - - if ($request->id) { - $hapusbuku = HapusBuku::find($request->id); - - $totalbayar = DetailPembayaran::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman) - ->where('status', 1) - ->sum('nominal'); - - $rekening = Rekening::with('loan_type', 'debitur', 'branch', 'currency') - ->where('nomor_rekening', $hapusbuku->nomor_pinjaman) - ->whereHas('loan_type', function ($query) { - $query->whereBetween('kode', [3000, 3999]); - }) - ->get() - ->first(); - - $jaminan = DetailJaminan::with('guaranteeType') - ->where('nomor_pinjaman', $hapusbuku->nomor_pinjaman) - ->get(); - $bayar = DetailPembayaran::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)->get(); - $penagihan = DetailPenagihan::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)->get(); - - return view('writeoff::pencatatan.hapus_buku.add', compact('branch', 'loan_type', 'facility_type', 'currency', 'rekening', 'totalbayar', 'hapusbuku', 'jaminan', 'bayar', 'penagihan')); - } else { - $rekening = Rekening::with('loan_type', 'debitur', 'branch', 'currency') - ->where('nomor_rekening', $request->rekening) - ->whereDoesntHave('hapusBuku') - ->whereHas('loan_type', function ($query) { - $query->whereBetween('kode', [3000, 3999]); - }) - ->get() - ->first(); - return view('writeoff::pencatatan.hapus_buku.add', compact('branch', 'loan_type', 'facility_type', 'currency', 'rekening', 'totalbayar')); - } - - - } - - public function hitungBunga() - { - $hapusbuku = HapusBuku::where('status', 1)->get(); - $suku_bunga_extra = 35; - $decimal = 2; - $now = Carbon::today(); - - foreach ($hapusbuku as $key => $value) { - $nomor_pinjaman = $value->nomor_pinjaman; - $tgl_wo = Carbon::parse($value->tanggal_hapus_buku); - $hari_wo = $now->diffInDays($tgl_wo); - $day_wo = $tgl_wo->day; - - - $tgl = $tgl_wo; - $bunga_ekstra = 0; - $bunga_non_ekstra = 0; - - - - while ($tgl <= $now) { - $awal = $tgl; - echo '1. '.$awal; - $id = $awal->format('Ymd'); - - $hist = InterestHistory::where('nomor_pinjaman', $nomor_pinjaman) - ->where('periode_bunga', $id) - ->get() - ->first(); - - $cnt = 0; - if ($hist) { - $cnt = 1; - } - - $base = $value->baki_debet; - $sk_bng = $value->suku_bunga; - - if($cnt == 1) { - $base = $hist->total_kewajiban; - $sk_bng = $hist->suku_bunga; - } - - - if (in_array($awal->format('m'), ['01', '03', '05', '07', '08', '10', '12'])) { - $n = 31; - } else if (in_array($awal->format('m'), ['04', '06', '09', '11'])) { - $n = 30; - } else { - $n = 28; - if ($awal->format('Y') % 4 == 0) { - $n = 29; - } - } - - if ($day_wo <= 28) { - $tgl_ = $tgl->addDays($n); - } else if ($day_wo == 29) { - $tgl_ = $tgl->addMonths(1); - if ($tgl->format('dmy') == '2802') { - $tgl_ = $tgl->addDays($day_wo); - } - } else if ($day_wo == 30) { - $tgl_ = $tgl->addMonths(1); - if ($tgl->format('dmy') == '2802') { - $tgl_ = $tgl->addDays($day_wo); - } else { - if ($tgl->addDay()->format('d') == '01') { - $tgl_ = $tgl_->subDay(); - } - } - } else { - /* if($tgl->addMonths(1)->format('d') == '02') { - $tgl_ = $tgl->addMonths(1); - } else { - $tgl_ = $tgl->addMonths(1); - if ($tgl->addDay()->format('d') == '01') { - $tgl_ = $tgl_->subDay(); - } - }*/ - $tgl_ = $tgl->addMonths(1); - echo ' 2. '.$awal;exit; - } - - - $akhir = $tgl_->subDay(); - //echo $akhir; - - echo $akhir->diffInDays($awal);exit; - $hari_b = $akhir->diffInDays($awal) + 1; - $hari_d = $now->subDay()->diffInDays($akhir); - - if ($akhir->addDay()->format('dmy') == $now->format('dmy')) { - $hari_d = 0; - } - - //bunga amount due - //echo $hari_b . 'b ' . $hari_d . 'd ' . $base . 'bs ' . $sk_bng . ' ' . $suku_bunga_extra . '
';exit; - $temp_non = ($base * ($sk_bng / 100) * $hari_b) / 360; - $bunga_non_ekstra += $temp_non; - - //denda - $temp = ($temp_non * ($suku_bunga_extra / 100) * $hari_d) / 360; - $bunga_ekstra += $temp; - - //bunga berjalan - $tagihan_lain = $temp_non; - - - InterestHistory::updateOrCreate([ - 'nomor_pinjaman' => $nomor_pinjaman, - 'periode_bunga' => $id, - ], [ - 'tanggal_awal' => $awal, - 'tanggal_akhir' => $akhir, - 'hari_bunga' => $hari_b, - 'nilai_bunga' => round($temp_non, $decimal), - 'hari_denda' => $hari_d, - 'nilai_denda' => round($temp, $decimal), - 'total_kewajiban' => $value->baki_debet, - 'suku_bunga' => $value->suku_bunga, - 'suku_bunga_denda' => $suku_bunga_extra - ]); - } - - $bunga_intra = ($value->baki_debet * ($value->suku_bunga / 100) * $hari_wo) / 360; - $bunga_non_ekstra = $bunga_non_ekstra - $tagihan_lain; - - $bunga_intra = round($bunga_intra, $decimal); - $bunga_ekstra = round($bunga_ekstra, $decimal); - $bunga_non_ekstra = round($bunga_non_ekstra, $decimal); - $tagihan_lain = round($tagihan_lain, $decimal); - - $total_all = $value->total_kewajiban + $bunga_intra + $bunga_ekstra + $value->denda + $value->biaya_lain; - - HapusBuku::where('nomor_pinjaman', $nomor_pinjaman)->update([ - 'bunga_intra' => $bunga_intra, - 'bunga_ekstra' => $bunga_ekstra, - 'bunga_non_ekstra' => $bunga_non_ekstra, - 'tagihan_lain' => $tagihan_lain, - 'total_all_kewajiban' => $total_all - ]); - } - } - - /* - * - * - * - * */ - - public function update(UpdateHapusBukuRequest $request, $id) - { - $validated = $request->validated(); - - if ($validated) { - try { - DB::transaction(function () use ($validated, $id) { - // Prepare the data for creating a new user - $data = [ - 'nomor_pinjaman' => $validated['nomor_pinjaman'], - 'kode_jenis_pinjaman' => $validated['kode_jenis_pinjaman'], - 'kode_debitur' => $validated['kode_debitur'], - 'nama_debitur' => $validated['nama_debitur'], - 'alamat_debitur' => $validated['alamat_debitur'], - 'npwp_debitur' => $validated['npwp_debitur'], - 'kode_cabang' => $validated['kode_cabang'], - 'kode_mata_uang' => $validated['kode_mata_uang'], - 'tanggal_hapus_buku' => $validated['tanggal_hapus_buku'], - 'nomor_fasilitas' => $validated['nomor_fasilitas'], - 'kode_jenis_fasilitas' => $validated['kode_jenis_fasilitas'], - 'nilai_plafond_awal' => $validated['nilai_plafond_awal'], - 'suku_bunga' => $validated['suku_bunga'], - 'baki_debet' => $validated['baki_debet'], - 'jumlah_bunga' => $validated['jumlah_bunga'], - 'jumlah_kewajiban_lain' => $validated['jumlah_kewajiban_lain'], - 'total_kewajiban' => $validated['total_kewajiban'], - 'bunga_intra' => $validated['bunga_intra'], - 'bunga_ekstra' => $validated['bunga_ekstra'], - 'bunga_non_ekstra' => $validated['bunga_non_ekstra'], - 'denda' => $validated['denda'], - 'tagihan_lain' => $validated['tagihan_lain'], - 'biaya_lain' => $validated['biaya_lain'], - 'total_all_kewajiban' => $validated['total_all_kewajiban'], - 'memo_persetujuan' => $validated['memo_persetujuan'], - 'lama_hari' => $validated['lama_hari'], - 'proses_hukum' => $validated['proses_hukum'], - 'komitmen_debitur' => $validated['komitmen_debitur'], - 'keterangan' => $validated['keterangan'], - 'status' => $validated['status'] - ]; - - // Emit a success event with a message - $hapus_buku = HapusBuku::find($id); - - $data['updated_by'] = auth()->user()->id; - $data['updated_at'] = now(); - - $approval = [ - 'method' => 'update', - 'menu' => 'Hapus Buku', - 'old_request' => json_encode($hapus_buku), - 'new_request' => json_encode($data), - 'description' => 'Update Hapus Buku', - 'status' => '0', - 'ref' => $validated['nomor_pinjaman'] - ]; - - $is_approval = Approval::where('menu', 'Hapus Buku') - ->where('ref', $validated['nomor_pinjaman']) - ->where('status', '0') - ->where('method', 'update') - ->get() - ->first(); - - if ($is_approval) { - echo json_encode(['status' => 'error', 'message' => 'Data Sedang Menunggu Approval']); - } else { - Approval::create($approval); - echo json_encode(['status' => 'success', - 'message' => 'Data Berhasil Di Update, Menunggu Approval' - ]); - - } - - }); - } catch (Exception $e) { - echo json_encode(['status' => 'error', 'message' => $e->getMessage()]); - } - } - } }