diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 59c585a..3890597 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -226,61 +226,73 @@ class SurveyorController extends Controller public function storeDenah(Request $request) { - try { - $maxSize = getMaxFileSize('Foto'); - $validationRules = [ - 'luas' => 'required|numeric', - 'permohonan_id' => 'required', - 'dokument_id' => 'required' - ]; + $validator = $request->validate([ + 'foto_denah.*' => 'nullable|file|mimes:jpg,jpeg,png,bmp,gif,webp,pdf', + 'nama_denah.*' => 'nullable|string|max:255', + 'luas_denah.*' => 'nullable|numeric', + 'permohonan_id' => 'required|exists:permohonan,id', + 'dokument_id' => 'required' + ]); + if ($validator) { + try { - if ($request->hasFile('foto_denah')) { - $maxSize = getMaxFileSize('Foto'); - $validationRules['foto_denah'] = 'file|mimes:jpeg,jpg,png,pdf,svg|max:'. $maxSize; - } + $denahs = []; - $validatedData = $request->validate($validationRules); + $inspeksi = Inspeksi::where('permohonan_id', $request->permohonan_id) + ->where('dokument_id', $request->dokument_id) + ->first(); - $formatJsonDenah = [ - 'luas' => $validatedData['luas'], - ]; + $existingDenah = $inspeksi ? json_decode($inspeksi->denah_form ?? '[]', true) : []; + $existingDenahs = $existingDenah['denahs'] ?? []; - if ($request->hasFile('foto_denah')) { - $formatJsonDenah['foto_denah'] = $this->uploadFile($request->file('foto_denah'), 'foto_denah'); - } + if ($request->has('nama_denah')) { + foreach ($request->nama_denah as $index => $namaDenah) { + $denahItem = [ + 'nama_denah' => $namaDenah, + 'luas_denah' => $request->luas_denah[$index] ?? null + ]; + if ($request->hasFile('foto_denah') && isset($request->file('foto_denah')[$index])) { + $file = $request->file('foto_denah')[$index]; + $denahItem['foto_denah'] = $this->uploadFile($file, 'foto_denah'); + } elseif (isset($existingDenahs[$index]['foto_denah'])) { + $denahItem['foto_denah'] = $existingDenahs[$index]['foto_denah']; + } - $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('dokument_id', $request->input('dokument_id')) - ->first(); + $denahs[] = $denahItem; + } + } - if ($inspeksi) { - $existingDenah = json_decode($inspeksi->denah_form, true) ?? []; + if (empty($denahs) && !empty($existingDenahs)) { + $denahs = $existingDenahs; + } - $updatedDenah = array_merge($existingDenah, $formatJsonDenah); - - $inspeksi->update([ - 'denah_form' => json_encode($updatedDenah) + $inspeksi = Inspeksi::firstOrNew([ + 'permohonan_id' => $request->permohonan_id, + 'dokument_id' => $request->dokument_id ]); - } else { - Inspeksi::create([ - 'permohonan_id' => $request->input('permohonan_id'), - 'dokument_id' => $request->input('dokument_id'), - 'denah_form' => json_encode($formatJsonDenah) - ]); - } - return response()->json([ - 'success' => true, - 'message' => 'Data berhasil disimpan', - 'data' => $formatJsonDenah - ], 200); - } catch (Exception $e) { - return response()->json(['success' => false, 'message' => 'Data gagal disimpan: ' . $e->getMessage()], 500); + // Update denah_form + $updatedDenah = ['denahs' => $denahs]; + $inspeksi->denah_form = json_encode($updatedDenah); + $inspeksi->save(); + + return response()->json([ + 'success' => true, + 'message' => 'Data berhasil disimpan', + 'data' => $updatedDenah + ], 200); + + } catch (\Exception $e) { + \Log::error('Denah Store Error: ' . $e->getMessage()); + return response()->json([ + 'success' => false, + 'message' => 'Gagal menyimpan data: ' . $e->getMessage() + ], 500); + } } } - public function storeFoto(Request $request) { $validatedData = $this->validateFotoRequest($request); @@ -291,7 +303,7 @@ class SurveyorController extends Controller 'foto_lingkungan', ]; - $lainnya =[ + $lainnya = [ 'foto_rute_lainnya' => ['foto_rute_lainnya', 'name_rute_lainnya'], 'foto_lantai_lainnya' => ['foto_lantai_lainnya', 'name_lantai_lainnya'] ]; diff --git a/resources/views/surveyor/components/denah.blade.php b/resources/views/surveyor/components/denah.blade.php index 30a478a..4de6c1e 100644 --- a/resources/views/surveyor/components/denah.blade.php +++ b/resources/views/surveyor/components/denah.blade.php @@ -17,174 +17,290 @@ @include('lpj::assetsku.includenya')
-
-
-

- Denah -

- -
-
- @include('lpj::component.detail-jaminan', ['status' => true]) +
+

Denah

+
+
+ @include('lpj::component.detail-jaminan', ['status' => true]) +
- -
- -
- @if (isset($debitur->id)) - - @method('PUT') - @endif + @csrf - -
-
-
-
- -
- -
- - Gambar foto_denah - - @if (isset($formDenah['foto_denah']) && strpos($formDenah['foto_denah'], '.pdf') !== false) -
- + + +
+ @if (isset($formDenah['denahs']) && is_array($formDenah['denahs']) && count($formDenah['denahs']) > 0) + @foreach ($formDenah['denahs'] as $index => $denah) +
+
+
+ +
+ +
+ @if (isset($denah['foto_denah'])) + @php + $fileExtension = pathinfo( + $denah['foto_denah'], + PATHINFO_EXTENSION, + ); + @endphp + + @if (in_array($fileExtension, ['jpg', 'jpeg', 'png'])) + + @elseif($fileExtension === 'pdf') + + @endif + @endif
- @endif -
-
- +
+ +
+
+
+
+ +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ @if ($index > 0) +
+ +
+ @endif +
+
+ @endforeach + @else + +
+ +
+
+ +
+
+ +
+ +
+ +
+
+
+
+ +
+
+
+
+ + +
+
+
+
+
+
+ + +
- -
- + @endif
-
-
-
-
- - - -
- -
- - - -
-
+
- - @endsection - @push('scripts') -@include('lpj::surveyor.js.utils') + @include('lpj::surveyor.js.utils') - -@include('lpj::surveyor.js.utils') @endpush diff --git a/resources/views/surveyor/js/utils.blade.php b/resources/views/surveyor/js/utils.blade.php index 2d6563f..5b6449d 100644 --- a/resources/views/surveyor/js/utils.blade.php +++ b/resources/views/surveyor/js/utils.blade.php @@ -63,17 +63,7 @@ - function previewImage(input, previewId) { - if (input.files && input.files[0]) { - var reader = new FileReader(); - reader.onload = function(e) { - $('#' + previewId).attr('src', e.target.result).show(); - } - reader.readAsDataURL(input.files[0]); - } else { - $('#' + previewId).hide(); - } - } + function addClonableItem(containerId, itemClass) { const container = document.getElementById(containerId);