This commit is contained in:
JokoPrasetio 2026-01-26 11:09:39 +07:00
parent 0d7a1faa44
commit de1216c5f5
18 changed files with 318 additions and 201 deletions

View File

@ -47,6 +47,7 @@ class AksesFileController extends Controller
'pegawai_nama_entry' => auth()->user()?->dataUser?->namalengkap,
'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
'all_akses' => $data['akses'] === "all" ? true : false,
'master_akses' => $data['master_akses'] === "yes" ? true : false,
];
$af = AksesFile::create($payload);
if($data['akses'] === "unit"){
@ -160,6 +161,7 @@ class AksesFileController extends Controller
'pegawai_nama_modified' => auth()->user()?->dataUser?->namalengkap,
'modified_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
'all_akses' => request('akses') === "all" ? true : false,
'master_akses' => request('master_akses') === "yes" ? true : false,
];
$data->update($payload);

View File

@ -70,7 +70,6 @@ class DashboardController extends Controller
$subArray = $subUnit ? explode(',', $subUnit) : [];
$katArray = $kategori ? explode(',', $kategori) : [];
$katDok = MasterKategori::when($katArray, fn($q) => $q->whereIn('master_kategori_directory_id', $katArray))->where('statusenabled', true)->select('master_kategori_directory_id', 'nama_kategori_directory')->get();
if ($katArray && $filterUnit && $subArray) {
/* mode pencarian lengkap */
if ($allowedUnitIds && !$allowedUnitIds->contains((int) $filterUnit)) {
@ -80,13 +79,12 @@ class DashboardController extends Controller
->where('id', $filterUnit)
->with(['subUnitKerja' => fn($q) => $q->whereIn('id', $subArray)
->with(['fileDirectory' => fn($q) => $q
->where('id_unit_kerja', $filterUnit)
->where('id_unit_kerja', $filterUnit)->whereNotNull('status_action')
->when($subArray, fn($q) => $q->whereIn('id_sub_unit_kerja', $subArray))
->when($katArray, fn($q) => $q->whereIn('master_kategori_directory_id', $katArray))
->when($keyword, fn($q) =>
$q->where(function($query) use ($keyword) {
$query->where('file', 'ilike', "%{$keyword}%")
->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%");
$query->where('file', 'ilike', "%{$keyword}%");
})
)
])
@ -99,9 +97,8 @@ class DashboardController extends Controller
/* all akses */
$unitKerja = UnitKerja::where('statusenabled', true)->with([ // muat relasi
'subUnitKerja' => fn($q) => $q->with([ // sub-unit
'fileDirectory' => fn($f) => $f->when($keyword, fn($q) =>
'fileDirectory' => fn($f) => $f->whereNotNull('status_action')->when($keyword, fn($q) =>
$q->where('file', 'ilike', "%{$keyword}%")
->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%")
)
])
])
@ -109,15 +106,13 @@ class DashboardController extends Controller
->get();
} elseif ($allowedUnitIds) {
/* akses per unit (single/multiple) */
$unitKerja = UnitKerja::where('statusenabled', true)
->whereIn('id', $allowedUnitIds)
->with([ // muat relasi
'subUnitKerja' => fn($q) => $q->with([ // sub-unit
'fileDirectory' => fn($f) => $f->when($keyword, fn($q) =>
->with([
'subUnitKerja' => fn($q) => $q->with([
'fileDirectory' => fn($f) => $f->whereNotNull('status_action')->when($keyword, fn($q) =>
$q->where(function($query) use ($keyword) {
$query->where('file', 'ilike', "%{$keyword}%")
->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%");
$query->where('file', 'ilike', "%{$keyword}%");
})
)
])
@ -126,7 +121,6 @@ class DashboardController extends Controller
->get();
} else {
/* default : unit & sub milik sendiri */
$authUnit = $user?->mappingUnitKerjaPegawai[0]?->objectunitkerjapegawaifk;
$authSub = $user?->mappingUnitKerjaPegawai[0]?->objectsubunitkerjapegawaifk;
@ -135,10 +129,9 @@ class DashboardController extends Controller
->with([ // 1. sub-unit milik user
'subUnitKerja' => fn($q) => $q->where('id', $authSub)
->with([ // 2. file-directory + filter keyword
'fileDirectory' => fn($f) => $f->when($keyword, fn($q) =>
'fileDirectory' => fn($f) => $f->whereNotNull('status_action')->when($keyword, fn($q) =>
$q->where(function($query) use ($keyword) {
$query->where('file', 'ilike', "%{$keyword}%")
->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%");
$query->where('file', 'ilike', "%{$keyword}%");
})
)
])
@ -403,7 +396,7 @@ class DashboardController extends Controller
$akses = AksesFile::where(['pegawai_id' => $user->id, 'statusenabled' => true])->first();
$keyword = request('keyword');
$query = FileDirectory::where('statusenabled', true)
$query = FileDirectory::where('statusenabled', true)->whereNotNull('status_action')
->when($keyword, function ($q) use ($keyword) {
$q->where(function ($sub) use ($keyword) {
$sub->where('file', 'ILIKE', "%{$keyword}%")
@ -674,8 +667,8 @@ class DashboardController extends Controller
$perPage = (int) request('per_page', 10);
$page = max(1, (int) request('page', 1));
$keyword = strtolower(request('keyword', ''));
$rows = FileDirectory::where('statusenabled', true)->pluck('file');
$authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray();
$rows = FileDirectory::where('statusenabled', true)->whereNotNull('status_action')->whereIn('id_unit_kerja', $authUnit)->pluck('file');
$grouped = [];
foreach ($rows as $path) {
@ -754,8 +747,9 @@ class DashboardController extends Controller
$keyword = request('keyword');
$start = request('start_date');
$end = request('end_date');
$authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray();
$query = FileDirectory::where('statusenabled', true)->whereNull('status_action')->orderBy('entry_at','desc');
$query = FileDirectory::where('statusenabled', true)->whereNull('status_action')->whereIn('id_unit_kerja', $authUnit)->orderBy('entry_at','desc');
if($keyword){
$query->where(function($q) use ($keyword){
$q->where('file', 'ILIKE', "%{$keyword}%")
@ -886,9 +880,10 @@ class DashboardController extends Controller
public function countDataPending(){
try {
$count = FileDirectory::where('statusenabled', true)
->whereNull('status_action')
->count();
$query = FileDirectory::where('statusenabled', true)
->whereNull('status_action');
$authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray();
$count= $query->whereIn('id_unit_kerja', $authUnit)->count();
return response()->json([
'status' => true,
'count' => $count,

View File

@ -22,7 +22,12 @@ class LogActivityController extends Controller
$query = LogActivity::query()
->orderBy('entry_at','desc');
if(auth()->user()->masterPersetujuan){
$authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray();
$query = $query->whereIn('id_unit_kerja', $authUnit);
}else{
$query = $query->where('pegawai_id_entry', auth()->user()->objectpegawaifk);
}
if($keyword){
$query->where(function($q) use ($keyword){
$q->where('pegawai_nama_entry', 'ILIKE', "%{$keyword}%")

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class EnsureMasterAkses
{
public function handle(Request $request, Closure $next): Response
{
$user = $request->user();
$hasAccess = $user && $user->akses && $user->akses->master_akses;
if (!$hasAccess) {
abort(403, 'Tidak memiliki akses.');
}
return $next($request);
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class EnsureMasterPersetujuan
{
public function handle(Request $request, Closure $next): Response
{
$user = $request->user();
$hasAccess = $user && $user->masterPersetujuan;
if (!$hasAccess) {
abort(403, 'Tidak memiliki akses.');
}
return $next($request);
}
}

View File

@ -45,8 +45,16 @@ class User extends Authenticatable
'katasandi' => 'hashed',
];
}
protected $with = ['dataUser'];
protected $with = ['dataUser', 'masterPersetujuan', 'akses'];
public function dataUser(){
return $this->belongsTo(DataUser::class, 'objectpegawaifk', 'id')->select('id', 'namalengkap');
}
public function masterPersetujuan(){
return $this->belongsTo(masterPersetujuan::class, 'objectpegawaifk', 'pegawai_id')->where('statusenabled', true)->with('details');
}
public function akses(){
return $this->belongsTo(AksesFile::class, 'objectpegawaifk', 'pegawai_id')->where('statusenabled', true);
}
}

View File

@ -11,7 +11,10 @@ return Application::configure(basePath: dirname(__DIR__))
health: '/up',
)
->withMiddleware(function (Middleware $middleware): void {
//
$middleware->alias([
'akses.master' => \App\Http\Middleware\EnsureMasterAkses::class,
'master.persetujuan' => \App\Http\Middleware\EnsureMasterPersetujuan::class,
]);
})
->withExceptions(function (Exceptions $exceptions): void {
//

View File

@ -15647,7 +15647,7 @@ textarea.form-control-lg {
.left-sidebar .scroll-sidebar {
overflow-y: auto;
padding: 0 24px;
height: calc(100vh - 310px);
height: calc(100vh - 120px);
border-radius: 7px;
}
.left-sidebar .scroll-sidebar .simplebar-track.simplebar-horizontal {
@ -15818,11 +15818,10 @@ textarea.form-control-lg {
width: 100%;
background: var(--bs-body-bg);
padding: 0 10px;
/* top: 65px; */
}
@media (max-width: 991.98px) {
.app-header {
top: 131px;
top: 0px;
}
}
.app-header .container-fluid, .app-header .container-sm, .app-header .container-md, .app-header .container-lg, .app-header .container-xl, .app-header .container-xxl {

View File

@ -105,7 +105,7 @@ function editAkses(e){
formEditAkses.attr('action', `/akses/${data.akses_file_id}`)
$("#unit_akses_edit").empty().trigger('change');
$("#unit_akses_wrapper_edit").addClass('d-none');
$("#master_akses_edit").prop("checked", data.master_akses == 1)
selectOptionPegawaiEdit()
selectOptionUnitKerjaEdit()
if (data.pegawai_id) {

View File

@ -18,6 +18,8 @@
{
title:"Action",
formatter: function(value, row){
console.log(row);
let buttons = '';
buttons += `
<button class="btn btn-sm btn-danger me-2" onclick="deleteAkses(this)"
@ -31,7 +33,9 @@
data-pegawai_id="${row?.pegawai_id}"
data-pegawai_nama="${row?.pegawai?.namalengkap}"
data-unit_id="${row?.unit_akses}"
data-unit_nama="${row?.akses?.name}">
data-unit_nama="${row?.akses?.name}"
data-master_akses="${row?.master_akses ? 1 : 0}"
>
<i class="fa-solid fa-pencil"></i>
</button>`
return `

View File

@ -107,8 +107,14 @@ function addForm(){
By Unit Akses
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox"
name="data[${colCount}][master_akses]" id="akses_unit_${colCount}" value="yes">
<label class="form-check-label">
Akses Master
</label>
</div>
</div>
<small class="text-muted">Pilih salah satu.</small>
</div>
<div class="col-md-4 mb-2 d-none" id="unit_akses_wrapper_${colCount}">
<label>Unit Kerja</label>

View File

@ -143,14 +143,16 @@ function searchData(){
return
}
index(kategori_dok, unitKerja, subUnitKerja, [], keyword);
index(kategori_dok, unitKerja, subUnitKerja, keyword);
}
let debounceTimer;
function debounceSearch(input) {
function debounceSearch(value) {
console.log(value);
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => {
searchFile(input.value.trim());
searchFile(value.trim());
}, 300);
}
@ -159,7 +161,8 @@ function searchFile(keyword){
let kategori_dok = $("#kategori_dok").val()
let unitKerja = $("#unit_kerja").val()
let subUnitKerja = $("#sub_unit_kerja").val()
index(kategori_dok, unitKerja, subUnitKerja, [], keyword);
index(kategori_dok, unitKerja, subUnitKerja, keyword);
}

View File

@ -77,13 +77,13 @@ function addForm(){
</select>
<small class="text-muted">Cari nama pegawai.</small>
</div>
<div class="col-md-8 mb-2" id="unit_akses_wrapper_${colCount}">
<div class="col-md-7 mb-2" id="unit_akses_wrapper_${colCount}">
<label>Unit Kerja</label>
<select class="form-control" name="data[${colCount}][unit_akses][]" id="unit_akses_${colCount}" multiple>
</select>
<small class="text-muted">Bisa pilih lebih dari satu.</small>
</div>
<div class="col-md-2">
<div class="col-md-1">
<button type="button" class="btn btn-danger mt-3 me-2" onclick="removeCol(${colCount})"><i class="fa-solid fa-trash"></i></button>
</div>

View File

@ -24,7 +24,7 @@
<div class="col-12 col-md-4">
<label class="form-label mb-1 d-block">Akses</label>
<div class="d-flex flex-wrap gap-3">
<div class="d-flex flex-wrap gap-2">
<div class="form-check">
<input class="form-check-input" type="radio"
name="data[0][akses]" id="akses_all_0" value="all" checked
@ -42,9 +42,15 @@
By Unit Akses
</label>
</div>
</div>
<small class="text-muted">Pilih salah satu.</small>
<div class="form-check">
<input class="form-check-input" type="checkbox"
name="data[0][master_akses]" id="akses_unit_0" value="yes">
<label class="form-check-label" for="akses_unit_0">
Akses Master
</label>
</div>
</div>
</div>
<div class="col-md-4 mb-2 d-none" id="unit_akses_wrapper_0">
<label class="form-label">Unit Kerja</label>

View File

@ -24,7 +24,7 @@
</div>
<div class="col-12 col-md-2">
<label class="form-label mb-1 d-block">Akses</label>
<div class="d-flex flex-wrap gap-3">
<div class="d-flex flex-wrap gap-2">
<div class="form-check">
<input class="form-check-input" type="radio"
name="akses" id="akses_all_edit" value="all"
@ -41,8 +41,15 @@
By Unit Akses
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox"
name="master_akses" id="master_akses_edit" value="yes">
<label class="form-check-label">
Akses Master
</label>
</div>
<small class="text-muted">Pilih salah satu.</small>
</div>
</div>
<div class="col-12 col-md-6 d-none" id="unit_akses_wrapper_edit">
<label class="form-label">Unit Kerja</label>

View File

@ -122,7 +122,7 @@
</button>
<div class="input-group input-group-sm" style="max-width:260px;">
<span class="input-group-text bg-white"><i class="fa fa-search text-muted"></i></span>
<input type="text" id="search_file" oninput="debounceSearch(this)" class="form-control" placeholder="Cari nama/no dokumen">
<input type="text" id="search_file" oninput="debounceSearch(this.value)" class="form-control" placeholder="Cari nama/no dokumen">
</div>
<div class="d-flex align-items-center gap-2 ms-auto">
<span class="badge bg-success">Umum</span>

View File

@ -1,147 +1,177 @@
<aside class="left-sidebar">
<!-- Sidebar scroll-->
<div>
{{-- Logo --}}
<div class="brand-logo d-flex align-items-center justify-content-between">
<a href="/" class="text-nowrap logo-img">
<img src="logo/logo_rsabhk.png" alt="rsabhk" width="180" class="mt-2"/>
<a href="{{ url('/') }}" class="text-nowrap logo-img">
<img src="{{ asset('logo/logo_rsabhk.png') }}" alt="rsabhk" width="180" class="mt-2" />
</a>
<div class="close-btn d-xl-none d-block sidebartoggler cursor-pointer" id="sidebarCollapse">
<i class="ti ti-x fs-6"></i>
</div>
</div>
<!-- Sidebar navigation-->
{{-- Sidebar nav --}}
@php
$openMaster = request()->is('akses*') || request()->is('master-kategori*') || request()->is('master-persetujuan*');
@endphp
<nav class="sidebar-nav scroll-sidebar" data-simplebar="">
<ul id="sidebarnav">
<li class="nav-small-cap">
<iconify-icon icon="solar:menu-dots-linear" class="nav-small-cap-icon fs-4"></iconify-icon>
<span class="hide-menu">Home</span>
</li>
{{-- HOME --}}
<li class="nav-small-cap"><span class="hide-menu">Home</span></li>
<li class="sidebar-item">
<a class="sidebar-link" href="/" aria-expanded="false">
<a class="sidebar-link" href="{{ url('/') }}" aria-expanded="false">
<i class="ti ti-dashboard"></i>
<span class="hide-menu">Dashboard</span>
</a>
</li>
<li class="sidebar-item">
<a class="sidebar-link" href="/new" aria-expanded="false">
<a class="sidebar-link" href="{{ url('/new') }}" aria-expanded="false">
<i class="ti ti-layout-dashboard"></i>
<span class="hide-menu">Dashboard V2</span>
</a>
</li>
<!-- ---------------------------------- -->
<!-- Dashboard -->
<!-- ---------------------------------- -->
<li class="sidebar-item">
<a class="sidebar-link justify-content-between"
href="/master-kategori" aria-expanded="false">
<div class="d-flex align-items-center gap-3">
<span class="d-flex">
<i class="ti ti-file"></i>
</span>
<span class="hide-menu">Master Kategori</span>
</div>
</a>
</li>
{{-- <li class="sidebar-item">
<a class="sidebar-link justify-content-between"
href="/master-klasifikasi" aria-expanded="false">
<div class="d-flex align-items-center gap-3">
<span class="d-flex">
<i class="ti ti-file"></i>
</span>
<span class="hide-menu">Master Klasifikasi</span>
</div>
</a>
</li> --}}
<li class="sidebar-item">
<a class="sidebar-link justify-content-between"
href="/akses" aria-expanded="false">
<div class="d-flex align-items-center gap-3">
<span class="d-flex">
<i class="ti ti-lock-access"></i>
</span>
<span class="hide-menu">Akses</span>
</div>
</a>
</li>
{{-- AKTIVITAS --}}
<li class="nav-small-cap"><span class="hide-menu">Aktivitas</span></li>
<li class="sidebar-item">
<a class="sidebar-link justify-content-between"
href="/log-activity" aria-expanded="false">
<a class="sidebar-link d-flex align-items-center justify-content-between"
href="{{ url('/log-activity') }}" aria-expanded="false">
<div class="d-flex align-items-center gap-3">
<span class="d-flex">
<i class="ti ti-activity"></i>
</span>
<span class="hide-menu">Log Aktivitas</span>
</div>
</a>
</li>
@if($authUnit = auth()->user()->masterPersetujuan)
<li class="sidebar-item">
<a class="sidebar-link justify-content-between"
href="/recap" aria-expanded="false">
<a class="sidebar-link d-flex align-items-center justify-content-between"
href="{{ url('/pending-file') }}" aria-expanded="false">
<div class="d-flex align-items-center gap-3">
<i class="ti ti-clock"></i>
<span class="hide-menu">Persetujuan</span>
</div>
<span class="badge bg-danger rounded-pill d-none" id="pendingCountBadge">0</span>
</a>
</li>
@endif
{{-- RECAP --}}
<li class="nav-small-cap"><span class="hide-menu">Recap</span></li>
<li class="sidebar-item">
<a class="sidebar-link d-flex align-items-center justify-content-between"
href="{{ url('/recap') }}" aria-expanded="false">
<div class="d-flex align-items-center gap-3">
<span class="d-flex">
<i class="ti ti-report-analytics"></i>
</span>
<span class="hide-menu">Data Rekap</span>
</div>
</a>
</li>
<li class="sidebar-item">
{{-- MASTER --}}
@if(auth()->user()->akses && auth()->user()->akses->master_akses)
<li class="nav-small-cap"><span class="hide-menu">Master</span></li>
<li class="sidebar-item has-sub {{ $openMaster ? 'open' : '' }}">
<a class="sidebar-link d-flex align-items-center justify-content-between"
href="/pending-file" aria-expanded="false">
href="#menu-master"
data-bs-toggle="collapse"
role="button"
aria-expanded="{{ $openMaster ? 'true' : 'false' }}"
aria-controls="menu-master">
<!-- Left -->
<div class="d-flex align-items-center gap-3">
<i class="ti ti-clock sidebar-icon"></i>
<span class="hide-menu">Persetujuan</span>
</div>
<!-- Right Badge -->
<span class="badge bg-danger rounded-pill sidebar-badge" id="pendingCountBadge">
0
</span>
</a>
</li>
<li class="sidebar-item">
<a class="sidebar-link justify-content-between"
href="/master-persetujuan" aria-expanded="false">
<div class="d-flex align-items-center gap-3">
<span class="d-flex">
<i class="ti ti-report-analytics"></i>
</span>
<span class="hide-menu">Master Persetujuan</span>
<span class="hide-menu">Master</span>
</div>
<i class="ti ti-chevron-right fs-6 sidebar-arrow"></i>
</a>
<ul class="collapse sidebar-submenu {{ $openMaster ? 'show' : '' }}" id="menu-master">
<li class="sidebar-item">
<a href="{{ url('/akses') }}" class="sidebar-link">
<span class="hide-menu">Akses</span>
</a>
</li>
<li class="sidebar-item">
<a href="{{ url('/master-kategori') }}" class="sidebar-link">
<span class="hide-menu">Kategori</span>
</a>
</li>
<li class="sidebar-item">
<a href="{{ url('/master-persetujuan') }}" class="sidebar-link">
<span class="hide-menu">Persetujuan</span>
</a>
</li>
</ul>
</li>
@endif
</ul>
</nav>
<!-- End Sidebar navigation -->
</div>
<!-- End Sidebar scroll-->
</aside>
<script>
function countData(){
</aside>
{{-- Styling kecil biar submenu rapi + arrow muter --}}
<style>
.sidebar-submenu { padding-left: 2.7rem; }
.sidebar-submenu .sidebar-link { padding: 6px 0; font-size: 13px; opacity: .9; }
.sidebar-item.has-sub .sidebar-arrow { transition: transform .2s ease; }
.sidebar-item.has-sub.open .sidebar-arrow { transform: rotate(90deg); }
</style>
<script>
const badge = document.getElementById('pendingCountBadge');
async function countData() {
if (!badge) return;
fetch('/data/count-pending')
.then(res => res.json())
.then(data => {
const count = data?.count ?? 0;
try {
const res = await fetch('/data/count-pending', {
headers: { 'Accept': 'application/json' }
});
if (!res.ok) throw new Error('Request failed: ' + res.status);
const data = await res.json();
const count = Number(data?.count ?? 0);
badge.textContent = count;
if (count <= 0) {
badge.classList.toggle('d-none', count <= 0);
} catch (e) {
badge.classList.add('d-none');
} else {
badge.classList.remove('d-none');
}
})
.catch(() => {
badge.classList.add('d-none');
}
countData();
setInterval(countData, 60000);
const masterCollapse = document.getElementById('menu-master');
const masterItem = masterCollapse
? masterCollapse.closest('.sidebar-item.has-sub')
: null;
if (masterItem && masterCollapse) {
masterCollapse.addEventListener('shown.bs.collapse', function () {
masterItem.classList.add('open');
});
masterCollapse.addEventListener('hidden.bs.collapse', function () {
masterItem.classList.remove('open');
});
}
countData();
</script>
</script>

View File

@ -19,14 +19,18 @@ Route::middleware(['auth'])->group(function(){
Route::post('/upload', [DashboardController::class, 'store']);
Route::get('/data-unit-kerja', [DashboardController::class, 'dataUnitKerja']);
Route::get('/select-pegawai', [AksesFileController::class, 'optionPegawai']);
Route::get('/select-unit-kerja-option', [AksesFileController::class, 'optionUnitKerja']);
Route::middleware(['akses.master'])->group(function () {
Route::resource('/akses', AksesFileController::class);
Route::get('datatable/akses', [AksesFileController::class, 'datatable']);
Route::resource('/master-persetujuan', masterPersetujuanController::class)->only(['index','store','show','update','destroy']);
Route::get('datatable/master-persetujuan', [masterPersetujuanController::class, 'datatable']);
Route::resource('/master-kategori', MasterKategoriController::class);
Route::get('datatable/master-kategori', [MasterKategoriController::class, 'datatable']);
Route::resource('/master-klasifikasi', MasterKlasifikasiController::class);
Route::get('datatable/master-klasifikasi', [MasterKlasifikasiController::class, 'datatable']);
Route::resource('/akses', AksesFileController::class);
Route::get('datatable/akses', [AksesFileController::class, 'datatable']);
Route::get('/select-pegawai', [AksesFileController::class, 'optionPegawai']);
Route::get('/select-unit-kerja-option', [AksesFileController::class, 'optionUnitKerja']);
});
Route::get('/select-unit-kerja', [DashboardController::class, 'OptionUnitKerja']);
Route::get('/select-sub-unit-kerja/{id}', [DashboardController::class, 'optionSubUnitKerja']);
@ -42,14 +46,15 @@ Route::middleware(['auth'])->group(function(){
Route::get('/recap', [DashboardController::class, 'recapView']);
Route::get('/data/recap', [DashboardController::class, 'recapData']);
Route::middleware(['master.persetujuan'])->group(function () {
Route::get('/pending-file', [DashboardController::class, 'pendingFile']);
Route::get('/datatable/pending-file', [DashboardController::class, 'dataPendingFile']);
Route::post('/pending-file/{id}/approve', [DashboardController::class, 'approvePendingFile']);
Route::post('/pending-file/{id}/reject', [DashboardController::class, 'rejectPendingFile']);
Route::get('/data/count-pending', [DashboardController::class, 'countDataPending']);
Route::resource('/master-persetujuan', masterPersetujuanController::class)->only(['index','store','show','update','destroy']);
Route::get('datatable/master-persetujuan', [masterPersetujuanController::class, 'datatable']);
});
});
Route::get('/login', [AuthController::class, 'index'])->name('login');