From d434680f0e6b92da790bc944e63034ae3fdd6ef9 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 23 Apr 2025 10:43:46 +0700 Subject: [PATCH 1/3] feat(laporan-penilaian-jaminan): tambahkan menu untuk laporan penilaian jaminan - Menambahkan entri menu baru untuk "Laporan Penilaian Jaminan". - Menetapkan path dan ikon untuk menu baru. - Mengatur peran yang diperlukan untuk mengakses laporan. --- module.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/module.json b/module.json index a5e17be..bf2af7b 100644 --- a/module.json +++ b/module.json @@ -81,6 +81,23 @@ "EO Appraisal", "senior-officer" ] + }, + { + "title": "Laporan Pernilaan Jaminan", + "path": "laporan-penilaian-jaminan", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] } ], "otorisator": [ From b3ccf3bb8f8d12d480fd630a102e4a0bd2e34882 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 23 Apr 2025 11:23:09 +0700 Subject: [PATCH 2/3] feat(laporan-penilaian-jaminan): tambahkan fungsionalitas ekspor laporan penilaian jaminan - Menambahkan judul dan informasi cabang pada laporan. - Menyertakan periode dan tanggal ekspor di laporan. - Menambahkan informasi pengguna yang melakukan ekspor. - Memperbaiki format dan gaya header pada laporan. - Mengatur auto-size kolom dan menambahkan border pada sel data. --- app/Exports/LaporanPenilaianJaminanExport.php | 116 +++++++++++++++++- 1 file changed, 113 insertions(+), 3 deletions(-) diff --git a/app/Exports/LaporanPenilaianJaminanExport.php b/app/Exports/LaporanPenilaianJaminanExport.php index 8f696ed..6e6e9f1 100644 --- a/app/Exports/LaporanPenilaianJaminanExport.php +++ b/app/Exports/LaporanPenilaianJaminanExport.php @@ -5,10 +5,16 @@ use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithMapping; + use Maatwebsite\Excel\Concerns\WithTitle; + use Maatwebsite\Excel\Concerns\WithCustomStartCell; + use Maatwebsite\Excel\Concerns\WithEvents; + use Maatwebsite\Excel\Events\AfterSheet; use Modules\Lpj\Models\Permohonan; + use Modules\Lpj\Models\Branch; use Illuminate\Support\Facades\Auth; + use Carbon\Carbon; - class LaporanPenilaianJaminanExport implements FromCollection, WithHeadings, WithMapping + class LaporanPenilaianJaminanExport implements FromCollection, WithHeadings, WithMapping, WithTitle, WithCustomStartCell, WithEvents { protected $request; @@ -56,8 +62,11 @@ return $query->with(['debiture.branch'])->get(); } + protected $rowNumber = 0; + public function map($permohonan): array { + $this->rowNumber++; $luas_tanah = 0; $luas_bangunan = 0; $nilai_tanah = 0; @@ -77,7 +86,7 @@ } return [ - $permohonan->id, + $this->rowNumber, $permohonan->nomor_registrasi, $permohonan->tanggal_permohonan, $permohonan->debiture->branch->name, @@ -103,7 +112,7 @@ public function headings(): array { return [ - 'ID', + 'No', 'Nomor Registrasi', 'Tanggal Permohonan', 'Cabang', @@ -123,4 +132,105 @@ 'Nama Penilai', ]; } + + /** + * @return string + */ + public function title(): string + { + return 'Laporan Penilaian Jaminan'; + } + + /** + * @return string + */ + public function startCell(): string + { + return 'A7'; + } + + /** + * @return array + */ + public function registerEvents(): array + { + return [ + AfterSheet::class => function(AfterSheet $event) { + // Get the sheet + $sheet = $event->sheet->getDelegate(); + + // Set the title + $sheet->setCellValue('A1', 'LAPORAN PENILAIAN JAMINAN'); + $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(16); + + // Merge cells for title + $sheet->mergeCells('A1:R1'); + $sheet->getStyle('A1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); + + // Set the branch information if filtered + $branchInfo = ''; + if ($this->request->has('branch_id') && !empty($this->request->branch_id)) { + $branch = Branch::find($this->request->branch_id); + if ($branch) { + $branchInfo = 'Cabang: ' . $branch->name; + $sheet->setCellValue('A2', $branchInfo); + $sheet->mergeCells('A2:R2'); + $sheet->getStyle('A2')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); + $sheet->getStyle('A2')->getFont()->setBold(true); + } + } + + // Set the period + $startDate = $this->request->start_date ?? ''; + $endDate = $this->request->end_date ?? ''; + + $rowIndex = $branchInfo ? 3 : 2; + + if ($startDate && $endDate) { + $startDateFormatted = Carbon::parse($startDate)->format('d F Y'); + $endDateFormatted = Carbon::parse($endDate)->format('d F Y'); + $sheet->setCellValue('A' . $rowIndex, 'Periode: ' . $startDateFormatted . ' - ' . $endDateFormatted); + } else { + $sheet->setCellValue('A' . $rowIndex, 'Periode: Semua Data'); + } + $sheet->mergeCells('A' . $rowIndex . ':R' . $rowIndex); + $sheet->getStyle('A' . $rowIndex)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); + + // Set the date of export + $rowIndex++; + $sheet->setCellValue('A' . $rowIndex, 'Tanggal Export: ' . Carbon::now()->format('d F Y H:i:s')); + + // Set the user who exported + $rowIndex++; + $userName = Auth::user() ? Auth::user()->name : 'System'; + $sheet->setCellValue('A' . $rowIndex, 'Diexport oleh: ' . $userName); + + // Add a blank line + $rowIndex++; + $sheet->setCellValue('A' . $rowIndex, ''); + + // Style the header row + $headerRange = 'A7:' . $sheet->getHighestColumn() . '7'; + $sheet->getStyle($headerRange)->getFont()->setBold(true); + $sheet->getStyle($headerRange)->getFill() + ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) + ->getStartColor()->setARGB('FFCCCCCC'); + + // Auto-size columns + foreach(range('A', $sheet->getHighestColumn()) as $column) { + $sheet->getColumnDimension($column)->setAutoSize(true); + } + + // Add borders to all cells with data + $dataRange = 'A7:' . $sheet->getHighestColumn() . $sheet->getHighestRow(); + $sheet->getStyle($dataRange)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + + // Center align the header row + $sheet->getStyle($headerRange)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); + + // Set text wrap for header cells + $sheet->getStyle($headerRange)->getAlignment()->setWrapText(true); + }, + ]; + } } From 016791954213170d73cdec46ea939e911d065045 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 23 Apr 2025 11:29:01 +0700 Subject: [PATCH 3/3] feat(laporan-penilaian-jaminan): perbarui tanggal laporan dan tanggal review - Menambahkan logika untuk menampilkan tanggal laporan berdasarkan approval. - Memperbarui tanggal review dengan tanggal kunjungan dari penilaian. --- app/Exports/LaporanPenilaianJaminanExport.php | 6 ++++-- app/Http/Controllers/LaporanPenilaianJaminanController.php | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/Exports/LaporanPenilaianJaminanExport.php b/app/Exports/LaporanPenilaianJaminanExport.php index 6e6e9f1..cbf0196 100644 --- a/app/Exports/LaporanPenilaianJaminanExport.php +++ b/app/Exports/LaporanPenilaianJaminanExport.php @@ -101,8 +101,10 @@ formatRupiah($nilai_tanah, 2), $luas_bangunan . ' m²', formatRupiah($nilai_bangunan, 2), - '', // tanggal_laporan - '', // tanggal_review + ($permohonan->approval_dd_at || $permohonan->approval_eo_at) ? + formatTanggalIndonesia($permohonan->approval_dd_at ?? $permohonan->approval_eo_at) : '', + $permohonan->penilaian->tanggal_kunjungan ? + formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '', formatRupiah($npw, 2), formatRupiah($nilai_liquidasi, 2), $permohonan->penilaian->_user_penilai->userPenilaiTeam->name, diff --git a/app/Http/Controllers/LaporanPenilaianJaminanController.php b/app/Http/Controllers/LaporanPenilaianJaminanController.php index ecde913..fd4ff07 100644 --- a/app/Http/Controllers/LaporanPenilaianJaminanController.php +++ b/app/Http/Controllers/LaporanPenilaianJaminanController.php @@ -122,8 +122,8 @@ 'nilai_tanah' => formatRupiah($nilai_tanah,2), 'luas_bangunan' => $luas_bangunan . ' m²', 'nilai_bangunan' => formatRupiah($nilai_bangunan,2), - 'tanggal_laporan' => '', - 'tanggal_review' => '', + 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '', + 'tanggal_review' => $permohonan->penilaian->tanggal_kunjungan ?? '', 'nilai_pasar_wajar' => formatRupiah($npw,2), 'nilai_likuidasi' => formatRupiah($nilai_liquidasi,2), 'nama_penilai' => $permohonan->penilaian->_user_penilai->userPenilaiTeam->name,