- **foto-jaminan.blade.php**: Memindahkan page-break ke awal chunk (kecuali chunk pertama) untuk mencegah page break yang tidak perlu di akhir - **print-out-sederhana.blade.php**: - Menambahkan validasi isset() untuk mencegah error undefined index pada hub_cadeb - Menambahkan prefix 'Lain-lain, ' untuk hubungan debitur yang tidak sesuai - Menambahkan guard clause untuk mencegah error saat SARANA PELENGKAP DAN LINGKUNGAN tidak ada - Menambahkan guard clause untuk ANALISA TANAH DAN BANGUNAN - **print-out-standar.blade.php**: - Menambahkan validasi null check untuk mig_detail_legalitas_jaminan - Memperbaiki indentasi dan struktur kode untuk konsistensi Perubahan ini meningkatkan stabilitas aplikasi dengan mencegah error undefined index dan memperbaiki layout PDF yang dihasilkan dengan penempatan page break yang lebih tepat.
334 lines
16 KiB
PHP
334 lines
16 KiB
PHP
<style>
|
|
/* General Styles */
|
|
body {
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.photo-container {
|
|
width: 100%;
|
|
margin-bottom: 10px;
|
|
clear: both;
|
|
page-break-inside: avoid;
|
|
}
|
|
|
|
.photo-row {
|
|
width: 100%;
|
|
clear: both;
|
|
page-break-inside: avoid;
|
|
}
|
|
|
|
.photo-item {
|
|
|
|
box-sizing: border-box;
|
|
page-break-inside: avoid;
|
|
}
|
|
|
|
.photo-item:nth-child(2n) {
|
|
margin-right: 0;
|
|
}
|
|
|
|
/* Image Styling */
|
|
.photo-item img {
|
|
display: block;
|
|
margin: auto;
|
|
width: auto;
|
|
max-width: 100%;
|
|
height: auto;
|
|
max-height: 400px;
|
|
object-fit: contain;
|
|
background-color: #f0f0f0;
|
|
border-radius: 5px;
|
|
}
|
|
|
|
/* Clearfix */
|
|
.clearfix::after {
|
|
content: "";
|
|
clear: both;
|
|
display: table;
|
|
}
|
|
|
|
/* Media Print */
|
|
@media print {
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
}
|
|
|
|
td {
|
|
vertical-align: top;
|
|
text-align: center;
|
|
page-break-inside: avoid;
|
|
}
|
|
|
|
.photo-image {
|
|
height: 400px;
|
|
max-height: 400px;
|
|
}
|
|
|
|
.page-break {
|
|
page-break-after: always;
|
|
}
|
|
}
|
|
</style>
|
|
|
|
@isset($basicData['foto'])
|
|
@php
|
|
$photos = $formFoto['upload_foto'] ?? [];
|
|
if (!is_array($photos)) {
|
|
$photos = [];
|
|
}
|
|
$groupedPhotos = collect($photos)->groupBy('category');
|
|
|
|
$mainPhotos = $groupedPhotos->filter(fn($_, $key) => strtolower($key) !== 'lainnya');
|
|
|
|
// Definisikan urutan yang diinginkan
|
|
$desiredOrder = [
|
|
'PETA LOKASI',
|
|
'GAMBAR SITUASI / SURAT UKUR',
|
|
'BLAD TATA KOTA',
|
|
'FOTO JAMINAN',
|
|
'DOKUMEN PENDUKUNG'
|
|
];
|
|
|
|
// Urutkan ulang $mainPhotos sesuai urutan yang diinginkan
|
|
$orderedMainPhotos = collect();
|
|
foreach ($desiredOrder as $category) {
|
|
if ($mainPhotos->has($category)) {
|
|
$orderedMainPhotos->put($category, $mainPhotos->get($category));
|
|
}
|
|
}
|
|
|
|
// Tambahkan kategori lain yang tidak ada dalam urutan yang diinginkan
|
|
foreach ($mainPhotos as $category => $photos) {
|
|
if (!in_array($category, $desiredOrder)) {
|
|
$orderedMainPhotos->put($category, $photos);
|
|
}
|
|
}
|
|
|
|
$mainPhotos = $orderedMainPhotos;
|
|
$otherPhotos = $groupedPhotos->get('lainnya', collect());
|
|
@endphp
|
|
|
|
@if ($groupedPhotos->isEmpty())
|
|
<p class="text-gray-500">Tidak ada foto yang tersedia.</p>
|
|
@else
|
|
@foreach ($mainPhotos as $category => $photos)
|
|
@if($category=='DOKUMEN PENDUKUNG')
|
|
@php continue; @endphp
|
|
@endif
|
|
@php
|
|
$groupedBySubcategory = $photos->groupBy('sub');
|
|
@endphp
|
|
|
|
@foreach ($groupedBySubcategory as $subcategory => $subPhotos)
|
|
@if (count($subPhotos) > 0)
|
|
@foreach ($subPhotos->chunk(2) as $chunkedPhotos)
|
|
@if(!$loop->first)
|
|
<div class="page-break"></div>
|
|
@endif
|
|
<table width="100%" border="0"
|
|
style="align-content: center; text-align: center; margin-bottom: 20px">
|
|
@foreach ($chunkedPhotos as $item)
|
|
@php
|
|
// Logika fallback untuk path file
|
|
$originalPath = $item['path'];
|
|
$fallbackPath = null;
|
|
|
|
// Jika file asli tidak ditemukan, buat fallback path
|
|
if ($statusLpj == 1) {
|
|
$fullOriginalPath = storage_path('app/public/' . $originalPath);
|
|
|
|
if (!file_exists($fullOriginalPath)) {
|
|
// Ekstrak bagian akhir path (contoh: 251051/251051_2_2.png)
|
|
$pathParts = explode('/', $originalPath);
|
|
if (count($pathParts) >= 2) {
|
|
$lastTwoParts = array_slice($pathParts, -2);
|
|
$fallbackPath = 'surveyor/001/' . implode('/', $lastTwoParts);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Tentukan path yang akan digunakan
|
|
$pathToUse = ($fallbackPath && $statusLpj == 1 && file_exists(storage_path('app/public/' . $fallbackPath)))
|
|
? $fallbackPath
|
|
: $originalPath;
|
|
|
|
$filePath =
|
|
$statusLpj == 1
|
|
? storage_path('app/public/' . $pathToUse)
|
|
: asset('storage/' . $pathToUse);
|
|
|
|
$extension = strtolower(pathinfo($pathToUse, PATHINFO_EXTENSION));
|
|
$isImage = in_array($extension, [
|
|
'jpg',
|
|
'jpeg',
|
|
'png',
|
|
'gif',
|
|
'bmp',
|
|
'svg',
|
|
'webp',
|
|
'tiff',
|
|
]);
|
|
$isPdf = $extension === 'pdf';
|
|
@endphp
|
|
@if ($statusLpj == 1)
|
|
@if ($isImage && $filePath)
|
|
<tr>
|
|
<td style="width: 100%; padding: 10px; align-content: center; text-align: center"
|
|
class="border photo-item">
|
|
<p style="font-weight: medium; font-size: 10px">{{ $category }} -
|
|
@isset($subcategory)
|
|
@if (trim($subcategory) !== '')
|
|
{{ $subcategory }} -
|
|
@endif
|
|
@endisset
|
|
{{ $item['name'] ?? '' }}
|
|
</p>
|
|
<img src="{{ $filePath }}" alt="{{ $pathToUse }}" class="photo-image"
|
|
style="align-content: center; text-align: center; max-width: 100%; height: auto;">
|
|
</td>
|
|
</tr>
|
|
@endif
|
|
@elseif ($statusLpj != 1)
|
|
<tr>
|
|
<td style="width: 100%; padding: 10px; align-content: center; text-align: center"
|
|
class="border photo-item">
|
|
|
|
<p style="font-weight: medium; font-size: 10px">{{ $category }} -
|
|
@isset($subcategory)
|
|
@if (trim($subcategory) !== '')
|
|
{{ $subcategory }} -
|
|
@endif
|
|
@endisset
|
|
|
|
{{ $item['name'] ?? '' }}
|
|
|
|
</p>
|
|
@if ($statusLpj || file_exists(public_path('storage/' . $item['path'])))
|
|
@if ($isImage)
|
|
<img src="{{ $filePath }}" alt="{{ $item['path'] }}"
|
|
class="photo-image"
|
|
style="align-content: center; text-align: center;">
|
|
@elseif ($isPdf)
|
|
<a href="{{ $filePath }}" download="{{ basename($filePath) }}"
|
|
style="font-size:12px; color:#1a73e8; text-decoration: underline;">
|
|
⬇️ Unduh File PDF
|
|
</a>
|
|
@else
|
|
<a href="{{ $filePath }}" download="{{ basename($filePath) }}"
|
|
style="font-size:12px; color:#1a73e8; text-decoration: underline;">
|
|
⬇️ Unduh File
|
|
</a>
|
|
@endif
|
|
@endif
|
|
|
|
@isset($item['description'])
|
|
<p style="font-size:9px">{{ $item['description'] }}</p>
|
|
@endisset
|
|
|
|
</td>
|
|
</tr>
|
|
@endif
|
|
@endforeach
|
|
@if (count($chunkedPhotos) < 2)
|
|
<tr style="width: 100%;"></tr>
|
|
@endif
|
|
</table>
|
|
@endforeach
|
|
@endif
|
|
@endforeach
|
|
@endforeach
|
|
|
|
@if (!$otherPhotos->isEmpty())
|
|
@dd(!$otherPhotos->isEmpty())
|
|
@foreach ($otherPhotos->groupBy('sub') as $subcategory => $subPhotos)
|
|
@if (count($subPhotos) > 0)
|
|
@foreach ($subPhotos->chunk(2) as $chunkedPhotos)
|
|
<table width="100%" border="0"
|
|
style="align-content: center; text-align: center; margin-bottom: 20px">
|
|
@foreach ($chunkedPhotos as $item)
|
|
@php
|
|
$filePath =
|
|
$statusLpj == 1
|
|
? storage_path('app/public/' . $item['path'])
|
|
: asset('storage/' . $item['path']);
|
|
|
|
$extension = strtolower(pathinfo($item['path'], PATHINFO_EXTENSION));
|
|
$isImage = in_array($extension, [
|
|
'jpg',
|
|
'jpeg',
|
|
'png',
|
|
'gif',
|
|
'bmp',
|
|
'svg',
|
|
'webp',
|
|
'tiff',
|
|
]);
|
|
$isPdf = $extension === 'pdf';
|
|
@endphp
|
|
@if ($statusLpj == 1)
|
|
@if ($isImage && $filePath)
|
|
<tr>
|
|
<td style="width: 100%; padding: 10px; align-content: center; text-align: center"
|
|
class="border photo-item">
|
|
<p style="font-weight: medium; font-size: 10px">{{ $category }} -
|
|
@isset($subcategory)
|
|
@if (trim($subcategory) !== '')
|
|
{{ $subcategory }} -
|
|
@endif
|
|
@endisset
|
|
{{ $item['name'] ?? '' }}
|
|
</p>
|
|
<img src="{{ $filePath }}" alt="{{ $item['path'] }}" class="photo-image"
|
|
style="align-content: center; text-align: center; max-width: 100%; height: auto;">
|
|
</td>
|
|
</tr>
|
|
@endif
|
|
@elseif ($statusLpj != 1)
|
|
<tr>
|
|
<td style="width: 100%; padding: 10px;" class="border photo-item">
|
|
<p style="font-weight: medium; font-size: 10px">Lainnya -
|
|
@isset($subcategory)
|
|
@if (trim($subcategory) !== '')
|
|
{{ $subcategory }} -
|
|
@endif
|
|
@endisset
|
|
{{ $item['name'] ?? '' }}
|
|
</p>
|
|
@if ($statusLpj || file_exists(public_path('storage/' . $item['path'])))
|
|
@if ($isImage)
|
|
<img src="{{ $filePath }}" alt="{{ $item['path'] }}"
|
|
class="photo-image" style="text-align: center;">
|
|
@elseif ($isPdf)
|
|
<a href="{{ $filePath }}" download="{{ basename($filePath) }}"
|
|
style="font-size:12px; color:#1a73e8; text-decoration: underline;">
|
|
⬇️ Unduh File PDF
|
|
</a>
|
|
@else
|
|
<a href="{{ $filePath }}" download="{{ basename($filePath) }}"
|
|
style="font-size:12px; color:#1a73e8; text-decoration: underline;">
|
|
⬇️ Unduh File
|
|
</a>
|
|
@endif
|
|
@endif
|
|
|
|
@isset($item['description'])
|
|
<p style="font-size:9px">{{ $item['description'] }}</p>
|
|
@endisset
|
|
|
|
</td>
|
|
</tr>
|
|
@endif
|
|
@endforeach
|
|
@if (count($chunkedPhotos) < 2)
|
|
<tr style="width: 100%;"></tr>
|
|
@endif
|
|
</table>
|
|
@endforeach
|
|
@endif
|
|
@endforeach
|
|
@endif
|
|
@endif
|
|
@endisset
|