Skip to content

Lengkapi fungsi laporan desa aktif#1101

Open
habibie11 wants to merge 1 commit into
rilis-devfrom
dev-1100
Open

Lengkapi fungsi laporan desa aktif#1101
habibie11 wants to merge 1 commit into
rilis-devfrom
dev-1100

Conversation

@habibie11

@habibie11 habibie11 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

issue # #1100
penyesuaian di API Database Gabungan https://github.com/OpenSID/API-Database-Gabungan/pull/452

🎯 Deskripsi

Pull request ini melengkapi fitur dan fungsionalitas pada modul Laporan Desa Aktif (/laporan/desa-aktif) sesuai dengan ketentuan pada issue, mencakup tiga penambahan utama:

  1. Fitur Export Excel — Menambahkan opsi bagi pengguna untuk mengunduh laporan desa aktif dalam format file .xls yang disesuaikan dengan parameter filter/pencarian yang sedang aktif.
  2. Kolom Status Desa — Menambahkan kolom status desa dengan indikator Aktif (badge hijau) atau Tidak Aktif (badge merah). Ketentuan desa dinyatakan aktif adalah apabila:
    • Login dari admin paling lama tujuh hari yang lalu (login_terakhir ≤ 7 hari), ATAU
    • Perubahan data paling lama tujuh hari yang lalu (perubahan_terakhir ≤ 7 hari).
      Apabila kedua tanggal tersebut lebih dari 7 hari atau kosong, maka status desa otomatis menjadi Tidak Aktif.
  3. Kolom Nama Kecamatan — Menampilkan nama kecamatan di sebelah samping kolom nama desa untuk memberikan informasi wilayah yang lebih lengkap.

🛠️ Perubahan yang Dilakukan

1. app/Http/Controllers/LaporanDesaAktifController.php

Add — Logika pengambilan data tersentralisasi, kalkulasi status, dan export Excel:

  • Menambahkan method getDesaAktifData(Request $request) untuk mengambil data dari API Proxy (desa-aktif) dan memetakan atribut status_aktif ke setiap item data.
  • Menambahkan method helper hitungStatusAktif(array $attributes): string menggunakan \Carbon\Carbon::now()->subDays(7) untuk memvalidasi apakah login_terakhir atau perubahan_terakhir berada dalam rentang 7 hari terakhir.
  • Menambahkan method exportExcel(Request $request) yang merender view laporan.desa_aktif.cetak dengan flag $excel = true dan mengembalikan response dengan header Content-Type: application/vnd.ms-excel serta Content-Disposition: attachment; filename="laporan-desa-aktif.xls".

2. routes/web.php

Add — Pendaftaran route untuk export Excel:

  • Mendaftarkan route baru GET laporan/desa-aktif/export-excel dengan nama route laporan.desa-aktif.export-excel.
  Route::prefix('desa-aktif')->group(function () {
      Route::get('', [App\Http\Controllers\LaporanDesaAktifController::class, 'index'])->name('laporan.desa-aktif.index');
      Route::get('cetak', [App\Http\Controllers\LaporanDesaAktifController::class, 'cetak'])->name('laporan.desa-aktif.cetak');
+     Route::get('export-excel', [App\Http\Controllers\LaporanDesaAktifController::class, 'exportExcel'])->name('laporan.desa-aktif.export-excel');
  });

3. resources/views/laporan/desa_aktif/index.blade.php

Add & Modify — Penambahan tombol Excel, kolom Kecamatan & Status, dan kalkulasi client-side DataTables:

  • Menambahkan tombol Excel (#export-excel) pada header card di samping tombol Cetak.
  • Menambahkan kolom Kecamatan setelah kolom Desa dan kolom Status pada akhir tabel thead.
  • Menambahkan definisi kolom attributes.nama_kecamatan dan custom renderer columnDefs untuk kolom Status (index ke-7) di dalam konfigurasi DataTables dengan logika pembandingan tanggal di sisi client-side menggunakan JavaScript.
  • Menambahkan event listener klik pada tombol #export-excel untuk membuka URL unduhan Excel dengan membawa parameter pencarian (search) yang sedang diinputkan pengguna.

4. resources/views/laporan/desa_aktif/cetak.blade.php

Add & Modify — Penambahan kolom pada tampilan cetak/excel dan pengecekan flag excel:

  • Menambahkan kolom Kecamatan ($item['attributes']['nama_kecamatan']) dan Status ($item['attributes']['status_aktif']) pada tabel thead dan tbody.
  • Membungkus pemanggilan script window.print() dengan kondisi @if (!isset($excel)) agar dialog cetak otomatis (print dialog) hanya muncul saat halaman dibuka untuk cetak biasa dan tidak dijalankan saat dirender sebagai file Excel.
  @push('scripts')
+ @if (!isset($excel))
  <script nonce="{{  csp_nonce() }}">
      window.print();
  </script>
+ @endif
  @endpush

✅ Test Cases yang Diimplementasikan

  • Tombol Excel muncul di header halaman Laporan Desa Aktif di samping tombol Cetak.
  • Kolom Kecamatan muncul dengan posisi tepat di sebelah kolom nama desa pada tabel utama DataTables, halaman cetak (/laporan/desa-aktif/cetak), serta pada file Excel yang diunduh.
  • Kolom Status pada DataTables menampilkan badge Aktif (hijau) jika login_terakhir atau perubahan_terakhir berjarak maksimal 7 hari dari waktu sekarang.
  • Kolom Status menampilkan badge Tidak Aktif (merah) jika kedua tanggal (login_terakhir dan perubahan_terakhir) lebih dari 7 hari atau kosong/tidak valid (0000-00-00).
  • Saat menekan tombol Excel, browser mengunduh file laporan-desa-aktif.xls yang berisi tabel data lengkap tanpa memicu pop-up window.print().
  • Parameter pencarian/filter di tabel terkirim dengan benar saat menekan tombol Cetak maupun Excel.

📸 Cara Menjalankan Uji Coba Manual

  1. Jalankan aplikasi web OpenKab di browser dan pastikan sudah login sebagai pengguna dengan hak akses yang sesuai.
  2. Buka menu Laporan > Desa Aktif atau langsung akses URL /laporan/desa-aktif.
  3. Periksa struktur tabel yang tampil:
    • Seharusnya: Terdapat kolom baru yaitu Kecamatan di sebelah kolom Desa, dan kolom Status di posisi paling kanan tabel.
  4. Periksa indikator status desa:
    • Seharusnya: Desa yang memiliki riwayat login admin atau perubahan data ≤ 7 hari lalu bertuliskan Aktif dengan badge warna hijau. Desa lainnya bertuliskan Tidak Aktif dengan badge warna merah.
  5. Uji fitur pencarian DataTables:
    • Ketikkan nama desa atau kecamatan pada kolom pencarian (Search).
  6. Klik tombol Excel (warna hijau):
    • Seharusnya: File laporan-desa-aktif.xls terunduh dan dapat dibuka di aplikasi spreadsheet dengan data yang konsisten sesuai tabel.
  7. Klik tombol Cetak (warna biru):
    • Seharusnya: Tab baru terbuka menampilkan halaman siap cetak dengan kolom Kecamatan dan Status serta memunculkan dialog window.print().

📸 Screenshot atau Video

image

⚠️ Catatan Penting

Perhitungan logika penentuan status Aktif / Tidak Aktif diimplementasikan secara sinkron dan konsisten di dua tempat:

  • Client-side (JavaScript): Pada konfigurasi columnDefs DataTables di index.blade.php agar pemuatan data secara server-side AJAX tetap cepat tanpa membebani transformasi payload di API Proxy.
  • Server-side (PHP/Carbon): Pada method hitungStatusAktif() di LaporanDesaAktifController khusus untuk proses rendering halaman Cetak dan unduhan Export Excel guna memastikan akurasi data laporan yang dicetak atau diunduh.

@github-actions

Copy link
Copy Markdown

🔄 AI PR Review sedang antri di server...

Proses review akan segera dimulai di background — hasil akan muncul sebagai komentar setelah selesai.
Powered by CrewAI · PR #1101

@habibie11
habibie11 requested a review from vickyrolanda July 21, 2026 07:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant