progress
This commit is contained in:
parent
7e01ccbb90
commit
2ded2e8ae8
@ -1072,7 +1072,7 @@ class DashboardController extends Controller
|
|||||||
$payload = [
|
$payload = [
|
||||||
'id_unit_kerja' => $id_unit_kerja,
|
'id_unit_kerja' => $id_unit_kerja,
|
||||||
'id_sub_unit_kerja' => $id_sub_unit_kerja,
|
'id_sub_unit_kerja' => $id_sub_unit_kerja,
|
||||||
'master_kategori_directory_id' => $master_kategori_directory_id,
|
'master_kategori_directory_id' => $master_kategori_directory_id ?? null,
|
||||||
'pegawai_id_entry' => auth()->user()->dataUser->id ?? 1,
|
'pegawai_id_entry' => auth()->user()->dataUser->id ?? 1,
|
||||||
'pegawai_nama_entry' => auth()->user()->dataUser->namalengkap ?? null,
|
'pegawai_nama_entry' => auth()->user()->dataUser->namalengkap ?? null,
|
||||||
'tanggal_terbit' => $data['date_active'] ?? null,
|
'tanggal_terbit' => $data['date_active'] ?? null,
|
||||||
@ -1082,10 +1082,16 @@ class DashboardController extends Controller
|
|||||||
'permission_file' => ($data['is_permission'] ?? null) == "1",
|
'permission_file' => ($data['is_permission'] ?? null) == "1",
|
||||||
'status_action' => $status,
|
'status_action' => $status,
|
||||||
'action_by' => $status && $status === "approved" ? auth()->user()->objectpegawaifk : null,
|
'action_by' => $status && $status === "approved" ? auth()->user()->objectpegawaifk : null,
|
||||||
'action_at' => $status && $status === "approved" ? now() : null
|
'action_at' => $status && $status === "approved" ? now() : null,
|
||||||
|
'is_akre' => ($data['is_akre'] ?? null) == "1"
|
||||||
];
|
];
|
||||||
$fd = FileDirectory::create($payload);
|
$fd = FileDirectory::create($payload);
|
||||||
$path = "{$nama_unit_kerja}/{$nama_sub_unit_kerja}/{$nama_kategori}";
|
if($data['is_akre'] === "2"){
|
||||||
|
$path = "{$nama_unit_kerja}/{$nama_sub_unit_kerja}/{$nama_kategori}";
|
||||||
|
}else{
|
||||||
|
$path = "TKRS/{$data['akre_tkrs_parent']}/{$data['akre_tkrs_child']}";
|
||||||
|
}
|
||||||
|
|
||||||
$disk = Storage::disk('s3');
|
$disk = Storage::disk('s3');
|
||||||
$imageName = $this->buildStoredFileName(
|
$imageName = $this->buildStoredFileName(
|
||||||
$fd->nama_dokumen ?? null,
|
$fd->nama_dokumen ?? null,
|
||||||
@ -1412,7 +1418,8 @@ class DashboardController extends Controller
|
|||||||
private function buildRecapData(array $unitIds, string $keyword = ''): array
|
private function buildRecapData(array $unitIds, string $keyword = ''): array
|
||||||
{
|
{
|
||||||
$rows = FileDirectory::where('statusenabled', true)
|
$rows = FileDirectory::where('statusenabled', true)
|
||||||
->whereNotNull('status_action')
|
->whereNotNull('status_action')->where('status_action', 'approved')
|
||||||
|
->where('is_akre')
|
||||||
->whereIn('id_unit_kerja', $unitIds)
|
->whereIn('id_unit_kerja', $unitIds)
|
||||||
->pluck('file');
|
->pluck('file');
|
||||||
|
|
||||||
@ -1903,7 +1910,8 @@ class DashboardController extends Controller
|
|||||||
'revision' => $item->revision,
|
'revision' => $item->revision,
|
||||||
'id_unit_kerja' => $item->id_unit_kerja,
|
'id_unit_kerja' => $item->id_unit_kerja,
|
||||||
'id_sub_unit_kerja' => $item->id_sub_unit_kerja,
|
'id_sub_unit_kerja' => $item->id_sub_unit_kerja,
|
||||||
'master_kategori_directory_id' => $item->master_kategori_directory_id
|
'master_kategori_directory_id' => $item->master_kategori_directory_id,
|
||||||
|
'is_akre' => $item->is_akre
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -2240,4 +2248,11 @@ class DashboardController extends Controller
|
|||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function dataAkreditasi(){
|
||||||
|
$data = [
|
||||||
|
'title' => 'Akreditasi',
|
||||||
|
];
|
||||||
|
return view('dataAkreditasi.index', $data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,7 +61,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildRow(item){
|
function buildRow(item){
|
||||||
|
|
||||||
let tanggal = item.entry_at ? formatTanggal(item.entry_at) : '-';
|
let tanggal = item.entry_at ? formatTanggal(item.entry_at) : '-';
|
||||||
let tanggalExp = item.tgl_expired ? formatTanggal(item.tgl_expired) : '-';
|
let tanggalExp = item.tgl_expired ? formatTanggal(item.tgl_expired) : '-';
|
||||||
let tanggalTerbit = item.tanggal_terbit ? formatTanggal(item.tanggal_terbit) : '-';
|
let tanggalTerbit = item.tanggal_terbit ? formatTanggal(item.tanggal_terbit) : '-';
|
||||||
@ -575,6 +576,148 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
$(formCreate).find('input[type="file"]').val('');
|
$(formCreate).find('input[type="file"]').val('');
|
||||||
$(formCreate).find('.file-name').addClass('d-none').text('');
|
$(formCreate).find('.file-name').addClass('d-none').text('');
|
||||||
}
|
}
|
||||||
|
resetAkreFields(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
let akreData = [];
|
||||||
|
let akreLoaded = false;
|
||||||
|
|
||||||
|
function loadAkreData(){
|
||||||
|
if(akreLoaded) return Promise.resolve(akreData);
|
||||||
|
return fetch('/json/akreditasi.json')
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(data => {
|
||||||
|
akreData = Array.isArray(data) ? data : [];
|
||||||
|
akreLoaded = true;
|
||||||
|
return akreData;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
akreData = [];
|
||||||
|
akreLoaded = true;
|
||||||
|
return akreData;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillAkreType(selectEl){
|
||||||
|
if(!selectEl) return;
|
||||||
|
selectEl.innerHTML = '<option value="" disabled selected>Pilih Type</option>';
|
||||||
|
akreData.forEach(item => {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = item.name;
|
||||||
|
opt.textContent = item.name;
|
||||||
|
selectEl.appendChild(opt);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillAkreSegment(selectEl, typeName){
|
||||||
|
if(!selectEl) return;
|
||||||
|
selectEl.innerHTML = '<option value="" disabled selected>Pilih Segmen</option>';
|
||||||
|
const typeItem = akreData.find(item => item.name === typeName);
|
||||||
|
if(typeItem && Array.isArray(typeItem.segment) && typeItem.segment.length){
|
||||||
|
typeItem.segment.forEach(seg => {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = seg.name;
|
||||||
|
opt.textContent = seg.name;
|
||||||
|
selectEl.appendChild(opt);
|
||||||
|
});
|
||||||
|
selectEl.disabled = false;
|
||||||
|
selectEl.required = true;
|
||||||
|
}else{
|
||||||
|
selectEl.disabled = true;
|
||||||
|
selectEl.required = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillAkreItem(selectEl, typeName, segmentName){
|
||||||
|
if(!selectEl) return;
|
||||||
|
selectEl.innerHTML = '<option value="" disabled selected>Pilih Elemen</option>';
|
||||||
|
const typeItem = akreData.find(item => item.name === typeName);
|
||||||
|
const segmentItem = typeItem?.segment?.find(seg => seg.name === segmentName);
|
||||||
|
if(segmentItem && Array.isArray(segmentItem.turunan) && segmentItem.turunan.length){
|
||||||
|
segmentItem.turunan.forEach(child => {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = child.name;
|
||||||
|
opt.textContent = child.name;
|
||||||
|
selectEl.appendChild(opt);
|
||||||
|
});
|
||||||
|
selectEl.disabled = false;
|
||||||
|
selectEl.required = true;
|
||||||
|
}else{
|
||||||
|
selectEl.disabled = true;
|
||||||
|
selectEl.required = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setKategoriRequired(index, isRequired){
|
||||||
|
const katSelect = document.getElementById(`select_kategori_${index}`);
|
||||||
|
if (!katSelect) return;
|
||||||
|
if (isRequired) {
|
||||||
|
katSelect.setAttribute('required', 'required');
|
||||||
|
} else {
|
||||||
|
katSelect.removeAttribute('required');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetAkreFields(index){
|
||||||
|
const typeWrap = document.getElementById(`akre_type_wrap_${index}`);
|
||||||
|
const segmentWrap = document.getElementById(`akre_segment_wrap_${index}`);
|
||||||
|
const itemWrap = document.getElementById(`akre_item_wrap_${index}`);
|
||||||
|
const typeSelect = document.getElementById(`akre_type_${index}`);
|
||||||
|
const segmentSelect = document.getElementById(`akre_segment_${index}`);
|
||||||
|
const itemSelect = document.getElementById(`akre_item_${index}`);
|
||||||
|
if(typeWrap) typeWrap.classList.add('d-none');
|
||||||
|
if(segmentWrap) segmentWrap.classList.add('d-none');
|
||||||
|
if(itemWrap) itemWrap.classList.add('d-none');
|
||||||
|
if(typeSelect){
|
||||||
|
typeSelect.value = '';
|
||||||
|
typeSelect.disabled = true;
|
||||||
|
typeSelect.required = false;
|
||||||
|
}
|
||||||
|
if(segmentSelect){
|
||||||
|
segmentSelect.value = '';
|
||||||
|
segmentSelect.disabled = true;
|
||||||
|
segmentSelect.required = false;
|
||||||
|
}
|
||||||
|
if(itemSelect){
|
||||||
|
itemSelect.value = '';
|
||||||
|
itemSelect.disabled = true;
|
||||||
|
itemSelect.required = false;
|
||||||
|
}
|
||||||
|
setKategoriRequired(index, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableAkreFields(index){
|
||||||
|
const typeWrap = document.getElementById(`akre_type_wrap_${index}`);
|
||||||
|
const segmentWrap = document.getElementById(`akre_segment_wrap_${index}`);
|
||||||
|
const itemWrap = document.getElementById(`akre_item_wrap_${index}`);
|
||||||
|
const typeSelect = document.getElementById(`akre_type_${index}`);
|
||||||
|
const segmentSelect = document.getElementById(`akre_segment_${index}`);
|
||||||
|
const itemSelect = document.getElementById(`akre_item_${index}`);
|
||||||
|
if(typeWrap) typeWrap.classList.remove('d-none');
|
||||||
|
if(segmentWrap) segmentWrap.classList.remove('d-none');
|
||||||
|
if(itemWrap) itemWrap.classList.remove('d-none');
|
||||||
|
if(typeSelect){
|
||||||
|
typeSelect.disabled = false;
|
||||||
|
typeSelect.required = true;
|
||||||
|
}
|
||||||
|
if(segmentSelect){
|
||||||
|
segmentSelect.disabled = true;
|
||||||
|
segmentSelect.required = true;
|
||||||
|
}
|
||||||
|
if(itemSelect){
|
||||||
|
itemSelect.disabled = true;
|
||||||
|
itemSelect.required = true;
|
||||||
|
}
|
||||||
|
setKategoriRequired(index, false);
|
||||||
|
loadAkreData().then(() => {
|
||||||
|
fillAkreType(typeSelect);
|
||||||
|
if(typeSelect?.value){
|
||||||
|
fillAkreSegment(segmentSelect, typeSelect.value);
|
||||||
|
}
|
||||||
|
if(typeSelect?.value && segmentSelect?.value){
|
||||||
|
fillAkreItem(itemSelect, typeSelect.value, segmentSelect.value);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectOptionUnitKerjaV1(localCol){
|
function selectOptionUnitKerjaV1(localCol){
|
||||||
@ -739,6 +882,57 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label class="form-label fw-semibold">Apakah Dokumen Akreditasi? <span class="text-danger">*</span></label>
|
||||||
|
<div class="border rounded-3 p-2 bg-light">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input"
|
||||||
|
type="radio"
|
||||||
|
name="data[${colCount}][is_akre]"
|
||||||
|
id="akre_yes_${colCount}"
|
||||||
|
value="1"
|
||||||
|
required>
|
||||||
|
<label class="form-check-label" for="akre_yes_${colCount}">Iya</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check mt-1">
|
||||||
|
<input class="form-check-input"
|
||||||
|
type="radio"
|
||||||
|
name="data[${colCount}][is_akre]"
|
||||||
|
id="akre_no_${colCount}"
|
||||||
|
value="2"
|
||||||
|
required>
|
||||||
|
<label class="form-check-label" for="akre_no_${colCount}">Tidak</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_type_wrap_${colCount}">
|
||||||
|
<label class="form-label fw-semibold">Type Akreditasi <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-type"
|
||||||
|
name="data[${colCount}][akre_type]"
|
||||||
|
id="akre_type_${colCount}"
|
||||||
|
disabled>
|
||||||
|
<option value="" disabled selected>Pilih Type</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_segment_wrap_${colCount}">
|
||||||
|
<label class="form-label fw-semibold">Segmen <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-segment"
|
||||||
|
name="data[${colCount}][akre_segment]"
|
||||||
|
id="akre_segment_${colCount}"
|
||||||
|
disabled>
|
||||||
|
<option value="" disabled selected>Pilih Segmen</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_item_wrap_${colCount}">
|
||||||
|
<label class="form-label fw-semibold">Elemen Penilaian <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-item"
|
||||||
|
name="data[${colCount}][akre_item]"
|
||||||
|
id="akre_item_${colCount}"
|
||||||
|
disabled>
|
||||||
|
<option value="" disabled selected>Pilih Elemen</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<label for="fileUpload_${colCount}" class="form-label fw-semibold">📂 Upload Dokumen (PDF)</label>
|
<label for="fileUpload_${colCount}" class="form-label fw-semibold">📂 Upload Dokumen (PDF)</label>
|
||||||
<div class="border rounded-3 p-3 bg-white shadow-sm">
|
<div class="border rounded-3 p-3 bg-white shadow-sm">
|
||||||
@ -754,6 +948,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
</div>`;
|
</div>`;
|
||||||
col.insertAdjacentHTML('beforeend', html);
|
col.insertAdjacentHTML('beforeend', html);
|
||||||
selectOptionUnitKerjaV1(colCount);
|
selectOptionUnitKerjaV1(colCount);
|
||||||
|
setKategoriRequired(colCount, true);
|
||||||
colCount++;
|
colCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -816,6 +1011,41 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
document.addEventListener('change', function(e){
|
||||||
|
if(e.target.classList.contains('akre-type')){
|
||||||
|
const id = e.target.id || '';
|
||||||
|
const idx = id.split('_').pop();
|
||||||
|
const segmentSelect = document.getElementById(`akre_segment_${idx}`);
|
||||||
|
const itemSelect = document.getElementById(`akre_item_${idx}`);
|
||||||
|
if(segmentSelect) fillAkreSegment(segmentSelect, e.target.value);
|
||||||
|
if(itemSelect){
|
||||||
|
itemSelect.innerHTML = '<option value="" disabled selected>Pilih Elemen</option>';
|
||||||
|
itemSelect.disabled = true;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(e.target.classList.contains('akre-segment')){
|
||||||
|
const id = e.target.id || '';
|
||||||
|
const idx = id.split('_').pop();
|
||||||
|
const typeSelect = document.getElementById(`akre_type_${idx}`);
|
||||||
|
const itemSelect = document.getElementById(`akre_item_${idx}`);
|
||||||
|
fillAkreItem(itemSelect, typeSelect?.value || '', e.target.value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(e.target.matches('input[type="radio"][name$="[is_akre]"]')){
|
||||||
|
const name = e.target.getAttribute('name') || '';
|
||||||
|
const match = name.match(/data\[(\d+)\]\[is_akre\]/);
|
||||||
|
const idx = match ? match[1] : '0';
|
||||||
|
if(e.target.value === '1'){
|
||||||
|
enableAkreFields(idx);
|
||||||
|
}else{
|
||||||
|
resetAkreFields(idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
document.addEventListener('click', function(e){
|
document.addEventListener('click', function(e){
|
||||||
if(e.target.matches('.file-link')){
|
if(e.target.matches('.file-link')){
|
||||||
|
|||||||
1765
public/json/akreditasi.json
Normal file
1765
public/json/akreditasi.json
Normal file
File diff suppressed because it is too large
Load Diff
0
resources/views/dataAkreditasi/index.blade.php
Normal file
0
resources/views/dataAkreditasi/index.blade.php
Normal file
@ -252,8 +252,186 @@
|
|||||||
formCreate.find('select').val(null).trigger('change');
|
formCreate.find('select').val(null).trigger('change');
|
||||||
formCreate.find('input[type="file"]').val('');
|
formCreate.find('input[type="file"]').val('');
|
||||||
formCreate.find('.file-name').addClass('d-none').text('');
|
formCreate.find('.file-name').addClass('d-none').text('');
|
||||||
|
resetAkreFields(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let akreData = [];
|
||||||
|
let akreLoaded = false;
|
||||||
|
|
||||||
|
function loadAkreData(){
|
||||||
|
if(akreLoaded) return Promise.resolve(akreData);
|
||||||
|
return fetch('/json/akreditasi.json')
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(data => {
|
||||||
|
akreData = Array.isArray(data) ? data : [];
|
||||||
|
|
||||||
|
akreLoaded = true;
|
||||||
|
return akreData;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
akreData = [];
|
||||||
|
akreLoaded = true;
|
||||||
|
return akreData;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillAkreType(selectEl){
|
||||||
|
if(!selectEl) return;
|
||||||
|
selectEl.innerHTML = '<option value="" disabled selected>Pilih Type</option>';
|
||||||
|
akreData.forEach(item => {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = item.name;
|
||||||
|
opt.textContent = item.name;
|
||||||
|
selectEl.appendChild(opt);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillAkreSegment(selectEl, typeName){
|
||||||
|
if(!selectEl) return;
|
||||||
|
selectEl.innerHTML = '<option value="" disabled selected>Pilih Segmen</option>';
|
||||||
|
const typeItem = akreData.find(item => item.name === typeName);
|
||||||
|
if(typeItem && Array.isArray(typeItem.segment) && typeItem.segment.length){
|
||||||
|
typeItem.segment.forEach(seg => {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = seg.name;
|
||||||
|
opt.textContent = seg.name;
|
||||||
|
selectEl.appendChild(opt);
|
||||||
|
});
|
||||||
|
selectEl.disabled = false;
|
||||||
|
selectEl.required = true;
|
||||||
|
}else{
|
||||||
|
selectEl.disabled = true;
|
||||||
|
selectEl.required = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillAkreItem(selectEl, typeName, segmentName){
|
||||||
|
if(!selectEl) return;
|
||||||
|
selectEl.innerHTML = '<option value="" disabled selected>Pilih Elemen</option>';
|
||||||
|
const typeItem = akreData.find(item => item.name === typeName);
|
||||||
|
const segmentItem = typeItem?.segment?.find(seg => seg.name === segmentName);
|
||||||
|
if(segmentItem && Array.isArray(segmentItem.turunan) && segmentItem.turunan.length){
|
||||||
|
segmentItem.turunan.forEach(child => {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = child.name;
|
||||||
|
opt.textContent = child.name;
|
||||||
|
selectEl.appendChild(opt);
|
||||||
|
});
|
||||||
|
selectEl.disabled = false;
|
||||||
|
selectEl.required = true;
|
||||||
|
}else{
|
||||||
|
selectEl.disabled = true;
|
||||||
|
selectEl.required = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setKategoriRequired(index, isRequired){
|
||||||
|
const katSelect = document.getElementById(`select_kategori_${index}`);
|
||||||
|
if (!katSelect) return;
|
||||||
|
if (isRequired) {
|
||||||
|
katSelect.setAttribute('required', 'required');
|
||||||
|
} else {
|
||||||
|
katSelect.removeAttribute('required');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetAkreFields(index){
|
||||||
|
const typeWrap = document.getElementById(`akre_type_wrap_${index}`);
|
||||||
|
const segmentWrap = document.getElementById(`akre_segment_wrap_${index}`);
|
||||||
|
const itemWrap = document.getElementById(`akre_item_wrap_${index}`);
|
||||||
|
const typeSelect = document.getElementById(`akre_type_${index}`);
|
||||||
|
const segmentSelect = document.getElementById(`akre_segment_${index}`);
|
||||||
|
const itemSelect = document.getElementById(`akre_item_${index}`);
|
||||||
|
if(typeWrap) typeWrap.classList.add('d-none');
|
||||||
|
if(segmentWrap) segmentWrap.classList.add('d-none');
|
||||||
|
if(itemWrap) itemWrap.classList.add('d-none');
|
||||||
|
if(typeSelect){
|
||||||
|
typeSelect.value = '';
|
||||||
|
typeSelect.disabled = true;
|
||||||
|
typeSelect.required = false;
|
||||||
|
}
|
||||||
|
if(segmentSelect){
|
||||||
|
segmentSelect.value = '';
|
||||||
|
segmentSelect.disabled = true;
|
||||||
|
segmentSelect.required = false;
|
||||||
|
}
|
||||||
|
if(itemSelect){
|
||||||
|
itemSelect.value = '';
|
||||||
|
itemSelect.disabled = true;
|
||||||
|
itemSelect.required = false;
|
||||||
|
}
|
||||||
|
setKategoriRequired(index, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableAkreFields(index){
|
||||||
|
const typeWrap = document.getElementById(`akre_type_wrap_${index}`);
|
||||||
|
const segmentWrap = document.getElementById(`akre_segment_wrap_${index}`);
|
||||||
|
const itemWrap = document.getElementById(`akre_item_wrap_${index}`);
|
||||||
|
const typeSelect = document.getElementById(`akre_type_${index}`);
|
||||||
|
const segmentSelect = document.getElementById(`akre_segment_${index}`);
|
||||||
|
const itemSelect = document.getElementById(`akre_item_${index}`);
|
||||||
|
if(typeWrap) typeWrap.classList.remove('d-none');
|
||||||
|
if(segmentWrap) segmentWrap.classList.remove('d-none');
|
||||||
|
if(itemWrap) itemWrap.classList.remove('d-none');
|
||||||
|
if(typeSelect){
|
||||||
|
typeSelect.disabled = false;
|
||||||
|
typeSelect.required = true;
|
||||||
|
}
|
||||||
|
if(segmentSelect){
|
||||||
|
segmentSelect.disabled = true;
|
||||||
|
segmentSelect.required = true;
|
||||||
|
}
|
||||||
|
if(itemSelect){
|
||||||
|
itemSelect.disabled = true;
|
||||||
|
itemSelect.required = true;
|
||||||
|
}
|
||||||
|
setKategoriRequired(index, false);
|
||||||
|
loadAkreData().then(() => {
|
||||||
|
fillAkreType(typeSelect);
|
||||||
|
if(typeSelect?.value){
|
||||||
|
fillAkreSegment(segmentSelect, typeSelect.value);
|
||||||
|
}
|
||||||
|
if(typeSelect?.value && segmentSelect?.value){
|
||||||
|
fillAkreItem(itemSelect, typeSelect.value, segmentSelect.value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('change', function(e){
|
||||||
|
if(e.target.classList.contains('akre-type')){
|
||||||
|
const id = e.target.id || '';
|
||||||
|
const idx = id.split('_').pop();
|
||||||
|
const segmentSelect = document.getElementById(`akre_segment_${idx}`);
|
||||||
|
const itemSelect = document.getElementById(`akre_item_${idx}`);
|
||||||
|
if(segmentSelect) fillAkreSegment(segmentSelect, e.target.value);
|
||||||
|
if(itemSelect){
|
||||||
|
itemSelect.innerHTML = '<option value="" disabled selected>Pilih Elemen</option>';
|
||||||
|
itemSelect.disabled = true;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(e.target.classList.contains('akre-segment')){
|
||||||
|
const id = e.target.id || '';
|
||||||
|
const idx = id.split('_').pop();
|
||||||
|
const typeSelect = document.getElementById(`akre_type_${idx}`);
|
||||||
|
const itemSelect = document.getElementById(`akre_item_${idx}`);
|
||||||
|
fillAkreItem(itemSelect, typeSelect?.value || '', e.target.value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(e.target.matches('input[type="radio"][name$="[is_akre]"]')){
|
||||||
|
const name = e.target.getAttribute('name') || '';
|
||||||
|
const match = name.match(/data\[(\d+)\]\[is_akre\]/);
|
||||||
|
const idx = match ? match[1] : '0';
|
||||||
|
if(e.target.value === '1'){
|
||||||
|
enableAkreFields(idx);
|
||||||
|
}else{
|
||||||
|
resetAkreFields(idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
function isPublic(permissionVal){
|
function isPublic(permissionVal){
|
||||||
if(permissionVal === null || permissionVal === undefined) return false;
|
if(permissionVal === null || permissionVal === undefined) return false;
|
||||||
const val = String(permissionVal).toLowerCase();
|
const val = String(permissionVal).toLowerCase();
|
||||||
@ -733,7 +911,7 @@
|
|||||||
type="date"
|
type="date"
|
||||||
name="data[${colCount}][date_active]">
|
name="data[${colCount}][date_active]">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2">
|
<div class="col-md-3">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input toggle-expired"
|
<input class="form-check-input toggle-expired"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
@ -743,14 +921,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-5" id="expiredField_${colCount}">
|
<div class="col-md-3" id="expiredField_${colCount}">
|
||||||
<label class="form-label fw-semibold">Tanggal Kedaluwarsa Dokumen</label>
|
<label class="form-label fw-semibold">Tanggal Kedaluwarsa Dokumen</label>
|
||||||
<input class="form-control"
|
<input class="form-control"
|
||||||
type="date"
|
type="date"
|
||||||
name="data[${colCount}][tgl_expired]" disabled>
|
name="data[${colCount}][tgl_expired]" disabled>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-5">
|
<div class="col-md-3">
|
||||||
<label class="form-label fw-semibold">Boleh dilihat unit lain? <span class="text-danger">*</span></label>
|
<label class="form-label fw-semibold">Boleh dilihat unit lain? <span class="text-danger">*</span></label>
|
||||||
|
|
||||||
<div class="border rounded-3 p-2 bg-light">
|
<div class="border rounded-3 p-2 bg-light">
|
||||||
@ -776,6 +954,58 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<label class="form-label fw-semibold">Apakah Dokumen Akreditasi? <span class="text-danger">*</span></label>
|
||||||
|
|
||||||
|
<div class="border rounded-3 p-2 bg-light">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input"
|
||||||
|
type="radio"
|
||||||
|
name="data[${colCount}][is_akre]"
|
||||||
|
id="akre_yes_${colCount}"
|
||||||
|
value="1"
|
||||||
|
required>
|
||||||
|
<label class="form-check-label" for="akre_yes_${colCount}">Iya</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-check mt-1">
|
||||||
|
<input class="form-check-input"
|
||||||
|
type="radio"
|
||||||
|
name="data[${colCount}][is_akre]"
|
||||||
|
id="akre_no_${colCount}"
|
||||||
|
value="2"
|
||||||
|
required>
|
||||||
|
<label class="form-check-label" for="akre_no_${colCount}">Tidak</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_type_wrap_${colCount}">
|
||||||
|
<label class="form-label fw-semibold">Type Akreditasi <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-type"
|
||||||
|
name="data[${colCount}][akre_type]"
|
||||||
|
id="akre_type_${colCount}"
|
||||||
|
disabled>
|
||||||
|
<option value="" disabled selected>Pilih Type</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_segment_wrap_${colCount}">
|
||||||
|
<label class="form-label fw-semibold">Segmen <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-segment"
|
||||||
|
name="data[${colCount}][akre_segment]"
|
||||||
|
id="akre_segment_${colCount}"
|
||||||
|
disabled>
|
||||||
|
<option value="" disabled selected>Pilih Segmen</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_item_wrap_${colCount}">
|
||||||
|
<label class="form-label fw-semibold">Elemen Penilaian <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-item"
|
||||||
|
name="data[${colCount}][akre_item]"
|
||||||
|
id="akre_item_${colCount}"
|
||||||
|
disabled>
|
||||||
|
<option value="" disabled selected>Pilih Elemen</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<label for="fileUpload_${colCount}" class="form-label fw-semibold">📂 Upload Dokumen (PDF)</label>
|
<label for="fileUpload_${colCount}" class="form-label fw-semibold">📂 Upload Dokumen (PDF)</label>
|
||||||
@ -798,6 +1028,7 @@
|
|||||||
`;
|
`;
|
||||||
col.append(html)
|
col.append(html)
|
||||||
selectOptionUnitKerjaV1(colCount)
|
selectOptionUnitKerjaV1(colCount)
|
||||||
|
setKategoriRequired(colCount, true)
|
||||||
colCount++;
|
colCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -57,17 +57,17 @@
|
|||||||
<label class="form-label fw-semibold">Tanggal Terbit</label>
|
<label class="form-label fw-semibold">Tanggal Terbit</label>
|
||||||
<input class="form-control" type="date" name="data[0][date_active]">
|
<input class="form-control" type="date" name="data[0][date_active]">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2">
|
<div class="col-md-3">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input toggle-expired" type="checkbox" id="hasExpired0" data-target="expiredField_0">
|
<input class="form-check-input toggle-expired" type="checkbox" id="hasExpired0" data-target="expiredField_0">
|
||||||
<label class="form-check-label" for="hasExpired0">Masa Berlaku Dokumen?</label>
|
<label class="form-check-label" for="hasExpired0">Masa Berlaku Dokumen?</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5" id="expiredField_0">
|
<div class="col-md-3" id="expiredField_0">
|
||||||
<label class="form-label fw-semibold">Tanggal Kedaluwarsa Dokumen</label>
|
<label class="form-label fw-semibold">Tanggal Kedaluwarsa Dokumen</label>
|
||||||
<input class="form-control" type="date" name="data[0][tgl_expired]" disabled>
|
<input class="form-control" type="date" name="data[0][tgl_expired]" disabled>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5">
|
<div class="col-md-3">
|
||||||
<label class="form-label fw-semibold">Boleh dilihat unit lain? <span class="text-danger">*</span></label>
|
<label class="form-label fw-semibold">Boleh dilihat unit lain? <span class="text-danger">*</span></label>
|
||||||
|
|
||||||
<div class="border rounded-3 p-2 bg-light">
|
<div class="border rounded-3 p-2 bg-light">
|
||||||
@ -77,7 +77,6 @@
|
|||||||
Iya
|
Iya
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-check mt-1">
|
<div class="form-check mt-1">
|
||||||
<input class="form-check-input" type="radio" name="data[0][is_permission]" id="perm_no" value="2" required>
|
<input class="form-check-input" type="radio" name="data[0][is_permission]" id="perm_no" value="2" required>
|
||||||
<label class="form-check-label" for="perm_no">
|
<label class="form-check-label" for="perm_no">
|
||||||
@ -85,7 +84,42 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<label class="form-label fw-semibold">Apakah Dokumen Akreditasi? <span class="text-danger">*</span></label>
|
||||||
|
|
||||||
|
<div class="border rounded-3 p-2 bg-light">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="radio" name="data[0][is_akre]" id="akre_yes" value="1" required>
|
||||||
|
<label class="form-check-label" for="akre_yes">
|
||||||
|
Iya
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check mt-1">
|
||||||
|
<input class="form-check-input" type="radio" name="data[0][is_akre]" id="akre_no" value="2" required>
|
||||||
|
<label class="form-check-label" for="akre_no">
|
||||||
|
Tidak
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_type_wrap_0">
|
||||||
|
<label class="form-label fw-semibold">Type Akreditasi <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-type" name="data[0][akre_type]" id="akre_type_0" disabled>
|
||||||
|
<option value="" disabled selected>Pilih Type</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_segment_wrap_0">
|
||||||
|
<label class="form-label fw-semibold">Segmen <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-segment" name="data[0][akre_segment]" id="akre_segment_0" disabled>
|
||||||
|
<option value="" disabled selected>Pilih Segmen</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-none" id="akre_item_wrap_0">
|
||||||
|
<label class="form-label fw-semibold">Elemen Penilaian <span class="text-danger">*</span></label>
|
||||||
|
<select class="form-select akre-item" name="data[0][akre_item]" id="akre_item_0" disabled>
|
||||||
|
<option value="" disabled selected>Pilih Elemen</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12 mb-2">
|
<div class="col-md-12 mb-2">
|
||||||
|
|||||||
@ -41,6 +41,12 @@
|
|||||||
<span class="hide-menu">Dokumen Umum</span>
|
<span class="hide-menu">Dokumen Umum</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="sidebar-item">
|
||||||
|
<a class="sidebar-link" href="{{ url('/data-akreditasi') }}" aria-expanded="false">
|
||||||
|
<i class="ti ti-layout-dashboard"></i>
|
||||||
|
<span class="hide-menu">Dokumen Akreditasi</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
{{-- AKTIVITAS --}}
|
{{-- AKTIVITAS --}}
|
||||||
<li class="nav-small-cap"><span class="hide-menu">Aktivitas</span></li>
|
<li class="nav-small-cap"><span class="hide-menu">Aktivitas</span></li>
|
||||||
|
|||||||
@ -16,6 +16,7 @@ Route::middleware(['auth'])->group(function(){
|
|||||||
Route::get('/download-excel/data-unit', [DashboardController::class, 'downloadDataUnitExcel']);
|
Route::get('/download-excel/data-unit', [DashboardController::class, 'downloadDataUnitExcel']);
|
||||||
Route::get('/data-umum', [DashboardController::class, 'dataUmum']);
|
Route::get('/data-umum', [DashboardController::class, 'dataUmum']);
|
||||||
Route::get('/datatable-umum', [DashboardController::class, 'datatableDataUmum']);
|
Route::get('/datatable-umum', [DashboardController::class, 'datatableDataUmum']);
|
||||||
|
Route::get('/data-akreditasi', [DashboardController::class, 'dataAkreditasi']);
|
||||||
Route::get('/download-excel/data-umum', [DashboardController::class, 'downloadDataUmumExcel']);
|
Route::get('/download-excel/data-umum', [DashboardController::class, 'downloadDataUmumExcel']);
|
||||||
Route::post('/uploadv2', [DashboardController::class, 'storeVersion2']);
|
Route::post('/uploadv2', [DashboardController::class, 'storeVersion2']);
|
||||||
Route::get('/file-preview/{id}', [DashboardController::class, 'dataPdf']);
|
Route::get('/file-preview/{id}', [DashboardController::class, 'dataPdf']);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user