diff --git a/app/Exports/LaporanPenilaianJaminanExport.php b/app/Exports/LaporanPenilaianJaminanExport.php new file mode 100644 index 0000000..8f696ed --- /dev/null +++ b/app/Exports/LaporanPenilaianJaminanExport.php @@ -0,0 +1,126 @@ +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', + ]; + } + }