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

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);