- Menambahkan tabel `laporan_slik` (47 kolom, index, audit trail, status aktif/non-aktif) - Membuat model `LaporanSlik` dengan fillable lengkap, relasi ke Slik & User, accessor agunan/status badge - Menambahkan controller `LaporanSlikController` dengan method store(), datatables(), export() - store(): validasi strict, cek duplikasi, copy data dari Slik ke laporan, hapus data asal - datatables(): filter search/tahun/bulan/status, pagination, sorting, JSON response standar - export(): ekspor Excel dengan filter sama, nama file otomatis timestamp, error handling - Integrasi sistem: transaksi DB aman, logging detail, support bulk operations, memory optimisasi - UX: SweetAlert, DataTable real-time, loading state, error message jelas, auto-reload - Security & performa: validasi input, XSS & SQLi prevention, index optimization, siap rate limiting
115 lines
2.6 KiB
PHP
115 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace Modules\Lpj\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Modules\Usermanagement\Models\User;
|
|
|
|
class LaporanSlik extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $table = 'laporan_slik';
|
|
|
|
protected $fillable = [
|
|
'slik_id',
|
|
'sandi_bank',
|
|
'kode_kantor',
|
|
'kode_cabang',
|
|
'tahun',
|
|
'bulan',
|
|
'no_rekening',
|
|
'cif',
|
|
'kode_jenis',
|
|
'kode_jenis_ket',
|
|
'kode_sifat',
|
|
'kode_sifat_ket',
|
|
'kode_valuta',
|
|
'kode_valuta_ket',
|
|
'baki_debet',
|
|
'kolektibilitas',
|
|
'kolektibilitas_ket',
|
|
'tanggal_mulai',
|
|
'tanggal_jatuh_tempo',
|
|
'tanggal_selesai',
|
|
'tanggal_restrukturisasi',
|
|
'kode_sebab_macet',
|
|
'kode_sebab_macet_ket',
|
|
'tanggal_macet',
|
|
'kode_kondisi',
|
|
'kode_kondisi_ket',
|
|
'tanggal_kondisi',
|
|
'nilai_agunan',
|
|
'nilai_agunan_ket',
|
|
'jenis_agunan',
|
|
'kode_agunan',
|
|
'kode_agunan_ket',
|
|
'peringkat_agunan',
|
|
'peringkat_agunan_ket',
|
|
'nama_debitur',
|
|
'npwp',
|
|
'no_ktp',
|
|
'no_telp',
|
|
'kode_kab_kota',
|
|
'kode_kab_kota_ket',
|
|
'kode_negara_domisili',
|
|
'kode_negara_domisili_ket',
|
|
'kode_pos',
|
|
'alamat',
|
|
'fasilitas',
|
|
'status_agunan',
|
|
'tanggal_lapor',
|
|
'status',
|
|
'created_by',
|
|
'updated_by',
|
|
];
|
|
|
|
protected $casts = [
|
|
'created_at' => 'datetime',
|
|
'updated_at' => 'datetime',
|
|
];
|
|
|
|
public function slik()
|
|
{
|
|
return $this->belongsTo(Slik::class, 'slik_id');
|
|
}
|
|
|
|
public function creator()
|
|
{
|
|
return $this->belongsTo(User::class, 'created_by');
|
|
}
|
|
|
|
public function updater()
|
|
{
|
|
return $this->belongsTo(User::class, 'updated_by');
|
|
}
|
|
|
|
/**
|
|
* Scope untuk filter berdasarkan status
|
|
*/
|
|
public function scopeActive($query)
|
|
{
|
|
return $query->where('status', 'aktif');
|
|
}
|
|
|
|
/**
|
|
* Accessor untuk nilai agunan yang diformat
|
|
*/
|
|
public function getNilaiAgunanFormattedAttribute()
|
|
{
|
|
return number_format($this->nilai_agunan ?? 0, 0, ',', '.');
|
|
}
|
|
|
|
/**
|
|
* Accessor untuk status badge
|
|
*/
|
|
public function getStatusBadgeAttribute()
|
|
{
|
|
$status = $this->status ?? 'aktif';
|
|
$class = $status == 'aktif' ? 'success' : 'danger';
|
|
|
|
return '<span class="badge badge-light-' . $class . '">' . ucfirst($status) . '</span>';
|
|
}
|
|
}
|