perbaikan kertas kerja, paparan, dan lampiran

This commit is contained in:
majid
2024-12-20 13:31:01 +07:00
parent 3522bab943
commit 575e794e44
8 changed files with 334 additions and 228 deletions

View File

@@ -190,7 +190,6 @@ class PenilaiController extends Controller
*/
public function paparan(Request $request)
{
$permohonanId = $request->query('permohonanId');
$permohonanId = $request->query('permohonanId');
$documentId = $request->query('documentId');
@@ -198,9 +197,15 @@ class PenilaiController extends Controller
$jaminanId = $request->query('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;
// $headerInfo = [
// 'tanggal_penilaian' => '',
// 'nama_pemilik' => '',
// 'nama_pemberi_tugas' => '',
// 'lokasi_lengkap' => '',
// 'nama_debitur' => ''
// ];
$permohonanId = $request->query('permohonanId');
$documentId = $request->query('documentId');
$inspeksiId = $request->query('inspeksiId');
$jaminanId = $request->query('jaminanId');
// $datas = json_decode($data->data_pembanding);
// return response()->json(['data' =>$datas ]);
$data = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
// return view('lpj::component.kertas-kerja', compact('data'));
return Excel::download(new KertasKerjaExport($data), 'kertas-kerja.xlsx');

View File

@@ -464,79 +464,147 @@
</tbody>
</table>
<h4>Peta Objek dan Pembanding
</h4>
<h4>Peta Objek dan Pembanding</h4>
@php
$fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat'];
@php
$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++)
<img src="{{ isset($dataform[$fotoTypes[$i]]) ? asset('storage/' . $dataform[$fotoTypes[$i]]) : '#' }}"
alt="{{ $fotoTypes[$i] }}" style="max-width: 40rem;">
@endfor
<div class="grid grid-cols-4 gap-4">
@forelse ($fotoTypes as $type)
<div class="text-center">
@php
$imagePath = $dataform[$type];
@endphp
<h4>FOTO OBJEK DAN DATA PEMBANDING</h4>
@foreach ($dataPembanding['data_pembanding'] as $item)
<img src="{{ isset($item['foto_objek']) ? asset('storage/' . $item['foto_objek']) : '#' }}"
alt="Foto Objek" style="max-width: 20rem;">
<p style="text-center">Data Pembanding {{ $loop->iteration }}</p>
@endforeach
@php
$dataFoto = json_decode($data->foto_form, true);
@endphp
<h4>FOTO OBJEK</h4>
@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
{{-- @if ($imagePath && Storage::exists($imagePath)) --}}
<img
src="{{ asset('public/' . $imagePath) }}"
alt="{{ $type }}"
class="max-w-full h-auto mx-auto"
onerror="this.src='{{ asset('default-image.png') }}'"
>
<p class="mt-2 text-sm">{{ Str::title(str_replace('_', ' ', $type)) }}</p>
{{-- @else
<div class="bg-gray-200 p-4 text-center">
<p>Tidak ada gambar</p>
</div>
@endif --}}
</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>

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">
<label class=" ">Pembanding {{ $key + 1 }}
</label>
<img src="{{ isset($item['foto_objek']) ? asset('storage/' . old('foto_objek', $item['foto_objek'])) : '#' }}"
alt="Gambar foto_objek" style="width: 20rem;" class="mx-auto object-cover">
<div class="image-container">
<img
src="{{ isset($item['foto_objek']) ? asset('storage/' . old('foto_objek', $item['foto_objek'])) : '#' }}"
alt="Gambar foto_objek"
class="responsive-image"
/>
</div>
</div>
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -71,3 +76,20 @@
@endforeach
@endif
</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>
@include('lpj::penilai.components.foto-lampiran')
<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

View File

@@ -114,144 +114,7 @@
@endif
</div>
</div>
<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
@include('lpj::penilai.components.foto-lampiran')
</div>
@endsection

View File

@@ -193,7 +193,7 @@
<a class="btn btn-primary" data-modal-toggle="#modal_2">
KERTAS KERJA
</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
</a>
@@ -308,7 +308,6 @@
@endforeach
<div class="flex items-baseline w-full">
<label for="" class="form-label max-w-56">Import Kertas Kerja</label>
<div class="flex justify-center items-center gap-2">
<input type="file" id="kertas_kerja" class="file-input">
<button type="button" class="btn btn-outline btn-success"
@@ -319,7 +318,7 @@
@if ($jenisJaminanId)
<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
</a>
@else
@@ -515,6 +514,8 @@
});
}
</script>
@include('lpj::surveyor.js.utils')

View File

@@ -537,7 +537,7 @@ Route::middleware(['auth'])->group(function () {
Route::get('datatables', [PenilaiController::class, 'dataForDatatables'])->name('dataForTables');
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');