From 5952dd4307f5846f458b9503ecf154b8dc69d316 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Wed, 7 Jan 2026 14:27:11 +0700 Subject: [PATCH 01/53] perbaikan masalah CSP --- resources/views/auth/2fa-challenge.blade.php | 2 +- resources/views/auth/otp-login.blade.php | 2 +- .../data_pokok/data_presisi/ketenagakerjaan/index.blade.php | 2 +- resources/views/data_pokok/data_presisi/laporan/index.blade.php | 2 +- .../views/data_pokok/data_presisi/laporan/perdesa.blade.php | 2 +- resources/views/data_pokok/data_presisi/pangan/index.blade.php | 2 +- .../views/data_pokok/data_presisi/pendidikan/index.blade.php | 2 +- .../views/data_pokok/data_presisi/seni_budaya/index.blade.php | 2 +- resources/views/dtks/papan/index.blade.php | 2 +- resources/views/dtks/sandang/index.blade.php | 2 +- resources/views/emails/otp-mail.blade.php | 2 +- resources/views/lembaga/index.blade.php | 2 +- resources/views/master/artikel/create.blade.php | 2 +- resources/views/master/artikel/edit.blade.php | 2 +- resources/views/peta/lokasi/index.blade.php | 2 +- resources/views/peta/point/form.blade.php | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/resources/views/auth/2fa-challenge.blade.php b/resources/views/auth/2fa-challenge.blade.php index d7fbcfe60..bb051ef6b 100644 --- a/resources/views/auth/2fa-challenge.blade.php +++ b/resources/views/auth/2fa-challenge.blade.php @@ -111,7 +111,7 @@ @stop @section('adminlte_css') - +@endpush + +@section('content') +@include('partials.breadcrumbs') + + + + + + + + + + + + +
KATEGORIJENIS SARANA/PRASARANAKONDISI BAIKKONDISI RUSAKJUMLAHSATUAN
+@stop + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/data_pokok/infrastruktur/data.blade.php b/resources/views/data_pokok/infrastruktur/data.blade.php deleted file mode 100644 index d9c2fbd4f..000000000 --- a/resources/views/data_pokok/infrastruktur/data.blade.php +++ /dev/null @@ -1,44 +0,0 @@ - \ No newline at end of file diff --git a/resources/views/data_pokok/infrastruktur/grafik.blade.php b/resources/views/data_pokok/infrastruktur/grafik.blade.php index bf879c84b..9d686f2c3 100644 --- a/resources/views/data_pokok/infrastruktur/grafik.blade.php +++ b/resources/views/data_pokok/infrastruktur/grafik.blade.php @@ -1,65 +1,87 @@ - \ No newline at end of file diff --git a/resources/views/data_pokok/infrastruktur/index.blade.php b/resources/views/data_pokok/infrastruktur/index.blade.php index a58648c4c..e5fe7ea0e 100644 --- a/resources/views/data_pokok/infrastruktur/index.blade.php +++ b/resources/views/data_pokok/infrastruktur/index.blade.php @@ -5,52 +5,161 @@ @section('title', 'Data Infrastruktur') @section('content_header') -

{{ $title }}

+

{{ $title }}

@stop @section('content') - @include('partials.breadcrumbs') -
-
-
-
Statistik Kondisi Transportasi
-
-
- -
+@include('partials.breadcrumbs') +
+
+
+
Statistik Kondisi Transportasi
+
+
+
-
-
-
Statistik Sanitasi
-
-
- -

+
+
+
+
Statistik Sanitasi
+
+
+
+
-
-
-
-
-
Data Sarana dan Prasarana
+
+
+
+
+
+
Data Sarana dan Prasarana
+
+
+
+ +
+ +
-
-
+
+ + + + + + + + + + + + +
KategoriJenis Sarana/PrasaranaKondisi BaikKondisi RusakJumlahSatuan
+
@endsection -@section('js') -@include('data_pokok.infrastruktur.data') -@include('data_pokok.infrastruktur.pie') +@section('js') @include('data_pokok.infrastruktur.grafik') + @endsection -@include('data_pokok.infrastruktur.style') +@include('data_pokok.infrastruktur.style') \ No newline at end of file diff --git a/resources/views/data_pokok/infrastruktur/pie.blade.php b/resources/views/data_pokok/infrastruktur/pie.blade.php deleted file mode 100644 index 00c89bd46..000000000 --- a/resources/views/data_pokok/infrastruktur/pie.blade.php +++ /dev/null @@ -1,47 +0,0 @@ - \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index e3b3e83dc..fba496022 100644 --- a/routes/web.php +++ b/routes/web.php @@ -212,6 +212,7 @@ Route::middleware(['permission:datapokok-agama-adat-read'])->get('/agama/detail', 'detail_agama')->name('detail_agama'); Route::middleware(['permission:datapokok-agama-adat-read'])->get('/agama/cetak', 'cetak_agama')->name('cetak_agama'); Route::middleware(['permission:datapokok-infrastruktur-read'])->get('/infrastruktur', 'infrastruktur')->name('infrastruktur'); + Route::middleware(['permission:datapokok-infrastruktur-read'])->get('/infrastruktur/cetak', 'cetakInfrastruktur')->name('infrastruktur.cetak'); Route::middleware(['permission:datapokok-sandang-read'])->get('/sandang', 'sandang')->name('datasandang'); Route::middleware(['permission:datapokok-sandang-read'])->get('/sandang/detail', 'detail_sandang')->name('detail_datasandang'); From ce3ea70e9c124bbbbf61eb6c549665df6bad18c1 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:33:13 +0700 Subject: [PATCH 09/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index ec095451e..954e7d587 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -3,6 +3,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu #### Penambahan Fitur 1. [#883](https://github.com/OpenSID/OpenKab/issues/883) Penambahan fitur download untuk data desa. +2. [#884](https://github.com/OpenSID/OpenKab/issues/884) Penambahan fitur download data kecamatan. #### Perbaikan BUG From 62b6ea9f6c7ebbbb57faedc1c92ff3609d10239a Mon Sep 17 00:00:00 2001 From: habibie11 Date: Mon, 12 Jan 2026 12:40:46 +0700 Subject: [PATCH 10/53] fix layout --- config/adminlte.php | 6 +-- public/assets/costume/css/admin.css | 59 ++++++++++++++++++++++---- resources/views/dasbor/index.blade.php | 14 ++++-- 3 files changed, 64 insertions(+), 15 deletions(-) diff --git a/config/adminlte.php b/config/adminlte.php index 9e4c94c3e..116450280 100644 --- a/config/adminlte.php +++ b/config/adminlte.php @@ -313,7 +313,7 @@ ], [ 'icon' => 'fas fa-info-circle fa-lg nav-link', - 'id' => 'catatan-rilis', + 'id' => 'catatan-rilis', 'text' => '', 'url' => '#', 'topnav_right' => true, @@ -347,12 +347,12 @@ ], [ 'text' => 'Dasbor', - 'icon' => 'fas fa-home', + 'icon' => 'nav-icon fas fa-home', 'url' => '/dasbor', ], [ 'text' => 'Dasbor Demografi', - 'icon' => 'fas fa-home', + 'icon' => 'nav-icon fas fa-home', 'url' => '/dasbor-demografi', ], diff --git a/public/assets/costume/css/admin.css b/public/assets/costume/css/admin.css index 6d33c1332..5cb6ce3b9 100644 --- a/public/assets/costume/css/admin.css +++ b/public/assets/costume/css/admin.css @@ -4,8 +4,8 @@ a:hover { color: inherit; } -.unlink a, -.unlink a:hover { +.unlink a, +.unlink a:hover { text-decoration: none; color: inherit; } @@ -36,33 +36,33 @@ tr.shown td.details-control { transition: .5s; } -.img-cover{ +.img-cover { height: 100px; object-fit: cover; } .w-40 { - width: 40%!important; + width: 40% !important; } .w-42 { - width: 42%!important; + width: 42% !important; } .w-80 { - width: 80%!important; + width: 80% !important; } .w-56px { - width: 56px!important; + width: 56px !important; } .w-70px { - width: 70px!important; + width: 70px !important; } .w-100px { - width: 100px!important; + width: 100px !important; } .select2-container .select2-selection--single { @@ -557,10 +557,51 @@ tr.shown td.details-control { .nav-treeview .nav-treeview { padding-left: 5px !important; } + .nav-treeview .nav-item { padding-left: 5px !important; } .has-treeview .has-treeview { padding-left: 5px !important; +} + +/* When sidebar is collapsed - only apply margin on larger screens */ +@media (min-width: 992px) { + + .sidebar-collapse .content-wrapper, + .sidebar-collapse .main-footer, + .sidebar-collapse .main-header { + margin-left: 4.6rem !important; + } +} + +/* Reset margin for mobile when sidebar is collapsed */ +@media (max-width: 991.98px) { + + .sidebar-collapse .content-wrapper, + .sidebar-collapse .main-footer, + .sidebar-collapse .main-header { + margin-left: 0 !important; + } +} + +/* Adjust arrow icon position */ +.nav-sidebar .nav-link>.right, +.nav-sidebar .nav-link>p>.right { + position: absolute; + right: 5px; + top: 50%; + transform: translateY(-50%); + transition: transform 0.3s ease; +} + +/* When menu is open, rotate the arrow */ +.nav-sidebar .menu-open>.nav-link>.right, +.nav-sidebar .menu-open>.nav-link>p>.right { + transform: translateY(-50%) rotate(-90deg); +} + +a .nav-link { + margin-left: -5px; } \ No newline at end of file diff --git a/resources/views/dasbor/index.blade.php b/resources/views/dasbor/index.blade.php index 626d263d8..022818663 100644 --- a/resources/views/dasbor/index.blade.php +++ b/resources/views/dasbor/index.blade.php @@ -13,10 +13,18 @@ @include('dasbor.filter') @include('dasbor.summary')
-
+
{{-- @include('dasbor.statistik_penduduk') --}} - @include('dasbor.peta') - @include('dasbor.tabel_penduduk') +
+
+ @include('dasbor.peta') +
+
+
+
+ @include('dasbor.tabel_penduduk') +
+
@endsection From 1e3dc82460c4984df4d1ae4ab6621b2831e4f234 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:27:24 +0700 Subject: [PATCH 11/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/catatan_rilis.md b/catatan_rilis.md index 954e7d587..7f2dc1247 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -10,4 +10,5 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu #### Perubahan Teknis -1. [#892](https://github.com/OpenSID/OpenKab/issues/892) Perbaikan tag style agar tidak dianggap error ketika csp aktif. \ No newline at end of file +1. [#892](https://github.com/OpenSID/OpenKab/issues/892) Perbaikan tag style agar tidak dianggap error ketika csp aktif. +2. [#886](https://github.com/OpenSID/OpenKab/issues/886) Ubah label cetak menjadi excel pada laporan bulanan. \ No newline at end of file From 65c501fbcd0eb0885901aadabda58259787771bb Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:42:34 +0700 Subject: [PATCH 12/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index 7f2dc1247..5b1286f28 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -4,6 +4,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 1. [#883](https://github.com/OpenSID/OpenKab/issues/883) Penambahan fitur download untuk data desa. 2. [#884](https://github.com/OpenSID/OpenKab/issues/884) Penambahan fitur download data kecamatan. +3. [#885](https://github.com/OpenSID/OpenKab/issues/885) Penambahan fungsi ekspor excel pada data daftar data keluarga. #### Perbaikan BUG From 515b060b468c73878f0373cf6adc8f61d69eb48c Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Mon, 12 Jan 2026 14:03:56 +0700 Subject: [PATCH 13/53] Menambahkan tombol cetak dan filter tahun --- app/Http/Controllers/DataPokokController.php | 5 + .../filter-kategori-wisata.blade.php | 7 + .../filter-komoditas-wisata.blade.php | 8 + .../components/filter-sarana-wisata.blade.php | 8 + .../data_pokok/pariwisata/cetak.blade.php | 61 +++ .../data_pokok/pariwisata/chart.blade.php | 43 ++- .../data_pokok/pariwisata/index.blade.php | 359 ++++++++++-------- routes/web.php | 1 + 8 files changed, 319 insertions(+), 173 deletions(-) create mode 100644 resources/views/components/filter-kategori-wisata.blade.php create mode 100644 resources/views/components/filter-komoditas-wisata.blade.php create mode 100644 resources/views/components/filter-sarana-wisata.blade.php create mode 100644 resources/views/data_pokok/pariwisata/cetak.blade.php diff --git a/app/Http/Controllers/DataPokokController.php b/app/Http/Controllers/DataPokokController.php index 693cfbae7..3c814c3fa 100644 --- a/app/Http/Controllers/DataPokokController.php +++ b/app/Http/Controllers/DataPokokController.php @@ -63,6 +63,11 @@ public function pariwisata() return view('data_pokok.pariwisata.index', ['title' => $title]); } + public function cetakPariwisata(Request $request) + { + return view('data_pokok.pariwisata.cetak', ['filter' => $request->getQueryString()]); + } + public function pendidikan() { return view('data_pokok.pendidikan.index'); diff --git a/resources/views/components/filter-kategori-wisata.blade.php b/resources/views/components/filter-kategori-wisata.blade.php new file mode 100644 index 000000000..9e65a0226 --- /dev/null +++ b/resources/views/components/filter-kategori-wisata.blade.php @@ -0,0 +1,7 @@ +
+ +
\ No newline at end of file diff --git a/resources/views/components/filter-komoditas-wisata.blade.php b/resources/views/components/filter-komoditas-wisata.blade.php new file mode 100644 index 000000000..b45e88ca8 --- /dev/null +++ b/resources/views/components/filter-komoditas-wisata.blade.php @@ -0,0 +1,8 @@ +
+ +
\ No newline at end of file diff --git a/resources/views/components/filter-sarana-wisata.blade.php b/resources/views/components/filter-sarana-wisata.blade.php new file mode 100644 index 000000000..a7148318b --- /dev/null +++ b/resources/views/components/filter-sarana-wisata.blade.php @@ -0,0 +1,8 @@ +
+ +
\ No newline at end of file diff --git a/resources/views/data_pokok/pariwisata/cetak.blade.php b/resources/views/data_pokok/pariwisata/cetak.blade.php new file mode 100644 index 000000000..88d4c0b8a --- /dev/null +++ b/resources/views/data_pokok/pariwisata/cetak.blade.php @@ -0,0 +1,61 @@ +@extends('layouts.cetak.index') + +@section('title', 'Data pariwisata') + +@push('css') + +@endpush + +@section('content') +@include('partials.breadcrumbs') + + + + + + + + + + + + + +
{{ config('app.sebutanDesa') }}Jenis HiburanJumlah PenginapanLokasi/Tempat/Area WisataKeberadaanLuas (Ha)Tingkat Pemanfaatan
+@stop + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/data_pokok/pariwisata/chart.blade.php b/resources/views/data_pokok/pariwisata/chart.blade.php index d819f0524..58df6826a 100644 --- a/resources/views/data_pokok/pariwisata/chart.blade.php +++ b/resources/views/data_pokok/pariwisata/chart.blade.php @@ -1,4 +1,18 @@ + + $('#filter-sarana-wisata-container').hide(); + $('#filter-komoditas-wisata-container').hide(); + + }) + @endsection diff --git a/routes/web.php b/routes/web.php index fba496022..375ea5211 100644 --- a/routes/web.php +++ b/routes/web.php @@ -203,6 +203,7 @@ Route::middleware(['permission:datapokok-pendidikan-read'])->get('/pendidikan', 'pendidikan')->name('pendidikan'); Route::middleware(['permission:datapokok-pendidikan-read'])->get('/pendidikan/cetak', 'cetakPendidikan')->name('pendidikan.cetak'); Route::middleware(['permission:datapokok-pariwisata-read'])->get('/pariwisata', 'pariwisata')->name('pariwisata'); + Route::middleware(['permission:datapokok-pariwisata-read'])->get('/pariwisata/cetak', 'cetakPariwisata')->name('pariwisata.cetak'); Route::middleware(['permission:datapokok-jaminan-sosial-read'])->get('/jaminan-sosial', 'jaminanSosial')->name('jaminan-sosial'); Route::middleware(['permission:datapokok-jaminan-sosial-read'])->get('/jaminan-sosial/detail', 'detailJaminanSosial')->name('jaminan-sosial-detail'); Route::middleware(['permission:datapokok-jaminan-sosial-read'])->get('/jaminan-sosial/cetak', 'cetakJaminanSosial')->name('jaminan-sosial-cetak'); From 2d63c0c2900261076b112d4ca07742bbc35107e2 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:07:55 +0700 Subject: [PATCH 14/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index 5b1286f28..1205d6222 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -8,6 +8,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu #### Perbaikan BUG +1. [#893](https://github.com/OpenSID/OpenKab/issues/893) Perbaiki UI Layout dashboard dan sidebar. #### Perubahan Teknis From 870b4b13b36b381fccc0d7eb9433daf78c8c13e1 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 12 Jan 2026 16:05:12 +0700 Subject: [PATCH 15/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index 1205d6222..b85b0312c 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -5,6 +5,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 1. [#883](https://github.com/OpenSID/OpenKab/issues/883) Penambahan fitur download untuk data desa. 2. [#884](https://github.com/OpenSID/OpenKab/issues/884) Penambahan fitur download data kecamatan. 3. [#885](https://github.com/OpenSID/OpenKab/issues/885) Penambahan fungsi ekspor excel pada data daftar data keluarga. +4. [#896](https://github.com/OpenSID/OpenKab/issues/896) Penambahan fungsi cetak pada data presisi infrastruktur. #### Perbaikan BUG From 76456dc3ff588228bfa0c7a8cf6407159b2b053c Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 12 Jan 2026 18:22:54 +0700 Subject: [PATCH 16/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index b85b0312c..72f31e9ac 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -6,6 +6,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 2. [#884](https://github.com/OpenSID/OpenKab/issues/884) Penambahan fitur download data kecamatan. 3. [#885](https://github.com/OpenSID/OpenKab/issues/885) Penambahan fungsi ekspor excel pada data daftar data keluarga. 4. [#896](https://github.com/OpenSID/OpenKab/issues/896) Penambahan fungsi cetak pada data presisi infrastruktur. +5. [#897](https://github.com/OpenSID/OpenKab/issues/897) Penambahan fungsi cetak pada data presisi pariwisata. #### Perbaikan BUG From de3709bf9b28bf08147a47e0e0e4d31d8867c3fc Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Tue, 13 Jan 2026 16:49:23 +0700 Subject: [PATCH 17/53] Menambahkan tombol export --- .../views/components/print-button.blade.php | 7 +- .../data_presisi/pangan/cetak.blade.php | 24 +- .../data_presisi/pangan/index.blade.php | 334 ++++++++---------- 3 files changed, 174 insertions(+), 191 deletions(-) diff --git a/resources/views/components/print-button.blade.php b/resources/views/components/print-button.blade.php index 8508118c9..fb3c72fd0 100644 --- a/resources/views/components/print-button.blade.php +++ b/resources/views/components/print-button.blade.php @@ -30,6 +30,9 @@ e.preventDefault(); const printUrl = new URL(this.dataset.printUrl); + printUrl.searchParams.set("kode_kabupaten", "{{ session('kabupaten.kode_kabupaten') ?? '' }}"); + printUrl.searchParams.set("kode_kecamatan", "{{ session('kecamatan.kode_kecamatan') ?? '' }}"); + printUrl.searchParams.set("kode_desa", "{{ session('desa.id') ?? '' }}"); const tableId = this.dataset.tableId; const filters = JSON.parse(this.dataset.filters || '{}'); const additionalParams = JSON.parse(this.dataset.additionalParams || '{}'); @@ -48,6 +51,7 @@ // Get filters/search from DataTable's ajax.params if (typeof dataTable.ajax.params === 'function') { const params = dataTable.ajax.params(); + Object.entries(params).forEach(([key, value]) => { if (value && value !== '' && value !== 'null') { printUrl.searchParams.append(key, value); @@ -59,8 +63,7 @@ // Add additional static parameters Object.entries(additionalParams).forEach(([key, value]) => { printUrl.searchParams.append(key, value); - }); - + }); // Open print URL in new window window.open(printUrl.href, '_blank'); }); diff --git a/resources/views/data_pokok/data_presisi/pangan/cetak.blade.php b/resources/views/data_pokok/data_presisi/pangan/cetak.blade.php index 0ab97e23a..d50bb895c 100644 --- a/resources/views/data_pokok/data_presisi/pangan/cetak.blade.php +++ b/resources/views/data_pokok/data_presisi/pangan/cetak.blade.php @@ -12,13 +12,13 @@ @section('content') @include('partials.breadcrumbs') - +
- - + + @@ -35,7 +35,7 @@ - + @@ -46,10 +46,11 @@ -@endsection + } + // Event listener for year filter change + $('#filter-tahun').on('change', function() { + dtks.ajax.reload(); + data_grafik = []; + grafikPie(); + }); + }) + +@endsection \ No newline at end of file From 6765669bbdd6118037f5ec25b22c52bebc5580da Mon Sep 17 00:00:00 2001 From: habibie11 Date: Tue, 13 Jan 2026 18:47:02 +0700 Subject: [PATCH 18/53] penambahan eksport dan cetak --- app/Http/Controllers/BantuanController.php | 7 + .../views/bantuan/cetak-peserta.blade.php | 71 +++++++ resources/views/bantuan/show.blade.php | 189 +++++++++--------- routes/web.php | 51 ++--- 4 files changed, 201 insertions(+), 117 deletions(-) create mode 100644 resources/views/bantuan/cetak-peserta.blade.php diff --git a/app/Http/Controllers/BantuanController.php b/app/Http/Controllers/BantuanController.php index 2f6410e76..40a10d750 100644 --- a/app/Http/Controllers/BantuanController.php +++ b/app/Http/Controllers/BantuanController.php @@ -22,4 +22,11 @@ public function cetak(Request $request) return view('bantuan.cetak', compact('filter')); } + + public function cetakPeserta(Request $request, $id) + { + $filter = array_filter($request->all()); + + return view('bantuan.cetak-peserta', compact('id', 'filter')); + } } diff --git a/resources/views/bantuan/cetak-peserta.blade.php b/resources/views/bantuan/cetak-peserta.blade.php new file mode 100644 index 000000000..b76619b02 --- /dev/null +++ b/resources/views/bantuan/cetak-peserta.blade.php @@ -0,0 +1,71 @@ +@extends('layouts.cetak.index') + +@section('title', 'Data Peserta Bantuan') + +@push('css') + +@endpush + +@section('content') +@include('partials.breadcrumbs') +
NO NIKNOMOR KKNAMANAMA KEPALA KELUARGAJUMLAH ANGGOTA RTM JENIS LAHAN LUAS LAHAN LUAS TANAMFREKWENSI KONSUMSI BUAH PERHARI FREKWENSI KONSUMSI DAGING PERHARI TANGGAL PENGISIANSTATUS PENGISIANSTATUS PENGISIAN
+ + + + + + + + + + + + + + + +
NoNIKNo. KKNama PendudukNo. Kartu PesertaTempat LahirTanggal LahirJenis KelaminAlamatKeterangan
+@stop + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/bantuan/show.blade.php b/resources/views/bantuan/show.blade.php index 02b3b774c..7d49dd5f2 100644 --- a/resources/views/bantuan/show.blade.php +++ b/resources/views/bantuan/show.blade.php @@ -5,7 +5,7 @@ @section('title', 'Data Peserta Bantuan') @section('content_header') -

Data Peserta Bantuan

+

Data Peserta Bantuan

@stop @section('content') @@ -16,6 +16,10 @@
Rincian Program
@@ -49,90 +53,91 @@ @endsection @section('js') - -@endsection +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 375ea5211..788511842 100644 --- a/routes/web.php +++ b/routes/web.php @@ -82,7 +82,7 @@ }); Route::resource('activities', RiwayatPenggunaController::class)->only(['index', 'show'])->middleware('easyauthorize:pengaturan-activities'); Route::resource('settings', App\Http\Controllers\SettingController::class)->except(['show', 'create', 'delete'])->middleware('easyauthorize:pengaturan-settings'); - + // OTP & 2FA Routes - combined into one page Route::prefix('otp')->group(function () { Route::get('/', [App\Http\Controllers\OtpController::class, 'index'])->name('otp.index'); @@ -90,21 +90,21 @@ Route::post('/setup', [App\Http\Controllers\OtpController::class, 'setup'])->name('otp.setup'); Route::post('/verify-activation', [App\Http\Controllers\OtpController::class, 'verifyActivation'])->name('otp.verify-activation'); Route::post('/resend', [App\Http\Controllers\OtpController::class, 'resend'])->name('otp.resend'); - Route::post('/disable', [App\Http\Controllers\OtpController::class, 'disable'])->name('otp.disable'); + Route::post('/disable', [App\Http\Controllers\OtpController::class, 'disable'])->name('otp.disable'); }); - + // 2FA Routes - for API calls from the combined page Route::prefix('2fa')->group(function () { - Route::get('/', function() { + Route::get('/', function () { return redirect()->route('otp.index'); })->name('2fa.index'); Route::get('/activate', [App\Http\Controllers\TwoFactorController::class, 'activate'])->name('2fa.activate'); - Route::post('/enable', [App\Http\Controllers\TwoFactorController::class, 'enable'])->name('2fa.enable'); + Route::post('/enable', [App\Http\Controllers\TwoFactorController::class, 'enable'])->name('2fa.enable'); Route::post('/verify', [App\Http\Controllers\TwoFactorController::class, 'verifyEnable'])->name('2fa.verify'); Route::post('/disable', [App\Http\Controllers\TwoFactorController::class, 'disable'])->name('2fa.disable'); Route::post('/resend', [App\Http\Controllers\TwoFactorController::class, 'resend'])->name('2fa.resend'); }); - }); + }); Route::prefix('cms')->group(function () { Route::resource('categories', App\Http\Controllers\CMS\CategoryController::class)->except(['show'])->middleware('easyauthorize:website-categories'); @@ -184,6 +184,7 @@ ->group(function () { Route::get('/', 'index')->name('bantuan'); Route::get('/cetak', 'cetak'); + Route::get('/detail/{id}/cetak', 'cetakPeserta')->name('bantuan.detail.cetak'); Route::get('/detail/{id}', 'show')->name('bantuan.detail'); }); @@ -213,7 +214,7 @@ Route::middleware(['permission:datapokok-agama-adat-read'])->get('/agama/detail', 'detail_agama')->name('detail_agama'); Route::middleware(['permission:datapokok-agama-adat-read'])->get('/agama/cetak', 'cetak_agama')->name('cetak_agama'); Route::middleware(['permission:datapokok-infrastruktur-read'])->get('/infrastruktur', 'infrastruktur')->name('infrastruktur'); - Route::middleware(['permission:datapokok-infrastruktur-read'])->get('/infrastruktur/cetak', 'cetakInfrastruktur')->name('infrastruktur.cetak'); + Route::middleware(['permission:datapokok-infrastruktur-read'])->get('/infrastruktur/cetak', 'cetakInfrastruktur')->name('infrastruktur.cetak'); Route::middleware(['permission:datapokok-sandang-read'])->get('/sandang', 'sandang')->name('datasandang'); Route::middleware(['permission:datapokok-sandang-read'])->get('/sandang/detail', 'detail_sandang')->name('detail_datasandang'); @@ -237,9 +238,9 @@ // Data > Kependudukan > Laporan Bulanan Route::controller(LaporanBulananController::class) - ->middleware(['permission:statistik-laporan-bulanan-read']) - ->prefix('laporan-bulanan') - ->group(function () { + ->middleware(['permission:statistik-laporan-bulanan-read']) + ->prefix('laporan-bulanan') + ->group(function () { Route::get('/', 'index')->name('laporan-bulanan.index'); Route::post('/filter', 'filter')->name('laporan-bulanan.filter'); Route::get('/detail-penduduk/{rincian}/{tipe}', 'detailPenduduk')->name('laporan-bulanan.detail-penduduk'); @@ -279,64 +280,64 @@ Route::prefix('laporan')->group(function () { Route::get('/', [App\Http\Controllers\DataPresisiLaporanController::class, 'index'])->name('laporan.data-presisi.index'); Route::get('cetak', [App\Http\Controllers\DataPresisiLaporanController::class, 'cetak'])->name('laporan.data-presisi.cetak'); - Route::get('/perdesa', [App\Http\Controllers\DataPresisiLaporanController::class, 'perdesa'])->name('laporan.data-presisi.perdesa'); - Route::get('/cetak-perdesa', [App\Http\Controllers\DataPresisiLaporanController::class, 'cetakPerdesa'])->name('laporan.data-presisi.cetak-perdesa'); + Route::get('/perdesa', [App\Http\Controllers\DataPresisiLaporanController::class, 'perdesa'])->name('laporan.data-presisi.perdesa'); + Route::get('/cetak-perdesa', [App\Http\Controllers\DataPresisiLaporanController::class, 'cetakPerdesa'])->name('laporan.data-presisi.cetak-perdesa'); }) - ->middleware(['permission:datapresisi-laporan-read']); + ->middleware(['permission:datapresisi-laporan-read']); Route::prefix('kesehatan')->group(function () { Route::get('/', [App\Http\Controllers\DataPresisiKesehatanController::class, 'index'])->name('data-pokok.data-presisi.index'); Route::get('/detail', [App\Http\Controllers\DataPresisiKesehatanController::class, 'detail'])->name('data-pokok.data-presisi.detail'); Route::get('cetak', [App\Http\Controllers\DataPresisiKesehatanController::class, 'cetak'])->name('data-pokok.data-presisi.cetak'); }) - ->middleware(['permission:datapresisi-kesehatan-read']); + ->middleware(['permission:datapresisi-kesehatan-read']); Route::prefix('seni-budaya')->group(function () { Route::get('/', [App\Http\Controllers\DataPresisiSeniBudayaController::class, 'index'])->name('data-pokok.data-presisi-seni-budaya.index'); Route::get('/detail', [App\Http\Controllers\DataPresisiSeniBudayaController::class, 'detail'])->name('data-pokok.data-presisi-seni-budaya.detail'); Route::get('cetak', [App\Http\Controllers\DataPresisiSeniBudayaController::class, 'cetak'])->name('data-pokok.data-presisi-seni-budaya.cetak'); }) - ->middleware(['permission:datapresisi-seni-budaya-read']); + ->middleware(['permission:datapresisi-seni-budaya-read']); Route::prefix('ketenagakerjaan')->group(function () { Route::get('/', [App\Http\Controllers\DataPresisiKetenagakerjaanController::class, 'index'])->name('data-pokok.data-presisi-ketenagakerjaan.index'); Route::get('/detail', [App\Http\Controllers\DataPresisiKetenagakerjaanController::class, 'detail'])->name('data-pokok.data-presisi-ketenagakerjaan.detail'); Route::get('cetak', [App\Http\Controllers\DataPresisiKetenagakerjaanController::class, 'cetak'])->name('data-pokok.data-presisi-ketenagakerjaan.cetak'); }) - ->middleware(['permission:datapresisi-ketenagakerjaan-read']); + ->middleware(['permission:datapresisi-ketenagakerjaan-read']); Route::prefix('pendidikan')->group(function () { Route::get('/', [App\Http\Controllers\DataPresisiPendidikanController::class, 'index'])->name('data-pokok.data-presisi-pendidikan.index'); Route::get('/detail', [App\Http\Controllers\DataPresisiPendidikanController::class, 'detail'])->name('data-pokok.data-presisi-pendidikan.detail'); Route::get('cetak', [App\Http\Controllers\DataPresisiPendidikanController::class, 'cetak'])->name('data-pokok.data-presisi-pendidikan.cetak'); }) - ->middleware(['permission:datapresisi-pendidikan-read']); + ->middleware(['permission:datapresisi-pendidikan-read']); Route::prefix('pangan')->group(function () { Route::get('/', [App\Http\Controllers\DataPresisiPanganController::class, 'index'])->name('data-pokok.data-presisi-pangan.index'); Route::get('/detail', [App\Http\Controllers\DataPresisiPanganController::class, 'detail'])->name('data-pokok.data-presisi-pangan.detail'); Route::get('cetak', [App\Http\Controllers\DataPresisiPanganController::class, 'cetak'])->name('data-pokok.data-presisi-pangan.cetak'); }) - ->middleware(['permission:datapresisi-pangan-read']); + ->middleware(['permission:datapresisi-pangan-read']); Route::prefix('adat')->group(function () { Route::get('/', [App\Http\Controllers\DataPresisiAdatController::class, 'index'])->name('data-pokok.data-presisi-adat.index'); Route::get('/detail', [App\Http\Controllers\DataPresisiAdatController::class, 'detail'])->name('data-pokok.data-presisi-adat.detail'); Route::get('cetak', [App\Http\Controllers\DataPresisiAdatController::class, 'cetak'])->name('data-pokok.data-presisi-adat.cetak'); }) - ->middleware(['permission:datapresisi-adat-read']); + ->middleware(['permission:datapresisi-adat-read']); - Route::prefix('statistik')->group(function () { + Route::prefix('statistik')->group(function () { Route::get('adat', [App\Http\Controllers\StatistikAdatController::class, 'index']); Route::get('kesehatan', [App\Http\Controllers\StatistikKesehatanController::class, 'index']); Route::get('jaminan-sosial', [App\Http\Controllers\StatistikJaminanSosialController::class, 'index']); Route::get('aktivitas-keagamaan', [App\Http\Controllers\StatistikAktivitasKeagamaanController::class, 'index']); Route::get('ketenagakerjaan', [App\Http\Controllers\StatistikKetenagakerjaanController::class, 'index']); - Route::get('pendidikan', [App\Http\Controllers\StatistikPendidikanController::class, 'index']); - Route::get('sandang', [App\Http\Controllers\StatistikSandangController::class, 'index']); - Route::get('papan', [App\Http\Controllers\StatistikPapanController::class, 'index']); - Route::get('senibudaya', [App\Http\Controllers\StatistikSenibudayaController::class, 'index']); - Route::get('pangan', [App\Http\Controllers\StatistikPanganController::class, 'index']); + Route::get('pendidikan', [App\Http\Controllers\StatistikPendidikanController::class, 'index']); + Route::get('sandang', [App\Http\Controllers\StatistikSandangController::class, 'index']); + Route::get('papan', [App\Http\Controllers\StatistikPapanController::class, 'index']); + Route::get('senibudaya', [App\Http\Controllers\StatistikSenibudayaController::class, 'index']); + Route::get('pangan', [App\Http\Controllers\StatistikPanganController::class, 'index']); }); }); From bd7aa347de927506d9d86b62f3d636225c3a2bbf Mon Sep 17 00:00:00 2001 From: habibie11 Date: Tue, 13 Jan 2026 18:54:21 +0700 Subject: [PATCH 19/53] test --- tests/Feature/BantuanControllerTest.php | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 tests/Feature/BantuanControllerTest.php diff --git a/tests/Feature/BantuanControllerTest.php b/tests/Feature/BantuanControllerTest.php new file mode 100644 index 000000000..b685c8061 --- /dev/null +++ b/tests/Feature/BantuanControllerTest.php @@ -0,0 +1,63 @@ +get(route('bantuan')); + + $response->assertStatus(200); + $response->assertViewIs('bantuan.index'); + } + + /** @test */ + public function it_can_access_bantuan_detail() + { + $response = $this->get(route('bantuan.detail', ['id' => 1])); + + $response->assertStatus(200); + $response->assertViewIs('bantuan.show'); + $response->assertViewHas('id', '1'); + } + + /** @test */ + public function it_can_access_bantuan_cetak() + { + $response = $this->get('/bantuan/cetak'); + + $response->assertStatus(200); + $response->assertViewIs('bantuan.cetak'); + $response->assertViewHas('filter'); + } + + /** @test */ + public function it_can_access_bantuan_detail_cetak_peserta() + { + $response = $this->get(route('bantuan.detail.cetak', ['id' => 1])); + + $response->assertStatus(200); + $response->assertViewIs('bantuan.cetak-peserta'); + $response->assertViewHas('id', '1'); + $response->assertViewHas('filter'); + } + + /** @test */ + public function it_passes_filter_params_to_cetak_peserta() + { + $response = $this->get(route('bantuan.detail.cetak', ['id' => 1]) . '?search=test'); + + $response->assertStatus(200); + $response->assertViewIs('bantuan.cetak-peserta'); + $response->assertViewHas('filter', function ($filter) { + return isset($filter['search']) && $filter['search'] === 'test'; + }); + } +} From fd407ba0e6e397681a605c5d6f06c8da7d06254d Mon Sep 17 00:00:00 2001 From: habibie11 Date: Tue, 13 Jan 2026 20:31:57 +0700 Subject: [PATCH 20/53] add download excell --- .../data_presisi/pendidikan/index.blade.php | 27 ++++--------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/resources/views/data_pokok/data_presisi/pendidikan/index.blade.php b/resources/views/data_pokok/data_presisi/pendidikan/index.blade.php index abbf3286c..b623bc6ff 100644 --- a/resources/views/data_pokok/data_presisi/pendidikan/index.blade.php +++ b/resources/views/data_pokok/data_presisi/pendidikan/index.blade.php @@ -28,22 +28,11 @@
-
- -
-
- + +
+
+
@@ -228,12 +217,6 @@ function format(data) { grafikPie(); }); - $('#cetak').on('click', function() { - let baseUrl = "{{ route('data-pokok.data-presisi-pendidikan.cetak') }}"; - let params = dtks.ajax.params(); // Get DataTables params - let queryString = new URLSearchParams(params).toString(); // Convert params to query string - window.open(`${baseUrl}?${queryString}`, '_blank'); // Open the URL with appended query - }); - }) + }); @endsection \ No newline at end of file From f58707eac94591227948d01a4443703b39447b96 Mon Sep 17 00:00:00 2001 From: habibie11 Date: Tue, 13 Jan 2026 20:34:58 +0700 Subject: [PATCH 21/53] test --- .../Feature/DataPresisiExcelDownloadTest.php | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 tests/Feature/DataPresisiExcelDownloadTest.php diff --git a/tests/Feature/DataPresisiExcelDownloadTest.php b/tests/Feature/DataPresisiExcelDownloadTest.php new file mode 100644 index 000000000..c434db899 --- /dev/null +++ b/tests/Feature/DataPresisiExcelDownloadTest.php @@ -0,0 +1,125 @@ + [ + 'table_id' => 'table-pangan', + 'download_url' => '/api/v1/data-presisi/pangan/rtm/download', + 'filename' => 'data_presisi_pangan', + ], + '/data-presisi/pendidikan' => [ + 'table_id' => 'table-pendidikan', + 'download_url' => '/api/v1/data-presisi/pendidikan/rtm/download', + 'filename' => 'data_presisi_pendidikan', + ], + ]; + + /** @test */ + public function test_excel_download_button_exists_in_pangan_page() + { + $response = $this->get('/data-presisi/pangan'); + + if ($response->status() === 200) { + $content = $response->getContent(); + + // Test komponen x-excel-download-button ada di halaman + $this->assertStringContainsString('excel-download-button', $content); + $this->assertStringContainsString('table-pangan', $content); + $this->assertStringContainsString('/api/v1/data-presisi/pangan/rtm/download', $content); + $this->assertStringContainsString('data_presisi_pangan', $content); + } else { + $this->markTestSkipped('Page /data-presisi/pangan not accessible (status: ' . $response->status() . ')'); + } + } + + /** @test */ + public function test_excel_download_button_exists_in_pendidikan_page() + { + $response = $this->get('/data-presisi/pendidikan'); + + if ($response->status() === 200) { + $content = $response->getContent(); + + // Test komponen x-excel-download-button ada di halaman + $this->assertStringContainsString('excel-download-button', $content); + $this->assertStringContainsString('table-pendidikan', $content); + $this->assertStringContainsString('/api/v1/data-presisi/pendidikan/rtm/download', $content); + $this->assertStringContainsString('data_presisi_pendidikan', $content); + } else { + $this->markTestSkipped('Page /data-presisi/pendidikan not accessible (status: ' . $response->status() . ')'); + } + } + + /** @test */ + public function test_excel_download_button_component_renders_correctly() + { + $successCount = 0; + + foreach ($this->modulesWithExcelDownload as $module => $config) { + $response = $this->get($module); + + if ($response->status() === 200) { + $content = $response->getContent(); + + // Check that excel download button contains necessary elements + $hasDownloadUrl = strpos($content, $config['download_url']) !== false; + $hasTableId = strpos($content, $config['table_id']) !== false; + $hasFilename = strpos($content, $config['filename']) !== false; + + if ($hasDownloadUrl && $hasTableId && $hasFilename) { + $successCount++; + } + } + } + + $this->assertGreaterThan( + 0, + $successCount, + 'Minimal 1 modul memiliki Excel download button yang lengkap' + ); + } + + /** @test */ + public function test_pangan_and_pendidikan_have_matching_excel_button_structure() + { + $panganResponse = $this->get('/data-presisi/pangan'); + $pendidikanResponse = $this->get('/data-presisi/pendidikan'); + + if ($panganResponse->status() !== 200 || $pendidikanResponse->status() !== 200) { + $this->markTestSkipped('Pages not accessible'); + return; + } + + $panganContent = $panganResponse->getContent(); + $pendidikanContent = $pendidikanResponse->getContent(); + + // Both should have x-excel-download-button component + $panganHasButton = strpos($panganContent, 'excel-download-button') !== false; + $pendidikanHasButton = strpos($pendidikanContent, 'excel-download-button') !== false; + + $this->assertTrue($panganHasButton, 'Pangan page should have excel download button'); + $this->assertTrue($pendidikanHasButton, 'Pendidikan page should have excel download button'); + + // Both should have filter-tahun component + $panganHasFilter = strpos($panganContent, 'filter-tahun') !== false; + $pendidikanHasFilter = strpos($pendidikanContent, 'filter-tahun') !== false; + + $this->assertTrue($panganHasFilter, 'Pangan page should have filter tahun'); + $this->assertTrue($pendidikanHasFilter, 'Pendidikan page should have filter tahun'); + + // Both should have print-button component + $panganHasPrint = strpos($panganContent, 'print-button') !== false; + $pendidikanHasPrint = strpos($pendidikanContent, 'print-button') !== false; + + $this->assertTrue($panganHasPrint, 'Pangan page should have print button'); + $this->assertTrue($pendidikanHasPrint, 'Pendidikan page should have print button'); + } +} From 535a1e077d92e8fed9e8989c536d45de03859053 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Wed, 14 Jan 2026 07:40:19 +0700 Subject: [PATCH 22/53] Tambahkan expor excel pada data presisi sandang --- .../excel-download-button.blade.php | 4 +- resources/views/dtks/sandang/cetak.blade.php | 10 +- resources/views/dtks/sandang/index.blade.php | 353 ++++++++---------- 3 files changed, 169 insertions(+), 198 deletions(-) diff --git a/resources/views/components/excel-download-button.blade.php b/resources/views/components/excel-download-button.blade.php index 85ec96e5b..a298c75bd 100644 --- a/resources/views/components/excel-download-button.blade.php +++ b/resources/views/components/excel-download-button.blade.php @@ -69,7 +69,9 @@ // Prepare download URL const url = new URL(downloadUrl); - + url.searchParams.set("kode_kabupaten", "{{ session('kabupaten.kode_kabupaten') ?? '' }}"); + url.searchParams.set("kode_kecamatan", "{{ session('kecamatan.kode_kecamatan') ?? '' }}"); + url.searchParams.set("kode_desa", "{{ session('desa.id') ?? '' }}"); let urlParams = new URLSearchParams(); if (tableId) { diff --git a/resources/views/dtks/sandang/cetak.blade.php b/resources/views/dtks/sandang/cetak.blade.php index 472cab18f..9381a1e55 100644 --- a/resources/views/dtks/sandang/cetak.blade.php +++ b/resources/views/dtks/sandang/cetak.blade.php @@ -41,7 +41,7 @@ const header = @include('layouts.components.header_bearer_api_gabungan'); $.ajax({ - url: `{{ config('app.databaseGabunganUrl').'/api/v1/data-presisi/sandang' }}?${filter}`, + url: `{{ config('app.databaseGabunganUrl').'/api/v1/data-presisi/sandang/rtm' }}?${filter}`, headers: header, method: 'get', success: function(json) { @@ -52,8 +52,8 @@ ${no} ${item.attributes.nik || 'N/A'} - ${item.attributes.no_kk || 'N/A'} - ${item.attributes.nama || 'N/A'} + ${item.attributes.kepala_keluarga || 'N/A'} + ${item.attributes.jumlah_anggota || 'N/A'} ${item.attributes.jml_pakaian_yg_dimiliki || 'N/A'} ${item.attributes.frekwensi_beli_pakaian_pertahun || 'N/A'} ${item.attributes.jenis_pakaian || 'N/A'} @@ -61,9 +61,7 @@ ${item.attributes.tmpt_cuci_pakaian || 'N/A'} ${item.attributes.jml_pakaian_seragam || 'N/A'} ${item.attributes.jml_pakaian_sembahyang || 'N/A'} - ${item.attributes.jml_pakaian_kerja || 'N/A'} - ${item.attributes.tanggal_pengisian || 'N/A'} - ${item.attributes.status_pengisian || 'N/A'} + ${item.attributes.jml_pakaian_kerja || 'N/A'} ` diff --git a/resources/views/dtks/sandang/index.blade.php b/resources/views/dtks/sandang/index.blade.php index fd805b415..6ad7372f8 100644 --- a/resources/views/dtks/sandang/index.blade.php +++ b/resources/views/dtks/sandang/index.blade.php @@ -3,211 +3,182 @@ @section('title', $title) @section('content_header') -

{{ $title }}

+

{{ $title }}

@stop @push('css') - + @endpush @section('content') - @include('partials.breadcrumbs') -
-
-
-
-
- -
+@include('partials.breadcrumbs') +
+
+
+
+
+
-
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
- - - - - - - - - - - - - -
Aksi#NIKNama Kepala KeluargaJumlah Anggota RTMJumlah Pakaian dimilikiFrekwensi Beli Pakaian
-
+
+
+
+ + + + + + + + + + + + + +
Aksi#NIKNama Kepala KeluargaJumlah Anggota RTMJumlah Pakaian dimilikiFrekwensi Beli Pakaian
+
@endsection @section('js') - @include('dtks.sandang.chart') - -@endsection + $('#filter-tahun').on('change', function() { + dtks.ajax.reload(); + data_grafik = []; + grafikPie(); + }); + + $('#cetak').on('click', function() { + let baseUrl = "{{ route('cetak_datasandang') }}"; + let params = dtks.ajax.params(); // Get DataTables params + let queryString = new URLSearchParams(params).toString(); // Convert params to query string + window.open(`${baseUrl}?${queryString}`, '_blank'); // Open the URL with appended query + }); + + }) + +@endsection \ No newline at end of file From c907577d50ef4b5d00709ca8082b2f7bcd8ea2d8 Mon Sep 17 00:00:00 2001 From: habibie11 Date: Wed, 14 Jan 2026 10:38:58 +0700 Subject: [PATCH 23/53] tombol export excel seni budaya --- .../data_presisi/seni_budaya/index.blade.php | 31 +++++-------------- 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/resources/views/data_pokok/data_presisi/seni_budaya/index.blade.php b/resources/views/data_pokok/data_presisi/seni_budaya/index.blade.php index d3e8401a8..be4037a5c 100644 --- a/resources/views/data_pokok/data_presisi/seni_budaya/index.blade.php +++ b/resources/views/data_pokok/data_presisi/seni_budaya/index.blade.php @@ -28,27 +28,17 @@
-
- -
-
- + +
+
+ +
- +
@@ -80,7 +70,7 @@ url.searchParams.set("kode_kecamatan", "{{ session('kecamatan.kode_kecamatan') ?? '' }}"); url.searchParams.set("kode_desa", "{{ session('desa.id') ?? '' }}"); - var dtks = $('#table-kesehatan').DataTable({ + var dtks = $('#table-seni-budaya').DataTable({ processing: true, serverSide: true, autoWidth: false, @@ -225,13 +215,6 @@ function format(data) { data_grafik = []; grafikPie(); }); - - $('#cetak').on('click', function() { - let baseUrl = "{{ route('data-pokok.data-presisi-seni-budaya.cetak') }}"; - let params = dtks.ajax.params(); // Get DataTables params - let queryString = new URLSearchParams(params).toString(); // Convert params to query string - window.open(`${baseUrl}?${queryString}`, '_blank'); // Open the URL with appended query - }); }); @endsection From a8998a52e48f8ea6dba573596b2ae96bed285121 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Wed, 14 Jan 2026 10:46:09 +0700 Subject: [PATCH 24/53] Tambahkan tombol export excel ketenagakerjaan --- .../ketenagakerjaan/cetak.blade.php | 10 +- .../ketenagakerjaan/index.blade.php | 320 +++++++++--------- 2 files changed, 159 insertions(+), 171 deletions(-) diff --git a/resources/views/data_pokok/data_presisi/ketenagakerjaan/cetak.blade.php b/resources/views/data_pokok/data_presisi/ketenagakerjaan/cetak.blade.php index 726c6dbf5..956f96e49 100644 --- a/resources/views/data_pokok/data_presisi/ketenagakerjaan/cetak.blade.php +++ b/resources/views/data_pokok/data_presisi/ketenagakerjaan/cetak.blade.php @@ -17,8 +17,8 @@ - - + + @@ -38,7 +38,7 @@ var filter = str.replace(/&/g, '&') const header = @include('layouts.components.header_bearer_api_gabungan'); $.ajax({ - url: `{{ config('app.databaseGabunganUrl').'/api/v1/data-presisi/ketenagakerjaan' }}?${filter}`, + url: `{{ config('app.databaseGabunganUrl').'/api/v1/data-presisi/ketenagakerjaan/rtm' }}?${filter}`, headers: header, method: 'get', success: function(json) { @@ -48,8 +48,8 @@ - - + + diff --git a/resources/views/data_pokok/data_presisi/ketenagakerjaan/index.blade.php b/resources/views/data_pokok/data_presisi/ketenagakerjaan/index.blade.php index 23a3e14a2..6c7e40fde 100644 --- a/resources/views/data_pokok/data_presisi/ketenagakerjaan/index.blade.php +++ b/resources/views/data_pokok/data_presisi/ketenagakerjaan/index.blade.php @@ -3,107 +3,96 @@ @section('title', $title) @section('content_header') -

{{ $title }}

+

{{ $title }}

@stop @push('css') - + @endpush @section('content') - @include('partials.breadcrumbs') -
-
-
-
-
- -
+@include('partials.breadcrumbs') +
+
+
+
+
+
-
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
-
Aksi
NO NIKNOMOR KKNAMANAMA KEPALA KELUARGAJUMLAH ANGGOTA JENIS PEKERJAAN TEMPAT KERJA FREKWENSI MENGIKUTI PELATIHAN SETAHUN
${no} ${item.attributes.nik || 'N/A'}${item.attributes.no_kk || 'N/A'}${item.attributes.nama || 'N/A'}${item.attributes.kepala_keluarga || 'N/A'}${item.attributes.jumlah_anggota || 'N/A'} ${item.attributes.jenis_pekerjaan || 'N/A'} ${item.attributes.tempat_kerja || 'N/A'} ${item.attributes.frekwensi_mengikuti_pelatihan_setahun || 'N/A'}
- - - - - - - - - - - - -
Aksi#NIKNama Kepala KeluargaJumlah Anggota RTMJenis PekerjaanTempat Kerja
-
+
+
+
+ + + + + + + + + + + + + +
Aksi#NIKNama Kepala KeluargaJumlah Anggota RTMJenis PekerjaanTempat Kerja
+
@endsection @section('js') - @include('data_pokok.data_presisi.ketenagakerjaan.chart') - + } + // Event listener for year filter change + $('#filter-tahun').on('change', function() { + dtks.ajax.reload(); + data_grafik = []; + grafikPie(); + }); + + $('#cetak').on('click', function() { + let baseUrl = "{{ route('data-pokok.data-presisi-ketenagakerjaan.cetak') }}"; + let params = dtks.ajax.params(); // Get DataTables params + let queryString = new URLSearchParams(params).toString(); // Convert params to query string + window.open(`${baseUrl}?${queryString}`, '_blank'); // Open the URL with appended query + }); + }) + @endsection \ No newline at end of file From fd955d62eed0624bb4f2299264adb71537b58957 Mon Sep 17 00:00:00 2001 From: habibie11 Date: Wed, 14 Jan 2026 14:24:24 +0700 Subject: [PATCH 25/53] test --- ...DataPresisiSeniBudayaExcelDownloadTest.php | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 tests/Feature/DataPresisiSeniBudayaExcelDownloadTest.php diff --git a/tests/Feature/DataPresisiSeniBudayaExcelDownloadTest.php b/tests/Feature/DataPresisiSeniBudayaExcelDownloadTest.php new file mode 100644 index 000000000..818b81179 --- /dev/null +++ b/tests/Feature/DataPresisiSeniBudayaExcelDownloadTest.php @@ -0,0 +1,58 @@ +get('/data-presisi/seni-budaya'); + + if ($response->status() !== 200) { + $this->markTestSkipped('Page /data-presisi/seni-budaya not accessible (status: ' . $response->status() . ')'); + return; + } + + $content = $response->getContent(); + + // Test komponen excel-download-button ada di halaman (setelah render menjadi button dengan data attributes) + $this->assertStringContainsString('data-download-url', $content); + $this->assertStringContainsString('table-seni-budaya', $content); + $this->assertStringContainsString('/api/v1/data-presisi/seni-budaya/rtm/download', $content); + } + + /** @test */ + public function test_seni_budaya_page_has_filter_tahun() + { + $response = $this->get('/data-presisi/seni-budaya'); + + if ($response->status() !== 200) { + $this->markTestSkipped('Page not accessible'); + return; + } + + $content = $response->getContent(); + + // Test filter-tahun ada di halaman + $this->assertStringContainsString('filter-tahun', $content); + } + + /** @test */ + public function test_seni_budaya_page_has_print_button() + { + $response = $this->get('/data-presisi/seni-budaya'); + + if ($response->status() !== 200) { + $this->markTestSkipped('Page not accessible'); + return; + } + + $content = $response->getContent(); + + // Test print button ada di halaman + $this->assertStringContainsString('data-presisi/seni-budaya/cetak', $content); + } +} \ No newline at end of file From 76e58b324bd8bc25d035e98370a84ff1b0e9a1af Mon Sep 17 00:00:00 2001 From: habibie11 Date: Wed, 14 Jan 2026 16:49:47 +0700 Subject: [PATCH 26/53] ganti cetak ke export excel --- .../laporan-bulanan/detail/index.blade.php | 102 +++++++++--------- .../LaporanBulananDetailExportTest.php | 58 ++++++++++ 2 files changed, 109 insertions(+), 51 deletions(-) create mode 100644 tests/Feature/LaporanBulananDetailExportTest.php diff --git a/resources/views/laporan-bulanan/detail/index.blade.php b/resources/views/laporan-bulanan/detail/index.blade.php index e68aadf12..0497ab275 100644 --- a/resources/views/laporan-bulanan/detail/index.blade.php +++ b/resources/views/laporan-bulanan/detail/index.blade.php @@ -3,7 +3,7 @@ @section('title', $page_title ?? 'Page Title') @section('content_header') -

{{ $page_description ?? '' }}

+

{{ $page_description ?? '' }}

@stop @section('content') @@ -15,9 +15,9 @@
- - Cetak + class="btn btn-success btn-sm"> + + Export Excel @@ -58,7 +58,7 @@ class="btn btn-primary btn-sm"> const header = @include('layouts.components.header_bearer_api_gabungan'); var url = new URL("{{ config('app.databaseGabunganUrl') . '/api/v1/statistik/laporan-bulanan/sumber-data' }}"); - document.addEventListener("DOMContentLoaded", function(event) { + document.addEventListener("DOMContentLoaded", function (event) { let nama_desa = `{{ session('desa.nama_desa') }}`; var penduduk = $('#detail_penduduk').DataTable({ processing: true, @@ -74,13 +74,13 @@ class="btn btn-primary btn-sm"> url: url.href, method: 'get', headers: header, - data: function(row) { + data: function (row) { return { "page[size]": row.length, "page[number]": (row.start / row.length) + 1, "filter[search]": row.search.value, "sort": (row.order[0]?.dir === "asc" ? "" : "-") + row.columns[row.order[0] - ?.column] + ?.column] ?.name, 'filter[rincian]': '{{ $rincian }}', 'filter[tipe]': '{{ $tipe }}', @@ -94,7 +94,7 @@ class="btn btn-primary btn-sm"> 'kode_desa': '{{ $kode_desa }}', }; }, - dataSrc: function(json) { + dataSrc: function (json) { json.recordsTotal = json.meta.pagination.total json.recordsFiltered = json.meta.pagination.total @@ -102,63 +102,63 @@ class="btn btn-primary btn-sm"> }, }, columnDefs: [{ - targets: '_all', - className: 'text-nowrap', - }, - { - targets: [0, 1, 4, 5, 6], - orderable: false, - searchable: false, - }, + targets: '_all', + className: 'text-nowrap', + }, + { + targets: [0, 1, 4, 5, 6], + orderable: false, + searchable: false, + }, ], columns: [{ - data: null, - }, - { - data: "attributes.nama", - name: "nama", - defaultContent: '-', - }, - { - data: "attributes.nik", - name: "nik", - defaultContent: '-', - }, - { - data: "attributes.tempatlahir", - searcable: false, - className: 'text-center', - defaultContent: '-', - }, - { - data: function(data) { - return data.attributes.tanggallahir ?? ''; - }, - }, - { - data: "attributes.nama_ayah", - name: "nama_ayah", - defaultContent: '-', - }, - { - data: "attributes.nama_ibu", - name: "nama_ibu", - defaultContent: '-', + data: null, + }, + { + data: "attributes.nama", + name: "nama", + defaultContent: '-', + }, + { + data: "attributes.nik", + name: "nik", + defaultContent: '-', + }, + { + data: "attributes.tempatlahir", + searcable: false, + className: 'text-center', + defaultContent: '-', + }, + { + data: function (data) { + return data.attributes.tanggallahir ?? ''; }, + }, + { + data: "attributes.nama_ayah", + name: "nama_ayah", + defaultContent: '-', + }, + { + data: "attributes.nama_ibu", + name: "nama_ibu", + defaultContent: '-', + }, ], order: [ [2, 'asc'] ] }) - penduduk.on('draw.dt', function() { + penduduk.on('draw.dt', function () { var PageInfo = $('#detail_penduduk').DataTable().page.info(); penduduk.column(0, { page: 'current' - }).nodes().each(function(cell, i) { + }).nodes().each(function (cell, i) { cell.innerHTML = i + 1 + PageInfo.start; }); }); }); -@endsection +@endsection \ No newline at end of file diff --git a/tests/Feature/LaporanBulananDetailExportTest.php b/tests/Feature/LaporanBulananDetailExportTest.php new file mode 100644 index 000000000..d8eafa6c4 --- /dev/null +++ b/tests/Feature/LaporanBulananDetailExportTest.php @@ -0,0 +1,58 @@ + 1, + 'tahunku' => 2026, + 'kode_kabupaten' => '35', + ]); + + $response = $this->get(route('laporan-bulanan.detail-penduduk', [ + 'rincian' => 'awal', + 'tipe' => 'wni_l', + ])); + + $response->assertStatus(200); + $content = $response->getContent(); + + // Verifikasi tombol Export Excel ada dengan icon dan class yang benar + $this->assertStringContainsString('fa-file-excel', $content, 'Icon Excel tidak ditemukan'); + $this->assertStringContainsString('Export Excel', $content, 'Label Export Excel tidak ditemukan'); + $this->assertStringContainsString('btn-success', $content, 'Class btn-success tidak ditemukan'); + + // Verifikasi tombol lama (Cetak) sudah tidak ada + $this->assertStringNotContainsString('fa-print', $content, 'Icon print seharusnya sudah dihapus'); + $this->assertStringNotContainsString('>Cetak<', $content, 'Label Cetak seharusnya sudah dihapus'); + } + + /** @test */ + public function test_detail_page_export_excel_button_has_correct_route() + { + session([ + 'bulanku' => 1, + 'tahunku' => 2026, + 'kode_kabupaten' => '35', + ]); + + $response = $this->get(route('laporan-bulanan.detail-penduduk', [ + 'rincian' => 'lahir', + 'tipe' => 'wni_p', + ])); + + $response->assertStatus(200); + $content = $response->getContent(); + + // Verifikasi URL export ada dengan parameter yang benar + $expectedRoutePattern = 'laporan-bulanan/export-excel-detail/lahir/wni_p'; + $this->assertStringContainsString($expectedRoutePattern, $content, 'Route export excel detail tidak ditemukan'); + } +} From c7cc7475b5342ab6aefd10bf2533f86dd487219f Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Thu, 15 Jan 2026 10:40:02 +0700 Subject: [PATCH 27/53] Menambahkan tombol download --- .../excel-download-button.blade.php | 6 ++- .../views/components/print-button.blade.php | 7 ++- .../data_presisi/kesehatan/cetak.blade.php | 20 ++++--- .../data_presisi/kesehatan/index.blade.php | 52 +++++++------------ 4 files changed, 36 insertions(+), 49 deletions(-) diff --git a/resources/views/components/excel-download-button.blade.php b/resources/views/components/excel-download-button.blade.php index 85ec96e5b..d71cf3734 100644 --- a/resources/views/components/excel-download-button.blade.php +++ b/resources/views/components/excel-download-button.blade.php @@ -69,7 +69,9 @@ // Prepare download URL const url = new URL(downloadUrl); - + url.searchParams.set("kode_kabupaten", "{{ session('kabupaten.kode_kabupaten') ?? '' }}"); + url.searchParams.set("kode_kecamatan", "{{ session('kecamatan.kode_kecamatan') ?? '' }}"); + url.searchParams.set("kode_desa", "{{ session('desa.id') ?? '' }}"); let urlParams = new URLSearchParams(); if (tableId) { @@ -110,7 +112,7 @@ const info = table.page.info(); urlParams.append('totalData', info.recordsTotal); } - + // Make fetch request const response = await fetch(url, { method: 'POST', diff --git a/resources/views/components/print-button.blade.php b/resources/views/components/print-button.blade.php index 8508118c9..fb3c72fd0 100644 --- a/resources/views/components/print-button.blade.php +++ b/resources/views/components/print-button.blade.php @@ -30,6 +30,9 @@ e.preventDefault(); const printUrl = new URL(this.dataset.printUrl); + printUrl.searchParams.set("kode_kabupaten", "{{ session('kabupaten.kode_kabupaten') ?? '' }}"); + printUrl.searchParams.set("kode_kecamatan", "{{ session('kecamatan.kode_kecamatan') ?? '' }}"); + printUrl.searchParams.set("kode_desa", "{{ session('desa.id') ?? '' }}"); const tableId = this.dataset.tableId; const filters = JSON.parse(this.dataset.filters || '{}'); const additionalParams = JSON.parse(this.dataset.additionalParams || '{}'); @@ -48,6 +51,7 @@ // Get filters/search from DataTable's ajax.params if (typeof dataTable.ajax.params === 'function') { const params = dataTable.ajax.params(); + Object.entries(params).forEach(([key, value]) => { if (value && value !== '' && value !== 'null') { printUrl.searchParams.append(key, value); @@ -59,8 +63,7 @@ // Add additional static parameters Object.entries(additionalParams).forEach(([key, value]) => { printUrl.searchParams.append(key, value); - }); - + }); // Open print URL in new window window.open(printUrl.href, '_blank'); }); diff --git a/resources/views/data_pokok/data_presisi/kesehatan/cetak.blade.php b/resources/views/data_pokok/data_presisi/kesehatan/cetak.blade.php index 6551fc101..5dfb2d204 100644 --- a/resources/views/data_pokok/data_presisi/kesehatan/cetak.blade.php +++ b/resources/views/data_pokok/data_presisi/kesehatan/cetak.blade.php @@ -16,9 +16,9 @@ NO - NIK - NOMOR KK - NAMA + NIK + NAMA KEPALA KELUARGA + JUMLAH ANGGOTA RTM JNS ASURANSI JNS PENGGUNAAN ALAT KONTRASEPSI JNS PENYAKIT YANG DIDERITA @@ -27,8 +27,7 @@ KUNJUNGAN KE DOKTER DALAM 1 TAHUN KONDISI FISIK SEJAK LAHIR STATUS GIZI BALITA - TANGGAL PENGISIAN - STATUS PENGISIAN + TANGGAL PENGISIAN @@ -39,10 +38,10 @@ @endsection From b10d7bcdade0b165b2059de42d76d148354db62e Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Mon, 19 Jan 2026 11:07:08 +0700 Subject: [PATCH 28/53] Menambahkan tombol download excel --- .../data_presisi/kesehatan/index.blade.php | 312 +++++++++--------- .../data_pokok/infrastruktur/index.blade.php | 1 + 2 files changed, 157 insertions(+), 156 deletions(-) diff --git a/resources/views/data_pokok/data_presisi/kesehatan/index.blade.php b/resources/views/data_pokok/data_presisi/kesehatan/index.blade.php index 1a2288971..5f3ba5daf 100644 --- a/resources/views/data_pokok/data_presisi/kesehatan/index.blade.php +++ b/resources/views/data_pokok/data_presisi/kesehatan/index.blade.php @@ -3,180 +3,180 @@ @section('title', $title) @section('content_header') -

{{ $title }}

+

{{ $title }}

@stop @push('css') - + @endpush @section('content') - @include('partials.breadcrumbs') -
-
-
-
-
- -
+@include('partials.breadcrumbs') +
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
- - - - - - - - - - - - - -
Aksi#NIKNama Kepala KeluargaJumlah Anggota RTMJenis AnsuransiJenis Penggunaan Alat Kontrasepsi
-
+
+
+
+ + + + + + + + + + + + + +
Aksi#NIKNama Kepala KeluargaJumlah Anggota RTMJenis AnsuransiJenis Penggunaan Alat Kontrasepsi
+
@endsection @section('js') - @include('data_pokok.data_presisi.kesehatan.chart') - -@endsection + } + // Event listener for year filter change + $('#filter-tahun').on('change', function() { + dtks.ajax.reload(); + data_grafik = []; + grafikPie(); + }); + }) + +@endsection \ No newline at end of file diff --git a/resources/views/data_pokok/infrastruktur/index.blade.php b/resources/views/data_pokok/infrastruktur/index.blade.php index e5fe7ea0e..d1256cfe9 100644 --- a/resources/views/data_pokok/infrastruktur/index.blade.php +++ b/resources/views/data_pokok/infrastruktur/index.blade.php @@ -45,6 +45,7 @@
+
From edf65319a49a3b9ca3d3b8e7f23183a6a185600c Mon Sep 17 00:00:00 2001 From: habibie11 Date: Mon, 19 Jan 2026 12:43:15 +0700 Subject: [PATCH 29/53] add btn export --- .../data_pokok/jaminan_sosial/index.blade.php | 25 +++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/resources/views/data_pokok/jaminan_sosial/index.blade.php b/resources/views/data_pokok/jaminan_sosial/index.blade.php index 1c9ec21fc..82ca9ac15 100644 --- a/resources/views/data_pokok/jaminan_sosial/index.blade.php +++ b/resources/views/data_pokok/jaminan_sosial/index.blade.php @@ -56,22 +56,11 @@
-
- -
-
- + +
+
+
@@ -314,12 +303,6 @@ function format(data) {
`; } - $('#cetak').on('click', function() { - let baseUrl = "{{ route('jaminan-sosial-cetak') }}"; - let params = jaminanSosial.ajax.params(); // Get DataTables params - let queryString = new URLSearchParams(params).toString(); // Convert params to query string - window.open(`${baseUrl}?${queryString}`, '_blank'); // Open the URL with appended query - }); }) @endsection From 450858edd4ce604be72abd66bd1b78b3e5f51e4a Mon Sep 17 00:00:00 2001 From: habibie11 Date: Mon, 19 Jan 2026 13:10:08 +0700 Subject: [PATCH 30/53] test --- tests/Feature/JaminanSosialTest.php | 140 ++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 tests/Feature/JaminanSosialTest.php diff --git a/tests/Feature/JaminanSosialTest.php b/tests/Feature/JaminanSosialTest.php new file mode 100644 index 000000000..11b61c294 --- /dev/null +++ b/tests/Feature/JaminanSosialTest.php @@ -0,0 +1,140 @@ +get(route('jaminan-sosial')); + + $response->assertStatus(200); + $response->assertViewIs('data_pokok.jaminan_sosial.index'); + $response->assertViewHas('title', 'Data Kepesertaan Program dan Statistik'); + } + + /** @test */ + public function test_jaminan_sosial_page_has_required_elements() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test DataTable exists + $this->assertStringContainsString('id="jaminanSosial"', $content, 'DataTable jaminanSosial tidak ditemukan'); + + // Test filter tahun exists + $this->assertStringContainsString('filter-tahun', $content, 'Filter tahun tidak ditemukan'); + + // Test charts exist + $this->assertStringContainsString('id="pie1"', $content, 'Chart pie1 tidak ditemukan'); + $this->assertStringContainsString('id="pie2"', $content, 'Chart pie2 tidak ditemukan'); + $this->assertStringContainsString('id="pie4"', $content, 'Chart pie4 tidak ditemukan'); + } + + /** @test */ + public function test_jaminan_sosial_has_correct_table_columns() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test table headers exist + $expectedColumns = [ + 'Aksi', + 'NIK', + 'Nama Kepala Keluarga', + 'Jumlah Anggota RTM', + 'Jenis Bantuan Sosial', + 'Jenis Gangguan Mental', + 'Jenis Penanganan', + ]; + + foreach ($expectedColumns as $column) { + $this->assertStringContainsString($column, $content, "Kolom '{$column}' tidak ditemukan"); + } + } + + /** @test */ + public function test_jaminan_sosial_has_print_button() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test print button rendered HTML exists (component is rendered to actual button) + $this->assertStringContainsString('fa-print', $content, 'Icon print tidak ditemukan'); + $this->assertStringContainsString('jaminan-sosial/cetak', $content, 'Route print tidak ditemukan'); + } + + /** @test */ + public function test_jaminan_sosial_has_excel_download_button() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test excel download button rendered HTML exists (component is rendered to actual button) + $this->assertStringContainsString('fa-file-excel', $content, 'Icon excel tidak ditemukan'); + $this->assertStringContainsString('btn-success', $content, 'Tombol Excel dengan class btn-success tidak ditemukan'); + } + + /** @test */ + public function test_jaminan_sosial_has_datatable_configuration() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test DataTable configuration + $this->assertStringContainsString('processing: true', $content, 'DataTable processing config tidak ditemukan'); + $this->assertStringContainsString('serverSide: true', $content, 'DataTable serverSide config tidak ditemukan'); + $this->assertStringContainsString('ordering: false', $content, 'DataTable ordering config tidak ditemukan'); + + // Test API endpoint + $this->assertStringContainsString('/api/v1/data-presisi/jaminan-sosial', $content, 'API endpoint tidak ditemukan'); + } + + /** @test */ + public function test_jaminan_sosial_has_filter_tahun_functionality() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test filter tahun change event listener exists + $this->assertStringContainsString("$('#filter-tahun').on('change'", $content, 'Event listener filter tahun tidak ditemukan'); + $this->assertStringContainsString('jaminanSosial.ajax.reload()', $content, 'DataTable reload pada filter tahun tidak ditemukan'); + } + + /** @test */ + public function test_jaminan_sosial_has_detail_control_functionality() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test detail control for expandable rows + $this->assertStringContainsString('details-control', $content, 'Detail control class tidak ditemukan'); + $this->assertStringContainsString("jaminanSosial.on('click', 'td.details-control'", $content, 'Event listener detail control tidak ditemukan'); + } + + /** @test */ + public function test_jaminan_sosial_detail_button_has_correct_route() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test detail button route exists (rendered as actual URL) + $this->assertStringContainsString('jaminan-sosial/detail', $content, 'Route detail tidak ditemukan'); + } + + /** @test */ + public function test_jaminan_sosial_uses_correct_api_filters() + { + $response = $this->get(route('jaminan-sosial')); + $content = $response->getContent(); + + // Test filter parameters in DataTable + $this->assertStringContainsString('"filter[kode_desa]"', $content, 'Filter kode_desa tidak ditemukan'); + $this->assertStringContainsString('"filter[tahun]"', $content, 'Filter tahun tidak ditemukan'); + $this->assertStringContainsString('"filter[kepala_rtm]"', $content, 'Filter kepala_rtm tidak ditemukan'); + $this->assertStringContainsString("'include': 'anggota,penduduk,rtm,keluarga'", $content, 'Include relationships tidak ditemukan'); + } +} From c74fac8d72d2b4d6cb03a69d50acd14f2fe08e29 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Mon, 19 Jan 2026 13:32:38 +0700 Subject: [PATCH 31/53] Tambahkan expor excel pada data presisi parawisata --- resources/views/data_pokok/pariwisata/index.blade.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/resources/views/data_pokok/pariwisata/index.blade.php b/resources/views/data_pokok/pariwisata/index.blade.php index 017f221e1..f06d568c5 100644 --- a/resources/views/data_pokok/pariwisata/index.blade.php +++ b/resources/views/data_pokok/pariwisata/index.blade.php @@ -57,6 +57,7 @@
+
@@ -118,9 +119,7 @@ "filter[kategori]": $('#filter-kategori-wisata').val(), "filter[sarana-wisata]": $('#filter-sarana-wisata').val(), "filter[potensi-wisata]": $('#filter-komoditas-wisata').val(), - "sort": (row.order[0]?.dir === "asc" ? "" : "-") + row.columns[row.order[0] - ?.column] - ?.name, + "sort": "id", }; }, dataSrc: function(json) { From 805149e9ea527e270e6ba264fed433b496dcbce2 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Mon, 19 Jan 2026 14:41:08 +0700 Subject: [PATCH 32/53] Menambahkan tombol export excel data presisi adat --- .../data_presisi/adat/index.blade.php | 429 +++++++++--------- 1 file changed, 204 insertions(+), 225 deletions(-) diff --git a/resources/views/data_pokok/data_presisi/adat/index.blade.php b/resources/views/data_pokok/data_presisi/adat/index.blade.php index a6314b44e..55202bbf2 100644 --- a/resources/views/data_pokok/data_presisi/adat/index.blade.php +++ b/resources/views/data_pokok/data_presisi/adat/index.blade.php @@ -5,241 +5,227 @@ @section('title', 'Data adat') @section('content_header') -

{{ $title }}

+

{{ $title }}

@stop @section('content') - @include('partials.breadcrumbs') -
-
-
-
Statistik Adat
-
-
-
+@include('partials.breadcrumbs') +
+
+
+
Statistik Adat
+
+
+
-
-
+
-
-
-
-
-
-
- -
-
- -
+
+
+
+
+
+
+ +
+
+
-
-
-
- - - - - - - - - - - - -
Aksi#NIKNama Kepala KeluargaJumlah Anggota RTMStatus KeanggotaanFrekwensi Mengikuti Kegiatan Adat Dalam Setahun
-
+
+
+
+ + + + + + + + + + + + + +
Aksi#NIKNama Kepala KeluargaJumlah Anggota RTMStatus KeanggotaanFrekwensi Mengikuti Kegiatan Adat Dalam Setahun
+
@endsection @section('js') @include('data_pokok.data_presisi.adat.chart') - -@endsection + } + // Event listener for year filter change + $('#filter-tahun').on('change', function() { + adat.ajax.reload(); + data_grafik = []; + grafikPie(); + }); + }) + +@endsection \ No newline at end of file From 3461d9662c5220efbdbaa216ea88fd892fdffb74 Mon Sep 17 00:00:00 2001 From: Abah Roland Date: Mon, 19 Jan 2026 15:02:53 +0700 Subject: [PATCH 33/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/catatan_rilis.md b/catatan_rilis.md index 72f31e9ac..ab6f94572 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -15,4 +15,5 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu #### Perubahan Teknis 1. [#892](https://github.com/OpenSID/OpenKab/issues/892) Perbaikan tag style agar tidak dianggap error ketika csp aktif. -2. [#886](https://github.com/OpenSID/OpenKab/issues/886) Ubah label cetak menjadi excel pada laporan bulanan. \ No newline at end of file +2. [#886](https://github.com/OpenSID/OpenKab/issues/886) Ubah label cetak menjadi excel pada laporan bulanan. +3. [#903](https://github.com/OpenSID/OpenKab/issues/903) Ubah fungsi cetak ke expor excel pada halaman rincian kependudukan bulanan. \ No newline at end of file From 3a333c3f5994fbdb5befb2bdc5dea07caf481728 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Mon, 19 Jan 2026 16:31:32 +0700 Subject: [PATCH 34/53] Menambahkan tombol export excel datapresisi adat --- .../data_presisi/adat/cetak.blade.php | 25 ++---- .../data_presisi/adat/index.blade.php | 79 +++++-------------- 2 files changed, 25 insertions(+), 79 deletions(-) diff --git a/resources/views/data_pokok/data_presisi/adat/cetak.blade.php b/resources/views/data_pokok/data_presisi/adat/cetak.blade.php index 5b6931070..f9d56d7bc 100644 --- a/resources/views/data_pokok/data_presisi/adat/cetak.blade.php +++ b/resources/views/data_pokok/data_presisi/adat/cetak.blade.php @@ -35,31 +35,20 @@ const header = @include('layouts.components.header_bearer_api_gabungan'); $.ajax({ - url: `{{ config('app.databaseGabunganUrl') . '/api/v1/data-presisi/adat' }}?${filter}`, + url: `{{ config('app.databaseGabunganUrl') . '/api/v1/data-presisi/adat/rtm' }}?${filter}`, headers: header, method: 'get', success: function(json) { - var no = 1; - // Transform the included array into an object - const transformedIncluded = json.included.reduce((acc, item) => { - if (!acc[item.type]) { - acc[item.type] = {}; - } - acc[item.type][item.id] = item.attributes; - return acc; - }, {}); + var no = 1; json.data.forEach(function(item) { var row = ` ${no} - ${transformedIncluded.penduduk[item - .relationships.penduduk.data.id].nik || 'N/A'} - ${transformedIncluded.penduduk[item - .relationships.penduduk.data.id].keluarga?.no_kk || 'N/A'} - ${transformedIncluded.penduduk[item - .relationships.penduduk.data.id].nama || 'N/A'} - ${item.attributes.agama || 'N/A'} - ${item.attributes.frekwensi || 'N/A'} + ${item.attributes.nik || 'N/A'} + ${item.attributes.kepala_keluarga || 'N/A'} + ${item.attributes.jumlah_anggota || 'N/A'} + ${item.attributes.status_keanggotaan || 'N/A'} + ${item.attributes.frekwensi_mengikuti_kegiatan_setahun || 'N/A'} ` $('#tabel-adat tbody').append(row) diff --git a/resources/views/data_pokok/data_presisi/adat/index.blade.php b/resources/views/data_pokok/data_presisi/adat/index.blade.php index 55202bbf2..857f8a383 100644 --- a/resources/views/data_pokok/data_presisi/adat/index.blade.php +++ b/resources/views/data_pokok/data_presisi/adat/index.blade.php @@ -34,7 +34,7 @@
- +
@@ -67,7 +67,7 @@ let transformedIncluded = {}; document.addEventListener("DOMContentLoaded", function(event) { const header = @include('layouts.components.header_bearer_api_gabungan'); - var url = new URL("{{ config('app.databaseGabunganUrl') . '/api/v1/data-presisi/adat' }}"); + var url = new URL("{{ config('app.databaseGabunganUrl') . '/api/v1/data-presisi/adat/rtm' }}"); url.searchParams.set("kode_kabupaten", "{{ session('kabupaten.kode_kabupaten') ?? '' }}"); url.searchParams.set("kode_kecamatan", "{{ session('kecamatan.kode_kecamatan') ?? '' }}"); url.searchParams.set("config_desa", "{{ session('desa.id') ?? '' }}"); @@ -87,12 +87,9 @@ data: function(row) { return { "page[size]": row.length, - "page[number]": (row.start / row.length) + 1, - 'include': 'anggota,penduduk,rtm,keluarga', - "filter[search]": row.search.value, - "filter[kepala_rtm]": true, - "sort": "id", - "filter[kode_desa]": $("#kode_desa").val(), + "page[number]": (row.start / row.length) + 1, + "filter[search]": row.search.value, + "sort": "id", "filter[tahun]": $('#filter-tahun').val(), }; }, @@ -101,43 +98,9 @@ json.recordsFiltered = json.meta?.pagination?.total || 0 if (json.data.length > 0) { data_grafik = []; - // Transform the included array into an object - transformedIncluded = json.included.reduce((acc, item) => { - if (!acc[item.type]) { - acc[item.type] = {}; - } - acc[item.type][item.id] = item.attributes; - return acc; - }, {}); - json.data.forEach(function(item, index) { data_grafik.push(item.attributes) - item.attributes.nik = transformedIncluded.penduduk[item - .relationships.penduduk.data.id].nik; - item.attributes.nama = transformedIncluded.penduduk[item - .relationships.penduduk.data.id].nama; - if (!item.attributes.frekwensi) { - item.attributes.frekwensi = 'TIDAK TAHU' - } - if (!item.attributes.status_keanggotaan) { - item.attributes.status_keanggotaan = 'TIDAK TAHU' - } - item.attributes.dtks = transformedIncluded.rtm[item - .relationships.rtm.data.id].dtks ? 'Terdaftar' : - 'Tidak Terdaftar'; - item.attributes.tgl_daftar = transformedIncluded.rtm[item - .relationships.rtm.data.id].tgl_daftar; - item.attributes.jumlah_kk = transformedIncluded.rtm[item - .relationships.rtm.data.id].jumlah_kk; - item.attributes.alamat = transformedIncluded.keluarga[item - .relationships.keluarga.data.id].alamat; - item.attributes.dusun = transformedIncluded.keluarga[item - .relationships.keluarga.data.id].wilayah?.dusun; - item.attributes.rt = transformedIncluded.keluarga[item - .relationships.keluarga.data.id].wilayah?.rt; - item.attributes.rw = transformedIncluded.keluarga[item - .relationships.keluarga.data.id].wilayah?.rw; - }) + }) grafikPie() return json.data; } @@ -151,16 +114,13 @@ className: 'text-nowrap', columns: [{ data: function(data) { let d = data.attributes - let obj = { - 'rtm_id': data.relationships.rtm.data.id, - 'no_kartu_rumah': transformedIncluded.rtm[data.relationships.rtm - .data.id].no_kk, - 'nama_kepala_keluarga': d.nama, - 'alamat': transformedIncluded.keluarga[data.relationships - .keluarga.data.id].alamat, - 'jumlah_anggota': d.anggota_count, - 'jumlah_kk': transformedIncluded.rtm[data.relationships.rtm - .data.id].jumlah_kk, + let obj = { + 'rtm_id': data.id, + 'no_kartu_rumah': d.no_kk, + 'nama_kepala_keluarga': d.kepala_keluarga, + 'alamat': d.alamat, + 'jumlah_anggota': d.jumlah_anggota, + 'jumlah_kk': d.jumlah_kk, } let jsonData = encodeURIComponent(JSON.stringify(obj)); const _url = @@ -181,18 +141,15 @@ className: 'text-nowrap', }, { data: "attributes.nik", - name: "penduduk.nik", + orderable: false, }, { - data: "attributes.nama", - name: "rtm.nama_kepala_keluarga", - orderable: false + data: "attributes.kepala_keluarga", + orderable: false, }, { - data: "attributes.anggota_count", - name: null, + data: "attributes.jumlah_anggota", orderable: false, - searchable: false }, { data: "attributes.status_keanggotaan", @@ -201,7 +158,7 @@ className: 'text-nowrap', searchable: false }, { - data: "attributes.frekwensi", + data: "attributes.frekwensi_mengikuti_kegiatan_setahun", name: "frekwensi_mengikuti_kegiatan_setahun", orderable: false, searchable: false From bd27aa224f72796272adfc5d5d2a1d5d19414bda Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Mon, 19 Jan 2026 16:44:34 +0700 Subject: [PATCH 35/53] perbaikan test --- tests/Feature/FilterTahunTest.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/Feature/FilterTahunTest.php b/tests/Feature/FilterTahunTest.php index ad389945b..2e11545f7 100644 --- a/tests/Feature/FilterTahunTest.php +++ b/tests/Feature/FilterTahunTest.php @@ -20,8 +20,9 @@ public function test_filter_tahun_basic_functionality() // Test ada elemen filter tahun $response->assertSee('filter-tahun'); - // Test ada tahun minimal 2020 - $response->assertSee('2020'); + // Test ada tahun minimal (tahun sekarang - 5) + $minYear = date('Y') - 5; + $response->assertSee((string)$minYear); // Test ada tahun sekarang $response->assertSee(date('Y')); @@ -52,20 +53,21 @@ public function test_filter_tahun_html_structure() } /** - * Test year range is correct (2020 to current year) + * Test year range is correct (current year to 5 years back) */ public function test_year_range_functionality() { $currentYear = date('Y'); + $startYear = $currentYear - 5; $response = $this->get('/data-presisi/adat'); $response->assertStatus(200); - // Test range tahun dari 2020 sampai tahun sekarang - $response->assertSee('2020'); + // Test range tahun dari tahun sekarang - 5 sampai tahun sekarang + $response->assertSee((string)$startYear); $response->assertSee($currentYear); - $this->assertTrue(true, 'Range tahun filter sesuai (2020-' . $currentYear . ')'); + $this->assertTrue(true, 'Range tahun filter sesuai (' . $startYear . '-' . $currentYear . ')'); } /** From b77cf3d8877dac827f5606907c866229fe636ebb Mon Sep 17 00:00:00 2001 From: habibie11 Date: Mon, 19 Jan 2026 16:47:24 +0700 Subject: [PATCH 36/53] add download excel btn --- resources/views/data_pokok/agama/index.blade.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/resources/views/data_pokok/agama/index.blade.php b/resources/views/data_pokok/agama/index.blade.php index 539c0b395..26353e068 100644 --- a/resources/views/data_pokok/agama/index.blade.php +++ b/resources/views/data_pokok/agama/index.blade.php @@ -30,7 +30,12 @@
-
+ +
+ +
+ +
@@ -275,13 +280,6 @@ function format(data) { data_grafik = []; grafikPie(); }); - - $('#cetak').on('click', function() { - let baseUrl = "{{ route('cetak_agama') }}"; - let params = agama.ajax.params(); // Get DataTables params - let queryString = new URLSearchParams(params).toString(); // Convert params to query string - window.open(`${baseUrl}?${queryString}`, '_blank'); // Open the URL with appended query - }); }) @endsection From d2f1a4ef7ad2979696925afd3200bdf9a0006dc4 Mon Sep 17 00:00:00 2001 From: habibie11 Date: Mon, 19 Jan 2026 19:47:05 +0700 Subject: [PATCH 37/53] update agama, excel addtional --- .../excel-download-button.blade.php | 7 ++ .../views/data_pokok/agama/index.blade.php | 93 ++++++++----------- 2 files changed, 46 insertions(+), 54 deletions(-) diff --git a/resources/views/components/excel-download-button.blade.php b/resources/views/components/excel-download-button.blade.php index 85ec96e5b..ddee87080 100644 --- a/resources/views/components/excel-download-button.blade.php +++ b/resources/views/components/excel-download-button.blade.php @@ -72,6 +72,13 @@ let urlParams = new URLSearchParams(); + // Add additional params + @if ($additionalParams) + @foreach ($additionalParams as $param) + urlParams.append('{{ $param['key'] }}', '{{ $param['value'] }}'); + @endforeach + @endif + if (tableId) { // Get filter parameters from DataTable const table = $('#' + tableId).DataTable(); diff --git a/resources/views/data_pokok/agama/index.blade.php b/resources/views/data_pokok/agama/index.blade.php index 26353e068..7099f2a4a 100644 --- a/resources/views/data_pokok/agama/index.blade.php +++ b/resources/views/data_pokok/agama/index.blade.php @@ -34,23 +34,12 @@
- - +
@@ -106,10 +95,6 @@ "page[number]": (row.start / row.length) + 1, 'include': 'anggota,penduduk,rtm,keluarga', "filter[search]": row.search.value, - "filter[kepala_rtm]": true, - // "sort": (row.order[0]?.dir === "asc" ? "" : "-") + row.columns[row.order[0] - // ?.column] - // ?.name, "filter[kode_desa]": $("#kode_desa").val(), "filter[tahun]": $("#filter-tahun").val(), }; @@ -183,8 +168,8 @@ className: 'text-nowrap', "{{ route('detail_agama', ['data' => '__DATA__']) }}" .replace('__DATA__', jsonData) return ` - - `; + + `; }, searchable: false, orderable: false @@ -242,37 +227,37 @@ className: 'text-nowrap', function format(data) { return ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DTKS:${data.attributes.dtks || 'N/A'}
Jumlah KK:${data.attributes.jumlah_kk || 'N/A'}
Alamat:${data.attributes.alamat || 'N/A'}
Dusun:${data.attributes.dusun || 'N/A'}
RT:${data.attributes.rt || 'N/A'}
RW:${data.attributes.rw || 'N/A'}
Tanggal Terdaftar:${data.attributes.tgl_daftar || 'N/A'}
- `; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DTKS:${data.attributes.dtks || 'N/A'}
Jumlah KK:${data.attributes.jumlah_kk || 'N/A'}
Alamat:${data.attributes.alamat || 'N/A'}
Dusun:${data.attributes.dusun || 'N/A'}
RT:${data.attributes.rt || 'N/A'}
RW:${data.attributes.rw || 'N/A'}
Tanggal Terdaftar:${data.attributes.tgl_daftar || 'N/A'}
+ `; } $('#filter-tahun').on('change', function() { From 3f6ecf5a6f3632c14d25a6ae245ee6316d0a02a2 Mon Sep 17 00:00:00 2001 From: habibie11 Date: Tue, 20 Jan 2026 14:14:48 +0700 Subject: [PATCH 38/53] sesuaikan parameter desa --- resources/views/components/excel-download-button.blade.php | 7 +++++++ resources/views/data_pokok/jaminan_sosial/index.blade.php | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/resources/views/components/excel-download-button.blade.php b/resources/views/components/excel-download-button.blade.php index 85ec96e5b..17750f7ed 100644 --- a/resources/views/components/excel-download-button.blade.php +++ b/resources/views/components/excel-download-button.blade.php @@ -72,6 +72,13 @@ let urlParams = new URLSearchParams(); + // Add additional params + @if ($additionalParams) + @foreach ($additionalParams as $param) + urlParams.append('{{ $param['key'] }}', '{{ $param['value'] }}'); + @endforeach + @endif + if (tableId) { // Get filter parameters from DataTable const table = $('#' + tableId).DataTable(); diff --git a/resources/views/data_pokok/jaminan_sosial/index.blade.php b/resources/views/data_pokok/jaminan_sosial/index.blade.php index 82ca9ac15..2efae903f 100644 --- a/resources/views/data_pokok/jaminan_sosial/index.blade.php +++ b/resources/views/data_pokok/jaminan_sosial/index.blade.php @@ -60,7 +60,11 @@
- +
From b868a79be4845b0820445fde144747b0c68a66bb Mon Sep 17 00:00:00 2001 From: habibie11 Date: Tue, 20 Jan 2026 14:25:20 +0700 Subject: [PATCH 39/53] update --- resources/views/data_pokok/jaminan_sosial/index.blade.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/resources/views/data_pokok/jaminan_sosial/index.blade.php b/resources/views/data_pokok/jaminan_sosial/index.blade.php index 2efae903f..01f871279 100644 --- a/resources/views/data_pokok/jaminan_sosial/index.blade.php +++ b/resources/views/data_pokok/jaminan_sosial/index.blade.php @@ -121,12 +121,6 @@ "page[number]": (row.start / row.length) + 1, 'include': 'anggota,penduduk,rtm,keluarga', "filter[search]": row.search.value, - "filter[kepala_rtm]": true, - // "sort": (row.order[0]?.dir === "asc" ? "" : "-") + row.columns[row.order[0] - // ?.column] - // ?.name, - "filter[kode_desa]": $("#kode_desa").val(), - "filter[tahun]": $("#filter-tahun").val(), }; }, dataSrc: function(json) { From 10ccb890a66907db33aad55d40a26b2a39e71102 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Thu, 22 Jan 2026 23:59:31 +0700 Subject: [PATCH 40/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index ab6f94572..7d47ea2f1 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -7,6 +7,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 3. [#885](https://github.com/OpenSID/OpenKab/issues/885) Penambahan fungsi ekspor excel pada data daftar data keluarga. 4. [#896](https://github.com/OpenSID/OpenKab/issues/896) Penambahan fungsi cetak pada data presisi infrastruktur. 5. [#897](https://github.com/OpenSID/OpenKab/issues/897) Penambahan fungsi cetak pada data presisi pariwisata. +6. [#905](https://github.com/OpenSID/OpenKab/issues/905) Penambahan fungsi export data presisi pangan. #### Perbaikan BUG From 2caa4be2d4cffd36b7b2068ee94806c4e3cc4f9f Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 11:34:36 +0700 Subject: [PATCH 41/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index 7d47ea2f1..54731d998 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -8,6 +8,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 4. [#896](https://github.com/OpenSID/OpenKab/issues/896) Penambahan fungsi cetak pada data presisi infrastruktur. 5. [#897](https://github.com/OpenSID/OpenKab/issues/897) Penambahan fungsi cetak pada data presisi pariwisata. 6. [#905](https://github.com/OpenSID/OpenKab/issues/905) Penambahan fungsi export data presisi pangan. +7. [#902](https://github.com/OpenSID/OpenKab/issues/902) Penambahan fitur export & cetak pada halaman data peserta bantuan. #### Perbaikan BUG From b31423246bb73275f82c0f2a3d927ef15b972c16 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 13:18:23 +0700 Subject: [PATCH 42/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/catatan_rilis.md b/catatan_rilis.md index 54731d998..c1f536ef0 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -7,8 +7,9 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 3. [#885](https://github.com/OpenSID/OpenKab/issues/885) Penambahan fungsi ekspor excel pada data daftar data keluarga. 4. [#896](https://github.com/OpenSID/OpenKab/issues/896) Penambahan fungsi cetak pada data presisi infrastruktur. 5. [#897](https://github.com/OpenSID/OpenKab/issues/897) Penambahan fungsi cetak pada data presisi pariwisata. -6. [#905](https://github.com/OpenSID/OpenKab/issues/905) Penambahan fungsi export data presisi pangan. -7. [#902](https://github.com/OpenSID/OpenKab/issues/902) Penambahan fitur export & cetak pada halaman data peserta bantuan. +6. [#905](https://github.com/OpenSID/OpenKab/issues/905) Penambahan fungsi expor data presisi pangan. +7. [#902](https://github.com/OpenSID/OpenKab/issues/902) Penambahan fitur expor & cetak pada halaman data peserta bantuan. +8. [#907](https://github.com/OpenSID/OpenKab/issues/907) Penambahan fitur expor excel pada data presisi pendidikan. #### Perbaikan BUG From c0a2762a1b56c8dbda0c7fc21e5e2d6e72a08d69 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 14:04:12 +0700 Subject: [PATCH 43/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index c1f536ef0..920399934 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -10,6 +10,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 6. [#905](https://github.com/OpenSID/OpenKab/issues/905) Penambahan fungsi expor data presisi pangan. 7. [#902](https://github.com/OpenSID/OpenKab/issues/902) Penambahan fitur expor & cetak pada halaman data peserta bantuan. 8. [#907](https://github.com/OpenSID/OpenKab/issues/907) Penambahan fitur expor excel pada data presisi pendidikan. +9. [#906](https://github.com/OpenSID/OpenKab/issues/906) Penambahan expor excel pada data presisi pangan. #### Perbaikan BUG From 660f87bdc0992c5b3218aad317a0206ddd23e34b Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 14:45:51 +0700 Subject: [PATCH 44/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index 920399934..867c4596e 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -11,6 +11,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 7. [#902](https://github.com/OpenSID/OpenKab/issues/902) Penambahan fitur expor & cetak pada halaman data peserta bantuan. 8. [#907](https://github.com/OpenSID/OpenKab/issues/907) Penambahan fitur expor excel pada data presisi pendidikan. 9. [#906](https://github.com/OpenSID/OpenKab/issues/906) Penambahan expor excel pada data presisi pangan. +10. [#916](https://github.com/OpenSID/OpenKab/issues/916) Penambahan expor excel pada data presisi ketenagakerjaan. #### Perbaikan BUG From 2703b59dc2c17630e1835a272340f94583c1e2c2 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 15:35:11 +0700 Subject: [PATCH 45/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index 867c4596e..7d7b2a978 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -12,6 +12,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 8. [#907](https://github.com/OpenSID/OpenKab/issues/907) Penambahan fitur expor excel pada data presisi pendidikan. 9. [#906](https://github.com/OpenSID/OpenKab/issues/906) Penambahan expor excel pada data presisi pangan. 10. [#916](https://github.com/OpenSID/OpenKab/issues/916) Penambahan expor excel pada data presisi ketenagakerjaan. +11. [#908](https://github.com/OpenSID/OpenKab/issues/908) Penambahan expor excel pada data presisi seni budaya. #### Perbaikan BUG From d95fd2d88c23af5e76fc8058ca8b997a887c4af4 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 16:11:45 +0700 Subject: [PATCH 46/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index 7d7b2a978..b8c48a366 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -13,6 +13,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 9. [#906](https://github.com/OpenSID/OpenKab/issues/906) Penambahan expor excel pada data presisi pangan. 10. [#916](https://github.com/OpenSID/OpenKab/issues/916) Penambahan expor excel pada data presisi ketenagakerjaan. 11. [#908](https://github.com/OpenSID/OpenKab/issues/908) Penambahan expor excel pada data presisi seni budaya. +12. [#919](https://github.com/OpenSID/OpenKab/issues/919) Penambahan expor excel pada data presisi infrastruktur. #### Perbaikan BUG From 44248993d7958a612208cf64b3f07319ce7de848 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 17:26:22 +0700 Subject: [PATCH 47/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index b8c48a366..7afbe246c 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -14,6 +14,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 10. [#916](https://github.com/OpenSID/OpenKab/issues/916) Penambahan expor excel pada data presisi ketenagakerjaan. 11. [#908](https://github.com/OpenSID/OpenKab/issues/908) Penambahan expor excel pada data presisi seni budaya. 12. [#919](https://github.com/OpenSID/OpenKab/issues/919) Penambahan expor excel pada data presisi infrastruktur. +13. [#921](https://github.com/OpenSID/OpenKab/issues/921) Penambahan expor excel pada data presisi jaminan sosial. #### Perbaikan BUG From 353d773d34af1d66ed65185a052d45d71bab0229 Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 17:51:47 +0700 Subject: [PATCH 48/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/catatan_rilis.md b/catatan_rilis.md index 7afbe246c..8b92d8df8 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -10,11 +10,12 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 6. [#905](https://github.com/OpenSID/OpenKab/issues/905) Penambahan fungsi expor data presisi pangan. 7. [#902](https://github.com/OpenSID/OpenKab/issues/902) Penambahan fitur expor & cetak pada halaman data peserta bantuan. 8. [#907](https://github.com/OpenSID/OpenKab/issues/907) Penambahan fitur expor excel pada data presisi pendidikan. -9. [#906](https://github.com/OpenSID/OpenKab/issues/906) Penambahan expor excel pada data presisi pangan. -10. [#916](https://github.com/OpenSID/OpenKab/issues/916) Penambahan expor excel pada data presisi ketenagakerjaan. -11. [#908](https://github.com/OpenSID/OpenKab/issues/908) Penambahan expor excel pada data presisi seni budaya. -12. [#919](https://github.com/OpenSID/OpenKab/issues/919) Penambahan expor excel pada data presisi infrastruktur. -13. [#921](https://github.com/OpenSID/OpenKab/issues/921) Penambahan expor excel pada data presisi jaminan sosial. +9. [#906](https://github.com/OpenSID/OpenKab/issues/906) Penambahan fitur expor excel pada data presisi pangan. +10. [#916](https://github.com/OpenSID/OpenKab/issues/916) Penambahan fitur expor excel pada data presisi ketenagakerjaan. +11. [#908](https://github.com/OpenSID/OpenKab/issues/908) Penambahan fitur expor excel pada data presisi seni budaya. +12. [#919](https://github.com/OpenSID/OpenKab/issues/919) Penambahan fitur expor excel pada data presisi infrastruktur. +13. [#921](https://github.com/OpenSID/OpenKab/issues/921) Penambahan fitur expor excel pada data presisi jaminan sosial. +14. [#920](https://github.com/OpenSID/OpenKab/issues/920) Penambahan fitur expor excel pada data presisi parawisata. #### Perbaikan BUG From 8ead849223687b4972f51f45e18115b4fc80917a Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 18:46:00 +0700 Subject: [PATCH 49/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index 8b92d8df8..ac8b85bb7 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -16,6 +16,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 12. [#919](https://github.com/OpenSID/OpenKab/issues/919) Penambahan fitur expor excel pada data presisi infrastruktur. 13. [#921](https://github.com/OpenSID/OpenKab/issues/921) Penambahan fitur expor excel pada data presisi jaminan sosial. 14. [#920](https://github.com/OpenSID/OpenKab/issues/920) Penambahan fitur expor excel pada data presisi parawisata. +15. [#923](https://github.com/OpenSID/OpenKab/issues/923) Penambahan fitur expor excel pada data presisi adat. #### Perbaikan BUG From 2e039d3c6a1c9c103babb9cecc8d77beb11bb1ba Mon Sep 17 00:00:00 2001 From: Abah Roland <59082428+vickyrolanda@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:04:47 +0700 Subject: [PATCH 50/53] [ci skip] memutahirkan catatan rilis --- catatan_rilis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/catatan_rilis.md b/catatan_rilis.md index ac8b85bb7..b3a67d79c 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -17,6 +17,7 @@ Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta penggu 13. [#921](https://github.com/OpenSID/OpenKab/issues/921) Penambahan fitur expor excel pada data presisi jaminan sosial. 14. [#920](https://github.com/OpenSID/OpenKab/issues/920) Penambahan fitur expor excel pada data presisi parawisata. 15. [#923](https://github.com/OpenSID/OpenKab/issues/923) Penambahan fitur expor excel pada data presisi adat. +16. [#922](https://github.com/OpenSID/OpenKab/issues/922) Penambahan expor excel pada data presisi agama. #### Perbaikan BUG From cb47af67659ac61d0e807085e6153a7efce3ae45 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Thu, 29 Jan 2026 15:04:49 +0700 Subject: [PATCH 51/53] Rilis v2602.0.0 --- app/Helpers/general.php | 2 +- catatan_rilis.md | 2 +- tests/Feature/JaminanSosialTest.php | 33 +++++++++++++++++++---------- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/app/Helpers/general.php b/app/Helpers/general.php index 61ddeaaf6..db446d882 100644 --- a/app/Helpers/general.php +++ b/app/Helpers/general.php @@ -32,7 +32,7 @@ */ function openkab_versi() { - return 'v2601.0.0'; + return 'v2602.0.0'; } } diff --git a/catatan_rilis.md b/catatan_rilis.md index b3a67d79c..abc240162 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -1,4 +1,4 @@ -Di rilis ini, versi 2601.0.0 berisi penambahan dan perbaikan yang diminta pengguna. +Di rilis ini, versi 2602.0.0 berisi penambahan dan perbaikan yang diminta pengguna. #### Penambahan Fitur diff --git a/tests/Feature/JaminanSosialTest.php b/tests/Feature/JaminanSosialTest.php index 11b61c294..5b76e12cf 100644 --- a/tests/Feature/JaminanSosialTest.php +++ b/tests/Feature/JaminanSosialTest.php @@ -13,7 +13,7 @@ public function test_can_access_jaminan_sosial_page() $response->assertStatus(200); $response->assertViewIs('data_pokok.jaminan_sosial.index'); - $response->assertViewHas('title', 'Data Kepesertaan Program dan Statistik'); + $response->assertSee('Data Kepesertaan Program dan Statistik'); } /** @test */ @@ -32,6 +32,14 @@ public function test_jaminan_sosial_page_has_required_elements() $this->assertStringContainsString('id="pie1"', $content, 'Chart pie1 tidak ditemukan'); $this->assertStringContainsString('id="pie2"', $content, 'Chart pie2 tidak ditemukan'); $this->assertStringContainsString('id="pie4"', $content, 'Chart pie4 tidak ditemukan'); + + // Test print button exists + $this->assertStringContainsString('btn btn-primary btn-sm', $content, 'Print button tidak ditemukan'); + $this->assertStringContainsString('id="print-btn-jaminanSosial"', $content, 'Print button ID tidak ditemukan'); + + // Test excel download button exists + $this->assertStringContainsString('btn btn-success btn-sm', $content, 'Excel download button tidak ditemukan'); + $this->assertStringContainsString('id="download-excel"', $content, 'Excel download button ID tidak ditemukan'); } /** @test */ @@ -46,9 +54,9 @@ public function test_jaminan_sosial_has_correct_table_columns() 'NIK', 'Nama Kepala Keluarga', 'Jumlah Anggota RTM', - 'Jenis Bantuan Sosial', - 'Jenis Gangguan Mental', - 'Jenis Penanganan', + 'Jenis Bantuan Sosial
Yang Pernah Diterima', + 'Jenis Gangguan Mental
Yang Diderita', + 'Jenis Penanganan
Penderita Gangguan Mental', ]; foreach ($expectedColumns as $column) { @@ -63,8 +71,8 @@ public function test_jaminan_sosial_has_print_button() $content = $response->getContent(); // Test print button rendered HTML exists (component is rendered to actual button) - $this->assertStringContainsString('fa-print', $content, 'Icon print tidak ditemukan'); - $this->assertStringContainsString('jaminan-sosial/cetak', $content, 'Route print tidak ditemukan'); + $this->assertStringContainsString('fa fa-print', $content, 'Icon print tidak ditemukan'); + $this->assertStringContainsString('data-print-url="http://127.0.0.1:8000/data-pokok/jaminan-sosial/cetak', $content, 'Route print tidak ditemukan'); } /** @test */ @@ -74,8 +82,8 @@ public function test_jaminan_sosial_has_excel_download_button() $content = $response->getContent(); // Test excel download button rendered HTML exists (component is rendered to actual button) - $this->assertStringContainsString('fa-file-excel', $content, 'Icon excel tidak ditemukan'); - $this->assertStringContainsString('btn-success', $content, 'Tombol Excel dengan class btn-success tidak ditemukan'); + $this->assertStringContainsString('fa fa-file-excel', $content, 'Icon excel tidak ditemukan'); + $this->assertStringContainsString('data-download-url=', $content, 'Download URL tidak ditemukan'); } /** @test */ @@ -102,6 +110,7 @@ public function test_jaminan_sosial_has_filter_tahun_functionality() // Test filter tahun change event listener exists $this->assertStringContainsString("$('#filter-tahun').on('change'", $content, 'Event listener filter tahun tidak ditemukan'); $this->assertStringContainsString('jaminanSosial.ajax.reload()', $content, 'DataTable reload pada filter tahun tidak ditemukan'); + $this->assertStringContainsString('grafikPie()', $content, 'Grafik reload pada filter tahun tidak ditemukan'); } /** @test */ @@ -113,6 +122,7 @@ public function test_jaminan_sosial_has_detail_control_functionality() // Test detail control for expandable rows $this->assertStringContainsString('details-control', $content, 'Detail control class tidak ditemukan'); $this->assertStringContainsString("jaminanSosial.on('click', 'td.details-control'", $content, 'Event listener detail control tidak ditemukan'); + $this->assertStringContainsString('row.child.isShown()', $content, 'Logika expand/collapse detail control tidak ditemukan'); } /** @test */ @@ -123,6 +133,7 @@ public function test_jaminan_sosial_detail_button_has_correct_route() // Test detail button route exists (rendered as actual URL) $this->assertStringContainsString('jaminan-sosial/detail', $content, 'Route detail tidak ditemukan'); + $this->assertStringContainsString('?data=__DATA__', $content, 'Parameter data pada route detail tidak ditemukan'); } /** @test */ @@ -132,9 +143,9 @@ public function test_jaminan_sosial_uses_correct_api_filters() $content = $response->getContent(); // Test filter parameters in DataTable - $this->assertStringContainsString('"filter[kode_desa]"', $content, 'Filter kode_desa tidak ditemukan'); - $this->assertStringContainsString('"filter[tahun]"', $content, 'Filter tahun tidak ditemukan'); - $this->assertStringContainsString('"filter[kepala_rtm]"', $content, 'Filter kepala_rtm tidak ditemukan'); + $this->assertStringContainsString('"page[size]"', $content, 'Filter page[size] tidak ditemukan'); + $this->assertStringContainsString('"page[number]"', $content, 'Filter page[number] tidak ditemukan'); $this->assertStringContainsString("'include': 'anggota,penduduk,rtm,keluarga'", $content, 'Include relationships tidak ditemukan'); + $this->assertStringContainsString('"filter[search]"', $content, 'Filter search tidak ditemukan'); } } From 360a86e6a86d510c953b1b3342c34d3795de77ca Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Fri, 30 Jan 2026 08:55:06 +0700 Subject: [PATCH 52/53] perbaiki test --- .../Feature/DataPresisiExcelDownloadTest.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/Feature/DataPresisiExcelDownloadTest.php b/tests/Feature/DataPresisiExcelDownloadTest.php index c434db899..faf402127 100644 --- a/tests/Feature/DataPresisiExcelDownloadTest.php +++ b/tests/Feature/DataPresisiExcelDownloadTest.php @@ -30,8 +30,8 @@ public function test_excel_download_button_exists_in_pangan_page() if ($response->status() === 200) { $content = $response->getContent(); - // Test komponen x-excel-download-button ada di halaman - $this->assertStringContainsString('excel-download-button', $content); + // Test komponen x-download-excel ada di halaman + $this->assertStringContainsString('download-excel', $content); $this->assertStringContainsString('table-pangan', $content); $this->assertStringContainsString('/api/v1/data-presisi/pangan/rtm/download', $content); $this->assertStringContainsString('data_presisi_pangan', $content); @@ -48,8 +48,8 @@ public function test_excel_download_button_exists_in_pendidikan_page() if ($response->status() === 200) { $content = $response->getContent(); - // Test komponen x-excel-download-button ada di halaman - $this->assertStringContainsString('excel-download-button', $content); + // Test komponen x-download-excel ada di halaman + $this->assertStringContainsString('download-excel', $content); $this->assertStringContainsString('table-pendidikan', $content); $this->assertStringContainsString('/api/v1/data-presisi/pendidikan/rtm/download', $content); $this->assertStringContainsString('data_presisi_pendidikan', $content); @@ -101,9 +101,9 @@ public function test_pangan_and_pendidikan_have_matching_excel_button_structure( $panganContent = $panganResponse->getContent(); $pendidikanContent = $pendidikanResponse->getContent(); - // Both should have x-excel-download-button component - $panganHasButton = strpos($panganContent, 'excel-download-button') !== false; - $pendidikanHasButton = strpos($pendidikanContent, 'excel-download-button') !== false; + // Both should have x-download-excel component + $panganHasButton = strpos($panganContent, 'download-excel') !== false; + $pendidikanHasButton = strpos($pendidikanContent, 'download-excel') !== false; $this->assertTrue($panganHasButton, 'Pangan page should have excel download button'); $this->assertTrue($pendidikanHasButton, 'Pendidikan page should have excel download button'); @@ -115,9 +115,9 @@ public function test_pangan_and_pendidikan_have_matching_excel_button_structure( $this->assertTrue($panganHasFilter, 'Pangan page should have filter tahun'); $this->assertTrue($pendidikanHasFilter, 'Pendidikan page should have filter tahun'); - // Both should have print-button component - $panganHasPrint = strpos($panganContent, 'print-button') !== false; - $pendidikanHasPrint = strpos($pendidikanContent, 'print-button') !== false; + // Both should have print-btn component + $panganHasPrint = strpos($panganContent, 'print-btn') !== false; + $pendidikanHasPrint = strpos($pendidikanContent, 'print-btn') !== false; $this->assertTrue($panganHasPrint, 'Pangan page should have print button'); $this->assertTrue($pendidikanHasPrint, 'Pendidikan page should have print button'); From b0793c4f7666e463658e3d9ff19eb41a0c29c023 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Fri, 30 Jan 2026 09:08:19 +0700 Subject: [PATCH 53/53] perbaikan test --- tests/Feature/JaminanSosialTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Feature/JaminanSosialTest.php b/tests/Feature/JaminanSosialTest.php index 5b76e12cf..61a39be2b 100644 --- a/tests/Feature/JaminanSosialTest.php +++ b/tests/Feature/JaminanSosialTest.php @@ -67,12 +67,12 @@ public function test_jaminan_sosial_has_correct_table_columns() /** @test */ public function test_jaminan_sosial_has_print_button() { - $response = $this->get(route('jaminan-sosial')); + $response = $this->get(route('jaminan-sosial')); $content = $response->getContent(); // Test print button rendered HTML exists (component is rendered to actual button) $this->assertStringContainsString('fa fa-print', $content, 'Icon print tidak ditemukan'); - $this->assertStringContainsString('data-print-url="http://127.0.0.1:8000/data-pokok/jaminan-sosial/cetak', $content, 'Route print tidak ditemukan'); + $this->assertStringContainsString('data-print-url=', $content, 'Route print tidak ditemukan'); } /** @test */