You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
457 lines
15 KiB
JavaScript
457 lines
15 KiB
JavaScript
import { accnil, _bbData } from "{{PATH}}/assets-js/module-lap-bb.js?v={time}";
|
|
import { TTD } from "{{PATH}}/assets-js/module-lap-ttd.js?v={time}";
|
|
import { temp , Footer} from "{{PATH}}/assets-js/module-lap-filter.js?v={time}";
|
|
import { xlsx } from "{{PATH}}/assets-js/module-export-xlsx.js?v={time}";
|
|
|
|
globalThis.acc = JSON.parse(_id('acc').innerHTML);
|
|
globalThis.dmainacc = JSON.parse(_id('dmainacc').innerHTML);
|
|
|
|
acc = acc.sortArrayObjectAsc('main')
|
|
_id('tgl1').innerHTML = tanggal().normal2
|
|
_id('tgl2').innerHTML = tanggal().normal3
|
|
|
|
let tmplr = {
|
|
ururtmain: [],
|
|
ururtsubmain: [],
|
|
data: {}
|
|
}
|
|
|
|
window._cekTotalSatuTahun = function(d){
|
|
let num = [];
|
|
let tot = [];
|
|
for(let c of d){
|
|
let nm = 0;
|
|
for (let z = 0; z < 12; z++) {
|
|
let cc = 'b' + (z + 1).pad(2);
|
|
nm += Number(c[cc]);
|
|
}
|
|
num.push(nm.currency(0));
|
|
tot.push(nm);
|
|
}
|
|
console.log(JSON.stringify({
|
|
beban : _dataBeban.map(function(r){
|
|
return {
|
|
main : r.main,
|
|
total : r.b00
|
|
};
|
|
}),
|
|
total: tot.sum().currency(0),
|
|
detail: num
|
|
}, null, 4));
|
|
return null;
|
|
}
|
|
|
|
let getLabaItem = acc.map(function (a) {
|
|
let [{ mainkel }] = dmainacc.cond(a.main, 'kode');
|
|
if (mainkel) {
|
|
a.mainkel = mainkel;
|
|
}
|
|
return a;
|
|
}).cond('L', 'nr').removeDuplicate(['mainkel']).map((e) => { return e.mainkel });
|
|
|
|
|
|
for (let item of dmainacc) {
|
|
if (!tmplr.data[item.mainkel]) {
|
|
tmplr.ururtmain.push(item.mainkel);
|
|
tmplr.data[item.mainkel] = {}
|
|
}
|
|
if (!tmplr.data[item.mainkel][item.subkel]) {
|
|
tmplr.ururtsubmain.push([item.subkel])
|
|
tmplr.data[item.mainkel][item.subkel] = []
|
|
}
|
|
tmplr.data[item.mainkel][item.subkel].push({
|
|
data: item,
|
|
child: acc.cond(item.kode, 'main')
|
|
})
|
|
};
|
|
|
|
|
|
const nbsp = function (b) {
|
|
let a = '';
|
|
for (let x = 0; x < (b * 4); x++) {
|
|
a += ' '
|
|
}
|
|
return a;
|
|
}
|
|
|
|
const getTmpNew = function (ta, tb) {
|
|
let type = _id('laporantype').value;
|
|
let app = _id('app').value;
|
|
let tmp = '';
|
|
|
|
for (let a of getLabaItem) {
|
|
tmp += `
|
|
<tr class="main-top" style="border-bottom: 1px solid #ddd;">
|
|
<td colspan="4">${a}</td>
|
|
</tr>
|
|
`;
|
|
for (let submain of Object.keys(tmplr.data[a])) {
|
|
tmp += `
|
|
<tr class="main-top" style="border-bottom: 1px solid #ddd;">
|
|
<td colspan="4">${nbsp(1)} ${submain}</td>
|
|
</tr>
|
|
`;
|
|
for (let main of tmplr.data[a][submain]) {
|
|
let tr = main.child;
|
|
if (app == 'usp' || app == 'acc') {
|
|
tr = tr.cond(app, 'app');
|
|
}
|
|
if (tr.length > 0) {
|
|
if (type != 'u') {
|
|
tmp += `
|
|
<tr class="main-top" style="border-bottom: 1px solid #ddd;">
|
|
<td colspan="4">${nbsp(2)} ${main.data.kode} ${main.data.nama}</td>
|
|
</tr>
|
|
`;
|
|
for (let accData of tr) {
|
|
tmp += `
|
|
<tr ndk="" style="border-bottom: 1px solid #ddd;">
|
|
<td style=";" colspan="2">${nbsp(3)} ${accData.kode} ${accData.nama}</td>
|
|
<td style=" text-align: right;" na="">${ta && ta[a] && ta[a].data[submain] && ta[a].data[submain].data[main.data.kode] && ta[a].data[submain].data[main.data.kode].data[accData.kode] ? ta[a].data[submain].data[main.data.kode].data[accData.kode].total.rp(2) : Number(0).rp(2)}</td>
|
|
<td style=" text-align: right;" na="">${tb && tb[a] && tb[a].data[submain] && tb[a].data[submain].data[main.data.kode] && tb[a].data[submain].data[main.data.kode].data[accData.kode] ? tb[a].data[submain].data[main.data.kode].data[accData.kode].total.rp(2) : Number(0).rp(2)}</td>
|
|
</tr>
|
|
`;
|
|
}
|
|
}
|
|
tmp += `
|
|
<tr ndk="" style="border-bottom: 1px solid #ddd;">
|
|
<td style=";" colspan="2">${nbsp(2)} ${type != 'u' ? 'TOTAL' : ''} ${main.data.kode} ${main.data.nama}</td>
|
|
<td style=" text-align: right;" na="">${ta && ta[a] && ta[a].data[submain] && ta[a].data[submain].data[main.data.kode] ? ta[a].data[submain].data[main.data.kode].total.sum().rp(2) : Number(0).rp(2)}</td>
|
|
<td style=" text-align: right;" nb="">${tb && tb[a] && tb[a].data[submain] && tb[a].data[submain].data[main.data.kode] ? tb[a].data[submain].data[main.data.kode].total.sum().rp(2) : Number(0).rp(2)}</td>
|
|
</tr>
|
|
`;
|
|
}
|
|
}
|
|
tmp += `
|
|
<tr ndk="" style="border-bottom: 1px solid #ddd;">
|
|
<td style=";" colspan="2">${nbsp(1)}TOTAL ${submain}</td>
|
|
<td style=" text-align: right;" na="">${ta && ta[a] && ta[a].data[submain] ? ta[a].data[submain].total.sum().rp(2) : Number(0).rp(2)}</td>
|
|
<td style=" text-align: right;" nb="">${tb && tb[a] && tb[a].data[submain] ? tb[a].data[submain].total.sum().rp(2) : Number(0).rp(2)}</td>
|
|
</tr>
|
|
`;
|
|
}
|
|
tmp += `
|
|
<tr ndk="" style="border-bottom: 1px solid #ddd;">
|
|
<td style=";" colspan="2">TOTAL ${a}</td>
|
|
<td style="; text-align: right;" na="">${ta && ta[a] ? ta[a].total.sum().rp(2) : Number(0).rp(2)}</td>
|
|
<td style="; text-align: right;" nb="">${tb && tb[a] ? tb[a].total.sum().rp(2) : Number(0).rp(2)}</td>
|
|
</tr>
|
|
`;
|
|
}
|
|
|
|
let pja = (ta && ta['PENDAPATAN'] ? ta['PENDAPATAN'].total.sum() : 0) - (ta && ta['BEBAN'] ? ta['BEBAN'].total.sum() : 0);
|
|
let pjb = (tb && ta['PENDAPATAN'] ? tb['PENDAPATAN'].total.sum() : 0) - (tb && ta['BEBAN'] ? tb['BEBAN'].total.sum() : 0);
|
|
|
|
tmp += `
|
|
<tr ndk="" style="border-bottom: 1px solid #ddd;">
|
|
<td style=";" colspan="2">SHU ${app == 'usp' || app == 'acc' ? (app == 'usp' ? 'USP' : 'INDUK') : 'GABUNGAN'}</td>
|
|
<td style="; text-align: right;" na="">${pja.rp()}</td>
|
|
<td style="; text-align: right;" nb="">${pjb.rp()}</td>
|
|
</tr>
|
|
`;
|
|
|
|
return tmp;
|
|
|
|
}
|
|
|
|
temp();
|
|
|
|
let mainaccdata = _json('mainaccdata');
|
|
|
|
|
|
const dataSet = {
|
|
data: [],
|
|
peta: mainaccdata.map(function (c) {
|
|
return c.kode
|
|
}),
|
|
datamain: mainaccdata,
|
|
cekdata: function (a) {
|
|
let [d] = this.datamain.cond(a, 'kode')
|
|
if (d) {
|
|
let { kode } = d;
|
|
if (kode) {
|
|
let [cek] = this.data.cond(kode)
|
|
if (!cek) {
|
|
this.data.push(kode)
|
|
return false
|
|
}
|
|
return true;
|
|
}
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
_id('bulan').value = tanggal().normal.split('-')[1];
|
|
let loader = function (callback) {
|
|
let cektot = null;
|
|
let d = _id('report').querySelector('tbody');
|
|
let f = _id('report').querySelector('tfooter');
|
|
d.innerHTML = '';
|
|
let nm = '';
|
|
let last = '';
|
|
let cf = _id('report').querySelector('.myfoot');
|
|
if(cf){
|
|
cf.remove();
|
|
}
|
|
f = el('tbody').class('myfoot').html(Footer()).get();
|
|
_id('report').appendChild(f);
|
|
|
|
d.innerHTML = getTmpNew();
|
|
|
|
setTimeout(function () {
|
|
callback();
|
|
})
|
|
|
|
}
|
|
|
|
function loadDataHtml(d, w = '', h = 'a') {
|
|
setTimeout(function () {
|
|
let akunP = Array.from(document.querySelectorAll('td[data-kode' + w + ']'));
|
|
let lbr = _id("lbr" + w);
|
|
let totDeb = 0;
|
|
let totKre = 0;
|
|
let totAll = 0;
|
|
let tot = {};
|
|
akunP.forEach(function (k) {
|
|
let g = d.cond(k.dataset['kode' + w], 'rek');
|
|
let main = _master('acc', 'acc').cond(k.dataset['kode' + w], 'kode').singleItem('main');
|
|
if (tot[main] == undefined) {
|
|
tot[main] = 0;
|
|
};
|
|
if (g.length > 0) {
|
|
g = g[0];
|
|
let total = Number(g.total);
|
|
if (g.dk == 'D') {
|
|
totAll -= total
|
|
totDeb -= total
|
|
} else {
|
|
totKre += total
|
|
totAll += total
|
|
}
|
|
if (g.dk == 'D') {
|
|
total = total * -1;
|
|
}
|
|
tot[main] += total;
|
|
if (g.dk == 'D') {
|
|
let dtot = total * -1;
|
|
// k.innerHTML = dtot.rp(0).replace(/IDR/g, 'Rp');
|
|
} else {
|
|
// k.innerHTML = total.rp(0).replace(/IDR/g, 'Rp');
|
|
}
|
|
}
|
|
});
|
|
let htotal = {};
|
|
Array.from(_selectAll('[ntot' + w + ']')).forEach(function (c) {
|
|
let kode = c.getAttribute('ntot' + w + '').substring(0, 1);
|
|
if (!htotal[kode]) {
|
|
htotal[kode] = [];
|
|
}
|
|
let nm = c.getAttribute('ntot' + w);
|
|
let val = tot[nm];
|
|
if (val < 0) {
|
|
htotal[kode].push((val * -1))
|
|
// c.innerHTML = (val * -1).rp(0).replace(/IDR/g, 'Rp');
|
|
} else {
|
|
htotal[kode].push(val)
|
|
// c.innerHTML = val.rp(0).replace(/IDR/g, 'Rp');
|
|
}
|
|
});
|
|
Object.keys(htotal).forEach(function (s) {
|
|
let v = document.querySelector(`[n${h}="${s}"]`);
|
|
// v.innerHTML = htotal[s].sum().rp(0).replace(/IDR/g, 'Rp')
|
|
})
|
|
// lbr.innerHTML = totAll.rp(0).replace(/IDR/g, 'Rp');
|
|
}, 10);
|
|
}
|
|
|
|
function insertAfter(newNode, referenceNode) {
|
|
// Mendapatkan parent dari referenceNode
|
|
var parent = referenceNode.parentNode;
|
|
|
|
// Jika referenceNode adalah elemen terakhir dalam parent, gunakan appendChild
|
|
if (parent.lastChild == referenceNode) {
|
|
parent.appendChild(newNode);
|
|
} else {
|
|
// Jika tidak, sisipkan newNode setelah referenceNode dengan menggunakan nextSibling
|
|
parent.insertBefore(newNode, referenceNode.nextSibling);
|
|
}
|
|
}
|
|
|
|
|
|
function pemetaanNilai(a) {
|
|
let nw = a.map(function (y) {
|
|
let [{ subkel, mainkel }] = dmainacc.cond(y.main, 'kode');
|
|
if (mainkel) {
|
|
y.mainkel = mainkel
|
|
}
|
|
if (subkel) {
|
|
y.subkel = subkel
|
|
}
|
|
return y;
|
|
})
|
|
|
|
let x = {}
|
|
nw.forEach((s) => {
|
|
if (!x[s.mainkel]) {
|
|
x[s.mainkel] = {
|
|
data: {},
|
|
total: []
|
|
}
|
|
}
|
|
if (!x[s.mainkel].data[s.subkel]) {
|
|
x[s.mainkel].data[s.subkel] = {
|
|
data: {},
|
|
total: []
|
|
}
|
|
}
|
|
if (!x[s.mainkel].data[s.subkel].data[s.main]) {
|
|
x[s.mainkel].data[s.subkel].data[s.main] = {
|
|
data: {},
|
|
total: []
|
|
}
|
|
}
|
|
if (!x[s.mainkel].data[s.subkel].data[s.main].data[s.kode]) {
|
|
x[s.mainkel].total.push(s.total);
|
|
x[s.mainkel].data[s.subkel].total.push(s.total);
|
|
x[s.mainkel].data[s.subkel].data[s.main].total.push(s.total);
|
|
x[s.mainkel].data[s.subkel].data[s.main].data[s.rek] = {
|
|
total: s.total
|
|
}
|
|
}
|
|
})
|
|
return x;
|
|
}
|
|
|
|
function loadData() {
|
|
let th = Number(_val('tahun'));
|
|
_setHTML('th1', th);
|
|
_setHTML('th2', th - 1);
|
|
let ld = cssLoader();
|
|
accnil(_val('tahun'), _val('app'), function (w) {
|
|
ld.remove();
|
|
window._dataBeban = w.data.cond('6100', 'main');
|
|
let r1 = w.data.map(function (c) {
|
|
return {
|
|
app: _val('app')
|
|
, dk: c.dk
|
|
, rek: c.rek
|
|
, main: c.main
|
|
, nama: c.nama
|
|
, nama_main: c.nama_main
|
|
, nr: c.nr
|
|
, total: c.last
|
|
};
|
|
});
|
|
let g = Number(_val('bulan'));
|
|
let r2 = w.data.cond('L', 'nr').map(function (c) {
|
|
let num = 0;
|
|
for (let z = 0; z < g; z++) {
|
|
let cc = 'b' + (z + 1).pad(2);
|
|
num += Number(c[cc]);
|
|
}
|
|
return {
|
|
app: _val('app')
|
|
, dk: c.dk
|
|
, rek: c.rek
|
|
, main: c.main
|
|
, nama: c.nama
|
|
, nama_main: c.nama_main
|
|
, nr: c.nr
|
|
, total: num
|
|
};
|
|
});
|
|
_id('tgl1').innerHTML = tanggal([_val('tahun'), _val('bulan')].join('-')).normal2;
|
|
_id('tgl2').innerHTML = tanggal([_val('tahun'), _val('bulan')].join('-')).normal3;
|
|
|
|
let d = _id('report').querySelector('tbody');
|
|
d.innerHTML = getTmpNew(
|
|
pemetaanNilai(r2),
|
|
pemetaanNilai(r1)
|
|
);
|
|
|
|
});
|
|
};
|
|
|
|
const getNode = function (className, doc) {
|
|
let nod = document.querySelectorAll('.' + className);
|
|
if (doc !== undefined) {
|
|
nod = doc.querySelectorAll(className)
|
|
}
|
|
return Array.from(
|
|
nod
|
|
);
|
|
}
|
|
|
|
const setUpData = function () {
|
|
let laporantype = _id('laporantype').value;
|
|
if (laporantype == 'u') {
|
|
let total = getNode('top-total');
|
|
total.forEach(function (tot) {
|
|
let info = getNode('td', tot)[0];
|
|
info.innerHTML = info.innerHTML.replace(/Total/g, "");
|
|
getNode('td', tot).forEach(function (cj) {
|
|
cj.style.background = 'white';
|
|
})
|
|
});
|
|
} else {
|
|
getNode('data-top').forEach(function (j) {
|
|
j.style.display = 'table-row';
|
|
})
|
|
getNode('title-top').forEach(function (j) {
|
|
j.style.display = 'table-row';
|
|
})
|
|
}
|
|
}
|
|
|
|
loader(function () {
|
|
setTimeout(function () {
|
|
loadData();
|
|
setUpData()
|
|
})
|
|
});
|
|
|
|
_id('play').addEventListener('click', function () {
|
|
dataSet.data = [];
|
|
loader(function () {
|
|
setTimeout(function () {
|
|
loadData();
|
|
setUpData()
|
|
})
|
|
})
|
|
});
|
|
|
|
_id('print').addEventListener('click', function () {
|
|
let layout = {
|
|
"p": "a4portrait.css",
|
|
"l": "a4landscape.css"
|
|
}
|
|
$('#report').printThis({
|
|
// base: 'https://jasonday.github.io/printThis',
|
|
header: null, // prefix to html
|
|
footer: null,
|
|
importCSS: true,
|
|
loadCSS: ["{{PATH}}/" + layout['p'], '{{PATH}}/assets/css/bootstrap.min.css'],
|
|
header: false,
|
|
});
|
|
}, false);
|
|
|
|
_id('exportExcel').addEventListener('click', function () {
|
|
let laporantype = _id('laporantype').value;
|
|
if (laporantype == 'u') {
|
|
xlsx("#report", 'Laba Rugi', function (x) {
|
|
x.querySelectorAll('.data-top').forEach(function (y) {
|
|
y.remove()
|
|
});
|
|
x.querySelectorAll('.title-top').forEach(function (y) {
|
|
y.remove()
|
|
});
|
|
});
|
|
} else {
|
|
|
|
xlsx("#report", 'Laba Rugi');
|
|
}
|
|
}, false);
|