create redirect link for dashboard pimpinan

This commit is contained in:
arifal
2025-05-14 20:56:36 +07:00
parent 501a76bc81
commit 99e2c214b6
6 changed files with 160 additions and 46 deletions

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Enums;
enum PbgTaskFilterData : string
{
case non_business = 'non-business';
case business = 'business';
case verified = 'verified';
case non_verified = 'non-verified';
case all = 'all';
public static function getAllOptions() : array {
return [
self::all->value => 'Potensi Berkas',
self::business->value => 'Usaha',
self::non_business->value => 'Bukan Usaha',
self::verified->value => 'Terverifikasi',
self::non_verified->value => 'Belum Terverifikasi',
];
}
}

View File

@@ -8,7 +8,7 @@ use App\Http\Resources\RequestAssignmentResouce;
use App\Models\PbgTask; use App\Models\PbgTask;
use App\Models\PbgTaskGoogleSheet; use App\Models\PbgTaskGoogleSheet;
use Barryvdh\DomPDF\Facade\Pdf; use Barryvdh\DomPDF\Facade\Pdf;
use DB; use Illuminate\Support\Facades\DB;
use Exception; use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Log; use Log;
@@ -21,18 +21,51 @@ class RequestAssignmentController extends Controller
*/ */
public function index(Request $request) public function index(Request $request)
{ {
$query = PbgTask::with(['attachments' => function ($q) { $query = PbgTask::with([
$q->whereIn('pbg_type', ['berita_acara', 'bukti_bayar']); 'attachments' => function ($q) {
}])->orderBy('id', 'desc'); $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"))) { if ($request->has('search') && !empty($request->get("search"))) {
$query->where(function ($q) use ($request) { $search = $request->get('search');
$q->where('name', 'LIKE', '%' . $request->get('search') . '%') $query->where(function ($q) use ($search) {
->orWhere('registration_number', 'LIKE', '%' . $request->get('search') . '%') $q->where('name', 'LIKE', "%$search%")
->orWhere('document_number', 'LIKE', '%' . $request->get('search') . '%'); ->orWhere('registration_number', 'LIKE', "%$search%")
->orWhere('document_number', 'LIKE', "%$search%");
}); });
} }
return RequestAssignmentResouce::collection($query->paginate()); return RequestAssignmentResouce::collection($query->paginate());
} }

View File

@@ -3,6 +3,7 @@
namespace App\Http\Controllers\RequestAssignment; namespace App\Http\Controllers\RequestAssignment;
use App\Enums\PbgTaskApplicationTypes; use App\Enums\PbgTaskApplicationTypes;
use App\Enums\PbgTaskFilterData;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\PbgTask; use App\Models\PbgTask;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -17,27 +18,21 @@ class PbgTaskController extends Controller
*/ */
public function index(Request $request) public function index(Request $request)
{ {
$menuId = $request->query('menu_id'); $menuId = $request->query('menu_id') ?? $request->input('menu_id');
$user = Auth::user(); $filter = $request->query('filter');
$userId = $user->id;
// Ambil role_id yang dimiliki user $permissions = $this->permissions[$menuId]?? []; // Avoid undefined index error
$roleIds = DB::table('user_role') $creator = $permissions['allow_create'] ?? 0;
->where('user_id', $userId) $updater = $permissions['allow_update'] ?? 0;
->pluck('role_id'); $destroyer = $permissions['allow_destroy'] ?? 0;
// Ambil data akses berdasarkan role_id dan menu_id return view('pbg_task.index', [
$roleAccess = DB::table('role_menu') 'creator' => $creator,
->whereIn('role_id', $roleIds) 'updater' => $updater,
->where('menu_id', $menuId) 'destroyer' => $destroyer,
->first(); 'filter' => $filter,
'filterOptions' => PbgTaskFilterData::getAllOptions(),
// 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'));
} }
/** /**

View File

@@ -34,11 +34,42 @@ class PbgTasks {
pbgType: "berita_acara", pbgType: "berita_acara",
bindFlag: "uploadHandlerBoundBeritaAcara", bindFlag: "uploadHandlerBoundBeritaAcara",
}); });
this.initTableRequestAssignment(); this.handleFilterDatatable();
this.handleSendNotification(); 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 // Ambil token
const token = document const token = document
.querySelector('meta[name="api-token"]') .querySelector('meta[name="api-token"]')
@@ -124,7 +155,10 @@ class PbgTasks {
], ],
search: { search: {
server: { server: {
url: (prev, keyword) => `${prev}?search=${keyword}`, url: (prev, keyword) =>
`${prev}${
prev.includes("?") ? "&" : "?"
}search=${keyword}`,
}, },
debounceTimeout: 1000, debounceTimeout: 1000,
}, },
@@ -139,7 +173,7 @@ class PbgTasks {
}, },
sort: true, sort: true,
server: { server: {
url: `${GlobalConfig.apiHost}/api/request-assignments`, url: `${urlBase}?filter=${filterValue}`,
credentials: "include", credentials: "include",
headers: { headers: {
Authorization: `Bearer ${token}`, Authorization: `Bearer ${token}`,

View File

@@ -38,7 +38,8 @@
'document_type' => '', 'document_type' => '',
'document_id' => 'chart-target-pad', 'document_id' => 'chart-target-pad',
'visible_small_circle' => true, 'visible_small_circle' => true,
'style' => 'left:200px;' 'style' => 'left:200px;',
'document_url' => route('data-settings.index', ['menu_id' => 12])
]) ])
@endcomponent @endcomponent
@@ -56,7 +57,8 @@
'document_type' => 'Pemohon', 'document_type' => 'Pemohon',
'document_id' => 'chart-total-potensi', 'document_id' => 'chart-total-potensi',
'visible_small_circle' => true, '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 @endcomponent
@@ -72,7 +74,8 @@
'document_type' => '', 'document_type' => '',
'document_id' => 'chart-potensi-tata-ruang', 'document_id' => 'chart-potensi-tata-ruang',
'visible_small_circle' => true, 'visible_small_circle' => true,
'style' => 'left:600px;' 'style' => 'left:600px;',
'document_url' => route('web-spatial-plannings.index', ['menu_id' => 24])
]) ])
@endcomponent @endcomponent
@@ -85,7 +88,8 @@
'document_type' => 'Berkas', 'document_type' => 'Berkas',
'document_id' => 'chart-non-business', 'document_id' => 'chart-non-business',
'visible_small_circle' => true, '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 @endcomponent
@@ -95,7 +99,8 @@
'document_type' => 'Berkas', 'document_type' => 'Berkas',
'document_id' => 'chart-business', 'document_id' => 'chart-business',
'visible_small_circle' => true, '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 @endcomponent
@@ -105,7 +110,8 @@
'document_type' => 'Berkas', 'document_type' => 'Berkas',
'document_id' => 'chart-berkas-terverifikasi', 'document_id' => 'chart-berkas-terverifikasi',
'visible_small_circle' => true, '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 @endcomponent
@@ -121,7 +127,8 @@
'document_type' => 'Berkas', 'document_type' => 'Berkas',
'document_id' => 'chart-berkas-belum-terverifikasi', 'document_id' => 'chart-berkas-belum-terverifikasi',
'visible_small_circle' => true, '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 @endcomponent
@@ -138,7 +145,8 @@
'document_type' => 'Berkas', 'document_type' => 'Berkas',
'document_id' => 'chart-realisasi-tebit-pbg', 'document_id' => 'chart-realisasi-tebit-pbg',
'visible_small_circle' => true, '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 @endcomponent
@@ -151,7 +159,8 @@
'document_type' => 'Berkas', 'document_type' => 'Berkas',
'document_id' => 'chart-menunggu-klik-dpmptsp', 'document_id' => 'chart-menunggu-klik-dpmptsp',
'visible_small_circle' => true, '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 @endcomponent
@@ -164,7 +173,8 @@
'document_type' => 'Berkas', 'document_type' => 'Berkas',
'document_id' => 'chart-proses-dinas-teknis', 'document_id' => 'chart-proses-dinas-teknis',
'visible_small_circle' => true, '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 @endcomponent
</div> </div>

View File

@@ -42,9 +42,29 @@
<a href="{{ route('pbg-task.create')}}" class="btn btn-success btn-sm d-block d-sm-inline w-auto">Create</a> <a href="{{ route('pbg-task.create')}}" class="btn btn-success btn-sm d-block d-sm-inline w-auto">Create</a>
@endif @endif
</div> </div>
<form id="filter-form">
<div class="row pb-3">
<div class="col-md-4">
<select name="filter" id="filter-select" class="form-select">
@foreach ($filterOptions as $key => $label)
<option value="{{ $key }}" {{ request('filter') == $key ? 'selected' : '' }}>
{{ $label }}
</option>
@endforeach
</select>
<input name="menu_id" value="13" type="hidden" />
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary w-100">Apply</button>
</div>
</div>
</form>
<!-- Table or Data Display Area -->
<div id="table-pbg-tasks" <div id="table-pbg-tasks"
data-updater="{{ $updater }}" data-updater="{{ $updater }}"
data-destroyer="{{ $destroyer }}"> data-destroyer="{{ $destroyer }}">
</div> </div>
</div> </div>
</div> </div>