- Membuat kelas LaporanPenilaianJaminanExport untuk mengekspor data penilaian jaminan. - Menambahkan filter berdasarkan tanggal, cabang, dan pencarian untuk query. - Mengimplementasikan metode collection, map, dan headings untuk format ekspor.
127 lines
4.8 KiB
PHP
127 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace Modules\Lpj\Exports;
|
|
|
|
use Maatwebsite\Excel\Concerns\FromCollection;
|
|
use Maatwebsite\Excel\Concerns\WithHeadings;
|
|
use Maatwebsite\Excel\Concerns\WithMapping;
|
|
use Modules\Lpj\Models\Permohonan;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class LaporanPenilaianJaminanExport implements FromCollection, WithHeadings, WithMapping
|
|
{
|
|
protected $request;
|
|
|
|
public function __construct($request)
|
|
{
|
|
$this->request = $request;
|
|
}
|
|
|
|
public function collection()
|
|
{
|
|
$query = Permohonan::query();
|
|
$query = $query->where('status', 'done');
|
|
|
|
// Apply date range filter if provided
|
|
if ($this->request->has('start_date') || $this->request->has('end_date')) {
|
|
$query->whereBetween('tanggal_permohonan', [
|
|
$this->request->start_date ?? '1900-01-01',
|
|
$this->request->end_date ?? now()->toDateString()
|
|
]);
|
|
}
|
|
|
|
// Apply branch filter if provided
|
|
if ($this->request->has('branch_id') && !empty($this->request->branch_id)) {
|
|
$query->where('branch_id', $this->request->branch_id);
|
|
}
|
|
|
|
// Apply search filter if provided
|
|
if ($this->request->has('search') && !empty($this->request->search)) {
|
|
$search = $this->request->search;
|
|
$query->where(function ($q) use ($search) {
|
|
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
|
|
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
|
|
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
|
|
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
|
|
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
|
|
$q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search . '%');
|
|
$q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search . '%');
|
|
$q->orWhere('status', 'LIKE', '%' . $search . '%');
|
|
});
|
|
}
|
|
|
|
// Default ordering
|
|
$query->orderBy('nomor_registrasi', 'asc');
|
|
|
|
return $query->with(['debiture.branch'])->get();
|
|
}
|
|
|
|
public function map($permohonan): array
|
|
{
|
|
$luas_tanah = 0;
|
|
$luas_bangunan = 0;
|
|
$nilai_tanah = 0;
|
|
$nilai_bangunan = 0;
|
|
$npw = 0;
|
|
$nilai_liquidasi = 0;
|
|
|
|
if (isset($permohonan->penilai->lpj)) {
|
|
$lpj = json_decode($permohonan->penilai->lpj, true);
|
|
$npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0);
|
|
|
|
$luas_tanah = $lpj['luas_tanah'] ?? 0;
|
|
$luas_bangunan = $lpj['luas_bangunan'] ?? 0;
|
|
$nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0);
|
|
$nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0);
|
|
$nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0);
|
|
}
|
|
|
|
return [
|
|
$permohonan->id,
|
|
$permohonan->nomor_registrasi,
|
|
$permohonan->tanggal_permohonan,
|
|
$permohonan->debiture->branch->name,
|
|
$permohonan->debiture->name,
|
|
$permohonan->creator->name,
|
|
$permohonan->tujuanPenilaian->name,
|
|
$permohonan->documents->pluck('jenisJaminan.name')->unique()->implode(', '),
|
|
$permohonan->documents->map(function ($document) {
|
|
return formatAlamat($document);
|
|
})->unique()->implode(', '),
|
|
$luas_tanah . ' m²',
|
|
formatRupiah($nilai_tanah, 2),
|
|
$luas_bangunan . ' m²',
|
|
formatRupiah($nilai_bangunan, 2),
|
|
'', // tanggal_laporan
|
|
'', // tanggal_review
|
|
formatRupiah($npw, 2),
|
|
formatRupiah($nilai_liquidasi, 2),
|
|
$permohonan->penilaian->_user_penilai->userPenilaiTeam->name,
|
|
];
|
|
}
|
|
|
|
public function headings(): array
|
|
{
|
|
return [
|
|
'ID',
|
|
'Nomor Registrasi',
|
|
'Tanggal Permohonan',
|
|
'Cabang',
|
|
'Nama Debitur',
|
|
'Pemohon',
|
|
'Tujuan Penilaian',
|
|
'Jenis Agunan',
|
|
'Alamat Agunan',
|
|
'Luas Tanah',
|
|
'Nilai Tanah',
|
|
'Luas Bangunan',
|
|
'Nilai Bangunan',
|
|
'Tanggal Laporan',
|
|
'Tanggal Review',
|
|
'Nilai Pasar Wajar',
|
|
'Nilai Likuidasi',
|
|
'Nama Penilai',
|
|
];
|
|
}
|
|
}
|