From 6765669bbdd6118037f5ec25b22c52bebc5580da Mon Sep 17 00:00:00 2001 From: habibie11 Date: Tue, 13 Jan 2026 18:47:02 +0700 Subject: [PATCH 1/2] 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') + + + + + + + + + + + + + + + + +
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 @@
Kembali ke Daftar Bantuan + +
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 2/2] 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'; + }); + } +}