From ab7150a97fbebbfd823efda0267df39309b4f805 Mon Sep 17 00:00:00 2001 From: majid Date: Sat, 14 Dec 2024 04:23:14 +0700 Subject: [PATCH] perbaikan form inspeksi bagian unit, dan kertas kerja --- app/Exports/KertasKerjaExport.php | 496 +++++++++--------- app/Http/Controllers/PenilaiController.php | 23 +- app/Http/Controllers/SurveyorController.php | 80 +-- database/seeders/KJPPSeeder.php | 345 ++++++------ .../views/component/kertas-kerja.blade.php | 222 ++++++++ resources/views/penilai/show.blade.php | 314 +++++------ .../views/surveyor/components/denah.blade.php | 11 +- .../surveyor/components/inspeksi.blade.php | 6 +- routes/web.php | 4 +- 9 files changed, 889 insertions(+), 612 deletions(-) create mode 100644 resources/views/component/kertas-kerja.blade.php diff --git a/app/Exports/KertasKerjaExport.php b/app/Exports/KertasKerjaExport.php index 57c61c6..6ea78de 100644 --- a/app/Exports/KertasKerjaExport.php +++ b/app/Exports/KertasKerjaExport.php @@ -2,271 +2,279 @@ namespace Modules\Lpj\Exports; -use Maatwebsite\Excel\Concerns\FromCollection; +// use Maatwebsite\Excel\Concerns\FromCollection; // use Maatwebsite\Excel\Concerns\WithColumnFormatting; -use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; -use Maatwebsite\Excel\Concerns\WithHeadings; -use Maatwebsite\Excel\Concerns\WithStyles; -use Maatwebsite\Excel\Concerns\WithColumnWidths; -use Maatwebsite\Excel\Concerns\WithEvents; -use Maatwebsite\Excel\Events\AfterSheet; - -class KertasKerjaExport implements FromCollection, WithHeadings, WithStyles, WithColumnWidths, WithEvents +// use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; +// use Maatwebsite\Excel\Concerns\WithHeadings; +// use Maatwebsite\Excel\Concerns\WithStyles; +// use Maatwebsite\Excel\Concerns\WithColumnWidths; +// use Maatwebsite\Excel\Concerns\WithEvents; +// use Maatwebsite\Excel\Events\AfterSheet; +use Illuminate\Contracts\View\View; +use Maatwebsite\Excel\Concerns\FromView; +class KertasKerjaExport implements FromView { + +// class KertasKerjaExport implements FromCollection, WithHeadings, WithStyles, WithColumnWidths, WithEvents +// { protected $data; - protected $headerInfo; - - public function __construct($data, $headerInfo) + public function __construct($data) { $this->data = $data; - $this->headerInfo = $headerInfo; } - public function collection() + public function view(): View { - $rows = []; - - $nomor = 1; - $fields = [ - 'jenis_aset' => 'Jenis Aset', - 'luas_tanah' => 'Luas Tanah (M²)', - 'luas_bangunan' => 'Luas Bangunan (M²)', - 'harga' => 'Harga Transaksi/Penawaran', - 'tanggal_penawaran' => 'Tanggal Penawaran/Transaksi', - 'diskon' => 'Diskon %', - 'esitmasi_harga' => 'Esitmasi Harga Transaksi (Rp)', - 'no_telepon' => 'Telepon Contact Person', - 'nama_nara_sumbr' => 'Nama Nara Sumber', - 'status_nara_sumbr' => 'Status Nara Sumber', - 'waktu_transaksi' => 'Waktu Transaksi/Penawaran', - 'alamat' => 'Alamat Titik Gps', - - 'jalan' => 'Jalan', - 'desa' => 'Desa/Kelurahan', - 'kecamatan' => 'Kecamatan', - 'kabupaten' => 'Kabupaten', - 'provinsi' => 'Provinsi', - - 'jarak_pembanding' => 'Jarak Pembanding dengan Objek', - 'elevasi' => 'Estimasi Ranking Tanah', - 'peruntukan' => 'Estiamsi Rangkin Bangunan' - - ]; - - foreach ($fields as $key => $label) { - $rows[] = [ - $nomor++, - $label, - $this->data['objek'][$key] ?? '', - $this->data['pembanding1'][$key] ?? '', - $this->data['pembanding2'][$key] ?? '', - $this->data['pembanding3'][$key] ?? '' - ]; - } - - // B. Perhitungan Penyesuaian - $rows[] = ['']; - $rows[] = ['']; - $rows[] = ['B. Estimasi Nilai Tanah Pembanding dengan Teknik Penyisaan Tanah untuk mendapatkan per meter persegi estimasi Nilai Tanah Pembanding']; - $rows[] = ['No.','Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3']; - $nostimasi = 1; - $filedEstimasi = [ - 'estimasi' => 'Estimasi Biaya Pengganti Baru Bangunan (Rp)', - 'estimasi_spl' => 'Estimasi Biaya Pengganti Baru SPL (Rp)', - 'penyusutan' => 'Penyusutan Fisik Banguna', - - 'a' => 'a. rincian ttipe bangunan (MAPPI)', - 'b' => 'b. umur ekonomis (MAPPI)', - 'c' => 'c. estimasi Tahun tahun visual dengan mempertimbangkan renovasi', - 'd' => 'd. Sehingga sisa umur efektif', - 'e' => 'e. kondisi bagunan', - 'f' => 'f.sehinggan penyusutan fisik', - 'penyusutan_fungsi' => 'Penyusutan fungsi Bangunan (%)', - 'penyusutan_ekonomi' => 'Penyusutan Ekonomi Bangunan (%)', - 'total_penyusutan' => 'Total Penyusutan (%)', - 'estimasi_nilai' => 'Estimasi Nilai Bangunan dan SPL (Rp)', - 'estimasi_tanah' => 'Estimasi Nilai Tanah Pembanding (Rp)', - 'estimasi_nilai' => 'Estimasi Nilai Tanah Pembanding (Rp)', - ]; - - foreach ($filedEstimasi as $key => $label) { - $rows[] = [ - $nostimasi++, - $label, - $this->data['estimasi'][$key] ?? '', - $this->data['estimasi1'][$key] ?? '', - $this->data['estimasi2'][$key] ?? '', - $this->data['estimasi3'][$key] ?? '' - - ]; - } - - - $row[] = ['']; - $row[] = ['']; - $rows[] = ['INDIKASI NILAI TANAHATAS OBJEK PENILAIAN']; - - $indikasi=[ - 'luas_tanah' => 'Luas Tanah ', - 'indikasi_per' => 'INDIKASI TANAH PER M2 (RP/M2)', - 'indikasi_total' => 'INDIKASI TANAH TOTAL(RP)', - 'varian' => 'VARIANT(%)', - ]; - - foreach ($indikasi as $key => $label) { - $rows[] = [ - $label, - $this->data['indikasi'][$key] ?? '', - ]; - } - - - // C. Peta Lokasi - $rows[] = ['']; - $rows[] = ['']; - $rows[] = ['C. Peta Lokasi']; - $rows[] = [$this->data['foto_objek']['foto_objek_peta'] ?? '']; - - // D. Foto Objek dan Data Pembanding - $rows[] = ['']; - $rows[] = ['D. Foto Objek dan Data Pembanding']; - $rows[] = [ - $this->data['foto_objek1']['foto_objek'] ?? '', - $this->data['foto_objek2']['foto_objek'] ?? '', - '', '', '' - ]; - - // E. Foto Objek - $rows[] = ['']; - $rows[] = ['E. Foto Objek']; - $rows[] = [ - $this->data['foto']['foto_objek'] ?? '', - $this->data['foto']['foto_objek'] ?? '', - '', '', '' - ]; - - return collect($rows); + return view('lpj::component.kertas-kerja', [ + 'data' => $this->data, + ]); } - public function headings(): array - { - return [ - ['KERTAS KERJA PENILAIAN'], - ['Pendekatan Pasar'], - ['Metode Perbandingan Data Pasar'], - ['Tanggal Penilaian: ' . ($this->headerInfo['tanggal_penilaian'] ?? '')], - ['Nama Pemilik Aset: ' . ($this->headerInfo['nama_pemilik'] ?? '')], - ['Nama Pemberi Tugas: ' . ($this->headerInfo['nama_pemberi_tugas'] ?? '')], - ['Lokasi: ' . ($this->headerInfo['lokasi_lengkap'] ?? '')], - ['Nama Debitur: ' . ($this->headerInfo['nama_debitur'] ?? '')], - [''], - ['A. INFORMASI UMUM'], - ['No.','Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3'] + // public function collection() + // { + // $rows = []; + + // $nomor = 1; + // $fields = [ + // 'jenis_aset' => 'Jenis Aset', + // 'luas_tanah' => 'Luas Tanah (M²)', + // 'luas_bangunan' => 'Luas Bangunan (M²)', + // 'harga' => 'Harga Transaksi/Penawaran', + // 'tanggal_penawaran' => 'Tanggal Penawaran/Transaksi', + // 'diskon' => 'Diskon %', + // 'esitmasi_harga' => 'Esitmasi Harga Transaksi (Rp)', + // 'no_telepon' => 'Telepon Contact Person', + // 'nama_nara_sumbr' => 'Nama Nara Sumber', + // 'status_nara_sumbr' => 'Status Nara Sumber', + // 'waktu_transaksi' => 'Waktu Transaksi/Penawaran', + // 'alamat' => 'Alamat Titik Gps', + + // 'jalan' => 'Jalan', + // 'desa' => 'Desa/Kelurahan', + // 'kecamatan' => 'Kecamatan', + // 'kabupaten' => 'Kabupaten', + // 'provinsi' => 'Provinsi', + + // 'jarak_pembanding' => 'Jarak Pembanding dengan Objek', + // 'elevasi' => 'Estimasi Ranking Tanah', + // 'peruntukan' => 'Estiamsi Rangkin Bangunan' + + // ]; + + // foreach ($fields as $key => $label) { + // $rows[] = [ + // $nomor++, + // $label, + // $this->data['objek'][$key] ?? '', + // $this->data['pembanding1'][$key] ?? '', + // $this->data['pembanding2'][$key] ?? '', + // $this->data['pembanding3'][$key] ?? '' + // ]; + // } + + // // B. Perhitungan Penyesuaian + // $rows[] = ['']; + // $rows[] = ['']; + // $rows[] = ['B. Estimasi Nilai Tanah Pembanding dengan Teknik Penyisaan Tanah untuk mendapatkan per meter persegi estimasi Nilai Tanah Pembanding']; + // $rows[] = ['No.','Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3']; + // $nostimasi = 1; + // $filedEstimasi = [ + // 'estimasi' => 'Estimasi Biaya Pengganti Baru Bangunan (Rp)', + // 'estimasi_spl' => 'Estimasi Biaya Pengganti Baru SPL (Rp)', + // 'penyusutan' => 'Penyusutan Fisik Banguna', + + // 'a' => 'a. rincian ttipe bangunan (MAPPI)', + // 'b' => 'b. umur ekonomis (MAPPI)', + // 'c' => 'c. estimasi Tahun tahun visual dengan mempertimbangkan renovasi', + // 'd' => 'd. Sehingga sisa umur efektif', + // 'e' => 'e. kondisi bagunan', + // 'f' => 'f.sehinggan penyusutan fisik', + // 'penyusutan_fungsi' => 'Penyusutan fungsi Bangunan (%)', + // 'penyusutan_ekonomi' => 'Penyusutan Ekonomi Bangunan (%)', + // 'total_penyusutan' => 'Total Penyusutan (%)', + // 'estimasi_nilai' => 'Estimasi Nilai Bangunan dan SPL (Rp)', + // 'estimasi_tanah' => 'Estimasi Nilai Tanah Pembanding (Rp)', + // 'estimasi_nilai' => 'Estimasi Nilai Tanah Pembanding (Rp)', + // ]; + + // foreach ($filedEstimasi as $key => $label) { + // $rows[] = [ + // $nostimasi++, + // $label, + // $this->data['estimasi'][$key] ?? '', + // $this->data['estimasi1'][$key] ?? '', + // $this->data['estimasi2'][$key] ?? '', + // $this->data['estimasi3'][$key] ?? '' + + // ]; + // } - ]; - } - public function registerEvents(): array - { - return [ - AfterSheet::class => function (AfterSheet $event) { - // Styling untuk header utama + // $row[] = ['']; + // $row[] = ['']; + // $rows[] = ['INDIKASI NILAI TANAHATAS OBJEK PENILAIAN']; + + // $indikasi=[ + // 'luas_tanah' => 'Luas Tanah ', + // 'indikasi_per' => 'INDIKASI TANAH PER M2 (RP/M2)', + // 'indikasi_total' => 'INDIKASI TANAH TOTAL(RP)', + // 'varian' => 'VARIANT(%)', + // ]; + + // foreach ($indikasi as $key => $label) { + // $rows[] = [ + // $label, + // $this->data['indikasi'][$key] ?? '', + // ]; + // } - // Styling untuk setiap section header - $sectionRows = [10, 34, 56, 46, 52]; // Sesuaikan dengan posisi setiap section - foreach ($sectionRows as $row) { - $event->sheet->getStyle("A{$row}:F{$row}")->getFill() - ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) - ->getStartColor()->setRGB('E2EFDA'); - } + // // C. Peta Lokasi + // $rows[] = ['']; + // $rows[] = ['']; + // $rows[] = ['C. Peta Lokasi']; + // $rows[] = [$this->data['foto_objek']['foto_objek_peta'] ?? '']; - // Merge cells untuk headers - $event->sheet->mergeCells('A1:E1'); - $event->sheet->mergeCells('A2:E2'); - $event->sheet->mergeCells('A4:E4'); - $event->sheet->mergeCells('A5:E5'); - $event->sheet->mergeCells('A6:E6'); - $event->sheet->mergeCells('A7:E7'); - $event->sheet->mergeCells('A8:E8'); + // // D. Foto Objek dan Data Pembanding + // $rows[] = ['']; + // $rows[] = ['D. Foto Objek dan Data Pembanding']; + // $rows[] = [ + // $this->data['foto_objek1']['foto_objek'] ?? '', + // $this->data['foto_objek2']['foto_objek'] ?? '', + // '', '', '' + // ]; - // Alignment - $event->sheet->getStyle('A1:E8')->getAlignment() - ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT); - } - ]; - } - public function columnWidths(): array - { - return [ - 'A' => 5, - 'B' => 30, - 'C' => 30, - 'D' => 30, - 'E' => 30, - 'F' => 30, - ]; - } + // // E. Foto Objek + // $rows[] = ['']; + // $rows[] = ['E. Foto Objek']; + // $rows[] = [ + // $this->data['foto']['foto_objek'] ?? '', + // $this->data['foto']['foto_objek'] ?? '', + // '', '', '' + // ]; - public function styles(Worksheet $sheet) - { - return [ - // Style for the main header + // return collect($rows); + // } - // Style for section headers - 10 => ['font' => ['bold' => true]], // A. Informasi Umum - 34 => ['font' => ['bold' => true]], // B. Estimasi Nilai Tanah - 35 => ['font' => ['bold' => true]], // C. Peta Lokasi - 57 => ['font' => ['bold' => true]], // D. Foto Objek dan Pembanding - 60 => ['font' => ['bold' => true]], // E. Foto Objek - - // Default styling for columns - 'A:J' => [ - 'alignment' => ['horizontal' => 'left', 'vertical' => 'center'], - 'wrapText' => true, - ], - - // Style for other sections (like photo and map sections) - - // Style for the other headers - 'A11:F11' => [ - 'font' => ['bold' => true], - 'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'E2EFDA']], - 'borders' => [ - 'allBorders' => [ - 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN - ] - ] - ], - 'A12:F31' => [ - 'borders' => [ - 'allBorders' => [ - 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN - ] - ] - ], + // public function headings(): array + // { + // return [ + // ['KERTAS KERJA PENILAIAN'], + // ['Pendekatan Pasar'], + // ['Metode Perbandingan Data Pasar'], + // ['Tanggal Penilaian: ' . ($this->headerInfo['tanggal_penilaian'] ?? '')], + // ['Nama Pemilik Aset: ' . ($this->headerInfo['nama_pemilik'] ?? '')], + // ['Nama Pemberi Tugas: ' . ($this->headerInfo['nama_pemberi_tugas'] ?? '')], + // ['Lokasi: ' . ($this->headerInfo['lokasi_lengkap'] ?? '')], + // ['Nama Debitur: ' . ($this->headerInfo['nama_debitur'] ?? '')], + // [''], + // ['A. INFORMASI UMUM'], + // ['No.','Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3'] - 'A35:F35' => [ - 'font' => ['bold' => true], - 'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'E2EFDA']], - 'borders' => [ - 'allBorders' => [ - 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN - ] - ] - ], - 'A35:F49' => [ - 'borders' => [ - 'allBorders' => [ - 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN - ] - ] - ], + // ]; + // } + // public function registerEvents(): array + // { + // return [ + // AfterSheet::class => function (AfterSheet $event) { + // // Styling untuk header utama - // end header - ]; - } + + // // Styling untuk setiap section header + // $sectionRows = [10, 34, 56, 46, 52]; // Sesuaikan dengan posisi setiap section + // foreach ($sectionRows as $row) { + // $event->sheet->getStyle("A{$row}:F{$row}")->getFill() + // ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) + // ->getStartColor()->setRGB('E2EFDA'); + // } + + // // Merge cells untuk headers + // $event->sheet->mergeCells('A1:E1'); + // $event->sheet->mergeCells('A2:E2'); + // $event->sheet->mergeCells('A4:E4'); + // $event->sheet->mergeCells('A5:E5'); + // $event->sheet->mergeCells('A6:E6'); + // $event->sheet->mergeCells('A7:E7'); + // $event->sheet->mergeCells('A8:E8'); + + // // Alignment + // $event->sheet->getStyle('A1:E8')->getAlignment() + // ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT); + // } + // ]; + // } + // public function columnWidths(): array + // { + // return [ + // 'A' => 5, + // 'B' => 30, + // 'C' => 30, + // 'D' => 30, + // 'E' => 30, + // 'F' => 30, + // ]; + // } + + // public function styles(Worksheet $sheet) + // { + // return [ + // // Style for the main header + + // // Style for section headers + // 10 => ['font' => ['bold' => true]], // A. Informasi Umum + // 34 => ['font' => ['bold' => true]], // B. Estimasi Nilai Tanah + // 35 => ['font' => ['bold' => true]], // C. Peta Lokasi + // 57 => ['font' => ['bold' => true]], // D. Foto Objek dan Pembanding + // 60 => ['font' => ['bold' => true]], // E. Foto Objek + + // // Default styling for columns + // 'A:J' => [ + // 'alignment' => ['horizontal' => 'left', 'vertical' => 'center'], + // 'wrapText' => true, + // ], + + // // Style for other sections (like photo and map sections) + + // // Style for the other headers + // 'A11:F11' => [ + // 'font' => ['bold' => true], + // 'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'E2EFDA']], + // 'borders' => [ + // 'allBorders' => [ + // 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + // ] + // ] + // ], + // 'A12:F31' => [ + // 'borders' => [ + // 'allBorders' => [ + // 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + // ] + // ] + // ], + + + // 'A35:F35' => [ + // 'font' => ['bold' => true], + // 'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'E2EFDA']], + // 'borders' => [ + // 'allBorders' => [ + // 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + // ] + // ] + // ], + // 'A35:F49' => [ + // 'borders' => [ + // 'allBorders' => [ + // 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + // ] + // ] + // ], + + // // end header + // ]; + // } } diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 11f5b8c..4583dcd 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -192,19 +192,24 @@ class PenilaiController extends Controller ]); } - public function kertas_kerja($id, $jeniJaminan) + public function kertas_kerja($id, $jaminanId) { $data = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); - $headerInfo = [ - 'tanggal_penilaian' => '', - 'nama_pemilik' => '', - 'nama_pemberi_tugas' => '', - 'lokasi_lengkap' => '', - 'nama_debitur' => '' - ]; + // $data = null; + // $headerInfo = [ + // 'tanggal_penilaian' => '', + // 'nama_pemilik' => '', + // 'nama_pemberi_tugas' => '', + // 'lokasi_lengkap' => '', + // 'nama_debitur' => '' + // ]; - return Excel::download(new KertasKerjaExport($data, $headerInfo), 'kertas-kerja.xlsx'); + // $datas = json_decode($data->data_pembanding); + // return response()->json(['data' =>$datas ]); + + return view('lpj::component.kertas-kerja'); + // return Excel::download(new KertasKerjaExport($data), 'kertas-kerja.xlsx'); } diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index f20ee1e..200e871 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -164,7 +164,6 @@ class SurveyorController extends Controller return response()->json([ 'success' => true, 'message' => 'Data berhasil disimpan', - 'data' => $processedData ], 200); } catch (\Exception $e) { @@ -178,67 +177,86 @@ class SurveyorController extends Controller private function getActionSpecificRules($data, $action, $request): array { - $pisah = explode(',', $action); - - $allRules = [ - 'tanah' => $this->getTanahData($data, $request), - 'bangunan' => $this->getBangunanData($data, $request), - 'kapal' => $this->getKapalData($data, $request), - 'kendaraan' => $this->getKendaraanData($data, $request), - 'mesin' => $this->getMesinData($data, $request), - 'pesawat' => $this->getPesawatData($data, $request), - 'alat-berat' => $this->getAlatBeratData($data, $request), - 'apartemen-kantor' => $this->getUnitData($data, $request), - 'lingkungan' => $this->getLingkunganData($data, $request), - 'fakta' => $this->getFactData($data, $request), + $allowedActions = [ + 'apartemen-kantor' => 'getUnitData', + 'tanah' => 'getTanahData', + 'bangunan' => 'getBangunanData', + 'kapal' => 'getKapalData', + 'kendaraan' => 'getKendaraanData', + 'mesin' => 'getMesinData', + 'pesawat' => 'getPesawatData', + 'alat-berat' => 'getAlatBeratData', + 'lingkungan' => 'getLingkunganData', + 'fakta' => 'getFactData' ]; - + $rules = []; $hasAssetDescriptionRules = false; - + + $pisah = array_filter( + explode(',', $action), + function($act) use ($allowedActions) { + return isset($allowedActions[trim($act)]); + } + ); + foreach ($pisah as $act) { - if (isset($allRules[$act])) { - $rules = array_merge($rules, $allRules[$act]); - if ($act == 'tanah' || $act == 'bangunan' || $act == 'apartemen-kantor') { - $hasAssetDescriptionRules = true; - } + $act = trim($act); + $method = $allowedActions[$act]; + + $actionRules = $this->$method($data, $request); + $rules = array_merge($rules, $actionRules); + + if (in_array($act, ['apartemen-kantor', 'tanah', 'bangunan'])) { + $hasAssetDescriptionRules = true; } } - + if ($hasAssetDescriptionRules) { $rules = array_merge($rules, $this->getAssetData($data)); } - + return $rules; } - + public function storeDenah(Request $request) { try { $maxSize = getMaxFileSize('Foto'); - $validatedData = $request->validate([ - 'foto_denah' => 'required|file|mimes:jpeg,jpg,png,pdf,svg|max:'. $maxSize, + $validationRules = [ 'luas' => 'required|numeric', 'permohonan_id' => 'required', 'jenis_jaminan_id' => 'required' - ]); + ]; - $validatedData['foto_denah'] = $this->uploadFile($request->file('foto_denah'), 'foto_denah'); + if ($request->hasFile('foto_denah')) { + $maxSize = getMaxFileSize('Foto'); + $validationRules['foto_denah'] = 'file|mimes:jpeg,jpg,png,pdf,svg|max:'. $maxSize; + } + + $validatedData = $request->validate($validationRules); $formatJsonDenah = [ - 'foto_denah' => $validatedData['foto_denah'], 'luas' => $validatedData['luas'], ]; + if ($request->hasFile('foto_denah')) { + $formatJsonDenah['foto_denah'] = $this->uploadFile($request->file('foto_denah'), 'foto_denah'); + } + $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) ->first(); if ($inspeksi) { + $existingDenah = json_decode($inspeksi->denah_form, true) ?? []; + + $updatedDenah = array_merge($existingDenah, $formatJsonDenah); + $inspeksi->update([ - 'denah_form' => json_encode($formatJsonDenah) + 'denah_form' => json_encode($updatedDenah) ]); } else { Inspeksi::create([ @@ -1660,7 +1678,7 @@ class SurveyorController extends Controller true ), 'hadap_mata_angin' => [ - $data['hadap_mata_angin'] => ($data['hadap_mata_angin'] == 'sesuai') ? $data['hadap_mata_angin_sesuai'] : $data['hadap_mata_angin_tidak_sesuai'] + $data['hadap_mata_angin'] => $data['hadap_mata_angin'] == 'sesuai' ? $data['hadap_mata_angin_sesuai'] : $data['hadap_mata_angin_tidak_sesuai'] ?? null ], 'bentuk_tanah' => $this->getFieldData( $data, diff --git a/database/seeders/KJPPSeeder.php b/database/seeders/KJPPSeeder.php index a32e1a7..b8adebd 100644 --- a/database/seeders/KJPPSeeder.php +++ b/database/seeders/KJPPSeeder.php @@ -66,16 +66,16 @@ class KJPPSeeder extends Seeder $jenisUsaha = $this->checkJenisUsaha($row[18]); $jenisAsset = $this->checkJenisAsset($row[19]); - $detail_email_kantor = $this->checkDanJadikanJson($row[8]); - $nama_pic_reviewer = $this->checkDanJadikanJson($row[11]); - $nomor_hp_pic_reviewer = $this->checkDanJadikanJson($row[12]); - $detail_nama_pic_admin = $this->checkDanJadikanJson($row[13]); + $detail_email_kantor = $this->checkDanJadikanJson($row[9]); + $nama_pic_reviewer = $this->checkDanJadikanJson($row[12]); + $nomor_hp_pic_reviewer = $this->checkDanJadikanJson($row[13]); + $detail_nama_pic_admin = $this->checkDanJadikanJson($row[14]); - $nomor_hp_pic_admin = $this->checkDanJadikanJson($row[14]); - $nama_pic_marketing = $this->checkDanJadikanJson($row[15]); + $nomor_hp_pic_admin = $this->checkDanJadikanJson($row[15]); + $nama_pic_marketing = $this->checkDanJadikanJson($row[16]); - $nomor_hp_pic_marketing = $this->checkDanJadikanJson($row[16]); + $nomor_hp_pic_marketing = $this->checkDanJadikanJson($row[17]); try { @@ -91,23 +91,23 @@ class KJPPSeeder extends Seeder 'address' => $row[7], 'postal_code' => $locationData['postal_code'], 'nomor_telepon_kantor' => $row[8], - 'email_kantor' => $detail_email_kantor, - 'detail_email_kantor' => $detail_email_kantor, - 'nama_pimpinan' => $row[9], - 'nomor_hp_pimpinan' => $row[10], - 'nama_pic_reviewer' => $nama_pic_reviewer, - 'detail_nama_pic_reviewer' => $nama_pic_reviewer, - 'nomor_hp_pic_reviewer' => $nomor_hp_pic_reviewer, - 'detail_nomor_hp_pic_reviewer' => $nomor_hp_pic_reviewer, + 'email_kantor' => $detail_email_kantor[0], + 'detail_email_kantor' => json_encode($detail_email_kantor), + 'nama_pimpinan' => $row[10], + 'nomor_hp_pimpinan' => $row[11], + 'nama_pic_reviewer' => $nama_pic_reviewer[0], + 'detail_nama_pic_reviewer' => json_encode($nama_pic_reviewer), + 'nomor_hp_pic_reviewer' => $nomor_hp_pic_reviewer[0], + 'detail_nomor_hp_pic_reviewer' => json_encode($nomor_hp_pic_reviewer), - 'nama_pic_admin' => $detail_nama_pic_admin, - 'detail_nama_pic_admin' => $detail_nama_pic_admin, - 'nomor_hp_pic_admin' => $nomor_hp_pic_admin, - 'detail_nomor_hp_pic_admin' => $nomor_hp_pic_admin, - 'nama_pic_marketing' => $nama_pic_marketing, - 'detail_nama_pic_marketing' => $nama_pic_marketing, + 'nama_pic_admin' => $detail_nama_pic_admin[0], + 'detail_nama_pic_admin' => json_encode($detail_nama_pic_admin), + 'nomor_hp_pic_admin' => $nomor_hp_pic_admin[0], + 'detail_nomor_hp_pic_admin' => json_encode($nomor_hp_pic_admin), + 'nama_pic_marketing' => $nama_pic_marketing[0], + 'detail_nama_pic_marketing' => json_encode($nama_pic_marketing), 'nomor_hp_pic_marketing' => $nomor_hp_pic_marketing[0], - 'detail_nomor_hp_pic_marketing' => $nomor_hp_pic_marketing, + 'detail_nomor_hp_pic_marketing' => json_encode($nomor_hp_pic_marketing), 'ijin_usaha_id' => json_encode($jenisUsaha), 'jenis_aset_id' => json_encode($jenisAsset), 'attachment' => null, @@ -137,181 +137,186 @@ class KJPPSeeder extends Seeder } private function generateKJPPCode() -{ - do { - $code = 'K' . str_pad(rand(1, 99999), 5, '0', STR_PAD_LEFT); - } while (KJPP::where('code', $code)->exists()); + { + do { + $code = 'K' . str_pad(rand(1, 99999), 5, '0', STR_PAD_LEFT); + } while (KJPP::where('code', $code)->exists()); - return $code; -} - -public function checkKota($data) -{ - try { - $city = null; - if ($data) { - // Bersihkan data dan ubah ke uppercase - $cleanData = trim(strtoupper($data)); - - $possibleNames = [ - 'KAB. ' . $cleanData, - 'KOTA ' . $cleanData, - 'KAB. ADM. ' . $cleanData, - 'KOTA ADM. ' . $cleanData, - $cleanData - ]; - - $city = City::whereIn(DB::raw('UPPER(name)'), $possibleNames)->first(); - - if ($city) { - // Cari district berdasarkan city_code - $district = District::where('city_code', $city->code)->first(); - if (!$district) { - return null; - } - - $village = Village::where('district_code', $district->code)->first(); - if (!$village) { - - return null; - } - return [ - 'province' => $city->province_code, - 'city' => $city->code, - 'district' => $district->code, - 'village' => $village->code, - 'postal_code' => $village->postal_code - ]; - } else{ - return null; - } - } - - return null; - - } catch (\Exception $e) { - $this->command->error(" ❌ Error: " . $e->getMessage()); - return null; + return $code; } -} -public function checkJenisAsset($data) -{ - try { - if (!$data) return []; + public function checkKota($data) + { + try { + $city = null; + if ($data) { + // Bersihkan data dan ubah ke uppercase + $cleanData = trim(strtoupper($data)); - // Bersihkan dan ubah ke lowercase - $cleanData = trim(strtolower($data)); + $possibleNames = [ + 'KAB. ' . $cleanData, + 'KOTA ' . $cleanData, + 'KAB. ADM. ' . $cleanData, + 'KOTA ADM. ' . $cleanData, + $cleanData + ]; - // Pisahkan berdasarkan koma, titik koma, dan spasi - $assets = preg_split('/[;,]+|\\s+/', $cleanData); + $city = City::whereIn(DB::raw('UPPER(name)'), $possibleNames)->first(); - // Daftar asset yang valid di database - $validAssets = JenisJaminan::pluck('code')->toArray(); - $assetIds = []; + if ($city) { + // Cari district berdasarkan city_code + $district = District::where('city_code', $city->code)->first(); + if (!$district) { + return null; + } - foreach ($assets as $asset) { - // Hapus spasi di awal dan akhir - $asset = trim($asset); + $village = Village::where('district_code', $district->code)->first(); + if (!$village) { - // Cek jika ada tanda kurung - if (preg_match('/\((.*?)\)/', $asset, $matches)) { - // Ambil isi dalam tanda kurung dan pisahkan - $insideParentheses = explode(',', $matches[1]); - foreach ($insideParentheses as $insideAsset) { - $insideAsset = trim($insideAsset); - // Cari di database - $jenisAsset = JenisJaminan::whereRaw('LOWER(name) = ?', [$insideAsset])->first(); - if ($jenisAsset && in_array($jenisAsset->code, $validAssets)) { - $assetIds[] = $jenisAsset->code; + return null; + } + return [ + 'province' => $city->province_code, + 'city' => $city->code, + 'district' => $district->code, + 'village' => $village->code, + 'postal_code' => $village->postal_code + ]; + } else { + return null; + } + } + + return null; + + } catch (\Exception $e) { + $this->command->error(" ❌ Error: " . $e->getMessage()); + return null; + } + } + + public function checkJenisAsset($data) + { + try { + if (!$data) { + return []; + } + + // Bersihkan dan ubah ke lowercase + $cleanData = trim(strtolower($data)); + + // Pisahkan berdasarkan koma, titik koma, dan spasi + $assets = preg_split('/[;,]+|\\s+/', $cleanData); + + // Daftar asset yang valid di database + $validAssets = JenisJaminan::pluck('code')->toArray(); + $assetIds = []; + + foreach ($assets as $asset) { + // Hapus spasi di awal dan akhir + $asset = trim($asset); + + // Cek jika ada tanda kurung + if (preg_match('/\((.*?)\)/', $asset, $matches)) { + // Ambil isi dalam tanda kurung dan pisahkan + $insideParentheses = explode(',', $matches[1]); + foreach ($insideParentheses as $insideAsset) { + $insideAsset = trim($insideAsset); + // Cari di database + $jenisAsset = JenisJaminan::whereRaw('LOWER(name) = ?', [$insideAsset])->first(); + if ($jenisAsset && in_array($jenisAsset->code, $validAssets)) { + $assetIds[] = $jenisAsset->code; + } } } + + // Cek jenis aset utama (tanpa tanda kurung) + $jenisAsset = JenisJaminan::whereRaw('LOWER(name) = ?', [$asset])->first(); + if ($jenisAsset && in_array($jenisAsset->code, $validAssets)) { + $assetIds[] = $jenisAsset->code; + + } } - // Cek jenis aset utama (tanpa tanda kurung) - $jenisAsset = JenisJaminan::whereRaw('LOWER(name) = ?', [$asset])->first(); - if ($jenisAsset && in_array($jenisAsset->code, $validAssets)) { - $assetIds[] = $jenisAsset->code; + // Menghilangkan duplikat jika ada + $assetIds = array_unique($assetIds); - } + // Sort array untuk konsistensi + sort($assetIds); + + return $assetIds; + + } catch (\Exception $e) { + $this->command->error(" ❌ Error pada checkJenisAsset: " . $e->getMessage()); + return []; } - - // Menghilangkan duplikat jika ada - $assetIds = array_unique($assetIds); - - // Sort array untuk konsistensi - sort($assetIds); - - return $assetIds; - - } catch (\Exception $e) { - $this->command->error(" ❌ Error pada checkJenisAsset: " . $e->getMessage()); - return []; } -} -public function checkJenisUsaha($data) -{ - try { - if (!$data) return []; - - // Bersihkan dan ubah ke lowercase - $cleanData = trim(strtolower($data)); - - // Pisahkan berdasarkan koma, titik koma, atau garis miring - $usahas = preg_split('/[\s,;\/]+/', $cleanData); - - // Ambil daftar valid usaha dari database - $validUsaha = IjinUsaha::pluck('code')->toArray(); - $usahaIds = []; - - foreach ($usahas as $usaha) { - // Hapus spasi di awal dan akhir - $usaha = trim($usaha); - - // Cari jenis usaha di database - $jenisUsaha = IjinUsaha::whereRaw('LOWER(name) = ?', [$usaha])->first(); - - if ($jenisUsaha && in_array($jenisUsaha->code, $validUsaha)) { - $usahaIds[] = $jenisUsaha->code; + public function checkJenisUsaha($data) + { + try { + if (!$data) { + return []; } + + // Bersihkan dan ubah ke lowercase + $cleanData = trim(strtolower($data)); + + // Pisahkan berdasarkan koma, titik koma, atau garis miring + $usahas = preg_split('/[\s,;\/]+/', $cleanData); + + // Ambil daftar valid usaha dari database + $validUsaha = IjinUsaha::pluck('code')->toArray(); + $usahaIds = []; + + foreach ($usahas as $usaha) { + // Hapus spasi di awal dan akhir + $usaha = trim($usaha); + + // Cari jenis usaha di database + $jenisUsaha = IjinUsaha::whereRaw('LOWER(name) = ?', [$usaha])->first(); + + if ($jenisUsaha && in_array($jenisUsaha->code, $validUsaha)) { + $usahaIds[] = $jenisUsaha->code; + } + } + + // Menghilangkan duplikat jika ada + $usahaIds = array_unique($usahaIds); + + // Sort array untuk konsistensi + sort($usahaIds); + + return $usahaIds; + + } catch (\Exception $e) { + $this->command->error(" ❌ Error pada checkJenisUsaha: " . $e->getMessage()); + return []; } - - // Menghilangkan duplikat jika ada - $usahaIds = array_unique($usahaIds); - - // Sort array untuk konsistensi - sort($usahaIds); - - return $usahaIds; - - } catch (\Exception $e) { - $this->command->error(" ❌ Error pada checkJenisUsaha: " . $e->getMessage()); - return []; } -} -// Fungsi untuk memisahkan dan mengonversi data menjadi array JSON -function checkDanJadikanJson($input) { + // Fungsi untuk memisahkan dan mengonversi data menjadi array JSON + public function checkDanJadikanJson($input) + { + $input = trim($input); - $input = trim($input); + // Memisahkan berdasarkan "/", ";", "dan", atau baris baru ("\n") + $separatedData = preg_split('/\s*\/\s*|\s*;\s*|\s*dan\s*|\s*\n\s*/i', $input); - // memisahkan berdasarkan "/", ";", "dan", atau baris baru ("\n") - $separatedData = preg_split('/\s*\/\s*|\s*;\s*|\s*dan\s*|\s*\n\s*/i', $input); + // Membersihkan data + $cleanedData = array_map('trim', $separatedData); + // Menghapus elemen kosong + $cleanedData = array_filter($cleanedData, function ($item) { + return !empty($item); + }); - $cleanedData = array_map(function($item) { - return trim($item); - }, $separatedData); + // Kembalikan array yang sudah diurutkan ulang (indeks dimulai dari 0) + return array_values($cleanedData); + } - $cleanedData = array_filter($cleanedData, function($item) { - return !empty($item); - }); - - return json_encode(array_values($cleanedData)); -} diff --git a/resources/views/component/kertas-kerja.blade.php b/resources/views/component/kertas-kerja.blade.php new file mode 100644 index 0000000..f87fc45 --- /dev/null +++ b/resources/views/component/kertas-kerja.blade.php @@ -0,0 +1,222 @@ + + + + + + Penilaian Aset + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pendekatan PasarMetode Perbandingan Data Pasar
Tanggal Penilaian{{ $tanggal_penilaian ?? '-' }}
Nama Pemilik AsetPT ABC
Nama Pemberi TugasPT ABC
Lokasi{{ $lokasi ?? '-' }}
Nama DebiturBapak Saiful
+ + + + + + + + + + + + + + @php + $dataform = json_decode($data->data_form) ?? []; + $dataPembanding = json_decode($data->data_pembanding) ?? []; + @endphp + + @php +function getNestedValue($data, $keyPath, $default = '-') { + // Pecah path kunci menjadi array + $keys = explode('.', $keyPath); + + // Mulai dari data awal + $value = $data; + + // Telusuri setiap kunci + foreach ($keys as $key) { + // Cek apakah kunci ada di level saat ini + if (is_array($value) && array_key_exists($key, $value)) { + $value = $value[$key]; + } else { + // Jika kunci tidak ditemukan, kembalikan default + return $default; + } + } + + // Kembalikan nilai akhir atau default jika kosong + return $value ?? $default; +} + +$rows = [ + [ + 'label' => 'Jenis Aset', + 'key' => 'jenis_aset', + 'default' => 'Rumah Tinggal', + 'variants' => [ + 'sesuai' => 'Sesuai', + 'tidak sesuai' => 'Tidak Sesuai' + ] + ], + [ + 'label' => 'Luas Tanah (M²)', + 'key' => 'tanah.luas_tanah', + 'default' => '-', + 'variants' => [ + 'sesuai' => 'Sesuai', + 'tidak sesuai' => 'Tidak Sesuai' + ] + ], + [ + 'label' => 'Luas Bangunan (M²)', + 'key' => 'bangunan.luas_tanah_bangunan', + 'default' => '-', + 'variants' => [ + 'sesuai' => 'Sesuai', + 'tidak sesuai' => 'Tidak Sesuai' + ] + ] +]; +@endphp + +@foreach($rows as $index => $item) + + + + + {{-- Objek Penilaian --}} + + + {{-- Data Pembanding --}} + @for($i = 0; $i < 3; $i++) + + @endfor + +@endforeach + + + + +
No.UraianObjek PenilaianData Pembanding 1Data Pembanding 2Data Pembanding 3
{{ $index + 1 }}{{ $item['label'] }} + @php + // Coba berbagai varian kunci + $objekValue = '-'; + foreach (['sesuai', 'tidak sesuai'] as $variant) { + $fullKey = $item['key'] . '.' . $variant; + $objekValue = getNestedValue($dataform, $fullKey, $item['default']); + + // Jika nilai ditemukan, hentikan pencarian + if ($objekValue !== $item['default']) { + break; + } + } + @endphp + {{ $objekValue }} + + @php + // Coba berbagai varian kunci untuk data pembanding + $pembandingValue = '-'; + foreach (['sesuai', 'tidak sesuai'] as $variant) { + $fullKey = $item['key'] . '.' . $variant; + $pembandingValue = getNestedValue($dataPembanding[$i] ?? [], $fullKey, '-'); + + // Jika nilai ditemukan, hentikan pencarian + if ($pembandingValue !== '-') { + break; + } + } + @endphp + {{ $pembandingValue }} +
+ + diff --git a/resources/views/penilai/show.blade.php b/resources/views/penilai/show.blade.php index 4f5a6cf..8f5c6a5 100644 --- a/resources/views/penilai/show.blade.php +++ b/resources/views/penilai/show.blade.php @@ -97,176 +97,176 @@ - @foreach ($permohonan->debiture->documents as $dokumen) -
-
-
- @php - $surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first(); - $penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first(); + @foreach ($permohonan->debiture->documents as $dokumen) +
+
+
+ @php + $surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first(); + $penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first(); - @endphp - -
+ @endphp + +
-

- {{ $surveyor->userPenilaiTeam->name }} -

+

+ {{ $surveyor->userPenilaiTeam->name }} +

-

{{ $permohonan->region->name }} -

-
- -
- -

- {{ $penilai->userPenilaiTeam->name }} -

- -

- {{ $permohonan->region->name }} -

-
-
-
- -

- {{ $permohonan->tujuanPenilaian->name }}

- -

- @foreach ($permohonan->debiture->documents as $document) - {{ $document->jenisjaminan->name }} - @endforeach +

{{ $permohonan->region->name }}

-
- -
-

- {{ formatTanggalIndonesia($permohonan->created_at) }}

-
-
-
- -
-

- {{ formatTanggalIndonesia($permohonan->created_at) }}

-
-
-
- -
-

-

-
-
+ +
+

+ {{ $penilai->userPenilaiTeam->name }} +

+

+ {{ $permohonan->region->name }} +

+
+
+
+ +

+ {{ $permohonan->tujuanPenilaian->name }}

+ +

+ @foreach ($permohonan->debiture->documents as $document) + {{ $document->jenisjaminan->name }} + @endforeach +

+
+
+ +
+

+ {{ formatTanggalIndonesia($permohonan->created_at) }}

+
+
+
+ +
+

+ {{ formatTanggalIndonesia($permohonan->created_at) }}

+
+
+
+ +
+

+

+
-
- - Export Kertas Kerja + @php + $jenisJaminanId = null; + @endphp + @foreach ($permohonan->debiture->documents as $document) + @if ($document->jenisjaminan) + @php + $jenisJaminanId = $document->jenisjaminan->id; + @endphp + @endif + @endforeach + @if ($jenisJaminanId) + + Export Kertas Kerja + + @else +

Tidak ada dokumen yang memiliki jenis jaminan.

+ @endif
+
@@ -216,7 +215,15 @@ @push('scripts') +@include('lpj::surveyor.js.utils')