update interest history

This commit is contained in:
daengdeni 2024-05-28 17:36:04 +07:00
parent 9ad98da843
commit 6baeda70c4
3 changed files with 214 additions and 66 deletions

View File

@ -4,27 +4,40 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
public function up()
: void
{
Schema::create('interest_histories', function (Blueprint $table) {
$table->id();
$table->string('nomor_pinjaman', 20);
$table->string('periode_bunga',6);
$table->string('nilai_bunga_intra');
$table->string('nilai_bunga_extra');
$table->string('periode_bunga', 8);
$table->date('tanggal_awal');
$table->date('tanggal_akhir');
$table->string('hari_bunga');
$table->string('nilai_bunga');
$table->string('hari_denda');
$table->string('nilai_denda');
$table->string('total_kewajiban');
$table->string('suku_bunga');
$table->string('suku_bunga_denda');
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
public function down()
: void
{
Schema::dropIfExists('interest_histories');
}

View File

@ -10,7 +10,14 @@
protected $fillable = [
'nomor_pinjaman',
'periode_bunga',
'nilai_bunga_intra',
'nilai_bunga_extra',
'tanggal_awal',
'tanggal_akhir',
'hari_bunga',
'nilai_bunga',
'hari_denda',
'nilai_denda',
'total_kewajiban',
'suku_bunga',
'suku_bunga_denda',
];
}

View File

@ -4,6 +4,7 @@
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Carbon\CarbonInterval;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@ -17,6 +18,7 @@
use Modules\Writeoff\Entities\DetailPenagihan;
use Modules\Writeoff\Entities\FacilityType;
use Modules\Writeoff\Entities\HapusBuku;
use Modules\Writeoff\Entities\InterestHistory;
use Modules\Writeoff\Entities\LoanType;
use Modules\Writeoff\Entities\Rekening;
use Modules\Writeoff\Http\Requests\HapusBuku\StoreHapusBukuRequest;
@ -46,7 +48,7 @@
if (is_null($this->user) || !$this->user->can('pencatatan.read')) {
abort(403, 'Sorry !! You are Unauthorized to view any master data !');
}
$this->hitungBunga();
if ($request->rekening) {
return redirect()->route('pencatatan.hapus_buku.create', ['rekening' => $request->rekening]);
} else {
@ -61,6 +63,7 @@
public function store(StoreHapusBukuRequest $request)
{
$validated = $request->validated();
if ($validated) {
@ -125,7 +128,8 @@
echo json_encode(['status' => 'error', 'message' => 'Data Sedang Menunggu Approval']);
} else {
Approval::create($approval);
echo json_encode(['status' => 'success',
echo json_encode([
'status' => 'success',
'message' => 'Data Berhasil Di Input, Menunggu Approval'
]);
}
@ -173,7 +177,9 @@
->get()
->first();
$jaminan = DetailJaminan::with('guaranteeType')->where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)->get();
$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();
@ -193,6 +199,157 @@
}
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 . '<br>';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();
@ -261,7 +418,9 @@
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']);
echo json_encode(['status' => 'success',
'message' => 'Data Berhasil Di Update, Menunggu Approval'
]);
}
@ -271,35 +430,4 @@
}
}
}
/*
*
*
*
* */
public function hitungBunga(){
$hapusbuku = HapusBuku::all();
$suku_bunga_extra = 35;
foreach($hapusbuku as $key => $value){
// Define your dates (replace with your actual dates)
$startDate = Carbon::parse($value->tanggal_hapus_buku); // Or use any date variable
$endDate = Carbon::today();
// Calculate the difference in days
$daysDiff = $startDate->diffInDays($endDate);
$bunga = $value->suku_bunga / 100 * $value->baki_debet;
$value->jumlah_bunga = $bunga;
$value->save();
}
}
}