diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 35c11e0..137b986 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -167,6 +167,23 @@ class SurveyorController extends Controller public function store(Request $request) { $validatedData = $request->all(); + + $fotoTypes = [ + 'foto_gistaru', + 'foto_bhumi', + 'foto_argis_region', + 'foto_tempat', + 'foto_sentuh_tanahku', + 'upload_gs' + ]; + + // Hapus data foto dari $validatedData + foreach ($fotoTypes as $fotoType) { + if (isset($validatedData[$fotoType])) { + unset($validatedData[$fotoType]); + } + } + $result = $this->inspeksiService->storeInspeksi($validatedData, $request->input('type'), $request); if ($result['success']) { @@ -2028,9 +2045,9 @@ class SurveyorController extends Controller public function dataForDatatables(Request $request) { - if (is_null($this->user) || !$this->user->can('debitur.view')) { - // abort(403, 'Sorry! You are not allowed to view users.'); - } + // if (is_null($this->user) || !$this->user->can('debitur.view')) { + // abort(403, 'Sorry! You are not allowed to view users.'); + // } $query = Permohonan::query(); $query = $query->orderBy('nomor_registrasi', 'desc'); @@ -2099,7 +2116,7 @@ class SurveyorController extends Controller public function dataForDatatablesData(Request $request, $type) { - if (is_null($this->user) || !$this->user->can('jenis_aset.view')) { + if (is_null(auth()->user()) || !$this->user->can('jenis_aset.view')) { //abort(403, 'Sorry! You are not allowed to view users.'); } @@ -2818,4 +2835,73 @@ class SurveyorController extends Controller ], 500); } } + + public function uploadFileFoto(Request $request, $url) + { + + // dd($request->all()); + $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) + ->where('dokument_id', $request->input('dokument_id')) + ->first(); + + $fotoTypes = [ + 'foto_gistaru', + 'foto_bhumi', + 'foto_argis_region', + 'foto_tempat', + 'foto_sentuh_tanahku', + 'upload_gs' + ]; + + if (!in_array($url, $fotoTypes)) { + return response()->json([ + 'success' => false, + 'message' => 'Invalid key for upload' + ], 400); + } + + + $existingData = $inspeksi ? json_decode($inspeksi->data_form, true) : []; + $existingData = $existingData ?? []; + + + $factData = $existingData; + if ($request->hasFile('file')) { + $file = $request->file('file'); + $filePath = $file->store('uploads', 'public'); + $uploadedPath = str_replace('public/', '', $filePath); + + + $factData[$url] = $uploadedPath; + + + $existingData = $factData; + if ($inspeksi) { + $inspeksi->data_form = json_encode($existingData); + $inspeksi->save(); + } else { + Inspeksi::create([ + 'permohonan_id' => $request->input('permohonan_id'), + 'dokument_id' => $request->input('document_id'), + 'data_form' => json_encode($existingData), + ]); + } + } else { + return response()->json([ + 'success' => false, + 'message' => 'No file uploaded for the given key' + ], 400); + } + + return response()->json([ + 'success' => true, + 'message' => 'Berhasil upload file foto', + 'data' => [ + 'key' => $url, + 'path' => $factData[$url] ?? null + ] + ]); + } + + } diff --git a/app/Services/SaveFormInspesksiService.php b/app/Services/SaveFormInspesksiService.php index aebbf1b..cc88461 100644 --- a/app/Services/SaveFormInspesksiService.php +++ b/app/Services/SaveFormInspesksiService.php @@ -10,44 +10,50 @@ class SaveFormInspesksiService public function storeInspeksi(array $validatedData, string $type, Request $request) { try { - $processedData = $this->getActionSpecificRules($validatedData, $type, $request); - - $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('dokument_id', $request->input('dokument_id')) - ->first(); - - if ($inspeksi) { - // Jika data sudah ada, merge dengan data yang baru - $existingData = json_decode($inspeksi->data_form, true) ?: []; - - if (isset($existingData['signature']) && !isset($processedData['signature'])) { - $processedData['signature'] = $existingData['signature']; - } - - $mergedData = $this->arrayMergeRecursive($existingData, $processedData); - - // Update record - $inspeksi->update([ - 'data_form' => json_encode($mergedData), - 'name' => $request->input('type') - ]); - - $responseData = $mergedData; - } else { - // Jika belum ada data, buat record baru - $inspeksi = Inspeksi::create([ + $inspeksi = Inspeksi::firstOrNew( + [ 'permohonan_id' => $request->input('permohonan_id'), - 'dokument_id' => $request->input('dokument_id'), - 'data_form' => json_encode($processedData), - 'name' => $request->input('type') - ]); + 'dokument_id' => $request->input('dokument_id') + ] + ); - $responseData = $processedData; + $inspeksi->name = $request->input('type'); + + $processedData = $this->getActionSpecificRules($validatedData, $type, $request, $inspeksi); + + // Merge data lama dengan data baru + $existingData = json_decode($inspeksi->data_form, true) ?: []; + + $fotoTypes = [ + 'foto_gistaru', + 'foto_bhumi', + 'foto_argis_region', + 'foto_tempat', + 'foto_sentuh_tanahku', + 'upload_gs' + ]; + + foreach ($fotoTypes as $fotoType) { + if (isset($existingData[$fotoType])) { + $processedData[$fotoType] = $existingData[$fotoType]; + } } + + $mergedData = $this->arrayMergeRecursive($existingData, $processedData); + + if (isset($existingData['signature']) && !isset($processedData['signature'])) { + $mergedData['signature'] = $existingData['signature']; + } + + $inspeksi->data_form = json_encode($mergedData); + $inspeksi->save(); + return [ 'success' => true, 'message' => 'Data berhasil disimpan', ]; + + } catch (\Exception $e) { return [ 'success' => false, @@ -58,7 +64,7 @@ class SaveFormInspesksiService } - private function getActionSpecificRules($data, $action, $request): array + private function getActionSpecificRules($data, $action, $request, $inspeksi): array { $allowedActions = [ 'apartemen-kantor' => 'getUnitData', @@ -95,7 +101,7 @@ class SaveFormInspesksiService if (isset($allowedActions[$act])) { $method = $allowedActions[$act]; - $actionRules = $this->$method($data, $request); + $actionRules = $this->$method($data, $request, $inspeksi); $rules = array_merge($rules, $actionRules); // Cek apakah act memerlukan asset description rules @@ -374,7 +380,7 @@ class SaveFormInspesksiService } - private function getFactData($data, $request): array + private function getFactData($data, $request, $inspeksi): array { $factData = [ 'fakta' => [ @@ -400,44 +406,16 @@ class SaveFormInspesksiService ]; - $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('dokument_id', $request->input('dokument_id'))->first(); - $fotoTypes = [ - 'foto_gistaru', - 'foto_bhumi', - 'foto_argis_region', - 'foto_tempat', - 'foto_sentuh_tanahku', - 'upload_gs' - ]; - if ($inspeksi) { - $dataForm = json_decode($inspeksi->data_form, true); - foreach ($fotoTypes as $fotoType) { - // Jika ada file baru diupload - if ($request->hasFile($fotoType)) { - $factData[$fotoType] = $this->updateOrDeleteFile($dataForm, $request, $fotoType) ?: null; - } else { - $factData[$fotoType] = $dataForm[$fotoType] ?? null; - } - } - } else { - foreach ($fotoTypes as $fotoType) { - $factData[$fotoType] = $this->updateOrDeleteFile($data, $request, $fotoType) ?: null; - } - } return $factData; } - private function getRapData($data, $request): array + private function getRapData($data, $request, $inspeksi): array { - $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('dokument_id', $request->input('dokument_id')) - ->first(); - $dataForm = json_decode($inspeksi->data_form, true); $perizinanData = isset($dataForm['perizinan']) ? $dataForm['perizinan'] : []; @@ -966,14 +944,14 @@ class SaveFormInspesksiService ]; } - private function arrayMergeRecursive($arr1, $arr2) + private function arrayMergeRecursive(array $arr1, array $arr2): array { foreach ($arr2 as $key => $value) { if ($key === 'signature' && isset($arr1['signature'])) { - // Jika key adalah signature, gabungkan secara spesifik - $arr1['signature'] = array_merge($arr1['signature'], $value); + // Gabungkan 'signature' secara spesifik + $arr1['signature'] = array_merge_recursive((array) $arr1['signature'], (array) $value); } elseif (is_array($value) && isset($arr1[$key]) && is_array($arr1[$key])) { - // Rekursif untuk key lainnya + // Rekursif untuk elemen array $arr1[$key] = $this->arrayMergeRecursive($arr1[$key], $value); } else { // Ganti nilai lama dengan nilai baru @@ -981,12 +959,8 @@ class SaveFormInspesksiService } } - // Bersihkan key lama yang tidak ada di array baru - foreach ($arr1 as $key => $value) { - if (!array_key_exists($key, $arr2) && $key !== 'signature') { - unset($arr1[$key]); - } - } + // Hapus key lama yang tidak ada di array baru kecuali 'signature' + $arr1 = array_intersect_key($arr1, $arr2 + ['signature' => true]); return $arr1; } @@ -1010,7 +984,7 @@ class SaveFormInspesksiService throw new Exception("Invalid file upload for {$fileKey}"); } } elseif (isset($data[$fileKey]) && $data[$fileKey]) { - return $data[$fileKey]; + return $data[$fileKey] ?? null; } else { return null; } diff --git a/resources/views/surveyor/components/informasi.blade.php b/resources/views/surveyor/components/informasi.blade.php index fecaeb1..5a7c563 100644 --- a/resources/views/surveyor/components/informasi.blade.php +++ b/resources/views/surveyor/components/informasi.blade.php @@ -125,7 +125,7 @@ + onchange="uploadFile(this, 'upload-gs-preview', 'upload_gs')"> + onchange="uploadFile(this, 'sentuh_tanahku-preview', 'foto_sentuh_tanahku')" + > + onchange="uploadFile(this, 'gistaru-preview', 'foto_gistaru')"> + onchange="uploadFile(this, 'bhumi-preview', 'foto_bhumi')"> Foto Bhumi -
- -
- -
- - Foto Argis Region -
- < -
-
- - - -
- -
+
+
- - + +
+ + Foto Argis Region +
+ <
- @php - $fotoTempat = $forminspeksi['foto_tempat'] ?? null; - $fotoSrc = ''; - - if (is_array($fotoTempat)) { - $fotoSrc = asset('storage/' . $fotoTempat[0]); - } elseif (!empty($fotoTempat)) { - $fotoSrc = asset('storage/' . $fotoTempat); - } - @endphp - - Foto Tempat -
-
+ - +
+ +
+
+ + +
+ @php + $fotoTempat = $forminspeksi['foto_tempat'] ?? null; + $fotoSrc = ''; -
+ if (is_array($fotoTempat)) { + $fotoSrc = asset('storage/' . $fotoTempat[0]); + } elseif (!empty($fotoTempat)) { + $fotoSrc = asset('storage/' . $fotoTempat); + } + @endphp - -
-
- @if (!empty($forminspeksi['fakta']['keterangan']) && is_array($forminspeksi['fakta']['keterangan'])) - @foreach ($forminspeksi['fakta']['keterangan'] as $index => $item) + Foto Tempat + +
+
+ + + +
+ + +
+
+ @if (!empty($forminspeksi['fakta']['keterangan']) && is_array($forminspeksi['fakta']['keterangan'])) + @foreach ($forminspeksi['fakta']['keterangan'] as $index => $item) +
+ + +
+ @endforeach + @else
- + +
- @endforeach - @else -
- - - -
- @endif + @endif +
+
-
-
-@include('lpj::surveyor.components.modal-kamera') + @include('lpj::surveyor.components.modal-kamera') -@push('scripts') - @include('lpj::surveyor.js.camera-editor') -@endpush + @push('scripts') + + @include('lpj::surveyor.js.camera-editor') + @endpush diff --git a/resources/views/surveyor/components/inspeksi.blade.php b/resources/views/surveyor/components/inspeksi.blade.php index 488bdab..ddc0603 100644 --- a/resources/views/surveyor/components/inspeksi.blade.php +++ b/resources/views/surveyor/components/inspeksi.blade.php @@ -517,6 +517,19 @@ showLoadingSwal('Mengirim data ke server...'); const form = document.querySelector('form'); const formData = new FormData(form); + + const fotoFields = [ + 'foto_gistaru', + 'foto_bhumi', + 'foto_argis_region', + 'foto_tempat', + 'foto_sentuh_tanahku', + 'upload_gs' + ]; + + fotoFields.forEach((field) => { + formData.delete(field); + }); $.ajax({ url: '{{ route('surveyor.store') }}', type: 'POST', diff --git a/routes/web.php b/routes/web.php index c654288..a61c4c2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -599,6 +599,8 @@ Route::middleware(['auth'])->group(function () { Route::put('store-proses-survey/{id}', [SurveyorController::class, 'storeProsesSurvey'])->name('storeProsesSurvey'); Route::post('save-edited-image/', [SurveyorController::class, 'saveEditedImage'])->name('saveEditedImage'); + Route::post('upload-file-foto/{url}', [SurveyorController::class, 'uploadFileFoto'])->name('uploadFileFoto'); + }); Route::name('penilai.')->prefix('penilai')->group(function () {