From 99e2c214b67cfce19a3c18bd4cd3c3dab647e12a Mon Sep 17 00:00:00 2001 From: arifal Date: Wed, 14 May 2025 20:56:36 +0700 Subject: [PATCH] create redirect link for dashboard pimpinan --- app/Enums/PbgTaskFilterData.php | 22 ++++++++ .../Api/RequestAssignmentController.php | 53 +++++++++++++++---- .../RequestAssignment/PbgTaskController.php | 35 ++++++------ resources/js/pbg-task/index.js | 42 +++++++++++++-- resources/views/dashboards/bigdata.blade.php | 30 +++++++---- resources/views/pbg_task/index.blade.php | 24 ++++++++- 6 files changed, 160 insertions(+), 46 deletions(-) create mode 100644 app/Enums/PbgTaskFilterData.php diff --git a/app/Enums/PbgTaskFilterData.php b/app/Enums/PbgTaskFilterData.php new file mode 100644 index 0000000..611bef5 --- /dev/null +++ b/app/Enums/PbgTaskFilterData.php @@ -0,0 +1,22 @@ +value => 'Potensi Berkas', + self::business->value => 'Usaha', + self::non_business->value => 'Bukan Usaha', + self::verified->value => 'Terverifikasi', + self::non_verified->value => 'Belum Terverifikasi', + ]; + } +} diff --git a/app/Http/Controllers/Api/RequestAssignmentController.php b/app/Http/Controllers/Api/RequestAssignmentController.php index f364016..d064013 100644 --- a/app/Http/Controllers/Api/RequestAssignmentController.php +++ b/app/Http/Controllers/Api/RequestAssignmentController.php @@ -8,7 +8,7 @@ use App\Http\Resources\RequestAssignmentResouce; use App\Models\PbgTask; use App\Models\PbgTaskGoogleSheet; use Barryvdh\DomPDF\Facade\Pdf; -use DB; +use Illuminate\Support\Facades\DB; use Exception; use Illuminate\Http\Request; use Log; @@ -21,18 +21,51 @@ class RequestAssignmentController extends Controller */ public function index(Request $request) { - $query = PbgTask::with(['attachments' => function ($q) { - $q->whereIn('pbg_type', ['berita_acara', 'bukti_bayar']); - }])->orderBy('id', 'desc'); - + $query = PbgTask::with([ + 'attachments' => function ($q) { + $q->whereIn('pbg_type', ['berita_acara', 'bukti_bayar']); + }, + 'googleSheet' + ])->orderBy('id', 'desc'); + + if ($request->has('filter') && !empty($request->get('filter'))) { + $filter = strtolower($request->get('filter')); + + switch ($filter) { + case 'non-business': + $query->whereRaw("LOWER(function_type) != ?", ['sebagai tempat usaha'])->orWhereNull('function_type'); + break; + + case 'business': + $query->whereRaw("LOWER(function_type) = ?", ['sebagai tempat usaha']); + break; + + case 'verified': + $query->whereHas('googleSheet', function ($q) { + $q->whereRaw("LOWER(status_verifikasi) = ?", ['selesai verifikasi']); + }); + break; + + case 'non-verified': + $query->where(function ($q) { + $q->whereDoesntHave('googleSheet') + ->orWhereHas('googleSheet', function ($q2) { + $q2->whereRaw("LOWER(status_verifikasi) != ?", ['selesai verifikasi'])->orWhereNull('status_verifikasi'); + }); + }); + break; + } + } + if ($request->has('search') && !empty($request->get("search"))) { - $query->where(function ($q) use ($request) { - $q->where('name', 'LIKE', '%' . $request->get('search') . '%') - ->orWhere('registration_number', 'LIKE', '%' . $request->get('search') . '%') - ->orWhere('document_number', 'LIKE', '%' . $request->get('search') . '%'); + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('name', 'LIKE', "%$search%") + ->orWhere('registration_number', 'LIKE', "%$search%") + ->orWhere('document_number', 'LIKE', "%$search%"); }); } - + return RequestAssignmentResouce::collection($query->paginate()); } diff --git a/app/Http/Controllers/RequestAssignment/PbgTaskController.php b/app/Http/Controllers/RequestAssignment/PbgTaskController.php index 91922fe..98677e6 100644 --- a/app/Http/Controllers/RequestAssignment/PbgTaskController.php +++ b/app/Http/Controllers/RequestAssignment/PbgTaskController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\RequestAssignment; use App\Enums\PbgTaskApplicationTypes; +use App\Enums\PbgTaskFilterData; use App\Http\Controllers\Controller; use App\Models\PbgTask; use Illuminate\Http\Request; @@ -17,27 +18,21 @@ class PbgTaskController extends Controller */ public function index(Request $request) { - $menuId = $request->query('menu_id'); - $user = Auth::user(); - $userId = $user->id; + $menuId = $request->query('menu_id') ?? $request->input('menu_id'); + $filter = $request->query('filter'); - // Ambil role_id yang dimiliki user - $roleIds = DB::table('user_role') - ->where('user_id', $userId) - ->pluck('role_id'); - - // Ambil data akses berdasarkan role_id dan menu_id - $roleAccess = DB::table('role_menu') - ->whereIn('role_id', $roleIds) - ->where('menu_id', $menuId) - ->first(); - - // Pastikan roleAccess tidak null sebelum mengakses properti - $creator = $roleAccess->allow_create ?? 0; - $updater = $roleAccess->allow_update ?? 0; - $destroyer = $roleAccess->allow_destroy ?? 0; - - return view('pbg_task.index', compact('creator', 'updater', 'destroyer')); + $permissions = $this->permissions[$menuId]?? []; // Avoid undefined index error + $creator = $permissions['allow_create'] ?? 0; + $updater = $permissions['allow_update'] ?? 0; + $destroyer = $permissions['allow_destroy'] ?? 0; + + return view('pbg_task.index', [ + 'creator' => $creator, + 'updater' => $updater, + 'destroyer' => $destroyer, + 'filter' => $filter, + 'filterOptions' => PbgTaskFilterData::getAllOptions(), + ]); } /** diff --git a/resources/js/pbg-task/index.js b/resources/js/pbg-task/index.js index 2e741aa..a95c97d 100644 --- a/resources/js/pbg-task/index.js +++ b/resources/js/pbg-task/index.js @@ -34,11 +34,42 @@ class PbgTasks { pbgType: "berita_acara", bindFlag: "uploadHandlerBoundBeritaAcara", }); - this.initTableRequestAssignment(); + this.handleFilterDatatable(); this.handleSendNotification(); } - initTableRequestAssignment() { + handleFilterDatatable() { + const form = document.getElementById("filter-form"); + const filterSelect = document.getElementById("filter-select"); + + const urlParams = new URLSearchParams(window.location.search); + const initialFilter = urlParams.get("filter") || ""; + + this.initTableRequestAssignment(initialFilter); // Initial load with query param + + form.addEventListener("submit", (e) => { + e.preventDefault(); + + const selectedFilter = filterSelect.value; + + const params = new URLSearchParams(window.location.search); + params.set("filter", selectedFilter); + + // Update the URL without reloading + window.history.replaceState( + {}, + "", + `${location.pathname}?${params}` + ); + + // Call the method again with the selected filter + this.initTableRequestAssignment(selectedFilter); + }); + } + + initTableRequestAssignment(filterValue = "") { + const urlBase = `${GlobalConfig.apiHost}/api/request-assignments`; + // Ambil token const token = document .querySelector('meta[name="api-token"]') @@ -124,7 +155,10 @@ class PbgTasks { ], search: { server: { - url: (prev, keyword) => `${prev}?search=${keyword}`, + url: (prev, keyword) => + `${prev}${ + prev.includes("?") ? "&" : "?" + }search=${keyword}`, }, debounceTimeout: 1000, }, @@ -139,7 +173,7 @@ class PbgTasks { }, sort: true, server: { - url: `${GlobalConfig.apiHost}/api/request-assignments`, + url: `${urlBase}?filter=${filterValue}`, credentials: "include", headers: { Authorization: `Bearer ${token}`, diff --git a/resources/views/dashboards/bigdata.blade.php b/resources/views/dashboards/bigdata.blade.php index e81ab83..5b9c62e 100644 --- a/resources/views/dashboards/bigdata.blade.php +++ b/resources/views/dashboards/bigdata.blade.php @@ -38,7 +38,8 @@ 'document_type' => '', 'document_id' => 'chart-target-pad', 'visible_small_circle' => true, - 'style' => 'left:200px;' + 'style' => 'left:200px;', + 'document_url' => route('data-settings.index', ['menu_id' => 12]) ]) @endcomponent @@ -56,7 +57,8 @@ 'document_type' => 'Pemohon', 'document_id' => 'chart-total-potensi', 'visible_small_circle' => true, - 'style' => 'left:400px;top:150px;' + 'style' => 'left:400px;top:150px;', + 'document_url' => route('pbg-task.index', ['menu_id' => 13, 'filter' => 'all']) ]) @endcomponent @@ -72,7 +74,8 @@ 'document_type' => '', 'document_id' => 'chart-potensi-tata-ruang', 'visible_small_circle' => true, - 'style' => 'left:600px;' + 'style' => 'left:600px;', + 'document_url' => route('web-spatial-plannings.index', ['menu_id' => 24]) ]) @endcomponent @@ -85,7 +88,8 @@ 'document_type' => 'Berkas', 'document_id' => 'chart-non-business', 'visible_small_circle' => true, - 'style' => 'left:900px;top:150px;' + 'style' => 'left:900px;top:150px;', + 'document_url' => route('pbg-task.index', ['menu_id' => 13, 'filter' => 'non-business']) ]) @endcomponent @@ -95,7 +99,8 @@ 'document_type' => 'Berkas', 'document_id' => 'chart-business', 'visible_small_circle' => true, - 'style' => 'left:900px;top:400px;' + 'style' => 'left:900px;top:400px;', + 'document_url' => route('pbg-task.index', ['menu_id' => 13, 'filter' => 'business']) ]) @endcomponent @@ -105,7 +110,8 @@ 'document_type' => 'Berkas', 'document_id' => 'chart-berkas-terverifikasi', 'visible_small_circle' => true, - 'style' => 'top:300px;left:200px;' + 'style' => 'top:300px;left:200px;', + 'document_url' => route('pbg-task.index', ['menu_id' => 13, 'filter' => 'verified']) ]) @endcomponent @@ -121,7 +127,8 @@ 'document_type' => 'Berkas', 'document_id' => 'chart-berkas-belum-terverifikasi', 'visible_small_circle' => true, - 'style' => 'top:300px;left:600px;' + 'style' => 'top:300px;left:600px;', + 'document_url' => route('pbg-task.index', ['menu_id' => 13, 'filter' => 'non-verified']) ]) @endcomponent @@ -138,7 +145,8 @@ 'document_type' => 'Berkas', 'document_id' => 'chart-realisasi-tebit-pbg', 'visible_small_circle' => true, - 'style' => 'top:550px;left:100px;' + 'style' => 'top:550px;left:100px;', + 'document_url' => 'https://docs.google.com/spreadsheets/d/1QoXzuLdEX3MK70Yrfigz0Qj5rAt4T819jX85vubBNdY/edit?gid=1514195399#gid=1514195399' ]) @endcomponent @@ -151,7 +159,8 @@ 'document_type' => 'Berkas', 'document_id' => 'chart-menunggu-klik-dpmptsp', 'visible_small_circle' => true, - 'style' => 'top:550px;left:400px' + 'style' => 'top:550px;left:400px', + 'document_url' => 'https://docs.google.com/spreadsheets/d/1QoXzuLdEX3MK70Yrfigz0Qj5rAt4T819jX85vubBNdY/edit?gid=1514195399#gid=1514195399' ]) @endcomponent @@ -164,7 +173,8 @@ 'document_type' => 'Berkas', 'document_id' => 'chart-proses-dinas-teknis', 'visible_small_circle' => true, - 'style' => 'top:550px;left:700px' + 'style' => 'top:550px;left:700px', + 'document_url' => 'https://docs.google.com/spreadsheets/d/1QoXzuLdEX3MK70Yrfigz0Qj5rAt4T819jX85vubBNdY/edit?gid=1514195399#gid=1514195399' ]) @endcomponent diff --git a/resources/views/pbg_task/index.blade.php b/resources/views/pbg_task/index.blade.php index 6ca54bc..b2c6cdd 100644 --- a/resources/views/pbg_task/index.blade.php +++ b/resources/views/pbg_task/index.blade.php @@ -42,9 +42,29 @@ Create @endif + +
+
+
+ + +
+
+ +
+
+
+ +
+ data-updater="{{ $updater }}" + data-destroyer="{{ $destroyer }}">