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.

583 lines
20 KiB
JavaScript

export const dataJpinjam = {
data: {},
set: function (a) {
this.data = a;
}
}
export class DataLoad {
#data = '';
add(data) {
this.#data = JSON.stringify(data);
}
get() {
let data = this.openStatus();
let y = JSON.parse(this.#data).filter(function(s){
let [p] = data.cond(s.kodesp, 'kodesp')
.cond(s.kode, 'kode')
.cond(s.faktur, 'faktur');
if(p.status && p.status != '1'){
return s;
}
});
return y;
}
openStatus(){
return (function(){
let f = Array.from(document.querySelectorAll(".open-status"))
let newData = f.map(function(s){
let newJson = s.dataset
newJson["status"] = s.value
let json = {}
for(let p in newJson){
json[p] = newJson[p];
}
return json;
})
return newData
})()
}
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;
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}
`;
}
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();
console.log(data);
if (myip && myip === '157.15.63.209'){
// throw 'stoped';
}
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;
if (jpinjam.cond(data.kodesp, 'kode')[0].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'),
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');
}).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');
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');
return saveBB;
}
}
let querySimpanan = simpan.filter(function (c) {
if (c.status != '1') {
return c;
}
}).ToInsert('msimpan');
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;
console.log(status);
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;
}
});
console.log(querySimpanan);
console.log(qr);
const cekSimpanan = function(){
return new Promise(function(resolve,reject){
try{
AuditDevQuery('call cekCashSimpanan()', function () {
resolve("ok");
})
}catch{
reject("gagal")
}
})
}
AuditDevQuery(uploadPostingan, async function(res) {
await cekSimpanan();
if (dataPT.length > 0){
let dataSend = JSON.stringify({
data: dataPT.filter(function(r){
if(r.posting != ''){
return r
}
})
});
var url = 'https://www.warpekamart.com/backoffice/api-konsumsi';
var formData = new FormData();
formData.append('datapost', dataSend);
fetch(url, { method: 'POST', body: formData })
.then(function (response) {
return response.text();
})
.then(function (body) {
console.log(body);
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()
)
})
.catch(function (err) {
console.log(err);
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 data = _mtagihan.cond(_getval('kodetagihan'), 'kodetagihan');
let tgl = _getval('tgl');
let jam = _getval('jam');
let kasir = _getval('kasir');
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 `
<select data-kode="${x}" data-kodesp="${n[1]}" data-faktur="${n[3]}" class="form-control open-status">
<option selected value="0">Lunas</option>
<option value="1">Gagal Bayar</option>
</select>
`
}, 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('<i class="ft-upload"></i> Posting Transaksi')
.click(function () {
let x = atob(this.x)
dataLoad.add(JSON.parse(x));
getData();
})
)
.get()
);
}
}