Reports done. Eval rating supported
This commit is contained in:
parent
95d23a3239
commit
4cf19d1ea7
@ -1,4 +1,4 @@
|
||||
vernum = "1.0.250601.1020"
|
||||
vernum = "1.0.250704.0335"
|
||||
async function getJson(url,headers={}) {
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
|
14
index.html
14
index.html
@ -21,6 +21,7 @@
|
||||
}
|
||||
*::-webkit-scrollbar, .main::-webkit-scrollbar {
|
||||
width: .8ch;
|
||||
height: .8ch;
|
||||
}
|
||||
|
||||
/* Scrollbar thumb (the draggable part) */
|
||||
@ -28,10 +29,9 @@
|
||||
background: var(--secondary-background); /* Dark semi-transparent */
|
||||
border-radius: .2ch; /* Rounded edges */
|
||||
}
|
||||
/* body
|
||||
{
|
||||
height: 100%;
|
||||
} */
|
||||
*::-webkit-scrollbar-track, .main::-webkit-scrollbar-track {
|
||||
background: var(--input-background);
|
||||
}
|
||||
h2, h3, h4
|
||||
{
|
||||
margin: .25em 0;
|
||||
@ -53,7 +53,7 @@ aside
|
||||
.logobox
|
||||
{
|
||||
height: 3em;
|
||||
position: fixed;
|
||||
position: absolute;
|
||||
top: .5ch;
|
||||
left: 0;
|
||||
width: inherit;
|
||||
@ -184,6 +184,7 @@ nav
|
||||
|
||||
<div>
|
||||
<span id="username">User Name</span>
|
||||
<div id="prof" style="height: 2.5em; width: 2.5em; vertical-align: middle; display: inline-block; border-radius: 1.25em; background-repeat:no-repeat; background-size: cover; background-position: center top;"></div>
|
||||
<sep-bar></sep-bar>
|
||||
<a-button type="blend" id="lo"><m-inline>logout</m-inline> Keluar</a-button>
|
||||
</div>
|
||||
@ -254,7 +255,8 @@ nav
|
||||
});
|
||||
if(res.status == 200) location = "/login.html";
|
||||
});
|
||||
$('#username').text(loggedInAgent.name)
|
||||
$('#username').text(loggedInAgent.name);
|
||||
$('#prof').css("background-image","url("+(loggedInAgent.photoURL ?? "/assets/images/generic-user.webp")+")");
|
||||
$('.item, .subitem').click(async (e)=>{
|
||||
if (window.shellnavigating) return;
|
||||
window.dispatchEvent(new Event("viewChange"));
|
||||
|
@ -184,7 +184,7 @@
|
||||
const sortedProkers = [...currProkers].filter(r=>r.journal.at(-1).status >= 1 && r.journal.at(-1).status <=3 ).sort((a,b)=>a.deadline - b.deadline);
|
||||
const closest = sortedProkers.find(p=>p.journal.at(-1).status == 2);
|
||||
µ('#udate').text(closest ? `${closest.deadline.getFullYear()}/${(closest.deadline.getMonth()+1).toString().padStart(2,"0")}/${closest.deadline.getDate().toString().padStart(2,"0")}` : "");
|
||||
µ('#utext').text(closest ? closest.sasaran : "");
|
||||
µ('#utext').text(closest ? (closest.owner.name + ": " + closest.sasaran) : "");
|
||||
const todayActs = sortedProkers.filter(p=>
|
||||
{
|
||||
const today = new Date();
|
||||
@ -204,7 +204,7 @@
|
||||
s.append(v.journal.at(-1).status == 1 ? `Ditolak: `: v.journal.at(-1).status == 2 ? `Diajukan: ` : `Disetujui: `);
|
||||
s.style.fontWeight = "600"
|
||||
s.style.color = v.journal.at(-1).status == 1 ? "var(--neutral-p-accent)": v.journal.at(-1).status == 2 ? "var(--neutral-n-accent)" : "var(--positive-accent)"
|
||||
t.append(v.sasaran)
|
||||
t.append(v.owner.name +": "+v.sasaran)
|
||||
µ('#htoday').append(d);
|
||||
});
|
||||
moly.loadScreen.close(loadid);
|
||||
|
@ -50,7 +50,6 @@
|
||||
<script type="module">
|
||||
const thisDialog = moly.lastDialog();
|
||||
const data = thisDialog.data;
|
||||
console.log(data);
|
||||
function µ(selector)
|
||||
{
|
||||
if (selector) return $(thisDialog.box).find(selector);
|
||||
|
@ -13,12 +13,12 @@
|
||||
<a-button id="newProker">Tambah Kegiatan</a-button>
|
||||
</div>
|
||||
</div>
|
||||
<div style="max-height: calc(50vh - 6em); overflow-y: scroll; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="pkWrapper">
|
||||
<div style="max-height: calc(80vh - 6em); overflow: auto; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="pkWrapper">
|
||||
<table id="proker" class="bordered selectable">
|
||||
<colgroup>
|
||||
<col style="width: 4ch;">
|
||||
<col style="width: 27ch;">
|
||||
<col>
|
||||
<col style="min-width: 12ch;">
|
||||
<col style="width: 8ch;">
|
||||
<col style="width: 17ch;">
|
||||
<col style="width: 16ch;">
|
||||
@ -174,6 +174,7 @@
|
||||
no.style.textAlign = "right";
|
||||
kg.append(kegiatanName[v.kegiatan]);
|
||||
ss.append(v.sasaran);
|
||||
ss.setAttribute("title",v.sasaran)
|
||||
tw.append(`${v.timeTarget} ${v.isInMonth ? "Bulan" : "Hari"}`);
|
||||
tw.style.textAlign = "center";
|
||||
wm.append(((v.startDay == null ? "" : v.startDay.toString().padStart(2,"0") + " ") + monthName[v.startMonth] + " " + v.year));
|
||||
|
585
modules/laporan-view.html
Normal file
585
modules/laporan-view.html
Normal file
@ -0,0 +1,585 @@
|
||||
<div style="display: grid; width: calc(90vw - 3ch); height: calc(90vh - 3.5em); grid-template-rows: 1fr auto; row-gap: .5em;">
|
||||
<div style=>
|
||||
<div id="vProker" class="viewer" style="height: 100%;" hidden>
|
||||
<div style="text-align: center; font-size: 1.1em; font-weight: 600;">
|
||||
Program Kerja Agen Perubahan Tahun <span class="yr"></span>
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: auto 1fr auto; column-gap: .5ch; margin-bottom: .5em;">
|
||||
<div style="display: grid; grid-template-columns: auto auto 1fr; column-gap: .5ch;">
|
||||
<span>Agen</span>
|
||||
<span>:</span>
|
||||
<span class="name"></span>
|
||||
<span>NIP</span>
|
||||
<span>:</span>
|
||||
<span class="nip"></span>
|
||||
<span>Unit Kerja</span>
|
||||
<span>:</span>
|
||||
<span class="uk"></span>
|
||||
</div>
|
||||
|
||||
<div style="display: grid; grid-template-columns: auto auto 1fr; column-gap: .5ch;">
|
||||
<span>Supervisor</span>
|
||||
<span>:</span>
|
||||
<span class="names"></span>
|
||||
<span>NIP</span>
|
||||
<span>:</span>
|
||||
<span class="nips"></span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="tbwrapper" style="position: absolute; width: 100%; overflow: auto; max-height: calc(100% - 6.25em)">
|
||||
<table class="bordered">
|
||||
<colgroup>
|
||||
<col style="width: 4ch;">
|
||||
<col style="width: 27ch;">
|
||||
<col style="min-width: 12ch;">
|
||||
<col style="width: 8ch;">
|
||||
<col style="width: 11ch;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Kegiatan</th>
|
||||
<th>Sasaran</th>
|
||||
<th>Target</th>
|
||||
<th>Mulai</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="pkContent">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="vRenak" class="viewer" style="height: 100%;" hidden>
|
||||
<div style="text-align: center; font-size: 1.1em; font-weight: 600;">
|
||||
Rencana Aksi Agen Perubahan Tahun <span class="yr"></span>
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: auto 1fr auto; column-gap: .5ch; margin-bottom: .5em;">
|
||||
<div style="display: grid; grid-template-columns: auto auto 1fr; column-gap: .5ch;">
|
||||
<span>Agen</span>
|
||||
<span>:</span>
|
||||
<span class="name"></span>
|
||||
<span>NIP</span>
|
||||
<span>:</span>
|
||||
<span class="nip"></span>
|
||||
<span>Unit Kerja</span>
|
||||
<span>:</span>
|
||||
<span class="uk"></span>
|
||||
</div>
|
||||
|
||||
<div style="display: grid; grid-template-columns: auto auto 1fr; column-gap: .5ch;">
|
||||
<span>Supervisor</span>
|
||||
<span>:</span>
|
||||
<span class="names"></span>
|
||||
<span>NIP</span>
|
||||
<span>:</span>
|
||||
<span class="nips"></span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="tbwrapper" style="position: absolute; width: 100%; overflow: auto; max-height: calc(100% - 6.25em)">
|
||||
<table class="bordered">
|
||||
<colgroup>
|
||||
<col style="width: 4ch;">
|
||||
<col style="min-width: 20ch;">
|
||||
<col style="width: 20ch;">
|
||||
<col style="width: 20ch;">
|
||||
<col style="width: 8ch;">
|
||||
<col style="min-width: 20ch;">
|
||||
<col style="width: 11ch;">
|
||||
<col style="width: 11ch;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Inovasi</th>
|
||||
<th>Sasaran</th>
|
||||
<th>Indikator</th>
|
||||
<th>Target</th>
|
||||
<th>Aksi</th>
|
||||
<th>Rencana Mulai</th>
|
||||
<th>Selesai Pada</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="raContent">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="vEval" class="viewer" style="height: 100%;" hidden>
|
||||
<div style="text-align: center; font-size: 1.1em; font-weight: 600;">
|
||||
Evaluasi Program Kerja Agen Perubahan Tahun <span class="yr"></span>
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: auto 1fr auto; column-gap: .5ch; margin-bottom: .5em;">
|
||||
<div style="display: grid; grid-template-columns: auto auto 1fr; column-gap: .5ch;">
|
||||
<span>Agen</span>
|
||||
<span>:</span>
|
||||
<span class="name"></span>
|
||||
<span>NIP</span>
|
||||
<span>:</span>
|
||||
<span class="nip"></span>
|
||||
<span>Unit Kerja</span>
|
||||
<span>:</span>
|
||||
<span class="uk"></span>
|
||||
</div>
|
||||
|
||||
<div style="display: grid; grid-template-columns: auto auto 1fr; column-gap: .5ch;">
|
||||
<span>Evaluator</span>
|
||||
<span>:</span>
|
||||
<span class="namee"></span>
|
||||
<span>NIP</span>
|
||||
<span>:</span>
|
||||
<span class="nipe"></span>
|
||||
<span>Rating</span>
|
||||
<span>:</span>
|
||||
<span><span id="rating"></span></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tbwrapper" style="position: absolute; width: 100%; overflow: auto; max-height: calc(100% - 6.25em)">
|
||||
<table class="bordered">
|
||||
<colgroup>
|
||||
<col style="min-width: 18ch;">
|
||||
<col style="width: 18ch;">
|
||||
<col style="width: 18ch;">
|
||||
<col style="width: 8ch;">
|
||||
<col style="min-width: 18ch;">
|
||||
<col style="width: 11ch;">
|
||||
<col style="width: 11ch;">
|
||||
<col style="width: 18ch;">
|
||||
<col style="width: 18ch;">
|
||||
<col style="width: 3ch;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Inovasi</th>
|
||||
<th>Sasaran</th>
|
||||
<th>Indikator</th>
|
||||
<th>Target</th>
|
||||
<th>Aksi</th>
|
||||
<th>Rencana Mulai</th>
|
||||
<th>Selesai Pada</th>
|
||||
<th>Kendala dan Solusi</th>
|
||||
<th>Catatan Evaluasi</th>
|
||||
<th>★</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="evContent">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: auto auto 1fr auto; gap: .25ch;">
|
||||
<div>
|
||||
<button id="proker">Program Kerja</button>
|
||||
</div>
|
||||
<div>
|
||||
<button id="renak">Rencana Aksi</button>
|
||||
</div>
|
||||
<div>
|
||||
<button id="eval">Evaluasi</button>
|
||||
</div>
|
||||
<button id="print"><m-inline>print</m-inline></button>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module">
|
||||
const thisDialog = moly.lastDialog();
|
||||
const data = thisDialog.data;
|
||||
const loadid = moly.loadScreen.show("Menyiapkan Laporan...","dots","#"+µ('[id^="db"]')[0].id);
|
||||
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"
|
||||
]
|
||||
// console.log(data)
|
||||
function µ(selector)
|
||||
{
|
||||
if (selector) return $(thisDialog.box).find(selector);
|
||||
return $(thisDialog.box);
|
||||
}
|
||||
let units = await getJson("/api/getunits");
|
||||
if(units.status != 200)
|
||||
{
|
||||
moly.loadScreen.update(loadid,"Gagal mengumpulkan data. Harap ulangi beberapa saat lagi.");
|
||||
}
|
||||
units = units.data;
|
||||
data.unitKerja = units.find(u=>u.deplID == data.deplID)?.unitKerja;
|
||||
µ('#proker').click(()=>{
|
||||
µ('.viewer').prop("hidden",true);
|
||||
µ('.viewer').removeClass("print");
|
||||
µ('#vProker').prop("hidden",false);
|
||||
µ('#vProker').addClass("print");
|
||||
µ('.positive').removeClass("positive");
|
||||
µ('#proker').addClass("positive");
|
||||
const printTitle = `Program Kerja Agen Perubahan ${data.name} Tahun ${data.prokers[0].year}`;
|
||||
µ('#print').off("click").click(()=>{
|
||||
const content = µ('.print')[0];
|
||||
if(!content) return;
|
||||
const pw = window.open('', '_blank');
|
||||
pw.document.write(`
|
||||
<html>
|
||||
<head>
|
||||
<title>${printTitle}</title>
|
||||
<link rel="stylesheet" href="/assets/css/fonts.css">
|
||||
<link rel="stylesheet" href="/assets/css/molybdenum.css">
|
||||
<style>
|
||||
@page {
|
||||
margin: 1cm;
|
||||
size: A4 landscape;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
table.bordered, table.bordered th , table.bordered td {
|
||||
border: 1px solid var(--secondary-background);
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
table td {
|
||||
white-space: normal !important;
|
||||
overflow: visible !important;
|
||||
text-overflow: unset !important;
|
||||
}
|
||||
.tbwrapper
|
||||
{
|
||||
overflow: unset !important;
|
||||
max-height: unset !important;
|
||||
}
|
||||
tr {
|
||||
break-inside: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
${content.innerHTML}
|
||||
<script>
|
||||
requestAnimationFrame(() => {
|
||||
setTimeout(() => {
|
||||
window.print();
|
||||
// window.close();
|
||||
}, 100); // small delay ensures DOM is painted
|
||||
});
|
||||
<\/script>
|
||||
</body>
|
||||
</html>
|
||||
`);
|
||||
pw.document.close();
|
||||
});
|
||||
});
|
||||
µ('#renak').click(()=>{
|
||||
µ('.viewer').prop("hidden",true);
|
||||
µ('.viewer').removeClass("print");
|
||||
µ('#vRenak').prop("hidden",false);
|
||||
µ('#vRenak').addClass("print");
|
||||
µ('.positive').removeClass("positive");
|
||||
µ('#renak').addClass("positive");
|
||||
const printTitle = `Rencana Aksi Agen Perubahan ${data.name} Tahun ${data.prokers[0].year}`;
|
||||
µ('#print').off("click").click(()=>{
|
||||
const content = µ('.print')[0];
|
||||
if(!content) return;
|
||||
const pw = window.open('', '_blank');
|
||||
pw.document.write(`
|
||||
<html>
|
||||
<head>
|
||||
<title>${printTitle}</title>
|
||||
<link rel="stylesheet" href="/assets/css/fonts.css">
|
||||
<link rel="stylesheet" href="/assets/css/molybdenum.css">
|
||||
<style>
|
||||
@page {
|
||||
margin: 1cm;
|
||||
size: A4 landscape;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
table.bordered, table.bordered th , table.bordered td {
|
||||
border: 1px solid var(--secondary-background);
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
table td {
|
||||
white-space: normal !important;
|
||||
overflow: visible !important;
|
||||
text-overflow: unset !important;
|
||||
}
|
||||
.tbwrapper
|
||||
{
|
||||
overflow: unset !important;
|
||||
max-height: unset !important;
|
||||
}
|
||||
tr {
|
||||
break-inside: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
${content.innerHTML}
|
||||
<script>
|
||||
requestAnimationFrame(() => {
|
||||
setTimeout(() => {
|
||||
window.print();
|
||||
// window.close();
|
||||
}, 100); // small delay ensures DOM is painted
|
||||
});
|
||||
<\/script>
|
||||
</body>
|
||||
</html>
|
||||
`);
|
||||
pw.document.close();
|
||||
});
|
||||
});
|
||||
µ('#eval').click(()=>{
|
||||
µ('.viewer').prop("hidden",true);
|
||||
µ('.viewer').removeClass("print");
|
||||
µ('#vEval').prop("hidden",false);
|
||||
µ('#vEval').addClass("print");
|
||||
µ('.positive').removeClass("positive");
|
||||
µ('#eval').addClass("positive");
|
||||
const printTitle = `Hasil Evaluasi Agen Perubahan ${data.name} Tahun ${data.prokers[0].year}`;
|
||||
µ('#print').off("click").click(()=>{
|
||||
const content = µ('.print')[0];
|
||||
if(!content) return;
|
||||
const pw = window.open('', '_blank');
|
||||
pw.document.write(`
|
||||
<html>
|
||||
<head>
|
||||
<title>${printTitle}</title>
|
||||
<link rel="stylesheet" href="/assets/css/fonts.css">
|
||||
<link rel="stylesheet" href="/assets/css/molybdenum.css">
|
||||
<style>
|
||||
@page {
|
||||
margin: 1cm;
|
||||
size: A4 landscape;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
table.bordered, table.bordered th , table.bordered td {
|
||||
border: 1px solid var(--secondary-background);
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
table td {
|
||||
white-space: normal !important;
|
||||
overflow: visible !important;
|
||||
text-overflow: unset !important;
|
||||
}
|
||||
.tbwrapper
|
||||
{
|
||||
overflow: unset !important;
|
||||
max-height: unset !important;
|
||||
}
|
||||
tr {
|
||||
break-inside: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
${content.innerHTML}
|
||||
<script>
|
||||
requestAnimationFrame(() => {
|
||||
setTimeout(() => {
|
||||
window.print();
|
||||
// window.close();
|
||||
}, 100); // small delay ensures DOM is painted
|
||||
});
|
||||
<\/script>
|
||||
</body>
|
||||
</html>
|
||||
`);
|
||||
pw.document.close();
|
||||
});
|
||||
});
|
||||
µ('#print').off("click").click(()=>{
|
||||
const content = µ('.print')[0];
|
||||
if(!content) return;
|
||||
const pw = window.open('', '_blank');
|
||||
pw.document.write(`
|
||||
<html>
|
||||
<head>
|
||||
<title>${printTitle}</title>
|
||||
<link rel="stylesheet" href="/assets/css/fonts.css">
|
||||
<link rel="stylesheet" href="/assets/css/molybdenum.css">
|
||||
<style>
|
||||
@page {
|
||||
margin: 1cm;
|
||||
size: A4 landscape;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
${content.innerHTML}
|
||||
<script>
|
||||
requestAnimationFrame(() => {
|
||||
setTimeout(() => {
|
||||
window.print();
|
||||
// window.close();
|
||||
}, 100); // small delay ensures DOM is painted
|
||||
});
|
||||
<\/script>
|
||||
</body>
|
||||
</html>
|
||||
`);
|
||||
pw.document.close();
|
||||
});
|
||||
let str = "☆☆☆☆☆";
|
||||
for(let s=1;s<=data.rating;s++)
|
||||
{
|
||||
str = "★" + str;
|
||||
str = str.substring(0,5);
|
||||
}
|
||||
str += ` (${data.rating})`
|
||||
µ('#rating').text(str);
|
||||
µ('.yr').text(data.prokers[0].year);
|
||||
µ('.name').text(data.name);
|
||||
µ('.nip').text(data.agentID);
|
||||
const spv = agents.find(a=>a.agentID == data.prokers[0].journal.find(j=>j.status == 2).submitterID);
|
||||
µ('.names').text(spv.name);
|
||||
µ('.nips').text(spv.agentID);
|
||||
const evd = data.prokers.find(p=>p.evaled)?.journal.find(j=>j.status == 8);
|
||||
µ('#eval').prop("disabled", (!evd));
|
||||
const evr = agents.find(a=>a.agentID == evd?.submitterID);
|
||||
µ('.namee').text(evr?.name);
|
||||
µ('.nipe').text(evr?.agentID);
|
||||
µ('.uk').text(data.unitKerja);
|
||||
µ('.uk').text(data.unitKerja);
|
||||
function populateReport()
|
||||
{
|
||||
µ('#pkContent').empty();
|
||||
µ('#raContent').empty();
|
||||
µ('#evContent').empty();
|
||||
$.each(data.prokers,(i,v)=>{
|
||||
const ro = moly.newElement("tr");
|
||||
const no = moly.newElement("td");
|
||||
const kg = moly.newElement("td");
|
||||
const ss = moly.newElement("td");
|
||||
const tg = moly.newElement("td");
|
||||
const st = moly.newElement("td");
|
||||
ro.append(no);
|
||||
ro.append(kg);
|
||||
ro.append(ss);
|
||||
ro.append(tg);
|
||||
ro.append(st);
|
||||
no.style.textAlign
|
||||
= "right";
|
||||
tg.style.textAlign
|
||||
= "center";
|
||||
no.append((i+1)+".");
|
||||
kg.append(kegiatanName[v.kegiatan]);
|
||||
ss.append(v.sasaran);
|
||||
tg.append(`${v.timeTarget} ${v.isInMonth ? "Bulan" : "Hari"}`);
|
||||
// st.append(((v.startDay == null ? "" : v.startDay.toString().padStart(2,"0") + " ") + monthName[v.startMonth] + " " + v.year));
|
||||
st.append((v.year+"/"+v.startMonth.toString().padStart(2,"0")) + (!v.isInMonth ? ("/"+v.startDay.toString().padStart(2,"0")) : ""));
|
||||
µ('#pkContent').append(ro);
|
||||
const rro = moly.newElement("tr");
|
||||
const rno = moly.newElement("td");
|
||||
const inv = moly.newElement("td");
|
||||
const ssr = moly.newElement("td");
|
||||
const ind = moly.newElement("td");
|
||||
const tgt = moly.newElement("td");
|
||||
const act = moly.newElement("td");
|
||||
const str = moly.newElement("td");
|
||||
const end = moly.newElement("td");
|
||||
rro.append(rno);
|
||||
rro.append(inv);
|
||||
rro.append(ssr);
|
||||
rro.append(ind);
|
||||
rro.append(tgt);
|
||||
rro.append(act);
|
||||
rro.append(str);
|
||||
rro.append(end);
|
||||
rno.style.textAlign
|
||||
="right";
|
||||
tgt.style.textAlign
|
||||
="center";
|
||||
rno.append((i+1)+".");
|
||||
inv.append(v.sasaran);
|
||||
ssr.append(v.entityTarget);
|
||||
ind.append(v.indicators);
|
||||
tgt.append(`${v.timeTarget} ${v.isInMonth ? "Bulan" : "Hari"}`);
|
||||
act.append(v.actions);
|
||||
// str.append(((v.startDay == null ? "" : v.startDay.toString().padStart(2,"0") + " ") + monthName[v.startMonth] + " " + v.year));
|
||||
str.append((v.year+"/"+v.startMonth.toString().padStart(2,"0")) + (!v.isInMonth ? ("/"+v.startDay.toString().padStart(2,"0")) : ""));
|
||||
end.append(!v.completed ? "Belum" : v.journal.find(j=>j.status == 4).timeStamp.replaceAll("-","/").substring(0,10))
|
||||
µ('#raContent').append(rro);
|
||||
// if(!evd) return;
|
||||
const ero = moly.newElement("tr");
|
||||
const env = moly.newElement("td");
|
||||
const ess = moly.newElement("td");
|
||||
const ein = moly.newElement("td");
|
||||
const etg = moly.newElement("td");
|
||||
const eac = moly.newElement("td");
|
||||
const est = moly.newElement("td");
|
||||
const edn = moly.newElement("td");
|
||||
const eks = moly.newElement("td");
|
||||
const ems = moly.newElement("td");
|
||||
const ert = moly.newElement("td");
|
||||
ero.append(env);
|
||||
ero.append(ess);
|
||||
ero.append(ein);
|
||||
ero.append(etg);
|
||||
ero.append(eac);
|
||||
ero.append(est);
|
||||
ero.append(edn);
|
||||
ero.append(eks);
|
||||
ero.append(ems);
|
||||
ero.append(ert);
|
||||
// <th>Inovasi</th>
|
||||
// <th>Sasaran</th>
|
||||
// <th>Indikator</th>
|
||||
// <th>Target</th>
|
||||
// <th>Aksi</th>
|
||||
// <th>Rencana Mulai</th>
|
||||
// <th>Selesai Pada</th>
|
||||
// <th>Kendala dan Solusi</th>
|
||||
// <th>Catatan Evaluasi</th>
|
||||
// <th>★</th>
|
||||
//evContent
|
||||
env.append(v.sasaran);
|
||||
ess.append(v.entityTarget);
|
||||
ein.append(v.indicators);
|
||||
etg.append(`${v.timeTarget} ${v.isInMonth ? "Bulan" : "Hari"}`);
|
||||
eac.append(v.actions);
|
||||
est.append((v.year+"/"+v.startMonth.toString().padStart(2,"0")) + (!v.isInMonth ? ("/"+v.startDay.toString().padStart(2,"0")) : ""));
|
||||
edn.append(!v.completed ? "(Belum Selesai)" : v.journal.find(j=>j.status == 4).timeStamp.replaceAll("-","/").substring(0,10));
|
||||
const done = v.completed ? v.journal.find(j=>j.status == 4) : {};
|
||||
const ks = v.completed ? JSON.parse(done.notes) : {}
|
||||
const ksstr = v.completed ? (
|
||||
`Kendala:
|
||||
${(ks.kendala.length > 0 ? ks.kendala : "-")}
|
||||
Solusi:
|
||||
${(ks.solusi.length > 0 ? ks.solusi : "-")}`
|
||||
) : "(Belum Selesai)"
|
||||
eks.append(ksstr);
|
||||
eks.style.setProperty("white-space", "pre-line", "important");
|
||||
const evalj = v.evaled ? v.journal.find(j=>j.status == 8) : {};
|
||||
const ev = v.evaled ? JSON.parse(evalj.notes) : {m:"(Belum Evaluasi)",r:0}
|
||||
ems.append(ev.m);
|
||||
ert.append(ev.r);
|
||||
µ('#evContent').append(ero);
|
||||
})
|
||||
}
|
||||
populateReport();
|
||||
µ('#proker').click();
|
||||
if (!units.status) moly.loadScreen.close(loadid);
|
||||
</script>
|
@ -1,3 +1,176 @@
|
||||
<div style="text-align: center;">
|
||||
Belum Cukup Data
|
||||
<div style="text-align: center; font-weight: 600; margin: .8em 0; font-size: 1.1em;">
|
||||
Laporan Aksi Perubahan<br>
|
||||
<span id="uk"></span>
|
||||
</div>
|
||||
<div style="margin: 0 2ch;">
|
||||
Tahun
|
||||
<select id="pkYear" style="width: max-content;">
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<div style="max-height: calc(78vh - 6em); overflow: auto; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="agWrapper">
|
||||
<table id="agents" class="bordered selectable">
|
||||
<colgroup>
|
||||
<col style="width: 4ch;">
|
||||
<col style="width: 22ch;">
|
||||
<col style="min-width: 20ch;">
|
||||
<col style="width: 9ch;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>NIP</th>
|
||||
<th>Nama Agen</th>
|
||||
<th>Rating Kinerja</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="agEmpty">
|
||||
<tr>
|
||||
<td colspan="4" style="text-align: center;">
|
||||
Data Kosong
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody id="agContent" hidden>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<script type="module">
|
||||
window.prokers = [];
|
||||
async function getProkers()
|
||||
{
|
||||
const loadid = moly.loadScreen.show("Memuat data...","bar","#agWrapper");
|
||||
const getprokers = await getJson("/api/getprokers");
|
||||
if (getprokers.status != 200)
|
||||
{
|
||||
moly.alert.show("Gagal Memuat Data","Data Program Kerja tidak berhasil dimuat. Silakan ulangi kembali beberapa saat lagi.");
|
||||
moly.loadScreen.close(loadid);
|
||||
return;
|
||||
}
|
||||
let years = [];
|
||||
prokers = getprokers.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;
|
||||
},[]).filter(p=>p.owner); //filter untested!
|
||||
//============AGENTS TABLE FILLING STARTS HERE======================
|
||||
$('#agContent').empty();
|
||||
const users = await getJson("/api/getusers");
|
||||
if(users.status != 200)
|
||||
{
|
||||
moly.alert.show("Gagal Memuat Data","Data pengguna tidak berhasil dimuat. Silakan ulangi kembali beberapa saat lagi.")
|
||||
moly.loadScreen.close(loadid);
|
||||
return;
|
||||
}
|
||||
let num = 1;
|
||||
const repAgents = JSON.parse(JSON.stringify(agents))
|
||||
$.each(repAgents,(_,v)=>{
|
||||
if (users.data.find(u=>u.agentID == v.agentID).level != 3) return;
|
||||
v.prokers = prokers.filter(p=>p.owner.agentID == v.agentID);
|
||||
delete v.owner;
|
||||
if(v.prokers.length<=0)
|
||||
{
|
||||
v.approved = false;
|
||||
v.rating = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
v.approved = v.prokers[0].journal.at(-1).status >= 3
|
||||
v.rating = 0;
|
||||
$.each(v.prokers,(_,y)=>{
|
||||
y.completed = y.journal.at(-1).status >= 4;
|
||||
y.evaled = y.journal.at(-1).status == 8;
|
||||
y.rating = y.evaled ? JSON.parse(y.journal.at(-1).notes).r : 0;
|
||||
v.rating += y.rating;
|
||||
});
|
||||
v.completed = v.prokers.every(p=>p.completed);
|
||||
v.evaled = v.prokers.every(p=>p.evaled);
|
||||
v.rating = Number((v.rating / v.prokers.length).toFixed(2));
|
||||
}
|
||||
//====EXPAND LATER. WON'T WORK WELL LIKE THIS
|
||||
const ro = moly.newElement("tr");
|
||||
const no = moly.newElement("td");
|
||||
const ni = moly.newElement("td");
|
||||
const na = moly.newElement("td");
|
||||
const ra = moly.newElement("td");
|
||||
ro.append(no);
|
||||
ro.append(ni);
|
||||
ro.append(na);
|
||||
ro.append(ra);
|
||||
no.append(num + ".");
|
||||
num++;
|
||||
no.style.textAlign = "right";
|
||||
ni.append(v.agentID);
|
||||
ni.style.textAlign
|
||||
= ra.style.textAlign
|
||||
= "center";
|
||||
na.append(v.name);
|
||||
$(ro).click(async()=>{
|
||||
if(!v.approved)
|
||||
{
|
||||
moly.alert.show("Belum Ada Program Kerja",`Agen ${v.name} belum memiliki program kerja yang disetujui.`);
|
||||
return;
|
||||
}
|
||||
await moly.dialog.show({title:"Laporan Kerja Agen Perubahan "+v.name, content:"/modules/laporan-view.html",fetching:true, data: v});
|
||||
});
|
||||
ra.append(v.rating);
|
||||
$('#agContent').append(ro);
|
||||
})
|
||||
$('#agEmpty').prop("hidden",repAgents.length > 0);
|
||||
$('#agContent').prop("hidden",repAgents.length < 1);
|
||||
moly.loadScreen.close(loadid);
|
||||
return;
|
||||
}
|
||||
function µ(selector)
|
||||
{
|
||||
if (selector) return $('body>#main>#content').find(selector);
|
||||
return $('body>#main>#content');
|
||||
}
|
||||
µ('#uk').text(userDetails.info.unitKerja);
|
||||
await getProkers();
|
||||
</script>
|
@ -108,17 +108,33 @@
|
||||
const ks = JSON.parse(v.notes);
|
||||
no.append("Kendala:");
|
||||
no.append(moly.newElement("br"));
|
||||
no.append(ks.kendala.length > 1? ks.kendala : "-");
|
||||
no.append(ks.kendala.length > 1? ks.kendala : "(Tidak ada)");
|
||||
no.append(moly.newElement("br"));
|
||||
no.append("Solusi:");
|
||||
no.append(moly.newElement("br"));
|
||||
no.append(ks.solusi.length > 1? ks.solusi : "-");
|
||||
no.append(ks.solusi.length > 1? ks.solusi : "(Tidak ada)");
|
||||
}
|
||||
else if(v.status ==8)
|
||||
{
|
||||
const rm = JSON.parse(v.notes);
|
||||
no.append("Nilai: ");
|
||||
let str = "☆☆☆☆☆";
|
||||
for(let s=1;s<=rm.r;s++)
|
||||
{
|
||||
str = "★" + str;
|
||||
str = str.substring(0,5);
|
||||
}
|
||||
no.append(str);
|
||||
no.append(moly.newElement("br"));
|
||||
no.append("Catatan: ");
|
||||
no.append(moly.newElement("br"));
|
||||
no.append(rm.m.length > 1? rm.m : "(Tidak ada)");
|
||||
}
|
||||
else
|
||||
{
|
||||
no.append("Catatan:");
|
||||
no.append(moly.newElement("br"));
|
||||
no.append(v.notes.length > 1? v.notes : "-");
|
||||
no.append(v.notes.length > 1? v.notes : "(Tidak ada)");
|
||||
}
|
||||
// console.log(typeof v.document)
|
||||
if(typeof v.document === "string")
|
||||
|
@ -1,14 +1,14 @@
|
||||
|
||||
<div style="display: grid; grid-template-columns: auto 1fr; column-gap: 1ch; height: 80vh;">
|
||||
<div style="display: grid; grid-template-columns: auto 1fr; column-gap: 1ch; height: calc(80vh - 1em);">
|
||||
<div>
|
||||
<div>Dokumen Eviden:</div>
|
||||
<iframe style="width: 68vw; height: calc(83vh - 3.5em); width: calc(88vw - 38ch)">
|
||||
<iframe style="width: 68vw; height: calc(80vh - 2.8em); width: calc(88vw - 38ch)">
|
||||
|
||||
</iframe>
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: auto 1fr; column-gap: 1ch; width: 35ch; grid-auto-rows: min-content;">
|
||||
<span style="grid-column: span 2;">Aksi Perubahan</span>
|
||||
<textarea id="act" style="grid-column: span 2; width: 35ch; height: 5em; resize: none;" readonly></textarea>
|
||||
<span style="grid-column: span 2;">Aksi Perubahan:</span>
|
||||
<textarea id="act" style="grid-column: span 2; width: 35ch; height: 4em; resize: none;" readonly></textarea>
|
||||
Rencana Mulai <span id="planStart"></span>
|
||||
Rencana Durasi <span id="planDur"></span>
|
||||
Selesai Pada <span id="finishedAt"></span>
|
||||
@ -16,15 +16,19 @@
|
||||
<span style="grid-column: span 2;">
|
||||
Kendala:
|
||||
</span>
|
||||
<textarea id="pro" style="grid-column: span 2; width: 35ch; height: 5em; resize: none;" placeholder="(Tidak ada kendala)" readonly></textarea>
|
||||
<textarea id="pro" style="grid-column: span 2; width: 35ch; height: 4em; resize: none;" placeholder="(Tidak ada kendala)" readonly></textarea>
|
||||
<span style="grid-column: span 2;">
|
||||
Solusi:
|
||||
</span>
|
||||
<textarea id="sol" style="grid-column: span 2; width: 35ch; height: 5em; resize: none;" placeholder="(Tidak ada solusi)" readonly></textarea>
|
||||
<textarea id="sol" style="grid-column: span 2; width: 35ch; height: 4em; resize: none;" placeholder="(Tidak ada solusi)" readonly></textarea>
|
||||
<span style="grid-column: span 2;">
|
||||
Nilai: <span id="nilai"></span>
|
||||
</span>
|
||||
<input style="grid-column: span 2;" type="range" id="rating" min="1" max="5" value="4">
|
||||
<span style="grid-column: span 2;">
|
||||
Catatan Evaluasi:
|
||||
</span>
|
||||
<textarea id="evalnotes" style="grid-column: span 2; width: 35ch; height: 5em; resize: none;" placeholder="Contoh: Bagus, harap pertahankan kinerja saudara."></textarea>
|
||||
<textarea id="evalnotes" style="grid-column: span 2; width: 35ch; height: 4em; resize: none;" placeholder="Catatan atas kinerja atau solusi dari kendala yang dihadapi agen." maxlength="490"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div style="text-align: right;">
|
||||
@ -40,10 +44,16 @@
|
||||
}
|
||||
const finJour = data.journal.find(e=>e.status == 4);
|
||||
const prosol = JSON.parse(finJour.notes);
|
||||
console.log(data)
|
||||
µ('#act').val(data.actions);
|
||||
µ('#pro').val(prosol.kendala);
|
||||
µ('#sol').val(prosol.solusi);
|
||||
// let str = "☆☆☆☆☆";
|
||||
// for(let s=1;s<=Number(µ('#rating').val());s++)
|
||||
// {
|
||||
// str = "★" + str;
|
||||
// str = str.substring(0,5);
|
||||
// }
|
||||
// µ('#nilai').text(str);
|
||||
µ('#planStart').text(data.year + "-" + data.startMonth.toString().padStart(2,"0")+ (data.isInMonth ? "" : "-" + data.startDay.toString().padStart(2,"0")));
|
||||
µ('#planDur').text(data.timeTarget + " " + (data.isInMonth ? "Bulan" : "Hari"));
|
||||
µ('#finishedAt').text(finJour.timeStamp.substring(0,16));
|
||||
@ -51,7 +61,13 @@
|
||||
µ('iframe')[0].src="/uploads/dokumen/" + finJour.document;
|
||||
µ('#submit').click(async()=>{
|
||||
const loadid = moly.loadScreen.show("Mengirim Evaluasi...","sonar","#"+µ('div[id^="db"]')[0].id)
|
||||
const evalres = await postJson('/api/eval', {prokerid: data.prokerID, notes: µ('#evalnotes').val().length > 0 ? µ('#evalnotes').val(): "-"});
|
||||
const notes = JSON.stringify(
|
||||
{
|
||||
r: Number(µ('#rating').val()),
|
||||
m: (µ('#evalnotes').val().length > 0 ? µ('#evalnotes').val(): "(Tidak ada)")
|
||||
}
|
||||
)
|
||||
const evalres = await postJson('/api/eval', {prokerid: data.prokerID, notes});
|
||||
if(evalres.status != 201)
|
||||
{
|
||||
moly.alert.show("Pengiriman Evaluaasi Gagal","Tidak dapat mengirim evaluasi. Silakan ulangi kembali beberapa saat lagi.");
|
||||
@ -61,4 +77,14 @@
|
||||
moly.loadScreen.close(loadid);
|
||||
thisDialog.resolve(true);
|
||||
});
|
||||
µ('#rating').change(()=>{
|
||||
let str = "☆☆☆☆☆";
|
||||
for(let s=1;s<=Number(µ('#rating').val());s++)
|
||||
{
|
||||
str = "★" + str;
|
||||
str = str.substring(0,5);
|
||||
}
|
||||
µ('#nilai').text(str);
|
||||
});
|
||||
µ('#rating').change();
|
||||
</script>
|
@ -3,7 +3,7 @@
|
||||
Daftar Agen Perubahan<br>
|
||||
<span id="uk"></span>
|
||||
</div>
|
||||
<div style="max-height: calc(50vh - 6em); overflow-y: scroll; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="agWrapper">
|
||||
<div style="max-height: calc(70vh - 6em); overflow: auto; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="agWrapper">
|
||||
<table id="agents" class="bordered selectable">
|
||||
<colgroup>
|
||||
<col style="width: 4ch;">
|
||||
@ -43,12 +43,12 @@
|
||||
</span>
|
||||
|
||||
</div>
|
||||
<div style="max-height: calc(50vh - 6em); overflow-y: scroll; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="pkWrapper">
|
||||
<div style="max-height: calc(68vh - 6em); overflow: auto; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="pkWrapper">
|
||||
<table id="proker" class="bordered selectable">
|
||||
<colgroup>
|
||||
<col style="width: 4ch;">
|
||||
<col style="width: 27ch;">
|
||||
<col>
|
||||
<col style="min-width: 12ch;">
|
||||
<col style="width: 8ch;">
|
||||
<col style="width: 17ch;">
|
||||
<col style="width: 16ch;">
|
||||
@ -208,6 +208,7 @@
|
||||
no.style.textAlign = "right";
|
||||
kg.append(kegiatanName[v.kegiatan]);
|
||||
ss.append(v.sasaran);
|
||||
ss.setAttribute("title",v.sasaran);
|
||||
tw.append(`${v.timeTarget} ${v.isInMonth ? "Bulan" : "Hari"}`);
|
||||
tw.style.textAlign = "center";
|
||||
wm.append(((v.startDay == null ? "" : v.startDay.toString().padStart(2,"0") + " ") + monthName[v.startMonth] + " " + v.year));
|
||||
@ -236,11 +237,20 @@
|
||||
$('#proker #pkContent').append(ro);
|
||||
});
|
||||
}
|
||||
function fillAgents()
|
||||
async function fillAgents()
|
||||
{
|
||||
const loadid = moly.loadScreen.show("Memuat data agen...","bar","#agWrapper");
|
||||
$('#agContent').empty();
|
||||
$.each(agents.filter(a=>a.agentID != userDetails.info.agentID),(i,v)=>{
|
||||
const users = await getJson("/api/getusers");
|
||||
if(users.status != 200)
|
||||
{
|
||||
moly.alert.show("Gagal Memuat Data","Data pengguna tidak berhasil dimuat. Silakan ulangi kembali beberapa saat lagi.")
|
||||
moly.loadScreen.close(loadid);
|
||||
return;
|
||||
}
|
||||
let num = 1;
|
||||
$.each(agents,(_,v)=>{
|
||||
if (users.data.find(u=>u.agentID == v.agentID).level != 3) return;
|
||||
const ro = moly.newElement("tr");
|
||||
const no = moly.newElement("td");
|
||||
const ni = moly.newElement("td");
|
||||
@ -248,7 +258,8 @@
|
||||
ro.append(no)
|
||||
ro.append(ni)
|
||||
ro.append(na)
|
||||
no.append((i+1) + ".");
|
||||
no.append(num + ".");
|
||||
num++;
|
||||
no.style.textAlign = "right";
|
||||
ni.append(v.agentID);
|
||||
ni.style.textAlign = "center";
|
||||
|
@ -1,8 +1,12 @@
|
||||
<div style="max-height: calc(50vh - 6em); overflow-y: scroll; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="rgWrapper">
|
||||
<div style="text-align: center; font-weight: 600; margin: .8em 0; font-size: 1.1em;">
|
||||
Daftar Dokumen Regulasi
|
||||
</div>
|
||||
<a-button id="newReg" style="margin: 0 2ch;">Entri Regulasi Baru</a-button>
|
||||
<div style="max-height: calc(83vh - 6em); overflow: auto; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="rgWrapper">
|
||||
<table id="regs" class="bordered selectable">
|
||||
<colgroup>
|
||||
<col style="width: 25ch;">
|
||||
<col>
|
||||
<col style="min-width: 10ch;">
|
||||
<col style="width: 20ch;">
|
||||
<col style="width: 19ch;">
|
||||
</colgroup>
|
||||
@ -23,7 +27,6 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<a-button id="newReg">Entri Regulasi</a-button>
|
||||
<script type="module">
|
||||
let regulations = [];
|
||||
async function getRegs()
|
||||
|
@ -3,7 +3,7 @@
|
||||
Daftar Agen Perubahan<br>
|
||||
<span id="uk"></span>
|
||||
</div>
|
||||
<div style="max-height: calc(50vh - 6em); overflow-y: scroll; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="agWrapper">
|
||||
<div style="max-height: calc(70vh - 6em); overflow: auto; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="agWrapper">
|
||||
<table id="agents" class="bordered selectable">
|
||||
<colgroup>
|
||||
<col style="width: 4ch;">
|
||||
@ -43,12 +43,12 @@
|
||||
</span>
|
||||
|
||||
</div>
|
||||
<div style="max-height: calc(50vh - 6em); overflow-y: scroll; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="pkWrapper">
|
||||
<div style="max-height: calc(68vh - 6em); overflow: auto; margin: 0 0 1em 0; padding: 0 2ch 2ch 2ch;" id="pkWrapper">
|
||||
<table id="proker" class="bordered selectable">
|
||||
<colgroup>
|
||||
<col style="width: 4ch;">
|
||||
<col style="width: 19ch;">
|
||||
<col>
|
||||
<col style="width: 27ch;">
|
||||
<col style="min-width: 12ch;">
|
||||
<col style="width: 8ch;">
|
||||
<col style="width: 17ch;">
|
||||
<col style="width: 16ch;">
|
||||
@ -204,6 +204,7 @@
|
||||
no.style.textAlign = "right";
|
||||
kg.append(kegiatanName[v.kegiatan]);
|
||||
ss.append(v.sasaran);
|
||||
ss.setAttribute("title",v.sasaran);
|
||||
tw.append(`${v.timeTarget} ${v.isInMonth ? "Bulan" : "Hari"}`);
|
||||
tw.style.textAlign = "center";
|
||||
wm.append(((v.startDay == null ? "" : v.startDay.toString().padStart(2,"0") + " ") + monthName[v.startMonth] + " " + v.year));
|
||||
@ -227,11 +228,20 @@
|
||||
$('#proker #pkContent').append(ro);
|
||||
});
|
||||
}
|
||||
function fillAgents()
|
||||
async function fillAgents()
|
||||
{
|
||||
const loadid = moly.loadScreen.show("Memuat data agen...","bar","#agWrapper");
|
||||
$('#agContent').empty();
|
||||
$.each(agents.filter(a=>a.agentID != userDetails.info.agentID),(i,v)=>{
|
||||
const users = await getJson("/api/getusers");
|
||||
if(users.status != 200)
|
||||
{
|
||||
moly.alert.show("Gagal Memuat Data","Data pengguna tidak berhasil dimuat. Silakan ulangi kembali beberapa saat lagi.")
|
||||
moly.loadScreen.close(loadid);
|
||||
return;
|
||||
}
|
||||
let num = 1;
|
||||
$.each(agents,(_,v)=>{
|
||||
if (users.data.find(u=>u.agentID == v.agentID).level != 3) return;
|
||||
const ro = moly.newElement("tr");
|
||||
const no = moly.newElement("td");
|
||||
const ni = moly.newElement("td");
|
||||
@ -239,7 +249,8 @@
|
||||
ro.append(no)
|
||||
ro.append(ni)
|
||||
ro.append(na)
|
||||
no.append((i+1) + ".");
|
||||
no.append(num + ".");
|
||||
num++;
|
||||
no.style.textAlign = "right";
|
||||
ni.append(v.agentID);
|
||||
ni.style.textAlign = "center";
|
||||
|
Loading…
x
Reference in New Issue
Block a user