export const dataJpinjam = { data: {}, set: function (a) { this.data = a; } } export class DataLoad { #data = ''; add(data) { this.#data = JSON.stringify(data); } get() { return JSON.parse(this.#data); } clear() { this.#data = ''; } } const dataLoad = new DataLoad(); export const getLastCode = function (data) { var code1 = tanggal().normal.split('-')[0].substring(2, 4); let table = 'msimpan'; let a = { code: 'BKM', row: 'faktur', table: 'msimpan', data: data } return ` SELECT concat('${a.code}/${data}/${code1}/',lpad( ifnull( (SELECT substring_index(${a.row}, '${code1}/',-1) FROM ${table} WHERE ${a.row} LIKE '${a.code}/${a.data}/${code1}/%' ORDER BY ${a.row} DESC LIMIT 1) ,0 ) + 1,6,0)) ${a.row} ` } export const getLastAngs = function (a = {}) { var code = a.code; var code1 = tanggal().normal.split('-')[0].substring(2, 4); var code2 = tanggal().normal.split('-')[0]; var table = a.table; var row = a.row; if(table == 'ptg'){ return ` SELECT concat('${code}/${a.data}/${code1}/',lpad( ifnull( (SELECT substring_index(${row}, '${code1}/',-1) FROM ${table} WHERE ${row} LIKE '${code}/${a.data}/${code1}/%' ORDER BY ${row} DESC LIMIT 1) ,0 ) + 1,6,0)) ${row} `; }else{ return ` SELECT concat('${code}/${a.data}/${code1}/',lpad( ifnull( (SELECT substring_index(${row}, '${code1}/',-1) FROM ${table} WHERE ${row} LIKE '${code}/${a.data}/${code1}/%' AND userlog < (SELECT userlog FROM ${table} WHERE posting = '${_val('kodetagihan') }' LIMIT 1) ORDER BY ${row} DESC LIMIT 1) ,0 ) + 1,6,0)) ${row} `; } } export const getSimpanan = function (callback) { const data = dataLoad.get(); let simpan = data.cond('-', 'faktur'); let kodesp = []; simpan.forEach(function (e) { if (kodesp.indexOf(e.kodesp) == -1) { kodesp.push(e.kodesp); }; }); let dataSP = kodesp.map(function (y) { return { kode: y, qr: getLastCode(y) } }); let qr = dataSP.map(function (r) { return r.qr; }).join('[;]'); qr += '[;]'; qr += getLastAngs({ code: 'BKM', row: 'faktur', row2: 'nomor', table: 'mags', data: 'P' + tanggal().normal.split('-')[0].substring(0, 2), }); qr += '[;]' + 'SELECT * FROM setbb'; qr += '[;]'; qr += getLastAngs({ code: 'FT', row: 'faktur', row2: 'nomor', table: 'ptg', data: tanggal().normal.split('-')[1], }); AuditDevQuery(qr, callback); } export const getKodesp = function (a) { return a.split('/')[1]; } export const getData = function () { let data = dataLoad.get(); let dataStatus = Array.from(document.querySelectorAll('.open-status')).map(function (y) { let d = {}; d.kode = y.dataset.kode; d.kodesp = y.dataset.kodesp; d.faktur = y.dataset.faktur; d.val = y.value; return d; }); let simpan = data.cond('-', 'faktur').map(function (cj) { delete cj.ke; delete cj.prima; cj["cash"] = (function (data) { let jpinjam = dataJpinjam.data; let [{type}] = jpinjam.cond(data.kodesp, 'kode'); if (type == 'induk') { return _getval('cashin'); } return _getval('cash'); })(cj); cj["posting"] = _getval('kodetagihan'); cj.keterangan = cj.keterangan.replace('{kodesp}', cj.kodesp); cj.status = dataStatus.cond(cj.kode, 'kode').cond(cj.kodesp, 'kodesp')[0].val; return cj; }); getSimpanan(function (r) { let jpinjam = dataJpinjam.data; jpinjam.push({ kode: 'USP1', type: 'induk' }); jpinjam.push({ kode: 'USP2', type: 'induk' }); jpinjam.push({ kode: 'USP3', type: 'induk' }); jpinjam.push({ kode: 'REG', type: 'usp' }); let FT = r.pop()[0].faktur; let bb = r.pop(); let angLast = r.pop()[0].faktur; let MagS = bb.cond('mags', 'table_name'); var newArray = r.map(function (c) { let faktur = c[0].faktur; let newfaktur = faktur.split('/'); let number = newfaktur.pop().number(2); let kodesp = getKodesp(faktur); let bbSet = bb.cond('msimpan', 'table_name') .cond(kodesp, 'kode'); let data = simpan.cond(kodesp, 'kodesp') .map(function (dat, i) { let dats = dat; number = number + i; dats.faktur = newfaktur.join('/') + '/' + number.pad(6); delete dats.pokok; delete dats.bunga; return dats; }); return { bb: bbSet, data: data, insert: data.ToInsert('msimpan', [['tgl', 'kode', 'kodesp', 'posting']]), bbTemplate: function (bb, data, tr) { let dat = {} dat["kode"] = data.faktur; dat["tr"] = tr; dat["tgl"] = data.tgl; dat["keterangan"] = data.keterangan; dat["rekdebit"] = (function (data) { if (jpinjam.cond(data.kodesp, 'kode')[0].type == 'induk') { return _getval('cashin'); } return _getval('cash'); })(data); dat["debit"] = data[bb.kodedebet]; dat["rekkredit"] = bb.akunkredit; dat["kredit"] = data[bb.kodekredit]; dat["username"] = data.username; dat["userlog"] = data.userlog; dat["app"] = bb.app; dat["table_name"] = 'msimpan'; dat["posting"] = _getval('kodetagihan'); return dat; }, insertBB: function () { let temp = this.bbTemplate; let bb = this.bb; let data = this.data; let newData = bb.map(function (b, i) { return data.map(function (dat) { if (dat.status != "1") { return temp(b, dat, i); } else { return null } }) .filter(function (cek) { if (cek != null) { return cek; } }) .filter(function(cek){ if(cek.posting != ''){ return cek; } }) .ToInsert('lap_bb', ['kode', 'tr', 'tgl']); }).join('[;]'); return newData; } }; }); const dataPinjaman = { data: dataLoad.get().filter(function (y) { if (y.faktur != '-' && y.kodesp != 'PT') { return y; } }).map(function (d) { d.shu = d.pokok; d.keterangan = d.keterangan.replace('{kodesp}', d.kodesp); return d; }).filter(function (y) { let kodesp = y.kodesp; let status = dataStatus.cond(y.kode, 'kode').cond(kodesp, 'kodesp')[0].val; if (status != '1') { return y; } }), bbTemplate: function (bb, data, tr) { let dat = {} dat["kode"] = data.faktur; dat["tr"] = tr; dat["tgl"] = data.tgl; dat["keterangan"] = data.keterangan; let kodesp = data.fkt.split('/')[1]; if (jpinjam.cond(kodesp, 'kode')[0].type == 'induk') { dat["rekdebit"] = _getval('cashin'); }else{ dat["rekdebit"] = _getval('cash'); } dat["debit"] = data[bb.kodedebet]; dat["rekkredit"] = bb.akunkredit; dat["kredit"] = data[bb.kodekredit]; dat["username"] = data.user; dat["userlog"] = data.userlog; dat["app"] = bb.app; dat["table_name"] = 'msimpan'; dat["posting"] = _getval('kodetagihan'); return dat; }, bb: MagS, faktur: angLast, insertBB: function () { let temp = this.bbTemplate; let bb = this.bb; let faktur = this.faktur.split('/'); let number = faktur.pop().number(2); let data = this.data.map(function (pj, i) { let newPj = {}; newPj["cash"] = (function (data) { if (jpinjam.cond(data.kodesp, 'kode')[0].type == 'induk') { return _getval('cashin'); } return _getval('cash'); })(pj); newPj["tgl"] = pj.tgl; newPj["kode"] = pj.kode; newPj["nomor"] = (faktur.join('') + '' + (number + i).pad(6)).replace(/BKM/g, ''); newPj["faktur"] = faktur.join('/') + '/' + (number + i).pad(6); newPj["fkt"] = pj.faktur; newPj["ke"] = pj.ke.number(2); newPj["pokok"] = pj.pokok; newPj["bunga"] = pj.bunga; newPj["keterangan"] = pj.keterangan; newPj["user"] = pj.username; newPj["userlog"] = pj.userlog; newPj["shu"] = pj.pokok; newPj["nonshu"] = 0; newPj["posting"] = _getval('kodetagihan'); return newPj; }); let queryAngsuran = data.filter(function(cek){ if(cek.posting != ''){ return cek; } }).ToInsert('mags', ['posting', 'fkt', 'kode', 'ke']); let saveBB = []; data.forEach(function (e) { bb.cond(getKodesp(e.fkt), 'kode').forEach(function (b, i) { saveBB.push(temp(b, e, i)); }) }) saveBB = queryAngsuran + '[;]' + saveBB.filter(function(cek){ if(cek.posting != ''){ return cek; } }).ToInsert('lap_bb', ['kode', 'tr', 'tgl']); return saveBB; } } let querySimpanan = simpan.filter(function (c) { if (c.status != '1') { return c; } }) // .ToInsert('msimpan', ['tgl','kode','kodesp','posting']); let qr = newArray.map(function (w) { return w.insertBB(); }).join('[;]'); let queryAngsuranPinjaman = dataPinjaman.insertBB(); let tagihanUpdate = `UPDATE mtagihan SET statusposting = 1 WHERE kodetagihan = '${_getval('kodetagihan')}'` let uploadPostingan = querySimpanan +'[;]' +` INSERT INTO mgagalbayar (kodetagihan, faktur, kodesp, golkar, kode, jumlah, pokok, bunga) SELECT kodetagihan, faktur, kodesp, golkar, kode, jumlah, pokok, bunga FROM posting_gagalbayar_simpanan; ` + '[;]' + ` UPDATE mgagalbayar aa, ( SELECT b.tgl, a.kodetagihan FROM mgagalbayar a LEFT JOIN tglposting_simpanan b ON a.kodetagihan = b.posting WHERE a.tgl IS NULL ) bb SET aa.tgl = bb.tgl WHERE aa.kodetagihan = bb.kodetagihan; ` + '[;]' + qr + '[;]' + queryAngsuranPinjaman + '[;]' + tagihanUpdate +`[;] DELETE FROM msimpan WHERE keterangan LIKE 'posting%' AND posting = '' [;] DELETE FROM mags WHERE keterangan LIKE 'posting:%' AND posting = '' [;] DELETE FROM lap_bb WHERE keterangan LIKE 'posting:%' AND posting = '' ` let loaderStart = cssLoader(); const dataPT = dataLoad.get().filter(function (y) { if (y.kodesp == 'PT') { return y; } }) .map(function(r, i){ let nv = FT.split('/'); let num = (Number(nv.pop()) + i).pad(6); nv = nv.join('/')+'/'+num; let status = dataStatus .cond(r.kode, 'kode') .cond(r.kodesp, 'kodesp') .cond(r.faktur, 'faktur') [0].val; if(status != 1){ return { kodesc: r.kode, faktur: r.faktur, lunas: r.pokok, tgl: r.tgl, username: r.username, userlog: r.userlog, posting: _getval('kodetagihan') } }else{ return null } }).filter(function(d){ if(d != null){ return d; } }); let querySimpananUpdate = JSON.parse(JSON.stringify(querySimpanan)).map(function(s){ delete s.faktur; return s; }).ToSelect('msimpan', ['tgl','kode','kodesp','posting']); console.log(querySimpananUpdate) AuditDevQuery(querySimpanan.ToSelect('msimpan', ['tgl','kode','kodesp','posting'])+'[;]'+querySimpananUpdate , function(res){ let [o] = res; let news = r.map(function(p){ let [f,kode] = p[0].faktur.split('/'); let sp = p[0].faktur.split('/'); let num = Number(sp.pop()); let ff = sp.join('/') console.log(kode); let data = o.cond(kode, 'kodesp'); return data.map(function(c, i){ c.faktur = ff+'/'+(num + i); return c }) }); let y = []; news.forEach((h)=>{ y = y.concat(h); }) loaderStart.remove(); if(y.length > 0){ AuditDevQuery(y. ToInsert('msimpan'), function(o){ console.log(o); }); }else{ console.log("ok") } }) throw 'stop'; AuditDevQuery(uploadPostingan, function (res) { if (dataPT.length > 0){ Swal('Success', 'Posting berhasil di update namun gagal di simpan di konsumsi', 'success'); loaderStart.remove(); _App.clearTable('table'); window.infotext.innerHTML = ''; window.infotext.appendChild( el('span').text('Data telah di upload').get() ); }else{ Swal('Success', 'Data posting telah di upload', 'success'); loaderStart.remove(); _App.clearTable('table'); window.infotext.innerHTML = ''; window.infotext.appendChild( el('span').text('Data telah di upload').get() ) } setTimeout(() => { AuditDevQuery(` UPDATE msimpan aa, ( SELECT s.rekdebit cash, a.faktur FROM msimpan a LEFT JOIN ( SELECT kode, rekdebit FROM lap_bb WHERE kode LIKE 'BKM%' AND tgl LIKE concat(year(now()), '%') ) s ON s.kode = a.faktur WHERE a.cash <> s.rekdebit ) bb SET aa.cash = bb.cash WHERE aa.faktur = bb.faktur `, function(){ console.log("update") }) }, 1000); }) }); } export const saveconfig = function (dat) { if (window._mtagihan != undefined && Array.isArray(window._mtagihan) === true) { let tagihan = _val('kodetagihan') != "" ? _val('kodetagihan') : dat?.tagihan; let data = _mtagihan.cond(tagihan, 'kodetagihan'); let jam = _getval('jam') != "" ? _getval('jam') : dat?.jam; let tgl = _val('tgl') != "" ? _getval('tgl') : dat?.tgl; let kasir = _getval('kasir') != "" ? _getval('kasir') : dat?.kasir; let cash = _val('cash') != "" ? _val("cash") : dat?.cash; let cashin = _val('cashin') != "" ? _val("cashin") : dat?.cashin; location.hash = `jam=${jam}&tgl=${tgl}&kasir=${kasir}&tagihan=${tagihan}&cash=${ cash }&cashin=${ cashin}` window.tagihanData = data.singleItem('kodetagihan'); let x = data .removeItemObject('kodetagihan') .removeItemObject('statusposting') .addItemObject('keterangan', [callUserFunc('keterangan', ['posting: {kodesp}', tanggal().normal]),', ', 'jurubayar'] ) .removeItemObject('jurubayar') .addItemObject('tgl', tgl) .addItemObject('kasir', kasir) .addItemObject('jam', jam) .addItemObject('userlog', timestamp()) .addItemObject('username', username) ; window._postingDataSimpan = x; window.OpenArray = _App.ArrayObjectToArray( x, ['kode', 'kodesp', 'tgl', 'faktur', 'kode', 'jumlah', 'pokok', 'bunga', 'keterangan', 'kasir', 'jam'] ); _App.pushTable( 'table' , OpenArray , [function (x, n) { return ` ` }, false, function (x) { return x }, false, function (a) { var nm = anggota.cond(a, 'id'); if (nm.length > 0) { return a + ' - ' + nm[0].text; } return a; }, function (x) { if (typeof x === 'number') { return x.currency(0) }; return x.number(2).currency(0); }] ); window.infotext.innerHTML = ''; window.infotext.appendChild( el('span') .child( el('span').css({ display: 'inline-block', marginRight: '10px', }).text('Perhatian saat posting di klik maka akan mengganti data yang sama di bulan tersebut dengan data posting berdasarkan bulan dan tahun simpanan yang merupakan data hasil posting . Fakur akan di generate ulang saat button posting di click untuk menghindari input bersamaan.Silahkan prosses posting dengan click button berikut') ) .child( el('button').css('margin-left', '10px') .css('margin', '10px 0') .css('font-weight', 'bold') .addModule('x', btoa(JSON.stringify(x))) .class(' btn btn-success').html(' Posting Transaksi') .click(function () { let x = atob(this.x) dataLoad.add(JSON.parse(x)); getData(); }) ) .get() ); console.clear(); } }