Commit Graph

769 Commits

Author SHA1 Message Date
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
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
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
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
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
Daeng Deni Mardaeni
4aeecf6a97 (pembayaran): Implementasi fitur create pembayaran baru dengan autocomplete debitur
- Menambahkan method create() di PembayaranController untuk menampilkan form pembayaran baru
- Menambahkan logika create pembayaran di method store() dengan validasi type 'create'
- Menambahkan penyimpanan data pembayaran baru ke tabel persetujuan_penawaran dan noc
- Menambahkan upload bukti bayar dengan penyimpanan ke storage public
- Menambahkan migration untuk kolom branch_id di tabel noc
- Menambahkan view create.blade.php dengan form pembayaran lengkap dan autocomplete debitur
- Menambahkan validasi JavaScript untuk format file dan ukuran maksimal 2MB
- Menambahkan TomSelect untuk pencarian debitur dengan AJAX real-time
- Menambahkan integrasi dengan API debitur search untuk autocomplete
- Memperbaiki method edit() untuk mendukung parameter tiket dalam pencarian persetujuan penawaran
- Mengubah query dataForDatatables untuk mendukung data dari persetujuan_penawaran dan permohonan
- Menambahkan mapping data yang fleksibel untuk menampilkan informasi dari berbagai sumber
- Menambahkan field nomor_tiket, nominal_bayar, dan catatan pada form create
- Menambahkan validasi client-side untuk memastikan file upload sesuai format
- Menambahkan relasi branch_id pada tabel noc untuk tracking cabang pembuat
- Menambahkan redirect ke pembayaran.index setelah berhasil menyimpan pembayaran baru
- Menambahkan import PhpParser\Node\Expr\Cast\Object_ (perlu dibersihkan)
- Mengoptimalkan query dengan eager loading dan mapping data yang efisien
- Menambahkan support untuk pembayaran tanpa permohonan (standalone payment)
- Menambahkan field is_permohonan untuk membedakan jenis pembayaran
- Menambahkan validasi dan error handling yang komprehensif
2025-09-15 11:32:59 +07:00
Daeng Deni Mardaeni
1caa7ebfdd (pembayaran): Implementasi fitur pengembalian lebih bayar
- Menambahkan method editLebih() di PembayaranController untuk menampilkan form pengembalian lebih bayar
- Menambahkan logika pengembalian lebih bayar di method store() dengan validasi type 'lebih_bayar'
- Menambahkan penyimpanan bukti KSL lebih bayar dengan upload file ke storage
- Menambahkan update bukti KSL ke tabel noc untuk pengembalian lebih bayar
- Menambahkan filter bukti_ksl_lebih_bayar null pada query dataForDatatablesLebih untuk menampilkan data yang belum diproses
- Menambahkan validasi file upload untuk bukti_ksl_lebih_bayar dengan format pdf,jpg,jpeg,png maksimal 2MB
- Menambahkan view form-lebih.blade.php dengan tampilan detail pembayaran dan form pengembalian
- Menambahkan validasi JavaScript untuk memastikan format dan ukuran file yang diupload
- Menambahkan route pembayaran/{pembayaran}/lebih untuk mengakses form pengembalian lebih bayar
- Mengubah link action di lebih.blade.php dari edit ke lebih untuk mengarahkan ke form pengembalian
- Menambahkan redirect ke pembayaran.lebih.index setelah berhasil menyimpan pengembalian
- Menambahkan field catatan opsional untuk memberikan keterangan tambahan pada proses pengembalian
- Menambahkan validasi client-side untuk memastikan file yang diupload sesuai format dan ukuran
- Menambahkan informasi detail pembayaran yang komprehensif di form pengembalian
- Menambahkan styling yang konsisten dengan form kurang bayar untuk user experience yang baik
2025-09-15 08:08:10 +07:00
Daeng Deni Mardaeni
8666a0c58b (pembayaran): Implementasi fitur pelunasan kurang bayar
- Menambahkan method editKurang() di PembayaranController untuk menampilkan form pelunasan kurang bayar
- Menambahkan logika pelunasan kurang bayar di method store() dengan validasi type 'kurang_bayar'
- Menambahkan penyimpanan bukti KSL kurang bayar dengan upload file ke storage
- Menambahkan update nominal pelunasan dan bukti KSL ke tabel noc dan persetujuan_penawaran
- Menambahkan filter bukti_ksl_kurang_bayar null pada query dataForDatatablesKurang untuk menampilkan data yang belum dilunasi
- Menambahkan validasi file upload untuk bukti_ksl_kurang_bayar dengan format pdf,doc,docx maksimal 10MB
- Menambahkan kolom nominal_pelunasan dan debiture_id pada migration persetujuan_penawaran
- Menambahkan view form-kurang.blade.php dengan tampilan detail pembayaran dan form pelunasan
- Menambahkan validasi JavaScript untuk memastikan nominal pelunasan tidak melebihi nominal kurang bayar
- Menambahkan route pembayaran/{pembayaran}/kurang untuk mengakses form pelunasan kurang bayar
- Mengubah link action di kurang.blade.php dari edit ke kurang untuk mengarahkan ke form pelunasan
- Menambahkan redirect ke pembayaran.kurang.index setelah berhasil menyimpan pelunasan
- Menambahkan rollback migration untuk menghapus kolom yang ditambahkan jika diperlukan
2025-09-15 08:04:49 +07:00
Daeng Deni Mardaeni
8a5bf21982 feat(pembayaran): implementasi pembayaran kurang & lebih bayar dengan role management
- Tambah method kurang() & lebih() di PembayaranController untuk halaman khusus
- Implementasi dataForDatatablesKurang() & dataForDatatablesLebih() untuk listing data
- Optimasi query dengan filter status + mapping nominal ke format rupiah
- Cleanup code: hapus import & komentar tidak dipakai, rapikan indentasi
- Update module.json: ubah akses menu pembayaran ke "pemohon-ao", tambahkan role "admin" untuk menu NOC
- Tambah route pembayaran/datatables-kurang & pembayaran/datatables-lebih di routes/registrasi.php
- Filtering & sorting data konsisten dengan pagination DataTables
- Format tampilan data finansial distandarisasi (rupiah 2 desimal)
2025-09-12 10:17:42 +07:00
Daeng Deni Mardaeni
2433aacfbc feat(noc): implementasi sistem pembayaran dengan tracking nomor tiket dan status kurang/lebih bayar
- Tambah field `nomor_tiket`, `nominal_kurang_bayar`, `bukti_ksl_kurang_bayar`, `nomor_rekening_lebih_bayar`, `bukti_ksl_lebih_bayar` di tabel `persetujuan_penawaran` & `noc`
- Update model `Noc` & `PersetujuanPenawaran` dengan fillable baru + migrasi database
- Update validasi di `NocRequest` & `PersetujuanPenawaranRequest` (nomor tiket, bukti KSL, kurang bayar, string max length)
- Restructure menu pembayaran dengan submenu *Kurang Bayar* & *Lebih Bayar*
- Tambah kolom "Nomor Tiket" di tabel & DataTable pembayaran
- Perbaikan tampilan: formatting, CSS, responsive layout, display cabang (code - name)
- Tambah routes `pembayaran.kurang.index` & `pembayaran.lebih.index` + integrasi controller
- Update `module.json` untuk menu, permission, roles, icon, dan styling
2025-09-12 09:23:13 +07:00
Daeng Deni Mardaeni
ba29f5ee8e feat(noc): implementasi logika conditional checkbox status pembayaran
- Menambahkan fungsi `updateCheckboxStatus()` untuk evaluasi kondisi real-time.
- Checkbox otomatis disabled jika total_harus_bayar = nominal_bayar = total_pembukuan.
- Checkbox **status_kurang_bayar** aktif jika nominal/pembukuan < total_harus_bayar.
- Checkbox **status_lebih_bayar** aktif jika nominal/pembukuan > total_harus_bayar.
- Menambahkan event listeners pada field nominal_bayar dan total_pembukuan.
- Memastikan initial state dicek saat halaman dimuat.
- Menambahkan logging untuk debugging dan monitoring.
- Meningkatkan UX dengan mencegah input data tidak logis.
2025-09-12 08:56:01 +07:00
Daeng Deni Mardaeni
2173a36564 feat & 🐛 fix(persetujuan-penawaran): Tambah field nomor_tiket dan perbaiki namespace serta relasi model
###  Fitur Baru
- Menambahkan field `nomor_tiket` pada model **PersetujuanPenawaran** ke dalam `$fillable`.
- Membuat migration untuk menambahkan kolom `nomor_tiket` (VARCHAR 100, nullable) di tabel `persetujuan_penawaran`.
- Menambahkan validasi dan custom error messages untuk field `nomor_tiket` pada **PersetujuanPenawaranRequest**.
- Menempatkan `nomor_tiket` setelah `nomor_proposal_penawaran` untuk konsistensi.
- Implementasi rollback pada migration untuk menjaga keamanan database.
- Menambahkan komentar dokumentasi pada migration untuk mempermudah maintenance.
- Validation rules: `nullable|string|max:100` dengan pesan error dalam Bahasa Indonesia.
- Field ini mendukung tracking dan identifikasi tiket setiap persetujuan penawaran.
- Mengikuti pola dan konvensi sistem yang sudah ada agar konsisten.

### 🐛 Perbaikan Bug
- Memperbaiki typo namespace dari **Usermanagemenet** menjadi **Usermanagement**.
- Menghapus import **Region** yang tidak ada di codebase.
- Menghapus relasi `region()` karena model **Region** tidak ditemukan.
- Mempertahankan relasi valid seperti `penawaran`, `permohonan`, `authorizedBy`, dan `noc`.
- Menyelesaikan error *"Undefined type"* pada baris 53 dan 59.
- Membersihkan kode dengan menghapus dependency yang tidak ada.
- Menyesuaikan namespace **User** agar konsisten dengan struktur modul **Usermanagement**.
- Model kini lebih stabil, bersih, dan bebas dari error diagnostic.
2025-09-11 22:03:58 +07:00
Daeng Deni Mardaeni
b4aba1a02a 🔧 fix(noc): Perbaiki validasi field opsional dan kondisi query memo
- Menambahkan **null coalescing operator** pada field `catatan_noc` agar tidak error bila kosong.
- Mengubah default field status pembayaran NOC menjadi string `'0'` untuk konsistensi.
- Menonaktifkan validasi approval di `MemoController` agar semua data NOC dapat tampil.
- Mencegah error validasi ketika field opsional tidak diisi pada form.
- Memastikan tampilan memo lebih lengkap tanpa batasan kondisi approval.
2025-09-11 09:43:50 +07:00
Daeng Deni Mardaeni
32baffe636 feat(bucok)!: tambah modul Bucok end-to-end + impor updateOrCreate
- Tambah routing, breadcrumbs, menu, dan views (index + detail)
- Controller: index/show, datatables (filter multi-kolom, sorting, pagination), impor Excel (transaksi + logging)
- Import: updateOrCreate by nomor_tiket, normalisasi tanggal & numerik, statistik impor
- Migrasi: semua kolom bisnis → string untuk konsistensi input Excel; nomor_tiket unique + index
- UX: DataTable dengan filter (tahun, bulan, cost center, status), tombol import, detail tiket

BREAKING CHANGE:
- Semua kolom bisnis kini bertipe string → perlu sesuaikan casts di model Bucok & filter tanggal/numerik di controller
2025-08-19 11:30:19 +07:00
Daeng Deni Mardaeni
19fb39b02f feat(noc): implementasi mutual exclusive selection untuk status kurang dan lebih bayar
- Menambahkan JavaScript untuk mutual exclusive selection antara status kurang bayar dan lebih bayar
- Hanya satu status yang bisa dipilih pada satu waktu untuk mencegah konflik data
- Implementasi fungsi resetFields() untuk membersihkan field yang tidak dipilih
- Menambahkan event handler untuk toggle visibility field berdasarkan pilihan status
- Menambahkan logging untuk tracking perubahan status pembayaran
- Field nominal dan bukti pengembalian otomatis direset ketika status berubah
- Mempertahankan UI existing dengan checkbox namun menambahkan logika mutual exclusive
- Menambahkan validasi client-side untuk mencegah input data yang tidak konsisten
- Support untuk readonly mode ketika memo penyelesaian sudah ada
- Implementasi function-level comments untuk dokumentasi kode
2025-07-31 13:24:18 +07:00
Daeng Deni Mardaeni
bc7fef05f6 feat(noc): tambah field total pembukuan dan perbaiki label form
Menambahkan field total_pembukuan ke dalam sistem NOC untuk mendukung pencatatan pembukuan yang lebih akurat.

Perubahan yang dilakukan:
- Menambahkan migration untuk field total_pembukuan di tabel noc dengan tipe decimal(10,2)
- Menambahkan total_pembukuan ke dalam fillable array di model Noc
- Mengintegrasikan field total_pembukuan ke dalam NocController untuk proses store dan update
- Menambahkan input field "Jumlah Pembukuan" di form NOC dengan validasi error handling
- Mengubah label "Nominal Bayar" menjadi "Jumlah Yang Harus Disetor" untuk kejelasan
- Mengubah label "Nominal Diterima" menjadi "Jumlah Yang Disetor" untuk konsistensi
- Mengubah title menu dari "Pembayaran" menjadi "Pembukuan" di module.json
- Menambahkan readonly attribute pada field total_pembukuan ketika sudah ada memo
- Mengimplementasikan old() helper untuk mempertahankan nilai input saat validation error
- Menambahkan placeholder text "Masukkan total pembukuan" untuk user guidance
2025-07-30 11:17:10 +07:00
Daeng Deni Mardaeni
4d8b72e33a fix datatable noc 2025-07-22 09:09:19 +07:00
Daeng Deni Mardaeni
cf0059fe66 feat(memo): implementasi jenis penilaian dinamis dan perbaikan checkbox pada memo penyelesaian
Perubahan yang dilakukan:
- Menghapus validasi input pada method `preview()` untuk mendukung fleksibilitas data preview
- Mengganti eager loading dari `tujuanPenilaian` menjadi `jenisPenilaian` agar sesuai dengan kebutuhan data dinamis
- Menambahkan method chaining `->get()` pada akhir query untuk memastikan eksekusi query yang benar
- Menambahkan field `jenisPenilaian` ke dalam memoData agar template dapat menampilkan instruksi pembayaran secara dinamis
- Mengimplementasikan checkbox visual yang disabled dengan hidden input untuk tetap mengirim data saat form submit
- Memisahkan antara checkbox untuk tampilan (disabled) dan input data (hidden) untuk meningkatkan UX
- Mengubah lebar label dari 80px menjadi 200px pada template PDF dan preview untuk layout yang lebih baik
- Mengganti informasi jaminan menjadi statis "Tanah & Bangunan" pada template PDF dan preview
- Menambahkan conditional rendering untuk menampilkan instruksi pembayaran sesuai dengan jenis penilaian (Internal/KJPP)
- Menyesuaikan layout dan formatting pada template PDF dan preview agar lebih konsisten secara visual
- Menambahkan logika text dinamis untuk jenis penilaian pada bagian instruksi pembayaran
- Mengoptimalkan struktur query agar lebih efisien dan menghindari duplikasi

Tujuan perubahan:
- Mendukung proses memo penyelesaian dengan jenis penilaian yang lebih fleksibel (Internal/KJPP)
- Meningkatkan pengalaman pengguna dengan tampilan checkbox yang jelas namun tetap menyimpan data dengan aman
- Menyederhanakan layout dan formatting agar lebih profesional dan konsisten di preview maupun PDF
- Memastikan proses generate memo berjalan sesuai kebutuhan bisnis dengan instruksi pembayaran yang tepat
2025-07-17 16:05:56 +07:00
Daeng Deni Mardaeni
d7e5df569a feat(memo): tambah filter jenis penilaian dan perbaiki fungsi clear checkbox pada datatable memo
Perubahan yang dilakukan:
- Menambahkan dropdown filter "Jenis Penilaian" (Internal/External) pada halaman index memo penyelesaian
- Mengimplementasikan filter gabungan menggunakan separator '|' untuk kombinasi filter dan search
- Memperbaiki fungsi clearSelectedCheckboxes dengan selector '#memo-table thead input[type="checkbox"]' agar lebih spesifik
- Menambahkan event listener untuk filter jenis penilaian yang terintegrasi dengan fungsi search datatable
- Mengupdate MemoController untuk memisahkan parameter filter menjadi jenis penilaian dan search term menggunakan explode('|')
- Menambahkan log untuk debugging filter dan proses checkbox
- Memodifikasi tampilan dengan class `gap-2` pada container filter untuk spacing yang lebih baik
- Menambahkan console.log pada fungsi handleCheckboxChange untuk tracking interaksi user
- Memperbaiki error handling pada fungsi clearSelectedCheckboxes untuk memastikan checkbox ter-reset dengan benar
- Menampilkan jumlah item terpilih pada tombol "Create Memo" untuk meningkatkan feedback user

Tujuan perubahan:
- Mempermudah pengguna dalam memfilter data berdasarkan jenis penilaian langsung di datatable memo
- Memastikan fungsi checkbox selection berjalan dengan konsisten dan lebih robust
- Meningkatkan user experience dengan feedback visual yang lebih jelas saat filter dan selection digunakan
- Menyederhanakan interaksi user sekaligus menjaga akurasi proses pembuatan memo penyelesaian
2025-07-17 15:16:58 +07:00
Daeng Deni Mardaeni
dc6e326122 refactor(memo): perbaiki indentasi dan komentar sementara filter NOC
Perubahan yang dilakukan:
- Memperbaiki indentasi pada loop foreach untuk update NOC dan permohonan agar lebih readable
- Mengomentari sementara kondisi whereHas('noc') pada dataForDatatables untuk keperluan pengujian
- Merapikan struktur kode pada method storeMemopenyelesaian agar lebih konsisten dan mudah dipahami
- Menambahkan konsistensi formatting pada blok kode update NOC untuk meningkatkan maintainability
- Memastikan logging tetap aktif untuk kebutuhan audit dan tracking perubahan data
- Menjaga integritas proses dengan tetap menggunakan database transaction (commit/rollback)

Tujuan perubahan:
- Meningkatkan keterbacaan dan konsistensi kode di MemoController
- Mempermudah proses debugging dan pengujian dengan menonaktifkan filter NOC sementara
- Memastikan struktur kode tetap rapih dan mudah dikelola tanpa mengubah logika bisnis utama
2025-07-17 14:28:21 +07:00
Daeng Deni Mardaeni
4459b70271 feat(memo): tambah tombol download PDF dan disable checkbox untuk memo selesai
- Menambahkan field memo_penyelesaian_pdf_path ke tabel noc untuk menyimpan path file PDF
- Membuat migrasi baru untuk menambahkan field PDF path ke tabel noc
- Menambahkan field memo_penyelesaian_pdf_path ke model Noc dalam fillable array
- Memodifikasi fungsi generatePdf di MemoController untuk menyimpan path PDF ke database
- Menambahkan route baru memo.download-pdf untuk download file PDF memo penyelesaian
- Membuat method downloadPdf di MemoController dengan validasi file dan error handling
- Memodifikasi kolom select di datatables untuk disable checkbox jika sudah ada memo
- Menambahkan tooltip pada checkbox yang disabled untuk memberikan informasi kepada user
- Memodifikasi kolom actions untuk menampilkan tombol download PDF jika memo sudah ada
- Menampilkan informasi nomor memo dan tanggal memo di kolom actions
- Memodifikasi fungsi handleCheckboxChange untuk mengabaikan checkbox yang disabled
- Menambahkan styling untuk tombol download dengan icon dan warna yang sesuai
- Menambahkan logging untuk tracking aktivitas download PDF memo penyelesaian
- Menambahkan validasi keberadaan file di storage sebelum mengizinkan download
- Menggunakan Storage facade untuk operasi file yang lebih aman dan konsisten
2025-07-17 13:47:53 +07:00
Daeng Deni Mardaeni
57dece449c feat(memo): filter datatables hanya tampilkan permohonan dengan NOC
Menambahkan filter pada datatables memo penyelesaian agar hanya menampilkan permohonan yang sudah memiliki NOC.

Perubahan yang dilakukan:
- Menambahkan kondisi whereHas('noc') pada query dataForDatatables
  - Memastikan hanya permohonan dengan relasi NOC yang ditampilkan
  - Filtering dilakukan langsung di level database untuk efisiensi
  - Konsisten dengan logika bisnis memo penyelesaian

- Update MemoController:
  - Memodifikasi fungsi dataForDatatables di baris 184-193
  - Menambahkan ->whereHas('noc') setelah kondisi filter existing
  - Mempertahankan semua parameter request dan struktur response yang sudah ada
  - Logging tetap aktif untuk kebutuhan audit dan monitoring

Tujuan perubahan:
- Menjamin konsistensi proses memo penyelesaian hanya pada permohonan yang sudah memiliki NOC
- Menghindari proses memo pada data yang belum lengkap
- Menjaga data integrity dengan relasi yang lebih jelas antara permohonan dan NOC
- Meningkatkan efisiensi query dengan filtering langsung di database
2025-07-17 13:21:41 +07:00