From 6fa55f083b889810bf2b0973337607775e135c52 Mon Sep 17 00:00:00 2001 From: JokoPrasetio Date: Thu, 5 Mar 2026 14:49:18 +0700 Subject: [PATCH] on progress --- app/Http/Controllers/DashboardController.php | 40 +- public/js/pengajuanFile/index.js | 205 +++-- .../views/dataAkreditasi/index.blade.php | 781 +++++++++++++++--- resources/views/dataUmum/index.blade.php | 113 ++- resources/views/dataUnit/index.blade.php | 133 ++- .../views/dataUnit/modal/create.blade.php | 6 +- .../views/layout/partials/sidenav.blade.php | 2 +- .../views/pengajuanFile/modal/edit.blade.php | 59 +- 8 files changed, 1087 insertions(+), 252 deletions(-) diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 3619570..2f074b0 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -1060,22 +1060,23 @@ class DashboardController extends Controller foreach ($datas as $index => $data) { list($id_unit_kerja, $nama_unit_kerja) = explode('/', $data['id_unit_kerja'],2); list($id_sub_unit_kerja, $nama_sub_unit_kerja) = explode('/', $data['id_sub_unit_kerja'],2); - if($data['is_akre'] === "1"){ - $path = "{$data['akre_type']}/{$data['akre_segment']}/{$data['akre_item']}"; + if(isset($data['akre'])){ + $path = $data['akre']; }else{ - list($master_kategori_directory_id, $nama_kategori) = explode('/', $data['master_kategori_directory_id'],2); - $path = "{$nama_unit_kerja}/{$nama_sub_unit_kerja}/{$nama_kategori}"; + if(isset($data['master_kategori_directory_id'])){ + list($master_kategori_directory_id, $nama_kategori) = explode('/', $data['master_kategori_directory_id'],2); + $path = "{$nama_unit_kerja}/{$nama_sub_unit_kerja}/{$nama_kategori}"; + }else{ + $path = "{$nama_unit_kerja}/{$nama_sub_unit_kerja}"; + } } $uploadedFile = request()->file("data.$index.file"); if(!$uploadedFile){ - throw new \RuntimeException('File wajib diunggah pada baris ke-' . ($index+1)); + throw new \RuntimeException('File wajib diunggah pada segment ke-' . ($index+1)); } if (!$uploadedFile->isValid()) { - throw new \RuntimeException('Upload file gagal pada baris ke-' . ($index+1)); - } - if ($uploadedFile->getSize() > $maxUploadBytes) { - throw new \RuntimeException('Ukuran file maksimal 10MB pada baris ke-' . ($index+1)); + throw new \RuntimeException('Upload file gagal pada segment ke-' . ($index+1)); } $status = $isAtasan ? 'approved' : null; @@ -1093,7 +1094,8 @@ class DashboardController extends Controller 'status_action' => $status, 'action_by' => $status && $status === "approved" ? auth()->user()->objectpegawaifk : null, 'action_at' => $status && $status === "approved" ? now() : null, - 'is_akre' => ($data['is_akre'] ?? null) == "1" + 'is_akre' => isset($data['akre']), + 'kategori_hukum' => isset($data['kategori_hukum']) ? $data['kategori_hukum'] : null ]; $fd = FileDirectory::create($payload); @@ -1112,7 +1114,6 @@ class DashboardController extends Controller $fd->update([ 'file' => $path . '/' . $imageName ]); - if(!$isAtasan){ $uploaderName = auth()->user()?->dataUser?->namalengkap ?? 'Pengguna'; $docNumber = $fd->no_dokumen ? 'nomor '. $fd->no_dokumen : $imageName; @@ -1146,6 +1147,7 @@ class DashboardController extends Controller 'status_action' => $isAtasan ? 'approved' : null ], 200); } catch (\Throwable $th) { + dd($th); DB::connection('dbDirectory')->rollback(); return response()->json([ 'status' => false, @@ -1522,7 +1524,7 @@ class DashboardController extends Controller 'pegawai_nama_entry' => $item->pegawai_nama_entry, 'part' => $dataSlice[0], 'folder' => $dataSlice[2], - 'fileName' =>$dataSlice[3], + 'fileName' => isset($dataSlice[3]) ? $dataSlice[3] : null, 'file' => $item->file, 'nama_dokumen' => $item->nama_dokumen ?? '-', 'tgl_expired' => $item->tgl_expired, @@ -1530,7 +1532,10 @@ class DashboardController extends Controller 'entry_at' => $item->entry_at, 'tanggal_terbit' => $item->tanggal_terbit, 'permission_file' => $item->permission_file, - 'status_action' => $item->status_action + 'status_action' => $item->status_action, + 'id_unit_kerja' => $item->id_unit_kerja, + 'id_sub_unit_kerja' => $item->id_sub_unit_kerja, + 'master_kategori_directory_id' => $item->master_kategori_directory_id ]; }); return response()->json([ @@ -1903,7 +1908,7 @@ class DashboardController extends Controller 'pegawai_nama_entry' => $item->pegawai_nama_entry, 'part' => $dataSlice[0], 'folder' => $dataSlice[2], - 'fileName' =>$dataSlice[3], + 'fileName' => isset($dataSlice[3]) ? $dataSlice[3] : null, 'file' => $item->file, 'no_dokumen' => $item->no_dokumen, 'nama_dokumen' => $item->nama_dokumen, @@ -1916,7 +1921,8 @@ class DashboardController extends Controller 'id_unit_kerja' => $item->id_unit_kerja, 'id_sub_unit_kerja' => $item->id_sub_unit_kerja, 'master_kategori_directory_id' => $item->master_kategori_directory_id, - 'is_akre' => $item->is_akre + 'is_akre' => $item->is_akre, + 'kategori_hukum' => $item->kategori_hukum ]; }); return response()->json([ @@ -2255,8 +2261,12 @@ class DashboardController extends Controller } public function dataAkreditasi(){ + $katDok = MasterKategori::where('statusenabled', true) + ->select('master_kategori_directory_id', 'nama_kategori_directory') + ->get(); $data = [ 'title' => 'Akreditasi', + 'katDok' => $katDok ]; return view('dataAkreditasi.index', $data); } diff --git a/public/js/pengajuanFile/index.js b/public/js/pengajuanFile/index.js index 339448a..de47c20 100644 --- a/public/js/pengajuanFile/index.js +++ b/public/js/pengajuanFile/index.js @@ -62,8 +62,6 @@ document.addEventListener('DOMContentLoaded', () => { } function buildRow(item){ - console.log(item); - let tanggal = item.entry_at ? formatTanggal(item.entry_at) : '-'; let tanggalExp = item.tgl_expired ? formatTanggal(item.tgl_expired) : '-'; let tanggalTerbit = item.tanggal_terbit ? formatTanggal(item.tanggal_terbit) : '-'; @@ -370,6 +368,47 @@ document.addEventListener('DOMContentLoaded', () => { } + function byId(id){ + return document.getElementById(id); + } + + function setInputValue(el, value){ + if (!el) return; + el.value = value ?? ''; + } + + function setTextValue(el, value){ + if (!el) return; + el.textContent = value || ''; + } + + function setChecked(el, value){ + if (!el) return; + el.checked = !!value; + } + + function setSelectValue(selectEl, value, label){ + if (!selectEl) return; + if (value === undefined || value === null || value === '') { + selectEl.value = ''; + return; + } + const exists = Array.from(selectEl.options).some(opt => opt.value === value); + if (!exists) { + selectEl.append(new Option(label || value, value, true, true)); + } + selectEl.value = value; + } + + function triggerSelect2(selectEl){ + if (window.$ && $.fn.select2) $(selectEl).trigger('change'); + } + + function initSelect2($el, options){ + if (!$el || !$el.length || !window.$ || !$.fn.select2) return; + $el.select2(options); + } + function initEditSelects(){ if (editUnitSelect.length) { editUnitSelect.select2({ @@ -415,6 +454,37 @@ document.addEventListener('DOMContentLoaded', () => { }); } + let akreData = []; + let akreLoaded = false; + let akreFlat = []; + + function initEditExtraSelects(){ + const akreSelect = byId('edit_akre_select'); + if (akreSelect) { + loadAkreData().then(() => { + fillAkreSelect(akreSelect); + initSelect2($(akreSelect), { + dropdownParent: $('#modalEditPengajuanFile'), + placeholder: 'Pilih Instrumen', + allowClear: true + }); + }); + } + + const editKat = $('#edit_kategori'); + const editHukum = $('#edit_kategori_hukum'); + initSelect2(editKat, { + dropdownParent: $('#modalEditPengajuanFile'), + placeholder: 'Pilih Kategori', + allowClear: true + }); + initSelect2(editHukum, { + dropdownParent: $('#modalEditPengajuanFile'), + placeholder: 'Pilih Kategori Hukum', + allowClear: true + }); + } + function loadEditSubUnit(unitId, selectedSubId, selectedSubName){ editSubUnitSelect.empty().append(''); if (!unitId) return; @@ -438,69 +508,71 @@ document.addEventListener('DOMContentLoaded', () => { }); } + function setEditAkreValue(value){ + const akreEl = byId('edit_akre_select'); + if (!akreEl) return; + loadAkreData().then(() => { + fillAkreSelect(akreEl); + setSelectValue(akreEl, value, value); + triggerSelect2(akreEl); + }); + } + + function setEditKategoriHukum(value){ + const hukumEl = byId('edit_kategori_hukum'); + if (!hukumEl) return; + setSelectValue(hukumEl, value, value); + triggerSelect2(hukumEl); + } + + function setEditKategoriDir(item, kategoriName){ + const katEl = byId('edit_kategori'); + if (!katEl || !item.master_kategori_directory_id) return; + const katVal = `${item.master_kategori_directory_id}/${kategoriName}`; + setSelectValue(katEl, katVal, kategoriName || 'Kategori'); + triggerSelect2(katEl); + } + window.editFileReject = function(id){ const item = getItemById(id); if (!item) { Swal.fire({ icon: 'error', title: 'Gagal', text: 'Data tidak ditemukan.' }); return; } - const idEl = document.getElementById('edit_file_directory_id'); - const noEl = document.getElementById('edit_no_dokumen'); - const namaEl = document.getElementById('edit_nama_dokumen'); - const tglEl = document.getElementById('edit_tanggal_terbit'); - const tglExpiredEl = document.getElementById('edit_tgl_expired'); - const hasExpiredEl = document.getElementById('edit_has_expired'); - const currentFileEl = document.getElementById('edit_current_file'); - const permYes = document.getElementById('edit_perm_yes'); - const permNo = document.getElementById('edit_perm_no'); - const katEl = document.getElementById('edit_kategori'); + setInputValue(byId('edit_file_directory_id'), item.file_directory_id); + setInputValue(byId('edit_no_dokumen'), item.no_dokumen); + setInputValue(byId('edit_nama_dokumen'), item.nama_dokumen); + setInputValue(byId('edit_tanggal_terbit'), item.tanggal_terbit); + setInputValue(byId('edit_tgl_expired'), item.tgl_expired); - if (idEl) idEl.value = item.file_directory_id || ''; - if (noEl) noEl.value = item.no_dokumen || ''; - if (namaEl) namaEl.value = item.nama_dokumen || ''; - if (tglEl) tglEl.value = item.tanggal_terbit || ''; - if (tglExpiredEl) tglExpiredEl.value = item.tgl_expired || ''; - if (permYes && permNo) { - const isPublic = item.permission_file === true || item.permission_file === 1 || item.permission_file === '1'; - permYes.checked = isPublic; - permNo.checked = !isPublic; - } - if (hasExpiredEl && tglExpiredEl) { - const hasExpired = !!item.tgl_expired; - hasExpiredEl.checked = hasExpired; - syncEditExpiredField(); - } - if (currentFileEl) { - const displayName = item.fileName || (item.file ? String(item.file).split('/').pop() : ''); - currentFileEl.textContent = displayName ? `File saat ini: ${displayName}` : ''; - } + const isPublic = item.permission_file === true || item.permission_file === 1 || item.permission_file === '1'; + setChecked(byId('edit_perm_yes'), isPublic); + setChecked(byId('edit_perm_no'), !isPublic); + + const hasExpired = !!item.tgl_expired; + setChecked(byId('edit_has_expired'), hasExpired); + syncEditExpiredField(); + + const displayName = item.fileName || (item.file ? String(item.file).split('/').pop() : ''); + setTextValue(byId('edit_current_file'), displayName ? `File saat ini: ${displayName}` : ''); const parts = (item.file || '').split('/'); - const unitName = parts[0] || ''; - const subName = parts[1] || ''; const kategoriName = parts[2] || ''; + const unitName = item.unit_kerja_name || item.nama_unit_kerja || item.unit_name || item.unit_kerja || ''; if (editUnitSelect.length && item.id_unit_kerja) { - const unitVal = `${item.id_unit_kerja}/${unitName}`; - editUnitSelect.append(new Option(unitName || 'Unit', unitVal, true, true)).trigger('change'); - const unitId = String(item.id_unit_kerja); - loadEditSubUnit(unitId, item.id_sub_unit_kerja, subName); + const unitLabel = unitName || `Unit ${item.id_unit_kerja}`; + const unitVal = `${item.id_unit_kerja}/${unitLabel}`; + setSelectValue(editUnitSelect[0], unitVal, unitLabel); + editUnitSelect.trigger('change'); + loadEditSubUnit(String(item.id_unit_kerja), item.id_sub_unit_kerja, null); } - if (katEl && item.master_kategori_directory_id) { - const katVal = `${item.master_kategori_directory_id}/${kategoriName}`; - if (katEl.querySelector(`option[value="${katVal}"]`)) { - katEl.value = katVal; - } else { - katEl.append(new Option(kategoriName || 'Kategori', katVal, true, true)); - katEl.value = katVal; - } - } + setEditKategoriDir(item, kategoriName); + if (item.kategori_hukum) setEditKategoriHukum(item.kategori_hukum); + setEditAkreValue(item.akre || ''); - const modalEl = document.getElementById('modalEditPengajuanFile'); - if (modalEl) { - $("#modalEditPengajuanFile").modal('show'); - } + $("#modalEditPengajuanFile").modal('show'); } function syncEditExpiredField() { @@ -559,6 +631,7 @@ document.addEventListener('DOMContentLoaded', () => { } initEditSelects(); + initEditExtraSelects(); updateTabUI(); fetchData(); @@ -586,10 +659,6 @@ document.addEventListener('DOMContentLoaded', () => { enableAkreFields(0); } - let akreData = []; - let akreLoaded = false; - let akreFlat = []; - function loadAkreData(){ if(akreLoaded) return Promise.resolve(akreData); return fetch('/json/akreditasi.json') @@ -616,7 +685,7 @@ document.addEventListener('DOMContentLoaded', () => { const children = Array.isArray(seg.turunan) ? seg.turunan : []; return children.map(child => ({ value: `${type.name}/${seg.name}/${child.name}`, - label: `${type.name} / ${seg.name} / ${child.name}`, + label: `${type.name} / ${child.name}`, type: type.name, segment: seg.name, item: child.name @@ -628,7 +697,7 @@ document.addEventListener('DOMContentLoaded', () => { function fillAkreSelect(selectEl){ if(!selectEl) return; - selectEl.innerHTML = ''; + selectEl.innerHTML = ''; getAkreFlat().forEach(optData => { const opt = document.createElement('option'); opt.value = optData.value; @@ -664,17 +733,18 @@ document.addEventListener('DOMContentLoaded', () => { function enableAkreFields(index){ const selectEl = document.getElementById(`akre_select_${index}`); - if(selectEl){ - selectEl.disabled = false; - selectEl.required = true; - } + // if(selectEl){ + // selectEl.disabled = false; + // selectEl.required = true; + // } setKategoriRequired(index, false); loadAkreData().then(() => { fillAkreSelect(selectEl); if(window.$ && $.fn.select2){ $(selectEl).select2({ dropdownParent: $('#modalCreateFile'), - placeholder: 'Pilih Instrumen' + placeholder: 'Pilih Instrumen', + allowClear:true }); } }); @@ -687,7 +757,8 @@ document.addEventListener('DOMContentLoaded', () => { if(katSelect.length){ katSelect.select2({ dropdownParent: $('#modalCreateFile'), - placeholder:'Pilih Kategori' + placeholder:'Pilih Kategori', + allowClear:true }); } if(hukumSelect.length){ @@ -854,13 +925,9 @@ document.addEventListener('DOMContentLoaded', () => {
- + - - - -
Isi form ini bila dokumen yang diunggah merupakan dokumen akreditasi.
@@ -887,7 +954,7 @@ document.addEventListener('DOMContentLoaded', () => {
diff --git a/resources/views/dataAkreditasi/index.blade.php b/resources/views/dataAkreditasi/index.blade.php index 96573dc..2ce228d 100644 --- a/resources/views/dataAkreditasi/index.blade.php +++ b/resources/views/dataAkreditasi/index.blade.php @@ -1,4 +1,42 @@ @extends('layout.main') + @section('body_main')
@@ -7,16 +45,8 @@
-

Dokumen Umum

+

Dokumen Akreditasi

- - {{-- - - Download Excel - --}}