✨(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:
@@ -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(),
|
||||
]);
|
||||
|
||||
|
||||
@@ -18,7 +18,9 @@ class LaporanAdminKredit extends Base
|
||||
'tanggal_kunjungan',
|
||||
'nilai_pasar_wajar',
|
||||
'nilai_likuidasi',
|
||||
'nama_penilai'
|
||||
'nama_penilai',
|
||||
'keterangan',
|
||||
'kolektibilitas'
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
|
||||
@@ -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']);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -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">
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user