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.

545 lines
25 KiB
JavaScript

import { _bbData, _perbandingan, _triwulan } from "{{PATH}}/assets-js/module-lap-bb.js?v={time}";
import { temp } from "{{PATH}}/assets-js/module-lap-filterneraca.js?v={time}";
import { xlsx } from "{{PATH}}/assets-js/module-export-xlsx.js?v={time}";
globalThis.acc = JSON.parse(_id('acc').innerHTML);
let d = _id('report').querySelector('tbody')
_fullScreen();
temp();
_id('bulan').value = tanggal().normal.split('-')[1];
const headerTemp = function(){
let year = _id('tahun').value.number(2);
let mnt = ['03', '06', '09', '12'];
let jn = _id('jenislap').value;
if(jn == 2){
_id('report').querySelector('thead').innerHTML = `
<tr>
<th style="font-size:12px;" colspan="8" class="text-center">Neraca</th>
</tr>
<tr style="border-bottom: 1px solid #777;">
<th style="font-size:12px;" colspan="8" class="text-center">Tahun ${year}</th>
</tr>
<tr style="border-bottom: 4px double #333;">
<th style="padding:2px 3px;font-size:12px;">Kode</th>
<th style="padding:2px 3px;font-size:12px;">Aktiva</th>
<th style="text-align:right;padding:2px 3px;font-size:12px;">${_id('tahun').value.number(2) }</th>
<th style="text-align:right;padding:2px 3px;font-size:12px;">${_id('tahun').value.number(2) - 1 }</th>
<th style="border-left: 1px solid #777; padding:2px 3px;font-size:12px;">Kode</th>
<th style="padding:2px 3px;font-size:12px;">Pasiva</th>
<th style="text-align:right;padding:2px 3px;font-size:12px;">${_id('tahun').value.number(2) }</th>
<th style="text-align:right;padding:2px 3px;font-size:12px;">${_id('tahun').value.number(2) - 1 }</th>
</tr>
`
}else if(jn == 1){
_id('report').querySelector('thead').innerHTML = `
<tr>
<th style="font-size:12px;" colspan="8" class="text-center">Neraca</th>
</tr>
<tr style="border-bottom: 1px solid #777;">
<th style="font-size:12px;" colspan="8" class="text-center">Tahun ${year}</th>
</tr>
<tr style="border-bottom: 4px double #333;">
<th style="padding:2px 3px;font-size:12px;">Kode</th>
<th style="padding:2px 3px;font-size:12px;">Aktiva</th>
${mnt.map(function(h){
return `
<th style="text-align:right;padding:2px 3px;font-size:12px;">${h+'-'+_id('tahun').value.number(2) }</th>
`
}).join('')}
<th style="border-left: 1px solid #777; padding:2px 3px;font-size:12px;">Kode</th>
<th style="padding:2px 3px;font-size:12px;">Pasiva</th>
${mnt.map(function (h) {
return `
<th style="text-align:right;padding:2px 3px;font-size:12px;">${h+'-'+_id('tahun').value.number(2)}</th>
`
}).join('')}
</tr>
`
}else{
_id('report').querySelector('thead').innerHTML = `
<tr>
<th style="font-size:12px;" colspan="6" class="text-center">Neraca</th>
</tr>
<tr style="border-bottom: 1px solid #777;">
<th style="font-size:12px;" colspan="6" class="text-center">Periode <span id="tgl1"></span> s/d <span id="tgl2"></span></th>
</tr>
<tr style="border-bottom: 4px double #333;">
<th style="padding:2px 3px;font-size:12px;">Kode</th>
<th style="padding:2px 3px;font-size:12px;">Aktiva</th>
<th style="text-align:right;padding:2px 3px;font-size:12px;">Nominal</th>
<th style="border-left: 1px solid #777; padding:2px 3px;font-size:12px;">Kode</th>
<th style="padding:2px 3px;font-size:12px;">Pasiva</th>
<th style="text-align:right;padding:2px 3px;font-size:12px;">Nominal</th>
</tr>
`
}
}
const tempContent = function(s,i,status = 0){
let year = _id('tahun').value.number(2);
let mnt = ['03', '06', '09', '12'];
let jn = _id('jenislap').value;
if (status == 0) {
if (jn == 2) {
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.kode}</td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.nama}</td>
<td class="nmap" data-kode="${s.kode}" year="${year}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
<td class="nmap" data-kode="${s.kode}" year="${year - 1}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="kode"></td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="akun"></td>
<td posisi="${i}" data-name="nom" year="${year}" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
<td posisi="${i}" data-name="nom" year="${year - 1}" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
</tr>
`
}else if(jn == 1){
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.kode}</td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.nama}</td>
${mnt.map(function (h) {
return `
<td class="nmap" data-kode="${s.kode}" year="${h}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
`;
}).join('') }
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="kode"></td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="akun"></td>
${mnt.map(function (h) {
return `
<td posisi="${i}" data-name="nom" year="${h}" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
`;
}).join('') }
</tr>
`
}else{
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.kode}</td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.nama}</td>
<td class="nmap" data-kode="${s.kode}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="kode"></td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="akun"></td>
<td posisi="${i}" data-name="nom" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
</tr>
`
}
}else{
if (jn == 2) {
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="kode"></td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="akun"></td>
<td posisi="${i}" year="${year}" data-name="nom" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;white-space:nowrap;text-align:right; ">Rp. 0</td>
<td posisi="${i}" year="${year-1}" data-name="nom" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;white-space:nowrap;text-align:right; ">Rp. 0</td>
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;">${s.kode}</td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.nama}</td>
<td class="nmap" year="${year}" data-kode="${s.kode}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
<td class="nmap" year="${year-1}" data-kode="${s.kode}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
</tr>
`
}else if(jn == 1){
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="kode"></td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="akun"></td>
${mnt.map(function (h) {
return `
<td posisi="${i}" year="${h}" data-name="nom" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;white-space:nowrap;text-align:right; ">Rp. 0</td>
`;
}).join('')}
<td posisi="${i}" year="${year-1}" data-name="nom" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;white-space:nowrap;text-align:right; ">Rp. 0</td>
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;">${s.kode}</td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.nama}</td>
${mnt.map(function (h) {
return `
<td class="nmap" year="${h}" data-kode="${s.kode}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
`;
}).join('') }
</tr>
`
}else{
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="kode"></td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" posisi="${i}" data-name="akun"></td>
<td posisi="${i}" data-name="nom" class="nmap" data-kode="-" style="padding:2px 3px;font-size:12px;white-space:nowrap;text-align:right; ">Rp. 0</td>
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;">${s.kode}</td>
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;">${s.nama}</td>
<td class="nmap" data-kode="${s.kode}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;">Rp. 0</td>
</tr>
`
}
}
}
const tempContentFooter = function(){
let year = _id('tahun').value.number(2);
let mnt = ['03', '06', '09', '12'];
let jn = _id('jenislap').value;
if(jn == 2){
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" colspan="2">Grand Total Aktiva</td>
<td year="${year}" style="padding:2px year 3px;font-size:12px;text-align:right; white-space:nowrap;" class="totald">Rp. 0</td>
<td year="${year-1}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;" class="totald">Rp. 0</td>
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;" colspan="2">Grand Total Pasiva</td>
<td year="${year}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;" class="totalk">Rp. 0</td>
<td year="${year-1}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;" class="totalk">Rp. 0</td>
</tr>
`
}else if(jn == 1){
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" colspan="2">Grand Total Aktiva</td>
${mnt.map(function (s) {
return `
<td year="${s}" style="padding:2px year 3px;font-size:12px;text-align:right; white-space:nowrap;" class="totald">Rp. 0</td>
`;
}).join("")}
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;" colspan="2">Grand Total Pasiva</td>
${mnt.map(function (s) {
return `
<td year="${s}" style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;" class="totalk">Rp. 0</td>
`;
}).join("")}
</tr>
`
}else{
return `
<tr style="border-bottom: 1px solid #333;">
<td style="padding:2px 3px;font-size:12px;white-space:nowrap;" colspan="2">Grand Total Aktiva</td>
<td style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;" class="totald">Rp. 0</td>
<td style="border-left: 1px solid #777;padding:2px 3px;font-size:12px;white-space:nowrap;" colspan="2">Grand Total Pasiva</td>
<td style="padding:2px 3px;font-size:12px;text-align:right; white-space:nowrap;" class="totalk">Rp. 0</td>
</tr>
`
}
}
let loader = function (callback) {
let year = _id('tahun').value.number(2);
let mnt = ['03', '06', '09', '12'];
let jn = _id('jenislap').value;
headerTemp();
let nr = (function (v) {
let laporantype = _id('laporantype').value;
let accNew = [].concat(acc);
if (laporantype === 'u') {
accNew = accNew.map(function (w) {
return {
app: w.app,
kode: w.main,
nama: w.nama_main,
dk: w.dk,
nr: w.nr
}
}).removeDuplicate(['app', 'kode', 'dk', 'nama', 'nr']);
}
accNew = accNew.sortArrayObjectAsc('kode');
globalThis.accNew = accNew;
if (v === 'usp' || v === 'acc') {
return accNew.like('app', v);
}
return accNew;
})(_id('app').value).filter(function (n) {
if (n.nr === 'N') {
return n;
}
});
if (nr.cond('K', 'dk').length < nr.cond('D', 'dk').length) {
d.innerHTML = nr.filter(function (s) {
if (s.dk == 'D') {
return s;
}
}).map(function (s, i) {
return tempContent(s,i,0)
}).join('') + tempContentFooter();
let r = nr.filter(function (s) {
if (s.dk == 'K') {
return s;
}
});
r.push({
kode: 'SHU',
nama: (function () {
if (_id('app').value === 'usp') {
return `USP`;
} else if (_id('app').value === 'acc') {
return `INDUK`;
} else {
return ``;
}
})()
})
r.forEach(function (s, i) {
if (jn == 2){
document.querySelector(`td[posisi="${i}"][data-name="kode"]`).innerHTML = s.kode;
document.querySelector(`td[posisi="${i}"][data-name="akun"]`).innerHTML = s.nama;
document.querySelector(`td[posisi="${i}"][data-name="nom"][year="${year}"]`).dataset.kode = s.kode;
document.querySelector(`td[posisi="${i}"][data-name="nom"][year="${year - 1}"]`).dataset.kode = s.kode;
}
else if(jn == 1){
document.querySelector(`td[posisi="${i}"][data-name="kode"]`).innerHTML = s.kode;
document.querySelector(`td[posisi="${i}"][data-name="akun"]`).innerHTML = s.nama;
mnt.forEach(function(sa){
document.querySelector(`td[posisi="${i}"][data-name="nom"][year="${sa}"]`).dataset.kode = s.kode;
})
}
else{
document.querySelector(`td[posisi="${i}"][data-name="kode"]`).innerHTML = s.kode;
document.querySelector(`td[posisi="${i}"][data-name="akun"]`).innerHTML = s.nama;
document.querySelector(`td[posisi="${i}"][data-name="nom"]`).dataset.kode = s.kode;
}
})
} else {
let r = nr.filter(function (s) {
if (s.dk == 'K') {
return s;
}
})
r.push({
kode: 'SHU',
nama: (function () {
if (_id('app').value === 'usp') {
return `USP`;
} else if (_id('app').value === 'acc') {
return `INDUK`;
} else {
return ``;
}
})()
})
d.innerHTML = r.map(function (s, i) {
return tempContent(s, i, 1);
}).join('') + tempContentFooter();
nr.filter(function (s) {
if (s.dk == 'D') {
return s;
}
}).forEach(function (s, i) {
if (jn == 2) {
document.querySelector(`td[posisi="${i}"][data-name="kode"]`).innerHTML = s.kode;
document.querySelector(`td[posisi="${i}"][data-name="akun"]`).innerHTML = s.nama;
document.querySelector(`td[posisi="${i}"][data-name="nom"][year="${year}"]`).dataset.kode = s.kode;
document.querySelector(`td[posisi="${i}"][data-name="nom"][year="${year - 1}"]`).dataset.kode = s.kode;
}
else if (jn == 1) {
document.querySelector(`td[posisi="${i}"][data-name="kode"]`).innerHTML = s.kode;
document.querySelector(`td[posisi="${i}"][data-name="akun"]`).innerHTML = s.nama;
mnt.forEach(function (sa) {
document.querySelector(`td[posisi="${i}"][data-name="nom"][year="${sa}"]`).dataset.kode = s.kode;
})
} else {
document.querySelector(`td[posisi="${i}"][data-name="kode"]`).innerHTML = s.kode;
document.querySelector(`td[posisi="${i}"][data-name="akun"]`).innerHTML = s.nama;
document.querySelector(`td[posisi="${i}"][data-name="nom"]`).dataset.kode = s.kode;
}
})
}
setTimeout(function () {
callback();
})
}
loader(function () {
setTimeout(function () {
loadData();
}, 100)
})
_id('play').addEventListener('click', function () {
loader(function () {
setTimeout(function () {
loadData();
}, 100)
})
});
function LoadDataPartial(d, lb, c=''){
d = d.filter(function (c) {
if (c.main != null) {
return c;
}
});
let akunP = Array.from(document.querySelectorAll('td[data-kode]'+c))
let totd = document.querySelector('td.totald'+c)
let totk = document.querySelector('td.totalk'+c)
let totDeb = 0;
let totKre = 0;
let laporantype = _id('laporantype').value;
let kodeGet = 'rek';
if (laporantype === 'u') {
kodeGet = 'main';
}
akunP.forEach(function (k) {
let g = d.cond(k.dataset.kode, kodeGet);
if (g.length > 0) {
let g = d.cond(k.dataset.kode, kodeGet);
if (g.length > 0) {
let total = g.sum('total');
if (g.singleItem('dk') == 'D') {
totDeb += total
} else {
totKre += total
}
k.innerHTML = total.rp(0);
}
}
});
totd.innerHTML = totDeb.rp(0).replace(/IDR/g, "Rp")
totk.innerHTML = totKre.rp(0).replace(/IDR/g, "Rp")
if (lb != undefined) {
let t = document.querySelector('td[data-kode="SHU"]'+c);
if(t != undefined){
console.log(lb)
t.innerHTML = (lb * -1).rp().replace(/IDR/g, "Rp");
totk.innerHTML = (totKre + (lb * -1)).rp(0).replace(/IDR/g, "Rp")
}
}
}
function loadData() {
let year = _id('tahun').value.number(2);
let jn = _id('jenislap').value;
let mnt = ['03', '06', '09', '12'];
if(jn == 2){
console.log('hi')
_perbandingan(function (d, lb, dd, lbd){
LoadDataPartial(d,lb, `[year="${year}"]`);
LoadDataPartial(dd, lbd, `[year="${year - 1}"]`);
}
, function () {
let day = tanggal(_id('tahun').value+'-12').normal3
if (_id('app').value == 'usp') {
return ` WHERE lap_bb.tgl <= "${day}" AND acc.app = 'usp'`;
} else if (_id('app').value == 'acc') {
return ` WHERE lap_bb.tgl <= "${day}" AND acc.app = 'acc'`;
} else {
return ` WHERE lap_bb.tgl <= "${day}"`;
}
}
, function () {
let day = tanggal((_id('tahun').value.number(2) -1) + '-12').normal3
if (_id('app').value == 'usp') {
return ` WHERE lap_bb.tgl <= "${day}" AND acc.app = 'usp'`;
} else if (_id('app').value == 'acc') {
return ` WHERE lap_bb.tgl <= "${day}" AND acc.app = 'acc'`;
} else {
return ` WHERE lap_bb.tgl <= "${day}"`;
}
}
)
}else if(jn == 1){
_triwulan(function (a) {
console.log(a);
mnt.forEach(function(h,z){
let q = (z * 2);
let w = (z * 2) + 1;
console.log(q);
LoadDataPartial(a[q], a[w][0].total, `[year="${h}"]`);
})
}, year, function () {
if (_id('app').value == 'usp') {
return ` AND acc.app = 'usp'`;
} else if (_id('app').value == 'acc') {
return ` AND acc.app = 'acc'`;
} else {
return ``;
}
})
}else{
_bbData(function (d, lb) {
d = d.filter(function (c) {
if (c.main != null) {
return c;
}
});
let akunP = Array.from(document.querySelectorAll('td[data-kode]'))
let totd = document.querySelector('td.totald')
let totk = document.querySelector('td.totalk')
let totDeb = 0;
let totKre = 0;
let laporantype = _id('laporantype').value;
let kodeGet = 'rek';
if (laporantype === 'u') {
kodeGet = 'main';
}
akunP.forEach(function (k) {
let g = d.cond(k.dataset.kode, kodeGet);
if (g.length > 0) {
let g = d.cond(k.dataset.kode, kodeGet);
if (g.length > 0) {
let total = g.sum('total');
if (g.singleItem('dk') == 'D') {
totDeb += total
} else {
totKre += total
}
k.innerHTML = total.rp(0);
}
}
});
totd.innerHTML = totDeb.rp(0).replace(/IDR/g, "Rp")
totk.innerHTML = totKre.rp(0).replace(/IDR/g, "Rp")
if (lb != undefined) {
let t = document.querySelector('td[data-kode="SHU"]');
t.innerHTML = (lb * -1).rp().replace(/IDR/g, "Rp");
totk.innerHTML = (totKre + (lb * -1)).rp(0).replace(/IDR/g, "Rp")
}
}, function () {
let day = tanggal(_id('tahun').value + '-' + _id('bulan').value).normal3;
_id('tgl1').innerHTML = tanggal(tanggal(day).normal2).sekarang;
_id('tgl2').innerHTML = tanggal(tanggal(day).normal3).sekarang;
if (_id('app').value == 'usp') {
return ` WHERE lap_bb.tgl <= "${day}" AND acc.app = 'usp'`;
} else if (_id('app').value == 'acc') {
return ` WHERE lap_bb.tgl <= "${day}" AND acc.app = 'acc'`;
} else {
return ` WHERE lap_bb.tgl <= "${day}"`;
}
})
}
}; loadData();
_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['l'], '{{PATH}}/assets/css/bootstrap.min.css'],
header: false,
});
}, false)
_id('exportExcel').addEventListener('click', function () {
xlsx("#report");
}, false);