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.

240 lines
9.2 KiB
JavaScript

import { accnil, _bbData2, _bbData, _perbandingan, _triwulan, ekuitas } from "{{PATH}}/assets-js/module-lap-bb.js?v={time}";
import { temp } from "{{PATH}}/assets-js/module-lap-filterbeban.js?v={time}";
import { xlsx } from "{{PATH}}/assets-js/module-export-xlsx.js?v={time}";
import { Footer, _header, head } from "{{PATH}}/assets-js/module-lap-ekuitas-footer2.js?v={time}";
const _main = JSON.parse(_id('main').innerHTML);
globalThis.acc = JSON.parse(_id('acc').innerHTML);
acc = acc.sortArrayObjectAsc('main')
temp();
const dataAccounting = function(a){
return {
data: a,
bln: [
'Jan'
,'Feb'
,'Mar'
,'Apr'
,'Mei'
,'Jun'
,'Jul'
,'Aug'
,'Sep'
,'Okt'
,'Nov'
,'Des'
],
dataBebanSatuTahun : function(body){
let bln = this.bln;
let beban = this.data.beban;
let data = this.data.data;
let acc = [].concat(this.data.acc.cond(_val('app'), 'app').cond('BEBAN', 'amain'));
let dataBeban = data.filter(function(e){
if (e.nama.toLowerCase().indexOf('b.') != -1){
return e;
}
});
let bebanData = acc.map(function(r){
let s = r;
let [q] = data.cond(r.kode,'rek');
if(q){
for (let bln = 0; bln <= 13; bln++) {
let b = 'b'+bln.pad(2);
s[b] = q[b];
}
let b = 'ba0';
s[b] = q[b];
}else{
for (let bln = 0; bln <= 13; bln++) {
let b = 'b'+bln.pad(2);
s[b] = 0;
}
let b = 'ba0';
s[b] = 0;
}
return s;
});
let group = {}
let dataBBN = bebanData.sortArrayObjectAsc('main');
dataBBN.forEach(function(w){
if(!group[w.main]){
group[w.main] = {
nama: w.nama_main,
data: []
};
}
group[w.main].data.push(w);
});
let dataHtmlRender = Object.keys(group).map(function(databbn){
let databbns = group[databbn];
let h = `
<tr style="border-bottom: 1px solid #999;">
<td style="border-bottom: 1px solid #333;padding:0 5px;border-left:1px solid #ddd;text-align:left;">${databbn}</td>
<td style="border-bottom: 1px solid #333;padding:0 5px;border-left:1px solid #ddd;text-align:left;">${databbns.nama}</td>
${(function(){
let h = '';
for (let a = 0; a < 15; a++) {
h += `
<td style="border-bottom: 1px solid #333;padding:0 5px;border-left:1px solid #ddd;text-align:left;"></td>
`;
}
return h;
})()}
</tr>
`+databbns.data.map(function(r){
let html = '<tr style="border-bottom: 1px solid #999;">';
html += '<td style="border-bottom: 1px solid #333;padding:0 5px;border-left:1px solid #ddd;padding-left:20px;">'+(r.kode)+'</td>';
html += '<td style="border-bottom: 1px solid #333;padding:0 5px;border-left:1px solid #ddd;padding-left:20px;">'+(r.nama)+'</td>';
html += '<td class="number" style="border-bottom: 1px solid #333;padding:0 5px;border-left:1px solid #ddd;text-align:right;">' + ('Rp ' + Number(r['b00']).currency() ) +'</td>';
let totalAkhir = 0;
for (let bln = 1; bln <= 13; bln++) {
let b = 'b' + bln.pad(2);
let nominal = ('Rp '+r[b].currency(0));
if(bln == 13){
totalAkhir = (Number(r[b]) - Number(r['b00']));
nominal = ('Rp '+(Number(r[b]) - Number(r['b00'])).currency(0))
}
html += `<td class="number" style="border-bottom: 1px solid #333; mso-number-format:&quot;#,##0&quot;;padding:0 5px;border-left:1px solid #ddd; min-width:120px;text-align:right;">` + nominal + '</td>';
}
html += `<td class="number" style="border-bottom: 1px solid #333; mso-number-format:&quot;#,##0&quot;;padding:0 5px;border-left:1px solid #ddd; min-width:120px;text-align:right;">` + ('Rp ' + (Number(r['b00']) - totalAkhir ).currency(0)) + '</td>';
html += '</tr>';
return html;
}).join('');
return h;
}).join("")
+`
${ (function () {
let html = '<tr style="border-bottom: 4px double #333; border-top: 2px solid #333;">';
html += '<th style="border-bottom: 1px solid #333;" colspan="2">Jumlah</th>';
for (let bln = 0; bln <= 13; bln++) {
let b = 'b' + bln.pad(2);
html += '<td class="number" style="border-bottom: 1px solid #333;mso-number-format:&quot;#,##0&quot;;padding:0 5px;border-left:1px solid #ddd; min-width:120px;text-align:right;">Rp ' + (bebanData.sum(b).currency(0)) + '</td>';
}
html += '<td class="number" style="border-bottom: 1px solid #333;mso-number-format:&quot;#,##0&quot;;padding:0 5px;border-left:1px solid #ddd; min-width:120px;text-align:right;">Rp ' + ((bebanData.sum('b13') - bebanData.sum('b00') ).currency(0)) + '</td>';
html += '</tr>';
return html;
})() }
`;
body.innerHTML = dataHtmlRender;
}
}
}
const loader = function (r, callback) {
let h = _id('report').querySelector('thead');
let d = _id('report').querySelector('tbody');
let namaBln = [
'Jan'
, 'Feb'
, 'Mar'
, 'Apr'
, 'Mei'
, 'Jun'
, 'Jul'
, 'Aug'
, 'Sep'
, 'Okt'
, 'Nov'
, 'Des'
];
h.innerHTML = `
${
(function(){
let html = '<tr style="border-bottom: 4px double #333; border-top: 2px solid #333;">';
html += '<td colspan="2" style="font-weight:bold;">ANGGARAN BEBAN (' + (_id('app').value == 'acc' ? "INDUK": "USP" )+') KPRI WARPEKA TH. ' + _id('tahun').value +'</td>';
html += '<td style="padding:0 5px;border-left:1px solid #ddd; min-width:120px;text-align:right;">Anggaran</td>';
for (let bln = 1; bln <= 12; bln++) {
let b = namaBln[bln-1];
html += '<td style="padding:0 5px;border-left:1px solid #ddd; min-width:120px;text-align:right;">' + (b) + '</td>';
}
html += '<td style="padding:0 5px;border-left:1px solid #ddd; min-width:120px;text-align:right;">Jml</td>';
html += '<td style="padding:0 5px;border-left:1px solid #ddd; min-width:120px;text-align:right;">Selisih</td>';
html += '</tr>';
return html;
})()
}
`;
dataAccounting(r).dataBebanSatuTahun(d);
setTimeout(function () {
callback();
});
}
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';
})
}
}
function loadData(callback) {
let _load = cssLoader();
accnil(_id('tahun').value, _id('app').value, function(r){
_load.remove();
callback(r);
});
};
loadData(function (r) {
loader(r, function () {
});
});
_id('play').addEventListener('click', function () {
loadData(function (r) {
loader(r, function () {
});
});
});
_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 () {
xlsx("#report", 'Beban '+_val('tahun')+' '+Date.now());
}, false);