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.

652 lines
28 KiB
JavaScript

const kekayaan = _id('kekayaan');
kekayaan.style.overflowX = 'scroll';
kekayaan.style.overflowy = 'scroll';
kekayaan.style.height = '350px';
function doit(elm, type, fn) {
var elt = elm;
var wb = XLSX.utils.table_to_book(elt, { sheet: "Sheet JS" });
XLSX.writeFile(wb, fn || ('SheetJSTableExport.' + (type || 'xlsx')));
}
const pj = [
{
kode: 'REG',
nama: 'USP Reguler'
}
, {
kode: 'USP1',
nama: 'USP1 (Pembiayaan Elektronik)'
}
, {
kode: 'USP2',
nama: 'USP2 (Pembiayaan Elektronik)'
}
, {
kode: 'USP3',
nama: 'USP3 (Pembiayaan Haji / Umroh)'
}
, {
kode: 'KHUSUS',
nama: 'KHUSUS'
}
];
const namaBulan = [
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
];
const tableCreator = function () {
let [anggota, simp, simpanan, pinjaman] = arguments;
console.log(pinjaman);
let header = [
{
name: 'NO URUT',
rowspan: 2
}
, {
name: 'NO INDUK',
rowspan: 2
}
, {
name: 'NAMA',
rowspan: 2
}
, {
name: 'TEMTALA',
rowspan: 2
}
, {
name: 'JENIS KELAMIN',
rowspan: 2
}
, {
name: 'NO. TELP',
rowspan: 2
}
, {
name: 'ALAMAT RUMAH',
rowspan: 2
}
, {
name: 'UNIT KERJA',
rowspan: 2
}
, {
name: 'TAHUN MASUK',
rowspan: 2
}
];
let subheader = [];
simp.forEach(function (x) {
header.push({
name: x.nama.toUpperCase(),
colspan: 15
})
subheader.push({
name: 'Awal Tahun',
colspan: 1
})
namaBulan.forEach(function (bln) {
subheader.push({
name: bln,
colspan: 1
})
})
subheader.push({
name: 'Tahun Berjalan',
colspan: 1
})
subheader.push({
name: 'Akhir Tahun',
colspan: 1
})
});
pj.forEach(function (x) {
header.push({
name: x.nama.toUpperCase(),
colspan: 6
})
let y = [
'SALDO AWAL'
, 'ANGSURAN/ PELUNASAN SHU'
, 'PELUNASAN NON SHU'
, 'JASA USP REGULER'
, 'PINJAMAN BARU'
, 'SALDO AKHIR'
];
y.forEach(function (g) {
subheader.push({
name: g,
colspan: 1
})
})
});
kekayaan.appendChild(
el('table').css({
cellSpacing: 0
}).html(`
<thead>
${(function () {
return '<tr>' + header.map(function (q) {
if (q.rowspan != undefined) {
return `
<th style="text-align:center;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;" rowspan="${q.rowspan}">${q.name}</th>
`
} else {
return `
<th style="text-align:center;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;" colspan="${q.colspan}">${q.name}</th>
`
}
}).join('') + '</tr>'
})()}
${(function () {
return '<tr>' + subheader.map(function (q) {
if (q.rowspan != undefined) {
return `
<th style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;" rowspan="${q.rowspan}">${q.name}</th>
`
} else {
return `
<th style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;" colspan="${q.colspan}">${q.name}</th>
`
}
}).join('') + '</tr>'
})()}
</thead>
<tbody>
${anggota.map(function (ang, i) {
if (i < 20) {
let j = '<tr>';
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${i + 1}</td>`;
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.kode}</td>`;
j += `<td style="min-width: 300px;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.nama}</td>`;
j += `<td style="min-width: 120px;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.kota}, ${tanggal(ang.tgllahir).sekarang}</td>`;
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.jk}</td>`;
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.telp}</td>`;
j += `<td style="min-width: 300px;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.alamat}</td>`;
j += `<td style="min-width: 180px;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.unitkerja}</td>`;
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.masuk.split('-')[0]}</td>`;
simp.forEach(function (h) {
let awl = 0;
let jln = 0;
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">0</td>`;
namaBulan.forEach(function (b, i) {
let bl = i + 1;
let [data] = simpanan.cond(h.kode, 'kodesp').cond(bl, 'bulan').cond(ang.kode, 'kode');
if (data != undefined) {
jln += Number(data.jumlah);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${Number(data.jumlah).currency(0).replace(/\./g, ',')}</td>`;
} else {
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">0</td>`;
}
})
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${Number(jln).currency(0).replace(/\./g, ',')}</td>`;
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${Number(awl + jln).currency(0).replace(/\./g, ',')}</td>`;
});
pj.forEach(function (q) {
let y = ['awl'
, 'shu'
, 'nonshu'
, 'bunga'
, 'baru'
, 'akhir'
];
function shu(q) {
let { kode } = q;
let g = pinjaman
.cond(kode, 'kodesp')
.cond('G', 'tr')
.cond(ang.kode, 'kode')
;
let [data] = g;
if (data != undefined) {
let { angpokok } = data;
if (angpokok != null && angpokok != undefined) {
return Number(angpokok);
}
return 0;
}
return 0;
}
function nonshu(q) {
let { kode } = q;
let g = pinjaman
.cond(kode, 'kodesp')
.cond('L', 'tr')
.cond(ang.kode, 'kode')
;
let [data] = g;
if (data != undefined) {
let { angpokok } = data;
if (angpokok != null && angpokok != undefined) {
return angpokok.number(2);
}
return 0;
}
return 0;
}
function bunga(q) {
let { kode } = q;
let g = pinjaman
.cond(kode, 'kodesp')
.cond(ang.kode, 'kode')
;
if (g.length > 1) {
let v = g.map(function (cj) {
return cj.angbunga? cj.angbunga.number(2): 0
}).sum();
return v;
}
let [data] = g;
if (data != undefined) {
let { angbunga } = data;
if (angbunga != null && angbunga != undefined) {
return angbunga.number(2);
}
return 0;
}
return 0;
}
function pokok(q) {
let { kode } = q;
let g = pinjaman
.cond(kode, 'kodesp')
.cond(ang.kode, 'kode')
;
if (g.length > 1) {
let v = g.map(function (cj) {
return cj.pokok.number(2)
}).sum();
return v;
}
let [data] = g;
if (data != undefined) {
let { pokok } = data;
return pokok.number(2);
}
return 0;
}
y.forEach(function (s) {
if (s == 'shu') {
let data = shu(q).currency(0);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else if (s == 'nonshu') {
let data = nonshu(q).currency(0);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else if (s == 'bunga') {
let data = bunga(q).currency(0);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else if (s == 'baru') {
let data = pokok(q).currency(0);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else if (s == 'akhir') {
let data = (pokok(q) - nonshu(q) - shu(q)).currency(0);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else {
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">0</td>`;
}
});
})
j += '</tr>';
return j;
} else {
return '';
}
}).join('')}
</tbody>
`).get()
)
let sumData = [];
window.printDataHtmlExcel =
el('table').css({
cellSpacing: 0
}).html(`
<thead>
${(function () {
return '<tr>' + header.map(function (q) {
if (q.rowspan != undefined) {
return `
<th style="text-align:center;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;" rowspan="${q.rowspan}">${q.name}</th>
`
} else {
return `
<th style="text-align:center;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;" colspan="${q.colspan}">${q.name}</th>
`
}
}).join('') + '</tr>'
})()}
${(function () {
return '<tr>' + subheader.map(function (q) {
if (q.rowspan != undefined) {
return `
<th style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;" rowspan="${q.rowspan}">${q.name}</th>
`
} else {
return `
<th style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;" colspan="${q.colspan}">${q.name}</th>
`
}
}).join('') + '</tr>'
})()}
</thead>
<tbody>
${anggota.map(function (ang, i) {
let j = '<tr>';
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${i + 1}</td>`;
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.kode}</td>`;
j += `<td style="min-width: 300px;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.nama}</td>`;
j += `<td style="min-width: 120px;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.kota}, ${tanggal(ang.tgllahir).sekarang}</td>`;
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.jk}</td>`;
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.telp}</td>`;
j += `<td style="min-width: 300px;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.alamat}</td>`;
j += `<td style="min-width: 180px;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.unitkerja}</td>`;
j += `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${ang.masuk.split('-')[0]}</td>`;
simp.forEach(function (h) {
let awl = 0;
let jln = 0;
sumData.push({
kodesp: h.kode,
bulan: '00',
kode: 'awl',
value: Number(0)
})
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">0</td>`;
namaBulan.forEach(function (b, i) {
let bl = i + 1;
let [data] = simpanan.cond(h.kode, 'kodesp').cond(bl, 'bulan').cond(ang.kode, 'kode');
if (data != undefined) {
sumData.push({
kodesp: h.kode,
bulan: bl.pad(2),
kode: 'sim',
value: Number(data.jumlah)
})
jln += Number(data.jumlah);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${Number(data.jumlah).currency(0).replace(/\./g, ',')}</td>`;
} else {
sumData.push({
kodesp: h.kode,
bulan: bl.pad(2),
kode: 'sim',
value: 0
})
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">0</td>`;
}
})
sumData.push({
kodesp: h.kode,
bulan: '00',
kode: 'jln',
value: Number(jln)
})
sumData.push({
kodesp: h.kode,
bulan: '00',
kode: 'akr',
value: Number(awl + jln)
})
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${Number(jln).currency(0).replace(/\./g, ',')}</td>`;
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${Number(awl + jln).currency(0).replace(/\./g, ',')}</td>`;
});
pj.forEach(function (q) {
let y = ['awl'
, 'shu'
, 'nonshu'
, 'bunga'
, 'baru'
, 'akhir'
];
function shu(q) {
let { kode } = q;
let g = pinjaman
.cond(kode, 'kodesp')
.cond('G', 'tr')
.cond(ang.kode, 'kode')
;
let [data] = g;
if (data != undefined) {
let { angpokok } = data;
if (angpokok != null && angpokok != undefined) {
return angpokok.number(2);
}
return 0;
}
return 0;
}
function nonshu(q) {
let { kode } = q;
let g = pinjaman
.cond(kode, 'kodesp')
.cond('L', 'tr')
.cond(ang.kode, 'kode')
;
let [data] = g;
if (data != undefined) {
let { angpokok } = data;
if (angpokok != null && angpokok != undefined) {
return angpokok.number(2);
}
return 0;
}
return 0;
}
function bunga(q) {
let { kode } = q;
let g = pinjaman
.cond(kode, 'kodesp')
.cond(ang.kode, 'kode')
;
if (g.length > 1) {
let v = g.map(function (cj) {
return cj.angbunga? cj.angbunga.number(2) : 0
}).sum();
return v;
}
let [data] = g;
if (data != undefined) {
let { angbunga } = data;
if (angbunga != null && angbunga != undefined) {
return angbunga.number(2);
}
return 0;
}
return 0;
}
function pokok(q) {
let { kode } = q;
let g = pinjaman
.cond(kode, 'kodesp')
.cond(ang.kode, 'kode')
;
if (g.length > 1) {
let v = g.map(function (cj) {
return cj.pokok.number(2)
}).sum();
return v;
}
let [data] = g;
if (data != undefined) {
let { pokok } = data;
return pokok.number(2);
}
return 0;
}
y.forEach(function (s) {
if (s == 'shu') {
sumData.push({
kodesp: q.kode,
bulan: '00',
kode: 'shu',
value: shu(q)
})
let data = shu(q);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else if (s == 'nonshu') {
sumData.push({
kodesp: q.kode,
bulan: '00',
kode: 'nonshu',
value: nonshu(q)
})
let data = nonshu(q);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else if (s == 'bunga') {
sumData.push({
kodesp: q.kode,
bulan: '00',
kode: 'bunga',
value: bunga(q)
})
let data = bunga(q);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else if (s == 'baru') {
sumData.push({
kodesp: q.kode,
bulan: '00',
kode: 'baru',
value: pokok(q)
})
let data = pokok(q);
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else if (s == 'akhir') {
sumData.push({
kodesp: q.kode,
bulan: '00',
kode: 'akhir',
value: (pokok(q) - nonshu(q) - shu(q))
})
let data = (pokok(q) - nonshu(q) - shu(q)).currency(0).replace(/\./g, ',');
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${data}</td>`;
} else {
sumData.push({
kodesp: q.kode,
bulan: '00',
kode: 'awl',
value: 0
})
j += `<td style="text-align: right;font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">0</td>`;
}
});
})
j += '</tr>';
return j;
}).join('')}
<tr>
${(function(){
return `
<td colspan="9" style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">Grand Total</td>
${
simp.map(function(h){
let y = sumData.cond('awl', 'kode').cond(h.kode, 'kodesp').map(function(c){
return c.value
}).sum();
let jln = sumData.cond('jln', 'kode').cond(h.kode, 'kodesp').map(function(c){
return c.value
}).sum();
let akr = sumData.cond('akr', 'kode').cond(h.kode, 'kodesp').map(function(c){
return c.value
}).sum();
return `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${y}</td>`
+namaBulan.map(function (b, i) {
let bl = (i + 1).pad(2);
let y = sumData.cond(bl,'bulan').cond('sim', 'kode').cond(h.kode, 'kodesp').map(function (c) {
return c.value
}).sum();
return `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${y}</td>`
})
+ `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${jln}</td>`
+ `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${akr}</td>`
}).join('')
}
${
pj.map(function (q) {
let cc = ['awl', 'shu', 'nonshu', 'bunga', 'baru', 'akhir'];
return cc.map(function(s){
let y = sumData.cond(q.kode, 'kodesp').cond(s, 'kode').map(function (c) {
return c.value
}).sum();
return `<td style="font-size: 10px;padding: 3px 8px;border: 1px solid #ddd;">${y}</td>`
})
}).join('')
}
`
})()}
</tr>
</tbody>
`).get();
}
const load = function () {
AuditDevQuery(`
SELECT * FROM anggota a ORDER BY jurubayar DESC, kode DESC
[;]
SELECT kode, nama FROM jpinjam WHERE typetransaksi = 'simpanan' AND rw <> '-'
[;]
SELECT kode, kodesp, month(tgl) bulan, sum(jumlah) jumlah
FROM msimpan WHERE tgl like '2023%' GROUP BY bulan, kode, kodesp
[;]
SELECT * FROM (
SELECT tr, kode, kodesp, sum(mpinjam.pokok) pokok, b.pokok angpokok, b.bunga angbunga FROM mpinjam
LEFT JOIN (
SELECT m.faktur, sum(mags.pokok) pokok, sum(mags.bunga) bunga FROM mags
LEFT JOIN mpinjam m ON m.faktur = mags.fkt GROUP BY faktur
) b ON b.faktur = mpinjam.faktur
GROUP BY kode, kodesp, tr
) a
`, function (x) {
tableCreator(...x);
})
}
load();
$("#export-data").click(function () {
let reportExcel = window.printDataHtmlExcel;
doit(reportExcel, 'xlsx', 'kekayaananggota.xlsx')
// let content = new Blob([reportExcel], {
// type: 'application/vdn.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
// });
// saveAs(content, 'export' + '.xls');
})