perbaikan kertas kerja, paparan, dan lampiran

This commit is contained in:
majid
2024-12-20 13:31:01 +07:00
committed by putrakuningan
parent e05e8b8b48
commit f155dd6ff4
8 changed files with 334 additions and 228 deletions

View File

@@ -190,7 +190,6 @@ class PenilaiController extends Controller
*/ */
public function paparan(Request $request) public function paparan(Request $request)
{ {
$permohonanId = $request->query('permohonanId');
$permohonanId = $request->query('permohonanId'); $permohonanId = $request->query('permohonanId');
$documentId = $request->query('documentId'); $documentId = $request->query('documentId');
@@ -198,9 +197,15 @@ class PenilaiController extends Controller
$jaminanId = $request->query('jaminanId'); $jaminanId = $request->query('jaminanId');
$permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId); $permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId);
$inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); $penilai = Penilai::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
$inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where
('dokument_id', $documentId)->first();
$formFoto = null;
if ($inspeksi) {
$formFoto = json_decode($inspeksi->foto_form, true);
}
return view('lpj::penilai.components.paparan'); return view('lpj::penilai.components.paparan', compact('permohonan', 'formFoto', 'penilai'));
} }
@@ -296,21 +301,15 @@ class PenilaiController extends Controller
]); ]);
} }
public function export_kertas_kerja($id, $jaminanId) public function export_kertas_kerja(Request $request)
{ {
$data = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $jaminanId)->first();
// $data = null; $permohonanId = $request->query('permohonanId');
// $headerInfo = [ $documentId = $request->query('documentId');
// 'tanggal_penilaian' => '', $inspeksiId = $request->query('inspeksiId');
// 'nama_pemilik' => '', $jaminanId = $request->query('jaminanId');
// 'nama_pemberi_tugas' => '',
// 'lokasi_lengkap' => '',
// 'nama_debitur' => ''
// ];
// $datas = json_decode($data->data_pembanding); $data = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
// return response()->json(['data' =>$datas ]);
// return view('lpj::component.kertas-kerja', compact('data')); // return view('lpj::component.kertas-kerja', compact('data'));
return Excel::download(new KertasKerjaExport($data), 'kertas-kerja.xlsx'); return Excel::download(new KertasKerjaExport($data), 'kertas-kerja.xlsx');

View File

@@ -464,79 +464,147 @@
</tbody> </tbody>
</table> </table>
<h4>Peta Objek dan Pembanding <h4>Peta Objek dan Pembanding</h4>
</h4>
@php @php
$fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat']; $fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat'];
@endphp
// echo $dataForm; @php
$imagePath = $dataform['foto_gistaru'];
@endphp
<img
src="{{ asset('public/' . $imagePath) }}"
alt=""
class="max-w-full h-auto mx-auto"
@endphp >
@for ($i = 0; $i < count($fotoTypes); $i++) <div class="grid grid-cols-4 gap-4">
<img src="{{ isset($dataform[$fotoTypes[$i]]) ? asset('storage/' . $dataform[$fotoTypes[$i]]) : '#' }}" @forelse ($fotoTypes as $type)
alt="{{ $fotoTypes[$i] }}" style="max-width: 40rem;"> <div class="text-center">
@endfor @php
$imagePath = $dataform[$type];
@endphp
<h4>FOTO OBJEK DAN DATA PEMBANDING</h4> {{-- @if ($imagePath && Storage::exists($imagePath)) --}}
<img
@foreach ($dataPembanding['data_pembanding'] as $item) src="{{ asset('public/' . $imagePath) }}"
<img src="{{ isset($item['foto_objek']) ? asset('storage/' . $item['foto_objek']) : '#' }}" alt="{{ $type }}"
alt="Foto Objek" style="max-width: 20rem;"> class="max-w-full h-auto mx-auto"
<p style="text-center">Data Pembanding {{ $loop->iteration }}</p> onerror="this.src='{{ asset('default-image.png') }}'"
@endforeach >
<p class="mt-2 text-sm">{{ Str::title(str_replace('_', ' ', $type)) }}</p>
{{-- @else
@php <div class="bg-gray-200 p-4 text-center">
$dataFoto = json_decode($data->foto_form, true); <p>Tidak ada gambar</p>
@endphp </div>
<h4>FOTO OBJEK</h4> @endif --}}
@php
$images = [];
// Rute Menuju Lokasi
foreach ($dataFoto['rute_menuju_lokasi'] ?? [] as $rute) {
$images[] = $rute['foto_rute'] ?? null;
}
// Objek Jaminan
foreach ($dataFoto['object_jaminan'] ?? [] as $objek) {
$images[] = $objek['foto_objek'] ?? null;
}
// Lingkungan
foreach ($dataFoto['lingkungan'] ?? [] as $lingkungan) {
$images[] = $lingkungan['foto_lingkungan'] ?? null;
}
// Lantai Unit
foreach ($dataFoto['foto_lantai_unit'] ?? [] as $lantai) {
$images[] = $lantai['foto_lantai_unit'] ?? null;
}
// Tambahan foto lainnya
$images[] = $dataFoto['foto_basement'] ?? null;
$images[] = $dataFoto['foto_gerbang'] ?? null;
$images[] = $dataFoto['pendamping'] ?? null;
// Filter null values
$images = array_filter($images);
@endphp
<div class="row">
@foreach ($images as $image)
<img src="{{ asset('storage/' . $image) }}" alt="Foto Survey"
style="
width: 250px;
height: 250px;
object-fit: cover;
margin: 10px;
"
onerror="this.src='{{ asset('default-image.png') }}'">
@endforeach
</div> </div>
@empty
<p>Tidak ada tipe foto yang tersedia</p>
@endforelse
</div>
<h4 class="mt-6">FOTO OBJEK DAN DATA PEMBANDING</h4>
<div class="grid grid-cols-4 gap-4">
@forelse ($dataPembanding['data_pembanding'] ?? [] as $index => $item)
<div class="text-center">
@php
$fotoObjek = $item['foto_objek'];
@endphp
@if ($fotoObjek && Storage::exists($fotoObjek))
<img
src="{{ asset('storage/' . $fotoObjek) }}"
alt="Foto Objek Pembanding {{ $loop->iteration }}"
class="max-w-full h-auto mx-auto"
onerror="this.src='{{ asset('default-image.png') }}'"
>
<p class="mt-2 text-sm">Data Pembanding {{ $loop->iteration }}</p>
@else
<div class="bg-gray-200 p-4 text-center">
<p>Tidak ada gambar pembanding</p>
</div>
@endif
</div>
@empty
<p class="col-span-4">Tidak ada data pembanding</p>
@endforelse
</div>
<h4 class="mt-6">FOTO OBJEK</h4>
@php
// Fungsi untuk mengumpulkan foto dengan pengecekan yang aman
function collectSafeImages($data, $paths = []) {
if (!is_array($data)) {
return $paths;
}
foreach ($data as $key => $value) {
if (is_array($value)) {
// Jika array memiliki kunci foto
if (isset($value['foto_rute'])) {
$paths[] = $value['foto_rute'];
}
if (isset($value['foto_objek'])) {
$paths[] = $value['foto_objek'];
}
if (isset($value['foto_lingkungan'])) {
$paths[] = $value['foto_lingkungan'];
}
if (isset($value['foto_lantai_unit'])) {
$paths[] = $value['foto_lantai_unit'];
}
// Rekursif untuk nested array
$paths = collectSafeImages($value, $paths);
} elseif (is_string($value) && strpos($value, 'foto_') !== false) {
$paths[] = $value;
}
}
return $paths;
}
// Decode foto form dengan penanganan error
try {
$dataFoto = json_decode($data->foto_form, true) ?? [];
} catch (Exception $e) {
$dataFoto = [];
}
// Kumpulkan foto
$images = collectSafeImages($dataFoto);
// Filter foto yang valid
$validImages = array_filter($images, function($image) {
return $image && Storage::exists($image);
})
@endphp
<div class="grid grid-cols-4 gap-4">
@forelse ($validImages as $image)
<div class="text-center">
<img
src="{{ asset('storage/' . $image) }}"
alt="Foto Survey"
class="w-full h-64 object-cover"
onerror="this.src='{{ asset('default-image.png') }}'"
>
</div>
@empty
<div class="col-span-4 text-center bg-gray-200 p-4">
<p>Tidak ada foto objek yang tersedia</p>
</div>
@endforelse
</div>
</body> </body>

View File

@@ -0,0 +1,137 @@
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Rute Menuju Lokasi
</h3>
</div>
<div class="card-body">
@if (isset($formFoto))
@foreach ($formFoto['rute_menuju_lokasi'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name_rute'] . ' ' . $loop->index + 1 }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_rute']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Object Jaminan
</h3>
</div>
<div class="card-body">
@if (isset($formFoto['object_jaminan']))
@foreach ($formFoto['object_jaminan'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
{{ $item['name_objek'] }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_objek']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@if (isset($formFoto['foto_basement']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Basement
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Basemnt
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_basement']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['foto_gerbang']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Gerbang
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Gerbang
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_gerbang']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['pendamping']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Pendamping
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Pendamping
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['pendamping']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif

View File

@@ -11,8 +11,13 @@
<div class="form-label lg:form-label max-w-56 grid gap-2.5"> <div class="form-label lg:form-label max-w-56 grid gap-2.5">
<label class=" ">Pembanding {{ $key + 1 }} <label class=" ">Pembanding {{ $key + 1 }}
</label> </label>
<img src="{{ isset($item['foto_objek']) ? asset('storage/' . old('foto_objek', $item['foto_objek'])) : '#' }}" <div class="image-container">
alt="Gambar foto_objek" style="width: 20rem;" class="mx-auto object-cover"> <img
src="{{ isset($item['foto_objek']) ? asset('storage/' . old('foto_objek', $item['foto_objek'])) : '#' }}"
alt="Gambar foto_objek"
class="responsive-image"
/>
</div>
</div> </div>
<div class="grid gap-2.5 w-full"> <div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -71,3 +76,20 @@
@endforeach @endforeach
@endif @endif
</div> </div>
<style>
.image-container {
max-width: 20rem;
max-height: 15rem;
overflow: hidden;
}
.responsive-image {
width: 100%;
height: 100%;
object-fit: contain;
}
</style>

View File

@@ -72,7 +72,23 @@
</div> </div>
</div> </div>
</div> </div>
@include('lpj::penilai.components.foto-lampiran')
</div>
<div class="card">
<div class="card-header uppercase">
Kertas Kerja
</div>
<div class="card-body">
@php
$url = asset('storage/' . $penilai->kertas_kerja);
@endphp
<iframe src="https://docs.google.com/gview?url={{$url}}&embedded=true" style="width:100%; height:500px;" frameborder="0"></iframe>
</div>
</div>
</div>
@endsection @endsection

View File

@@ -114,144 +114,7 @@
@endif @endif
</div> </div>
</div> </div>
@include('lpj::penilai.components.foto-lampiran')
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Rute Menuju Lokasi
</h3>
</div>
<div class="card-body">
@if (isset($formFoto))
@foreach ($formFoto['rute_menuju_lokasi'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name_rute'] . ' ' . $loop->index + 1 }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_rute']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Object Jaminan
</h3>
</div>
<div class="card-body">
@if (isset($formFoto['object_jaminan']))
@foreach ($formFoto['object_jaminan'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
{{ $item['name_objek'] }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_objek']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@if (isset($formFoto['foto_basement']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Basement
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Basemnt
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_basement']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['foto_gerbang']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Gerbang
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Gerbang
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_gerbang']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['pendamping']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Pendamping
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Pendamping
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['pendamping']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
</div> </div>
@endsection @endsection

View File

@@ -193,7 +193,7 @@
<a class="btn btn-primary" data-modal-toggle="#modal_2"> <a class="btn btn-primary" data-modal-toggle="#modal_2">
KERTAS KERJA KERTAS KERJA
</a> </a>
<a class="btn btn-primary" href="{{ route('penilai.paparan') }}"> <a class="btn btn-primary" href="{{ route('penilai.paparan') }}?permohonanId={{ $permohonan->id }}&documentId={{ $dokumen->id }}&inspeksiId={{ $inspeksiId }}&jaminanId={{ $dokumen->jenis_jaminan_id }}">
PAPARAN PAPARAN
</a> </a>
@@ -308,7 +308,6 @@
@endforeach @endforeach
<div class="flex items-baseline w-full"> <div class="flex items-baseline w-full">
<label for="" class="form-label max-w-56">Import Kertas Kerja</label> <label for="" class="form-label max-w-56">Import Kertas Kerja</label>
<div class="flex justify-center items-center gap-2"> <div class="flex justify-center items-center gap-2">
<input type="file" id="kertas_kerja" class="file-input"> <input type="file" id="kertas_kerja" class="file-input">
<button type="button" class="btn btn-outline btn-success" <button type="button" class="btn btn-outline btn-success"
@@ -319,7 +318,7 @@
@if ($jenisJaminanId) @if ($jenisJaminanId)
<a class="btn btn-outline btn-primary w-full" <a class="btn btn-outline btn-primary w-full"
href="{{ route('penilai.export.kertas-kerja', ['id' => $permohonan->id, 'jaminanId' => $jenisJaminanId]) }}"> href="{{ route('penilai.export.kertas-kerja') }}?permohonanId={{ $permohonan->id }}&documentId={{ $documentId }}&inspeksiId={{ $inspeksiId }}&jaminanId={{ $jenisJaminanId }}">
Export Kertas Kerja Export Kertas Kerja
</a> </a>
@else @else
@@ -515,6 +514,8 @@
}); });
} }
</script> </script>
@include('lpj::surveyor.js.utils') @include('lpj::surveyor.js.utils')

View File

@@ -538,7 +538,7 @@ Route::middleware(['auth'])->group(function () {
Route::get('datatables', [PenilaiController::class, 'dataForDatatables'])->name('dataForTables'); Route::get('datatables', [PenilaiController::class, 'dataForDatatables'])->name('dataForTables');
Route::get('lampiran/{id}', [PenilaiController::class, 'lampiran'])->name('lampiran'); Route::get('lampiran/{id}', [PenilaiController::class, 'lampiran'])->name('lampiran');
Route::get('export/kertas-kerja/{id}/{jaminanId}', [PenilaiController::class, 'export_kertas_kerja'])->name('export.kertas-kerja'); Route::get('export/kertas-kerja', [PenilaiController::class, 'export_kertas_kerja'])->name('export.kertas-kerja');
Route::post('import/kertas-kerja', [PenilaiController::class, 'import_kertas_kerja'])->name('import.kertas-kerja'); Route::post('import/kertas-kerja', [PenilaiController::class, 'import_kertas_kerja'])->name('import.kertas-kerja');