diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 9385045..cdeea0b 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -1956,28 +1956,37 @@ class DashboardController extends Controller $hasAtasanScope = !empty($objectpegawaifk); // 51 / Komite Mutu // 22 / turt - $query = FileDirectory::where('statusenabled', true); + $query = FileDirectory::query() + ->from('public.file_directory as fd') + ->select([ + 'fd.*', + 'k.nama_kategori_directory', + 'u.name as nama_unit', + ]) + ->where('fd.statusenabled', true) + ->leftJoin('public.master_kategori_directory as k', 'k.master_kategori_directory_id', '=','fd.master_kategori_directory_id') + ->leftJoin('public.unitkerjapegawai_m as u', 'u.id', '=', 'fd.id_unit_kerja'); $query->where(function ($root) use ($isKomiteMutu, $isTurt, $hasAtasanScope, $objectpegawaifk) { if ($hasAtasanScope) { $root->where(function ($atasanQuery) use ($objectpegawaifk, $hasAtasanScope) { - $atasanQuery->whereIn('pegawai_id_entry', $objectpegawaifk)->where(function ($qsa) { - $qsa->where('status_action', '!=', 'approved') - ->orWhereNull('status_action') + $atasanQuery->whereIn('fd.pegawai_id_entry', $objectpegawaifk)->where(function ($qsa) { + $qsa->where('fd.status_action', '!=', 'approved') + ->orWhereNull('fd.status_action') ->orWhere(function ($approvedButPending) { $approvedButPending->where(function ($needFurtherApproval) { $needFurtherApproval ->where(function ($needTurt) { - $needTurt->whereNotNull('master_kategori_directory_id') + $needTurt->whereNotNull('fd.master_kategori_directory_id') ->where(function ($pendingTurt) { - $pendingTurt->whereNull('status_turt') - ->orWhereIn('status_turt', ['rejected Turt', 'revised Turt']); + $pendingTurt->whereNull('fd.status_turt') + ->orWhereIn('fd.status_turt', ['rejected Turt', 'revised Turt']); }); }) ->orWhere(function ($needMutu) { - $needMutu->where('is_akre', true) + $needMutu->where('fd.is_akre', true) ->where(function ($pendingMutu) { - $pendingMutu->whereNull('status_mutu') - ->orWhereIn('status_mutu', ['rejected Mutu', 'revised Mutu']); + $pendingMutu->whereNull('fd.status_mutu') + ->orWhereIn('fd.status_mutu', ['rejected Mutu', 'revised Mutu']); }); }); }); @@ -1989,24 +1998,24 @@ class DashboardController extends Controller if ($isKomiteMutu || $isTurt) { $method = $hasAtasanScope ? 'orWhere' : 'where'; $root->{$method}(function ($roleQuery) use ($isKomiteMutu, $isTurt) { - $roleQuery->where('status_action', 'approved') + $roleQuery->where('fd.status_action', 'approved') ->where(function ($q) use ($isKomiteMutu, $isTurt) { if ($isTurt) { $q->where(function ($sub) { - $sub->whereNotNull('master_kategori_directory_id') + $sub->whereNotNull('fd.master_kategori_directory_id') ->where(function ($pendingTurt) { - $pendingTurt->whereNull('status_turt') - ->orWhereIn('status_turt', ['rejected Turt', 'revised Turt']); + $pendingTurt->whereNull('fd.status_turt') + ->orWhereIn('fd.status_turt', ['rejected Turt', 'revised Turt']); }); }); } if ($isKomiteMutu) { $innerMethod = $isTurt ? 'orWhere' : 'where'; $q->{$innerMethod}(function ($sub) { - $sub->where('is_akre', true) + $sub->where('fd.is_akre', true) ->where(function ($pendingMutu) { - $pendingMutu->whereNull('status_mutu') - ->orWhereIn('status_mutu', ['rejected Mutu', 'revised Mutu']); + $pendingMutu->whereNull('fd.status_mutu') + ->orWhereIn('fd.status_mutu', ['rejected Mutu', 'revised Mutu']); }); }); } @@ -2016,20 +2025,47 @@ class DashboardController extends Controller }); $query->when($keyword, function ($q) use ($keyword) { $q->where(function ($sub) use ($keyword) { - $sub->where('nama_dokumen', 'ILIKE', "%{$keyword}%") - ->orWhere('no_dokumen', 'ILIKE', "%{$keyword}%"); + $sub->where('fd.nama_dokumen', 'ILIKE', "%{$keyword}%") + ->orWhere('fd.no_dokumen', 'ILIKE', "%{$keyword}%"); }); }); if($start){ - $query->whereDate('entry_at','>=',$start); + $query->whereDate('fd.entry_at','>=',$start); } if($end){ - $query->whereDate('entry_at','<=',$end); + $query->whereDate('fd.entry_at','<=',$end); } $paginated = $query->paginate($perPage); $data = $paginated->getCollection()->map(function($item) use($objectpegawaifk, $pegawaiId){ $dataSlice = array_values(array_filter(explode('/', $item->file))); + $kategori = null; + if ($item->is_akre) { + $kategori = 'Dokumen Akreditasi (' . $dataSlice[0] . '/' . $dataSlice[1] . ')'; + + if (!empty($item->nama_kategori_directory)) { + $kategori .= ' ' . $item->nama_kategori_directory; + } + + if (!empty($item->kategori_hukum)) { + $kategori .= ' - ' . $item->kategori_hukum; + } + } else { + $kategori = ''; + + if (!empty($item->nama_kategori_directory)) { + $kategori .= $item->nama_kategori_directory; + } + + if (!empty($item->kategori_hukum)) { + $kategori .= ($kategori ? ' - ' : '') . $item->kategori_hukum; + } + + // Jika keduanya kosong + if ($kategori === '') { + $kategori = '-'; + } + } return [ 'file_directory_id' => $item->file_directory_id, 'pegawai_nama_entry' => $item->pegawai_nama_entry, @@ -2055,6 +2091,8 @@ class DashboardController extends Controller 'can_approve_atasan' => in_array($item->pegawai_id_entry, $objectpegawaifk), 'can_edit_submission' => (int) $item->pegawai_id_entry === (int) $pegawaiId, 'revision' => $item->revision, + 'kategori' => $kategori, + 'nama_unit' => $item->nama_unit, ]; }); return response()->json([ @@ -2873,51 +2911,60 @@ class DashboardController extends Controller }) ->exists(); - $query = FileDirectory::with('kategori')->where('statusenabled', true); + $query = FileDirectory::query() + ->from('public.file_directory as fd') + ->select([ + 'fd.*', + 'k.nama_kategori_directory', + 'u.name as nama_unit', + ]) + ->leftJoin('public.master_kategori_directory as k', 'k.master_kategori_directory_id', '=', 'fd.master_kategori_directory_id') + ->leftJoin('public.unitkerjapegawai_m as u', 'u.id', '=', 'fd.id_unit_kerja') + ->where('fd.statusenabled', true); if ($mode === 'persetujuan' && ($isKomiteMutu || $isTurt || $isAtasan)) { $query->where(function ($root) use ($isKomiteMutu, $isTurt, $isAtasan, $pegawaiId) { if ($isKomiteMutu || $isTurt) { $root->where(function ($q) use ($isKomiteMutu, $isTurt) { if ($isTurt) { - $q->whereNotNull('master_kategori_directory_id') + $q->whereNotNull('fd.master_kategori_directory_id') ->where(function ($pendingTurt) { - $pendingTurt->whereNull('status_turt') - ->orWhereIn('status_turt', ['rejected Turt', 'revised Turt']); + $pendingTurt->whereNull('fd.status_turt') + ->orWhereIn('fd.status_turt', ['rejected Turt', 'revised Turt']); }); } if ($isKomiteMutu) { $method = $isTurt ? 'orWhere' : 'where'; $q->{$method}(function ($sub) { - $sub->where('is_akre', true) + $sub->where('fd.is_akre', true) ->where(function ($pendingMutu) { - $pendingMutu->whereNull('status_mutu') - ->orWhereIn('status_mutu', ['rejected Mutu', 'revised Mutu']); + $pendingMutu->whereNull('fd.status_mutu') + ->orWhereIn('fd.status_mutu', ['rejected Mutu', 'revised Mutu']); }); }); } - })->where('status_action', 'approved'); + })->where('fd.status_action', 'approved'); } if ($isAtasan) { $method = ($isKomiteMutu || $isTurt) ? 'orWhere' : 'where'; $root->{$method}(function ($ownSubmission) use ($pegawaiId) { - $ownSubmission->where('pegawai_id_entry', $pegawaiId) - ->where('status_action', 'approved') + $ownSubmission->where('fd.pegawai_id_entry', $pegawaiId) + ->where('fd.status_action', 'approved') ->where(function ($needFurtherApproval) { $needFurtherApproval ->where(function ($needTurt) { - $needTurt->whereNotNull('master_kategori_directory_id') + $needTurt->whereNotNull('fd.master_kategori_directory_id') ->where(function ($pendingTurt) { - $pendingTurt->whereNull('status_turt') - ->orWhereIn('status_turt', ['rejected Turt', 'revised Turt']); + $pendingTurt->whereNull('fd.status_turt') + ->orWhereIn('fd.status_turt', ['rejected Turt', 'revised Turt']); }); }) ->orWhere(function ($needMutu) { - $needMutu->where('is_akre', true) + $needMutu->where('fd.is_akre', true) ->where(function ($pendingMutu) { - $pendingMutu->whereNull('status_mutu') - ->orWhereIn('status_mutu', ['rejected Mutu', 'revised Mutu']); + $pendingMutu->whereNull('fd.status_mutu') + ->orWhereIn('fd.status_mutu', ['rejected Mutu', 'revised Mutu']); }); }); }); @@ -2925,38 +2972,38 @@ class DashboardController extends Controller } }); } else { - $query->where('pegawai_id_entry', $pegawaiId) + $query->where('fd.pegawai_id_entry', $pegawaiId) ->when($isHistory, function($q){ - $q->where('status_action', 'approved') + $q->where('fd.status_action', 'approved') ->where(function ($sub) { - $sub->whereNull('master_kategori_directory_id') - ->orWhere('status_turt', 'approved'); + $sub->whereNull('fd.master_kategori_directory_id') + ->orWhere('fd.status_turt', 'approved'); }) ->where(function ($sub) { - $sub->where('is_akre', '!=', true) - ->orWhereNull('is_akre') - ->orWhere('status_mutu', 'approved'); + $sub->where('fd.is_akre', '!=', true) + ->orWhereNull('fd.is_akre') + ->orWhere('fd.status_mutu', 'approved'); }); }, function($q){ $q->where(function($sub){ - $sub->where('status_action', '!=', 'approved') - ->orWhereNull('status_action') + $sub->where('fd.status_action', '!=', 'approved') + ->orWhereNull('fd.status_action') ->orWhere(function ($approvedButPending) { - $approvedButPending->where('status_action', 'approved') + $approvedButPending->where('fd.status_action', 'approved') ->where(function ($needFurtherApproval) { $needFurtherApproval ->where(function ($needTurt) { - $needTurt->whereNotNull('master_kategori_directory_id') + $needTurt->whereNotNull('fd.master_kategori_directory_id') ->where(function ($pendingTurt) { - $pendingTurt->whereNull('status_turt') - ->orWhere('status_turt', ['revised Turt', 'rejected Turt']); + $pendingTurt->whereNull('fd.status_turt') + ->orWhereIn('fd.status_turt', ['revised Turt', 'rejected Turt']); }); }) ->orWhere(function ($needMutu) { - $needMutu->where('is_akre', true) + $needMutu->where('fd.is_akre', true) ->where(function ($pendingMutu) { - $pendingMutu->whereNull('status_mutu') - ->orWhereIn('status_mutu', ['revised Mutu', 'rejected Mutu']); + $pendingMutu->whereNull('fd.status_mutu') + ->orWhereIn('fd.status_mutu', ['revised Mutu', 'rejected Mutu']); }); }); }); @@ -2965,23 +3012,50 @@ class DashboardController extends Controller }); } - $query->orderBy('entry_at','desc'); + $query->orderBy('fd.entry_at','desc'); if($keyword){ $query->where(function($q) use ($keyword){ - $q->where('file', 'ILIKE', "%{$keyword}%") - ->orWhere('no_dokumen', 'ILIKE', "%{$keyword}%") - ->orWhere('nama_dokumen', 'ILIKE', "%{$keyword}%"); + $q->where('fd.file', 'ILIKE', "%{$keyword}%") + ->orWhere('fd.no_dokumen', 'ILIKE', "%{$keyword}%") + ->orWhere('fd.nama_dokumen', 'ILIKE', "%{$keyword}%"); }); } if($start){ - $query->whereDate('entry_at','>=',$start); + $query->whereDate('fd.entry_at','>=',$start); } if($end){ - $query->whereDate('entry_at','<=',$end); + $query->whereDate('fd.entry_at','<=',$end); } $paginated = $query->paginate($perPage); $data = $paginated->getCollection()->map(function($item){ $dataSlice = array_values(array_filter(explode('/', $item->file))); + $kategori = null; + if ($item->is_akre) { + $kategori = 'Dokumen Akreditasi (' . $dataSlice[0] . '/' . $dataSlice[1] . ')'; + + if (!empty($item->nama_kategori_directory)) { + $kategori .= ' ' . $item->nama_kategori_directory; + } + + if (!empty($item->kategori_hukum)) { + $kategori .= ' - ' . $item->kategori_hukum; + } + } else { + $kategori = ''; + + if (!empty($item->nama_kategori_directory)) { + $kategori .= $item->nama_kategori_directory; + } + + if (!empty($item->kategori_hukum)) { + $kategori .= ($kategori ? ' - ' : '') . $item->kategori_hukum; + } + + // Jika keduanya kosong + if ($kategori === '') { + $kategori = '-'; + } + } return [ 'file_directory_id' => $item->file_directory_id, 'pegawai_nama_entry' => $item->pegawai_nama_entry, @@ -3006,9 +3080,9 @@ class DashboardController extends Controller 'master_kategori_directory_id' => $item->master_kategori_directory_id, 'is_akre' => $item->is_akre, 'kategori_hukum' => $item->kategori_hukum, - 'name_kategori' => $item->kategori_hukum ?? $item->kategori?->nama_kategori_directory ?? null, - 'name_unit' => $item->unit?->name ?? null, - 'unit_kerja_name' => $item->unit?->name ?? null + 'name_kategori' => $item->kategori_hukum ?? $item->nama_kategori_directory ?? null, + 'nama_unit' => $item->nama_unit, + 'kategori' => $kategori, ]; }); return response()->json([ @@ -3296,6 +3370,8 @@ class DashboardController extends Controller $query = LogActivity::query() ->from('logging.log_activity_file_directory as log') ->leftJoin('public.file_directory as fd', 'fd.file_directory_id', '=', 'log.file_directory_id') + ->leftJoin('public.master_kategori_directory as k', 'k.master_kategori_directory_id', '=','fd.master_kategori_directory_id') + ->leftJoin('public.unitkerjapegawai_m as u', 'u.id', '=', 'log.id_unit_kerja') ->where('log.statusenabled', true) ->whereNotIn('log.action_type', ['Membuka Dokumen', 'Download Dokumen']) ->select([ @@ -3311,6 +3387,10 @@ class DashboardController extends Controller 'fd.permission_file', 'fd.tanggal_terbit', 'fd.tgl_expired', + 'fd.is_akre', + 'fd.kategori_hukum', + 'u.name as nama_unit', + 'k.nama_kategori_directory' ]); if ($isAtasan) { @@ -3348,6 +3428,33 @@ class DashboardController extends Controller $paginated = $query->orderBy('log.entry_at', 'desc')->paginate($perPage); $data = $paginated->getCollection()->map(function ($item) { $parts = array_values(array_filter(explode('/', (string) $item->file))); + $kategori = null; + if ($item->is_akre) { + $kategori = 'Dokumen Akreditasi (' . $parts[0] . '/' . $parts[1] . ')'; + + if (!empty($item->nama_kategori_directory)) { + $kategori .= ' ' . $item->nama_kategori_directory; + } + + if (!empty($item->kategori_hukum)) { + $kategori .= ' - ' . $item->kategori_hukum; + } + } else { + $kategori = ''; + + if (!empty($item->nama_kategori_directory)) { + $kategori .= $item->nama_kategori_directory; + } + + if (!empty($item->kategori_hukum)) { + $kategori .= ($kategori ? ' - ' : '') . $item->kategori_hukum; + } + + // Jika keduanya kosong + if ($kategori === '') { + $kategori = '-'; + } + } return [ 'file_directory_id' => $item->file_directory_id, 'pegawai_nama_entry' => $item->pegawai_nama_entry, @@ -3362,6 +3469,8 @@ class DashboardController extends Controller 'tgl_expired' => $item->tgl_expired, 'permission_file' => $item->permission_file, 'action_type' => $item->action_type, + 'nama_unit' => $item->nama_unit, + 'kategori' => $kategori ?? '-', ]; }); diff --git a/bootstrap/app.php b/bootstrap/app.php index 815987d..37f7d1e 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,8 +1,10 @@ withRouting( @@ -17,5 +19,24 @@ return Application::configure(basePath: dirname(__DIR__)) ]); }) ->withExceptions(function (Exceptions $exceptions): void { - // + $exceptions->render(function (TokenMismatchException $exception, Request $request) { + $message = 'Sesi halaman sudah habis. Silakan login ulang.'; + + if ($request->is('login')) { + return redirect() + ->route('login') + ->withInput($request->only('namauser')) + ->with('alertError', 'expired'); + } + + if (!$request->expectsJson()) { + return redirect() + ->guest(route('login')) + ->with('alertError', 'expired-session'); + } + + return response()->json([ + 'message' => $message, + ], 419); + }); })->create(); diff --git a/public/js/pendingFile/index.js b/public/js/pendingFile/index.js index 3765049..e0ec060 100644 --- a/public/js/pendingFile/index.js +++ b/public/js/pendingFile/index.js @@ -323,8 +323,8 @@ document.addEventListener('DOMContentLoaded', () => { data-no_dokumen="${item.no_dokumen || '-'}" data-tanggal_terbit="${item.tanggal_terbit || '-'}" data-permission_file="${item.permission_file || '-'}">${item.nama_dokumen} -