Compare commits
2 Commits
6fa55f083b
...
ba857bea05
| Author | SHA1 | Date | |
|---|---|---|---|
| ba857bea05 | |||
| ac86078d96 |
@ -155,24 +155,65 @@ class DashboardController extends Controller
|
||||
->all();
|
||||
$keyword = request('keyword');
|
||||
$kategori = request('kategori');
|
||||
$kategoriHeader = request('kategori_header');
|
||||
|
||||
$unitFilter = request('unit');
|
||||
$kategoriIds = is_array($kategori)
|
||||
$kategoriValues = is_array($kategori)
|
||||
? array_values(array_filter($kategori))
|
||||
: array_values(array_filter(explode(',', (string) $kategori)));
|
||||
$kategoriHeaderValues = is_array($kategoriHeader)
|
||||
? array_values(array_filter($kategoriHeader))
|
||||
: array_values(array_filter(explode(',', (string) $kategoriHeader)));
|
||||
$allKategoriValues = array_values(array_filter(array_merge($kategoriValues, $kategoriHeaderValues)));
|
||||
$kategoriTypes = [];
|
||||
$kategoriIds = [];
|
||||
foreach ($allKategoriValues as $val) {
|
||||
$lower = strtolower(trim((string) $val));
|
||||
if (in_array($lower, ['akreditasi', 'akre'], true)) {
|
||||
$kategoriTypes[] = 'akreditasi';
|
||||
continue;
|
||||
}
|
||||
if ($lower === 'hukum') {
|
||||
$kategoriTypes[] = 'hukum';
|
||||
continue;
|
||||
}
|
||||
if ($lower === 'lainnya') {
|
||||
$kategoriTypes[] = 'lainnya';
|
||||
continue;
|
||||
}
|
||||
$kategoriIds[] = $val;
|
||||
}
|
||||
$unitFilterIds = is_array($unitFilter)
|
||||
? array_values(array_filter($unitFilter))
|
||||
: array_values(array_filter(explode(',', (string) $unitFilter)));
|
||||
if (!empty($unitFilterIds)) {
|
||||
$unitIds = array_values(array_intersect($unitIds, $unitFilterIds));
|
||||
}
|
||||
$query = FileDirectory::where('statusenabled', true)
|
||||
$baseQuery = FileDirectory::with('kategori')
|
||||
->where('statusenabled', true)
|
||||
->where('status_action', 'approved')
|
||||
->where(function($q){
|
||||
$q->where('is_akre', false)->orWhereNull('is_akre');
|
||||
})
|
||||
->whereIn('id_unit_kerja', $unitIds)
|
||||
->when(!empty($kategoriIds), function ($q) use ($kategoriIds) {
|
||||
$q->whereIn('master_kategori_directory_id', $kategoriIds);
|
||||
->whereIn('id_unit_kerja', $unitIds);
|
||||
|
||||
$query = (clone $baseQuery)
|
||||
->when(!empty($kategoriIds) || !empty($kategoriTypes), function ($q) use ($kategoriIds, $kategoriTypes) {
|
||||
$q->where(function ($sub) use ($kategoriIds, $kategoriTypes) {
|
||||
$hasClause = false;
|
||||
if (!empty($kategoriIds)) {
|
||||
$sub->whereIn('master_kategori_directory_id', $kategoriIds);
|
||||
$hasClause = true;
|
||||
}
|
||||
if (in_array('akreditasi', $kategoriTypes, true)) {
|
||||
$sub->where('is_akre', true);
|
||||
$hasClause = true;
|
||||
}
|
||||
if (in_array('hukum', $kategoriTypes, true)) {
|
||||
$hasClause ? $sub->orWhereNotNull('kategori_hukum') : $sub->whereNotNull('kategori_hukum');
|
||||
$hasClause = true;
|
||||
}
|
||||
if (in_array('lainnya', $kategoriTypes, true)) {
|
||||
$hasClause ? $sub->orWhereNotNull('master_kategori_directory_id') : $sub->whereNotNull('master_kategori_directory_id');
|
||||
}
|
||||
});
|
||||
})
|
||||
->when($keyword, function ($q) use ($keyword) {
|
||||
$q->where(function ($sub) use ($keyword) {
|
||||
@ -184,10 +225,27 @@ class DashboardController extends Controller
|
||||
$data = $query->orderBy('entry_at', 'desc')
|
||||
->paginate($perPage);
|
||||
|
||||
$items = collect($data->items())->map(function($item){
|
||||
$item->nama_kategori = $item->kategori->nama_kategori_directory ?? $item->kategori_hukum ?? null;
|
||||
return $item;
|
||||
});
|
||||
$kategoriList = (clone $baseQuery)->get()->map(function($item){
|
||||
if ($item->is_akre) {
|
||||
return ['id' => 'akreditasi', 'label' => 'Kategori Akreditasi'];
|
||||
}
|
||||
if (!empty($item->kategori_hukum)) {
|
||||
return ['id' => 'hukum', 'label' => 'Kategori Hukum'];
|
||||
}
|
||||
$label = $item->kategori->nama_kategori_directory ?? $item->nama_kategori_directory ?? 'Kategori';
|
||||
$id = $item->master_kategori_directory_id ?? $label;
|
||||
return ['id' => (string) $id, 'label' => $label];
|
||||
})->unique('id')->values();
|
||||
|
||||
$payload = [
|
||||
'status' => true,
|
||||
'message' => 'Berhasil mendapatkan data',
|
||||
'data' => $data->items(),
|
||||
'data' => $items,
|
||||
'kategori_list' => $kategoriList,
|
||||
'pagination' => [
|
||||
'current_page' => $data->currentPage(),
|
||||
'next_page' => $data->hasMorePages() ? $data->currentPage() + 1 : null,
|
||||
@ -927,21 +985,61 @@ class DashboardController extends Controller
|
||||
$keyword = request('keyword');
|
||||
$unitId = request('unit');
|
||||
$kategori = request('kategori');
|
||||
$kategoriHeader = request('kategori_header');
|
||||
$unitIds = is_array($unitId)
|
||||
? array_values(array_filter($unitId))
|
||||
: array_values(array_filter(explode(',', (string) $unitId)));
|
||||
$kategoriIds = is_array($kategori)
|
||||
$kategoriValues = is_array($kategori)
|
||||
? array_values(array_filter($kategori))
|
||||
: array_values(array_filter(explode(',', (string) $kategori)));
|
||||
$query = FileDirectory::where('statusenabled', true)->where('status_action', 'approved')
|
||||
->where(function($q){
|
||||
$q->where('is_akre', false)->orWhereNull('is_akre');
|
||||
})
|
||||
$kategoriHeaderValues = is_array($kategoriHeader)
|
||||
? array_values(array_filter($kategoriHeader))
|
||||
: array_values(array_filter(explode(',', (string) $kategoriHeader)));
|
||||
$allKategoriValues = array_values(array_filter(array_merge($kategoriValues, $kategoriHeaderValues)));
|
||||
$kategoriTypes = [];
|
||||
$kategoriIds = [];
|
||||
foreach ($allKategoriValues as $val) {
|
||||
$lower = strtolower(trim((string) $val));
|
||||
if (in_array($lower, ['akreditasi', 'akre'], true)) {
|
||||
$kategoriTypes[] = 'akreditasi';
|
||||
continue;
|
||||
}
|
||||
if ($lower === 'hukum') {
|
||||
$kategoriTypes[] = 'hukum';
|
||||
continue;
|
||||
}
|
||||
if ($lower === 'lainnya') {
|
||||
$kategoriTypes[] = 'lainnya';
|
||||
continue;
|
||||
}
|
||||
$kategoriIds[] = $val;
|
||||
}
|
||||
$baseQuery = FileDirectory::with('kategori')
|
||||
->where('statusenabled', true)->where('status_action', 'approved')
|
||||
->when(!empty($unitIds), function ($q) use ($unitIds) {
|
||||
$q->whereIn('id_unit_kerja', $unitIds);
|
||||
})
|
||||
->when(!empty($kategoriIds), function ($q) use ($kategoriIds) {
|
||||
$q->whereIn('master_kategori_directory_id', $kategoriIds);
|
||||
});
|
||||
|
||||
$query = (clone $baseQuery)
|
||||
->when(!empty($kategoriIds) || !empty($kategoriTypes), function ($q) use ($kategoriIds, $kategoriTypes) {
|
||||
$q->where(function ($sub) use ($kategoriIds, $kategoriTypes) {
|
||||
$hasClause = false;
|
||||
if (!empty($kategoriIds)) {
|
||||
$sub->whereIn('master_kategori_directory_id', $kategoriIds);
|
||||
$hasClause = true;
|
||||
}
|
||||
if (in_array('akreditasi', $kategoriTypes, true)) {
|
||||
$hasClause ? $sub->orWhere('is_akre', true) : $sub->where('is_akre', true);
|
||||
$hasClause = true;
|
||||
}
|
||||
if (in_array('hukum', $kategoriTypes, true)) {
|
||||
$hasClause ? $sub->orWhereNotNull('kategori_hukum') : $sub->whereNotNull('kategori_hukum');
|
||||
$hasClause = true;
|
||||
}
|
||||
if (in_array('lainnya', $kategoriTypes, true)) {
|
||||
$hasClause ? $sub->orWhereNotNull('master_kategori_directory_id') : $sub->whereNotNull('master_kategori_directory_id');
|
||||
}
|
||||
});
|
||||
})
|
||||
->when($keyword, function ($q) use ($keyword) {
|
||||
$q->where(function ($sub) use ($keyword) {
|
||||
@ -956,14 +1054,31 @@ class DashboardController extends Controller
|
||||
}
|
||||
|
||||
|
||||
|
||||
$data = $query->orderBy('entry_at', 'desc')
|
||||
->paginate($perPage);
|
||||
|
||||
$items = collect($data->items())->map(function($item){
|
||||
$item->nama_kategori = $item->kategori->nama_kategori_directory ?? $item->kategori_hukum ?? null;
|
||||
return $item;
|
||||
});
|
||||
|
||||
$kategoriList = (clone $baseQuery)->get()->map(function($item){
|
||||
if ($item->is_akre) {
|
||||
return ['id' => 'akreditasi', 'label' => 'Kategori Akreditasi'];
|
||||
}
|
||||
if (!empty($item->kategori_hukum)) {
|
||||
return ['id' => 'hukum', 'label' => 'Kategori Hukum'];
|
||||
}
|
||||
$label = $item->kategori->nama_kategori_directory ?? $item->nama_kategori_directory ?? 'Kategori';
|
||||
$id = $item->master_kategori_directory_id ?? $label;
|
||||
return ['id' => (string) $id, 'label' => $label];
|
||||
})->unique('id')->values();
|
||||
|
||||
$payload = [
|
||||
'status' => true,
|
||||
'message' => 'Berhasil mendapatkan data',
|
||||
'data' => $data->items(),
|
||||
'data' => $items,
|
||||
'kategori_list' => $kategoriList,
|
||||
'pagination' => [
|
||||
'current_page' => $data->currentPage(),
|
||||
'next_page' => $data->hasMorePages() ? $data->currentPage() + 1 : null,
|
||||
@ -1147,7 +1262,7 @@ class DashboardController extends Controller
|
||||
'status_action' => $isAtasan ? 'approved' : null
|
||||
], 200);
|
||||
} catch (\Throwable $th) {
|
||||
dd($th);
|
||||
// dd($th);
|
||||
DB::connection('dbDirectory')->rollback();
|
||||
return response()->json([
|
||||
'status' => false,
|
||||
@ -2275,7 +2390,7 @@ class DashboardController extends Controller
|
||||
{
|
||||
$keyword = $request->query('keyword');
|
||||
$perPage = (int) $request->query('per_page', 10);
|
||||
$query = FileDirectory::query()
|
||||
$query = FileDirectory::withOut('unit')
|
||||
->where('statusenabled', true)
|
||||
->where('status_action', 'approved')
|
||||
->where('is_akre', true);
|
||||
|
||||
@ -4,6 +4,8 @@ namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Models\LogActivity;
|
||||
use App\Models\UnitKerja;
|
||||
use App\Models\MasterKategori;
|
||||
|
||||
class FileDirectory extends Model
|
||||
{
|
||||
@ -12,6 +14,7 @@ class FileDirectory extends Model
|
||||
public $timestamps = false;
|
||||
protected $primaryKey = 'file_directory_id';
|
||||
protected $guarded = ['file_directory_id'];
|
||||
protected $with = ['unit'];
|
||||
|
||||
public function viewLogs()
|
||||
{
|
||||
@ -26,4 +29,16 @@ class FileDirectory extends Model
|
||||
->where('action_type', 'Download Dokumen');
|
||||
}
|
||||
|
||||
public function kategori(){
|
||||
return $this->belongsTo(MasterKategori::class, 'master_kategori_directory_id', 'master_kategori_directory_id');
|
||||
}
|
||||
|
||||
public function unit(){
|
||||
// Each file belongs to exactly one unit; skip the subUnitKerja eager load from UnitKerja.
|
||||
return $this->belongsTo(UnitKerja::class, 'id_unit_kerja', 'id')->select('id', 'name')
|
||||
->without('subUnitKerja');
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -933,19 +933,18 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Kategori Hukum</label>
|
||||
<select class="form-select select-kat-hukum" name="data[${colCount}][kategori_hukum]" id="select_kategori_hukum_${colCount}" style="width: 350px;">
|
||||
<option value="" disabled selected>Pilih Kategori Hukum</option>
|
||||
<option value="Pedir - Kebijakan">Pedir - Kebijakan</option>
|
||||
<option value="Keputusan Dirut - Kebijakan">Keputusan Dirut - Kebijakan</option>
|
||||
<option value="Surat Edaran - Kebijakan">Surat Edaran - Kebijakan</option>
|
||||
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
|
||||
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
|
||||
<option value="Management - Kerjasama">Management - Kerjasama</option>
|
||||
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
|
||||
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
|
||||
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
|
||||
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
|
||||
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
|
||||
<option value="Pengampuan KIA">Pengampuan KIA</option>
|
||||
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
|
||||
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
|
||||
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
|
||||
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
|
||||
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
|
||||
<option value="Kerjasama - Management">Kerjasama - Management</option>
|
||||
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
|
||||
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
|
||||
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
|
||||
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
|
||||
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
|
||||
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
|
||||
</select>
|
||||
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
|
||||
</div>
|
||||
|
||||
@ -781,18 +781,18 @@
|
||||
<label class="form-label fw-semibold">Kategori Hukum</label>
|
||||
<select class="form-select select-kat-hukum" name="data[${colCount}][kategori_hukum]" id="select_kategori_hukum_${colCount}" style="width: 350px;">
|
||||
<option value="">Pilih Kategori Hukum</option>
|
||||
<option value="Pedir - Kebijakan">Kebijakan - Peraturan Direktur</option>
|
||||
<option value="Keputusan Dirut - Kebijakan">Kebijakan - Keputusan Direktur Utama</option>
|
||||
<option value="Surat Edaran - Kebijakan">Kebijakan - Surat Edaran</option>
|
||||
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
|
||||
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
|
||||
<option value="Management - Kerjasama">Management - Kerjasama</option>
|
||||
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
|
||||
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
|
||||
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
|
||||
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
|
||||
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
|
||||
<option value="Pengampuan KIA">Pengampuan KIA</option>
|
||||
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
|
||||
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
|
||||
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
|
||||
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
|
||||
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
|
||||
<option value="Kerjasama - Management">Kerjasama - Management</option>
|
||||
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
|
||||
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
|
||||
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
|
||||
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
|
||||
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
|
||||
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
|
||||
</select>
|
||||
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
|
||||
</div>
|
||||
|
||||
@ -42,6 +42,21 @@
|
||||
.table-fixed-height {
|
||||
min-height: 70vh;
|
||||
}
|
||||
|
||||
/* --- Warna kategori baris --- */
|
||||
.row-shade {
|
||||
background-color: var(--row-bg, transparent) !important;
|
||||
transition: background-color 0.2s ease;
|
||||
}
|
||||
.legend-dot {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 4px;
|
||||
display: inline-block;
|
||||
border: 1px solid rgba(0,0,0,0.08);
|
||||
vertical-align: middle;
|
||||
margin-right: 6px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@section('body_main')
|
||||
@ -126,11 +141,11 @@
|
||||
<div class="d-flex align-items-center gap-2 table-header-filter">
|
||||
<span>Kategori</span>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-light btn-sm border" type="button" id="tableKategoriHeaderBtn" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<button class="btn btn-light btn-sm border" type="button" id="tableKategoriHeaderBtn" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
||||
<i class="ti ti-filter"></i>
|
||||
</button>
|
||||
<div class="dropdown-menu p-2" id="tableKategoriHeaderMenu" style="min-width: 220px;">
|
||||
<div class="small text-muted px-1">Filter kategori</div>
|
||||
<div class="small text-muted px-1">Filter kategori (BETA)</div>
|
||||
<div class="dropdown-divider"></div>
|
||||
<div class="kategori-header-list"></div>
|
||||
</div>
|
||||
@ -146,6 +161,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="d-flex flex-wrap align-items-center gap-2 mt-3">
|
||||
<div class="d-flex align-items-center gap-1">
|
||||
<span class="small text-muted">Tampilkan</span>
|
||||
@ -182,25 +198,24 @@
|
||||
const authPegawai = @json(auth()->user()->objectpegawaifk);
|
||||
const formCreate = $("#formFile")
|
||||
const modalCreate = document.getElementById('modalCreateFile')
|
||||
const tableState = { data: [], page: 1, pageSize: 8, search: '', unit: [], kategori: [], kategoriType: [], lastPage: 1, total: 0 };
|
||||
const tableState = { data: [], page: 1, pageSize: 8, search: '', unit: [], kategori: [], kategoriType: [], kategoriHeader: [], lastPage: 1, total: 0 };
|
||||
let kategoriOptionCache = [];
|
||||
const tbody = document.getElementById('tableDataUmum');
|
||||
const paginationEl = document.getElementById('paginationControls');
|
||||
const summaryEl = document.getElementById('tableSummary');
|
||||
const legendEl = document.getElementById('tableLegend');
|
||||
const pageSizeSelect = document.getElementById('tablePageSize');
|
||||
const unitSelect = document.getElementById('tableUnit');
|
||||
const kategoriSelect = document.getElementById('tableKategori');
|
||||
const kategoriHeaderMenu = document.getElementById('tableKategoriHeaderMenu');
|
||||
const kategoriTypeOptions = [
|
||||
{ id: 'akreditasi', label: 'Kategori Akreditasi' },
|
||||
{ id: 'hukum', label: 'Kategori Hukum' },
|
||||
{ id: 'lainnya', label: 'Kategori Lainnya' }
|
||||
];
|
||||
const searchInput = document.getElementById('tableSearch');
|
||||
const searchBtn = document.getElementById('btnTableSearch');
|
||||
const downloadBtn = document.getElementById('btnDownloadMultiple');
|
||||
const selectedCountEl = document.getElementById('selectedCount');
|
||||
const checkAllEl = document.getElementById('checkAllRows');
|
||||
const selectedIds = new Set();
|
||||
const colorCache = {};
|
||||
const colorPalette = ['#e8f4ff', '#fff6e5', '#e9f7ef', '#f3e8ff', '#ffe6ea', '#e6f5f3'];
|
||||
|
||||
document.addEventListener('change', function(e){
|
||||
if(!e.target.classList.contains('toggle-expired')) return;
|
||||
@ -266,9 +281,11 @@
|
||||
});
|
||||
$('#tableKategori').on('change', function () {
|
||||
const val = $(this).val() || '';
|
||||
console.log(val);
|
||||
|
||||
tableState.kategoriType = val ? [val] : [];
|
||||
tableState.page = 1;
|
||||
renderTable();
|
||||
fetchData();
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -278,12 +295,13 @@
|
||||
if (!checkbox) return;
|
||||
const selected = Array.from(kategoriHeaderMenu.querySelectorAll('input[type="checkbox"]:checked'))
|
||||
.map(el => el.value);
|
||||
tableState.kategoriType = selected;
|
||||
tableState.kategoriHeader = selected;
|
||||
if (kategoriSelect && window.$ && $.fn.select2) {
|
||||
const single = selected.length === 1 ? selected[0] : '';
|
||||
$('#tableKategori').val(single).trigger('change');
|
||||
}
|
||||
renderTable();
|
||||
tableState.page = 1;
|
||||
fetchData();
|
||||
});
|
||||
}
|
||||
|
||||
@ -302,6 +320,47 @@
|
||||
return val === '1' || val === 'true' || val === 'iya' || val === 'yes';
|
||||
}
|
||||
|
||||
function resolveKategoriFlag(item){
|
||||
if(Number(item.is_akre) === 1 || item.is_akre === true || String(item.is_akre).toLowerCase() === 'true'){
|
||||
return { key: 'akre', label: 'Kategori Akreditasi' };
|
||||
}
|
||||
if(item.kategori_hukum){
|
||||
return { key: 'hukum', label: 'Kategori Hukum' };
|
||||
}
|
||||
const label = (item.nama_kategori || item.nama_kategori_directory || item.kategori || '').trim() || 'Kategori Lainnya';
|
||||
const key = String(item.master_kategori_directory_id || label || 'lainnya');
|
||||
return { key, label };
|
||||
}
|
||||
|
||||
function pickColor(key, label){
|
||||
if(colorCache[key]) return colorCache[key];
|
||||
const index = Object.keys(colorCache).length % colorPalette.length;
|
||||
colorCache[key] = colorPalette[index];
|
||||
return colorCache[key];
|
||||
}
|
||||
|
||||
function renderLegend(items){
|
||||
if(!legendEl) return;
|
||||
const map = new Map();
|
||||
(items || []).forEach(item => {
|
||||
const flag = resolveKategoriFlag(item);
|
||||
const color = pickColor(flag.key, flag.label);
|
||||
if(!map.has(flag.key)){
|
||||
map.set(flag.key, { label: flag.label, color });
|
||||
}
|
||||
});
|
||||
if(map.size === 0){
|
||||
legendEl.textContent = '';
|
||||
return;
|
||||
}
|
||||
legendEl.innerHTML = Array.from(map.values()).map(entry => `
|
||||
<span class="me-3">
|
||||
<span class="legend-dot" style="background:${entry.color};"></span>
|
||||
<span>${entry.label}</span>
|
||||
</span>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
function getExpiryStatus(dateStr){
|
||||
if (!dateStr) return false;
|
||||
const d = new Date(dateStr);
|
||||
@ -335,12 +394,19 @@
|
||||
statusClass = 'bg-secondary';
|
||||
}
|
||||
const checked = selectedIds.has(String(item.file_directory_id)) ? 'checked' : '';
|
||||
const rowClass = expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : '');
|
||||
const kategoriFlag = resolveKategoriFlag(item);
|
||||
|
||||
const rowColor = pickColor(kategoriFlag.key, kategoriFlag.label);
|
||||
const isAkre = kategoriFlag.key === 'akre';
|
||||
const rowClass = isAkre ? 'table-info' : (expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : 'row-shade'));
|
||||
const expiryBadge = expiryStatus === 'expired'
|
||||
? `<span class="badge bg-danger" style="font-size:10px;">Expired</span>`
|
||||
: (expiryStatus === 'soon' ? `<span class="badge bg-warning text-dark" style="font-size:10px;">Akan Expired</span>` : '');
|
||||
const akreBadge = isAkre
|
||||
? `<span class="badge bg-primary text-white" style="font-size:10px;">Akreditasi</span>`
|
||||
: '';
|
||||
return `
|
||||
<tr class="${rowClass}">
|
||||
<tr class="${rowClass}" style="--row-bg:${rowColor};">
|
||||
|
||||
<td class="text-center">
|
||||
<input type="checkbox"
|
||||
@ -399,7 +465,7 @@
|
||||
word-break:break-word;
|
||||
"
|
||||
>
|
||||
${item.nama_dokumen || '-'}
|
||||
${item.nama_dokumen || '-'} ${akreBadge}
|
||||
</a>
|
||||
${expiryBadge}
|
||||
|
||||
@ -408,10 +474,10 @@
|
||||
</td>
|
||||
|
||||
<td>
|
||||
${kategoriName}
|
||||
${item.nama_kategori || '-'}
|
||||
</td>
|
||||
<td>
|
||||
${unitName}
|
||||
${item.unit?.name || '-'}
|
||||
</td>
|
||||
<td class="text-nowrap">${formatTanggal(item.entry_at)}</td>
|
||||
</tr>
|
||||
@ -485,6 +551,7 @@
|
||||
renderPagination(tableState.lastPage || 1);
|
||||
syncCheckAllState();
|
||||
updateSelectedCount();
|
||||
renderLegend(pageData);
|
||||
}
|
||||
|
||||
function applyTableSearch(){
|
||||
@ -497,31 +564,61 @@
|
||||
fetchData();
|
||||
}
|
||||
|
||||
function filterByKategoriType(items){
|
||||
const types = tableState.kategoriType || [];
|
||||
if (!types.length) return items;
|
||||
return items.filter(item => {
|
||||
return types.some(type => {
|
||||
if (type === 'akreditasi') {
|
||||
return item.is_akre === true || item.is_akre === 1 || item.is_akre === '1';
|
||||
}
|
||||
if (type === 'hukum') {
|
||||
return !!item.kategori_hukum;
|
||||
}
|
||||
if (type === 'lainnya') {
|
||||
return !!item.master_kategori_directory_id;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
function getKategoriLabel(item){
|
||||
const parts = String(item?.file || '').split('/');
|
||||
return (parts[2] || item?.nama_kategori_directory || item?.kategori || '').trim();
|
||||
}
|
||||
|
||||
function getKategoriId(item){
|
||||
const label = getKategoriLabel(item);
|
||||
return String(item?.master_kategori_directory_id || label);
|
||||
}
|
||||
|
||||
function getKategoriOptionsFromData(){
|
||||
const seen = new Map();
|
||||
(tableState.data || []).forEach(item => {
|
||||
const label = getKategoriLabel(item);
|
||||
if(!label) return;
|
||||
const id = getKategoriId(item);
|
||||
if(!seen.has(id)){
|
||||
seen.set(id, { id, label });
|
||||
}
|
||||
});
|
||||
return Array.from(seen.values()).sort((a,b) => a.label.localeCompare(b.label));
|
||||
}
|
||||
|
||||
function isKategoriMatch(item, types){
|
||||
if (!types.length) return true;
|
||||
const lowerTypes = types.map(t => String(t).toLowerCase());
|
||||
const isAkre = (item.is_akre === true) || String(item.is_akre).toLowerCase() === 'true' || Number(item.is_akre) === 1;
|
||||
const isHukum = !!item.kategori_hukum;
|
||||
const hasKategoriId = !!item.master_kategori_directory_id;
|
||||
if (isAkre && lowerTypes.includes('akreditasi')) return true;
|
||||
if (isHukum && lowerTypes.includes('hukum')) return true;
|
||||
if (!isAkre && !isHukum && hasKategoriId && lowerTypes.includes('lainnya')) return true;
|
||||
|
||||
const catId = String(getKategoriId(item)).toLowerCase();
|
||||
const catLabel = String(getKategoriLabel(item)).toLowerCase();
|
||||
return lowerTypes.includes(catId) || lowerTypes.includes(catLabel);
|
||||
}
|
||||
|
||||
function filterByKategoriType(items){
|
||||
const types = (tableState.kategoriType || []).map(v => String(v));
|
||||
if (!types.length) return items;
|
||||
return items.filter(item => isKategoriMatch(item, types));
|
||||
}
|
||||
|
||||
function renderKategoriHeaderOptions(){
|
||||
if (!kategoriHeaderMenu) return;
|
||||
const list = kategoriHeaderMenu.querySelector('.kategori-header-list');
|
||||
if (!list) return;
|
||||
const selected = (tableState.kategoriType || []).map(v => String(v));
|
||||
list.innerHTML = kategoriTypeOptions.map(opt => {
|
||||
const options = kategoriOptionCache.length ? kategoriOptionCache : getKategoriOptionsFromData();
|
||||
const selected = (tableState.kategoriHeader || []).map(v => String(v));
|
||||
if(options.length === 0){
|
||||
list.innerHTML = '<div class=\"dropdown-item text-muted\">Tidak ada kategori</div>';
|
||||
return;
|
||||
}
|
||||
list.innerHTML = options.map(opt => {
|
||||
const checked = selected.includes(opt.id) ? 'checked' : '';
|
||||
return `
|
||||
<label class="dropdown-item d-flex align-items-center gap-2">
|
||||
@ -543,12 +640,20 @@
|
||||
if (tableState.unit && tableState.unit.length > 0) {
|
||||
tableState.unit.forEach(id => params.append('unit[]', id));
|
||||
}
|
||||
if (tableState.kategoriType && tableState.kategoriType.length > 0) {
|
||||
tableState.kategoriType.forEach(id => params.append('kategori[]', id));
|
||||
}
|
||||
if (tableState.kategoriHeader && tableState.kategoriHeader.length > 0) {
|
||||
tableState.kategoriHeader.forEach(id => params.append('kategori_header[]', id));
|
||||
}
|
||||
fetch(`/datatable-umum?${params.toString()}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
tableState.data = data?.data || [];
|
||||
kategoriOptionCache = data?.kategori_list || kategoriOptionCache;
|
||||
tableState.lastPage = data?.pagination?.last_page || 1;
|
||||
tableState.total = data?.pagination?.total || 0;
|
||||
renderKategoriHeaderOptions();
|
||||
renderTable();
|
||||
})
|
||||
.catch(error => {
|
||||
|
||||
@ -41,6 +41,21 @@
|
||||
.table-fixed-height {
|
||||
min-height: 70vh;
|
||||
}
|
||||
|
||||
/* --- Warna kategori baris --- */
|
||||
.row-shade {
|
||||
background-color: var(--row-bg, transparent) !important;
|
||||
transition: background-color 0.2s ease;
|
||||
}
|
||||
.legend-dot {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 4px;
|
||||
display: inline-block;
|
||||
border: 1px solid rgba(0,0,0,0.08);
|
||||
vertical-align: middle;
|
||||
margin-right: 6px;
|
||||
}
|
||||
</style>
|
||||
@section('body_main')
|
||||
<div class="row">
|
||||
@ -120,11 +135,11 @@
|
||||
<div class="d-flex align-items-center gap-2 table-header-filter">
|
||||
<span>Kategori</span>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-light btn-sm border" type="button" id="tableKategoriHeaderBtn" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<button class="btn btn-light btn-sm border" type="button" id="tableKategoriHeaderBtn" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
||||
<i class="ti ti-filter"></i>
|
||||
</button>
|
||||
<div class="dropdown-menu p-2" id="tableKategoriHeaderMenu" style="min-width: 220px;">
|
||||
<div class="small text-muted px-1">Filter kategori</div>
|
||||
<div class="small text-muted px-1">Filter kategori (BETA)</div>
|
||||
<div class="dropdown-divider"></div>
|
||||
<div class="kategori-header-list"></div>
|
||||
</div>
|
||||
@ -141,6 +156,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="d-flex flex-wrap align-items-center gap-2 mt-3">
|
||||
<div class="d-flex align-items-center gap-1">
|
||||
<span class="small text-muted">Tampilkan</span>
|
||||
@ -183,25 +199,24 @@
|
||||
const authPegawai = @json(auth()->user()->objectpegawaifk);
|
||||
const formCreate = $("#formFile");
|
||||
const modalCreate = document.getElementById('modalCreateFile');
|
||||
const tableState = { data: [], page: 1, pageSize: 8, search: '', unit: [], kategori: [], kategoriType: [], lastPage: 1, total: 0 };
|
||||
const tableState = { data: [], page: 1, pageSize: 8, search: '', unit: [], kategori: [], kategoriType: [], kategoriHeader: [], lastPage: 1, total: 0 };
|
||||
let kategoriOptionCache = [];
|
||||
const tbody = document.getElementById('tableDataUnit');
|
||||
const paginationEl = document.getElementById('paginationControls');
|
||||
const summaryEl = document.getElementById('tableSummary');
|
||||
const legendEl = document.getElementById('tableLegend');
|
||||
const pageSizeSelect = document.getElementById('tablePageSize');
|
||||
const unitSelect = document.getElementById('tableUnit');
|
||||
const kategoriSelect = document.getElementById('tableKategori');
|
||||
const kategoriHeaderMenu = document.getElementById('tableKategoriHeaderMenu');
|
||||
const kategoriTypeOptions = [
|
||||
{ id: 'akreditasi', label: 'Kategori Akreditasi' },
|
||||
{ id: 'hukum', label: 'Kategori Hukum' },
|
||||
{ id: 'lainnya', label: 'Kategori Lainnya' }
|
||||
];
|
||||
const searchInput = document.getElementById('tableSearch');
|
||||
const searchBtn = document.getElementById('btnTableSearch');
|
||||
const downloadBtn = document.getElementById('btnDownloadMultiple');
|
||||
const selectedCountEl = document.getElementById('selectedCount');
|
||||
const checkAllEl = document.getElementById('checkAllRows');
|
||||
const selectedIds = new Set();
|
||||
const colorCache = {};
|
||||
const colorPalette = ['#e8f4ff', '#fff6e5', '#e9f7ef', '#f3e8ff', '#ffe6ea', '#e6f5f3'];
|
||||
|
||||
document.addEventListener('change', function(e){
|
||||
if(!e.target.classList.contains('toggle-expired')) return;
|
||||
@ -267,7 +282,7 @@
|
||||
const val = $(this).val() || '';
|
||||
tableState.kategoriType = val ? [val] : [];
|
||||
tableState.page = 1;
|
||||
renderTable();
|
||||
fetchData();
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -277,12 +292,13 @@
|
||||
if (!checkbox) return;
|
||||
const selected = Array.from(kategoriHeaderMenu.querySelectorAll('input[type="checkbox"]:checked'))
|
||||
.map(el => el.value);
|
||||
tableState.kategoriType = selected;
|
||||
tableState.kategoriHeader = selected;
|
||||
if (kategoriSelect && window.$ && $.fn.select2) {
|
||||
const single = selected.length === 1 ? selected[0] : '';
|
||||
$('#tableKategori').val(single).trigger('change');
|
||||
}
|
||||
renderTable();
|
||||
tableState.page = 1;
|
||||
fetchData();
|
||||
});
|
||||
}
|
||||
|
||||
@ -434,6 +450,47 @@
|
||||
return val === '1' || val === 'true' || val === 'iya' || val === 'yes';
|
||||
}
|
||||
|
||||
function resolveKategoriFlag(item){
|
||||
if(Number(item.is_akre) === 1 || item.is_akre === true || String(item.is_akre).toLowerCase() === 'true'){
|
||||
return { key: 'akre', label: 'Kategori Akreditasi' };
|
||||
}
|
||||
if(item.kategori_hukum){
|
||||
return { key: 'hukum', label: 'Kategori Hukum' };
|
||||
}
|
||||
const label = (item.nama_kategori || item.nama_kategori_directory || item.kategori || '').trim() || 'Kategori Lainnya';
|
||||
const key = String(item.master_kategori_directory_id || label || 'lainnya');
|
||||
return { key, label };
|
||||
}
|
||||
|
||||
function pickColor(key, label){
|
||||
if(colorCache[key]) return colorCache[key];
|
||||
const index = Object.keys(colorCache).length % colorPalette.length;
|
||||
colorCache[key] = colorPalette[index];
|
||||
return colorCache[key];
|
||||
}
|
||||
|
||||
function renderLegend(items){
|
||||
if(!legendEl) return;
|
||||
const map = new Map();
|
||||
(items || []).forEach(item => {
|
||||
const flag = resolveKategoriFlag(item);
|
||||
const color = pickColor(flag.key, flag.label);
|
||||
if(!map.has(flag.key)){
|
||||
map.set(flag.key, { label: flag.label, color });
|
||||
}
|
||||
});
|
||||
if(map.size === 0){
|
||||
legendEl.textContent = '';
|
||||
return;
|
||||
}
|
||||
legendEl.innerHTML = Array.from(map.values()).map(entry => `
|
||||
<span class="me-3">
|
||||
<span class="legend-dot" style="background:${entry.color};"></span>
|
||||
<span>${entry.label}</span>
|
||||
</span>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
function getExpiryStatus(dateStr){
|
||||
if (!dateStr) return false;
|
||||
const d = new Date(dateStr);
|
||||
@ -467,12 +524,18 @@
|
||||
statusClass = 'bg-secondary';
|
||||
}
|
||||
const checked = selectedIds.has(String(item.file_directory_id)) ? 'checked' : '';
|
||||
const rowClass = expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : '');
|
||||
const kategoriFlag = resolveKategoriFlag(item);
|
||||
const rowColor = pickColor(kategoriFlag.key, kategoriFlag.label);
|
||||
const isAkre = kategoriFlag.key === 'akre';
|
||||
const rowClass = isAkre ? 'table-info' : (expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : 'row-shade'));
|
||||
const expiryBadge = expiryStatus === 'expired'
|
||||
? `<span class="badge bg-danger" style="font-size:10px;">Expired</span>`
|
||||
: (expiryStatus === 'soon' ? `<span class="badge bg-warning text-dark" style="font-size:10px;">Akan Expired</span>` : '');
|
||||
const akreBadge = isAkre
|
||||
? `<span class="badge bg-primary text-white ms-2" style="font-size:10px;">Akreditasi</span>`
|
||||
: '';
|
||||
return `
|
||||
<tr class="${rowClass}">
|
||||
<tr class="${rowClass}" style="--row-bg:${rowColor};">
|
||||
<td class="text-center">
|
||||
<input type="checkbox"
|
||||
class="form-check-input row-check"
|
||||
@ -521,14 +584,14 @@
|
||||
>
|
||||
${item.nama_dokumen || '-'}
|
||||
</a>
|
||||
${expiryBadge}
|
||||
${akreBadge}${expiryBadge}
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
${kategoriName}
|
||||
${item.nama_kategori || '-'}
|
||||
</td>
|
||||
<td>
|
||||
${unitName}
|
||||
${item.unit?.name || '-'}
|
||||
</td>
|
||||
<td class="text-nowrap">${formatTanggal(item.entry_at)}</td>
|
||||
<td class="text-nowrap">${item.pegawai_nama_entry || '-'}</td>
|
||||
@ -603,6 +666,7 @@
|
||||
renderPagination(tableState.lastPage || 1);
|
||||
syncCheckAllState();
|
||||
updateSelectedCount();
|
||||
renderLegend(pageData);
|
||||
}
|
||||
|
||||
function applyTableSearch(){
|
||||
@ -615,34 +679,66 @@
|
||||
fetchData();
|
||||
}
|
||||
|
||||
function filterByKategoriType(items){
|
||||
const types = tableState.kategoriType || [];
|
||||
if (!types.length) return items;
|
||||
return items.filter(item => {
|
||||
return types.some(type => {
|
||||
if (type === 'akreditasi') {
|
||||
return item.is_akre === true || item.is_akre === 1 || item.is_akre === '1';
|
||||
}
|
||||
if (type === 'hukum') {
|
||||
return !!item.kategori_hukum;
|
||||
}
|
||||
if (type === 'lainnya') {
|
||||
return !!item.master_kategori_directory_id;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
function getKategoriLabel(item){
|
||||
const parts = String(item?.file || '').split('/');
|
||||
return (item?.nama_kategori || parts[2] || item?.nama_kategori_directory || item?.kategori || '').trim();
|
||||
}
|
||||
|
||||
function getKategoriId(item){
|
||||
const label = getKategoriLabel(item);
|
||||
return String(item?.master_kategori_directory_id || label);
|
||||
}
|
||||
|
||||
function getKategoriOptionsFromData(){
|
||||
const seen = new Map();
|
||||
(tableState.data || []).forEach(item => {
|
||||
const label = getKategoriLabel(item);
|
||||
if(!label) return;
|
||||
const id = getKategoriId(item);
|
||||
if(!seen.has(id)){
|
||||
seen.set(id, { id, label });
|
||||
}
|
||||
});
|
||||
return Array.from(seen.values()).sort((a,b) => a.label.localeCompare(b.label));
|
||||
}
|
||||
|
||||
function isKategoriMatch(item, types){
|
||||
if (!types.length) return true;
|
||||
const lowerTypes = types.map(t => String(t).toLowerCase());
|
||||
const isAkre = (item.is_akre === true) || String(item.is_akre).toLowerCase() === 'true' || Number(item.is_akre) === 1;
|
||||
const isHukum = !!item.kategori_hukum;
|
||||
const hasKategoriId = !!item.master_kategori_directory_id;
|
||||
// special buckets
|
||||
if (isAkre && lowerTypes.includes('akreditasi')) return true;
|
||||
if (isHukum && lowerTypes.includes('hukum')) return true;
|
||||
if (!isAkre && !isHukum && hasKategoriId && lowerTypes.includes('lainnya')) return true;
|
||||
|
||||
// fallback to id/label comparison
|
||||
const catId = String(getKategoriId(item)).toLowerCase();
|
||||
const catLabel = String(getKategoriLabel(item)).toLowerCase();
|
||||
return lowerTypes.includes(catId) || lowerTypes.includes(catLabel);
|
||||
}
|
||||
|
||||
function filterByKategoriType(items){
|
||||
const types = (tableState.kategoriType || []).map(v => String(v));
|
||||
if (!types.length) return items;
|
||||
return items.filter(item => isKategoriMatch(item, types));
|
||||
}
|
||||
|
||||
function renderKategoriHeaderOptions(){
|
||||
if (!kategoriHeaderMenu) return;
|
||||
const list = kategoriHeaderMenu.querySelector('.kategori-header-list');
|
||||
if (!list) return;
|
||||
const selected = (tableState.kategoriType || []).map(v => String(v));
|
||||
list.innerHTML = kategoriTypeOptions.map(opt => {
|
||||
const options = kategoriOptionCache.length ? kategoriOptionCache : getKategoriOptionsFromData();
|
||||
const selected = (tableState.kategoriHeader || []).map(v => String(v));
|
||||
if(options.length === 0){
|
||||
list.innerHTML = '<div class=\"dropdown-item text-muted\">Tidak ada kategori</div>';
|
||||
return;
|
||||
}
|
||||
list.innerHTML = options.map(opt => {
|
||||
const checked = selected.includes(opt.id) ? 'checked' : '';
|
||||
return `
|
||||
<label class="dropdown-item d-flex align-items-center gap-2">
|
||||
<label class="dropdown-item d-flex align-items-center gap-2 kategori-option" data-kat="${opt.id}">
|
||||
<input type="checkbox" class="form-check-input m-0" value="${opt.id}" ${checked}>
|
||||
<span>${opt.label}</span>
|
||||
</label>
|
||||
@ -650,6 +746,27 @@
|
||||
}).join('');
|
||||
}
|
||||
|
||||
if (kategoriHeaderMenu) {
|
||||
kategoriHeaderMenu.addEventListener('click', function(e){
|
||||
const option = e.target.closest('.kategori-option');
|
||||
if (!option) return;
|
||||
const id = option.getAttribute('data-kat');
|
||||
const checkbox = option.querySelector('input[type="checkbox"]');
|
||||
if(checkbox){
|
||||
checkbox.checked = !checkbox.checked;
|
||||
const event = new Event('change', { bubbles: true });
|
||||
checkbox.dispatchEvent(event);
|
||||
}else{
|
||||
tableState.kategoriHeader = [id];
|
||||
if (kategoriSelect && window.$ && $.fn.select2) {
|
||||
$('#tableKategori').val(id).trigger('change');
|
||||
}
|
||||
tableState.page = 1;
|
||||
fetchData();
|
||||
}
|
||||
}, true);
|
||||
}
|
||||
|
||||
|
||||
function fetchData(){
|
||||
if(summaryEl) summaryEl.textContent = 'Memuat data...';
|
||||
@ -661,12 +778,20 @@
|
||||
if (tableState.unit && tableState.unit.length > 0) {
|
||||
tableState.unit.forEach(id => params.append('unit[]', id));
|
||||
}
|
||||
if (tableState.kategoriType && tableState.kategoriType.length > 0) {
|
||||
tableState.kategoriType.forEach(id => params.append('kategori[]', id));
|
||||
}
|
||||
if (tableState.kategoriHeader && tableState.kategoriHeader.length > 0) {
|
||||
tableState.kategoriHeader.forEach(id => params.append('kategori_header[]', id));
|
||||
}
|
||||
fetch(`/data-internal?${params.toString()}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
tableState.data = data?.data || [];
|
||||
kategoriOptionCache = data?.kategori_list || kategoriOptionCache;
|
||||
tableState.lastPage = data?.pagination?.last_page || 1;
|
||||
tableState.total = data?.pagination?.total || 0;
|
||||
renderKategoriHeaderOptions();
|
||||
renderTable();
|
||||
})
|
||||
.catch(error => {
|
||||
@ -985,18 +1110,18 @@
|
||||
<label class="form-label fw-semibold">Kategori Hukum</label>
|
||||
<select class="form-select select-kat-hukum" name="data[${colCount}][kategori_hukum]" id="select_kategori_hukum_${colCount}" style="width: 350px;">
|
||||
<option value="" disabled selected>Pilih Kategori Hukum</option>
|
||||
<option value="Pedir - Kebijakan">Pedir - Kebijakan</option>
|
||||
<option value="Keputusan Dirut - Kebijakan">Keputusan Dirut - Kebijakan</option>
|
||||
<option value="Surat Edaran - Kebijakan">Surat Edaran - Kebijakan</option>
|
||||
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
|
||||
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
|
||||
<option value="Management - Kerjasama">Management - Kerjasama</option>
|
||||
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
|
||||
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
|
||||
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
|
||||
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
|
||||
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
|
||||
<option value="Pengampuan KIA">Pengampuan KIA</option>
|
||||
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
|
||||
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
|
||||
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
|
||||
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
|
||||
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
|
||||
<option value="Kerjasama - Management">Kerjasama - Management</option>
|
||||
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
|
||||
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
|
||||
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
|
||||
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
|
||||
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
|
||||
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
|
||||
</select>
|
||||
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
|
||||
</div>
|
||||
|
||||
@ -87,18 +87,18 @@
|
||||
<label class="form-label fw-semibold">Kategori Hukum</label>
|
||||
<select class="form-select select-kat-hukum" name="data[0][kategori_hukum]" id="select_kategori_hukum_0" style="width: 350px;">
|
||||
<option value="">Pilih Kategori Hukum</option>
|
||||
<option value="Pedir - Kebijakan">Pedir - Kebijakan</option>
|
||||
<option value="Keputusan Dirut - Kebijakan">Keputusan Dirut - Kebijakan</option>
|
||||
<option value="Surat Edaran - Kebijakan">Surat Edaran - Kebijakan</option>
|
||||
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
|
||||
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
|
||||
<option value="Management - Kerjasama">Management - Kerjasama</option>
|
||||
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
|
||||
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
|
||||
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
|
||||
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
|
||||
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
|
||||
<option value="Pengampuan KIA">Pengampuan KIA</option>
|
||||
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
|
||||
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
|
||||
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
|
||||
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
|
||||
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
|
||||
<option value="Kerjasama - Management">Kerjasama - Management</option>
|
||||
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
|
||||
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
|
||||
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
|
||||
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
|
||||
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
|
||||
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
|
||||
</select>
|
||||
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
|
||||
</div>
|
||||
|
||||
@ -41,13 +41,14 @@
|
||||
<span class="hide-menu">Dokumen Umum</span>
|
||||
</a>
|
||||
</li>
|
||||
@if(auth()->user()->dataUser->mappingUnitKerjaPegawai()->where('objectunitkerjapegawaifk', 51)->exists())
|
||||
<li class="sidebar-item">
|
||||
<a class="sidebar-link" href="{{ url('/data-akreditasi') }}" aria-expanded="false">
|
||||
<i class="fa-solid fa-sliders"></i>
|
||||
<span class="hide-menu">Dokumen Akreditasi</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@endif
|
||||
{{-- AKTIVITAS --}}
|
||||
<li class="nav-small-cap"><span class="hide-menu">Aktivitas</span></li>
|
||||
|
||||
|
||||
@ -80,19 +80,19 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-semibold">Kategori Hukum</label>
|
||||
<select class="form-select select-kat-hukum" name="kategori_hukum" id="edit_kategori_hukum" style="width: 350px;">
|
||||
<option value="">Pilih Kategori Hukum</option>
|
||||
<option value="Pedir - Kebijakan">Pedir - Kebijakan</option>
|
||||
<option value="Keputusan Dirut - Kebijakan">Keputusan Dirut - Kebijakan</option>
|
||||
<option value="Surat Edaran - Kebijakan">Surat Edaran - Kebijakan</option>
|
||||
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
|
||||
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
|
||||
<option value="Management - Kerjasama">Management - Kerjasama</option>
|
||||
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
|
||||
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
|
||||
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
|
||||
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
|
||||
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
|
||||
<option value="Pengampuan KIA">Pengampuan KIA</option>
|
||||
<option value="">Pilih Kategori Hukum</option>
|
||||
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
|
||||
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
|
||||
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
|
||||
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
|
||||
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
|
||||
<option value="Kerjasama - Management">Kerjasama - Management</option>
|
||||
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
|
||||
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
|
||||
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
|
||||
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
|
||||
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
|
||||
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
|
||||
</select>
|
||||
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user