From 1dbd45a27d45290dfe83e7f07400d5a0428f628b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 23 Dec 2024 23:10:54 +0700 Subject: [PATCH] Tambahkan fitur data untuk laporan datatables - Menambahkan metode `dataForDatatables` di `LaporanController` untuk keperluan pencarian, pengurutan, dan paginasi data laporan. - Memperbarui view `laporan/index.blade.php` agar mendukung penggunaan datatables untuk menampilkan data laporan dengan kolom baru. - Menambahkan route baru untuk akses endpoint datatables laporan. - Memodifikasi `module.json` dengan menggabungkan menu "Resume" dan "Laporan" menjadi satu menu "Resume dan Laporan". --- app/Http/Controllers/LaporanController.php | 72 ++++++++++++ module.json | 15 +-- resources/views/laporan/index.blade.php | 126 ++++++++++++++++++++- routes/web.php | 4 + 4 files changed, 197 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index c06db93..3c4db49 100644 --- a/app/Http/Controllers/LaporanController.php +++ b/app/Http/Controllers/LaporanController.php @@ -4,6 +4,7 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use Modules\Lpj\Models\Permohonan; class LaporanController extends Controller { @@ -37,4 +38,75 @@ class LaporanController extends Controller public function store(Request $request) {} public function update(Request $request, $id) {} + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = Permohonan::query()->whereIn('status',['proses-laporan','done']); + + $query = $query->orderBy('nomor_registrasi', 'desc'); + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + $size = $request->get('size', 10); + if ($size == 0) { + $size = 10; + } + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','jenisFasilitasKredit'])->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $size); + + // Calculate the current page number + $currentPage = max(1, $request->get('page', 1)); + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } } diff --git a/module.json b/module.json index a4ab9c3..dd16ad9 100644 --- a/module.json +++ b/module.json @@ -325,7 +325,7 @@ ] }, { - "title": "Laporan", + "title": "Resume dan Laporan", "path": "laporan", "icon": "ki-filled ki-filter-tablet text-lg text-primary", "classes": "", @@ -338,19 +338,6 @@ "admin", "senior-officer" ] - }, - { - "title": "Resume", - "path": "resume", - "icon": "ki-filled ki-notepad text-lg text-primary", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "pemohon-ao", - "pemohon-eo" - ] } ], "master": [ diff --git a/resources/views/laporan/index.blade.php b/resources/views/laporan/index.blade.php index 39830e2..efbad1e 100644 --- a/resources/views/laporan/index.blade.php +++ b/resources/views/laporan/index.blade.php @@ -7,10 +7,8 @@ @section('content')
- -
+ data-datatable-state-save="false" id="laporan-table" data-api-url="{{ route('laporan.datatables') }}">

Laporan @@ -69,7 +67,8 @@ Due Date SLA - Action + Status + Actions @@ -88,9 +87,124 @@

- - @endsection + +@push('scripts') + +@endpush diff --git a/routes/web.php b/routes/web.php index f0d3331..43f0a8e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -349,6 +349,10 @@ Route::middleware(['auth'])->group(function () { }); Route::resource('debitur', DebitureController::class); + + Route::name('laporan.')->prefix('laporan')->group(function () { + Route::get('datatables', [LaporanController::class, 'dataForDatatables'])->name('datatables'); + }); Route::resource('laporan', LaporanController::class);