From eaffe2805f796b9fce8ff07bb170f2ca8329aa31 Mon Sep 17 00:00:00 2001 From: majid Date: Wed, 18 Dec 2024 11:05:25 +0700 Subject: [PATCH] perbaikan tampilan basic data (batas batas, saran pelengkap, dan fasilitas dekat objek) --- app/Http/Controllers/SurveyorController.php | 183 ++++++++++-------- .../surveyor/components/bangunan.blade.php | 23 +-- .../views/surveyor/components/fakta.blade.php | 32 ++- .../surveyor/components/lingkungan.blade.php | 36 ++-- 4 files changed, 141 insertions(+), 133 deletions(-) diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 445e095..da3ceb5 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -102,6 +102,7 @@ class SurveyorController extends Controller 'tujuanPenilaian', 'penilaian', 'documents.jenisJaminan', + 'documents', ])->findOrFail($id); $surveyor = $id; @@ -112,7 +113,7 @@ class SurveyorController extends Controller // Get all inspeksi data for this permohonan $inspeksiData = Inspeksi::where('permohonan_id', $id) ->get() - ->keyBy('jenis_jaminan_id') + ->keyBy('dokument_id') ->map(function ($item) { return [ 'data_form' => json_decode($item->data_form, true), @@ -153,7 +154,7 @@ class SurveyorController extends Controller $inspeksi = Inspeksi::updateOrCreate( [ 'permohonan_id' => $request->input('permohonan_id'), - 'jenis_jaminan_id' => $request->input('jenis_jaminan_id') + 'dokument_id' => $request->input('dokument_id') ], [ 'data_form' => json_encode($processedData), @@ -164,6 +165,7 @@ class SurveyorController extends Controller return response()->json([ 'success' => true, 'message' => 'Data berhasil disimpan', + 'data' => $processedData ], 200); } catch (\Exception $e) { @@ -195,7 +197,7 @@ class SurveyorController extends Controller $pisah = array_filter( explode(',', $action), - function($act) use ($allowedActions) { + function ($act) use ($allowedActions) { return isset($allowedActions[trim($act)]); } ); @@ -227,7 +229,7 @@ class SurveyorController extends Controller $validationRules = [ 'luas' => 'required|numeric', 'permohonan_id' => 'required', - 'jenis_jaminan_id' => 'required' + 'dokument_id' => 'required' ]; if ($request->hasFile('foto_denah')) { @@ -247,7 +249,7 @@ class SurveyorController extends Controller $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) + ->where('dokument_id', $request->input('dokument_id')) ->first(); if ($inspeksi) { @@ -261,7 +263,7 @@ class SurveyorController extends Controller } else { Inspeksi::create([ 'permohonan_id' => $request->input('permohonan_id'), - 'jenis_jaminan_id' => $request->input('jenis_jaminan_id'), + 'dokument_id' => $request->input('dokument_id'), 'denah_form' => json_encode($formatJsonDenah) ]); } @@ -293,7 +295,7 @@ class SurveyorController extends Controller $inspeksi = Inspeksi::firstOrNew([ 'permohonan_id' => $request->input('permohonan_id'), - 'jenis_jaminan_id' => $request->input('jenis_jaminan_id') + 'dokument_id' => $request->input('dokument_id') ]); // Get existing foto_form data if it exists @@ -398,24 +400,24 @@ class SurveyorController extends Controller $maxSize = getMaxFileSize('Foto'); return $request->validate([ 'permohonan_id' => 'required', - 'jenis_jaminan_id' => 'required', - 'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, - 'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'dokument_id' => 'required', + 'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, + 'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_objek.*' => 'required|string|max:255', - 'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_lingkungan.*' => 'required|string|max:255', - 'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_rute.*' => 'required|string|max:255', - 'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_lantai_unit.*' => 'nullable|string|max:255', - 'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_rute_lainnya.*' => 'nullable|string', - 'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, - 'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, + 'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_lantai_lainnya.*' => 'nullable|string|max:255', - 'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_basement.*' => 'nullable|string|max:255', - 'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_gerbang' => 'nullable|string|max:255', ]); } @@ -557,7 +559,7 @@ class SurveyorController extends Controller ]); $data['status'] = 'success'; - $data['message']= 'Jadwal '.$request->noReg.' berhasil di aprove'; + $data['message'] = 'Jadwal '.$request->noReg.' berhasil di aprove'; } catch (\Exception $e) { $data['status'] = 'error'; $data['message'] = 'Gagal membuat jadwal: ' . $e->getMessage(); @@ -585,9 +587,9 @@ class SurveyorController extends Controller $fotoPembanding = $request->file('foto_objek_pembanding') ?? []; $existingData = null; - if ($request->has('permohonan_id') && $request->has('jenis_jaminan_id')) { + if ($request->has('permohonan_id') && $request->has('dokument_id')) { $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) + ->where('dokument_id', $request->input('dokument_id')) ->first(); if ($inspeksi) { @@ -682,7 +684,7 @@ class SurveyorController extends Controller ]; $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) + ->where('dokument_id', $request->input('dokument_id')) ->first(); if ($inspeksi) { @@ -699,12 +701,12 @@ class SurveyorController extends Controller $dataForm = json_decode($inspeksi->data_form, true) ?: []; // Inisialisasi struktur data jika belum ada - if(!isset($dataForm['bangunan'])) { + if (!isset($dataForm['bangunan'])) { $dataForm['bangunan'] = []; $needsSave = true; } - if(!isset($dataForm['tanah'])) { + if (!isset($dataForm['tanah'])) { $dataForm['tanah'] = []; $needsSave = true; } @@ -725,13 +727,13 @@ class SurveyorController extends Controller $dataForm['tanah'][$field][$cekLuas] = $newValue; } // Fields untuk bangunan - else if (in_array($field, ['luas_tanah_bagunan'])) { + elseif (in_array($field, ['luas_tanah_bagunan'])) { $cekBanguan = $dataForm['bangunan']['luas_tanah_bagunan'] == 'sesuai' ? 'sesuai' : 'tidak sesuai'; $dataForm['bangunan'][$field][$cekBanguan] = $newValue; } // Fields untuk alamat dalam asset - else if (in_array($field, ['address', 'village_code', 'district_code', 'city_code', 'province_code'])) { + elseif (in_array($field, ['address', 'village_code', 'district_code', 'city_code', 'province_code'])) { if (!isset($dataForm['asset']['alamat'])) { $dataForm['asset']['alamat'] = []; @@ -745,7 +747,7 @@ class SurveyorController extends Controller $dataForm['asset']['alamat'][$alamatStatus][$field] = $newValue; } // Jenis asset dalam asset - else if ($field === 'jenis_asset') { + elseif ($field === 'jenis_asset') { $assetStatus = $request->input('asset_status', 'sesuai'); $dataForm['asset']['jenis_asset'] = [ $assetStatus => $newValue @@ -809,7 +811,7 @@ class SurveyorController extends Controller $inspeksi = Inspeksi::updateOrCreate( [ 'permohonan_id' => $formattedData['permohonan_id'], - 'jenis_jaminan_id' => $formattedData['jenis_jaminan_id'] + 'dokument_id' => $formattedData['dokument_id'] ], [ 'data_pembanding' => json_encode($formattedData), @@ -828,7 +830,7 @@ class SurveyorController extends Controller $validator = $request->validate([ 'permohonan_id' => 'required|exists:permohonan,id', 'type' => 'required|string', - 'jenis_jaminan_id' => 'required', + 'dokument_id' => 'required', 'foto_objek' => 'nullable|image|max:'.$maxSize, 'foto_objek_pembanding.*' => 'nullable|image|max:'.$maxSize, ]); @@ -843,7 +845,7 @@ class SurveyorController extends Controller // Update foto_form $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) + ->where('dokument_id', $request->input('dokument_id')) ->first(); if ($inspeksi) { @@ -868,7 +870,7 @@ class SurveyorController extends Controller $formattedData = [ 'permohonan_id' => $request->input('permohonan_id'), 'type' => $request->input('type'), - 'jenis_jaminan_id' => $request->input('jenis_jaminan_id'), + 'dokument_id' => $request->input('dokument_id'), 'objek_penilaian' => $objekPenilaian, 'data_pembanding' => $this->formatDataPembanding($request) ]; @@ -899,9 +901,21 @@ class SurveyorController extends Controller * Form inspeksi. */ - public function formInspeksi($id, $jaminanId) + public function formInspeksi(Request $request, $id) { - $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + + $validated = $request->validate([ + 'form' => 'required|in:create-inspeksi', + 'inspeksi' => 'required|exists:permohonan,id', + 'dokument' => 'required', + 'jenisjaminan' => 'required' + ]); + + $dokumentId = $validated['dokument']; + $jaminanId = $validated['jenisjaminan']; + + $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); + $link_url_region = Teams::with('regions', 'teamsUsers') ->whereHas('teamsUsers', function ($query) { $query->where('user_id', Auth::user()->id); @@ -915,7 +929,7 @@ class SurveyorController extends Controller $surveyor = $id; $basicData = $this->getCommonData(); - $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); + $inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first(); $forminspeksi = null; if ($inpeksi) { $forminspeksi = json_decode($inpeksi->data_form, true); @@ -962,13 +976,23 @@ class SurveyorController extends Controller * Denah. */ - public function denah($id, $jaminanId) + public function denah(Request $request, $id) { - $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + $validated = $request->validate([ + 'form' => 'required|in:create-denah', + 'denah' => 'required|exists:permohonan,id', + 'dokument' => 'required', + 'jenisjaminan' => 'required' + ]); + + $dokumentId = $validated['dokument']; + $jaminanId = $validated['jenisjaminan']; + + $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); $denah = null; - $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); + $inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first(); $formDenah = null; if ($inpeksi) { $formDenah = json_decode($inpeksi->denah_form, true); @@ -982,14 +1006,25 @@ class SurveyorController extends Controller * Foto. */ - public function foto($id, $jaminanId) + public function foto(Request $request, $id) { - $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + $validated = $request->validate([ + 'form' => 'required|in:create-foto', + 'foto' => 'required|exists:permohonan,id', + 'dokument' => 'required', + 'jenisjaminan' => 'required' + ]); + + $dokumentId = $validated['dokument']; + $jaminanId = $validated['jenisjaminan']; + + $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); + $surveyor = $id; $branches = Branch::all(); $provinces = Province::all(); - $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); + $inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first(); $formFoto = null; if ($inpeksi) { @@ -1003,25 +1038,28 @@ class SurveyorController extends Controller * Data pembanding. */ - public function dataPembanding($id, $jaminanId) + public function dataPembanding(Request $request, $id) { try { // Ambil data permohonan dengan eager loading - $permohonan = Permohonan::with([ - 'user', - 'debiture.province', - 'debiture.city', - 'debiture.district', - 'debiture.village', - 'branch', - 'tujuanPenilaian', - 'penilaian' - ])->findOrFail($id); + + $validated = $request->validate([ + 'form' => 'required|in:data-pembanding', + 'pembanding' => 'required|exists:permohonan,id', + 'dokument' => 'required', + 'jenisjaminan' => 'required' + ]); + + $dokumentId = $validated['dokument']; + $jaminanId = $validated['jenisjaminan']; + + $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); + // Ambil data inspeksi $inspeksi = Inspeksi::where([ 'permohonan_id' => $id, - 'jenis_jaminan_id' => $jaminanId + 'dokument_id' => $dokumentId ])->first(); // Inisialisasi variabel @@ -1496,7 +1534,7 @@ class SurveyorController extends Controller } - private function getPermohonanJaminanId($id, $jaminanId) + public function getPermohonanJaminanId($id, $dokumentId, $jaminanId) { return Permohonan::with([ 'user', @@ -1507,15 +1545,11 @@ class SurveyorController extends Controller 'branch', 'tujuanPenilaian', 'penilaian', - 'debiture.documents.jenisJaminan', - 'debiture.documents' => function ($query) use ($jaminanId) { - $query->where('jenis_jaminan_id', $jaminanId); + 'debiture.documents' => function ($query) use ($dokumentId, $jaminanId) { + $query->where('id', $dokumentId) + ->where('jenis_jaminan_id', $jaminanId); } - ]) - ->whereHas('debiture.documents', function ($query) use ($jaminanId) { - $query->where('jenis_jaminan_id', $jaminanId); - }) - ->findOrFail($id); + ])->findOrFail($id); } @@ -1763,10 +1797,8 @@ class SurveyorController extends Controller 'sifat_bangunan' => $data['sifat_bangunan'] ?? null, 'sifat_bangunan_input' => $data['sifat_bangunan_input'] ?? null, 'spesifikasi_bangunan' => $result ?? null, - 'sarana_pelengkap' => $this->mapArrayWithInputs( - $data['sarana_pelengkap'] ?? [], - $data['sarana_pelengkap_input'] ?? [] - ), + 'sarana_pelengkap' => $data['sarana_pelengkap'] ?? null, + 'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null, ], ]; } @@ -1808,10 +1840,8 @@ class SurveyorController extends Controller 'jarak_tps' => $data['jarak_tps'] ?? null, 'nama_tps' => $data['nama_tps'] ?? null, 'merupakan_daerah' => $data['merupakan_daerah'] ?? null, - 'fasilitas_dekat_object' => $this->mapArrayWithInputs( - $data['fasilitas_dekat_object'] ?? [], - $data['fasilitas_dekat_object_input'] ?? [] - ), + 'fasilitas_dekat_object' => $data['fasilitas_dekat_object'] ?? null, + 'fasilitas_dekat_object_input' => $data['fasilitas_dekat_object_input'] ?? null, ] ]; } @@ -1823,10 +1853,8 @@ class SurveyorController extends Controller 'fakta_positif' => $data['fakta_positif'] ?? null, 'fakta_negatif' => $data['fakta_negatif'] ?? null, 'rute_menuju' => $data['rute_menuju'] ?? null, - 'batas_batas' => $this->mapArrayWithInputs( - $data['batas_batas'] ?? [], - $data['batas_batas_input'] ?? [] - ), + 'batas_batas' => $data['batas_batas'] ?? null, + 'batas_batas_input' => $data['batas_batas_input'] ?? null, 'kondisi_lingkungan' => $data['kondisi_lingkungan'] ?? null, 'kondisi_lain_bangunan' => $data['kondisi_lain_bangunan'] ?? null, 'informasi_dokument' => $data['informasi_dokument'] ?? null, @@ -1844,7 +1872,7 @@ class SurveyorController extends Controller ]; - $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first(); + $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('dokument_id', $request->input('dokument_id'))->first(); $fotoTypes = [ @@ -2306,8 +2334,10 @@ class SurveyorController extends Controller { $result = []; - foreach ($keys as $index => $key) { - $result[$key] = $values[$index] ?? null; + foreach ($keys as $key) { + // Jika checkbox dicentang, ambil nilai input yang sesuai + // Gunakan nilai dari $values berdasarkan nama checkbox + $result[$key] = $values[$key] ?? null; } return $result; @@ -2315,6 +2345,7 @@ class SurveyorController extends Controller + /** * Helper method generic untuk mengambil data field * diff --git a/resources/views/surveyor/components/bangunan.blade.php b/resources/views/surveyor/components/bangunan.blade.php index 6102d4f..501737a 100644 --- a/resources/views/surveyor/components/bangunan.blade.php +++ b/resources/views/surveyor/components/bangunan.blade.php @@ -258,33 +258,21 @@
- +
@if (isset($basicData['saranaPelengkap'])) @foreach ($basicData['saranaPelengkap'] as $item) - @php - $isChecked = false; - $inputValue = ''; - - if (isset($forminspeksi['bangunan']['sarana_pelengkap'])) { - foreach ($forminspeksi['bangunan']['sarana_pelengkap'] as $key => $value) { - if ($key === $item->name) { - $isChecked = true; - $inputValue = $value; - break; - } - } - } - @endphp
+ placeholder="Masukkan {{ $item->name }}..." + value="{{ old('sarana_pelengkap_input.' . $loop->index, $forminspeksi['bangunan']['sarana_pelengkap_input'][$loop->index] ?? '') }}">
@endforeach @endif @@ -293,6 +281,7 @@
+
diff --git a/resources/views/surveyor/components/fakta.blade.php b/resources/views/surveyor/components/fakta.blade.php index eff1fc9..5e4bb68 100644 --- a/resources/views/surveyor/components/fakta.blade.php +++ b/resources/views/surveyor/components/fakta.blade.php @@ -16,9 +16,9 @@
+ style="display: none;"> + +
@endforeach @else @@ -77,24 +77,20 @@
- +
@if (isset($basicData['arahMataAngin'])) @foreach ($basicData['arahMataAngin'] as $item) @php - $isChecked = false; - $inputValue = ''; - - if (isset($forminspeksi['fakta']['batas_batas'])) { - foreach ($forminspeksi['fakta']['batas_batas'] as $key => $value) { - if ($key === $item->name) { - $isChecked = true; - $inputValue = $value; - break; - } - } - } + $isChecked = in_array( + $item->name, + old('batas_batas', $forminspeksi['fakta']['batas_batas'] ?? []), + ); + $inputValue = old( + 'batas_batas_input.' . $item->name, + $forminspeksi['fakta']['batas_batas_input'][$item->name] ?? '', + ); @endphp
-
@endforeach diff --git a/resources/views/surveyor/components/lingkungan.blade.php b/resources/views/surveyor/components/lingkungan.blade.php index e320a50..f66e4fe 100644 --- a/resources/views/surveyor/components/lingkungan.blade.php +++ b/resources/views/surveyor/components/lingkungan.blade.php @@ -369,35 +369,27 @@ @if (isset($basicData['fasilitasObjek'])) @foreach ($basicData['fasilitasObjek'] as $item) @php - $isChecked = false; - $inputValue = ''; - - // Cek old input terlebih dahulu - if (old('fasilitas_dekat_object') && in_array($item->name, old('fasilitas_dekat_object'))) { - $isChecked = true; - $oldInputIndex = array_search($item->name, old('fasilitas_dekat_object')); - $inputValue = old('fasilitas_dekat_object_input')[$oldInputIndex] ?? ''; - } - elseif (isset($forminspeksi['lingkungan']['fasilitas_dekat_object'])) { - foreach ($forminspeksi['lingkungan']['fasilitas_dekat_object'] as $key => $value) { - if ($key === $item->name) { - $isChecked = true; - $inputValue = $value; - break; - } - } - } + $isChecked = in_array( + $item->name, + old( + 'fasilitas_dekat_object', + $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? [], + ), + ); + $inputValue = old( + 'fasilitas_dekat_object_input.' . $item->name, + $forminspeksi['lingkungan']['fasilitas_dekat_object_input'][$item->name] ?? '', + ); @endphp
-
@endforeach