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

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 += '&nbsp;'
}
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);