864 Commits

Author SHA1 Message Date
Daeng Deni Mardaeni
6378ba0f98 ⚙️ feat(LpjServiceProvider): Konfigurasi scheduling otomatis untuk cleanup inspeksi
Menambahkan registrasi commands dan scheduling untuk cleanup data inspeksi dengan konfigurasi multi-server dan logging

- Register 3 command cleanup: CleanupInspeksiDataCommand, CleanupSingleInspeksiCommand, dan CleanupInspeksiStatusCommand
- Daily cleanup scheduling setiap jam 02:00 dengan opsi --force dan withoutOverlapping()
- Weekly backup cleanup setiap minggu pukul 03:00 pada hari minggu
- Multi-server support dengan onOneServer() untuk environment clustered
- Background execution dengan runInBackground() untuk performa optimal
- Dedicated logging ke storage/logs/cleanup-inspeksi.log dan cleanup-inspeksi-weekly.log
- Service binding untuk BankDataService dengan dependency injection
- Modular structure dengan namespace dan module path yang terorganisir
2025-12-09 15:42:43 +07:00
Daeng Deni Mardaeni
2c8136dcf3 🔧 feat(SurveyorController): Tambahkan cleanup inspeksi otomatis pada method show
Menambahkan fungsi cleanupInspeksiData() untuk membersihkan data inspeksi lama secara otomatis saat menampilkan detail permohonan

- Method cleanupInspeksiData() dipanggil otomatis di method show() line 112
- Implementasi cleanup berbasis created_by dengan grouping data
- Soft delete data inspeksi tanpa dokument_id jika ada data lengkap dengan dokument_id
- Transaction handling dengan DB::beginTransaction() dan DB::rollback() untuk konsistensi data
- Comprehensive logging untuk audit trail setiap operasi cleanup
- Error handling individual per data dengan continue pada exception
- Validasi mutual exclusion antara data dengan dan tanpa dokument_id
- Integrasi dengan Auth::id() untuk tracking user yang melakukan akses
2025-12-09 15:40:33 +07:00
Daeng Deni Mardaeni
3315e1d4b6 📚 docs(Console README): Tambahkan dokumentasi lengkap untuk console commands cleanup inspeksi
Membuat dokumentasi komprehensif untuk semua command cleanup dengan contoh penggunaan dan troubleshooting guide

- Dokumentasi untuk 3 command utama: lpj:cleanup-inspeksi, lpj:cleanup-single-inspeksi, dan lpj:cleanup-inspeksi-status
- Usage examples untuk setiap command dengan berbagai opsi (--sync, --force, --dry-run, --detailed)
- Penjelasan alur kerja cleanup (identifikasi → proses → logging → transaction)
- Informasi scheduling otomatis (setiap hari jam 2 pagi dan mingguan)
- Lokasi log files untuk monitoring dan troubleshooting
- Troubleshooting guide untuk command tidak muncul, data tidak ter-cleanup, dan performance issues
- Best practices untuk data besar dengan mode queue vs sync
2025-12-09 15:38:35 +07:00
Daeng Deni Mardaeni
37fb5c90d5 🧹 feat(CleanupInspeksiDataCommand): Implementasi command utama untuk batch cleanup data inspeksi
Membuat artisan command utama untuk cleanup data inspeksi secara batch dengan fitur preview, filter, dan progress tracking

- Command signature: `lpj:cleanup-inspeksi` dengan opsi --permohonan-id, --sync, --dry-run, dan --force
- Method getCleanupData() untuk query data yang memenuhi kriteria cleanup menggunakan DB::table
- Method displayPreview() untuk menampilkan tabel preview data yang akan di-cleanup
- Method runCleanup() dengan progress bar untuk tracking progress batch processing
- Validasi mutual exclusion antara --dry-run dan --sync untuk mencegah konflik
- Konfirmasi interaktif sebelum proses (dapat di-skip dengan --force)
- Support mode sync (direct execution) dan async (queue dispatch)
- Error handling per permohonan dengan continue pada exception
- Comprehensive logging dengan context options dan error details
- Hitungan total data yang dihapus dan jumlah error untuk reporting
2025-12-09 15:38:28 +07:00
Daeng Deni Mardaeni
ff994a7c95 🧹 feat(CleanupSingleInspeksiCommand): Tambahkan command untuk cleanup inspeksi per permohonan
Membuat artisan command untuk cleanup data inspeksi secara spesifik untuk 1 permohonan dan user tertentu dengan opsi sync/async

- Command signature: `lpj:cleanup-single-inspeksi` dengan required arguments permohonan-id dan created-by
- Opsi --sync untuk eksekusi synchronous dan --force untuk skip konfirmasi
- Validasi input permohonanId dan createdBy harus angka positif
- Integrasi dengan InspeksiCleanupService untuk cleanupSync() dan cleanupAsync()
- Konfirmasi interaktif sebelum proses (dapat di-skip dengan --force)
- Comprehensive logging dengan context permohonan_id dan created_by
- Error handling dengan try-catch dan return Command::SUCCESS/FAILURE
- Informasi mode eksekusi (Synchronous vs Queue) ditampilkan ke user
- Pesan sukses yang jelas untuk monitoring progress di log
2025-12-09 15:35:52 +07:00
Daeng Deni Mardaeni
a2275758b1 🔍 feat(CleanupInspeksiStatusCommand): Tambahkan command untuk monitoring status data inspeksi
Membuat artisan command untuk cek status data yang memerlukan cleanup dengan opsi filter dan detail view

- Command signature: `lpj:cleanup-inspeksi-status` dengan opsi --permohonan-id, --created-by, dan --detailed
- Method showGeneralStats() untuk statistik umum data (total, aktif, terhapus, dengan/tanpa dokument_id)
- Method showCleanupStats() untuk identifikasi data yang perlu cleanup berdasarkan permohonan_id dan created_by
- Method showDetailedData() untuk menampilkan 20 data terbaru dengan relasi permohonan dan dokument
- Query optimization dengan DB::table dan raw SQL untuk performa optimal
- Error handling dengan try-catch dan logging ke Laravel Log
- Tampilan tabel yang informatif dengan format number_format untuk angka besar
- Support filter berdasarkan permohonan_id dan created_by untuk analisis spesifik
- Limit 20 data untuk mencegah overload memory pada dataset besar
2025-12-09 15:34:47 +07:00
Daeng Deni Mardaeni
19057c7e81 🎮 controller(InspeksiController): Implementasi controller dengan integrasi cleanup service
Membuat controller contoh yang menunjukkan best practices penggunaan InspeksiCleanupService dengan automatic cleanup trigger pada create dan update operations

- Dependency injection InspeksiCleanupService melalui constructor
- Method store() dengan automatic cleanup trigger saat dokument_id tersedia
- Method update() dengan cleanup trigger hanya saat dokument_id berubah dari null
- Method cleanup() untuk eksekusi manual cleanup dengan pilihan sync/async
- Validasi request yang komprehensif untuk semua method
- Database transaction handling dengan proper rollback pada error
- Logging informatif untuk audit trail setiap operasi
- Error handling dengan try-catch dan response JSON yang konsisten
- Response format yang standar dengan status code HTTP yang tepat
- PHPDoc dokumentasi untuk setiap method dengan parameter dan return type
2025-12-09 15:27:48 +07:00
Daeng Deni Mardaeni
9dfb8727dc 🔧 service(InspeksiCleanupService): Implementasi service layer untuk manajemen cleanup data inspeksi
Membuat service layer yang menyediakan interface fleksibel untuk menjalankan cleanup data inspeksi secara async/sync dengan error handling dan logging komprehensif

- Implementasi pattern service layer untuk separation of concerns
- Method utama cleanupInspeksiData dengan parameter sync untuk fleksibilitas eksekusi
- Method wrapper cleanupAsync() untuk eksekusi asynchronous default
- Method wrapper cleanupSync() untuk eksekusi synchronous langsung
- Error handling dengan try-catch dan re-throw exception untuk propagasi error
- Logging informatif untuk setiap proses cleanup (mulai, selesai, error)
- Integrasi dengan CleanupInspeksiDataJob untuk delegasi proses bisnis
- Parameter lengkap: permohonanId, createdBy, dokumentId, dan sync mode
- Dokumentasi PHPDoc yang komprehensif untuk setiap method
- Menggunakan Laravel dispatch() untuk queue management yang optimal
2025-12-09 15:24:44 +07:00
Daeng Deni Mardaeni
bef7bcfa8f 🗑️ job(CleanupInspeksiDataJob): Menambahkan fungsi untuk cleanup data inspeksi dengan queueable retry dan transaction aman
Menambahkan exponential backoff (60, 120, 300 detik), timeout 5 menit, dan logging rinci untuk audit cleanup data inspeksi tanpa dokument_id

- Implementasi job queue dengan retry otomatis menggunakan exponential backoff strategy
- Tambahkan timeout 5 menit untuk mencegah hanging jobs
- Gunakan database transaction untuk memastikan atomicity operasi soft delete
- Logging komprehensif untuk audit trail proses cleanup
- Validasi data lengkap (dengan dokument_id) sebelum proses cleanup
- Soft delete data lama tanpa dokument_id hanya jika data baru tersedia
- Pencegahan penghapusan data yang baru saja ditemukan dengan kondisi where('id', '!=', $newInspeksi->id)
- Error handling dengan rollback transaction dan re-throw exception untuk retry mechanism
- Dokumentasi kode yang jelas dengan PHPDoc untuk setiap method
- Menggunakan Laravel best practices dengan ShouldQueue, Dispatchable, InteractsWithQueue, Queueable, SerializesModels traits
2025-12-09 15:22:37 +07:00
Daeng Deni Mardaeni
8c60320532 (Roles): Tambahkan role EO Appraisal ke berbagai komponen LPJ
## Perubahan Utama:
- 🔧 **Role Management**: Menambahkan role 'EO Appraisal' ke berbagai komponen untuk akses tombol simpan
- 🐛 **Fix Kondisi**: Memperbaiki logika kondisi untuk data MIG (Migrasi) di print-out-sederhana
- 💅 **UI Enhancement**: Konversi table ke div untuk bagian keterangan dengan format yang lebih rapi
- 🎨 **Code Style**: Fix indentation dan whitespace di PermohonanController

## Detail Perubahan:

### File yang Dimodifikasi:

1. **`resources/views/penilai/components/call-report.blade.php`** (Line 507):
   - Menambahkan `'EO Appraisal'` ke array role yang memiliki akses tombol simpan
   - Sebelumnya: `['senior-officer', 'surveyor', 'administrator']`
   - Sekarang: `['senior-officer', 'surveyor', 'administrator','EO Appraisal']`

2. **`resources/views/penilai/components/lpj-sederhana-standar.blade.php`** (Line 47):
   - Menambahkan `'EO Appraisal'` dan `'penilai'` ke role yang dapat menyimpan data
   - Memperluas akses untuk role penilai dan EO Appraisal

3. **`resources/views/penilai/components/memo.blade.php`** (Line 318):
   - Menambahkan `'EO Appraisal'` ke role yang dapat menyimpan memo
   - Memastikan konsistensi akses antar komponen

4. **`resources/views/penilai/components/print-out-sederhana.blade.php`**:
   - **Line 558-580**: Memperbaiki urutan kondisi pengecekan data MIG
     - Memindahkan fallback data tanah dan bangunan ke atas
     - Menambahkan kondisi `@if(!$permohonan->is_mig)` untuk data non-MIG
     - Menjaga data `npw_tambahan` tetap diproses setelahnya
   - **Line 647-700**: Konversi table ke div untuk bagian keterangan
     - Mengganti struktur `<table><tr><td>` menjadi `<div>` dengan styling yang lebih rapi
     - Menambahkan handling untuk berbagai format data (array, string, quoted)
     - Implementasi bullet points yang lebih konsisten
     - Menambahkan fallback message "Tidak ada catatan khusus"

5. **`resources/views/penilai/components/rap-penilai.blade.php`** (Line 72 & 115):
   - Menambahkan `'EO Appraisal'` ke role yang dapat menyimpan data RAP
   - Fix whitespace yang tidak perlu

6. **`resources/views/penilai/components/signature-approval.blade.php`** (Line 117):
   - Fix whitespace dan formatting

7. **`app/Http/Controllers/PermohonanController.php`** (Line 55):
   - Fix indentation yang tidak konsisten
   - Memperbaiki format kode untuk better readability
2025-11-18 17:28:04 +07:00
Daeng Deni Mardaeni
34709b0f8f 🐛 fix(lpj): Perbaikan format Rupiah, role access, dan validasi data
## 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
2025-11-15 17:01:04 +07:00
Daeng Deni Mardaeni
b2cfffc5d5 feat(lpj): Tambah peran admin, sesuaikan alur status, dan peningkatan UI
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 .
2025-11-12 17:42:45 +07:00
Daeng Deni Mardaeni
db0b1f6cfc Merge remote-tracking branch 'composer/staging' into staging 2025-11-10 20:48:05 +07:00
Daeng Deni Mardaeni
c153990c52 feat(lpj): Perbaiki ekspor, pencarian, validasi tanggal, transaksi, logging, dan UI
- ActivityController: tambah default order `nomor_registrasi` desc; rapikan komentar & alur sorting
- LaporanHasilPenilaianJaminanInternalExternalController: pencarian debitur case-insensitive via `LOWER(name)`; normalisasi angka LPJ (luas_tanah, nilai_bangunan, likuidasi, NPW); perapihan spacing
- LaporanPenilaiJaminanController: validasi `start_date`/`end_date` dan buat nama file ekspor dinamis via `createNameLaporan`; gunakan `LaporanPenilaiJaminanExport($request)`; helper `getBranchId`
- LaporanPenilaianJaminanController: standarisasi respons JSON datatables; tambah `export(Request)` dengan nama `laporan_penilaian_jaminan_<start>_<end>.xlsx`
- NilaiPlafondController: bungkus proses datatables dalam transaksi DB (commit/rollback) dengan try/catch; tambah logging info/error; rapikan dan standarisasi respons JSON
- PenilaiController: map data pembanding ke `pembanding1/2/3`; tambah `print_out_laporan` dan `showLaporanInspeksi` (penentuan route back); stub `showInspectionReportReview`; perapihan minor
- Views debitur/components/debitur: perbaiki closing textarea, konsistensi event listener `function ()`, rapikan markup error
- Views debitur/components/jaminan: fallback `dokumen_nomor[$index] ?? ''` untuk hindari undefined index
- Views laporan/index: akses aman dengan optional chaining `?.`, fallback tanggal pada `formatDate`, akses `nilaiPlafond` aman
- Views laporan-penilai-jaminan/index + show: JS toggle tab (Laporan vs Hasil Inspeksi), CSS `hidden-tab`, gaya floating button, perapihan
- Views debitur/index: rapikan directive `@if` spacing pada tombol tambah
- Views noc/penyelesaian: perbaiki route key ke `noc.datatables.penyelesaian`
2025-11-10 20:47:56 +07:00
Daeng Deni Mardaeni
42d6e06a48 feat(lpj): perbaikan controller & view penilai, validasi, dan MIG toggle
- Controllers: DokumenJaminan tangani array kosong saat diff legalitas.
- Controllers: Laporan sederhanakan query status list laporan.
- Controllers: PersetujuanPenawaran simpan NOC ke variabel $noc.
- Requests: DebitureRequest longgarkan 'nomor_rekening' max 50.
- Views: Informasi & Lingkungan tampilkan array/string aman dan rapi.
- Views: Header rapikan CSS page-break, nonaktifkan blok PHP komentar.
- Views: Foto Jaminan/Lampiran tambah link unduh & perbaikan layout.
- Views: LPJ sederhana: tombol kondisional saat MIG, include analisa.
- Views: Print-out sederhana kirim parameter ke signature-approval.
2025-11-10 20:01:06 +07:00
Daeng Deni Mardaeni
2db123a386 🧩 feat(penilaian, otorisator): gunakan ambang NPW untuk approval dan rapikan UI
- Terapkan logika berbasis NPW (total_nilai_pasar_wajar) dari JSON LPJ untuk menentukan status approval pada PenilaianController (sekitar baris 517–533).
- Senior Officer: status selesai jika NPW ≤ 1.000.000.000, selain itu masuk proses-laporan.
- EO Appraisal: status selesai jika NPW ≤ 5.000.000.000, selain itu masuk proses-laporan.
- DD Appraisal: tetap status selesai.
- Ambil NPW dari json_decode($permohonan->penilaian->lpj) dan hilangkan pemisah ribuan dengan str_replace('.', '', $npw) .
- Tampilkan tombol Otorisator di tampilan resources/views/penilaian/otorisator/show.blade.php berdasarkan ambang NPW:
  - EO: tombol muncul jika NPW > 1.000.000.000.
  - DD: tombol muncul jika NPW > 5.000.000.000.
- Rapikan kelas Tailwind pada komponen card, header, body, grid dan fleksibelitas layout agar konsisten (reorder class, penyesuaian urutan dan semantik).
- Perbaiki urutan icon dan teks pada tombol aksi agar konsisten (mis. mr-2 ki-filled ki-eye ).
2025-11-10 17:27:23 +07:00
Daeng Deni Mardaeni
45f0d387fd feat(lpj): peningkatan model & service inspeksi, penawaran, preview
- Models: Inspeksi tambah 'mig_detail_data_jaminan' pada 'fillable'.
- Models: PersetujuanPenawaran ubah import User, hapus 3 field lama.
- Models: PersetujuanPenawaran tambah relasi 'region' (belongsTo Region).
- Services: PreviewLaporanService tambah 22 item kategori preview.
- Services: SaveFormInspesksiService refaktor parsing action & rules.
- Services: TypeLaporanService tambah helper alamat & lokasi wilayah.
- Services: TypeLaporanService tambahkan updateOrCreate untuk Penilai.
- Services: TypeLaporanService tambah getInspeksi dan stub updatePenilai.
- Cleanup: penataan kode, trimming, kurangi nested kondisi; mohon cek namespace.
2025-11-10 10:09:24 +07:00
Daeng Deni Mardaeni
3ce84b89b4 feat(daftar-pustaka): implementasi fitur Daftar Pustaka dengan peningkatan UI/UX & breadcrumb navigation
## 📋 Ringkasan
Implementasi penuh fitur Daftar Pustaka dengan peningkatan UI/UX, dukungan gesture swipe di PDF viewer mobile, serta integrasi breadcrumb untuk navigasi yang lebih intuitif.

## 🔄 Perubahan Utama
- app/Services/DaftarPustakaService.php
  • Refactor method getDaftarPustaka(), hapus handleUpload_()
  • Optimasi filtering & perbaiki format kode

- resources/views/daftar-pustaka/create.blade.php
  • Aktifkan breadcrumb navigation dengan {{ Breadcrumbs::render() }}

- resources/views/daftar-pustaka/index.blade.php
  • Konsolidasi class CSS, perbaikan flex & pagination styling

- resources/views/daftar-pustaka/show.blade.php
  • Tambah gesture swipe (touchstart, touchend) untuk PDF viewer
  • Implementasi handleSwipe() & threshold swipe 50px

- routes/breadcrumbs.php
  • Tambah route breadcrumbs daftar-pustaka (index, show, create)
2025-11-10 09:11:48 +07:00
Daeng Deni Mardaeni
1dd4f8167e 🧩 feat(noc-controller): perluas filter pencarian NOC dengan relasi permohonan, debitur, jenis penilaian, dan nomor tiket
Ringkasan perubahan:
- Tambah filter orWhereRelation('permohonan', 'nomor_registrasi', 'LIKE', ...) untuk mencocokkan nomor_registrasi dari permohonan.
- Tambah filter orWhereRelation('permohonan.debiture','name', 'LIKE', ...) agar pencarian mencakup nama debitur.
- Tambah filter orWhereRelation('permohonan.jenisPenilaian', 'name', 'LIKE', ...) untuk dukungan jenis penilaian terkait.
- Tambah filter orWhere('nomor_tiket', 'LIKE', ...) untuk pencarian berdasarkan nomor_tiket.
2025-11-10 08:39:00 +07:00
Daeng Deni Mardaeni
117b344857 git commit -m " refactor(helper): dokumentasi & peningkatan fungsi helper LPJ
## Ringkasan
Refaktor besar pada helper `Modules/Lpj/app/Helpers/Lpj.php` untuk meningkatkan keterbacaan, keamanan, dan maintainability melalui dokumentasi, logging, dan validasi input.

## Perubahan Utama
- Tambah `declare(strict_types=1)` dan type declarations di seluruh fungsi
- Tambah PHPDoc lengkap pada `formatTanggalIndonesia` & `formatRupiah`
- Tambah logging detail (awal fungsi, validasi, keberhasilan, dan kegagalan)
- Validasi input null/kosong serta error handling yang lebih aman
- Bungkus fungsi query DB dalam `DB::transaction` untuk konsistensi data
- Tambah fungsi baru:
  - `parsePembandingMigration()` → membersihkan & memformat data pembanding migrasi
  - `getFilePath()` → resolve path file internal/eksternal
  - `parseTimestamp()` → robust timestamp parser multi-format
- Fix minor linter issue: `strtotime(now())`, `pow(10,3)` → `(int) str_pad(...)`

## Dampak
- Semua fungsi kini memiliki dokumentasi dan validasi lengkap
- Logging terstruktur untuk memudahkan debugging di production
- Peningkatan keamanan dan kestabilan dengan type safety & transaksi DB
- Output lebih konsisten dan mudah dilacak"
2025-11-09 21:36:26 +07:00
Daeng Deni Mardaeni
535be2cff3 feat(permohonan): otomasi PersetujuanPenawaran & NOC saat sudah dibayar, tambah validasi Bukti Bayar,
- PersetujuanPenawaran: ubah logika pembuatan menjadi firstOrCreate untuk mencegah duplikasi dan menjaga idempotensi.
- Validasi Bukti Bayar: wajib unggah dokumen “Bukti Bayar” saat status sudah_dibayar ; blokir proses jika dokumen tidak ditemukan.
- Simpan Bukti Bayar ke PersetujuanPenawaran: ambil dari koleksi dokumen jaminan, set ke field bukti_bayar .
- NOC otomatis: updateOrCreate NOC berdasarkan permohonan_id dan persetujuan_penawaran_id ; logging error bila gagal.
- Pengalihan aman: redirect terarah dengan pesan error pada kondisi validasi gagal atau kegagalan pembuatan NOC.
2025-11-08 11:45:10 +07:00
Daeng Deni Mardaeni
25011d1798 feat(lpj): Tingkatkan kontrol akses, query pembayaran, upload, dan UI
- Izinkan penghapusan dokumen jaminan untuk status 'order'/'revisi'
- Longgarkan guard admin sementara (comment response 403) pada aksi hapus
- Tambah transaksi DB saat hapus dokumen (begin/commit/rollback)
- Sesuaikan filter daftar pembayaran; hilangkan blok where `belum_bayar`/`jenis_penilaian=1`
- Tambah metode `handleUpload()` dengan `storeAs` ke disk `public`
- Rap-penilai: tambah tombol Back; peran 'penilai' diizinkan menyimpan
- Authorization: rapikan kelas Tailwind dan validasi keterangan saat revisi
- Persetujuan penawaran: gunakan optional chaining saat render nominal bayar
- Surveyor/tanah: gunakan `detail` alih-alih `details` saat hitung luas
- Komponen lampiran-dokumen: perbaiki atribut `textarea` dan penataan id
2025-11-05 16:46:52 +07:00
Daeng Deni Mardaeni
e773b82218 (lpj/nilai-plafond): Tambah field biaya, validasi, transaksi DB, ekspor, dan tampilan
- Menambahkan kolom biaya ke seluruh alur Nilai Plafond (model, request, controller, views, export, dan migrasi)
- Update model NilaiPlafond agar field biaya bisa di-mass assign ($fillable)
- Tambah validasi baru 'biaya' (nullable|numeric|min:0) di NilaiPlafondRequest
- Terapkan transaksi DB (beginTransaction, commit, rollback) pada store/update/destroy di controller
- Tambahkan kolom biaya ke view create, edit, dan datatable index dengan format Rupiah dan tooltip nilai mentah
- Tambah header & mapping kolom biaya di NilaiPlafondExport agar muncul di hasil export Excel
- Tambah migrasi kolom biaya bertipe decimal(15,2) nullable dengan rollback support
- Tambahkan logging detail (Log::info & Log::error) di setiap proses utama controller
- Pastikan pencarian kolom biaya pada datatables menggunakan CAST ke TEXT untuk kompatibilitas PostgreSQL
2025-10-03 10:23:21 +07:00
Daeng Deni Mardaeni
04ee3a0c48 🔧(permohonan): Perbaiki logika pembuatan PersetujuanPenawaran dan update label menu
- Menambahkan pengecekan `status_bayar == 'belum_bayar'` sebelum membuat record PersetujuanPenawaran
- Mencegah pembuatan PersetujuanPenawaran jika status pembayaran sudah 'sudah_bayar'
- Memastikan logika bisnis hanya membuat PersetujuanPenawaran untuk permohonan belum dibayar
- Mengoptimalkan query database untuk mengurangi operasi CREATE yang tidak perlu
- Memperbaiki struktur dan indentasi kode di PermohonanController agar lebih mudah dibaca
- Mengubah label menu dari "Data Debitur" menjadi "Data Permohonan" di module.json
- Menyelaraskan istilah menu dengan konten dan fungsi halaman
- Meningkatkan konsistensi data dan efisiensi sistem
- Memperbaiki UX dengan label menu yang lebih relevan dan mudah dipahami
2025-09-30 17:08:29 +07:00
Daeng Deni Mardaeni
10b5a6c96c (persetujuan-penawaran): Tambah fitur tampilan file dan perbaiki logika persetujuan penawaran
- Menambahkan auto-fill nominal_bayar dengan nilai biaya_final pada create persetujuan
- Memperbaiki query datatables dengan filter status penawaran lebih spesifik
- Menambahkan whereHas untuk memastikan hanya status 'persetujuan-penawaran' yang ditampilkan
- Menambahkan preview file upload (persetujuan_penawaran, surat_representasi, bukti_bayar)
- Menggunakan Storage::url() untuk generate URL file dengan keamanan optimal
- Menambahkan ikon eye dan badge untuk tampilan preview file
- Memperbaiki fallback nominal_bayar agar otomatis menggunakan biaya_final
- Merapikan struktur HTML dan urutan class Tailwind CSS di index dan form blade
- Mengoptimalkan AJAX request structure dan error handling agar lebih stabil
2025-09-30 17:06:30 +07:00
Daeng Deni Mardaeni
3aca1d46c2 🧹(surveyor): Optimasi import statements dan perbaikan tampilan detail surveyor
- Menghapus lebih dari 20 import statements yang tidak digunakan di SurveyorController
- Membersihkan import RedirectResponse, JsonResponse, Response, dan helper tidak relevan
- Menghapus model lama seperti Surveyor, Analisa, dan AnalisaFakta yang tidak digunakan
- Menambahkan import PermohonanHistory untuk fitur catatan revisi survey
- Menambahkan query untuk mengambil catatan revisi terbaru dari PermohonanHistory
- Menampilkan catatan revisi dengan filter status 'revisi-survey' menggunakan latest()
- Mereorganisasi urutan class Tailwind CSS pada detail.blade.php agar lebih konsisten
- Memperbaiki struktur HTML dan indentasi untuk meningkatkan readability
- Mengoptimalkan error handling dan conditional rendering di view untuk tampilan lebih bersih
2025-09-30 17:01:52 +07:00
Daeng Deni Mardaeni
db55471111 🎨(pembayaran): Perbaiki logika status pembayaran dan optimasi tampilan approval
- Memperbaiki nested condition untuk jenis_penilaian_id == 2 pada PembayaranController
- Memindahkan logika status 'spk' ke blok else yang sesuai
- Menyempurnakan flow status pembayaran agar konsisten dan bebas konflik
- Menghindari benturan status antara 'proses-laporan' dan 'spk'
- Menyusun ulang class Tailwind CSS pada approval.blade.php agar konsisten dan rapi
- Memperbaiki struktur HTML dan layout card untuk meningkatkan readability dan responsivitas
- Menambahkan fallback nominal_bayar dari biaya_final untuk keandalan data
- Mengoptimalkan tampilan tombol action berdasarkan status_bayar dengan null-checking
- Menambahkan fallback values untuk data kosong serta perbaikan spacing & alignment
- Meningkatkan UX dan accessibility agar approval page lebih user-friendly dan stabil
2025-09-30 16:57:44 +07:00
Daeng Deni Mardaeni
e3540a1dd6 🔧 refactor(controller): perbaikan akses role & logika pembayaran NOC
- Tambah filter `branch_id` untuk role `pemohon-ao` & `pemohon-eo` di LaporanController, PembatalanController, dan PembayaranController
- Pastikan user hanya dapat mengakses data sesuai branch untuk mencegah data lintas cabang
- Perbaikan pencarian Bucok di NocController dengan tambahan kondisi `orWhere(permohonan_id)`
- Tambah null safety untuk update Bucok & akses relasi branch/debiture
- Filter untuk hindari duplikasi NOC yang sudah punya `memo_penyelesaian`
- Komentari kondisi approval kompleks di LaporanController sementara waktu
- Tambah penggunaan null safety operator (`?->`) & fallback tanggal ke `created_at` NOC
- Rapikan import: hapus unused imports, tambah `Auth` facade, perbaikan urutan
- Tambah handling data: `created_at` timestamp saat buat NOC, fallback value untuk tanggal Bucok, default value kosong untuk null safety
2025-09-26 10:52:20 +07:00
Daeng Deni Mardaeni
cd97d184ce 🔧 refactor(menu): reorganisasi struktur menu & perbaikan akses role
- 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`
2025-09-26 10:49:18 +07:00
Daeng Deni Mardaeni
929c56b079 feat(slik): tambah fitur export data SLIK ke Excel
- Tambah class `SlikExport` dengan implementasi Laravel Excel (WithMapping, WithHeadings, ColumnFormats, FromCollection)
- Method `collection()`, `map()`, `headings()`, `columnFormats()` untuk data mapping, header, dan formatting
- Format kolom: text untuk ID/kode, number untuk nilai agunan, date (d/m/Y) untuk tanggal
- Tambah method `export()` di `SlikController` dengan logging, error handling, dan filename timestamp
- Optimasi performa: chunking data, batch insert, memory monitoring (current & peak usage)
- Logging lengkap: start, jumlah records, success (filename & peak memory), error trace
- Integrasi route: GET `/slik/export` → `SlikController@export` (name: slik.export)
- Dependensi: gunakan `maatwebsite/excel`, pastikan package & write permission tersedia
- Dampak: export Excel lebih cepat, format user-friendly, audit trail lebih lengkap
2025-09-22 15:25:13 +07:00
Daeng Deni Mardaeni
ba9089e2ac 🔧 refactor(pembayaran): perbaikan struktur kode & integrasi Bucok dengan Permohonan
- Tambahkan validasi parameter `type` pada PembayaranController untuk mencegah error runtime
- Refactor nested conditions & perbaikan indentasi agar kode lebih readable dan maintainable
- Update model Bucok: tambah field `nomor_registrasi` & `permohonan_id` ke fillable serta relasi dengan Permohonan
- Integrasi logika pembayaran: auto update/create Bucok dengan data Permohonan & default nominal_bayar
- Implementasi conditional update berdasarkan ketersediaan nomor_tiket untuk sinkronisasi data
- Tambahkan migration baru: kolom nomor_registrasi & permohonan_id di tabel bucoks, dengan foreign key dan index
- Pastikan rollback migration tersedia via method down() untuk keamanan schema
- Optimasi query dengan index baru & penggunaan updateOrCreate untuk hindari duplikasi data
2025-09-22 11:35:07 +07:00
Daeng Deni Mardaeni
20d0061d42 feat(permohonan): auto-create PersetujuanPenawaran untuk jenis penilaian tertentu
- Import model PersetujuanPenawaran ke PermohonanController
- Tambah pengecekan jenis_penilaian_id == 1 setelah update permohonan
- Implementasi auto-create record PersetujuanPenawaran jika belum ada
- Simpan permohonan_id dan created_by (auth()->id()) pada record baru
- Gunakan where()->first() untuk cek existing record sebelum create
- Tambahkan logika di dalam try-catch agar konsisten dengan error handling
- Pastikan duplicate record dicegah untuk menjaga integritas data
- File dimodifikasi: app/Http/Controllers/PermohonanController.php
- Dampak: mempercepat workflow, kurangi manual input, tingkatkan konsistensi data
2025-09-22 10:46:58 +07:00
Daeng Deni Mardaeni
4bef7cdafd feat(laporan-admin-kredit): tambah kolom kolektibilitas & keterangan pada index dan export Excel
- Tambah kolom "Kolektibilitas" (min-w 150px) & "Keterangan" (min-w 200px) di tabel index laporan admin kredit
- Dukungan sorting & filtering pada kedua kolom baru dengan integrasi DataTable
- Implementasi truncation keterangan >50 karakter dengan suffix "..." dan fallback "-" jika kosong
- Responsive design di tabel index agar tetap readable di berbagai layar
- Mapping data export Excel ditambahkan field kolektibilitas & keterangan (posisi kolom N & O)
- Update heading Excel: tambah header "Kolektibilitas" & "Keterangan", geser "Created At" ke kolom P
- Tambah format Excel: FORMAT_TEXT untuk kolektibilitas & keterangan, FORMAT_DATE_DATETIME untuk created_at
- Dampak: informasi laporan admin kredit lebih lengkap, mendukung analisis kolektibilitas & dokumentasi tambahan
2025-09-22 09:12:52 +07:00
Daeng Deni Mardaeni
bf728972b5 (laporan-admin-kredit): tambah kolom keterangan & kolektibilitas
- Tambah field `keterangan` (TEXT) & `kolektibilitas` (VARCHAR 10) pada tabel laporan_admin_kredit
- Update model LaporanAdminKredit dengan fillable baru
- Tambah dropdown kolektibilitas (1-5: Lancar, DPK, Kurang Lancar, Diragukan, Macet) di form
- Tambah textarea keterangan dengan old() support untuk validasi
- Validasi: `keterangan` nullable|string, `kolektibilitas` nullable|string|in:1..5
- Update controller: simpan field baru dengan DB transaction & error handling
- Migration baru untuk menambah kolom `keterangan` & `kolektibilitas`
- UI/UX: konsistensi styling, responsive grid layout, placeholder informatif
- Testing: form simpan & validasi berhasil, migration jalan tanpa error
2025-09-22 09:12:42 +07:00
Daeng Deni Mardaeni
c4bb3bea28 🔧(backend): Perbaikan & optimasi controller serta view untuk modul penilai dan surveyor
- PenilaiController: tambah eager loading relasi `penawaran` untuk kurangi N+1 query
- RegistrasiFinalController: ubah filter status dari `spk` → `registrasi-final`
- SurveyorController: perbaiki pengecekan jenisPenilaian dengan `in_array` (support External/Eksternal, case-insensitive)
- SurveyorController: ubah field `tanggal_laporan` → `tgl_final_laporan` sesuai DB baru
- SurveyorController: sanitasi koordinat lat/lon dengan menghapus koma untuk valid format
- SurveyorController: perbaiki exception handling (`Exeception` → `\Exception`, `$th` → `$e`, tambah namespace lengkap)
- SurveyorController: konsistensi penggunaan `Auth::user()` alih-alih `auth()->user()`
- View pembayaran/index.blade.php: tambahkan safe navigation `data.debiture?.name` untuk hindari null error
- View penilai/index.blade.php: cleanup baris kosong & perbaiki logika status pakai `data.penawaran?.status`
2025-09-21 21:17:19 +07:00
Daeng Deni Mardaeni
2b5556410d 🔧 refactor(laporan): kontrol akses role, optimasi query, dan perbaikan UI
- Tambah role `pemohon-ao` & `pemohon-eo` untuk upload lampiran di LampiranDokumen.php
- Implementasi kontrol akses role di lampiran-dokumen.blade.php & laporan/index.blade.php (logika khusus nilai_liquidasi)
- Modifikasi query di LaporanController.php: hapus filter approval_eo_at & optimasi kondisi WHERE
- Perbaikan formatting query dengan indentasi lebih rapi & maintainable
- Standardisasi urutan class CSS di beberapa Blade (activity/index, penilaian/otorisator/index-sla & index)
- Pisahkan logika generateLaporanButton jadi function terpisah di laporan/index.blade.php
- Perbaikan tampilan tombol laporan berbasis role + cleanup baris kosong & indentasi
- Konsistensi UI/UX: responsive design lebih baik, interface clean & styling konsisten dengan Tailwind
- Tingkatkan security & maintainability: granular role access, query lebih efisien, code lebih terstruktur
2025-09-19 09:10:06 +07:00
Daeng Deni Mardaeni
ee7c8ce97f 🔧 refactor(inspeksi): gunakan updateOrCreate & perbaikan kode
- Ganti `Inspeksi::create()` → `updateOrCreate()` di PenilaiController (2x) & SurveyorController (1x) dengan kondisi upsert (permohonan_id + dokument_id)
- Tambah logging di SaveFormInspesksiService.php (`Log::info`) untuk debugging & validasi action kosong
- Perbaiki error handling dengan pesan lebih informatif `'Gagal menyimpan data : '.$e->getMessage()`
- Refaktor parsing action memakai array_map & array_filter agar lebih efisien
- Rapikan kode: hapus baris kosong tidak perlu & improve readability
- Perbaiki urutan class CSS di beberapa Blade view (rap-penilai, penilai/index, surveyor/inspeksi)
- Perbaiki XSS di rap-penilai.blade.php dengan `{!! json_encode($dokumen->address ?? '') !!}`
- Tingkatkan integritas database: cegah duplikasi data inspeksi via updateOrCreate()
- Tambah keamanan & maintainability: logging, validasi input, perbaikan format, serta pembersihan kode lama
2025-09-19 09:06:12 +07:00
Daeng Deni Mardaeni
6d137ad51c 🔧 refactor(laporan-slik): Perbaikan controller dan routing untuk laporan SLIK
- Mengubah nama method datatables menjadi dataForDatatables untuk konsistensi penamaan
- Menambahkan method show untuk menampilkan detail laporan SLIK individual
- Memperbaiki struktur response datatables dengan format yang lebih lengkap dan konsisten
- Menambahkan filter tambahan untuk sandi_bank dan kolektibilitas pada datatables
- Mengimplementasikan sorting dan pagination yang lebih robust
- Menambahkan error handling yang komprehensif dengan logging
- Memperbaiki transformasi data dengan penambahan field kolektibilitas_badge dan created_by
- Mengupdate routing untuk menambahkan route show laporan SLIK
- Menambahkan breadcrumb untuk halaman laporan SLIK dan detail
- Mengubah role akses dari 'noc' menjadi 'adk' pada module.json
- Memperbaiki format tanggal menggunakan helper dateFormat
- Menambahkan penanganan exception dengan fallback response yang proper
- Mengoptimalkan query dengan penambahan filter yang lebih spesifik
- Memperbaiki struktur response JSON untuk kompatibilitas dengan frontend datatables
2025-09-17 15:24:27 +07:00
Daeng Deni Mardaeni
6c004812a9 🎨 feat(slik): Implementasi fitur pindah data SLIK ke laporan dan perbaikan UI
- Menambahkan tombol "SLIK" pada halaman index dan show untuk memindahkan data ke laporan SLIK
- Mengimplementasikan fungsi moveToLaporan() dengan konfirmasi SweetAlert dan proses AJAX
- Melakukan migrasi framework CSS dari Bootstrap ke TailwindCSS pada laporan-slik/show.blade.php
- Memperbaiki struktur layout dengan grid system TailwindCSS yang responsif
- Mengupdate breadcrumbs dengan styling dan route names yang benar
- Menghapus fitur truncate data SLIK dari interface untuk keamanan data
- Memperbaiki route names dari admin-kredit.laporan-slik menjadi laporan-slik
- Mengoptimasi tombol Export dengan penghapusan parameter ID yang tidak diperlukan
- Menambahkan konfigurasi import SLIK di .env.example untuk optimasi performa
- Memperbaiki template download link dengan class styling yang konsisten
- Mengimplementasikan error handling yang komprehensif dengan user feedback
- Menambahkan auto-reload DataTable setelah operasi pemindahan data berhasil
- Melakukan redesign card layout dengan pembagian "Data Debitur" dan "Data Fasilitas"
- Menambahkan feedback visual dengan disable tombol setelah berhasil dipindahkan
- Mengoptimasi konfigurasi DataTable dengan reload functionality
- Menambahkan breadcrumb routes untuk laporan SLIK dengan struktur hierarki
- Mengimplementasikan progress tracking untuk monitoring proses import
- Memperbaiki JavaScript dengan pemisahan fungsi dan penambahan variabel global
- Menstandarisasi framework CSS untuk konsistensi visual
- Mengimplementasikan responsive design yang lebih baik
2025-09-17 15:19:28 +07:00
Daeng Deni Mardaeni
c3c40fdc27 feat(laporan-slik): implementasi sistem laporan SLIK
- Menambahkan tabel `laporan_slik` (47 kolom, index, audit trail, status aktif/non-aktif)
- Membuat model `LaporanSlik` dengan fillable lengkap, relasi ke Slik & User, accessor agunan/status badge
- Menambahkan controller `LaporanSlikController` dengan method store(), datatables(), export()
- store(): validasi strict, cek duplikasi, copy data dari Slik ke laporan, hapus data asal
- datatables(): filter search/tahun/bulan/status, pagination, sorting, JSON response standar
- export(): ekspor Excel dengan filter sama, nama file otomatis timestamp, error handling
- Integrasi sistem: transaksi DB aman, logging detail, support bulk operations, memory optimisasi
- UX: SweetAlert, DataTable real-time, loading state, error message jelas, auto-reload
- Security & performa: validasi input, XSS & SQLi prevention, index optimization, siap rate limiting
2025-09-17 13:00:24 +07:00
Daeng Deni Mardaeni
41262e0317 feat(slik): migrasi route SLIK ke group admin-kredit
Mengubah struktur route SLIK agar sesuai dengan arsitektur admin-kredit dengan menambahkan prefix admin-kredit pada semua route.

- Menambahkan route SLIK lengkap dalam group admin-kredit di routes/web.php
- Memperbarui breadcrumb SLIK untuk menggunakan prefix admin-kredit di routes/breadcrumbs.php
- Memperbarui semua referensi route di view index.blade.php:
  * Breadcrumbs: slik → admin-kredit.slik
  * Route datatables: slik.datatables → admin-kredit.slik.datatables
  * Route import: slik.import → admin-kredit.slik.import
  * Route export: slik.export → admin-kredit.slik.export
  * Route download template: admin-kredit.slik.download-template
  * Route JavaScript: slik.show → admin-kredit.slik.show
- Memperbarui referensi route di view show.blade.php:
  * Breadcrumbs: slik → admin-kredit.slik.show
  * Tombol kembali: slik.index → admin-kredit.slik.index
- Menambahkan link download template Excel di modal import
2025-09-16 17:18:31 +07:00
Daeng Deni Mardaeni
20833213b1 feat(slik): implementasi sistem import SLIK dengan optimasi memory & timeout handling
- Menambahkan `SlikController.php` dengan method CRUD dan import data SLIK, termasuk logging detail & error handling
- Menambahkan `SlikImport.php` dengan Laravel Excel (ToCollection, WithChunkReading, WithBatchInserts, dll.)
- Optimasi memory dengan chunk processing (50 baris/chunk) dan batch insert (50 record/batch)
- Penanganan timeout menggunakan `set_time_limit` & memory limit configurable via config
- Implementasi queue processing untuk file besar (>5MB) dengan progress tracking
- Validasi file upload & data baris, skip header dari baris ke-5, serta rollback jika error
- Garbage collection otomatis setiap 25 baris, unset variabel tidak terpakai, dan logging usage memory
- Error handling komprehensif dengan try-catch, rollback transaksi, hapus file temp, dan logging stack trace
- Semua parameter (batch size, chunk size, memory limit, timeout, GC, queue threshold) configurable via config
- Diuji pada file besar (>50MB), memory stabil, timeout handling berfungsi, rollback aman, dan progress tracking valid
- Catatan: pastikan queue worker berjalan, monitor log progress, sesuaikan config server, dan backup DB sebelum import
2025-09-16 11:54:39 +07:00
Daeng Deni Mardaeni
81159983cf 🔧 refactor(noc): Integrasi Bucok & pembersihan kode NocController
- Tambah import model Bucok di NocController
- Refactor method update(): hapus variabel & logic status usang
- Update otomatis Bucok setelah NOC disimpan (nominal, tanggal, status)
- Gunakan where()->first() untuk cari record Bucok berdasarkan nomor_tiket
- Hapus 26 baris komentar dead code & filter whereHas('noc') di penyelesaian()
- Perbaiki formatting, indentasi, dan tambah blank line untuk readability
- Gunakan fallback tanggal penyelesaian (date('Y-m-d')) jika kosong
- Terapkan null coalescing operator (??) untuk handle nilai null
- Sinkronisasi status penyelesaian NOC ↔️ Bucok & kode lebih bersih
2025-09-16 09:44:31 +07:00
Daeng Deni Mardaeni
bc35785c9c feat(pembayaran): Integrasi otomatis dengan Bucok saat persetujuan penawaran dibuat
- Tambah import model `Modules\Lpj\Models\Bucok` di PembayaranController
- Perbaiki spacing dan assignment `nomor_tiket` agar konsisten
- Simpan instance NOC ke variabel `$noc` setelah create
- Buat record Bucok otomatis dengan `updateOrCreate` berdasarkan nomor_tiket
- Mapping field tanggal (hari, bulan, tahun) menggunakan Carbon
- Isi default penyelesaian = 'Belum Selesai' dan mapping nominal ke Bucok
- Gunakan relasi `$noc->branch?->name` untuk nama sub_direktorat & cabang
- Implementasi safe navigation operator untuk hindari null error
- Pastikan konsistensi data & sinkronisasi pembayaran dengan Bucok
2025-09-16 09:36:45 +07:00
Daeng Deni Mardaeni
041ca943c9 feat(noc): Implementasi total nominal diterima pada halaman penyelesaian
- Hitung total nominal diterima dari semua data yang difilter (bukan hanya halaman aktif)
- Tambahkan field `totalNominalDiterima` pada response JSON DataTable
- Parsing string currency ke numeric value untuk perhitungan akurat
- Tampilkan total di footer tabel dengan format Rupiah (IDR)
- Integrasi real-time backend (NocController) dan frontend (Blade + JS)
- Update otomatis via event listener DataTable saat data berubah atau difilter
- Styling footer dengan TailwindCSS untuk highlight nominal
- Validasi dan fallback aman (0) bila data tidak tersedia
- Transparansi & efisiensi monitoring keuangan secara real-time
2025-09-15 15:39:00 +07:00
Daeng Deni Mardaeni
312861a933 feat(noc): implementasi perhitungan total nominal diterima pada pembayaran
- Hitung total nominal diterima dari semua data yang difilter (bukan hanya halaman aktif)
- Tampilkan total dalam format currency Indonesia (IDR) di footer tabel
- Integrasi backend (NocController) dan frontend (Blade + JS) secara real-time
- Update otomatis via event listener DataTable saat data berubah atau difilter
- Validasi dan parsing currency string dengan aman, casting ke float untuk akurasi
- Tambahkan field totalNominalDiterima pada response JSON DataTable
- Footer tabel dengan styling TailwindCSS (text-green-600, font-bold) untuk highlight
- UX lebih transparan: user langsung melihat total pembayaran yang diterima
- Performa terjaga: minimal DOM manipulation, native Intl.NumberFormat, efisien pada filter
2025-09-15 15:30:16 +07:00
Daeng Deni Mardaeni
96657de512 feat(api,noc): Tambah API pencarian debitur dan perbaikan filter jenis penilaian
- API Debitur Controller: method search() (min 2 karakter), getByCode(), transaksi DB, logging, response JSON konsisten
- Batasi hasil pencarian maksimal 20 item untuk performa optimal
- Support pencarian berdasarkan CIF dan nama debitur
- Tambah import JenisPenilaian di NocController
- Perbaiki method penyelesaian() untuk mengirim data jenisPenilaians ke view
- Tambahkan filter nama jenis penilaian di dataForDatatablesPenyelesaian() dan kolom jenis_penilaian pada response tabel
- Update UI view penyelesaian: dropdown dinamis, kolom sortable, integrasi DataTable, perbaikan layout
- Validasi input & keamanan: transaction handling, logging, conditional debug response, SQL injection protection
- Peningkatan UX: autocomplete search, filter responsif, pesan error informatif, loading state, format response konsisten
2025-09-15 14:46:29 +07:00
Daeng Deni Mardaeni
4ad11593d5 feat(noc): Tambahkan filter jenis penilaian pada halaman pembayaran NOC
Fitur baru ini menambahkan kemampuan filter berdasarkan jenis penilaian pada halaman pembayaran NOC dengan integrasi penuh ke DataTable dan database. Perubahan meliputi:
- Penambahan query jenis penilaian aktif di controller
- Filter whereRelation pada `dataForDatatablesPembayaran()`
- Dropdown dinamis jenis penilaian di view pembayaran
- Event listener JavaScript untuk filter real-time
- Opsi reset "Semua Jenis Penilaian"
- Validasi input client & server dengan XSS protection
- Optimasi query dengan relasi `permohonan.jenisPenilaian`
- Tampilan UI responsive dan konsisten dengan desain existing
- Peningkatan UX untuk pencarian data pembayaran lebih akurat dan efisien
2025-09-15 14:40:40 +07:00
Daeng Deni Mardaeni
d851ab58bc 🔧 fix(noc): Perbaiki validasi dan logika NOC untuk mendukung pembayaran tanpa permohonan
- Ubah validasi permohonan_id dari required menjadi nullable di NocRequest
- Hapus pesan error required untuk permohonan_id di validation messages
- Tambahkan logika kondisional di NocController->store() untuk updateOrCreate berdasarkan keberadaan permohonan_id
- Perbaiki null safety dengan operator ?-> di form.blade.php untuk akses nested properties
- Update logika status pembayar untuk mendukung pembayaran dengan nomor_tiket
- Tambahkan kondisi khusus untuk menentukan status bayar berdasarkan nomor_tiket
- Perbaiki formatting dan spacing di controller untuk readability
2025-09-15 13:58:40 +07:00
Daeng Deni Mardaeni
c08e050815 feat: Tambah kolom nomor tiket dan perbaiki null safety NOC
- Tambahkan kolom 'nomor_tiket' di tabel NOC (index, pembayaran, penyelesaian)
- Perbaiki null safety dengan operator ?-> untuk mencegah error
- Update model Noc: ganti fillable dengan guarded, tambah relasi debiture & branch
- Hapus filter whereDoesntHave untuk memo_penyelesaian (commented out)
- Tambah fallback data dari noc->debiture dan noc->branch
- Perbaiki sorting dengan ->values() untuk reset array keys
- Update view pembayaran.blade.php dengan kolom nomor tiket
2025-09-15 12:52:14 +07:00