617 lines
22 KiB
PHP
617 lines
22 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Penilaian Aset</title>
|
|
<style>
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: Arial, sans-serif;
|
|
margin: 0;
|
|
padding: 15px;
|
|
font-size: 12px;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.header-table,
|
|
.data-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
.header-table td {
|
|
padding: 5px 8px;
|
|
border: 1px solid #ddd;
|
|
vertical-align: top;
|
|
}
|
|
|
|
.header-table .title {
|
|
font-weight: bold;
|
|
background-color: #f1f3f5;
|
|
width: 30%;
|
|
}
|
|
|
|
.header-table .value {
|
|
background-color: #f9f9f9;
|
|
width: 70%;
|
|
}
|
|
|
|
.data-table th,
|
|
.data-table td {
|
|
border: 1px solid #ddd;
|
|
padding: 5px 8px;
|
|
text-align: left;
|
|
word-wrap: break-word;
|
|
max-width: 150px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.data-table th {
|
|
background-color: #f1f3f5;
|
|
text-align: center;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.data-table tr:nth-child(even) {
|
|
background-color: #f9f9f9;
|
|
}
|
|
|
|
.text-center {
|
|
text-align: center;
|
|
}
|
|
|
|
@media print {
|
|
body {
|
|
font-size: 10px;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
|
|
<table class="header-table">
|
|
<tr>
|
|
<td class="title">Pendekatan Pasar</td>
|
|
<td class="value">Metode Perbandingan Data Pasar</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="title">Tanggal Penilaian</td>
|
|
<td class="value">{{ $tanggal_penilaian ?? '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="title">Nama Pemilik Aset</td>
|
|
<td class="value">-</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="title">Nama Pemberi Tugas</td>
|
|
<td class="value">-</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="title">Lokasi</td>
|
|
<td class="value">{{ $lokasi ?? '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="title">Nama Debitur</td>
|
|
<td class="value">-</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h4>A Informasi Umum
|
|
</h4>
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th width="5">No.</th>
|
|
<th width="20">Uraian</th>
|
|
<th width="15">Objek Penilaian</th>
|
|
<th width="20">Data Pembanding 1</th>
|
|
<th width="20">Data Pembanding 2</th>
|
|
<th width="20">Data Pembanding 3</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@php
|
|
$dataform = json_decode(isset($data->data_form) ? $data->data_form : '', true) ?? [];
|
|
$dataPembanding = json_decode(isset($data->data_pembanding) ? $data->data_pembanding : '', true) ?? [];
|
|
|
|
// print_r($dataform);
|
|
// echo $dataform;
|
|
|
|
@endphp
|
|
|
|
@php
|
|
function getNestedValue($data, $keyPath, $default = '-')
|
|
{
|
|
// Pecah path kunci menjadi array
|
|
$keys = explode('.', $keyPath);
|
|
|
|
// Mulai dari data awal
|
|
$value = $data;
|
|
|
|
// Telusuri setiap kunci
|
|
foreach ($keys as $key) {
|
|
// Cek apakah kunci ada di level saat ini
|
|
if (is_array($value) && array_key_exists($key, $value)) {
|
|
$value = $value[$key];
|
|
} else {
|
|
// Jika kunci tidak ditemukan, kembalikan default
|
|
return $default;
|
|
}
|
|
}
|
|
|
|
// Kembalikan nilai akhir atau default jika kosong
|
|
return $value ?? $default;
|
|
}
|
|
|
|
$rows = [
|
|
[
|
|
'label' => 'Jenis Aset',
|
|
'key' => 'asset.jenis_aset',
|
|
'default' => 'Rumah Tinggal',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Luas Tanah (M²)',
|
|
'key' => 'tanah.luas_tanah',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Luas Bangunan (M²)',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Penawaran Transaksi',
|
|
'key' => '-',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Tanggal Penawaran',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Discon',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Estimasi Harga',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Telepon Contact person',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Nama Nara Sumber',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Status Nara Sumber',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Waktu Penawaran',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Alamat',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Jalan',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Desa/Kelurahan',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Kecamatan',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Kota/Kabupaten',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Provinsi',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
|
|
[
|
|
'label' => 'Jarak Pembanding dengan Objek',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Esitmasi Rangking Tanah',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
[
|
|
'label' => 'Estimasi Ranking bangunan',
|
|
'key' => 'bangunan.luas_tanah_bangunan',
|
|
'default' => '-',
|
|
'variants' => [
|
|
'sesuai' => 'Sesuai',
|
|
'tidak sesuai' => 'Tidak Sesuai',
|
|
],
|
|
],
|
|
];
|
|
@endphp
|
|
|
|
@foreach ($rows as $index => $item)
|
|
<tr>
|
|
<td class="text-center">{{ $index + 1 }}</td>
|
|
<td>{{ $item['label'] }}</td>
|
|
|
|
|
|
<td>
|
|
@php
|
|
// Coba berbagai varian kunci
|
|
$objekValue = '-';
|
|
foreach (['sesuai', 'tidak sesuai'] as $variant) {
|
|
$fullKey = $item['key'] . '.' . $variant;
|
|
$objekValue = getNestedValue($dataform, $fullKey, $item['default']);
|
|
|
|
// Jika nilai ditemukan, hentikan pencarian
|
|
if ($objekValue !== $item['default']) {
|
|
break;
|
|
}
|
|
}
|
|
@endphp
|
|
{{ $objekValue }}
|
|
</td>
|
|
|
|
@for ($i = 0; $i < 3; $i++)
|
|
<td>
|
|
@php
|
|
$pembandingValue = '-';
|
|
|
|
// Pastikan data pembanding tersedia
|
|
if (isset($dataPembanding['data_pembanding'][$i])) {
|
|
$pembandingItem = $dataPembanding['data_pembanding'][$i];
|
|
|
|
// Mapping key berdasarkan label
|
|
switch ($item['label']) {
|
|
case 'Jenis Aset':
|
|
$pembandingValue = $pembandingItem['jenis_aset'] ?? '-';
|
|
break;
|
|
case 'Luas Tanah (M²)':
|
|
$pembandingValue = $pembandingItem['luas_tanah'] ?? '-';
|
|
break;
|
|
case 'Luas Bangunan (M²)':
|
|
$pembandingValue = $pembandingItem['luas_bangunan'] ?? '-';
|
|
break;
|
|
default:
|
|
$pembandingValue = '-';
|
|
}
|
|
}
|
|
@endphp
|
|
{{ $pembandingValue }}
|
|
</td>
|
|
@endfor
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
|
|
<h4> B. Estimasi Nilai Tanah Pembanding dengan Teknik Penyisaan Tanah untuk mendapatkan per meter persegi estimasi
|
|
Nilai Tanah Pembanding</h4>
|
|
|
|
<table>
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th width="5">No.</th>
|
|
<th width="20">Uraian</th>
|
|
<th width="15">Objek Penilaian</th>
|
|
<th width="20">Data Pembanding 1</th>
|
|
<th width="20">Data Pembanding 2</th>
|
|
<th width="20">Data Pembanding 3</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@php
|
|
$estimasi = [
|
|
[
|
|
'label' => 'Biaya Teknis Bangunan',
|
|
],
|
|
[
|
|
'label' => 'Estimasi Biaya Pengganti Baru Bangunan',
|
|
],
|
|
[
|
|
'label' => 'Estimasi Biaya Pengganti SPL (Rp)',
|
|
],
|
|
[
|
|
'label' => 'Penyusutan Fisik Banguan',
|
|
],
|
|
];
|
|
@endphp
|
|
|
|
@foreach ($estimasi as $index => $item)
|
|
<tr>
|
|
<td class="text-center">{{ $index + 1 }}</td>
|
|
<td>{{ $item['label'] }}</td>
|
|
<td>-</td>
|
|
@for ($i = 0; $i < 3; $i++)
|
|
<td>
|
|
@php
|
|
$pembandingValue = '-';
|
|
|
|
// Pastikan data pembanding tersedia
|
|
if (isset($dataPembanding['data_pembanding'][$i])) {
|
|
$pembandingItem = $dataPembanding['data_pembanding'][$i];
|
|
|
|
// Mapping key berdasarkan label
|
|
switch ($item['label']) {
|
|
case 'Jenis Aset':
|
|
$pembandingValue = $pembandingItem['jenis_aset'] ?? '-';
|
|
break;
|
|
case 'Luas Tanah (M²)':
|
|
$pembandingValue = $pembandingItem['luas_tanah'] ?? '-';
|
|
break;
|
|
case 'Luas Bangunan (M²)':
|
|
$pembandingValue = $pembandingItem['luas_bangunan'] ?? '-';
|
|
break;
|
|
default:
|
|
$pembandingValue = '-';
|
|
}
|
|
}
|
|
@endphp
|
|
{{ $pembandingValue }}
|
|
</td>
|
|
@endfor
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
|
|
<h4>Peta Objek dan Pembanding</h4>
|
|
|
|
@php
|
|
$fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat'];
|
|
@endphp
|
|
|
|
@php
|
|
$imagePath = $dataform['foto_gistaru'];
|
|
@endphp
|
|
<img
|
|
src="{{ asset('public/' . $imagePath) }}"
|
|
alt=""
|
|
class="max-w-full h-auto mx-auto"
|
|
|
|
>
|
|
|
|
<div class="grid grid-cols-4 gap-4">
|
|
@forelse ($fotoTypes as $type)
|
|
<div class="text-center">
|
|
@php
|
|
$imagePath = $dataform[$type];
|
|
@endphp
|
|
|
|
{{-- @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>
|
|
|
|
</html>
|
|
|
|
<script>
|
|
const data = @json($dataFoto);
|
|
console.log(data);
|
|
</script>
|