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', ]; } }