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