Worked up to submission

This commit is contained in:
nugroho 2025-06-26 05:21:55 +07:00
parent 0819136981
commit d72017064f
6 changed files with 167 additions and 51 deletions

View File

@ -79,7 +79,8 @@
<span>Level*</span> <span>Level*</span>
<span>:</span> <span>:</span>
<select id="lvl"> <select id="lvl">
<option value="2">Agen Perubahan</option> <option value="3">Agen Perubahan</option>
<option value="2">Supervisor</option>
<option value="1">Evaluator</option> <option value="1">Evaluator</option>
</select> </select>
</div> </div>

View File

@ -11,7 +11,8 @@
<span>Level*</span> <span>Level*</span>
<span>:</span> <span>:</span>
<select id="lvel"> <select id="lvel">
<option value="2">Agen Perubahan</option> <option value="3">Agen Perubahan</option>
<option value="2">Supervisor</option>
<option value="1">Evaluator</option> <option value="1">Evaluator</option>
</select> </select>
&nbsp; &nbsp;

View File

@ -104,7 +104,7 @@
$('#hasAc').prop("hidden",false); $('#hasAc').prop("hidden",false);
$('#hasntAc').prop("hidden",true); $('#hasntAc').prop("hidden",true);
$('#unm').text(data.userAccount.username); $('#unm').text(data.userAccount.username);
$('#lvl').text(data.userAccount.level == 0 ? "Super Admin" : data.userAccount.level == 1 ? "Evaluator" : data.userAccount.level == 2 ? "Agen Perubahan" : "Tidak Diketahui: "+ data.userAccount.level); $('#lvl').text(data.userAccount.level == 0 ? "Super Admin" : data.userAccount.level == 1 ? "Evaluator" : data.userAccount.level == 2 ? "Supervisor" : data.userAccount.level == 3 ? "Agen Perubahan" : "Tidak Diketahui: "+ data.userAccount.level);
} }
else else
{ {

View File

@ -11,7 +11,8 @@
<span>Level</span> <span>Level</span>
<span>:</span> <span>:</span>
<select id="lvel" disabled> <select id="lvel" disabled>
<option value="2">Agen Perubahan</option> <option value="3">Agen Perubahan</option>
<option value="2">Supervisor</option>
<option value="1">Evaluator</option> <option value="1">Evaluator</option>
<option value="0">Super Admin</option> <option value="0">Super Admin</option>
</select> </select>

View File

@ -120,7 +120,7 @@
ro.append(ac); ro.append(ac);
id.append(v.agentID); id.append(v.agentID);
un.append(v.username); un.append(v.username);
lv.append(v.level == 0 ? "Super Admin" : v.level == 1 ? "Evaluator" : v.level == 2 ? "Agen" : "Tidak Diketahui: "+ v.level ); lv.append(v.level == 0 ? "Super Admin" : v.level == 1 ? "Evaluator" : v.level == 2 ? "Supervisor" : v.level ==3 ? "Agen" : "Tidak Diketahui: "+ v.level );
ac.append(v.active ? "Ya" : "Tidak"); ac.append(v.active ? "Ya" : "Tidak");
$(ro).click(async()=>{ $(ro).click(async()=>{
const aksi = await moly.dialog.show({title: "Modifikasi Akun Agen",content:"/modules/agen-usermod.html",fetching: true, data: v}); const aksi = await moly.dialog.show({title: "Modifikasi Akun Agen",content:"/modules/agen-usermod.html",fetching: true, data: v});

View File

@ -1,61 +1,153 @@
<style> <div style="text-align: center; font-weight: 600; margin: .8em 0; font-size: 1.2em;">
</style><group-el label="Program Kerja"> Program Kerja Agen Perubahan
<div style="text-align: right;"> </div>
<div style="display: flex; justify-content: space-between; padding: 0 2.5ch;">
<span>Tahun:&nbsp;
<select id="pkYear" style="width: max-content;">
</select>
</span>
<div style="display: grid; grid-template-columns: auto auto auto; gap: .75ch;">
<a-button id="submitProker">Ajukan Program Kerja</a-button>
<sep-bar></sep-bar>
<a-button id="newProker">Tambah Kegiatan</a-button> <a-button id="newProker">Tambah Kegiatan</a-button>
</div> </div>
<div style="max-height: calc(50vh - 6em); overflow-y: scroll; margin: 1em 0" id="pkWrapper"> </div>
<table id="proker" class="bordered selectable"> <div style="max-height: calc(50vh - 6em); overflow-y: scroll; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="pkWrapper">
<colgroup> <table id="proker" class="bordered selectable">
<col style="width: 4ch;"> <colgroup>
<col style="width: 19ch;"> <col style="width: 4ch;">
<col> <col style="width: 19ch;">
<col style="width: 8ch;"> <col>
<col style="width: 17ch;"> <col style="width: 8ch;">
<col style="width: 14ch;"> <col style="width: 17ch;">
</colgroup> <col style="width: 16ch;">
<thead> </colgroup>
<tr> <thead>
<th>No</th> <tr>
<th>Kegiatan</th> <th>No</th>
<th>Sasaran</th> <th>Kegiatan</th>
<th>Target Waktu</th> <th>Sasaran</th>
<th>Waktu Mulai</th> <th>Target Waktu</th>
<th>Status</th> <th>Waktu Mulai</th>
</tr> <th>Status</th>
</thead> </tr>
<tbody id="empty"> </thead>
<tr> <tbody id="empty">
<td colspan="6" style="text-align: center;">Data Kosong</td> <tr>
</tr> <td colspan="6" style="text-align: center;">Data Kosong</td>
</tbody> </tr>
<tbody id="pkContent" hidden> </tbody>
</tbody> <tbody id="pkContent" hidden>
</table> </tbody>
</div> </table>
</group-el> </div>
<script type="module"> <script type="module">
let prokers = []; window.prokers = [];
const kegiatanName = [
"Sebagai Katalis",
"Sebagai Penggerak Perubahan",
"Sebagai Pemberi Solusi",
"Sebagai Mediator",
"Sebagai Penghubung"
]
const statusName = [
"Draft",
"Ditolak",
"Diajukan",
"Berjalan",
"Lebih Awal",
"Tepat Waktu",
"Terlambat",
"Tidak Terlaksana"
]
async function populateProker() async function populateProker()
{ {
const loadid = moly.loadScreen.show("Memuat Daftar Program Kerja...","bar","#pkWrapper"); const loadid = moly.loadScreen.show("Memuat Daftar Program Kerja...","bar","#pkWrapper");
const kegiatanName = [
"Sebagai Katalis",
"Sebagai Penggerak Perubahan",
"Sebagai Pemberi Solusi",
"Sebagai Mediator",
"Sebagai Penghubung"
]
prokers = await getJson('/api/getprokers'); prokers = await getJson('/api/getprokers');
if (prokers.status != 200 || prokers.length < 1) if (prokers.status != 200 || prokers.length < 1)
{ {
moly.loadScreen.close(loadid); moly.loadScreen.close(loadid);
return; return;
} }
prokers = prokers.data; $('#pkYear').empty();
const years = [];
prokers = prokers.data.reduce((a,v)=>{
const aindex = a.findIndex(e=>e.prokerID == v.prokerID);
if(!years.includes(v.year))
{
years.push(v.year);
const opt = moly.newElement("option");
opt.value = v.year;
opt.append(v.year);
$('#pkYear').append(opt);
}
if(aindex >=0)
{
a[aindex].journal.push({
journalID: v.journalID,
submitterID: v.submitterID,
notes: v.notes,
status: v.status,
document: v.document,
timeStamp: v.timeStamp.replace("T"," ")
})
a[aindex].journal.sort((ja,jb)=>ja.journalID.localeCompare(jb.journalID));
}
else
{
const nv = JSON.parse(JSON.stringify(v));
nv.journal= [{
journalID: v.journalID,
submitterID: v.submitterID,
notes: v.notes,
status: v.status,
document: v.document,
timeStamp: v.timeStamp.replace("T"," ")
}]
const owner = agents.find(e=> e.agentID == v.ownerID)
if (owner)
{
nv.owner = owner
delete nv.ownerID
}
delete nv.journalID;
delete nv.submitterID;
delete nv.notes;
delete nv.status;
delete nv.document;
delete nv.timeStamp;
a.push(nv);
}
return a;
},[]);
$('#pkYear').val(years.length > 0 ? years[0] : "");
$('#submitProker').prop("disabled",years.length < 1);
$('#pkYear').change(()=>{
fillProker();
})
fillProker();
moly.loadScreen.close(loadid);
}
function fillProker()
{
$('#proker #empty').prop("hidden", prokers.length > 0); $('#proker #empty').prop("hidden", prokers.length > 0);
$('#proker #pkContent').prop("hidden", prokers.length < 1); $('#proker #pkContent').prop("hidden", prokers.length < 1);
$('#proker #pkContent').empty(); $('#proker #pkContent').empty();
$.each(prokers,(i,v)=>{ const listedProkers = prokers.filter(e=>e.year == Number($('#pkYear').val()));
$('#submitProker').prop("disabled",!(listedProkers.length > 0 && listedProkers[0].journal.at(-1).status < 2));
const statusStyles =[
"text-align: center; background-color: var(--secondary-foreground); color: var(--primary-background)",
"text-align: center; background-color: var(--neutral-n-accent); color: var(--primary-foreground)",
"text-align: center; background-color: var(--positive-accent); color: var(--primary-foreground)",
"text-align: center; background-color: unset; color: unset",
"text-align: center; background-color: var(--positive-accent); color: var(--primary-foreground)",
"text-align: center; background-color: var(--neutral-p-accent); color: var(--primary-foreground)",
"text-align: center; background-color: var(--neutral-n-accent); color: var(--primary-foreground)",
"text-align: center; background-color: var(--negative-accent); color: var(--primary-background)",
];
$.each(listedProkers,(i,v)=>{
const ro = moly.newElement("tr"); const ro = moly.newElement("tr");
const no = moly.newElement("td"); const no = moly.newElement("td");
const kg = moly.newElement("td"); const kg = moly.newElement("td");
@ -77,8 +169,8 @@
tw.style.textAlign = "center"; tw.style.textAlign = "center";
wm.append(((v.startDay == null ? "" : v.startDay.toString().padStart(2,"0") + " ") + monthName[v.startMonth] + " " + v.year)); wm.append(((v.startDay == null ? "" : v.startDay.toString().padStart(2,"0") + " ") + monthName[v.startMonth] + " " + v.year));
wm.style.textAlign = "right"; wm.style.textAlign = "right";
st.append("Draft"); st.append(statusName[v.journal.at(-1).status]);
st.style.textAlign = "center"; st.style = statusStyles[v.journal.at(-1).status];
$(ro).click(async()=>{ $(ro).click(async()=>{
const data = v; const data = v;
const vw = await moly.dialog.show({title: "Detil Program Kerja", content: "/modules/kegiatan-proker-view.html", fetching: true, data}); const vw = await moly.dialog.show({title: "Detil Program Kerja", content: "/modules/kegiatan-proker-view.html", fetching: true, data});
@ -86,7 +178,6 @@
}) })
$('#proker #pkContent').append(ro); $('#proker #pkContent').append(ro);
}); });
moly.loadScreen.close(loadid);
} }
$(document).ready(async()=>{ $(document).ready(async()=>{
populateProker(); populateProker();
@ -95,5 +186,27 @@
const np = await moly.dialog.show({title: "Entri Program Kerja dan Rencana Aksi", content: "/modules/kegiatan-proker-new.html", fetching: true, data}); const np = await moly.dialog.show({title: "Entri Program Kerja dan Rencana Aksi", content: "/modules/kegiatan-proker-new.html", fetching: true, data});
if(np) populateProker(); if(np) populateProker();
}); });
$('#submitProker').click(async()=>{
const loadid = moly.loadScreen.show("Memuat Daftar Program Kerja...","bar","#pkWrapper");
const listedProkers = prokers.filter(e=>e.year == Number($('#pkYear').val()));
const progCheck = [false,false,false,false,false];
$.each(listedProkers,(_,v)=>{progCheck[v.kegiatan] = true});
if(!(progCheck[0] && progCheck[1] && progCheck[2] && progCheck[3] && progCheck[4]))
{
moly.alert.show("Program Kerja Belum Lengkap","Harap melengkapi Program Kerja. Pastikan seluruh Kegiatan telah diprogramkan.");
console.log(progCheck)
moly.loadScreen.close(loadid);
return;
}
const submission = await postJson('/api/submitpk',{agentid: userDetails.agentID, year: Number($('#pkYear').val())});
if(submission.status != 202)
{
moly.alert.show("Pengajuan Program Kerja Gagal","Program Kerja tidak berhasil diajukan. Silakan ulangi kembali beberapa saat lagi.")
moly.loadScreen.close(loadid);
return;
}
populateProker();
moly.loadScreen.close(loadid);
})
}) })
</script> </script>