Compare commits

..

22 Commits

Author SHA1 Message Date
Daeng Deni Mardaeni
45cebcf325 🔧(services): Selaraskan fallback path foto pada PreviewLaporanService dan tambah logging
- Menyelaraskan resolusi path file foto di PreviewLaporanService dengan logika fallback seperti pada komponen foto:
  - Menggunakan `originalPath = $path['path']` sebagai path utama
  - Jika `statusLpj == 1` dan file asli tidak ditemukan, maka:
    - Ekstrak dua bagian terakhir dari path (contoh: `251051/251051_2_2.png`)
    - Bangun `fallbackPath` dengan pola `surveyor/001/{lastTwoParts}`
  - Tentukan `pathToUse`:
    - Apabila `fallbackPath` ada dan file fallback ditemukan, gunakan `fallbackPath`
    - Jika tidak, tetap gunakan `originalPath`
  - Resolusi final: `storage_path('app/public/' . $pathToUse)`

- Menambahkan logging untuk setiap operasi penting dan setiap titik pengembalian:
  - `Log::warning` saat path kosong terdeteksi dalam daftar paths
  - `Log::info` saat fallback kandidat dibangun dari `originalPath`
  - `Log::warning` saat file tidak ditemukan pada original maupun fallback (dengan menyertakan ketiganya: original, fallback, resolved)
  - `Log::info` saat file berhasil ditambahkan ke daftar unduhan
  - `Log::warning` saat tidak ada file valid setelah resolusi path
  - `Log::info` saat mengunduh single file
  - `Log::info` saat zip file berhasil dibuat (dengan jumlah file)
  - `Log::error` saat zip file gagal dibuat

- Memindahkan logika resolusi path di dalam loop pengolahan `$paths` untuk setiap item:
  - Mengganti setting langsung `storage_path('app/public/' . $path['path'])` dengan resolusi path yang bisa fallback
  - Menjaga struktur kontrol dengan `continue` jika file final tetap tidak ditemukan

- Menambahkan komentar level-fungsi (docblock) pada `previewLaporan`:
  - Menjelaskan tanggung jawab fungsi dalam menghasilkan PDF atau unduhan foto
  - Menjelaskan skenario fallback path dan tujuan mengurangi gambar hilang
  - Mendokumentasikan parameter dan bentuk nilai kembali respons
2025-11-07 10:57:46 +07:00
Daeng Deni Mardaeni
a442f879b7 🔧(services): Perbaikan logika preview laporan dan format saran pada print-out
- **PreviewLaporanService.php**:
  - Menambahkan parsing JSON untuk mig_permohonan sebelum digunakan
  - Memperbaiki kondisi untuk menentukan statusLpj dengan menambahkan validasi nilai pasar < 1
  - Meningkatkan logika penentuan path foto berdasarkan status memo dan nilai total pasar wajar

- **print-out-standar.blade.php**:
  - Memindahkan header tabel 'SARAN' keluar dari loop foreach untuk mencegah duplikasi header
  - Menambahkan format list (ul/li) pada tampilan saran untuk meningkatkan readability
  - Menambahkan margin-top 20px pada section penutup laporan untuk spacing yang lebih baik
  - Memperbaiki struktur HTML dengan wrapping konten saran dalam list item
2025-10-31 10:07:02 +07:00
Daeng Deni Mardaeni
796cb89d21 🔧(penilai): Perbaikan layout dan validasi data pada komponen laporan
- **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.
2025-10-30 14:00:49 +07:00
Daeng Deni Mardaeni
fb22d370b5 🔧(penilai): Perbaikan tampilan dan logika fallback foto jaminan
Implementasi berbagai perbaikan pada komponen penilai dan foto jaminan:

**Detail Lokasi (detail-lokasi.blade.php):**
- Menambahkan logika untuk menghindari duplikasi label yang sama
- Implementasi tracking currentKey untuk mencegah label berulang
- Perbaikan tampilan tabel dengan label yang lebih bersih

**Footer (footer.blade.php):**
- Perbaikan indentasi dan formatting kode
- Reorganisasi array customLabels untuk konsistensi
- Perbaikan struktur conditional untuk upload_gs

**Foto Jaminan (foto-jaminan.blade.php):**
- Implementasi sistem fallback path untuk file foto yang tidak ditemukan
- Logika fallback: surveyor/2025/APRIL/26042025/251051/251051_2_2.png → surveyor/001/251051/251051_2_2.png
- Penambahan urutan kategori foto yang diinginkan (BLAD TATA KOTA sebelum FOTO JAMINAN)
- Skip kategori DOKUMEN PENDUKUNG dari tampilan utama
- Perbaikan class ordering (border photo-item)
- Update alt attribute untuk menggunakan pathToUse
- Penambahan debug @dd untuk otherPhotos (sementara)

**Print Out Sederhana (print-out-sederhana.blade.php):**
- Perbaikan tampilan Total Nilai Pasar Wajar dengan colspan yang benar
- Restructuring tabel NPW tambahan dengan width yang tepat
- Perbaikan alignment dan formatting nilai
- Update parameter signature-approval dengan npw
- Perbaikan tampilan Total Nilai Likuidasi
- Penambahan tanda '--' pada SARANA PELENGKAP DAN LINGKUNGAN

**Print Out Standar (print-out-standar.blade.php):**
- Implementasi logika untuk menghindari duplikasi label
- Perbaikan struktur tabel dengan width 100%
- Update tracking currentLabel untuk konsistensi tampilan
2025-10-29 10:50:13 +07:00
Daeng Deni Mardaeni
478c0c8079 🔧(helpers): Tambah fungsi parseTimestamp & perbaiki parsing tanggal
- Tambah fungsi parseTimestamp di app/Helpers/Lpj.php untuk parsing timestamp yang robust
- Gunakan native PHP DateTime & fallback ke Carbon untuk multiple format
- Validasi lengkap day, month, year, hour, minute, second dengan range aman
- Support format: Y-m-d H:i:s, Y-m-d, d/m/Y H:i:s, d/m/Y, d-m-Y, j-n-Y, dll
- Tambah logging detail & trim whitespace untuk reliability tinggi
- Return selalu format Y-m-d H:i:s agar konsisten di seluruh sistem
- signature-approval.blade.php gunakan parseTimestamp() untuk mig_mst_jaminan_tgl_laporan
- Tanggal migrasi kini diparsing & diformat dengan lebih akurat
- Hasil: parsing timestamp konsisten, error handling lebih kuat, dan log lebih informatif
2025-10-28 14:02:50 +07:00
Daeng Deni Mardaeni
73d0d238c0 🔧(penilai): Perbaiki total nilai & signature approval
- Gabungkan header 'Total Nilai Pasar Wajar' dengan colspan=2
- Gunakan nilai likuidasi default 70% & data migrasi mig_mst_lpj_tot_nilai_likuidasi
- Tambah parameter laporan='sederhana' pada include signature-approval
- Perbaiki layout tabel di print-out-sederhana & print-out-standar
- Tambah parsing mig_permohonan dengan json_decode untuk data migrasi
- Sesuaikan width kolom agar tampilan lebih proporsional
- Hilangkan Carbon::createFromFormat & tambah kondisi laporan di signature-approval
- Tampilkan SENIOR OFFICER untuk laporan sederhana, EO untuk standar
2025-10-28 13:40:11 +07:00
Daeng Deni Mardaeni
d6d0ed28b9 🔧(penilai): Perbaiki logika approval & tanggal laporan
- Nonaktifkan filter dokument_id di PreviewLaporanService untuk fleksibilitas
- Tambah kondisi tampilkan DD hanya jika berbeda dengan EO
- Gunakan tanggal mig_mst_jaminan_tgl_laporan sebagai sumber utama
- Perbaiki logika nama & tanggal approval SO
- Gunakan Carbon::createFromFormat untuk parsing tanggal migrasi
- Tambah validasi kondisional agar tidak duplikasi approval
- Rapikan struktur HTML & indentasi signature-approval.blade.php
- Pastikan konsistensi data antara preview service & signature view
- Hasil: tampilan signature lebih akurat & sesuai data migrasi
2025-10-28 12:33:25 +07:00
Daeng Deni Mardaeni
ee828455a9 🗑️(penilai): Menghapus section perhitungan nilai pasar wajar otomatis
Menghapus loop perhitungan nilai pasar wajar otomatis dari labelNilai pada komponen print-out laporan untuk memberikan kontrol manual yang lebih baik.

Perubahan yang dilakukan:

1. Print-out Sederhana (print-out-sederhana.blade.php)
- Menghapus foreach loop untuk labelNilai yang menampilkan perhitungan otomatis
- Menghapus 18 baris kode yang menghandle luas dan nilai per kategori
- Mempertahankan section npw_tambahan dengan perbaikan styling width
- Memperbaiki alignment dan width konsistensi pada tabel

2. Print-out Standar (print-out-standar.blade.php)
- Menghapus foreach loop untuk labelNilai yang sama
- Menghapus 18 baris kode perhitungan otomatis nilai pasar wajar
- Mempertahankan section npw_tambahan dengan styling yang diperbaiki
- Memperbaiki width property pada td element (menambahkan spasi)
2025-10-27 18:18:51 +07:00
Daeng Deni Mardaeni
a6481dd482 🔧(penilai): Perbaiki tampilan laporan & tambah fitur saran
- PreviewLaporanService.php:
  - Aktifkan kembali filter dokument_id untuk query Penilai
  - Tambahkan validasi dokumen ID agar data yang diambil tepat
  - Perbaiki logika pengambilan status LPJ untuk akurasi laporan

- informasi.blade.php:
  - Tambahkan section baru untuk menampilkan data saran dari form inspeksi
  - Implementasi loop untuk menampilkan banyak saran (array/string)
  - Styling tabel saran dengan border & alignment konsisten

- print-out-sederhana.blade.php:
  - Hilangkan koma awal di nilai dengan ltrim() untuk tampilan bersih
  - Konsistensi format antar section laporan

- print-out-standar.blade.php:
  - Tambah field 'Fasilitas Kredit' dan 'Alamat & Telepon Debitur'
  - Perbaiki logika total nilai pasar wajar dengan conditional formatting
  - Tambah section saran yang konsisten dengan komponen lain
  - Hapus semicolon berlebih (syntax fix)

- signature-approval.blade.php:
  - Ubah sumber tanggal dari updated_at ke tanggal_kunjungan untuk akurasi
2025-10-27 15:13:35 +07:00
Daeng Deni Mardaeni
cbf54353f4 (slik): Tambahkan halaman index SLIK untuk admin kredit
- Tambah halaman index SLIK di modul admin kredit untuk manajemen data Sistem Layanan Informasi Keuangan
- Buat tabel data dengan kolom: Sandi Bank, Tahun, No Rekening, CIF, Nama Debitur, Kolektibilitas, Fasilitas, Nilai Agunan, dan Status
- Implementasi pencarian keyword serta filter tahun, bulan, dan status agunan
- Tambahkan tombol aksi 'Detail' untuk melihat data lengkap
- Tambahkan fitur import dari Excel (.xlsx/.xls/.csv) dengan validasi format & file size ≤ 10MB
- Tambahkan fitur export Excel berdasarkan filter aktif
- Tambahkan tombol download template Excel untuk panduan format import
- Implementasi fungsi truncate/hapus semua data SLIK dengan modal konfirmasi
- Tambahkan validasi kombinasi unik (sandi bank, tahun, bulan, no rekening) untuk update data otomatis
- Gunakan KTDataTable dengan server-side processing, layout responsif, dan scroll horizontal
- Tambahkan modal import & modal konfirmasi hapus
- Tambahkan breadcrumbs, event listener untuk pencarian/filter, dan CSRF protection
- Implementasi validasi keamanan file upload dan pesan error/success
2025-10-23 16:59:47 +07:00
Daeng Deni Mardaeni
a701e78982 🔧 fix(LPJ): Perbaikan logika preview laporan dan optimasi import service
Perubahan utama pada PreviewLaporanService.php:
- Mengoptimalkan urutan import dengan mengelompokkan berdasarkan namespace
- Memperbaiki logika tanggal laporan untuk data migrasi dengan fallback ke tgl_create
- Menghapus filter dokument_id pada query LPJ untuk fleksibilitas
- Menambahkan penanganan khusus untuk tipe laporan 'memo' pada data migrasi
- Menambahkan validasi file path untuk download dokumen memo
- Memperbaiki kondisi pengecekan memo untuk non-migrasi data

Perubahan pada print-out-standar.blade.php:
- Menyembunyikan baris header dokumen yang menyebabkan duplikasi tampilan
- Menambahkan fungsi ltrim untuk membersihkan koma di awal nilai data

Perubahan ini meningkatkan stabilitas dan akurasi tampilan preview laporan,\nserta memperbaiki penanganan data migrasi dan memo khusus.
2025-10-23 14:35:12 +07:00
Daeng Deni Mardaeni
6305f93f0f fix(LPJ): Perbaikan label luas unit untuk jenis aset Apartemen
Mengubah label dari 'Luas Tanah' menjadi 'Luas Unit' untuk jenis aset Apartemen:
- Menambahkan kondisi baru untuk mengecek jika jenis aset adalah "Apartemen"
- Mengubah label `$labelNilai['tanah']` menjadi 'Luas Unit' untuk apartemen
- Menambahkan 'apartemen' ke dalam array mapping label dengan nilai 'Luas Unit'
- Memperbaiki indentasi kode untuk konsistensi format
2025-10-22 11:54:28 +07:00
Daeng Deni Mardaeni
6ed4e8ba41 🐛 fix(print): Perbaiki tampilan laporan standar & pembanding migrasi" -m "
- print-out-standar.blade.php: koreksi relasi cabang ke \$permohonan->branch->name
- print-out-standar.blade.php: koreksi tujuan penilaian ke \$permohonan->tujuanPenilaian->name
- print-out-standar.blade.php: perbaiki guard dokumen dengan @if(isset(\$dokumen))
- print-out-standar.blade.php: tambah baris 'Jenis Jaminan' khusus data migrasi (is_mig)
- print-out-standar.blade.php: sembunyikan section tertentu saat is_mig untuk konsistensi
- print-out-standar.blade.php: tampilkan Faktor Positif/Negatif/Lain-lain dari forminspeksi (dukungan array/string) dengan tabel ber-border & nl2br(e())
- print-pembanding.blade.php: render keterangan pembanding pakai {!! nl2br(e(parsePembandingMigration(...))) !!} agar line break tampil
- app/Helpers/Lpj.php: update parsePembandingMigration → pecah konten dengan tanda '#' jadi baris baru, trim, hapus baris kosong
- Konsolidasi formatting (spacing, border tabel) agar output rapi untuk kasus migrasi/non-migrasi
2025-10-21 17:24:20 +07:00
Daeng Deni Mardaeni
6b0022deed 🐛 fix(print): Hapus suffix angka dari key informasi dokumen" -m "
- print-out-sederhana.blade.php: gunakan preg_replace('/_([2-5])$/', '', $key) untuk hapus suffix angka di akhir key
- Pastikan key seperti 'nomor_2', 'tanggal_3', dst. tampil tanpa angka (jadi 'nomor', 'tanggal')
- Penyesuaian dilakukan hanya pada tampilan, tidak mempengaruhi nilai data
- Menangani data migrasi dengan struktur key numerik agar tampil lebih rapi
- Tampilan informasi dokumen jadi lebih bersih, konsisten, dan mudah dibaca
2025-10-20 15:47:10 +07:00
Daeng Deni Mardaeni
ae5a9ce5b7 🐛 fix(signature): Tangani SO/EO sama & perbaiki fallback tanggal migrasi" -m "
- signature-approval.blade.php: tambahkan kondisi SO==EO → render 1 kolom 'Diperiksa dan Menyetujui' (pakai jabatan EO)
- signature-approval.blade.php: bila SO≠EO → render kolom terpisah 'Diperiksa' (SO) & 'Menyetujui' (EO) seperti sebelumnya
- signature-approval.blade.php: jaga konsistensi label/jabatan & area tanda tangan agar tidak redundan
- PreviewLaporanService: ubah urutan fallback tanggal migrasi → tgl_laporan → tgl_oto → null
- PreviewLaporanService: parsing tanggal migrasi via Carbon::createFromFormat('d/m/Y H:i:s') → 'Y-m-d H:i:s'
- Akurasi tanggal laporan meningkat karena tgl_oto merefleksikan tanggal otorisasi/approval
- Tampilan blok signature lebih rapi pada kasus SO/EO sama; hilangkan duplikasi informasi
- Backward-compatible: perilaku SO≠EO & data non-migrasi tidak berubah
2025-10-20 10:47:49 +07:00
Daeng Deni Mardaeni
c8b5fcc9d1 🐛 fix(ui-print): Format nilai pasar wajar & tampilkan fakta migrasi
- Terapkan number_format(ID) (0 desimal, ',' desimal, '.' ribuan) untuk nilai pasar wajar Bagian 1
- print-out-sederhana: format nilai per kategori & nilai perbandingan (Bagian 1)
- print-out-standar: format nilai per kategori, nilai perbandingan (Bagian 1), dan nilai likuidasi
- Tambah section fakta khusus permohonan migrasi (is_mig) dengan tabel 'judul' per kategori
- Support konten fakta sebagai array/string; render dinamis & rapi
- Perbaiki logika tanggal laporan migrasi: fallback tgl_laporan → tgl_create → null
- Parsing tanggal migrasi via Carbon::createFromFormat('d/m/Y H:i:s') → 'Y-m-d H:i:s'
- Jaga konsistensi & keterbacaan angka besar (ribuan–miliaran) di semua laporan
2025-10-20 08:30:31 +07:00
Daeng Deni Mardaeni
2937add646 🐛 fix(ui-print): Format nilai pasar wajar & perbaiki hitung hari kerja migrasi
- Terapkan number_format(ID) untuk nilai pasar wajar (0 desimal, ',' desimal, '.' ribuan)
- print-out-sederhana: format nilai per kategori & nilai perbandingan agar konsisten
- print-out-standar: format nilai per kategori, nilai perbandingan, dan total nilai pasar wajar
- Ganti perhitungan manual floor/diffInDays menjadi fungsi hitungHariKerja() yang akurat
- Parsing tanggal migrasi pakai Carbon::createFromFormat('d/m/Y H:i:s', ...) sebelum dihitung
- Tata ulang tampilan informasi Dinas Tata Ruang: wrapper tabel 'judul', struktur tabel rapi, <br> untuk array
- Inisialisasi $totalNilaiPasarWajar = 0 dan akumulasi nilai kategori + perbandingan dengan fallback kalkulasi
- Pastikan konsistensi format angka di seluruh laporan & fallback bila data backend tidak tersedia
- Uji: verifikasi format ribuan/jutaan, akurasi hari kerja (migrasi/non-migrasi), dan total nilai terhitung benar
2025-10-16 10:04:40 +07:00
Daeng Deni Mardaeni
b83920d8aa 🐛(ui-print): Perbaiki struktur kondisional & penempatan elemen tabel
- Memperbaiki urutan kondisi @if/@else untuk penanganan data alamat pada print-out-sederhana.blade.php
- Memindahkan blok kode ke posisi tabel yang lebih logis dan konsisten
- Menghapus kode komentar dan duplikasi yang tidak digunakan
- Menyesuaikan penempatan baris 'Atas Nama' ke dalam kondisi yang sesuai
- Menata ulang elemen NIB agar berada dalam struktur tabel yang benar
- Memperbaiki indentasi dan format HTML untuk keterbacaan yang lebih baik
- Menjamin konsistensi tampilan print-out untuk berbagai kondisi data
- Mengurangi potensi error dari struktur kondisi yang tidak sinkron
- File diubah: resources/views/penilai/components/print-out-sederhana.blade.php
2025-10-15 08:31:08 +07:00
Daeng Deni Mardaeni
c6596cdea0 feat(ui-penilai): Tambah tampilan legalitas jaminan untuk data migrasi
Perubahan ini menambahkan fitur tampilan legalitas jaminan khusus untuk permohonan migrasi dan memperbaiki penanganan data informasi dinas tata ruang.

## Perubahan Utama:

### 1. Tampilan Legalitas Jaminan Migrasi (print-out-standar.blade.php)
- Menambahkan section khusus untuk menampilkan data legalitas jaminan dari migrasi
- Menggunakan data `mig_detail_legalitas_jaminan` yang di-decode dari JSON
- Menampilkan data dalam format tabel dengan label dan value yang terstruktur
- Menambahkan kondisi `@if ($permohonan->is_mig)` untuk hanya menampilkan pada permohonan migrasi

### 2. Penanganan Data Informasi Dinas Tata Ruang (informasi.blade.php)
- Memperbaiki penanganan data yang bisa berupa array atau string tunggal
- Menambahkan pengecekan `is_array($item)` sebelum melakukan loop
- Menambahkan fallback untuk menampilkan data langsung jika bukan array
- Memastikan tampilan tetap konsisten baik untuk data array maupun string

### 3. Kondisi Tampilan Form Kategori
- Menambahkan kondisi `@if(!$permohonan->is_mig)` untuk menyembunyikan form kategori tertentu pada permohonan migrasi
- Memastikan tampilan yang sesuai untuk jenis permohonan yang berbeda
2025-10-14 14:49:06 +07:00
Daeng Deni Mardaeni
c981237663 (ui-penilai): Konsolidasi tampilan migrasi, fallback user, dan label tanggal penilaian
- Menyesuaikan tampilan & logika untuk data permohonan hasil migrasi (is_mig)
- Tambahkan fallback user untuk SO, EO, dan DD agar nama tetap muncul meski data tidak lengkap
- Ubah label 'Tanggal Survei' menjadi 'Tanggal Penilaian' untuk konsistensi di seluruh halaman
- Perbaiki struktur & border tabel tanda tangan approval, tambahkan bold pada jabatan
- Sesuaikan kondisi tombol laporan agar hanya bergantung pada status_bayar
- Tambahkan logika decode mig_permohonan di print-out-sederhana untuk data migrasi
- Tambahkan fallback AO name dari data migrasi dan perhitungan hari kerja khusus is_mig
- Perbaiki struktur HTML, indentasi, dan formatting di semua view terkait
- File diubah: laporan/index, analisa/informasi, signature-approval, show, print-out-sederhana
2025-10-13 16:46:43 +07:00
Daeng Deni Mardaeni
291811b74a (service): Tambah migrasi tgl_laporan untuk permohonan is_mig & fallback dataPembanding
- Menambahkan logika penyesuaian tanggal laporan untuk permohonan hasil migrasi (is_mig)
- Gunakan mig_mst_jaminan_tgl_laporan jika is_mig = true, fallback ke lpj->created_at jika false
- Tambahkan inisialisasi dataPembanding = '' sebagai default untuk mencegah undefined variable
- Tambahkan variabel mig_permohonan untuk mempermudah akses data hasil migrasi
- Menambahkan logging decode mig_permohonan dan fallback tgl_laporan untuk debugging
- Menjaga konsistensi tanggal laporan antara data migrasi dan data baru
- Meningkatkan stabilitas render preview laporan untuk permohonan tanpa inspeksi
- File yang diubah: app/Services/PreviewLaporanService.php
- Kompatibel dengan Laravel 12, PHP 8.3, PostgreSQL
2025-10-13 16:43:30 +07:00
Daeng Deni Mardaeni
2d8bddff42 ♻️(refactor): Penamaan label, logging komprehensif, transaksi DB, komentar fungsi, dan idempotensi seeder
- Mengubah label 'Tanggal Survei' menjadi 'Tanggal Penilaian' di seluruh view Penilai & komponen cetak
- Menambahkan logging detail di setiap tahap proses (awal, validasi, eksekusi, return) pada controller, service, dan request
- Menerapkan transaksi database (begin, commit, rollback) di operasi tulis untuk konsistensi data (PostgreSQL)
- Menambahkan komentar fungsi (PHPDoc) di semua controller, service, dan model utama
- Menyederhanakan query dan filter laporan pada LaporanController dengan logging tambahan
- Menambahkan idempotensi pada semua seeder dengan updateOrCreate dan normalisasi delimiter CSV
- Meningkatkan robustness parsing timestamp multi-format dan logging batch proses seeding
- Menata ulang tampilan laporan, nilai plafond, dan penilai agar label dan UI konsisten
- Memastikan semua operasi penting tercatat di log dengan konteks user dan parameter penting
2025-10-10 23:48:15 +07:00
18 changed files with 1332 additions and 711 deletions

View File

@@ -533,7 +533,6 @@
} }
function parsePembandingMigration($keterangan) { function parsePembandingMigration($keterangan) {
$keterangan = preg_replace('/[-]{5,}/', '',$keterangan); // Hapus ------ $keterangan = preg_replace('/[-]{5,}/', '',$keterangan); // Hapus ------
$keterangan = preg_replace('/[.]{5,}/', '',$keterangan); // Hapus ..... $keterangan = preg_replace('/[.]{5,}/', '',$keterangan); // Hapus .....
@@ -553,6 +552,9 @@ function parsePembandingMigration($keterangan) {
return 'Rp. ' . number_format((int)$angka, 0, ',', '.'); return 'Rp. ' . number_format((int)$angka, 0, ',', '.');
}, $line); }, $line);
// Jika ada tanda pagar (#), pisahkan menjadi baris baru
$line = str_replace('#', "\n#", $line);
$cleaned[] = $line; $cleaned[] = $line;
} }
} }
@@ -593,3 +595,97 @@ function parsePembandingMigration($keterangan) {
} }
return $path; return $path;
} }
function parseTimestamp(?string $timestamp): ?string
{
if (!$timestamp) {
return null;
}
// Trim whitespace dan normalize
$timestamp = trim($timestamp);
// Log untuk debugging
Log::info('Mencoba parsing timestamp: "' . $timestamp . '"');
// Parsing dengan DateTime native PHP untuk lebih robust
try {
// Pattern untuk format d/m/Y H:i:s
if (preg_match('/^(\d{1,2})\/(\d{1,2})\/(\d{4})\s+(\d{1,2}):(\d{1,2}):(\d{1,2})$/', $timestamp, $matches)) {
$day = (int) $matches[1];
$month = (int) $matches[2];
$year = (int) $matches[3];
$hour = (int) $matches[4];
$minute = (int) $matches[5];
$second = (int) $matches[6];
// Validasi nilai
if ($day >= 1 && $day <= 31 && $month >= 1 && $month <= 12 && $year >= 1900 && $year <= 2100 &&
$hour >= 0 && $hour <= 23 && $minute >= 0 && $minute <= 59 && $second >= 0 && $second <= 59) {
// Buat DateTime object langsung
$dateTime = new \DateTime();
$dateTime->setDate($year, $month, $day);
$dateTime->setTime($hour, $minute, $second);
$result = $dateTime->format('Y-m-d H:i:s');
Log::info('Berhasil parsing dengan DateTime: ' . $timestamp . ' -> ' . $result);
return $result;
}
}
// Pattern untuk format d/m/Y tanpa waktu
if (preg_match('/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/', $timestamp, $matches)) {
$day = (int) $matches[1];
$month = (int) $matches[2];
$year = (int) $matches[3];
// Validasi nilai
if ($day >= 1 && $day <= 31 && $month >= 1 && $month <= 12 && $year >= 1900 && $year <= 2100) {
// Buat DateTime object langsung
$dateTime = new \DateTime();
$dateTime->setDate($year, $month, $day);
$dateTime->setTime(0, 0, 0);
$result = $dateTime->format('Y-m-d H:i:s');
Log::info('Berhasil parsing tanpa waktu dengan DateTime: ' . $timestamp . ' -> ' . $result);
return $result;
}
}
} catch (\Exception $e) {
Log::error('Gagal parsing dengan DateTime: ' . $timestamp . '. Error: ' . $e->getMessage());
}
// Fallback ke format Carbon standar untuk format lainnya
$formats = [
'Y-m-d H:i:s',
'Y-m-d',
'd-m-Y H:i:s',
'd-m-Y',
'j-n-Y H:i:s',
'j-n-Y',
];
foreach ($formats as $format) {
try {
$carbon = \Carbon\Carbon::createFromFormat($format, $timestamp);
if ($carbon && $carbon->format($format) === $timestamp) {
// Jika format tidak mengandung waktu, set ke awal hari
if (!str_contains($format, 'H:i:s')) {
$carbon = $carbon->startOfDay();
}
Log::info('Berhasil parsing dengan format ' . $format . ': ' . $timestamp . ' -> ' . $carbon->toDateTimeString());
return $carbon->toDateTimeString();
}
} catch (\Exception $e) {
// Lanjut ke format berikutnya
continue;
}
}
Log::error('Tidak dapat memparsing timestamp dengan format apapun: "' . $timestamp . '"');
return null;
}

View File

@@ -75,11 +75,9 @@ class LaporanController extends Controller
} }
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query()->whereIn('status',['proses-laporan','done', 'paparan', 'proses-paparan'])->whereNotNull('approval_so_at')->whereNotNull('approval_eo_at')->where(function ($q) { $query = Permohonan::query()
$q->whereIn('nilai_plafond_id', [1,4]) ->whereIn('status',['proses-laporan','done', 'paparan', 'proses-paparan']);
->whereNotNull('approval_dd_at')
->orWhereIn('nilai_plafond_id', [2,3]);
});
$query = $query->orderBy('nomor_registrasi', 'desc'); $query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided // Apply search filter if provided

View File

@@ -697,15 +697,17 @@ class PenilaiController extends Controller
'lokasi_lengkap' => $data->lokasi_lengkap ?? '', 'lokasi_lengkap' => $data->lokasi_lengkap ?? '',
]; ];
// Extract data pembanding if(isset($dataPembanding)){
if (isset($dataPembanding['data_pembanding'])) { // Extract data pembanding
foreach ($dataPembanding['data_pembanding'] as $index => $pembanding) { if (isset($dataPembanding['data_pembanding'])) {
if ($index == 0) { foreach ($dataPembanding['data_pembanding'] as $index => $pembanding) {
$exportData['pembanding1'] = $pembanding; if ($index == 0) {
} elseif ($index == 1) { $exportData['pembanding1'] = $pembanding;
$exportData['pembanding2'] = $pembanding; } elseif ($index == 1) {
} elseif ($index == 2) { $exportData['pembanding2'] = $pembanding;
$exportData['pembanding3'] = $pembanding; } elseif ($index == 2) {
$exportData['pembanding3'] = $pembanding;
}
} }
} }
} }

View File

@@ -14,7 +14,7 @@ class Inspeksi extends Base
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
*/ */
protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','dokument_id','data_pembanding']; protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','dokument_id','data_pembanding','mig_detail_data_jaminan'];
public function permohonan() public function permohonan()
{ {

View File

@@ -2,76 +2,93 @@
namespace Modules\Lpj\Services; namespace Modules\Lpj\Services;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\LaporanExternal; use Carbon\Carbon;
use Modules\Lpj\Models\Permohonan; use App\Helpers\Lpj;
use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\Surveyor;
use Modules\Lpj\Models\BentukTanah;
use Modules\Lpj\Models\KonturTanah;
use Modules\Location\Models\Province;
use Modules\Location\Models\City;
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\Perizinan;
use Modules\Lpj\Models\KetinggianTanah;
use Modules\Lpj\Models\SifatBangunan;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisBangunan;
use Modules\Lpj\Models\KondisiBangunan;
use Modules\Lpj\Models\SpekBangunan;
use Modules\Lpj\Models\SpekKategoritBangunan;
use Modules\Lpj\Models\SaranaPelengkap;
use Modules\Lpj\Models\ArahMataAngin;
use Modules\Lpj\Models\Analisa;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\PerkerasanJalan;
use Modules\Lpj\Models\AnalisaFakta;
use Modules\Lpj\Models\AnalisaLingkungan;
use Modules\Lpj\Models\AnalisaTanahBagunan;
use Modules\Lpj\Models\SpekBangunanAnalisa;
use Modules\Lpj\Models\Denah; use Modules\Lpj\Models\Denah;
use Modules\Lpj\Models\FotoJaminan;
use Modules\Lpj\Models\Lingkungan;
use Modules\Lpj\Models\LantaiUnit;
use Modules\Lpj\Models\Teams; use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\Lantai; use Modules\Lpj\Models\Lantai;
use Barryvdh\DomPDF\Facade\Pdf;
use Modules\Lpj\Models\Analisa;
use Modules\Lpj\Models\Penilai;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\Inspeksi; use Modules\Lpj\Models\Inspeksi;
use Modules\Lpj\Models\Surveyor;
use Modules\Lpj\Models\ViewUnit; use Modules\Lpj\Models\ViewUnit;
use Modules\Location\Models\City;
use Modules\Lpj\Models\JenisUnit; use Modules\Lpj\Models\JenisUnit;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\Perizinan;
use Modules\Lpj\Models\BentukUnit; use Modules\Lpj\Models\BentukUnit;
use Modules\Lpj\Models\PosisiUnit;
use Modules\Lpj\Models\TerletakArea;
use Modules\Lpj\Models\FasilitasObjek;
use Modules\Lpj\Models\MerupakanDaerah;
use Modules\Lpj\Models\ObjekJaminan;
use Modules\Lpj\Models\ModelAlatBerat;
use Modules\Lpj\Models\JenisPesawat;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\JenisKapal; use Modules\Lpj\Models\JenisKapal;
use Modules\Lpj\Models\JenisKendaraan; use Modules\Lpj\Models\LantaiUnit;
use Modules\Lpj\Models\Lingkungan;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PosisiUnit;
use Illuminate\Support\Facades\Log;
use Modules\Lpj\Models\AnalisaUnit;
use Modules\Lpj\Models\BentukTanah;
use Modules\Lpj\Models\FotoJaminan;
use Modules\Lpj\Models\KonturTanah;
use Modules\Lpj\Models\RuteJaminan; use Modules\Lpj\Models\RuteJaminan;
use Modules\Location\Models\Village;
use Modules\Lpj\Models\AnalisaFakta;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisPesawat;
use Modules\Lpj\Models\ObjekJaminan;
use Modules\Lpj\Models\SpekBangunan;
use Modules\Lpj\Models\TerletakArea;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Lpj\Models\ArahMataAngin;
use Modules\Lpj\Models\JenisBangunan;
use Modules\Lpj\Models\PosisiKavling;
use Modules\Lpj\Models\SifatBangunan;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\FasilitasObjek;
use Modules\Lpj\Models\JenisKendaraan;
use Modules\Lpj\Models\ModelAlatBerat;
use Modules\Lpj\Models\KetinggianTanah;
use Modules\Lpj\Models\KondisiBangunan;
use Modules\Lpj\Models\LaporanExternal;
use Modules\Lpj\Models\MerupakanDaerah;
use Modules\Lpj\Models\PerkerasanJalan;
use Modules\Lpj\Models\SaranaPelengkap;
use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Models\FotoObjekJaminan;
use Modules\Lpj\Models\LaluLintasLokasi;
use Modules\Lpj\Models\TingkatKeramaian;
use Modules\Lpj\Models\AnalisaLingkungan;
use Modules\Lpj\Models\KondisiFisikTanah;
use Modules\Lpj\Models\AnalisaTanahBagunan;
use Modules\Lpj\Models\GolonganMasySekitar;
use Modules\Lpj\Models\SpekBangunanAnalisa;
use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\SpekKategoritBangunan;
use Modules\Lpj\Http\Requests\SurveyorRequest;
use Modules\Lpj\Models\HubunganPemilikJaminan; use Modules\Lpj\Models\HubunganPemilikJaminan;
use Modules\Lpj\Models\HubunganPenghuniJaminan; use Modules\Lpj\Models\HubunganPenghuniJaminan;
use Modules\Lpj\Models\AnalisaUnit;
use Modules\Lpj\Models\GolonganMasySekitar;
use Modules\Lpj\Models\TingkatKeramaian;
use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Models\LaluLintasLokasi;
use Modules\Lpj\Models\SpekBagunanAnalisaDetail; use Modules\Lpj\Models\SpekBagunanAnalisaDetail;
use Modules\Lpj\Http\Requests\SurveyorRequest;
use Modules\Lpj\Http\Requests\FormSurveyorRequest;
use Modules\Lpj\Jobs\SendJadwalKunjunganEmailJob; use Modules\Lpj\Jobs\SendJadwalKunjunganEmailJob;
use App\Helpers\Lpj; use Modules\Lpj\Http\Requests\FormSurveyorRequest;
use Modules\Lpj\Models\Penilai;
use Barryvdh\DomPDF\Facade\Pdf;
class PreviewLaporanService class PreviewLaporanService
{ {
/**
* Preview Laporan dan unduh foto terkait dengan logika fallback path.
*
* Menghasilkan PDF atau paket unduhan foto berdasarkan status laporan.
* Jika file foto asli tidak ditemukan dan status LPJ adalah 1, maka
* sistem akan mencoba menggunakan fallback path dengan pola
* `surveyor/001/{lastTwoParts}` untuk meminimalisir gambar hilang.
*
* @param int $permohonan_id ID Permohonan
* @param int $dokumen_id ID Dokumen
* @param int $jaminan_id ID Jaminan
* @param string $back URL atau rute kembali
* @return \Symfony\Component\HttpFoundation\Response
*/
public function previewLaporan($permohonan_id, $dokumen_id, $jaminan_id, $back) public function previewLaporan($permohonan_id, $dokumen_id, $jaminan_id, $back)
{ {
$permohonan = $this->getPermohonanJaminanId( $permohonan = $this->getPermohonanJaminanId(
@@ -90,14 +107,19 @@ class PreviewLaporanService
$inspeksi = Inspeksi::where('permohonan_id', $permohonan_id)->where('dokument_id', $dokumen_id)->first(); $inspeksi = Inspeksi::where('permohonan_id', $permohonan_id)->where('dokument_id', $dokumen_id)->first();
$lpj = Penilai::where('permohonan_id', $permohonan_id)->where('dokument_id', $dokumen_id)->first(); $lpj = Penilai::where('permohonan_id', $permohonan_id)->where('dokument_id', $dokumen_id)->first();
$mig_permohonan = json_decode($permohonan->mig_permohonan);
$nomorLaporan = getNomorLaporan($permohonan_id, $dokumen_id); $nomorLaporan = getNomorLaporan($permohonan_id, $dokumen_id);
$tanggalLaporan = $lpj->created_at ?? null; $tanggalLaporan = $permohonan->is_mig
? ($mig_permohonan->mig_mst_jaminan_tgl_laporan ?? $mig_permohonan->mig_mst_jaminan_tgl_create ?? null)
: ($lpj->created_at ?? null);
$forminspeksi = null; $forminspeksi = null;
$lpjData = null; $lpjData = null;
$formFoto = null; $formFoto = null;
// if ($inspeksi) { // if ($inspeksi) {
$forminspeksi = json_decode($inspeksi?->data_form, true) ?? null; $forminspeksi = json_decode($inspeksi?->data_form, true) ?? null;
$formFoto = json_decode($inspeksi?->foto_form, true) ?? null; $formFoto = json_decode($inspeksi?->foto_form, true) ?? null;
// $denahForm = json_decode($data->denah_form, true); // $denahForm = json_decode($data->denah_form, true);
$dataPembanding = json_decode($inspeksi?->data_pembanding, true) ?? null; $dataPembanding = json_decode($inspeksi?->data_pembanding, true) ?? null;
@@ -129,12 +151,13 @@ class PreviewLaporanService
public function printOutLaporan($permohonan_id, $document_id, $jaminan_id) public function printOutLaporan($permohonan_id, $document_id, $jaminan_id)
{ {
$tipeLaporanResponse = $this->checkPrintOutLaporan($permohonan_id, $document_id); $tipeLaporanResponse = $this->checkPrintOutLaporan($permohonan_id, $document_id);
$tipeLaporan = $tipeLaporanResponse->getData(); $tipeLaporan = $tipeLaporanResponse->getData();
//dd($permohonan_id, $document_id, $tipeLaporan);
if (!$tipeLaporan->status) { if (!$tipeLaporan->status) {
return redirect()->back()->with('error', 'Laporan tidak valid'); //return redirect()->back()->with('error', 'Laporan tidak valid');
} }
$permohonan = $this->getPermohonanJaminanId( $permohonan = $this->getPermohonanJaminanId(
$permohonan_id, $permohonan_id,
@@ -145,15 +168,27 @@ class PreviewLaporanService
$basicData = $this->getCommonData(); $basicData = $this->getCommonData();
$inspeksi = Inspeksi::where('permohonan_id', $permohonan_id)->where('dokument_id', $document_id)->first(); $inspeksi = Inspeksi::where('permohonan_id', $permohonan_id)->where('dokument_id', $document_id)->first();
$lpj = Penilai::where('permohonan_id', $permohonan_id)->where('dokument_id', $document_id)->first(); $lpj = Penilai::where('permohonan_id', $permohonan_id)->first(); //->where('dokument_id', $document_id)->first();
$mig_permohonan = json_decode($permohonan->mig_permohonan);
$nomorLaporan = getNomorLaporan($permohonan_id, $document_id); $nomorLaporan = getNomorLaporan($permohonan_id, $document_id);
$tanggalLaporan = $lpj->created_at ?? null;
//Carbon::createFromFormat('d/m/Y H:i:s', $mig_permohonan->mig_mst_jaminan_tgl_laporan)->format('Y-m-d H:i:s');
$tanggalLaporan = $permohonan->is_mig
? ($mig_permohonan->mig_mst_jaminan_tgl_laporan
? Carbon::createFromFormat('d/m/Y H:i:s', $mig_permohonan->mig_mst_jaminan_tgl_laporan)->format('Y-m-d H:i:s')
: ($mig_permohonan->mig_mst_jaminan_tgl_oto
? Carbon::createFromFormat('d/m/Y H:i:s', $mig_permohonan->mig_mst_jaminan_tgl_oto)->format('Y-m-d H:i:s')
: null))
: ($lpj->created_at ?? null);
$forminspeksi = null; $forminspeksi = null;
$lpjData = null; $lpjData = null;
$formFoto = null; $formFoto = null;
$dataPembanding ='';
if ($inspeksi) { if ($inspeksi) {
$forminspeksi = json_decode($inspeksi->data_form, true); $forminspeksi = json_decode($inspeksi->data_form, true);
$formFoto = json_decode($inspeksi->foto_form, true); $formFoto = json_decode($inspeksi->foto_form, true);
@@ -161,6 +196,7 @@ class PreviewLaporanService
$dataPembanding = json_decode($inspeksi->data_pembanding, true); $dataPembanding = json_decode($inspeksi->data_pembanding, true);
} }
if ($lpj) { if ($lpj) {
$lpjData = json_decode($lpj->lpj, true); $lpjData = json_decode($lpj->lpj, true);
$memo = json_decode($lpj->memo, true); $memo = json_decode($lpj->memo, true);
@@ -181,7 +217,96 @@ class PreviewLaporanService
]; ];
$viewLaporan = $this->getViewLaporan($tipeLaporan->status); $viewLaporan = $this->getViewLaporan($tipeLaporan->status);
$statusLpj = 1; $statusLpj = 1;
$mig_permohonan = json_decode($permohonan->mig_permohonan);
if(($tipeLaporan->status === 'memo' && $permohonan->mig_permohonan) || $mig_permohonan->mig_mst_lpj_tot_nilai_pasar < 1){
$paths = $formFoto['upload_foto'] ?? null;
if (!is_array($paths) || empty($paths)) {
return response()->json(['error' => 'No files to download'], 404);
}
$files = [];
foreach ($paths as $path) {
if (!$path['path']) {
Log::warning('PreviewLaporanService: Path kosong terdeteksi dalam daftar paths.');
continue;
}
// Logika fallback untuk path file
$originalPath = $path['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);
Log::info('PreviewLaporanService: Menggunakan fallback path kandidat.', [
'original' => $originalPath,
'fallback' => $fallbackPath,
]);
}
}
}
// Tentukan path yang akan digunakan
$pathToUse = ($fallbackPath && $statusLpj == 1 && file_exists(storage_path('app/public/' . $fallbackPath)))
? $fallbackPath
: $originalPath;
$fullPath = storage_path('app/public/' . $pathToUse);
if (!file_exists($fullPath)) {
Log::warning('PreviewLaporanService: File tidak ditemukan untuk original maupun fallback.', [
'original' => $originalPath,
'fallback' => $fallbackPath,
'resolved' => $pathToUse,
]);
continue;
}
Log::info('PreviewLaporanService: Menambahkan file untuk diunduh.', [
'resolved' => $pathToUse,
'fullPath' => $fullPath,
]);
$files[] = $fullPath;
}
if (empty($files)) {
Log::warning('PreviewLaporanService: Tidak ada file valid ditemukan setelah resolusi path.');
return response()->json(['error' => 'No valid files found'], 404);
}
// For single file, download directly
if (count($files) === 1) {
Log::info('PreviewLaporanService: Mengunduh single file.', ['file' => $files[0]]);
return response()->download($files[0]);
}
// For multiple files, create zip and download
$zipName = 'photos_' . time() . '.zip';
$zipPath = storage_path('app/public/' . $zipName);
$zip = new \ZipArchive();
if ($zip->open($zipPath, \ZipArchive::CREATE) === true) {
foreach ($files as $file) {
$zip->addFile($file, basename($file));
}
$zip->close();
Log::info('PreviewLaporanService: Zip file berhasil dibuat.', ['zip' => $zipPath, 'count' => count($files)]);
return response()->download($zipPath)->deleteFileAfterSend(true);
}
Log::error('PreviewLaporanService: Gagal membuat zip file.');
return response()->json(['error' => 'Failed to create zip file'], 500);
}
try { try {
$pdf = $this->generatePDF($viewLaporan, compact( $pdf = $this->generatePDF($viewLaporan, compact(
'permohonan', 'permohonan',
@@ -214,6 +339,8 @@ class PreviewLaporanService
private function generatePDF(string $viewLaporan, array $data) private function generatePDF(string $viewLaporan, array $data)
{ {
//return view('lpj::' . $viewLaporan, $data);
$pdf = PDF::loadView('lpj::' . $viewLaporan, $data); $pdf = PDF::loadView('lpj::' . $viewLaporan, $data);
$pdf->setPaper('A4', 'portrait'); $pdf->setPaper('A4', 'portrait');
$pdf->set_option('isHtml5ParserEnabled', true); $pdf->set_option('isHtml5ParserEnabled', true);
@@ -239,12 +366,14 @@ class PreviewLaporanService
public function checkPrintOutLaporan($permohonan_id, $dokumen_id) public function checkPrintOutLaporan($permohonan_id, $dokumen_id)
{ {
// Ambil data berdasarkan ID // Ambil data berdasarkan ID
$statusLpj = Penilai::where('permohonan_id', $permohonan_id) $statusLpj = Penilai::where('permohonan_id', $permohonan_id)
->where('dokument_id', $dokumen_id) //->where('dokument_id', $dokumen_id)
->first(); ->first();
$permohonan = Permohonan::where('id', $permohonan_id)->first();
// Jika data tidak ditemukan, kembalikan status null // Jika data tidak ditemukan, kembalikan status null
if (!$statusLpj) { if (!$statusLpj) {
return response()->json(['status' => null]); return response()->json(['status' => null]);
@@ -253,7 +382,7 @@ class PreviewLaporanService
// Tentukan tipe berdasarkan kondisi // Tentukan tipe berdasarkan kondisi
$type = $statusLpj->type_penilai ?? null; $type = $statusLpj->type_penilai ?? null;
if ($type === 'memo') { if ($type === 'memo' && $permohonan->is_mig!=1) {
return $this->checkDataMemo($type, $statusLpj); return $this->checkDataMemo($type, $statusLpj);
} }
@@ -281,6 +410,7 @@ class PreviewLaporanService
// Ambil data JSON dari statusLpj // Ambil data JSON dari statusLpj
$data = json_decode($statusLpj->memo, true) ?? []; $data = json_decode($statusLpj->memo, true) ?? [];
$validationRules = [ $validationRules = [
'memo' => [ 'memo' => [
'kepada', 'kepada',

View File

@@ -1,10 +1,19 @@
@if (is_array($details) && count($details) > 0) @if (is_array($details) && count($details) > 0)
@php $currentKey = ''; @endphp
@foreach ($details as $value) @foreach ($details as $value)
@foreach ($value as $key => $item) @foreach ($value as $key => $item)
@if (!empty($item)) @if (!empty($item))
<tr> <tr>
<td style="padding: 2px; width:25%;"> <td style="padding: 2px; width:25%;">
{{ formatLabel($key) }} @if ($currentKey !== $key)
{{ formatLabel($key) }}
@endif
@php
if ($currentKey !== $key) {
$currentKey = $key;
}
@endphp
</td> </td>
<td style="width:1%; padding: 2px; vertical-align: top;">:</td> <td style="width:1%; padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px;"> <td style="padding: 2px;">

View File

@@ -151,7 +151,7 @@
user_id: { user_id: {
title: 'User Pemohon', title: 'User Pemohon',
render: (item, data) => { render: (item, data) => {
return `${data.user.name}`; return `${data.user?.name}`;
}, },
}, },
tujuan_penilaian_id: { tujuan_penilaian_id: {
@@ -180,16 +180,16 @@
jenis_fasilitas_kredit_id: { jenis_fasilitas_kredit_id: {
title: 'Fasilitas Kredit', title: 'Fasilitas Kredit',
render: (item, data) => { render: (item, data) => {
return `${data.jenis_fasilitas_kredit.name}`; return `${data.jenis_fasilitas_kredit?.name}`;
} }
}, },
tanggal_survei: { tanggal_survei: {
title: 'Tanggal Survei', title: 'Tanggal Survei',
render: (item, data) => { render: (item, data) => {
if (data.penilaian.waktu_penilaian) { if (data.penilaian?.waktu_penilaian) {
return `${formatDate(new Date(data.penilaian.waktu_penilaian))}`; return `${formatDate(new Date(data.penilaian?.waktu_penilaian))}`;
} }
return `${formatDate(new Date(data.penilaian.created_at))}`; return `${formatDate(new Date(data.penilaian?.created_at))}`;
}, },
}, },
due_date_sla: { due_date_sla: {
@@ -197,10 +197,10 @@
render: (item, data) => { render: (item, data) => {
const tujuan_penilaian = data.tujuan_penilaian.name; const tujuan_penilaian = data.tujuan_penilaian.name;
const tipe_laporan = data.penilai?.type; const tipe_laporan = data.penilai?.type;
const nilai_plafond = data.penilaian.nilaiPlafond?.name; const nilai_plafond = data.penilaian?.nilaiPlafond?.name;
let waktu_penilaian = new Date(data.penilaian.created_at); let waktu_penilaian = new Date(data.penilaian?.created_at);
if (data.penilaian.waktu_penilaian) { if (data.penilaian?.waktu_penilaian) {
waktu_penilaian = new Date(data.penilaian.waktu_penilaian); waktu_penilaian = new Date(data.penilaian?.waktu_penilaian);
} }
if (tujuan_penilaian.name === "RAP") { if (tujuan_penilaian.name === "RAP") {
@@ -249,23 +249,17 @@
} }
} }
if (data.penilai.resume) { if (data.penilai?.resume) {
resumeButton = ` resumeButton = `
<a href="penilai/print-out-laporan/${data.id}/${dokumenID}/${jenisJaminanID}" class="btn btn-sm btn-success"> <a href="penilai/print-out-laporan/${data.id}/${dokumenID}/${jenisJaminanID}" class="btn btn-sm btn-success">
Resume Resume
</a>`; </a>`;
} }
if (data.nilai_liquidasi == null) {
laporanButton = `
<a href="laporan/${data.id}" class="btn btn-sm btn-primary">
Laporan
</a>`;
}
if ((data.status_bayar == "sudah_bayar" || data.status_bayar == "tidak_bayar") && data
.nilai_liquidasi > 0) { if ((data.status_bayar == "sudah_bayar" || data.status_bayar == "tidak_bayar")) {
if (data.penilai.type_penilai == 'resume' && !data.penilai.resume) { if (data.penilai?.type_penilai == 'resume' && !data.penilai?.resume) {
laporanButton = ` laporanButton = `
<a href="penilai/print-out-laporan/${data.id}/${dokumenID}/${jenisJaminanID}" class="btn btn-sm btn-primary"> <a href="penilai/print-out-laporan/${data.id}/${dokumenID}/${jenisJaminanID}" class="btn btn-sm btn-primary">
Laporan Laporan

View File

@@ -1,6 +1,57 @@
<div class="no-break"> <div class="no-break">
<table style="width: 100%"> <table style="width: 100%">
<tr> @if($permohonan->is_mig)
@if (!empty($forminspeksi['fakta']['keterangan']))
@foreach ($forminspeksi['fakta']['keterangan'] as $key => $item)
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
{{ $key }}
</td>
</tr>
</table>
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; text-align: left;">
@if (is_array($item))
@foreach ($item as $data_)
{!! nl2br(e($data_)) !!}<br>
@endforeach
@else
{!! nl2br(e($item)) !!}
@endif
</td>
</tr>
</table>
@endforeach
@endif
@if (!empty($forminspeksi['fakta']['saran']))
@foreach ($forminspeksi['fakta']['saran'] as $key => $item)
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
SARAN
</td>
</tr>
</table>
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; text-align: left;">
@if (is_array($item))
@foreach ($item as $data_)
{!! nl2br(e($data_)) !!}<br>
@endforeach
@else
{!! nl2br(e($item)) !!}
@endif
</td>
</tr>
</table>
@endforeach
@endif
@else
<tr>
<td width="25%" style="vertical-align: top;">Informasi Dinas Tata Ruang <td width="25%" style="vertical-align: top;">Informasi Dinas Tata Ruang
</td> </td>
<td width="1%" style="vertical-align: top;">:</td> <td width="1%" style="vertical-align: top;">:</td>
@@ -34,31 +85,6 @@
</td> </td>
</tr> </tr>
@if (!empty($forminspeksi['fakta']['keterangan']))
<tr>
<td width="25%" style="vertical-align: top;">Catatan yang Perlu
Diperhatikan</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@php
$keterangan = $forminspeksi['fakta']['keterangan'] ?? '';
if (is_array($keterangan)) {
$keterangan = implode(', ', array_filter($keterangan));
}
@endphp
@if (!empty($keterangan))
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td>{!! nl2br(e($keterangan)) !!}</td>
</tr>
</table>
@endif
</td>
</tr>
@endif @endif
</table> </table>
</div> </div>

View File

@@ -39,18 +39,19 @@
]; ];
$customLabels = [ $customLabels = [
'upload_gs' => 'Gambar Situasi', 'upload_gs' => 'Gambar Situasi',
'foto_sentuh_tanahku' => 'Sentuh Tanahku', 'foto_sentuh_tanahku' => 'Sentuh Tanahku',
'foto_gistaru' => 'Gistaru', 'foto_gistaru' => 'Gistaru',
'foto_bhumi' => 'Bhumi', 'foto_bhumi' => 'Bhumi',
'foto_argis_region' => 'Blad Tata Ruang ', 'foto_argis_region' => 'Blad Tata Ruang ',
'foto_tempat' => 'Peta Lokasi', 'foto_tempat' => 'Peta Lokasi',
]; ];
// Memindahkan foto_tempat ke depan jika ada
if (($key = array_search('upload_gs', $fotoTypes)) !== false) { // Memindahkan foto_tempat ke depan jika ada
unset($fotoTypes[$key]); if (($key = array_search('upload_gs', $fotoTypes)) !== false) {
array_unshift($fotoTypes, 'upload_gs'); unset($fotoTypes[$key]);
} array_unshift($fotoTypes, 'upload_gs');
}
// Filter fotoTypes untuk memastikan hanya yang memiliki imagePath valid // Filter fotoTypes untuk memastikan hanya yang memiliki imagePath valid
$validPhotoTypes = array_filter($fotoTypes, function ($type) use ($forminspeksi) { $validPhotoTypes = array_filter($fotoTypes, function ($type) use ($forminspeksi) {
@@ -68,7 +69,7 @@
@endphp @endphp
@if ($imagePath && file_exists(storage_path('app/public/' . $imagePath))) @if ($imagePath && file_exists(storage_path('app/public/' . $imagePath)))
<tr> <tr>
<td style="width: 100%; vertical-align: top; text-align: center" class="photo-item border"> <td style="width: 100%; vertical-align: top; text-align: center" class="border photo-item">
<p style="margin: 0; font-size: 10px; text-align: center;"> <p style="margin: 0; font-size: 10px; text-align: center;">
{{ $customLabels[$type] ?? '' }} {{ $customLabels[$type] ?? '' }}
</p> </p>

View File

@@ -81,6 +81,32 @@
$groupedPhotos = collect($photos)->groupBy('category'); $groupedPhotos = collect($photos)->groupBy('category');
$mainPhotos = $groupedPhotos->filter(fn($_, $key) => strtolower($key) !== 'lainnya'); $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()); $otherPhotos = $groupedPhotos->get('lainnya', collect());
@endphp @endphp
@@ -88,6 +114,9 @@
<p class="text-gray-500">Tidak ada foto yang tersedia.</p> <p class="text-gray-500">Tidak ada foto yang tersedia.</p>
@else @else
@foreach ($mainPhotos as $category => $photos) @foreach ($mainPhotos as $category => $photos)
@if($category=='DOKUMEN PENDUKUNG')
@php continue; @endphp
@endif
@php @php
$groupedBySubcategory = $photos->groupBy('sub'); $groupedBySubcategory = $photos->groupBy('sub');
@endphp @endphp
@@ -95,16 +124,42 @@
@foreach ($groupedBySubcategory as $subcategory => $subPhotos) @foreach ($groupedBySubcategory as $subcategory => $subPhotos)
@if (count($subPhotos) > 0) @if (count($subPhotos) > 0)
@foreach ($subPhotos->chunk(2) as $chunkedPhotos) @foreach ($subPhotos->chunk(2) as $chunkedPhotos)
@if(!$loop->first)
<div class="page-break"></div>
@endif
<table width="100%" border="0" <table width="100%" border="0"
style="align-content: center; text-align: center; margin-bottom: 20px"> style="align-content: center; text-align: center; margin-bottom: 20px">
@foreach ($chunkedPhotos as $item) @foreach ($chunkedPhotos as $item)
@php @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 = $filePath =
$statusLpj == 1 $statusLpj == 1
? storage_path('app/public/' . $item['path']) ? storage_path('app/public/' . $pathToUse)
: asset('storage/' . $item['path']); : asset('storage/' . $pathToUse);
$extension = strtolower(pathinfo($item['path'], PATHINFO_EXTENSION)); $extension = strtolower(pathinfo($pathToUse, PATHINFO_EXTENSION));
$isImage = in_array($extension, [ $isImage = in_array($extension, [
'jpg', 'jpg',
'jpeg', 'jpeg',
@@ -118,10 +173,10 @@
$isPdf = $extension === 'pdf'; $isPdf = $extension === 'pdf';
@endphp @endphp
@if ($statusLpj == 1) @if ($statusLpj == 1)
@if ($isImage && $filePath) @if ($isImage && $filePath)
<tr> <tr>
<td style="width: 100%; padding: 10px; align-content: center; text-align: center" <td style="width: 100%; padding: 10px; align-content: center; text-align: center"
class="photo-item border"> class="border photo-item">
<p style="font-weight: medium; font-size: 10px">{{ $category }} - <p style="font-weight: medium; font-size: 10px">{{ $category }} -
@isset($subcategory) @isset($subcategory)
@if (trim($subcategory) !== '') @if (trim($subcategory) !== '')
@@ -130,7 +185,7 @@
@endisset @endisset
{{ $item['name'] ?? '' }} {{ $item['name'] ?? '' }}
</p> </p>
<img src="{{ $filePath }}" alt="{{ $item['path'] }}" class="photo-image" <img src="{{ $filePath }}" alt="{{ $pathToUse }}" class="photo-image"
style="align-content: center; text-align: center; max-width: 100%; height: auto;"> style="align-content: center; text-align: center; max-width: 100%; height: auto;">
</td> </td>
</tr> </tr>
@@ -138,7 +193,7 @@
@elseif ($statusLpj != 1) @elseif ($statusLpj != 1)
<tr> <tr>
<td style="width: 100%; padding: 10px; align-content: center; text-align: center" <td style="width: 100%; padding: 10px; align-content: center; text-align: center"
class="photo-item border "> class="border photo-item">
<p style="font-weight: medium; font-size: 10px">{{ $category }} - <p style="font-weight: medium; font-size: 10px">{{ $category }} -
@isset($subcategory) @isset($subcategory)
@@ -180,13 +235,13 @@
<tr style="width: 100%;"></tr> <tr style="width: 100%;"></tr>
@endif @endif
</table> </table>
<div class="page-break"></div>
@endforeach @endforeach
@endif @endif
@endforeach @endforeach
@endforeach @endforeach
@if (!$otherPhotos->isEmpty()) @if (!$otherPhotos->isEmpty())
@dd(!$otherPhotos->isEmpty())
@foreach ($otherPhotos->groupBy('sub') as $subcategory => $subPhotos) @foreach ($otherPhotos->groupBy('sub') as $subcategory => $subPhotos)
@if (count($subPhotos) > 0) @if (count($subPhotos) > 0)
@foreach ($subPhotos->chunk(2) as $chunkedPhotos) @foreach ($subPhotos->chunk(2) as $chunkedPhotos)
@@ -216,7 +271,7 @@
@if ($isImage && $filePath) @if ($isImage && $filePath)
<tr> <tr>
<td style="width: 100%; padding: 10px; align-content: center; text-align: center" <td style="width: 100%; padding: 10px; align-content: center; text-align: center"
class="photo-item border"> class="border photo-item">
<p style="font-weight: medium; font-size: 10px">{{ $category }} - <p style="font-weight: medium; font-size: 10px">{{ $category }} -
@isset($subcategory) @isset($subcategory)
@if (trim($subcategory) !== '') @if (trim($subcategory) !== '')
@@ -232,7 +287,7 @@
@endif @endif
@elseif ($statusLpj != 1) @elseif ($statusLpj != 1)
<tr> <tr>
<td style="width: 100%; padding: 10px;" class="photo-item border"> <td style="width: 100%; padding: 10px;" class="border photo-item">
<p style="font-weight: medium; font-size: 10px">Lainnya - <p style="font-weight: medium; font-size: 10px">Lainnya -
@isset($subcategory) @isset($subcategory)
@if (trim($subcategory) !== '') @if (trim($subcategory) !== '')

View File

@@ -47,7 +47,7 @@
<td style="width: 79%; padding: 2px;">{{ $rap['dari'] ?? '' }}</td> <td style="width: 79%; padding: 2px;">{{ $rap['dari'] ?? '' }}</td>
</tr> </tr>
<tr> <tr>
<td style="width: 25%; padding: 2px;">Tanggal Survey</td> <td style="width: 25%; padding: 2px;">Tanggal Penilaian</td>
<td style="width: 1%; padding: 2px;">:</td> <td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;"> <td style="width: 79%; padding: 2px;">
{{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) }}</td> {{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) }}</td>

View File

@@ -6,6 +6,9 @@
$jenisAset = $dokumen->jenisJaminan->name; $jenisAset = $dokumen->jenisJaminan->name;
} }
$data = rtrim($data, ', '); $data = rtrim($data, ', ');
$permohonan_migrasi = json_decode($permohonan->mig_permohonan);
@endphp @endphp
<main class="content"> <main class="content">
@@ -43,7 +46,7 @@
<tr> <tr>
<td style="padding: 2px; vertical-align: top;">Permintaan (AO)</td> <td style="padding: 2px; vertical-align: top;">Permintaan (AO)</td>
<td style="padding: 2px; vertical-align: top;">:</td> <td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $permohonan->user->name ?? '-' }}</td> <td style="padding: 2px; vertical-align: top;">{{ $permohonan->user->name ?? $permohonan_migrasi->mig_mst_jaminan_nama_ao ?? '-' }}</td>
</tr> </tr>
<tr> <tr>
<td style="padding: 2px; vertical-align: top;">No Order</td> <td style="padding: 2px; vertical-align: top;">No Order</td>
@@ -57,18 +60,11 @@
{{ formatTanggalIndonesia($permohonan->tanggal_permohonan) }}</td> {{ formatTanggalIndonesia($permohonan->tanggal_permohonan) }}</td>
</tr> </tr>
<tr> <tr>
<td style="padding: 2px; vertical-align: top;">Tanggal Survey</td> <td style="padding: 2px; vertical-align: top;">Tanggal Penilaian</td>
<td style="padding: 2px; vertical-align: top;">:</td> <td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;"> <td style="padding: 2px; vertical-align: top;">
{{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }}</td> {{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }}</td>
</tr> </tr>
<tr>
<td style="padding: 2px; vertical-align: top;">User</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $permohonan->user->name ?? '' }}</td>
</tr>
@php @php
$senior_officer = null; $senior_officer = null;
if ($permohonan->debiture && $permohonan->documents) { if ($permohonan->debiture && $permohonan->documents) {
@@ -97,7 +93,11 @@
} }
@endphp @endphp
<tr>
<td style="padding: 2px; vertical-align: top;">User</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $penilai->user->name ?? '' }}</td>
</tr>
<tr> <tr>
<td style="padding: 2px; vertical-align: top;">Pemeriksa</td> <td style="padding: 2px; vertical-align: top;">Pemeriksa</td>
<td style="padding: 2px; vertical-align: top;">:</td> <td style="padding: 2px; vertical-align: top;">:</td>
@@ -108,17 +108,32 @@
<td style="padding: 2px; vertical-align: top;">:</td> <td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $permohonan->approveSo->name ?? '' }}</td> <td style="padding: 2px; vertical-align: top;">{{ $permohonan->approveSo->name ?? '' }}</td>
</tr> </tr>
@if($permohonan->is_mig)
<tr>
<td style="padding: 2px; vertical-align: top;">No Laporan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $permohonan_migrasi->mig_mst_lpj_nomor_lpj ?? '-' }}
</td>
</tr>
@endif
<tr> <tr>
<td style="padding: 2px; vertical-align: top;">Tanggal Laporan</td> <td style="padding: 2px; vertical-align: top;">Tanggal Laporan</td>
<td style="padding: 2px; vertical-align: top;">:</td> <td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;"> <td style="padding: 2px; vertical-align: top;">
{{ formatTanggalIndonesia($tanggalLaporan) ?? '' }}</td> {{ formatTanggalIndonesia($tanggalLaporan) ?? '' }}
</td>
</tr> </tr>
<tr> <tr>
<td style="padding: 2px; vertical-align: top;">Waktu Penyelesaian</td> <td style="padding: 2px; vertical-align: top;">Waktu Penyelesaian</td>
<td style="padding: 2px; vertical-align: top;">:</td> <td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;"> <td>
{{ hitungHariKerja($permohonan->penilaian->tanggal_kunjungan, $tanggalLaporan) }}</td> @if($permohonan->is_mig)
{{ hitungHariKerja($permohonan->penilaian->tanggal_kunjungan, \Carbon\Carbon::createFromFormat('d/m/Y H:i:s', $permohonan_migrasi->mig_mst_jaminan_tgl_oto)->format('Y-m-d H:i:s'))-1 }}
@else
{{ hitungHariKerja($permohonan->penilaian->tanggal_kunjungan, $tanggalLaporan) }}
@endif
</td>
</tr> </tr>
</table> </table>
</td> </td>
@@ -142,66 +157,86 @@
<td style=" padding: 2px; vertical-align: top;">{{ $permohonan->tujuanPenilaian->name ?? '' }} <td style=" padding: 2px; vertical-align: top;">{{ $permohonan->tujuanPenilaian->name ?? '' }}
</td> </td>
</tr> </tr>
@if ($permohonan->is_mig == 1)
{{-- <table style="width: 100%; "> --}}
@if (@isset($dokumen))
@foreach ($dokumen->detail as $detail)
@if (!empty($detail->name) && isset($detail->details) && !empty($detail->dokumen_jaminan))
<tr>
<td width="25%"><strong>{{ $detail->name ?? '' }}</strong></td>
</tr>
@endif
@if (isset($detail->details) && $detail->name == 'LOKASI JAMINAN') @if ($permohonan->is_mig)
@php @php
$details = json_decode($detail->details, true); $data = json_decode($inspeksi->mig_detail_data_jaminan, true);
@endphp @endphp
@include('lpj::component.detail-lokasi', ['details' => $details]) @foreach ($data as $key => $item)
@endif @if ($key == 'address')
@endforeach @php $key = 'Terletak di'; @endphp
@endif @endif
@else @php
<tr> // Remove suffix _2, _3, _4, _5 from key
<td style=" padding: 2px; vertical-align: top;">Terletak di</td> $key = preg_replace('/_([2-5])$/', '', $key);
<td style=" padding: 2px; vertical-align: top;">:</td> @endphp
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['address'] ?? '' }}</td> <tr>
</tr> <td style=" padding: 2px; vertical-align: top;">{{ $key }}</td>
<tr> <td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">Desa/Kelurahan</td> <td style=" padding: 2px; vertical-align: top;">{{ $item }}</td>
<td style=" padding: 2px; vertical-align: top;">:</td> </tr>
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['village_code'] ?? '' }}</td> @endforeach
</tr>
<tr> @else
<td style=" padding: 2px; vertical-align: top;">Kecamatan</td> @if (@isset($dokumen))
<td style=" padding: 2px; vertical-align: top;">:</td> @foreach ($dokumen->detail as $detail)
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['district_code'] ?? '' }}</td> @if (!empty($detail->name) && isset($detail->details) && !empty($detail->dokumen_jaminan))
</tr> <tr>
<tr> <td width="25%"><strong>{{ $detail->name ?? '' }}</strong></td>
<td style=" padding: 2px; vertical-align: top;">Kabupaten/Kota</td> </tr>
<td style=" padding: 2px; vertical-align: top;">:</td> @endif
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['city_code'] ?? '' }}</td>
</tr> @if (isset($detail->details) && $detail->name == 'LOKASI JAMINAN')
<tr> @php
<td style=" padding: 2px; vertical-align: top;">Provinsi</td> $details = json_decode($detail->details, true);
<td style=" padding: 2px; vertical-align: top;">:</td> @endphp
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['province_code'] ?? '' }}</td> @include('lpj::component.detail-lokasi', ['details' => $details])
</tr> @endif
@endforeach
@endif
<tr>
<td style=" padding: 2px; vertical-align: top;">Terletak di</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['address'] ?? '' }}</td>
</tr>
<tr>
<td style=" padding: 2px; vertical-align: top;">Desa/Kelurahan</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['village_code'] ?? '' }}</td>
</tr>
<tr>
<td style=" padding: 2px; vertical-align: top;">Kecamatan</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['district_code'] ?? '' }}</td>
</tr>
<tr>
<td style=" padding: 2px; vertical-align: top;">Kabupaten/Kota</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['city_code'] ?? '' }}</td>
</tr>
<tr>
<td style=" padding: 2px; vertical-align: top;">Provinsi</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">{{ $alamat['province_code'] ?? '' }}</td>
</tr>
@endif
@include('lpj::component.print-out-dokument') @include('lpj::component.print-out-dokument')
@if (isset($forminspeksi['asset']['nomor_nib'])) @if (isset($forminspeksi['asset']['nomor_nib']))
<tr>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">
{{ $forminspeksi['asset']['nomor_nib'] ?? '' }}</td>
</tr>
@endif
<tr> <tr>
<td style=" padding: 2px; vertical-align: top;">Atas Nama</td>
<td style=" padding: 2px; vertical-align: top;">:</td> <td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;"> <td style=" padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
{{ $forminspeksi['asset']['nomor_nib'] ?? '' }}</td>
</tr> </tr>
@endif @endif
<tr>
<td style=" padding: 2px; vertical-align: top;">Atas Nama</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
</tr>
</table> </table>
</td> </td>
@@ -209,196 +244,238 @@
</table> </table>
<div class="no-break"> <div class="no-break">
@php $mig_detail_legalitas_jaminan = json_decode($inspeksi->mig_detail_legalitas_jaminan, true); @endphp
<table width="100%">
<tr>
<td style="width: 50%; border: 1px solid #000;">
STATUS KEPEMILIKAN, HUBUNGAN DAN PENGHUNI
</td>
<table width="100%"> <td style="width: 50%; border: 1px solid #000;">
<tr> SARANA PELENGKAP DAN LINGKUNGAN --
<td style="width: 50%; border: 1px solid #000;"> </td>
STATUS KEPEMILIKAN, HUBUNGAN DAN PENGHUNI </tr>
</td> <tr>
<td style="vertical-align: top;">
<td style="width: 50%; border: 1px solid #000;"> <table style="vertical-align: top;">
SARANA PELENGKAP DAN LINGKUNGAN
</td>
</tr>
<tr>
<td style="vertical-align: top;">
<table style="vertical-align: top;">
<tr>
@php
$cekHubDebitur = isset($forminspeksi['asset']['hub_cadeb']) &&
$forminspeksi['asset']['hub_cadeb'] === 'sesuai'
? 'sesuai'
: 'tidak sesuai';
$hubCadebDebitur = isset($forminspeksi['asset']['hub_cadeb'][$cekHubDebitur])
? $forminspeksi['asset']['hub_cadeb']['tidak sesuai']
: $forminspeksi['asset']['hub_cadeb']['sesuai'];
@endphp
<td style=" width:49%; padding: 2px; vertical-align: top;">Hubungan Pemilik Jaminan dengan Debitur</td>
<td style=" width:1%; padding: 2px; vertical-align: top;">:</td>
<td style=" width:50%; padding: 2px; vertical-align: top;">{{ $hubCadebDebitur ?? '' }}</td>
</tr>
<tr>
@php
$cekHub =
isset($forminspeksi['asset']['hub_cadeb_penghuni']) &&
$forminspeksi['asset']['hub_cadeb_penghuni'] === 'sesuai'
? 'sesuai'
: 'tidak sesuai';
$hubCadeb = isset($forminspeksi['asset']['hub_cadeb_penghuni'][$cekHub])
? $forminspeksi['asset']['hub_cadeb_penghuni']['tidak sesuai']
: $forminspeksi['asset']['hub_cadeb_penghuni']['sesuai'];
@endphp
<td style=" padding: 2px; vertical-align: top;">Hubungan Penghuni Jaminan dengan Debitur</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">{{ $hubCadeb ?? '' }}</td>
</tr>
</table>
</td>
<td style="width: 50%; vertical-align: top;">
<table>
@php
$lingkungan = $forminspeksi['lingkungan'];
$fasilitas = $lingkungan['fasilitas_dekat_object'] ?? [];
$fasilitasInput = $lingkungan['fasilitas_dekat_object_input'] ?? [];
@endphp
<tr>
<td style="padding: 2px; vertical-align: top;">Jarak Jalan Utama</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jarak_jalan_utama'] ?? '-' }} m
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Jalan Lingkungan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jalan_linkungan'] ?? '-' }} m
</td>
<tr>
<td style="padding: 2px; vertical-align: top;">Jarak CBD</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jarak_cbd_point'] ?? '-' }} m
({{ $lingkungan['nama_cbd_point'] ?? '-' }})</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Lebar Perkerasan Jalan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['lebar_perkerasan_jalan'] ?? '-' }} m</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Perkerasan Jalan</td>
<td style="padding: 2px; vertical-align: top;">:
</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['perkerasan_jalan']['perkerasan_jalan'] ?? $lingkungan['perkerasan_jalan'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Lalu Lintas</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{
$lingkungan['lalu_lintas']
? (is_array($lingkungan['lalu_lintas'])
? implode(', ', $lingkungan['lalu_lintas'])
: $lingkungan['lalu_lintas'])
: '-'
}}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Golongan Masyarakat Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ implode(', ', $lingkungan['gol_mas_sekitar'] ?? $lingkungan['gol_mas_sekitar'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Tingkat Keramaian</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['tingkat_keramaian']['tingkat_keramaian'] ?? $lingkungan['tingkat_keramaian'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Terletak di Area</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['terletak_diarea']['terletak_diarea'] ?? $lingkungan['terletak_diarea'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Kondisi Bangunan Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['kondisi_bagunan_disekitar_lokasi'] ?? '-' }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Sifat Bangunan Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['sifat_bagunan_disekitar_lokasi'] ?? '-' }}</td>
</tr>
@if ($lingkungan['dekat_makam'] == 'ya')
<tr> <tr>
<td style="padding: 2px; vertical-align: top;">Dekat Makam</td> @php
<td style="padding: 2px; vertical-align: top;">:</td> $cekHubDebitur =
<td style="padding: 2px; vertical-align: top;">Ya, Jarak isset($forminspeksi['asset']['hub_cadeb']) &&
{{ $lingkungan['jarak_makam'] ?? '-' }} m $forminspeksi['asset']['hub_cadeb'] === 'sesuai'
({{ $lingkungan['nama_makam'] ?? '-' }}) ? 'sesuai'
: 'tidak sesuai';
$hubCadebDebitur = isset($forminspeksi['asset']['hub_cadeb'][$cekHubDebitur])
? $forminspeksi['asset']['hub_cadeb']['tidak sesuai']
: (isset($forminspeksi['asset']['hub_cadeb']['sesuai']) ? $forminspeksi['asset']['hub_cadeb']['sesuai'] : '');
@endphp
<td style=" width:49%; padding: 2px; vertical-align: top;">Hubungan Pemilik Jaminan dengan
Debitur</td>
<td style=" width:1%; padding: 2px; vertical-align: top;">:</td>
<td style=" width:50%; padding: 2px; vertical-align: top;">{{ $cekHubDebitur =='tidak sesuai' ? 'Lain-lain, ' : '' }} {{ $hubCadebDebitur ?? '' }}
</td> </td>
</tr> </tr>
@endif
@if ($lingkungan['dekat_tps'] == 'ya')
<tr> <tr>
<td style="padding: 2px; vertical-align: top;">Dekat TPS</td> @php
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">Ya, Jarak $cekHub =
{{ $lingkungan['jarak_tps'] ?? '-' }} m isset($forminspeksi['asset']['hub_cadeb_penghuni']) &&
({{ $lingkungan['nama_tps'] ?? '-' }})</td> $forminspeksi['asset']['hub_cadeb_penghuni'] === 'sesuai'
? 'sesuai'
: 'tidak sesuai';
$hubCadeb = isset($forminspeksi['asset']['hub_cadeb_penghuni'][$cekHub])
? $forminspeksi['asset']['hub_cadeb_penghuni']['tidak sesuai']
: (isset($forminspeksi['asset']['hub_cadeb_penghuni']['sesuai']) ? $forminspeksi['asset']['hub_cadeb_penghuni']['sesuai'] : '');
@endphp
<td style=" padding: 2px; vertical-align: top;">Hubungan Penghuni Jaminan dengan Debitur
</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">{{ $hubCadeb ?? '' }}</td>
</tr> </tr>
@endif </table>
</td>
<tr> <td style="width: 50%; vertical-align: top;">
<td style="padding: 2px; vertical-align: top;">Daerah</td> @if ($permohonan->is_mig)
<td style="padding: 2px; vertical-align: top;">:</td> @if(isset($mig_detail_legalitas_jaminan['SARANA PELENGKAP DAN LINGKUNGAN']))
<td style="padding: 2px; vertical-align: top;"> <table>
{{ implode(', ', $lingkungan['merupakan_daerah'] ?? ['-']) }} @foreach ($mig_detail_legalitas_jaminan['SARANA PELENGKAP DAN LINGKUNGAN'] as $item)
</td> <tr>
</tr> <td style="padding: 2px; vertical-align: top;">{{ $item['label'] }}</td>
<td style="padding: 2px; vertical-align: top;">:</td>
@if (!empty($fasilitas)) <td style="padding: 2px; vertical-align: top;">{{ ltrim($item['value'], ',') }}</td>
<tr> </tr>
<td style="padding: 2px; vertical-align: top;">Fasilitas Dekat Objek</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@foreach ($fasilitas as $fas)
{{ $fas }}
@if (isset($fasilitasInput[$fas]))
({{ $fasilitasInput[$fas] }})
@endif
@if (!$loop->last)
,
@endif
@endforeach @endforeach
</td>
</tr>
@endif
</table>
</td>
</tr>
</table>
</div>
</table>
@endif
@else
<table>
@php
$lingkungan = $forminspeksi['lingkungan'];
$fasilitas = $lingkungan['fasilitas_dekat_object'] ?? [];
$fasilitasInput = $lingkungan['fasilitas_dekat_object_input'] ?? [];
@endphp
<tr>
<td style="padding: 2px; vertical-align: top;">Jarak Jalan Utama</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['jarak_jalan_utama'] ?? '-' }} m
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Jalan Lingkungan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['jalan_linkungan'] ?? '-' }}
m
</td>
<tr>
<td style="padding: 2px; vertical-align: top;">Jarak CBD</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['jarak_cbd_point'] ?? '-' }}
m
({{ $lingkungan['nama_cbd_point'] ?? '-' }})</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Lebar Perkerasan Jalan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['lebar_perkerasan_jalan'] ?? '-' }} m</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Perkerasan Jalan</td>
<td style="padding: 2px; vertical-align: top;">:
</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['perkerasan_jalan']['perkerasan_jalan'] ?? ($lingkungan['perkerasan_jalan'] ?? ['-'])) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Lalu Lintas</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['lalu_lintas']
? (is_array($lingkungan['lalu_lintas'])
? implode(', ', $lingkungan['lalu_lintas'])
: $lingkungan['lalu_lintas'])
: '-' }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Golongan Masyarakat Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['gol_mas_sekitar'] ?? ($lingkungan['gol_mas_sekitar'] ?? ['-'])) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Tingkat Keramaian</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['tingkat_keramaian']['tingkat_keramaian'] ?? ($lingkungan['tingkat_keramaian'] ?? ['-'])) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Terletak di Area</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['terletak_diarea']['terletak_diarea'] ?? ($lingkungan['terletak_diarea'] ?? ['-'])) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Kondisi Bangunan Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['kondisi_bagunan_disekitar_lokasi'] ?? '-' }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Sifat Bangunan Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $lingkungan['sifat_bagunan_disekitar_lokasi'] ?? '-' }}</td>
</tr>
@if ($lingkungan['dekat_makam'] == 'ya')
<tr>
<td style="padding: 2px; vertical-align: top;">Dekat Makam</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">Ya, Jarak
{{ $lingkungan['jarak_makam'] ?? '-' }} m
({{ $lingkungan['nama_makam'] ?? '-' }})
</td>
</tr>
@endif
@if ($lingkungan['dekat_tps'] == 'ya')
<tr>
<td style="padding: 2px; vertical-align: top;">Dekat TPS</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">Ya, Jarak
{{ $lingkungan['jarak_tps'] ?? '-' }} m
({{ $lingkungan['nama_tps'] ?? '-' }})</td>
</tr>
@endif
<tr>
<td style="padding: 2px; vertical-align: top;">Daerah</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['merupakan_daerah'] ?? ['-']) }}
</td>
</tr>
@if (!empty($fasilitas))
<tr>
<td style="padding: 2px; vertical-align: top;">Fasilitas Dekat Objek</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@foreach ($fasilitas as $fas)
{{ $fas }}
@if (isset($fasilitasInput[$fas]))
({{ $fasilitasInput[$fas] }})
@endif
@if (!$loop->last)
,
@endif
@endforeach
</td>
</tr>
@endif
</table>
@endif
</td>
</tr>
</table>
</div>
@if ($permohonan->is_mig)
@if(isset($mig_detail_legalitas_jaminan['ANALISA TANAH DAN BANGUNAN']))
<table width="100%">
<tr>
<td colspan="3" style="border: 1px solid #000;">
ANALISA TANAH DAN BANGUNAN
</td>
</tr>
@foreach ($mig_detail_legalitas_jaminan['ANALISA TANAH DAN BANGUNAN'] as $item)
<tr>
<td style="padding: 2px; vertical-align: top;">{{ $item['label'] }}</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ ltrim($item['value'], ',') }}</td>
</tr>
@endforeach
</table>
@endif
@endif
@foreach ($permohonan->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
@if ($dokumen->jenisJaminan) @if ($dokumen->jenisJaminan)
@php @php
@@ -410,15 +487,16 @@
$kategoriUnik = array_unique($kategoriArray); $kategoriUnik = array_unique($kategoriArray);
@endphp @endphp
@foreach ($kategoriUnik as $kategori) @if(!$permohonan->is_mig)
@foreach ($kategoriUnik as $kategori)
@if ($kategori !== 'lingkungan') @include(
@include('lpj::penilai.components.analisa.' . str_replace('-', '-', $kategori), [ 'lpj::penilai.components.analisa.' . str_replace('-', '-', $kategori),
'dokumen' => $dokumen, [
]) 'dokumen' => $dokumen,
@endif ]
)
@endforeach @endforeach
@endif
@endif @endif
@endif @endif
@endforeach @endforeach
@@ -431,7 +509,9 @@
</td> </td>
</tr> </tr>
</table> </table>
@include('lpj::penilai.components.print-pembanding') @if(isset($dataPembanding))
@include('lpj::penilai.components.print-pembanding')
@endif
</div> </div>
<div class="no-break"> <div class="no-break">
<table style="width: 100%"> <table style="width: 100%">
@@ -445,11 +525,12 @@
<td style="padding: 8px; width: 100%;"> <td style="padding: 8px; width: 100%;">
<table style="width: 100%; border-collapse: collapse;"> <table style="width: 100%; border-collapse: collapse;">
<tr> <tr>
<td colspan="3" style="padding: 8px; text-align: left;"> <td colspan="6" style="padding: 8px; text-align: left;">
<strong>a. Total Nilai Pasar Wajar</strong> <strong>a. Total Nilai Pasar Wajar</strong>
</td> </td>
</tr> </tr>
@php @php
$totalNilaiPasarWajar = 0;
$labelNilai = [ $labelNilai = [
'bangunan' => 'Luas Bangunan', 'bangunan' => 'Luas Bangunan',
'tanah' => 'Luas Tanah', 'tanah' => 'Luas Tanah',
@@ -461,81 +542,71 @@
'kapal' => 'Luas Kapal', 'kapal' => 'Luas Kapal',
]; ];
if (strcasecmp($jenisAset, 'RUKO/RUKAN') === 0) { if (strcasecmp($jenisAset, 'RUKO/RUKAN') === 0) {
$labelNilai['bangunan'] = 'Luas Unit'; $labelNilai['bangunan'] = 'Luas Unit';
unset($labelNilai['tanah']); unset($labelNilai['tanah']);
} }
@endphp @endphp
@foreach ($labelNilai as $key => $label)
@if (isset($lpjData['luas_' . $key]))
<tr>
<td style="padding: 3px; text-align: right; width:30%; ">
{{ $label }} {{ $lpjData['luas_' . $key] ?? '' }} m<sup>2</sup>
</td>
<td style="padding: 3px; width:30%;">
<span style="padding-left:20px; padding-right: 20px">X</span> Rp
{{ $lpjData['nilai_' . $key . '_1'] ?? '' }}
</td>
<td style="padding: 3px; text-align: left; width:40%;">
<span style="padding-left:20px; padding-right: 20px"> = </span> Rp
{{ $lpjData['nilai_' . $key . '_2'] ?? '' }}
</td>
</tr>
@endif
@endforeach
@if (isset($lpjData['npw_tambahan'])) @if (isset($lpjData['npw_tambahan']))
@foreach ($lpjData['npw_tambahan'] as $npw) @foreach ($lpjData['npw_tambahan'] as $npw)
<tr> <tr>
<td style="padding: 3px; text-align: right;"> <td width="30%" style="padding: 3px; text-align: right;">
{{ $npw['name'] }} {{ $npw['luas'] }} m<sup>2</sup> {{ $npw['name'] }}</sup>
</td> </td>
<td style="padding: 3px;"> <td width="10%" style="padding: 3px; text-align: right;">
<span style="padding-left:20px; padding-right: 20px">X</span> Rp {{ $npw['luas'] }} m<sup>2</sup>
{{ $npw['nilai_1'] }}
</td> </td>
<td style="padding: 3px; text-align: left; width:40%"> <td width="5%" style="padding: 3px; text-align: center;">X</td>
<span style="padding-left:20px; padding-right: 20px"> = </span> Rp <td width="25%" style="padding: 3px; text-align:right">
{{ $npw['nilai_2'] }} {{ number_format($npw['nilai_1'], 0, ',', '.') ?? '' }}
</td>
<td width="5" style="padding: 3px; text-align: center;">
=
</td>
<td width="25%" style="padding: 3px; text-align: left; text-align: right;">
{{ number_format($npw['nilai_2'], 0, ',', '.') ?? '' }}
</td> </td>
</tr> </tr>
@php $totalNilaiPasarWajar += $npw['nilai_2']; @endphp
@endforeach @endforeach
@endif @endif
<tr> <tr>
<td style="padding: 3px; font-weight: bold; width:30%;">Total Nilai Pasar Wajar</td> <td style="padding: 3px; text-align: right; font-weight: bold; width:10%;" colspan="4">Total Nilai Pasar Wajar</td>
<td style="padding: 3px; text-align: right; font-weight: bold; width:30%"></td> <td style="padding: 3px; text-align: center; width:5%;font-weight: bold;" >=</td>
<td style="padding: 3px; text-align: left; font-weight: bold; width: 40%;"> <td style="padding: 3px; text-align: right; font-weight: bold; width: 40%;">
<span style="padding-left: 20px; padding-right: 20px;">=</span>
<div style="display: inline-block; border-top: 1px solid black; padding-top: 3px;"> <div style="display: inline-block; border-top: 1px solid black; padding-top: 3px;">
Rp {{ $lpjData['total_nilai_pasar_wajar'] ?? '' }} {{ $lpjData['total_nilai_pasar_wajar'] ? number_format($lpjData['total_nilai_pasar_wajar'], 0, ',', '.') : number_format($totalNilaiPasarWajar, 0, ',', '.') ?? '' }}
</div> </div>
</td> </td>
</tr> </tr>
@if (isset($lpjData['likuidasi']) && $lpjData['likuidasi_nilai_2'] > 0) <tr>
<td colspan="6" style="padding: 8px; text-align: left; font-weight: bold;">
b. Total Nilai Likuidasi
<tr> </td>
<td colspan="3" style="padding: 8px; text-align: left; font-weight: bold;"> </tr>
b. Total Nilai Likuidasi <tr>
</td> <td style="padding: 3px; text-align: right;" colspan="4">
</tr> {{ $lpjData['likuidasi'] ?? '' }}% <span style="padding-left:20px; padding-right: 20px">X</span> Total Nilai Pasar
<tr> Wajar
<td style="padding: 3px; text-align: right; width:20%"> </td>
{{ $lpjData['likuidasi'] ?? '' }}% <td style="padding: 3px; text-align: center; font-weight: bold;">=</td>
</td> <td style="padding: 3px; text-align: right;font-weight: bold;">{{ number_format($permohonan_migrasi->mig_mst_lpj_tot_nilai_likuidasi, 0, ',', '.') ?? '' }}
<td style="padding: 3px; text-align: left; font-weight: bold; width:40%"> </td>
<span style="padding-left:20px; padding-right: 20px">X</span> Total Nilai Pasar Wajar </tr>
</td>
<td style="padding: 3px; text-align: left; width:40%;">
<span style="padding-left:20px; padding-right: 20px"> = </span> Rp
{{ $lpjData['likuidasi_nilai_2'] ?? '' }}
</td>
</tr>
@endif
</table> </table>
</td> </td>
</tr> </tr>
</table> </table>
</div> </div>
@if($permohonan->is_mig)
@include(
'lpj::penilai.components.analisa.informasi',
[
'dokumen' => $dokumen,
]
)
@endif
<div class="no-break"> <div class="no-break">
<table style="width: 100%;"> <table style="width: 100%;">
<tr> <tr>
@@ -570,7 +641,7 @@
maupun ekstern</td> maupun ekstern</td>
</tr> </tr>
<tr> <tr>
@include('lpj::penilai.components.signature-approval') @include('lpj::penilai.components.signature-approval',['laporan' => 'sederhana','npw' => $totalNilaiPasarWajar])
</tr> </tr>
</table> </table>
</div> </div>

View File

@@ -9,6 +9,8 @@
$dokument = $dokumen; $dokument = $dokumen;
} }
$data = rtrim($data, ', '); $data = rtrim($data, ', ');
$permohonan_migrasi = json_decode($permohonan->mig_permohonan);
@endphp @endphp
<main class="content"> <main class="content">
@php @php
@@ -52,13 +54,19 @@
<td style="width: 25%; padding: 2px; vertical-align: top;">Cabang/Pemohon</td> <td style="width: 25%; padding: 2px; vertical-align: top;">Cabang/Pemohon</td>
<td style="width: 1%; vertical-align: top;">:</td> <td style="width: 1%; vertical-align: top;">:</td>
<td style="vertical-align: top; vertical-align: top;"> <td style="vertical-align: top; vertical-align: top;">
{{ $permohonan->debiture->branch->name ?? '' }} {{ $permohonan->branch->name ?? '' }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td style="width: 25%; padding: 2px;">Tujuan Penilai</td> <td style="width: 25%; padding: 2px;">Tujuan Penilai</td>
<td style="width: 1%; padding: 2px;">:</td> <td style="width: 1%; padding: 2px;">:</td>
<td style="vertical-align: top; padding: 2px;"> <td style="vertical-align: top; padding: 2px;">
{{ $permohonan->tujuanPenilaian->name ?? '' }}</td>
</tr>
<tr>
<td style=" padding: 2px; vertical-align: top;">Fasilitas Kredit</td>
<td style=" padding: 2px; vertical-align: top;">:</td>
<td style=" padding: 2px; vertical-align: top;">
{{ $permohonan->jenisFasilitasKredit->name ?? '' }}</td> {{ $permohonan->jenisFasilitasKredit->name ?? '' }}</td>
</tr> </tr>
<tr> <tr>
@@ -77,7 +85,7 @@
{{ formatTanggalIndonesia($permohonan->tanggal_permohonan) }}</td> {{ formatTanggalIndonesia($permohonan->tanggal_permohonan) }}</td>
</tr> </tr>
<tr> <tr>
<td style="width: 25%; padding: 2px;">Tanggal Survey</td> <td style="width: 25%; padding: 2px;">Tanggal Penilaian</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td> <td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td style="vertical-align: top; width: 79%;"> <td style="vertical-align: top; width: 79%;">
{{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) }} {{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) }}
@@ -103,6 +111,13 @@
<td style="width: 1%; vertical-align: top;">:</td> <td style="width: 1%; vertical-align: top;">:</td>
<td style="vertical-align: top; ">{{ $permohonan->debiture->name ?? '' }}</td> <td style="vertical-align: top; ">{{ $permohonan->debiture->name ?? '' }}</td>
</tr> </tr>
<tr>
<td>Alamat dan Telpon</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ $permohonan->debiture->address ?? '' }} {{ $permohonan->debiture->phone ?? '' }}
</td>
</tr>
<tr> <tr>
<td style="width: 25%; padding: 2px; vertical-align: top;">Debitur / Wakil Debitur</td> <td style="width: 25%; padding: 2px; vertical-align: top;">Debitur / Wakil Debitur</td>
<td style="width: 1%; vertical-align: top;">:</td> <td style="width: 1%; vertical-align: top;">:</td>
@@ -137,14 +152,20 @@
</td> </td>
</tr> </tr>
</table> </table>
@if ($permohonan->is_mig == 1) @if ($permohonan->is_mig == 1)
<table style="width: 100%; "> <table style="width: 100%; ">
@if (@isset($dokumen)) @if (isset($dokumen))
<tr>
<td width="25%">Jenis Jaminan</td>
<td width="1%">:</td>
<td>{{ $dokumen->jenisJaminan?->name ?? '' }}</td>
</tr>
@foreach ($dokumen->detail as $detail) @foreach ($dokumen->detail as $detail)
@if (!empty($detail->name) && isset($detail->details) && !empty($detail->dokumen_jaminan)) @if (!empty($detail->name) && isset($detail->details) && !empty($detail->dokumen_jaminan))
<tr> <!--<tr>
<td width="25%"><strong>{{ $detail->name ?? '' }}</strong></td> <td width="25%"><strong>{{ $detail->name ?? '' }}</strong></td>
</tr> </tr>-->
@endif @endif
@if (isset($detail->details) && $detail->name == 'LOKASI JAMINAN') @if (isset($detail->details) && $detail->name == 'LOKASI JAMINAN')
@@ -200,6 +221,7 @@
</table> </table>
{{-- </div> --}} {{-- </div> --}}
@if (!$permohonan->is_mig)
<div class="no-break"> <div class="no-break">
<table style="width: 100%; "> <table style="width: 100%; ">
<tr> <tr>
@@ -243,13 +265,45 @@
</tr> </tr>
</table> </table>
</div> </div>
@endif
@if ($permohonan->is_mig)
@php $mig_detail_legalitas_jaminan = json_decode($inspeksi->mig_detail_legalitas_jaminan, true); @endphp
@if($mig_detail_legalitas_jaminan)
@foreach($mig_detail_legalitas_jaminan as $key => $items)
<table width="100%">
<tr>
<td colspan="3" style="border: 1px solid #000; text-align: center;">
{{ $key }}
</td>
</tr>
@php $currentLabel=''; @endphp
@foreach ($items as $item)
<tr>
<td style="padding: 2px; vertical-align: top;">
@if ($currentLabel !== $item['label'])
{{ $item['label'] }}
@endif
@php
if ($currentLabel !== $item['label']) {
$currentLabel = $item['label'];
}
@endphp
</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ ltrim($item['value'], ',') }}</td>
</tr>
@endforeach
</table>
@endforeach
@endif
@endif
@foreach ($permohonan->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
@if ($dokumen->jenisJaminan) @if ($dokumen->jenisJaminan)
@php @php
$formKategori = json_decode($dokumen->jenisJaminan->form_kategori, true); $formKategori = json_decode($dokumen->jenisJaminan->form_kategori, true);
@endphp @endphp
@if(!$permohonan->is_mig)
@if (isset($formKategori) && $formKategori) @if (isset($formKategori) && $formKategori)
@php @php
$kategoriArray = is_array($formKategori) ? $formKategori : [$formKategori]; $kategoriArray = is_array($formKategori) ? $formKategori : [$formKategori];
@@ -262,6 +316,7 @@
]) ])
@endforeach @endforeach
@endif @endif
@endif
@endif @endif
@endforeach @endforeach
@@ -273,103 +328,93 @@
</td> </td>
</tr> </tr>
</table> </table>
@if(isset($dataPembanding))
@include('lpj::penilai.components.print-pembanding') @include('lpj::penilai.components.print-pembanding')
@endif
</div> </div>
<div class="no-break"> <div class="no-break">
<table style="width: 100%; "> <table style="width: 100%;">
<tr> <tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;"> <td style="width: 100%; border: 1px solid #000; text-align: center;">
TOTAL NILAI PASAR WAJAR TOTAL NILAI PASAR WAJAR
</td> </td>
</tr> </tr>
</table> </table>
<table> <table style="width: 100%;">
<tr> <tr>
<td colspan="3" style=" padding: 8px; text-align: left;">1. Total Nilai Pasar Wajar <td colspan="6" style=" padding: 8px; text-align: left;width:100%">1. Total Nilai Pasar Wajar
</td> </td>
</tr> </tr>
@php @php
$totalNilaiPasarWajar = 0;
$labelNilai = [ $labelNilai = [
'bangunan' => 'Luas Bangunan', 'bangunan' => 'Luas Bangunan',
'tanah' => 'Luas Tanah', 'tanah' => 'Luas Tanah',
'apartemen-kantor' => 'Luas Unit', 'apartemen-kantor' => 'Luas Unit',
'apartemen' => 'Luas Unit',
'alat-berat' => 'Luas Alat Berat', 'alat-berat' => 'Luas Alat Berat',
'mesin' => 'Luas Mesin', 'mesin' => 'Luas Mesin',
'kendaraan' => 'Luas Kendaraan', 'kendaraan' => 'Luas Kendaraan',
'pesawat' => 'Luas Pesawat', 'pesawat' => 'Luas Pesawat',
'kapal' => 'Luas Kapal', 'kapal' => 'Luas Kapal',
]; ];
if (strcasecmp($jenisAset, 'RUKO/RUKAN') === 0) { if (strcasecmp($jenisAset, 'RUKO/RUKAN') === 0) {
$labelNilai['bangunan'] = 'Luas Unit'; $labelNilai['bangunan'] = 'Luas Unit';
unset($labelNilai['tanah']); unset($labelNilai['tanah']);
}
if (strcasecmp($jenisAset, 'Apartemen') === 0) {
$labelNilai['tanah'] = 'Luas Unit';
} }
@endphp @endphp
@foreach ($labelNilai as $key => $label)
@if (isset($lpjData['luas_' . $key]))
<tr>
<td style="padding: 3px; text-align: right; width:45%; ">
{{ $label }} {{ $lpjData['luas_' . $key] ?? '' }} m<sup>2</sup>
</td>
<td style="padding: 3px; width:5%;">
<span style="padding-left:20px; padding-right: 20px">X</span> Rp
{{ $lpjData['nilai_' . $key . '_1'] ?? '' }}
</td>
<td style="padding: 3px; text-align: left; width:60%;">
<span style="padding-left:20px; padding-right: 20px"> = </span> Rp
{{ $lpjData['nilai_' . $key . '_2'] ?? '' }}
</td>
</tr>
@endif
@endforeach
@if (isset($lpjData['npw_tambahan'])) @if (isset($lpjData['npw_tambahan']))
@foreach ($lpjData['npw_tambahan'] as $npw) @foreach ($lpjData['npw_tambahan'] as $npw)
<tr> <tr>
<td style="padding: 3px; text-align: right;"> <td width="30%" style="padding: 3px; text-align: right;">
{{ $npw['name'] }} {{ $npw['luas'] }} m<sup>2</sup> {{ $npw['name'] }}</sup>
</td> </td>
<td style="padding: 3px;"> <td width="10%" style="padding: 3px; text-align: right;">
<span style="padding-left:20px; padding-right: 20px">X</span> Rp {{ $npw['luas'] }} m<sup>2</sup>
{{ $npw['nilai_1'] }}
</td> </td>
<td style="padding: 3px; text-align: left; width:70%"> <td width="5%" style="padding: 3px; text-align: center;">X</td>
<span style="padding-left:20px; padding-right: 20px"> = </span> Rp <td width="25%" style="padding: 3px; text-align:right">
{{ $npw['nilai_2'] }} {{ number_format($npw['nilai_1'], 0, ',', '.') ?? '' }}
</td>
<td width="5" style="padding: 3px; text-align: center;">=</td>
<td width="25%" style="padding: 3px; text-align: left; text-align: right;">
{{ number_format($npw['nilai_2'], 0, ',', '.') ?? '' }}
</td> </td>
</tr> </tr>
@php $totalNilaiPasarWajar += $npw['nilai_2']; @endphp
@endforeach @endforeach
@endif @endif
<tr> <tr>
<td style="padding: 3px; font-weight: bold; width:10%;">Total Nilai Pasar Wajar</td> <td style="padding: 3px; text-align: right; font-weight: bold; width:10%;" colspan="4">Total Nilai Pasar Wajar</td>
<td style="padding: 3px; text-align: right; font-weight: bold; width:10%"></td> <td style="padding: 3px; text-align: center; width:5%;font-weight: bold;" >=</td>
<td style="padding: 3px; text-align: left; font-weight: bold; width: 70%;"> <td style="padding: 3px; text-align: right; font-weight: bold; width: 40%;">
<span style="padding-left: 20px; padding-right: 20px;">=</span>
<div style="display: inline-block; border-top: 1px solid black; padding-top: 3px;"> <div style="display: inline-block; border-top: 1px solid black; padding-top: 3px;">
Rp {{ $lpjData['total_nilai_pasar_wajar'] ?? '' }} {{ $lpjData['total_nilai_pasar_wajar'] ? number_format($lpjData['total_nilai_pasar_wajar'], 0, ',', '.') : number_format($totalNilaiPasarWajar, 0, ',', '.') ?? '' }}
</div> </div>
</td> </td>
</tr> </tr>
<!-- Total Nilai Likuidasi --> <!-- Total Nilai Likuidasi -->
@if (isset($lpjData['likuidasi']) && $lpjData['likuidasi_nilai_2'] > 0) @if (isset($permohonan_migrasi->mig_mst_lpj_tot_nilai_likuidasi) || isset($lpjData['likuidasi']) && $lpjData['likuidasi_nilai_2'] > 0)
<tr> <tr>
<td colspan="3" style="padding: 8px; text-align: left"> <td colspan="6" style="padding: 8px; text-align: left">
2. Total Nilai Likuidasi 2. Total Nilai Likuidasi
</td> </td>
</tr> </tr>
<tr> <tr>
<td style="padding: 3px; text-align: right; width:10%"> <td style="padding: 3px; text-align: right;" colspan="4">
{{ $lpjData['likuidasi'] ?? '' }}% {{ $lpjData['likuidasi'] ?? '' }}% <span style="padding-left:20px; padding-right: 20px">X</span> Total Nilai Pasar Wajar
</td> </td>
<td style="padding: 3px; text-align: left; font-weight: bold; width:10%"> <td style="padding: 3px; text-align: center; font-weight: bold;">=</td>
<span style="padding-left:20px; padding-right: 20px">X</span> Total Nilai Pasar Wajar <td style="padding: 3px; text-align: right;font-weight: bold;">{{ number_format($permohonan_migrasi->mig_mst_lpj_tot_nilai_likuidasi, 0, ',', '.') ?? '' }}
</td>
<td style="padding: 3px; text-align: left; width:70%;">
<span style="padding-left:20px; padding-right: 20px"> = </span> Rp
{{ $lpjData['likuidasi_nilai_2'] ?? '' }}
</td> </td>
</tr> </tr>
@endif @endif
@@ -381,6 +426,136 @@
$keterangan = implode(', ', array_filter($keterangan)); $keterangan = implode(', ', array_filter($keterangan));
} }
@endphp @endphp
@if($permohonan->is_mig)
@if (!empty($forminspeksi['fakta']['fakta_positif']))
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
FAKTOR POSITIF
</td>
</tr>
</table>
@foreach ($forminspeksi['fakta']['fakta_positif'] as $key => $item)
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; text-align: left;">
@if (is_array($item))
@foreach ($item as $data_)
{!! nl2br(e($data_)) !!}<br>
@endforeach
@else
{!! nl2br(e($item)) !!}
@endif
</td>
</tr>
</table>
@endforeach
@endif
@if (!empty($forminspeksi['fakta']['fakta_negatif']))
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
FAKTOR NEGATIF
</td>
</tr>
</table>
@foreach ($forminspeksi['fakta']['fakta_negatif'] as $key => $item)
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; text-align: left;">
@if (is_array($item))
@foreach ($item as $data_)
{!! nl2br(e($data_)) !!}<br>
@endforeach
@else
{!! nl2br(e($item)) !!}
@endif
</td>
</tr>
</table>
@endforeach
@endif
@if (!empty($forminspeksi['fakta']['informasi_dokument']))
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
LAIN - LAIN
</td>
</tr>
</table>
@foreach ($forminspeksi['fakta']['informasi_dokument'] as $key => $item)
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; text-align: left;">
@if (is_array($item))
@foreach ($item as $data_)
{!! nl2br(e($data_)) !!}<br>
@endforeach
@else
{!! nl2br(e($item)) !!}
@endif
</td>
</tr>
</table>
@endforeach
@endif
@if (!empty($forminspeksi['fakta']['keterangan']))
@foreach ($forminspeksi['fakta']['keterangan'] as $key => $item)
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
{{ $key }}
</td>
</tr>
</table>
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; text-align: left;">
@if (is_array($item))
@foreach ($item as $data_)
{!! nl2br(e($data_)) !!}<br>
@endforeach
@else
{!! nl2br(e($item)) !!}
@endif
</td>
</tr>
</table>
@endforeach
@endif
@if (!empty($forminspeksi['fakta']['saran']))
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
SARAN
</td>
</tr>
</table>
@foreach ($forminspeksi['fakta']['saran'] as $key => $item)
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; text-align: left;">
<ul style="margin: 0px;padding-left: 10px;">
<li>
@if (is_array($item))
@foreach ($item as $data_)
{!! nl2br(e($data_)) !!}<br>
@endforeach
@else
{!! nl2br(e($item)) !!}
@endif
</li>
</ul>
</td>
</tr>
</table>
@endforeach
@endif
@endif
@if (!empty($keterangan)) @if (!empty($keterangan))
<table style="width: 100% margin-top: 20px"> <table style="width: 100% margin-top: 20px">
<tr> <tr>
@@ -395,7 +570,7 @@
</tr> </tr>
</table> </table>
@endif @endif
<div class="no-break"> <div class="no-break" style="margin-top:20px;">
<table style="width: 100%"> <table style="width: 100%">
<tr> <tr>
<td>Demikian laporan penilai jaminan ini di buat secara objektif, tanpa adanya pengaruh baik intern <td>Demikian laporan penilai jaminan ini di buat secara objektif, tanpa adanya pengaruh baik intern
@@ -403,7 +578,7 @@
</tr> </tr>
</table> </table>
@include('lpj::penilai.components.signature-approval') @include('lpj::penilai.components.signature-approval',['laporan' => 'standar','npw' => $totalNilaiPasarWajar])
</div> </div>
<hr /> <hr />
<table style="width: 100%; "> <table style="width: 100%; ">

View File

@@ -41,7 +41,7 @@
<td style="width: 33%; vertical-align: top;">Keterangan</td> <td style="width: 33%; vertical-align: top;">Keterangan</td>
<td style="width: 5%; vertical-align: top;">:</td> <td style="width: 5%; vertical-align: top;">:</td>
<td style="width: 62%;"> <td style="width: 62%;">
{{isset($data['keterangan']) ? parsePembandingMigration($data['keterangan']) : '' }} {!! isset($data['keterangan']) ? nl2br(e(parsePembandingMigration($data['keterangan']))) : '' !!}
</td> </td>
</tr> </tr>
@else @else

View File

@@ -95,7 +95,7 @@
<td>{{ $alamat['province_code'] ?? '' }}</td> <td>{{ $alamat['province_code'] ?? '' }}</td>
</tr> </tr>
<tr> <tr>
<td>Tanggal Survey</td> <td>Tanggal Penilaian</td>
<td>:</td> <td>:</td>
<td>{{ isset($permohonan->penilaian->tanggal_kunjungan) ? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '' }} <td>{{ isset($permohonan->penilaian->tanggal_kunjungan) ? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '' }}
</td> </td>

View File

@@ -1,7 +1,8 @@
<table style="width: 100%; border-collapse: collapse; text-align: center;"> <table style="width: 100%; border-collapse: collapse; text-align: center;" border="1">
@php @php
use Modules\Usermanagement\Models\User; use Modules\Usermanagement\Models\User;
$laporan = $laporan ?? '';
$penilaiUser = isset($penilai->userPenilaiTeam) ? $penilai->userPenilaiTeam : null; $penilaiUser = isset($penilai->userPenilaiTeam) ? $penilai->userPenilaiTeam : null;
$imagePathPenilai = $penilaiUser && $penilaiUser->sign $imagePathPenilai = $penilaiUser && $penilaiUser->sign
? storage_path('app/public/signatures/' . $penilaiUser->id . '/' . $penilaiUser->sign) ? storage_path('app/public/signatures/' . $penilaiUser->id . '/' . $penilaiUser->sign)
@@ -17,7 +18,6 @@
? storage_path('app/public/signatures/' . $eoUser->id . '/' . $eoUser->sign) ? storage_path('app/public/signatures/' . $eoUser->id . '/' . $eoUser->sign)
: null; : null;
$ddUser = $permohonan->approval_dd ? User::find($permohonan->approval_dd) : null; $ddUser = $permohonan->approval_dd ? User::find($permohonan->approval_dd) : null;
$imagePathDD = $ddUser && $ddUser->sign $imagePathDD = $ddUser && $ddUser->sign
? storage_path('app/public/signatures/' . $ddUser->id . '/' . $ddUser->sign) ? storage_path('app/public/signatures/' . $ddUser->id . '/' . $ddUser->sign)
@@ -33,81 +33,148 @@
); );
@endphp @endphp
<tr> <tr>
<td style=" padding: 4px;height: 50px"> <td style=" padding: 4px;height: 25px">
<b>Penilaian Dibuat</b>
</td>
@if($soUser->name==$eoUser->name)
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;height: 25px">
<b>Diperiksa dan Menyetujui</b>
</td>
@endif
@else
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;height: 25px">
<b>Diperiksa</b>
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;height: 25px">
<b>Menyetujui</b>
</td>
@endif
@endif
@if($permohonan->approval_dd!==$permohonan->approval_eo)
@if ($permohonan->approval_dd != null)
<td style=" padding: 4px;height: 25px">
<b>Menyetujui</b>
</td>
@endif
@endif
</tr>
<tr>
<td style=" padding: 4px;height: 75px">
@if (file_exists($imagePathPenilai)) @if (file_exists($imagePathPenilai))
<img src="{{ $imagePathPenilai }}" alt="{{ $imagePathPenilai }}" width="80px"> <img src="{{ $imagePathPenilai }}" alt="{{ $imagePathPenilai }}" width="80px">
@endif @endif
</td> </td>
@if ($permohonan->approval_so != null) @if($soUser->name==$eoUser->name)
<td style=" padding: 4px;height: 50px"> @if ($permohonan->approval_so != null)
@if (file_exists($imagePathSo)) <td style=" padding: 4px;height: 75px">
<img src="{{ $imagePathSo }}" alt="{{ $imagePathSo }}" width="80px"> @if (file_exists($imagePathSo))
@endif <img src="{{ $imagePathSo }}" alt="{{ $imagePathSo }}" width="80px">
</td> @endif
</td>
@endif
@else
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;height: 75px">
@if (file_exists($imagePathSo))
<img src="{{ $imagePathSo }}" alt="{{ $imagePathSo }}" width="80px">
@endif
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;height: 75px">
@if (file_exists($imagePathEO))
<img src="{{ $imagePathEO }}" alt="{{ $imagePathEO }}" width="80px">
@endif
</td>
@endif
@endif @endif
@if ($permohonan->approval_eo != null) @if($permohonan->approval_dd!==$permohonan->approval_eo)
<td style=" padding: 4px;height: 50px"> @if ($permohonan->approval_dd != null)
@if (file_exists($imagePathEO)) <td style=" padding: 4px;height: 75px">
<img src="{{ $imagePathEO }}" alt="{{ $imagePathEO }}" width="80px"> @if (file_exists($imagePathDD))
@endif <img src="{{ $imagePathDD }}" alt="{{ $imagePathDD }}" width="80px">
</td> @endif
@endif </td>
@if ($permohonan->approval_dd != null) @endif
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathDD))
<img src="{{ $imagePathDD }}" alt="{{ $imagePathDD }}" width="80px">
@endif
</td>
@endif @endif
</tr> </tr>
<tr> <tr>
<td style=" padding: 4px;">{{ $penilai->userPenilaiTeam->name ?? '' }}</br> <td style=" padding: 4px;">{{ $penilai->userPenilaiTeam->name ?? '' }}</br>
<span> <span>
{{ ucwords(strtolower('PENILAI')) }} <b>{{ ucwords(strtolower('PENILAI')) }}</b>
</span> </span>
</br> </br>
<span> <span>
{{ isset($penilai->updated_at) ? formatTanggalIndonesia($penilai->updated_at) : '' }} {{ $permohonan_migrasi->mig_mst_jaminan_tgl_laporan ? formatTanggalIndonesia(parseTimestamp($permohonan_migrasi->mig_mst_jaminan_tgl_laporan)) : ($permohonan_migrasi->mig_mst_lpj_tgl_laporan ? formatTanggalIndonesia(parseTimestamp($permohonan_migrasi->mig_mst_lpj_tgl_laporan)) : '') }}
</span> </span>
</td> </td>
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;">
{{ $senior_officer->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('SENIOR OFFICER')) }}
</span>
</br>
<span>
{{ isset($permohonan->approval_so_at) ? formatTanggalIndonesia($permohonan->approval_so_at) : '' }}
</span>
</td>
@endif
@if ($permohonan->approval_eo != null) @if($soUser->name==$eoUser->name)
<td style=" padding: 4px;"> @if ($permohonan->approval_so != null)
{{ User::role('EO Appraisal')->first()->name ?? '' }}</br> <td style=" padding: 4px;">
<span> {{ $soUser->name ?? $senior_officer->name ?? '' }}</br>
{{ ucwords(strtolower('EXECUTIVE OFFICER')) }} <span>
</span> @if($npw > 1000000000 && $npw < 5000000000)
</br> <b>{{ ucwords(strtolower('EXECUTIVE OFFICER')) }}</b>
<span> @else
{{ isset($permohonan->approval_eo_at) ? formatTanggalIndonesia($permohonan->approval_eo_at) : '' }} <b>{{ ucwords(strtolower('SENIOR OFFICER')) }}</b>
</span> @endif
</td> </span>
</br>
<span>
{{ isset($permohonan->approval_so_at) ? formatTanggalIndonesia($permohonan->approval_so_at) : '' }}
</span>
</td>
@endif
@else
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;">
{{ $soUser->name ?? $senior_officer->name ?? '' }}</br>
<span>
<b>{{ ucwords(strtolower('SENIOR OFFICER')) }}</b>
</span>
</br>
<span>
{{ isset($permohonan->approval_so_at) ? formatTanggalIndonesia($permohonan->approval_so_at) : '' }}
</span>
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;">
{{ $eoUser->name ?? User::role('EO Appraisal')->first()->name ?? '' }}</br>
<span>
<b>{{ ucwords(strtolower('EXECUTIVE OFFICER')) }}</b>
</span>
</br>
<span>
{{ isset($permohonan->approval_eo_at) ? formatTanggalIndonesia($permohonan->approval_eo_at) : '' }}
</span>
</td>
@endif
@endif @endif
@if ($permohonan->approval_dd != null) @if($permohonan->approval_dd!==$permohonan->approval_eo)
<td style=" padding: 4px;"> @if ($permohonan->approval_dd != null)
{{ User::role('DD Appraisal')->first()->name ?? '' }}</br> <td style=" padding: 4px;">
<span> {{ $ddUser->name ?? User::role('DD Appraisal')->first()->name ?? '' }}</br>
{{ ucwords(strtolower('DEPUTY DIRECTOR')) }} <span>
</span> <b>{{ ucwords(strtolower('DEPUTY DIRECTOR')) }}</b>
</br> </span>
<span> </br>
{{ <span>
isset($permohonan->approval_dd_at) ? {{
formatTanggalIndonesia($permohonan->approval_dd_at) : '' }} isset($permohonan->approval_dd_at) ?
</span> formatTanggalIndonesia($permohonan->approval_dd_at) : '' }}
</td> </span>
</td>
@endif
@endif @endif
</tr> </tr>
</table> </table>

View File

@@ -65,7 +65,7 @@
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="tanggal_survei"> <th class="min-w-[150px]" data-datatable-column="tanggal_survei">
<span class="sort"> <span class="sort-label"> Tanggal Survei </span> <span class="sort"> <span class="sort-label"> Tanggal Penilaian </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="due_date_sla"> <th class="min-w-[150px]" data-datatable-column="due_date_sla">
@@ -183,7 +183,7 @@
}, },
}, },
tanggal_survei: { tanggal_survei: {
title: 'Tanggal Survei', title: 'Tanggal Penilaian',
render: (item, data) => { render: (item, data) => {
if (data.penilaian.waktu_penilaian) { if (data.penilaian.waktu_penilaian) {
return `${formatDate(new Date(data.penilaian.waktu_penilaian))}`; return `${formatDate(new Date(data.penilaian.waktu_penilaian))}`;

View File

@@ -95,7 +95,6 @@
{{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) ?? '' }}</p> {{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) ?? '' }}</p>
</div> </div>
@if (!in_array(strtolower($permohonan->tujuanPenilaian->name), ['penilaian ulang', 'asuransi', 'lelang'])) @if (!in_array(strtolower($permohonan->tujuanPenilaian->name), ['penilaian ulang', 'asuransi', 'lelang']))
<label class="form-label max-w-56 "> <label class="form-label max-w-56 ">
Status Bayar Status Bayar
</label> </label>
@@ -105,11 +104,10 @@
{{ str_replace('_', ' ', $permohonan->status_bayar) }} {{ str_replace('_', ' ', $permohonan->status_bayar) }}
</span> </span>
</div> </div>
@endif
@endif </div>
</div> </div>
</div> </div>
</div>
@foreach ($permohonan->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
@@ -164,7 +162,7 @@
</div> </div>
<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">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Tanggal Survei Tanggal Penilaian
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<p class="flex w-full text-gray-600 font-medium text-sm"> <p class="flex w-full text-gray-600 font-medium text-sm">
@@ -220,116 +218,116 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full card-footer mt-2 "> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full card-footer mt-2 ">
<div class="flex gap-5"> <div class="flex gap-5">
<a class="btn btn-primary" <a class="btn btn-primary"
href="{{ route('penilai.lampiran') }}?permohonanId={{ $permohonan->id }}&documentId={{ $dokumen->id }}&jaminanId={{ $dokumen->jenis_jaminan_id }}"> href="{{ route('penilai.lampiran') }}?permohonanId={{ $permohonan->id }}&documentId={{ $dokumen->id }}&jaminanId={{ $dokumen->jenis_jaminan_id }}">
Lampiran Foto dan Dokumen Lampiran Foto dan Dokumen
</a> </a>
@if ($permohonan->status != 'freeze') @if ($permohonan->status != 'freeze')
@if (strtolower($permohonan->tujuanPenilaian->name) != 'rap') @if (strtolower($permohonan->tujuanPenilaian->name) != 'rap')
<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>
@endif
<a class="btn btn-primary"
onclick="paparan({{ $permohonan->id }}, {{ $dokumen->id }}, {{ $dokumen->jenis_jaminan_id }})">
Paparan
</a> </a>
@endif
<a class="btn btn-primary"
onclick="paparan({{ $permohonan->id }}, {{ $dokumen->id }}, {{ $dokumen->jenis_jaminan_id }})">
Paparan
</a>
<div class="dropdown" data-dropdown="true" data-dropdown-trigger="click"> <div class="dropdown" data-dropdown="true" data-dropdown-trigger="click">
<button class="dropdown-toggle btn btn-primary "> <button class="dropdown-toggle btn btn-primary ">
Pembuatan Laporan Pembuatan Laporan
</button> </button>
{{-- kios tanah bangunan kalo dalam mall ruko --}}
<div class="dropdown-content w-full max-w-56 py-2">
<div class="menu menu-default flex flex-col w-full">
@if (strtolower($permohonan->tujuanPenilaian->name) == 'rap')
<div class="menu-item">
<a class="menu-link"
onclick="rap('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-message-programming">
</i>
</span>
<span class="menu-title">
RAP
</span>
</a>
</div>
@else
{{-- pendapingan kjjp leleang --}}
{{-- memo pendapingan lelang --}}
{{-- existing di --}}
<div class="menu-item">
<a class="menu-link"
onclick="memo('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-badge">
</i>
</span>
<span class="menu-title">
MEMO
</span>
</a>
</div>
@if (!in_array(strtoupper($dokumen->jenisJaminan->name), $tanahBangunanTypes))
@if ($permohonan->status_bayar === 'belum_bayar')
<div class="menu-item">
<a class="menu-link"
onclick="resume('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-profile-circle">
</i>
</span>
<span class="menu-title">
RESUME
</span>
</a>
</div>
@endif
{{-- untuk laporan standart itu non kerjasama tapi sederhanan in kerjasama --}}
{{-- kios tanah bangunan kalo dalam mall ruko --}}
<div class="dropdown-content w-full max-w-56 py-2">
<div class="menu menu-default flex flex-col w-full">
@if (strtolower($permohonan->tujuanPenilaian->name) == 'rap')
<div class="menu-item">
<a class="menu-link"
onclick="rap('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-message-programming">
</i>
</span>
<span class="menu-title">
RAP
</span>
</a>
</div>
@else
{{-- pendapingan kjjp leleang --}}
{{-- memo pendapingan lelang --}}
{{-- existing di --}}
<div class="menu-item">
<a class="menu-link"
onclick="memo('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-badge">
</i>
</span>
<span class="menu-title">
MEMO
</span>
</a>
</div>
@if (!in_array(strtoupper($dokumen->jenisJaminan->name), $tanahBangunanTypes))
@if ($permohonan->status_bayar === 'belum_bayar')
<div class="menu-item"> <div class="menu-item">
<a class="menu-link" <a class="menu-link"
onclick="resume('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }})"> onclick="seletSederhanaStandart('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }}, '{{ $permohonan->jenisFasilitasKredit->name }}', '{{ $permohonan->status_bayar }}')">
<span class="menu-icon"> <span class="menu-icon">
<i class="ki-outline ki-profile-circle"> <i class="ki-outline ki-setting-2"></i>
</i>
</span>
<span class="menu-title">
RESUME
</span> </span>
<span class="menu-title">LPJ</span>
</a> </a>
</div> </div>
@endif @endif
{{-- untuk laporan standart itu non kerjasama tapi sederhanan in kerjasama --}}
<div class="menu-item"> <div class="menu-item">
<a class="menu-link" <a class="menu-link"
onclick="seletSederhanaStandart('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }}, '{{ $permohonan->jenisFasilitasKredit->name }}', '{{ $permohonan->status_bayar }}')"> onclick="callReport('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon"> <span class="menu-icon">
<i class="ki-outline ki-setting-2"></i> <i class="ki-outline ki-profile-circle">
</i>
</span>
<span class="menu-title">
CALL REPORT
</span> </span>
<span class="menu-title">LPJ</span>
</a> </a>
</div> </div>
@endif @endif
<div class="menu-item">
<a class="menu-link"
onclick="callReport('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-profile-circle">
</i>
</span>
<span class="menu-title">
CALL REPORT
</span>
</a>
</div>
@endif
{{-- @if ($permohonan->penilaian->jenis_penilaian_id == 2 && $permohonan->tujuanPenilaian->id == 4) --}} {{-- @if ($permohonan->penilaian->jenis_penilaian_id == 2 && $permohonan->tujuanPenilaian->id == 4) --}}
{{-- @endif --}} {{-- @endif --}}
</div>
</div> </div>
</div> </div>
</div>
{{-- @if($permohonan->jenisPenilaian->name=="Eksternal") {{-- @if ($permohonan->jenisPenilaian->name == 'Eksternal')
@if(isset($permohonan->laporanExternal->file_resume) || isset($permohonan->laporanExternal->file_laporan)) @if (isset($permohonan->laporanExternal->file_resume) || isset($permohonan->laporanExternal->file_laporan))
<div class="dropdown" data-dropdown="true" data-dropdown-trigger="click"> <div class="dropdown" data-dropdown="true" data-dropdown-trigger="click">
<button class="dropdown-toggle btn btn-primary"> <button class="dropdown-toggle btn btn-primary">
Laporan Eksternal Laporan Eksternal
</button> </button>
<div class="dropdown-content w-full max-w-56 py-2 !ml-[200px] !mt-[-20px]"> <div class="dropdown-content w-full max-w-56 py-2 !ml-[200px] !mt-[-20px]">
<div class="menu menu-default flex flex-col w-full"> <div class="menu menu-default flex flex-col w-full">
@if(isset($permohonan->laporanExternal->file_resume) && !empty($permohonan->laporanExternal->file_resume)) @if (isset($permohonan->laporanExternal->file_resume) && !empty($permohonan->laporanExternal->file_resume))
<div class="menu-item"> <div class="menu-item">
<a class="menu-link" onclick="viewPDF('{{ Storage::url($permohonan->laporanExternal->file_resume) }}')"> <a class="menu-link" onclick="viewPDF('{{ Storage::url($permohonan->laporanExternal->file_resume) }}')">
<span class="menu-icon"> <span class="menu-icon">
@@ -341,7 +339,7 @@
</a> </a>
</div> </div>
@endif @endif
@if(isset($permohonan->laporanExternal->file_laporan) && !empty($permohonan->laporanExternal->file_laporan)) @if (isset($permohonan->laporanExternal->file_laporan) && !empty($permohonan->laporanExternal->file_laporan))
<div class="menu-item"> <div class="menu-item">
<a class="menu-link" onclick="viewPDF('{{ Storage::url($permohonan->laporanExternal->file_laporan) }}')"> <a class="menu-link" onclick="viewPDF('{{ Storage::url($permohonan->laporanExternal->file_laporan) }}')">
@@ -365,18 +363,18 @@
<div class="flex justify-end gap-5"> <div class="flex justify-end gap-5">
<a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => $dokumen->id, 'jenis_jaminan_id' => $dokumen->jenis_jaminan_id]) }}" <a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => $dokumen->id, 'jenis_jaminan_id' => $dokumen->jenis_jaminan_id]) }}"
class="btn btn-light"> class="btn btn-light">
<i class="ki-filled ki-printer"></i> Cetak Hasil Inspeksi <i class="ki-filled ki-printer"></i> Cetak Hasil Inspeksi
</a> </a>
<a class="btn btn-outline btn-info " <a class="btn btn-outline btn-info "
href="penilai/show-laporan-inspeksi/{{ $permohonan->id }}/{{ $dokumen->id }}/{{ $dokumen->jenis_jaminan_id }}"> href="penilai/show-laporan-inspeksi/{{ $permohonan->id }}/{{ $dokumen->id }}/{{ $dokumen->jenis_jaminan_id }}">
<i class="ki-filled ki-eye"></i> <i class="ki-filled ki-eye"></i>
Lihat Laporan Lihat Laporan
</a> </a>
<a class="btn btn-success" <a class="btn btn-success"
href="penilai/print-out-laporan/{{ $permohonan->id }}/{{ $dokumen->id }}/{{ $dokumen->jenis_jaminan_id }}?type=penilai"> href="penilai/print-out-laporan/{{ $permohonan->id }}/{{ $dokumen->id }}/{{ $dokumen->jenis_jaminan_id }}?type=penilai">
<i class="ki-filled ki-printer"></i> <i class="ki-filled ki-printer"></i>
Cetak Laporan Cetak Laporan
</a> </a>
@@ -385,19 +383,19 @@
</div> </div>
@endforeach @endforeach
@if ($permohonan->status != 'freeze') @if ($permohonan->status != 'freeze')
<div class="flex justify-start gap-5"> <div class="flex justify-start gap-5">
<a class="btn btn-success" onclick="savePenilai()"> <a class="btn btn-success" onclick="savePenilai()">
<i class="ki-filled ki-paper-plane"></i> <i class="ki-filled ki-paper-plane"></i>
REPORT REPORT
</a> </a>
<a class="btn btn-warning" <a class="btn btn-warning"
{{ $permohonan->status == 'proses-paparan' || $permohonan->status == 'proses-laporan' ? 'disabled' : '' }} {{ $permohonan->status == 'proses-paparan' || $permohonan->status == 'proses-laporan' ? 'disabled' : '' }}
onclick="revisiSurveyor('{{ $permohonan->id }}', '{{ $permohonan->debiture->name }}', '{{ $permohonan->nomor_registrasi }}')"> onclick="revisiSurveyor('{{ $permohonan->id }}', '{{ $permohonan->debiture->name }}', '{{ $permohonan->nomor_registrasi }}')">
<i class="ki-filled ki-arrow-circle-right"></i> <i class="ki-filled ki-arrow-circle-right"></i>
REVISI REVISI
</a> </a>
</div> </div>
@endif @endif
@@ -429,7 +427,6 @@
// Ambil ID inspeksi pertama (jika ada) // Ambil ID inspeksi pertama (jika ada)
// Ambil jenis jaminan jika ada // Ambil jenis jaminan jika ada
if ($firstDocument->jenisjaminan) { if ($firstDocument->jenisjaminan) {
$jenisJaminanId = $firstDocument->jenisjaminan->id; $jenisJaminanId = $firstDocument->jenisjaminan->id;
@@ -447,14 +444,14 @@
<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"
onclick="uploadKertasKerja({{ $permohonan->id }}, '{{ $documentId }}', '{{ $jenisJaminanId }}')">Upload onclick="uploadKertasKerja({{ $permohonan->id }}, '{{ $documentId }}', '{{ $jenisJaminanId }}')">Upload
</button> </button>
</div> </div>
</div> </div>
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
@if (isset($permohonan->penilai) && isset($permohonan->penilai->kertas_kerja) && $permohonan->penilai->kertas_kerja) @if (isset($permohonan->penilai) && isset($permohonan->penilai->kertas_kerja) && $permohonan->penilai->kertas_kerja)
<span data-modal-dismiss="true" class="btn btn-warning btn-outline" <span data-modal-dismiss="true" class="btn btn-warning btn-outline"
onclick="viewPDF('{{ Storage::url($permohonan->penilai->kertas_kerja) }}')"><i onclick="viewPDF('{{ Storage::url($permohonan->penilai->kertas_kerja) }}')"><i
class="ki-filled ki-eye mr-2"></i>Lihat Kertas Kerja</span> class="ki-filled ki-eye mr-2"></i>Lihat Kertas Kerja</span>
@endif @endif
</div> </div>
@@ -479,13 +476,13 @@
confirmButtonText: 'Lanjutkan', confirmButtonText: 'Lanjutkan',
confirmButtonColor: '#3085d6', confirmButtonColor: '#3085d6',
}).then(() => { }).then(() => {
resume(permohonanId, documentId, jaminanId) resume(permohonanId, documentId, jaminanId)
}); });
} else { } else {
fetch( fetch(
`{{ url('/penilai/check-status-lpj') }}?permohonanId=${permohonanId}&documentId=${documentId}` `{{ url('/penilai/check-status-lpj') }}?permohonanId=${permohonanId}&documentId=${documentId}`
) )
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
if (data.status) { if (data.status) {
@@ -508,7 +505,7 @@
confirmButtonText: 'Lanjutkan', confirmButtonText: 'Lanjutkan',
confirmButtonColor: '#3085d6', confirmButtonColor: '#3085d6',
}).then(() => { }).then(() => {
saveStatusLpj(permohonanId, documentId, 'sederhana', jaminanId); saveStatusLpj(permohonanId, documentId, 'sederhana', jaminanId);
}); });
} else { } else {
Swal.fire({ Swal.fire({
@@ -523,10 +520,10 @@
denyButtonColor: '#d33', denyButtonColor: '#d33',
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed) {
saveStatusLpj(permohonanId, documentId, 'standar', saveStatusLpj(permohonanId, documentId, 'standar',
jaminanId); jaminanId);
} else if (result.isDenied) { } else if (result.isDenied) {
saveStatusLpj(permohonanId, documentId, 'sederhana', saveStatusLpj(permohonanId, documentId, 'sederhana',
jaminanId); jaminanId);
} }
}); });
@@ -541,17 +538,17 @@
function saveStatusLpj(permohonanId, documentId, type, jaminanId) { function saveStatusLpj(permohonanId, documentId, type, jaminanId) {
fetch(`{{ url('/penilai/save-status-lpj') }}`, { fetch(`{{ url('/penilai/save-status-lpj') }}`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'X-CSRF-TOKEN': '{{ csrf_token() }}', 'X-CSRF-TOKEN': '{{ csrf_token() }}',
}, },
body: JSON.stringify({ body: JSON.stringify({
permohonan_id: permohonanId, permohonan_id: permohonanId,
document_id: documentId, document_id: documentId,
type: type, type: type,
}), }),
}).then(response => response.json()) }).then(response => response.json())
.then(data => { .then(data => {
if (data.success) { if (data.success) {
if (type === 'standar') { if (type === 'standar') {
@@ -566,7 +563,7 @@
} }
function uploadKertasKerja(permohonanId, documentId, jaminanId) { function uploadKertasKerja(permohonanId, documentId, jaminanId) {
const kertasKerjaInput = document.getElementById('kertas_kerja'); const kertasKerjaInput = document.getElementById('kertas_kerja');
if (!kertasKerjaInput.files.length) { if (!kertasKerjaInput.files.length) {
Swal.fire({ Swal.fire({
@@ -586,12 +583,12 @@
formData.append('kertas_kerja', kertasKerja); formData.append('kertas_kerja', kertasKerja);
fetch(`{{ url('/penilai/import/kertas-kerja') }}`, { fetch(`{{ url('/penilai/import/kertas-kerja') }}`, {
method: 'POST', method: 'POST',
headers: { headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}', 'X-CSRF-TOKEN': '{{ csrf_token() }}',
}, },
body: formData, body: formData,
}) })
.then(response => response.json()) // Pastikan respons diurai menjadi JSON .then(response => response.json()) // Pastikan respons diurai menjadi JSON
.then(data => { .then(data => {
if (data.success) { if (data.success) {
@@ -625,26 +622,26 @@
}); });
} }
function resume(permohonanId, documentId, jaminanId) { function resume(permohonanId, documentId, jaminanId) {
showLoadingSwal('Tunggu ...'); showLoadingSwal('Tunggu ...');
window.location.href = window.location.href =
`{{ route('penilai.resume') }}?permohonanId=${permohonanId}&documentId=${documentId}&jaminanId=${jaminanId}`; `{{ route('penilai.resume') }}?permohonanId=${permohonanId}&documentId=${documentId}&jaminanId=${jaminanId}`;
} }
function memo(permohonanId, documentId, jaminanId) { function memo(permohonanId, documentId, jaminanId) {
showLoadingSwal('Tunggu ...'); showLoadingSwal('Tunggu ...');
window.location.href = window.location.href =
`{{ route('penilai.memo') }}?permohonanId=${permohonanId}&documentId=${documentId}&jaminanId=${jaminanId}`; `{{ route('penilai.memo') }}?permohonanId=${permohonanId}&documentId=${documentId}&jaminanId=${jaminanId}`;
} }
function rap(permohonanId, documentId, jaminanId) { function rap(permohonanId, documentId, jaminanId) {
showLoadingSwal('Tunggu ...'); showLoadingSwal('Tunggu ...');
window.location.href = window.location.href =
`{{ route('penilai.rap') }}?permohonanId=${permohonanId}&documentId=${documentId}&jaminanId=${jaminanId}`; `{{ route('penilai.rap') }}?permohonanId=${permohonanId}&documentId=${documentId}&jaminanId=${jaminanId}`;
} }
function paparan(permohonanId, documentId, jaminanId) { function paparan(permohonanId, documentId, jaminanId) {
Swal.fire({ Swal.fire({
title: 'Apakah Kamu yakin ingin melakukan paparan', title: 'Apakah Kamu yakin ingin melakukan paparan',
icon: 'warning', icon: 'warning',
@@ -660,7 +657,7 @@
}); });
} }
function callReport(permohonanId, documentId, jaminanId) { function callReport(permohonanId, documentId, jaminanId) {
showLoadingSwal('Tunggu ...'); showLoadingSwal('Tunggu ...');
window.location.href = window.location.href =
`{{ route('penilai.call-report') }}?permohonanId=${permohonanId}&documentId=${documentId}&jaminanId=${jaminanId}`; `{{ route('penilai.call-report') }}?permohonanId=${permohonanId}&documentId=${documentId}&jaminanId=${jaminanId}`;
@@ -675,7 +672,7 @@
headers: { headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}' 'X-CSRF-TOKEN': '{{ csrf_token() }}'
}, },
success: function (response) { success: function(response) {
if (response.success) { if (response.success) {
// window.location.reload(); // window.location.reload();
hideLoadingSwal(); hideLoadingSwal();
@@ -685,7 +682,7 @@
Swal.fire('Perhatian!', response.message, 'warning'); Swal.fire('Perhatian!', response.message, 'warning');
} }
}, },
error: function (xhr, status, error) { error: function(xhr, status, error) {
console.log('Error checking button status:', error, status, xhr); console.log('Error checking button status:', error, status, xhr);
if (xhr.responseJSON.message) { if (xhr.responseJSON.message) {
// window.location.reload(); // window.location.reload();