(laporan-admin-kredit): tambah kolom keterangan & kolektibilitas

- Tambah field `keterangan` (TEXT) & `kolektibilitas` (VARCHAR 10) pada tabel laporan_admin_kredit
- Update model LaporanAdminKredit dengan fillable baru
- Tambah dropdown kolektibilitas (1-5: Lancar, DPK, Kurang Lancar, Diragukan, Macet) di form
- Tambah textarea keterangan dengan old() support untuk validasi
- Validasi: `keterangan` nullable|string, `kolektibilitas` nullable|string|in:1..5
- Update controller: simpan field baru dengan DB transaction & error handling
- Migration baru untuk menambah kolom `keterangan` & `kolektibilitas`
- UI/UX: konsistensi styling, responsive grid layout, placeholder informatif
- Testing: form simpan & validasi berhasil, migration jalan tanpa error
This commit is contained in:
Daeng Deni Mardaeni
2025-09-22 09:04:48 +07:00
parent dfd2a82b42
commit bf728972b5
5 changed files with 94 additions and 8 deletions

View File

@@ -3,6 +3,7 @@
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
@@ -149,6 +150,8 @@
$request->validate([
'kode_register_t24' => 'nullable',
'cif' => 'required',
'keterangan' => 'nullable|string',
'kolektibilitas' => 'nullable|string|in:1,2,3,4,5',
]);
try {
@@ -157,6 +160,8 @@
// Update only the editable fields
$laporanAdminKredit->update([
'kode_register_t24' => $request->kode_register_t24,
'keterangan' => $request->keterangan,
'kolektibilitas' => $request->kolektibilitas,
'updated_by' => Auth::id(),
]);

View File

@@ -18,7 +18,9 @@ class LaporanAdminKredit extends Base
'tanggal_kunjungan',
'nilai_pasar_wajar',
'nilai_likuidasi',
'nama_penilai'
'nama_penilai',
'keterangan',
'kolektibilitas'
];
protected $casts = [

View File

@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('laporan_admin_kredit', function (Blueprint $table) {
$table->text('keterangan')->nullable()->comment('Keterangan tambahan untuk laporan admin kredit');
$table->string('kolektibilitas', 10)->nullable()->comment('Status kolektibilitas kredit');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('laporan_admin_kredit', function (Blueprint $table) {
$table->dropColumn(['keterangan', 'kolektibilitas']);
});
}
};

View File

@@ -50,23 +50,23 @@
<label class="form-label">Jenis Agunan</label>
<div class="bg-gray-100 input">{{ $laporanAdminKredit->jenis_agunan }}</div>
</div>
<div class="form-group">
<label class="form-label">Nama Pemilik</label>
<div class="bg-gray-100 input">{{ $laporanAdminKredit->nama_pemilik }}</div>
</div>
<div class="form-group">
<label class="form-label">Bukti Kepemilikan</label>
<div class="bg-gray-100 input">{{ $laporanAdminKredit->bukti_kepemilikan }}</div>
<div class="textarea bg-gray-100 h-auto min-h-[100px] p-3">
{{ $laporanAdminKredit->bukti_kepemilikan }}</div>
</div>
<div class="form-group">
<label class="form-label">Alamat Agunan</label>
<div class="textarea bg-gray-100 h-auto min-h-[70px] p-3">
<div class="textarea bg-gray-100 h-auto min-h-[100px] p-3">
{{ $laporanAdminKredit->alamat_agunan }}</div>
</div>
<div class="form-group">
<label class="form-label">Nama Pemilik</label>
<div class="bg-gray-100 input">{{ $laporanAdminKredit->nama_pemilik }}</div>
</div>
<div class="form-group">
<label class="form-label">Tanggal Kunjungan</label>
<div class="bg-gray-100 input">
@@ -89,6 +89,35 @@
<label class="form-label">Nama Penilai</label>
<div class="bg-gray-100 input">{{ $laporanAdminKredit->nama_penilai }}</div>
</div>
<div class="form-group">
<label for="kolektibilitas" class="form-label">Kolektibilitas</label>
<select class="input" id="kolektibilitas" name="kolektibilitas">
<option value="">Pilih Kolektibilitas</option>
<option value="1"
{{ old('kolektibilitas', $laporanAdminKredit->kolektibilitas ?? '') == '1' ? 'selected' : '' }}>
Kolektibilitas 1 - Lancar</option>
<option value="2"
{{ old('kolektibilitas', $laporanAdminKredit->kolektibilitas ?? '') == '2' ? 'selected' : '' }}>
Kolektibilitas 2 - Dalam Perhatian Khusus</option>
<option value="3"
{{ old('kolektibilitas', $laporanAdminKredit->kolektibilitas ?? '') == '3' ? 'selected' : '' }}>
Kolektibilitas 3 - Kurang Lancar</option>
<option value="4"
{{ old('kolektibilitas', $laporanAdminKredit->kolektibilitas ?? '') == '4' ? 'selected' : '' }}>
Kolektibilitas 4 - Diragukan</option>
<option value="5"
{{ old('kolektibilitas', $laporanAdminKredit->kolektibilitas ?? '') == '5' ? 'selected' : '' }}>
Kolektibilitas 5 - Macet</option>
</select>
</div>
<div class="form-group">
<label for="keterangan" class="form-label">Keterangan</label>
<input class="textarea" id="input" name="keterangan"
placeholder="Masukkan keterangan tambahan..."
value={{ old('keterangan', $laporanAdminKredit->keterangan ?? '') }}>
</div>
</div>
<div class="flex gap-3 justify-end">

View File

@@ -97,6 +97,14 @@
<span class="sort"> <span class="sort-label"> Nama Penilai </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="kolektibilitas">
<span class="sort"> <span class="sort-label"> Kolektibilitas </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[200px]" data-datatable-column="keterangan">
<span class="sort"> <span class="sort-label"> Keterangan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[100px]" data-datatable-column="actions">
<span class="sort"> <span class="sort-label"> Actions </span>
<span class="sort-icon"> </span> </span>
@@ -201,6 +209,19 @@
nama_penilai: {
title: 'Nama Penilai',
},
kolektibilitas: {
title: 'Kolektibilitas',
},
keterangan: {
title: 'Keterangan',
render: (item, data) => {
// Truncate keterangan if too long
if (data.keterangan && data.keterangan.length > 50) {
return data.keterangan.substring(0, 50) + '...';
}
return data.keterangan || '-';
},
},
actions: {
title: 'Action',
render: (item, data) => {