diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 6766f7a..3baf1aa 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -25,6 +25,7 @@ use Modules\Location\Models\District; use Modules\Location\Models\Village; use Modules\Lpj\Models\PosisiKavling; use Modules\Lpj\Models\KondisiFisikTanah; +use Modules\Lpj\Models\FotoObjekJaminan; use Modules\Lpj\Models\KetinggianTanah; use Modules\Lpj\Models\SifatBangunan; use Modules\Lpj\Models\JenisJaminan; @@ -284,16 +285,18 @@ class SurveyorController extends Controller { $validatedData = $this->validateFotoRequest($request); try { - + $log = []; $photoCategories = [ - 'rute_menuju_lokasi' => ['foto_rute', 'name_rute'], - 'object_jaminan' => ['foto_objek', 'name_objek', 'deskripsi_objek'], - 'lingkungan' => ['foto_lingkungan', 'name_lingkungan'], - 'foto_lantai_unit' => ['foto_lantai_unit', 'name_lantai_unit'], - 'foto_lantai_lainnya' => ['foto_lantai_lainnya', 'name_lantai_lainnya'], - 'foto_rute_lainnya' => ['foto_rute_lainnya', 'name_rute_lainnya'], + 'rute_menuju_lokasi', + 'foto_lingkungan', ]; + $lainnya =[ + 'foto_rute_lainnya' => ['foto_rute_lainnya', 'name_rute_lainnya'], + 'foto_lantai_lainnya' => ['foto_lantai_lainnya', 'name_lantai_lainnya'] + ]; + + $inspeksi = Inspeksi::firstOrNew([ 'permohonan_id' => $request->input('permohonan_id'), 'dokument_id' => $request->input('dokument_id') @@ -306,37 +309,62 @@ class SurveyorController extends Controller $formatFotojson = $existingData; - if ($request->has('foto_lantai_unit')) { - $formatFotojson['foto_lantai_unit'] = $this->processFotoLantaiUnit($request); + if ($request->hasFile('foto_objek')) { + $existingObjekJaminan = $formatFotojson['object_jaminan'] ?? []; + $formatFotojson['object_jaminan'] = $this->processObjekJaminanPhotos( + $request, + $existingObjekJaminan + ); } - foreach ($photoCategories as $category => $fields) { + if ($request->has('foto_lantai_unit')) { + $existingLantaiUnit = $formatFotojson['foto_lantai_unit'] ?? []; + $newLantaiUnit = $this->processFotoLantaiUnit($request); + + foreach ($newLantaiUnit as $key => $newFiles) { + $existingLantaiUnit[$key] = array_merge($existingLantaiUnit[$key] ?? [], $newFiles); + } + + $formatFotojson['foto_lantai_unit'] = $existingLantaiUnit; + $log['foto_lantai_unit'] = $formatFotojson['foto_lantai_unit']; + } + + foreach ($photoCategories as $key) { + if ($request->has($key)) { + $newPhotos = $this->processPhotoCategories($request, $key); + $existingPhotos = $formatFotojson[$key] ?? []; + $formatFotojson[$key] = array_merge($existingPhotos, $newPhotos); + $log[$key] = $formatFotojson[$key]; + } + } + + foreach ($lainnya as $category => $fields) { $photoField = $fields[0]; $nameField = $fields[1]; $descriptionField = $fields[2] ?? null; if ($request->hasFile($photoField)) { - $newPhotos = $this->processPhotoCategory( + $newPhotos = $this->processPhotoLainnya( $request, $fields, - $existingData[$category] ?? [], - $category // Pass category to the function + $existingData[$category] ?? [] ); $formatFotojson[$category] = $newPhotos; } } - - // Process single files $singleFiles = ['foto_basement', 'foto_gerbang', 'pendamping']; foreach ($singleFiles as $file) { if ($request->hasFile($file)) { - // Delete old file if exists - if (isset($existingData[$file])) { - $this->deleteFile($existingData[$file]); + // Hapus file lama jika ada + if (isset($formatFotojson[$file])) { + $this->deleteOfFile($formatFotojson[$file]); } + + // Upload dan simpan file baru $formatFotojson[$file] = $this->uploadFile($request->file($file), $file); + } } @@ -344,7 +372,7 @@ class SurveyorController extends Controller $inspeksi->foto_form = json_encode($formatFotojson); $inspeksi->save(); - return response()->json(['success' => true, 'message' => 'Data berhasil disimpan', 'data' => $formatFotojson], 200); + return response()->json(['success' => true, 'message' => 'Data berhasil disimpan', 'data' => $formatFotojson, 'log' => $log ], 200); } catch (Exception $e) { return response()->json(['success' => false, 'message' => 'Failed to upload: ' . $e->getMessage()], 500); } @@ -353,19 +381,134 @@ class SurveyorController extends Controller /** * Process a photo category and its subcategories */ - private function processPhotoCategory(Request $request, array $fields, array $existingPhotos = [], $category = null) + private function processPhotoCategories(Request $request, string $categoryKey) + { + $processedPhotos = []; + $categoryPhotos = $request->file($categoryKey, []); + if (is_array($categoryPhotos)) { + $categoryPhotos = array_merge(...array_values($categoryPhotos)); + } + $namePrefix = str_replace('_', ' ', $categoryKey); + + foreach ($categoryPhotos as $index => $file) { + // Validate the file + if (!$file instanceof \Illuminate\Http\UploadedFile || !$file->isValid()) { + continue; + } + + // Generate a unique filename for the photo + $filename = $this->generateUniqueFileName($file, "{$categoryKey}_{$index}"); + + if (isset($processedPhotos[$categoryKey])) { + $processedPhotos[$categoryKey][0][] = [ + 'path' => $this->uploadFile($file, $filename), + 'name' => ucfirst($namePrefix) . ' - ' . ($index + 1), + ]; + } else { + $processedPhotos[$categoryKey] = [ + [ + [ + 'path' => $this->uploadFile($file, $filename), + 'name' => ucfirst($namePrefix) . ' - ' . ($index + 1), + ] + ] + ]; + } + } + + return $processedPhotos; + } + + private function processObjekJaminanPhotos(Request $request, array $existingPhotos = []) + { + $photoField = 'foto_objek'; + $nameField = 'name_objek'; + $descriptionField = 'deskripsi_objek'; + + // Mulai dengan data lama + $result = $existingPhotos; + + if ($request->hasFile($photoField)) { + $newFiles = $request->file($photoField, []); + $newNames = $request->input($nameField, []); + $newDescriptions = $request->input($descriptionField, []); + + foreach ($newFiles as $key => $file) { + // Cari atau buat entri berdasarkan nama objek + $existingIndex = $this->findObjekJaminanIndexByName($result, $newNames[$key]); + + // Buat entri baru untuk file yang diunggah + $newPhotoEntry = [ + $nameField => $newNames[$key], + $photoField => $this->uploadFile($file, $photoField . '.' . $key), + $descriptionField => $newDescriptions[$key] ?? '', + ]; + + // Jika sudah ada, update; jika belum, tambahkan + if ($existingIndex !== false) { + // Hapus file lama jika ada + if (isset($result[$existingIndex][$photoField])) { + $this->deleteOfFile($result[$existingIndex][$photoField]); + } + $result[$existingIndex] = $newPhotoEntry; + } else { + $result[] = $newPhotoEntry; + } + } + } + + // Pastikan array tetap terurut dengan benar + return array_values($result); + } + + /** + * Cari index objek jaminan berdasarkan nama objek + */ + private function findObjekJaminanIndexByName(array $existingPhotos, string $name) + { + foreach ($existingPhotos as $index => $photo) { + if (isset($photo['name_objek']) && $photo['name_objek'] === $name) { + return $index; + } + } + return false; + } + + private function processFotoLantaiUnit(Request $request) + { + $processedFotoLantaiUnit = []; + $fotoLantaiUnit = $request->file('foto_lantai_unit', []); + + foreach ($fotoLantaiUnit as $lantaiKey => $files) { + $processedFiles = []; + + foreach ($files as $index => $file) { + if (!$file || !$file->isValid()) { + continue; + } + + $filename = $this->generateUniqueFileName($file, "lantai_unit_{$lantaiKey}_{$index}"); + $processedFiles[] = [ + 'path' => $this->uploadFile($file, $filename), + 'name' => "Foto Lantai {$lantaiKey} - " . ($index + 1), + ]; + } + + if (!empty($processedFiles)) { + $processedFotoLantaiUnit[$lantaiKey] = $processedFiles; + } + } + + return $processedFotoLantaiUnit; + } + + private function processPhotoLainnya(Request $request, array $fields, array $existingPhotos = []) { $result = $existingPhotos; // Start with existing photos $photoField = $fields[0]; $nameField = $fields[1]; $descriptionField = $fields[2] ?? null; - if ($category === 'object_jaminan') { - // If it's 'object_jaminan', do not overwrite existing photos, just add new ones - $existingPhotos = $existingPhotos ?: []; - $result = $existingPhotos; - } - if ($request->hasFile($photoField)) { $newFiles = $request->file($photoField, []); $newNames = $request->input($nameField, []); @@ -375,7 +518,7 @@ class SurveyorController extends Controller foreach ($newFiles as $key => $file) { // Create new photo entry $newPhotoEntry = [ - $nameField => $newNames[$key] ?? '', + $nameField => $newNames[$key] ?? '', // Use new name if provided $photoField => $this->uploadFile($file, $photoField . '.' . $key) ]; @@ -392,70 +535,12 @@ class SurveyorController extends Controller return $result; } - - public function replaceFotoLantaiUnit(Request $request) - { - // Pastikan foto lantai unit ada dalam request - if ($request->has('foto_lantai_unit')) { - $fotoLantaiUnit = $request->file('foto_lantai_unit', []); - - // Target lantai dan foto yang ingin diubah - $lantaiKey = $request->input('lantai_key'); // Misal: 1 - $indexToReplace = $request->input('index'); // Misal: 0 - - // Cek jika lantaiKey ada dan file yang akan diganti ada - if (isset($fotoLantaiUnit[$lantaiKey]) && isset($fotoLantaiUnit[$lantaiKey][$indexToReplace])) { - $file = $fotoLantaiUnit[$lantaiKey][$indexToReplace]; - - // Pastikan file valid - if ($file && $file->isValid()) { - // Generate filename baru untuk foto yang diganti - $filename = $this->generateUniqueFileName($file, "lantai_unit_{$lantaiKey}_{$indexToReplace}"); - - // Gantikan foto yang lama dengan yang baru - $processedFoto = [ - 'path' => $this->uploadFile($file, $filename . '.' . $file->getClientOriginalExtension()), - 'name' => "Foto Lantai {$lantaiKey} - " . ($indexToReplace + 1), - ]; - - // Update foto lantai unit yang sudah diproses - $fotoLantaiUnit[$lantaiKey][$indexToReplace] = $processedFoto; - } - } - } - - // Kembalikan data foto lantai unit yang sudah diperbarui - return response()->json(['foto_lantai_unit' => $fotoLantaiUnit]); - } - - - // Fungsi helper untuk generate nama file unik private function generateUniqueFileName($file, $prefix = '') { $extension = $file->getClientOriginalExtension(); return $prefix . '_' . uniqid() . '.' . $extension; } - private function categoryHasNewFiles(Request $request, array $fields): bool - { - $photoField = $fields[0]; // First element is usually the photo field - return $request->hasFile($photoField) || - (is_array($request->file($photoField)) && count($request->file($photoField)) > 0); - } - - private function deleteFilesForCategory($categoryData) - { - if (!is_array($categoryData)) { - return; - } - - foreach ($categoryData as $item) { - if (isset($item['foto'])) { - $this->deleteOfFile($item['foto']); - } - } - } - private function deleteOfFile($filePath) { if ($filePath && Storage::exists($filePath)) { @@ -475,7 +560,7 @@ class SurveyorController extends Controller '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,webp,bmp,tiff,heic,heif|max:'. $maxSize, + 'name_lingkungan.*' => 'required|string|max:255', 'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_rute.*' => 'required|string|max:255', @@ -492,8 +577,7 @@ class SurveyorController extends Controller 'name_lantai_unit' => 'array', - 'foto_lantai_unit' => 'array', - 'foto_lantai_unit.*' => 'array', + ]); } @@ -1113,6 +1197,7 @@ class SurveyorController extends Controller $dokumentId = $validated['dokument']; $jaminanId = $validated['jenisjaminan']; + $fotoObjekJaminan = FotoObjekJaminan::all(); $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); @@ -1127,7 +1212,7 @@ class SurveyorController extends Controller $formFoto = json_decode($inpeksi->foto_form, true); } $fotoJaminan = null; - return view('lpj::surveyor.components.foto', compact('permohonan', 'surveyor', 'branches', 'provinces', 'fotoJaminan', 'formFoto')); + return view('lpj::surveyor.components.foto', compact('permohonan', 'surveyor', 'branches', 'provinces', 'fotoJaminan', 'formFoto', 'fotoObjekJaminan')); } /** @@ -1312,6 +1397,7 @@ class SurveyorController extends Controller 'posisi-unit' => ['Posisi unit', 'posisi-unit', PosisiUnit::class], 'bentuk-unit' => ['Bentuk unit', 'bentuk-unit', BentukUnit::class], 'fasilitas-objek' => ['Fasilitas Umum Dekat Objek', 'fasilitas-objek', FasilitasObjek::class], + 'foto-objek-jaminan' => ['Foto Objek Jaminan', 'foto-objek-jaminan', FotoObjekJaminan::class], ]; @@ -1344,6 +1430,10 @@ class SurveyorController extends Controller $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; } + if ($type == 'foto-objek-jaminan') { + $validate['kategori'] = $request->kategori; + } + // Check if the provided type exists in the modelClasses if (!$modelClass) { return redirect() @@ -1552,6 +1642,7 @@ class SurveyorController extends Controller 'Fasilitas Umum Dekat Objek' => FasilitasObjek::class, 'Merupakan Daerah' => MerupakanDaerah::class, 'Jenis unit' => JenisUnit::class, + 'Foto Objek Jaminan' => FotoObjekJaminan::class, ]; @@ -1695,6 +1786,7 @@ class SurveyorController extends Controller 'merupakan-daerah' => MerupakanDaerah::class, 'jenis-unit' => JenisUnit::class, 'perkerasan-jalan' => PerkerasanJalan::class, + 'foto-objek-jaminan' => FotoObjekJaminan::class ]; @@ -1770,6 +1862,7 @@ class SurveyorController extends Controller 'posisi-unit' => ['Posisi unit', 'posisi-unit'], 'bentuk-unit' => ['Bentuk unit', 'bentuk-unit'], 'fasilitas-objek' => ['Fasilitas Umum Dekat Objek', 'fasilitas-objek'], + 'foto-objek-jaminan' => ['Foto Objek Jaminan', 'foto-objek-jaminan'], ]; private function getAssetData(array $data): array diff --git a/app/Http/Requests/SurveyorRequest.php b/app/Http/Requests/SurveyorRequest.php index ec41731..f3cc205 100644 --- a/app/Http/Requests/SurveyorRequest.php +++ b/app/Http/Requests/SurveyorRequest.php @@ -38,6 +38,7 @@ class SurveyorRequest extends FormRequest 'bentuk-unit' => 'bentuk_unit', 'fasilitas-objek' => 'fasilitas_objek', 'perkerasan-jalan' => 'perkerasan_jalan', + 'foto-objek-jaminan' => 'foto_objek_jaminan', ]; /** diff --git a/app/Models/FotoObjekJaminan.php b/app/Models/FotoObjekJaminan.php new file mode 100644 index 0000000..c344373 --- /dev/null +++ b/app/Models/FotoObjekJaminan.php @@ -0,0 +1,24 @@ +id(); + $table->string('code'); + $table->string('name'); + $table->string('kategori'); + $table->timestamps(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('foto_objek_jaminan'); + } +}; diff --git a/database/seeders/FotoObjekJaminanSeeder.php b/database/seeders/FotoObjekJaminanSeeder.php new file mode 100644 index 0000000..7b01560 --- /dev/null +++ b/database/seeders/FotoObjekJaminanSeeder.php @@ -0,0 +1,86 @@ + [ + ['name' => 'Tampak Depan Objek', 'kategori' => 'tanah'], + ['name' => 'Tampak Samping Kiri', 'kategori' => 'tanah'], + ['name' => 'Tampak Samping Kanan', 'kategori' => 'tanah'], + ['name' => 'Nomor Rumah/Unit', 'kategori' => 'tanah'], + ], + 'apartemen-kantor' => [ + ['name' => 'Tampak Loby', 'kategori' => 'apartemen-kantor'], + ['name' => 'Tampak Lift', 'kategori' => 'apartemen-kantor'], + ['name' => 'Tampak Samping Kiri Unit', 'kategori' => 'apartemen-kantor'], + ['name' => 'Tampak Samping Kanan Unit', 'kategori' => 'apartemen-kantor'], + ['name' => 'Tampak Depan Unit', 'kategori' => 'apartemen-kantor'], + ['name' => 'Nomor Unit', 'kategori' => 'apartemen-kantor'], + ], + 'kendaraan' => [ + ['name' => 'Tampak Depan Objek', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Kanan Objek', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Samping Kiri Objek', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Belakang Objek', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Bagian Dalam', 'kategori' => 'kendaraan'], + ['name' => 'Nomor Panel Instrument', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Odometer', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Aksesoris Tambahan', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Nomor Rangka', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Nomor Mesin', 'kategori' => 'kendaraan'], + ['name' => 'Tampak Penilai dan Pendamping di lapangan', 'kategori' => 'kendaraan'], + ], + 'kapal' => [ + ['name' => 'Tampak Depan', 'kategori' => 'kapal'], + ['name' => 'Tampak Kanan', 'kategori' => 'kapal'], + ['name' => 'Tampak Samping Kiri', 'kategori' => 'kapal'], + ['name' => 'Tampak Belakang', 'kategori' => 'kapal'], + ['name' => 'Tampak Bagian Dalam', 'kategori' => 'kapal'], + ['name' => 'Nomor Panel Instrument', 'kategori' => 'kapal'], + ['name' => 'Tampak Hours Meters', 'kategori' => 'kapal'], + ['name' => 'Tampak Aksesoris Tambahan', 'kategori' => 'kapal'], + ['name' => 'Tampak Nomor Rangka', 'kategori' => 'kapal'], + ['name' => 'Tampak Nomor Mesin', 'kategori' => 'kapal'], + ['name' => 'Tampak Penilai dan Pendamping di lapangan', 'kategori' => 'kapal'], + ], + 'mesin' => [ + ['name' => 'Tampak Depan', 'kategori' => 'mesin'], + ['name' => 'Tampak Kanan', 'kategori' => 'mesin'], + ['name' => 'Tampak Samping Kiri', 'kategori' => 'mesin'], + ['name' => 'Tampak Belakang', 'kategori' => 'mesin'], + ['name' => 'Tampak Bagian Dalam', 'kategori' => 'mesin'], + ['name' => 'Nomor Panel Instrument', 'kategori' => 'mesin'], + ['name' => 'Tampak Hours Meters', 'kategori' => 'mesin'], + ['name' => 'Tampak Aksesoris Tambahan', 'kategori' => 'mesin'], + ['name' => 'Tampak Nomor Rangka', 'kategori' => 'mesin'], + ['name' => 'Tampak Nomor Mesin', 'kategori' => 'mesin'], + ['name' => 'Foto Tampak Aksesoris Tambahan Lainnya', 'kategori' => 'mesin'], + ['name' => 'Tampak Penilai dan Pendamping di lapangan', 'kategori' => 'mesin'], + ], + ]; + + $counter = 1; + + // Add `code` field to each item + foreach ($data as $kategori => &$items) { + foreach ($items as &$item) { + $item['code'] = 'FO' . str_pad($counter, 3, '0', STR_PAD_LEFT); + $counter++; + } + } + + foreach ($data as $kategori => $views) { + FotoObjekJaminan::insert($views); + } + } +} diff --git a/database/seeders/LpjDatabaseSeeder.php b/database/seeders/LpjDatabaseSeeder.php index 2ea3738..b226163 100644 --- a/database/seeders/LpjDatabaseSeeder.php +++ b/database/seeders/LpjDatabaseSeeder.php @@ -38,6 +38,7 @@ class LpjDatabaseSeeder extends Seeder DokumenJaminanSeeder::class, DetailDokumenJaminanSeeder::class, PermohonanSeeder::class, + FotoObjekJaminanSeeder::class, // PenawaranSeeder::class, // DetailPenawaranSeeder::class, // PenilaianSeeder::class, diff --git a/module.json b/module.json index 15e7edd..f70ecd2 100644 --- a/module.json +++ b/module.json @@ -849,6 +849,17 @@ "administrator", "admin" ] + }, + { + "title": "Foto Objek Jaminan", + "path": "basicdata.foto-objek-jaminan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] } ] } diff --git a/resources/views/penilai/components/foto-jaminan.blade.php b/resources/views/penilai/components/foto-jaminan.blade.php index d2e77a9..4143085 100644 --- a/resources/views/penilai/components/foto-jaminan.blade.php +++ b/resources/views/penilai/components/foto-jaminan.blade.php @@ -1,24 +1,45 @@
- @if (isset($formFoto['rute_menuju_lokasi'])) - @foreach ($formFoto['rute_menuju_lokasi'] as $item) + @if (isset($formFoto['rute_menuju_lokasi']['rute_menuju_lokasi'])) + @foreach ($formFoto['rute_menuju_lokasi']['rute_menuju_lokasi'][0] as $index => $item)

- {{ $item['name_rute'] . ' ' . $loop->index + 1 }} + {{ $item['name'] . ' ' . $loop->index + 1 }}

@php $imagePath = $statusLpj - ? asset('storage/' . $item['foto_rute']) - : storage_path('app/public/' . $item['foto_rute']); + ? asset('storage/' . $item['path']) + : storage_path('app/public/' . $item['path']); @endphp - @if ($statusLpj || file_exists(storage_path('app/public/' . $item['foto_rute']))) - {{ $item['foto_rute'] }} + @if ($statusLpj || file_exists(storage_path('app/public/' . $item['path']))) + {{ $item['path'] }} @endif
@endforeach @endif + @if (isset($formFoto['foto_rute_lainnya'])) + @foreach ($formFoto['foto_rute_lainnya'] as $index => $item) +
+

+ {{ $item['name_rute_lainnya'] }} +

+ + @php + $imagePath = $statusLpj + ? asset('storage/' . $item['foto_rute_lainnya']) + : storage_path('app/public/' . $item['foto_rute_lainnya']); + @endphp + + @if ($statusLpj || file_exists(storage_path('app/public/' . $item['foto_rute_lainnya']))) + {{ $item['foto_rute_lainnya'] }} + @endif +
+ @endforeach + @endif + + @if (isset($formFoto['object_jaminan'])) @foreach ($formFoto['object_jaminan'] as $item)
@@ -39,6 +60,49 @@ @endforeach @endif + + @if (isset($formFoto['foto_lantai_unit'])) + @foreach ($formFoto['foto_lantai_unit'] as $index => $floorPhotos) + @foreach ($floorPhotos as $index => $item) +
+

+ {{ $item['name'] ?? 'Foto Lantai ' . $floorNumber . ' - ' . ($index + 1) }} +

+ + @php + $imagePath = $statusLpj + ? asset('storage/' . $item['path']) + : storage_path('app/public/' . $item['path']); + @endphp + + @if ($statusLpj || file_exists(storage_path('app/public/' . $item['path']))) + {{ $item['path'] }} + @endif +
+ @endforeach + @endforeach + @endif + + @if (isset($formFoto['foto_lingkungan']['foto_lingkungan'])) + @foreach ($formFoto['foto_lingkungan']['foto_lingkungan'][0] as $index => $item) +
+

+ {{ $item['name'] . ' ' . $loop->index + 1 }} +

+ + @php + $imagePath = $statusLpj + ? asset('storage/' . $item['path']) + : storage_path('app/public/' . $item['path']); + @endphp + + @if ($statusLpj || file_exists(storage_path('app/public/' . $item['path']))) + {{ $item['path'] }} + @endif +
+ @endforeach + @endif + @if (isset($formFoto['foto_basement']))

diff --git a/resources/views/penilai/components/foto-lampiran.blade.php b/resources/views/penilai/components/foto-lampiran.blade.php index b7dc091..6775d61 100644 --- a/resources/views/penilai/components/foto-lampiran.blade.php +++ b/resources/views/penilai/components/foto-lampiran.blade.php @@ -5,18 +5,39 @@

- @if (isset($formFoto)) - @foreach ($formFoto['rute_menuju_lokasi'] as $item) + @if (isset($formFoto['rute_menuju_lokasi']['rute_menuju_lokasi'])) + @foreach ($formFoto['rute_menuju_lokasi']['rute_menuju_lokasi'][0] as $index => $item)

- {{ $item['name_rute'] . ' ' . $loop->index + 1 }} + {{ $item['name'] ?? 'Rute menuju lokasi - ' . ($index + 1) }}

+ Gambar {{ $index + 1 }} +
+
+
+ @endforeach + @endif +
+
- - - +
+
+

+ Rute Lainnya +

+
+
+ @if (isset($formFoto['foto_rute_lainnya'])) + @foreach ($formFoto['foto_rute_lainnya'] as $index => $item) +
+
+

+ {{ $item['name_rute_lainnya'] ?? 'Rute menuju lokasi - ' . ($index + 1) }} +

+
+ Gambar {{ $index + 1 }}
@@ -43,7 +64,7 @@
- +
@@ -53,6 +74,57 @@
+
+
+

Lantai

+
+
+ @if (isset($formFoto['foto_lantai_unit'])) + @foreach ($formFoto['foto_lantai_unit'] as $floorNumber => $floorPhotos) +
+ @foreach ($floorPhotos as $index => $item) +
+
+

+ {{ $item['name'] ?? 'Foto Lantai ' . $floorNumber . ' - ' . ($index + 1) }} +

+
+ Gambar {{ $floorNumber }}-{{ $index + 1 }} +
+
+
+ @endforeach +
+ @endforeach + @endif +
+
+ + +
+
+

+ Lingkungan

+
+
+ @if (isset($formFoto['foto_lingkungan']['foto_lingkungan'])) + @foreach ($formFoto['foto_lingkungan']['foto_lingkungan'][0] as $index => $item) +
+
+

+ {{ $item['name'] ?? 'Rute menuju lokasi - ' . ($index + 1) }} +

+
+ Gambar {{ $index + 1 }} +
+
+
+ @endforeach + @endif +
+ +
+ @if (isset($formFoto['foto_basement']))
@@ -79,6 +151,30 @@
@endif +
+
+

+ Lantai Lainnya +

+
+
+ @if (isset($formFoto['foto_lantai_lainnya'])) + @foreach ($formFoto['foto_lantai_lainnya'] as $index => $item) +
+
+

+ {{ $item['name_lantai_lainnya'] ?? 'Rute menuju lokasi - ' . ($index + 1) }} +

+
+ Gambar {{ $index + 1 }} +
+
+
+ @endforeach + @endif +
+
+ @if (isset($formFoto['foto_gerbang']))
diff --git a/resources/views/penilai/components/print-out-sederhana.blade.php b/resources/views/penilai/components/print-out-sederhana.blade.php index f1a2240..b3159c3 100644 --- a/resources/views/penilai/components/print-out-sederhana.blade.php +++ b/resources/views/penilai/components/print-out-sederhana.blade.php @@ -5,6 +5,7 @@ + Laporan Penilai Jaminan