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.
488 lines
19 KiB
JavaScript
488 lines
19 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-footer.js?v={time}";
|
|
|
|
const _main = JSON.parse(_id('main').innerHTML);
|
|
globalThis.acc = JSON.parse(_id('acc').innerHTML);
|
|
acc = acc.sortArrayObjectAsc('main')
|
|
|
|
temp();
|
|
|
|
if(_id('bulan')){
|
|
_id('bulan').value = tanggal().normal.split('-')[1];
|
|
}
|
|
|
|
const sumTriwulan = function(a){
|
|
let rasio = [3, 6, 9, 12];
|
|
let sum = {}
|
|
rasio.forEach(function(o){
|
|
let l = 'b'+o.pad(2);
|
|
sum[l] = a.sum(l);
|
|
})
|
|
return [sum];
|
|
};
|
|
|
|
const formatRasio = function (a) {
|
|
return `
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;">
|
|
<table>
|
|
<tr>
|
|
<td class="align-middle" style="padding:5px 10px; text-align:center;" rowspan="2">${a.title ? a.title : ''}</td>
|
|
<td class="align-middle" style="min-width: 150px ;border-bottom: 1px solid #333; padding:5px 10px; text-align:center;">${a.x ? a.x : ''}</td>
|
|
<td class="align-middle" style="padding:5px 10px;" rowspan="2">=</td>
|
|
<td class="align-middle" style="min-width: 150px ;border-bottom: 1px solid #333;text-align:right;padding:5px 10px;">${a.nx ? a.nx : ''}</td>
|
|
<td class="align-middle" style="padding:5px 10px;" rowspan="2">x</td>
|
|
<td class="align-middle" style="padding:5px 10px;" rowspan="2">100%</td>
|
|
<td class="align-middle" style="padding:5px 10px;" rowspan="2">=</td>
|
|
<td class="align-middle" style="min-width: 50px ;padding:5px 10px;text-align:right;" rowspan="2">${a.val ? a.val : ''}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="align-middle" style="padding:5px 10px;text-align:center;">${a.y ? a.y : ''}</td>
|
|
<td class="align-middle" style="padding:5px 10px;text-align:right;">${a.ny ? a.ny : ''}</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
`;
|
|
}
|
|
|
|
const loader = function (r, callback) {
|
|
let h = _id('report').querySelector('thead');
|
|
let d = _id('report').querySelector('tbody');
|
|
|
|
let rasioa = [12, 3, 6, 9];
|
|
let rasio = [3, 6, 9, 12];
|
|
|
|
let namaBln = [
|
|
'Jan'
|
|
, 'Feb'
|
|
, 'Mar'
|
|
, 'Apr'
|
|
, 'Mei'
|
|
, 'Jun'
|
|
, 'Jul'
|
|
, 'Aug'
|
|
, 'Sep'
|
|
, 'Okt'
|
|
, 'Nov'
|
|
, 'Des'
|
|
];
|
|
|
|
h.innerHTML = `
|
|
${(function () {
|
|
let html = '</tr>';
|
|
html += `<th style="border-bottom:4px double #333; text-align:center;" colspan="7">Analisis Rasio</th>`;
|
|
html += '</tr>';
|
|
return html;
|
|
})()
|
|
}
|
|
`;
|
|
|
|
let dataLoad = r.neraca();
|
|
|
|
console.log(dataLoad);
|
|
|
|
let triwulan = dataLoad.triwulan;
|
|
let kasBank = dataLoad.kasBank;
|
|
globalThis.shuTriwulan = dataLoad.shuTriwulan;
|
|
let dataKewajiban = sumTriwulan(triwulan.filter(function(c){
|
|
if(c.sub.toLowerCase().indexOf('kewajiban') != -1){
|
|
return c;
|
|
}
|
|
}));
|
|
let dataEkuitas = sumTriwulan(triwulan.filter(function(c){
|
|
if (c.sub.toLowerCase().indexOf('ekuitas') != -1){
|
|
return c;
|
|
}
|
|
}));
|
|
|
|
let dataAsset = sumTriwulan(triwulan.cond('ASET', 'main'));
|
|
|
|
let dates = r.dates;
|
|
|
|
const CurrentRatio = {
|
|
a1: triwulan.cond('ASET LANCAR', 'sub')
|
|
, a2: triwulan.cond('KEWAJIBAN JK PENDEK', 'sub')
|
|
};
|
|
|
|
const CashRatio = {
|
|
a1: [kasBank]
|
|
, a2: triwulan.cond('KEWAJIBAN JK PENDEK', 'sub')
|
|
};
|
|
|
|
const LaverageRatio = {
|
|
a1: dataKewajiban
|
|
, a2: dataAsset
|
|
};
|
|
|
|
const KecukupanModal = {
|
|
a1: dataEkuitas
|
|
, a2: dataAsset
|
|
};
|
|
|
|
const RateOnAsset = {
|
|
a1: shuTriwulan
|
|
, a2: dataAsset
|
|
};
|
|
|
|
const RateOnEquity = {
|
|
a1: shuTriwulan
|
|
, a2: dataEkuitas
|
|
};
|
|
|
|
|
|
let romawi = ["I","II","III","IV"];
|
|
|
|
|
|
d.innerHTML = rasioa.map(function(r, i){
|
|
let thn = _val('tahun').number();
|
|
if(i == 0){
|
|
thn -=1;
|
|
}
|
|
let nw = thn + '-' + r.pad(2)
|
|
let nw2 = _val('tahun') + '-' + rasio[i].pad(2)
|
|
|
|
let h = r;
|
|
let k = rasio[i];
|
|
|
|
if(i == 0){
|
|
h = 0;
|
|
}
|
|
|
|
let g = tanggal(tanggal(nw2).normal3).milisecond;
|
|
if(g > dates){
|
|
return `
|
|
<tr>
|
|
<td colspan="6" style="padding:10px 0px;text-align: center;">TRIWULAN ${romawi[i]}</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;">ANALISA KEUANGAN</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;padding:5px 10px;font-weight:bold;">a. Analisa Horisontal :</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid #333;border-top: 2px solid #333;">
|
|
<th style="border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;">No</th>
|
|
<th style="border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;">Uraian</th>
|
|
<th style="text-align:center;border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;">${ tanggal(nw2).akhir2 }</th>
|
|
<th style="text-align:center;border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;">${ tanggal(nw).akhir2 }</th>
|
|
<th style="text-align:center;border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;">NAIK/ TURUN</th>
|
|
<th style="text-align:center;border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;">PERSEN</th>
|
|
</tr>
|
|
${
|
|
triwulan.map(function(o, i){
|
|
let n1 = o['b' + k.pad(2)];
|
|
let n2 = o['b' + h.pad(2)];
|
|
let rr = n1-n2;
|
|
return `
|
|
<tr>
|
|
<td style="white-space:nowrap; border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;">${ (i+1) }</td>
|
|
<td style="white-space:nowrap; border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;">${o.sub}</td>
|
|
<td style="white-space:nowrap; border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;text-align:right;">${ n1.rp(0) }</td>
|
|
<td style="white-space:nowrap; border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;text-align:right;">${ n2.rp(0) }</td>
|
|
<td style="white-space:nowrap; border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;text-align:right;">${ (n1 - n2).rp(0) }</td>
|
|
<td style="white-space:nowrap; border-right: 1px solid #333;border-left: 1px solid #333;padding:2px 3px;text-align:right;">${
|
|
(function(){
|
|
if(n1 != 0){
|
|
return ((rr / n1) * 100).currency(0)
|
|
}else{
|
|
return 0;
|
|
}
|
|
})()
|
|
}%</td>
|
|
</tr>
|
|
`;
|
|
}).join("")
|
|
}
|
|
<tr style="border-top: 2px solid #333;">
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;padding:5px 10px;font-weight:bold;">b. Analisa Rasio</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;">1) CURRENT RATIO (Rasio Likuiditas)</td>
|
|
</tr>
|
|
${formatRasio({
|
|
title: _val('app') == 'usp'?'USP': _val('app') == 'acc'? 'ACC':'ACC & USP',
|
|
x:'Aset Lancar',
|
|
y:'Kewajiban Lancar',
|
|
nx: (function(){
|
|
return CurrentRatio.a1.length > 0?
|
|
CurrentRatio.a1[0]['b'+k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
ny: (function () {
|
|
return CurrentRatio.a2.length > 0 ?
|
|
CurrentRatio.a2[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
val: Math.round((function(){
|
|
return (function () {
|
|
return CurrentRatio.a1.length > 0 ?
|
|
CurrentRatio.a1[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})()
|
|
/
|
|
(function () {
|
|
return CurrentRatio.a2.length > 0 ?
|
|
CurrentRatio.a2[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})() * 100
|
|
})()).currency(0)+'%',
|
|
})}
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;">2) CASH RATIO (Rasio Kas)</td>
|
|
</tr>
|
|
${formatRasio({
|
|
title: _val('app') == 'usp'?'USP': _val('app') == 'acc'? 'ACC':'ACC & USP',
|
|
x:'Kas + Bank',
|
|
y:'Kewajiban Lancar',
|
|
nx: (function () {
|
|
return CashRatio.a1.length > 0 ?
|
|
CashRatio.a1[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
ny: (function () {
|
|
return CashRatio.a2.length > 0 ?
|
|
CashRatio.a2[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
val: Math.round((function () {
|
|
return (function () {
|
|
return CashRatio.a1.length > 0 ?
|
|
CashRatio.a1[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})()
|
|
/
|
|
(function () {
|
|
return CashRatio.a2.length > 0 ?
|
|
CashRatio.a2[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})() * 100
|
|
})()).currency(0) + '%',
|
|
})}
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;">3) LAVERAGE RATIO (Solvabilitas)</td>
|
|
</tr>
|
|
${formatRasio({
|
|
title: _val('app') == 'usp'?'USP': _val('app') == 'acc'? 'ACC':'ACC & USP',
|
|
x:'Total Kewajiban',
|
|
y:'Total Aset',
|
|
nx: (function () {
|
|
return LaverageRatio.a1.length > 0 ?
|
|
LaverageRatio.a1[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
ny: (function () {
|
|
return LaverageRatio.a2.length > 0 ?
|
|
LaverageRatio.a2[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
val: Math.round((function () {
|
|
return (function () {
|
|
return LaverageRatio.a1.length > 0 ?
|
|
LaverageRatio.a1[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})()
|
|
/
|
|
(function () {
|
|
return LaverageRatio.a2.length > 0 ?
|
|
LaverageRatio.a2[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})() * 100
|
|
})()).currency(0) + '%',
|
|
})}
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;">4) RASIO KECUKUPAN MODAL (CAR)</td>
|
|
</tr>
|
|
${formatRasio({
|
|
title: _val('app') == 'usp'?'USP': _val('app') == 'acc'? 'ACC':'ACC & USP',
|
|
x:'Equitas',
|
|
y:'Asset',
|
|
nx: (function () {
|
|
return KecukupanModal.a1.length > 0 ?
|
|
KecukupanModal.a1[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
ny: (function () {
|
|
return KecukupanModal.a2.length > 0 ?
|
|
KecukupanModal.a2[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
val: Math.round((function () {
|
|
return (function () {
|
|
return KecukupanModal.a1.length > 0 ?
|
|
KecukupanModal.a1[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})()
|
|
/
|
|
(function () {
|
|
return KecukupanModal.a2.length > 0 ?
|
|
KecukupanModal.a2[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})() * 100
|
|
})()).currency(0) + '%',
|
|
})}
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;">5) RATE ON ASSETS (Rentabilitas Usaha Terhadap Aset)</td>
|
|
</tr>
|
|
${formatRasio({
|
|
title: _val('app') == 'usp'?'USP': _val('app') == 'acc'? 'ACC':'ACC & USP',
|
|
x:'SHU',
|
|
y:'Total Aset',
|
|
nx: (function () {
|
|
return RateOnAsset.a1.length > 0 ?
|
|
RateOnAsset.a1[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
ny: (function () {
|
|
return RateOnAsset.a2.length > 0 ?
|
|
RateOnAsset.a2[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
val: Math.round((function () {
|
|
return (function () {
|
|
return RateOnAsset.a1.length > 0 ?
|
|
RateOnAsset.a1[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})()
|
|
/
|
|
(function () {
|
|
return RateOnAsset.a2.length > 0 ?
|
|
RateOnAsset.a2[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})() * 100
|
|
})()).currency(0) + '%',
|
|
})}
|
|
<tr>
|
|
<td colspan="6" style="text-align: left;">6) RATE ON EQUITY (Rentabilitas Modal Sendiri)</td>
|
|
</tr>
|
|
${formatRasio({
|
|
title: _val('app') == 'usp'?'USP': _val('app') == 'acc'? 'ACC':'ACC & USP',
|
|
x:'SHU',
|
|
y:'Modal sendiri',
|
|
nx: (function () {
|
|
return RateOnEquity.a1.length > 0 ?
|
|
RateOnEquity.a1[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
ny: (function () {
|
|
return RateOnEquity.a2.length > 0 ?
|
|
RateOnEquity.a2[0]['b' + k.pad(2)].rp(0)
|
|
: (0).rp(0)
|
|
})(),
|
|
val: Math.round((function () {
|
|
return (function () {
|
|
return RateOnEquity.a1.length > 0 ?
|
|
RateOnEquity.a1[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})()
|
|
/
|
|
(function () {
|
|
return RateOnEquity.a2.length > 0 ?
|
|
RateOnEquity.a2[0]['b' + k.pad(2)]
|
|
: (0)
|
|
})() * 100
|
|
})()).currency(0) + '%',
|
|
})}
|
|
<tr>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
<td style="padding:10px 3px;"></td>
|
|
</tr>
|
|
`;
|
|
}else{
|
|
return ``;
|
|
}
|
|
|
|
}).join("")
|
|
|
|
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 () {
|
|
});
|
|
});
|
|
|
|
if(_id('play')){
|
|
_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", 'Laba Rugi');
|
|
}, false);
|