diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 4e8ca97..f54f9e7 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -2017,7 +2017,7 @@ class SurveyorController extends Controller private function updateDetails($permohonan, $key, $newValue) { - $document = $permohonan->debiture->documents->first(); + $document = $permohonan->documents->first(); if (!$document) { throw new \Exception("Document not found"); @@ -2031,18 +2031,18 @@ class SurveyorController extends Controller $datas = json_decode($detailsUpdate->details, true) ?? []; - if (is_numeric($newValue)) { - $newValue = [$key => $newValue]; + if (!is_scalar($newValue)) { + throw new \InvalidArgumentException("New value must be a scalar (string/number)"); } - if (!is_array($newValue)) { - throw new \InvalidArgumentException("'{$key}' must be an array or valid JSON string"); - } - - foreach ($newValue as $subKey => $value) { - $datas[$subKey] = $value; // Update atau tambahkan key baru + // Update nilai berdasarkan kunci + if (array_key_exists($key, $datas)) { + $datas[$key] = $newValue; + } else { + throw new \Exception("Key '{$key}' not found in details"); } + // Simpan kembali ke database $detailsUpdate->update([ 'details' => json_encode($datas), ]); @@ -2414,19 +2414,41 @@ class SurveyorController extends Controller ]; } + private function updateFormData(array &$dataForm, array $data, $inspeksi, string $section, string $key, string $sesuaiKey, string $tidakSesuaiKey): void + { + if (isset($dataForm[$section][$key])) { + $dataForm[$section][$key] = []; // Reset data + + if ($data[$key] == 'sesuai') { + $dataForm[$section][$key]['sesuai'] = $data[$sesuaiKey] ?? null; + } elseif ($data[$key] == 'tidak sesuai') { + $dataForm[$section][$key]['tidak sesuai'] = $data[$tidakSesuaiKey] ?? null; + } + + if ($inspeksi) { + $inspeksi->data_form = json_encode($dataForm); + $inspeksi->save(); + } + } else { + $data[$key] = $this->getFieldData($data, $key, true); + } + } private function getTanahData(array $data): array { + + $inspeksi = Inspeksi::where('permohonan_id', $data['permohonan_id'])->where('dokument_id', $data['dokument_id'])->first(); + + // Decode data_form dari inspeksi + $dataForm = $inspeksi ? json_decode($inspeksi->data_form, true) : []; + $this->updateFormData($dataForm, $data, $inspeksi, 'tanah', 'luas_tanah', 'luas_tanah_sesuai', 'luas_tanah_tidak_sesuai'); + $this->updateFormData($dataForm, $data, $inspeksi, 'tanah', 'hadap_mata_angin', 'hadap_mata_angin_sesuai', 'hadap_mata_angin_tidak_sesuai'); + // dd($dataForm); + return [ 'tanah' => [ - 'luas_tanah' => $this->getFieldData( - $data, - 'luas_tanah', - true - ), - 'hadap_mata_angin' => [ - $data['hadap_mata_angin'] => $data['hadap_mata_angin'] == 'sesuai' ? $data['hadap_mata_angin_sesuai'] : $data['hadap_mata_angin_tidak_sesuai'] ?? null - ], + 'luas_tanah' => $dataForm['tanah']['luas_tanah'] ?? $data['luas_tanah'], + 'hadap_mata_angin' => $dataForm['tanah']['hadap_mata_angin'] ?? $data['hadap_mata_angin'], 'bentuk_tanah' => $this->getFieldData( $data, 'bentuk_tanah', @@ -2499,14 +2521,16 @@ class SurveyorController extends Controller } } + $inspeksi = Inspeksi::where('permohonan_id', $data['permohonan_id'])->where('dokument_id', $data['dokument_id'])->first(); + + // Decode data_form dari inspeksi + $dataForm = $inspeksi ? json_decode($inspeksi->data_form, true) : []; + $this->updateFormData($dataForm, $data, $inspeksi, 'bangunan', 'luas_tanah_bagunan', 'luas_tanah_bagunan_sesuai', 'luas_tanah_bagunan_tidak_sesuai'); + return [ 'bangunan' => [ - 'luas_tanah_bagunan' => $this->getFieldData( - $data, - 'luas_tanah_bagunan', - true - ), + 'luas_tanah_bagunan' => $dataForm['bangunan']['luas_tanah_bagunan'] ?? $data['luas_tanah_bagunan'], 'jenis_bangunan' => $data['jenis_bangunan'] ?? null, 'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null, 'sifat_bangunan' => $data['sifat_bangunan'] ?? null, @@ -3181,6 +3205,7 @@ class SurveyorController extends Controller private function getUnitData($data, $request): array { + return [ 'action' => $data['action'] ?? null, 'luas_unit' => $this->getFieldData( @@ -3262,37 +3287,32 @@ class SurveyorController extends Controller bool $checkKesesuaian = false, ?string $extraField = null ): array { + $result = []; + if ($checkKesesuaian) { - // Mengecek apakah status kesesuaian adalah 'sesuai' $isSesuai = ($data[$fieldName] ?? '') === 'sesuai'; + $fieldKey = $isSesuai ? "{$fieldName}_sesuai" : "{$fieldName}_tidak_sesuai"; - // Menggunakan key berdasarkan status kesesuaian - $result = [ - $isSesuai ? 'sesuai' : 'tidak_sesuai' => $data[$fieldName] ?? null - ]; + // Hanya simpan key yang dipilih + if ($isSesuai) { + $result['sesuai'] = $data[$fieldKey] ?? null; + } else { + $result['tidak sesuai'] = $data[$fieldKey] ?? null; + } + } else { + $result[$fieldName] = $data[$fieldName] ?? null; - // Tambahkan field ekstra jika ada if ($extraField) { $result[$extraField] = $data["{$fieldName}_{$extraField}"] ?? null; } - - return $result; } - // Jika tidak melakukan pengecekan kesesuaian, hanya ambil data berdasarkan fieldName - $result = [ - $fieldName => $data[$fieldName] ?? null, - ]; - - // Jika ada extra field, tambahkan ke result - if ($extraField) { - $result[$extraField] = $data["{$fieldName}_{$extraField}"] ?? null; - } - - return $result; + // Hapus key dengan nilai null untuk memastikan hanya key yang valid yang disimpan + return array_filter($result, fn ($value) => $value !== null); } + public function export(string $type) { $modelClass = $this->getModelClass($type); @@ -3332,13 +3352,13 @@ class SurveyorController extends Controller ->where('dokument_id', $request->input('document_id')) ->first(); - if (!$inspeksi) { - $inspeksi = new Inspeksi(); - $inspeksi->permohonan_id = $request->input('permohonan_id'); - $inspeksi->dokument_id = $request->input('document_id'); - $inspeksi->data_form = json_encode([]); // Inisialisasi data_form kosong - $inspeksi->save(); - } + if (!$inspeksi) { + $inspeksi = new Inspeksi(); + $inspeksi->permohonan_id = $request->input('permohonan_id'); + $inspeksi->dokument_id = $request->input('document_id'); + $inspeksi->data_form = json_encode([]); // Inisialisasi data_form kosong + $inspeksi->save(); + } // Decode data form yang ada $dataForm = json_decode($inspeksi->data_form, true) ?: []; @@ -3497,40 +3517,40 @@ class SurveyorController extends Controller // Ambil data permohonan dan data umum $permohonan = $this->getPermohonanJaminanId($permohonan_id, $dokument_id, $jenis_jaminan_id); $basicData = $this->getCommonData(); - + // Ambil data inspeksi $inspeksi = Inspeksi::where('permohonan_id', $permohonan_id) ->where('dokument_id', $dokument_id) ->first(); - + if (!$inspeksi) { // Redirect jika inspeksi tidak ditemukan return redirect()->back()->with('error', 'Data inspeksi tidak ditemukan.'); } - + // Decode data form inspeksi $forminspeksi = json_decode($inspeksi->data_form, true); - + if (!$forminspeksi) { // Redirect jika data form inspeksi kosong return redirect()->back()->with('error', 'Silahkan isi terlebih dahulu form inspeksi.'); } - + // Pilih template PDF berdasarkan nama inspeksi $templateView = strtolower($inspeksi->name) === 'rap' ? 'lpj::surveyor.components.print-out.main' - : 'lpj::surveyor.components.print-out.main'; - + : 'lpj::surveyor.components.print-out.main'; + // Generate PDF $pdf = PDF::loadView($templateView, compact('permohonan', 'basicData', 'forminspeksi')); $pdf->setPaper('A4', 'portrait'); - + // Tentukan nama file PDF $namaDebiture = $permohonan->debiture->name . '-' . $permohonan->nomor_registrasi; $fileName = 'inspeksi-' . $namaDebiture . '-data.pdf'; - + return $pdf->download($fileName); } - + }