## Ringkasan
Melakukan perbaikan pada helper format Rupiah, akses role user, validasi data MIG, serta penyesuaian tampilan laporan dan dokumentasi.
## Perubahan Detail
### 🔧 Helper Function
**app/Helpers/Lpj.php**:
- Menambahkan parameter opsional `withSymbol` pada fungsi `formatRupiah()` untuk kontrol simbol Rp
- Menambahkan handling untuk menghapus titik (.) dari input number sebelum proses
- Memperbaiki return value untuk null/empty string sesuai parameter `withSymbol`
- Mengganti `str_pad()` dengan `sprintf()` untuk generate random number (lebih efisien)
### 🛠️ Service Layer
**app/Services/PreviewLaporanService.php**:
- Memperbaiki validasi data MIG dengan menambahkan pengecekan `is_mig` flag
- Menambahkan null safety pada property `mig_mst_lpj_tot_nilai_pasar`
- Memperbaiki kondisi logic untuk memo dan validasi nilai pasar
### 🎨 View Components
**resources/views/component/print-out-dokument.blade.php**:
- Memperbaiki syntax Blade dari `@isset` menjadi `isset()` yang lebih proper
**resources/views/debitur/components/debitur.blade.php**:
- Memperbaiki role checking dari `hasRole()` menjadi `hasAnyRole()` untuk multiple roles
**resources/views/debitur/index.blade.php**:
- Menambahkan role 'admin' pada kondisi edit dan delete actions
- Memperbaiki permission checking untuk administrator dan admin
**resources/views/laporan/index.blade.php**:
- Menyederhanakan logic tombol laporan dan resume
- Menghapus logic role-based yang kompleks untuk tombol laporan
- Memperbaiki route URL untuk print-out laporan
- Menghapus function `generateLaporanButton()` yang tidak digunakan
**resources/views/penilai/components/lpj-sederhana-standar.blade.php**:
- Menambahkan role 'penilai' pada permission tombol simpan
**resources/views/penilai/components/print-out-sederhana.blade.php**:
- Memperbaiki tampilan data dokumen dengan menambahkan kolom nomor dokumen
- Mengganti `number_format()` dengan `formatRupiah()` untuk konsistensi format
- Menambahkan fallback untuk data tanah dan bangunan ketika `npw_tambahan` tidak tersedia
- Memperbaiki perhitungan total nilai pasar wajar dengan proper parsing
- Memperbaiki format tampilan nilai likuidasi
- Memperbaiki struktur HTML tabel untuk dokumentasi
**resources/views/penilai/components/signature-approval.blade.php**:
- Memperbaiki route dan parameter untuk approval signature
**resources/views/permohonan/index.blade.php**:
- Menambahkan role 'admin' pada permission actions
Ringkas: perluas akses untuk peran admin , rapikan alur status permohonan/pembayaran/SPK, pindahkan sumber LPJ ke relasi penilai, perbaiki parsing/formatting rupiah, dan tambah konten cetak “Catatan yang Perlu Diperhatikan”.
- Perizinan & akses
- Izinkan admin melewati filter cabang pada listing Debitur dan Permohonan.
- Tambah peran admin pada konfigurasi module.json di beberapa menu/fitur.
- Izinkan admin membuat Debitur dan mengakses aksi yang sebelumnya eksklusif untuk administrator dan pemohon-ao .
- Alur bisnis & status
- Ubah status setelah proses pembatalan/penanganan pembayaran dari done menjadi proses-laporan agar konsisten dengan alur pelaporan.
- Nonaktifkan blokir navigasi saat status proses-laporan di PenilaiController (redirect/JSON error dikomentari) agar proses lanjutan tetap bisa diakses bila diperlukan.
- Setelah generate SPK, set Permohonan.status dan PenawaranTender.status menjadi registrasi-final untuk menandai finalisasi registrasi.
- Pada pembuatan permohonan, jika pengguna admin , tetapkan status = preregister untuk proses pra-registrasi.
- Hapus set default branch_id dari PermohonanRequest sehingga pengisian cabang dilakukan eksplisit melalui form (terutama untuk admin).
- Data LPJ & referensi relasi
- Sumber data LPJ dipindah dari permohonan->penilaian->lpj ke permohonan->penilai->lpj baik di controller ( PenilaianController ) maupun view ( penilaian/otorisator/show.blade.php ) untuk menyesuaikan struktur relasi terbaru.
- Dokumen pembayaran
- Ubah cara deteksi “Bukti Bayar” dari documents menjadi dokumenjaminan dan ambil detail berdasarkan name = 'Bukti Bayar' , lalu gunakan dokumen_jaminan yang terenkode JSON sebagai sumber pemrosesan berikutnya.
- Pada UI approval pembayaran, benahi rendering nominal_bayar (hindari pemutusan baris) dan tampilkan tombol otorisator jika status_bayar !== 'sudah_bayar' || !approve_bayar .
- UI & formatting rupiah
- Perbaiki fungsi calculateTotal() pada form-penilai.blade.php agar parsing angka mendukung pemisah ribuan titik dan desimal koma, serta formatting konsisten dengan id-ID .
- Aktifkan kembali fallback tampilan status utama di penilai/index.blade.php .
- Tambahkan blok “Catatan yang Perlu Diperhatikan” pada print-out-sederhana.blade.php , mendukung input string/array dan memformat poin dengan awalan “- ”.
Perubahan berkas (ringkas):
- app/Http/Controllers/DebitureController.php : tambah peran admin pada pengecualian filter cabang.
- app/Http/Controllers/PembayaranController.php : set status = 'proses-laporan' dalam proses terkait pembayaran.
- app/Http/Controllers/PenilaiController.php : longgarkan blokir saat proses-laporan (redirect/JSON error dikomentari).
- app/Http/Controllers/PenilaianController.php : gunakan permohonan->penilai->lpj untuk menghitung NPW.
- app/Http/Controllers/PermohonanController.php :
- set status = 'preregister' untuk user admin saat create,
- tambah peran admin pada pengecualian filter cabang,
- ubah pencarian “Bukti Bayar” ke dokumenjaminan dan gunakan dokumen_jaminan (JSON).
- app/Http/Controllers/SpkController.php : set status = 'registrasi-final' pada Permohonan dan PenawaranTender setelah generate SPK.
- app/Http/Requests/PermohonanRequest.php : hilangkan set default branch_id .
- module.json : tambahkan admin pada beberapa daftar roles .
- resources/views/component/form-penilai.blade.php : dukungan parsing/formatting rupiah dengan pemisah lokal.
- resources/views/debitur/components/debitur.blade.php : perluas akses cabang untuk admin di form Debitur.
- resources/views/debitur/index.blade.php : izinkan admin membuat Debitur.
- resources/views/pembayaran/approval.blade.php : perbaiki render nominal dan visibilitas tombol otorisator.
- resources/views/penilai/components/print-out-sederhana.blade.php : tambah bagian “Catatan yang Perlu Diperhatikan”.
- resources/views/penilai/index.blade.php : gunakan data.status sebagai fallback tampilan status.
- resources/views/penilaian/otorisator/show.blade.php : konsisten gunakan permohonan->penilai->lpj .
- resources/views/permohonan/form.blade.php : penataan ulang kelas Tailwind dan penambahan field Cabang untuk administrator / admin .
- Form Penilai: hapus spasi ganda di class CSS input currency/currency-format
- Konsistensi class Tailwind: gunakan "w-full currency" & "w-full currency-format"
- Hapus console.log tidak perlu, tambah debug log untuk parsing luas
- Optimasi parsing input luas dengan parseFloat + regex sanitasi numerik
- Dashboard: tambahkan pembatasan akses berdasarkan role (!penilai, !surveyor, !pemohon-ao, !pemohon-eo)
- Perbaiki struktur HTML & urutan class Tailwind (grid, flex, spacing, alignment)
- Optimalkan layout header, stats cards, & tabel dengan class yang konsisten
- Hapus class CSS redundan & perbaiki konsistensi penamaan
- Tingkatkan keamanan & UX dengan role-based access + struktur HTML lebih maintainable
- Reorganisasi urutan menu, memindahkan "Laporan Penilaian Jaminan" ke posisi pertama & memperbaiki penamaan menu (SO, LPJ, Monitoring, Tender → Permohonan KJPP, dll.)
- Ubah path "laporan-penilaian-jaminan" menjadi "laporan" untuk konsistensi URL
- Pindahkan menu "Data Debitur" sebelum "Permohonan" & "Pembatalan" ke bawah dengan akses terbatas
- Perbaikan role permissions: hapus `admin` & `senior-officer` dari menu tertentu, tambahkan `penilai` & `surveyor` ke menu Penilaian
- Batasi akses menu "Pembatalan" hanya untuk `administrator` & `pemohon-ao`
- Update ActivityController: tambah role `penilai` pada filter user
- Update LaporanPermohonanController: filter status `done` agar hanya tampil permohonan selesai
- Update PermohonanController: hapus kondisi `jenis_penilaian_id` pada logika pembuatan PersetujuanPenawaran, gunakan `Auth::id()` konsisten
- Validasi DebitureRequest: ubah max karakter `nomor_rekening` dari 50 → 10, serta perbaikan indentasi & format JSON di `module.json`
- Hapus role `pemohon-ao` & `pemohon-eo` dari module.json pada semua menu (dashboard, laporan, permohonan, dsb.)
- Rapikan indentasi role `administrator` dan streamline permissions untuk akses kontrol yang lebih sederhana
- Tambahkan konsistensi role yang dipertahankan: administrator, admin, AO/EO Appraisal, DD Appraisal, Penilai, Surveyor
- Perbaiki class ordering pada input file & error message di `debitur.blade.php` agar sesuai konvensi Tailwind
- Perbaiki struktur div container di `debitur.blade.php` (`flex flex-wrap gap-2.5 items-baseline lg:flex-nowrap`)
- Perbaiki formatting input file & textarea pada `persetujuan_penawaran/form.blade.php` dengan multi-line untuk readability
- Rapikan class ordering error message di form penawaran (`text-sm alert text-danger`)
- Standarisasi formatting & konsistensi layout antar form untuk UX lebih rapi
- Menambahkan logika untuk membatasi akses data berdasarkan cabang pengguna.
- Mengubah relasi pada model Debiture dari hasOne menjadi hasMany untuk permohonan.
- Memperbarui tampilan untuk menampilkan dropdown cabang hanya untuk pengguna dengan peran administrator.
- Menambahkan input tersembunyi untuk cabang pengguna yang bukan administrator.
- Memperbarui logika di halaman index untuk memeriksa peran pengguna.
- Menambahkan relasi 'permohonan' pada query data debitur.
- Memperbaiki akses ke nomor registrasi pada dokumen jaminan.
- Mengatur tampilan tombol 'Tambah Debitur' berdasarkan peran pengguna.
- Menambahkan logika untuk memeriksa peran dan status permohonan sebelum menampilkan tombol aksi.
- Tambahkan pengecekan untuk menentukan apakah semua file telah dihapus.
- Sesuaikan logika penyimpanan dokumen dan nomor dokumen berdasarkan kondisi file yang ada.
- Perbaiki tampilan tombol hapus file agar selalu ditampilkan.
- Memperbaiki penyimpanan dokumen baru yang diupload.
- Menangani penghapusan dokumen dari storage jika file dihapus.
- Menambahkan logika untuk memperbarui nomor dokumen yang tidak diubah.
- Memastikan detail dokumen yang diupload disimpan dengan benar.
- Menambahkan tombol untuk menghapus input file jika lebih dari satu.
- Menambahkan pengecekan untuk memastikan dokumen jaminan ada sebelum ditampilkan.
- Memperbaiki struktur HTML untuk memastikan elemen ditampilkan dengan benar.
- Menambahkan metode `getCustomFields` pada `JenisLegalitasJaminanController` untuk mengembalikan custom fields berdasarkan ID.
- Memperbarui tampilan untuk menggunakan ID jenis legalitas jaminan saat menambahkan input file.
- Mengubah fungsi `addFileInput` untuk menerima ID jenis legalitas jaminan dan mengambil custom fields yang relevan.
- Memperbarui rute untuk menambahkan endpoint baru yang mengarah ke metode `getCustomFields`.
- Mengubah cara pengambilan dan penjumlahan luas tanah dan bangunan.
- Memastikan nilai luas tanah dan bangunan ditampilkan dengan benar.
- Mengoptimalkan pengolahan data detail dokumen untuk meningkatkan kejelasan.
- Memperbaiki pengecekan kondisi saat mengambil detail dokumen.
- Menambahkan penanganan untuk file yang diupload dan yang tidak diubah.
- Memastikan nomor dokumen selalu diperbarui, baik saat file diubah atau tidak.
- Menghapus dokumen yang tidak ada lagi dari daftar jika ada perubahan.
- Memperbaiki logika pengambilan data 'details' pada Dokumen Jaminan.
- Mengubah cara pengolahan data luas tanah dan luas bangunan untuk akurasi.
- Memperbaiki tampilan data pada email dan komponen jaminan.
- Memperbaiki pengambilan data `details` pada `DokumenJaminanController`.
- Mengubah indeks pengambilan `custom_field` dari `$value` menjadi `$key`.
- Memperbaiki tampilan detail dokumen jaminan di view `jaminan.blade.php`.
- Menambahkan penanganan untuk menampilkan nomor dokumen dan detail yang sesuai.
- Menambahkan metode `clearDetail` pada `DokumenJaminanController` untuk menghapus detail dokumen.
- Menghapus file terkait saat detail dihapus.
- Menambahkan tombol untuk menghapus detail pada tampilan dokumen.
- Mengimplementasikan konfirmasi penghapusan menggunakan SweetAlert.
- Menambahkan rute baru untuk mengakses metode `clearDetail`.
- Menambahkan dukungan untuk berbagai tipe custom field: text, number, date, textarea, dan select.
- Memperbaiki cara pengambilan nilai custom field dari detail.
- Mengoptimalkan penggunaan variabel untuk meningkatkan keterbacaan kode.
- Memperbaiki pengambilan custom field pada dokumen jaminan.
- Mengubah logika untuk mendapatkan custom field berdasarkan ID yang benar.
- Menambahkan pengambilan custom fields yang terkait dengan jenis legalitas jaminan.
- Mengubah nilai yang diambil untuk permohonan_id dari $document->id menjadi $document->permohonan_id.
- Memastikan bahwa nilai yang tepat digunakan dalam input tersembunyi untuk permohonan_id.
- Menambahkan pengecekan untuk menampilkan detail jaminan jika tersedia.
- Menggunakan json_decode untuk mengurai data detail.
- Menampilkan setiap detail dalam format yang rapi dengan pemisah.
- Mengubah format penamaan input custom_field untuk memastikan konsistensi.
- Memperbaiki penggunaan tanda kurung pada penamaan agar sesuai dengan standar.
- Menambahkan pengecekan keberadaan dokumen jaminan saat membuat atau memperbarui permohonan.
- Menambahkan relasi `has('documents')` pada query permohonan untuk memastikan hanya data yang memiliki dokumen terkait yang ditampilkan.
- Menambahkan tampilan nomor permohonan di komponen dokumen pada view.
- Merapikan dan memperbaiki format kode pada berbagai fungsi controller.
- Mengubah label di beberapa bagian form pada dokumen.blade.php.
- Label "Nomor" diganti menjadi "Nama Dokumen" untuk meningkatkan kejelasan fungsi input.
- Menambahkan border dan background pada elemen card dengan class `border-agi-100` dan `bg-agi-50`.
- Perubahan berlaku di berbagai file blade untuk meningkatkan konsistensi UI.
- Menambahkan field baru "Nomor Permohonan" pada komponen jaminan.
- Menambahkan pemisah garis menggunakan border-dashed untuk meningkatkan keterbacaan.
- Menambahkan validasi untuk `permohonan_id` pada `DokumenJaminanRequest`.
- Memperbaiki logika penggabungan parameter query untuk rute tertentu.
- Merapikan formatting kode pada tampilan blade, termasuk elemen HTML dan JavaScript.
- Mengatasi beberapa bug minor terkait aksi dan tampilan dokumen jaminan.
- Menambahkan properti `id` pada elemen form untuk mempermudah manipulasi DOM.
- Menandai field wajib dengan tanda bintang (*) dan memastikan validasi untuk field yang diperlukan.
- Menambahkan script JavaScript untuk validasi input form secara dinamis, termasuk cek keberadaan data dan memberikan feedback error real-time.
- Menambahkan event listener untuk memastikan semua field tervalidasi sebelum pengiriman form.
- Mengubah `data-datatable-page-size` dari 5 menjadi 10 di berbagai file Blade.
- Perubahan ini bertujuan untuk menampilkan lebih banyak data di setiap halaman tabel untuk meningkatkan pengalaman pengguna.
- Tambahkan pengecekan "if" untuk memastikan data "legalitas" ada sebelum iterasi dilakukan.
- Susun ulang struktur iterasi untuk memastikan rendering elemen sesuai dengan kondisi data.
- Kurangi kemungkinan error saat "legalitas" bernilai null atau undefined.
- Tambahkan nilai default kosong ('') untuk mencegah error jika $custom_field tidak terdefinisi.
- Memastikan form tetap berfungsi tanpa memicu kesalahan saat input data.
- Menghapus duplikasi kode terkait pengelolaan alamat (province, city, district, village, postal code, address).
- Penempatan ulang elemen-elemen form untuk meningkatkan keterbacaan dan efisiensi."
Tambahkan pengecekan null untuk `custom_field` sebelum mem-parsing JSON `detail->details` dan perbaiki konsistensi format pada pengecekan dokumen jaminan. Hal ini memastikan tidak ada kesalahan saat field tersebut tidak ada.
Setiap input file pada form dokumen telah disesuaikan agar hanya menerima file bertipe .pdf dan file gambar (image/*). Ini memastikan bahwa hanya tipe file yang diinginkan yang dapat diunggah, meningkatkan validitas dan keamanan data yang diproses.
Menambahkan logika baru untuk penanganan dokumen jaminan. Sekarang, jika dokumen jaminan ada lebih dari satu, setiap dokumen akan ditampilkan secara terpisah dengan opsi download dan preview untuk masing-masing dokumen. Sebelumnya, hanya ada satu tautan download dan preview per kategori jaminan.
Menambahkan beberapa kondisi baru pada fungsi render untuk menangani kasus di mana dokumenJaminan bertipe string dan dokumenNomor null, serta variasi lain yang melibatkan tipe array dan string untuk kombinasi dokumenJaminan dan dokumenNomor. Kondisi ini memastikan penanganan berbagai bentuk data dengan benar sebelum menampilkan elemen DOM yang sesuai.
Menambahkan kolom dokumen_nomor pada DokumenJaminan untuk mendukung penyimpanan nomor dokumen yang terkait dengan setiap dokumen jaminan. Pembaruan ini mencakup perubahan pada controller untuk memproses kolom baru dan penyesuaian pada tampilan untuk menampilkan serta mengunduh dokumen berdasarkan nomor ini.
Menambahkan kolom 'dokumen_nomor' pada model DetailDokumenJaminan serta melakukan update terkait di controller dan view. Perubahan ini memungkinkan pengguna untuk memasukkan nomor dokumen selain file dokumen jaminan. Rutin yang terkait dengan penyimpanan dan pengambilan dokumen diperbarui untuk menangani data nomor dokumen. Perbaikan minor pada penataan kode juga dilakukan untuk konsistensi.
Menambahkan implementasi untuk input file dinamis pada komponen dokumen jaminan. Sekarang pengguna dapat menambahkan lebih dari satu file secara bersamaan dan menambah input file baru dengan menekan tombol "Add More". Perubahan ini meningkatkan fleksibilitas dan kemudahan dalam pengunggahan banyak dokumen.
This update enhances the `DokumenJaminan` model to support multiple files for each document entry. It modifies both the backend logic to store multiple files and the frontend view to display and handle these files correctly. Additionally, it includes functionality to delete old document files if they are no longer associated with any detail document entry.
Enhanced the document upload section to support multiple file uploads for "Dokumen Jaminan". Added "Add More" and "Remove" buttons for dynamically managing file inputs. Implemented helper functions to handle dynamic input fields and update the UI accordingly.
Updated route to point to new getLegalitasJaminan method in DokumenJaminanController. Enhanced logic to handle additional parameters and provide more contextual data, including existing document details. Refined Blade template to dynamically load legalitas jaminan fields, ensuring better user experience and maintainability.
Enhanced the handling of custom fields by conditionally adding input types like text, number, date, and textarea based on the field's type. Also, added missing placeholders to input elements to improve usability.
Refactored the detailed document processing logic to include handling of 'jenis_legalitas_jaminan_id' instead of 'detail_dokumen_jaminan_id'. Enhanced the view to dynamically add new legal documents, ensuring proper data handling and validation.
This migration adds a nullable 'details' column to the 'detail_dokumen_jaminan' table. The column is used to store custom field data in JSON format. Various parts of the application, including the model, controller, and view, have been updated to handle this new column.