const toBase64 = function (str) { return window.btoa(unescape(encodeURIComponent(str))); } const fromBase64 = function (str) { return decodeURIComponent(escape(window.atob(str))); } const _fullScreen = function () { if (window.innerWidth > 1024) { setTimeout(() => { document.querySelector('.modern-nav-toggle').click(); try{ (function(){ if (window.table != undefined) { window.table.draw(false); } })(); }catch(e){ console.log(e); }; }, 1000); } }; Number.prototype.rp = function (a) { var idr = new Intl.NumberFormat(undefined, { style: 'currency', currency: 'IDR', minimumFractionDigits: 0, maximumFractionDigits: 0, }); var s = this; if (s == null) { s = 0; } var num = s.valueOf(); return idr.format(num).replace(/IDR/g, "Rp"); } window._masterData = {}; window._master = function (n, a) { if (window._masterData[n] == undefined) { window._masterData[n] = JSON.parse(_id(a).innerHTML); } return window._masterData[n]; } function uuid() { return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) ); } function formatRupiah(angka, prefix) { var topHead = ""; if (angka.toString()[0] == "-") { topHead = "-"; } var number_string = angka.replace(/[^,\d]/g, "").toString(), split = number_string.split(","), sisa = split[0].length % 3, rupiah = split[0].substr(0, sisa), ribuan = split[0].substr(sisa).match(/\d{3}/gi); // tambahkan titik jika yang di input sudah menjadi angka ribuan if (ribuan) { var separator = sisa ? "." : ""; rupiah += separator + ribuan.join("."); } rupiah = split[1] != undefined ? rupiah + "," + split[1] : rupiah; rupiah = topHead + rupiah; return prefix == undefined ? rupiah : rupiah ? "" + rupiah : ""; } const _id = function (id = '') { return document.getElementById(id); } const _json = function (id = '') { return JSON.parse(_id(id).innerHTML); } const _getThnBln = function (id = '') { if (_val('bulan') && _val('tahun')){ return _val('tahun')+'-'+_val('bulan'); } let g = tanggal().normal.split('-'); g.pop() return g.join('-'); } const _val = function (id = '', nilai = null) { if (document.getElementById(id)){ if(!nilai){ return document.getElementById(id).value; } return document.getElementById(id).value = nilai; } return null; } const _valHTML = function (id = '') { if (document.getElementById(id)){ return document.getElementById(id).innerHTML; } return null; } const _setHTML = function (id = '', html, multi=0) { if(multi > 0){ Array.from(document.querySelector(id)) .forEach(function(o){ o.innerHTML = html; }) return false; } if (document.getElementById(id)){ return document.getElementById(id).innerHTML = html; } return null; } const _month2 = ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"]; const _3month = ["Mar", "Jun", "Sep","Des"]; const ucapanSelamat = function() { var waktu = new Date().getHours(); var ucapan; if (waktu >= 5 && waktu <= 11) { ucapan = "Selamat Pagi!"; } else if (waktu >= 12 && waktu < 14) { ucapan = "Selamat Siang!"; } else if (waktu >= 15 && waktu < 18) { ucapan = "Selamat Sore!"; } else { ucapan = "Selamat Malam!"; } return ucapan; } const _dateIndo = function(...arg){ if(typeof tanggal == 'function'){ let date = arg.join('-'); return tanggal(arg).sekarang2; } return null } const _dateIndoLast = function(...arg){ if(typeof tanggal == 'function'){ let date = arg.join('-'); return tanggal( tanggal(arg).normal3 ).sekarang2; } return null } const _select = function (id = '') { return document.querySelector(id); } const _selectAll = function (id = '') { return document.querySelectorAll(id); } const _month = [ { id: '01', text: 'Jan' } , { id: '02', text: 'Feb' } , { id: '03', text: 'Mar' } , { id: '04', text: 'Apr' } , { id: '05', text: 'Mei' } , { id: '06', text: 'Jun' } , { id: '07', text: 'Jul' } , { id: '08', text: 'Aug' } , { id: '09', text: 'Sep' } , { id: '10', text: 'Okt' } , { id: '11', text: 'Nov' } , { id: '12', text: 'Des' } ]; const cssLoader = function () { var lod = div() .class('css-loader') .css({ position: 'fixed', top: 0, left: 0, display: 'flex', justifyContent: 'center', alignItems: 'center', width: '100vw', height: '100vh', zIndex: '9999999', background: 'rgba(125,125,125,0.4)' }) .child( el('style').html(` .lds-spinner { color: official; display: inline-block; position: relative; width: 80px; height: 80px; } .lds-spinner div { transform-origin: 40px 40px; animation: lds-spinner 1.2s linear infinite; } .lds-spinner div:after { content: " "; display: block; position: absolute; top: 3px; left: 37px; width: 6px; height: 18px; border-radius: 20%; background: #fff; } .lds-spinner div:nth-child(1) { transform: rotate(0deg); animation-delay: -1.1s; } .lds-spinner div:nth-child(2) { transform: rotate(30deg); animation-delay: -1s; } .lds-spinner div:nth-child(3) { transform: rotate(60deg); animation-delay: -0.9s; } .lds-spinner div:nth-child(4) { transform: rotate(90deg); animation-delay: -0.8s; } .lds-spinner div:nth-child(5) { transform: rotate(120deg); animation-delay: -0.7s; } .lds-spinner div:nth-child(6) { transform: rotate(150deg); animation-delay: -0.6s; } .lds-spinner div:nth-child(7) { transform: rotate(180deg); animation-delay: -0.5s; } .lds-spinner div:nth-child(8) { transform: rotate(210deg); animation-delay: -0.4s; } .lds-spinner div:nth-child(9) { transform: rotate(240deg); animation-delay: -0.3s; } .lds-spinner div:nth-child(10) { transform: rotate(270deg); animation-delay: -0.2s; } .lds-spinner div:nth-child(11) { transform: rotate(300deg); animation-delay: -0.1s; } .lds-spinner div:nth-child(12) { transform: rotate(330deg); animation-delay: 0s; } @keyframes lds-spinner { 0% { opacity: 1; } 100% { opacity: 0; } } `) ) .child( div().class('lds-spinner') .html(`
`) ) .get() document.body.appendChild(lod) return lod; }; try{ (function (global, factory) { if (typeof define === "function" && define.amd) { define([], factory); } else if (typeof exports !== "undefined") { factory(); } else { var mod = { exports: {} }; factory(); global.FileSaver = mod.exports; } })(this, function () { "use strict"; /* * FileSaver.js * A saveAs() FileSaver implementation. * * By Eli Grey, http://eligrey.com * * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT) * source : http://purl.eligrey.com/github/FileSaver.js */ // The one and only way of getting global scope in all environments // https://stackoverflow.com/q/3277182/1008999 var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : void 0; function bom(blob, opts) { if (typeof opts === 'undefined') opts = { autoBom: false }; else if (typeof opts !== 'object') { console.warn('Depricated: Expected third argument to be a object'); opts = { autoBom: !opts }; } // prepend BOM for UTF-8 XML and text/* types (including HTML) // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type }); } return blob; } function download(url, name, opts) { var xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'blob'; xhr.onload = function () { saveAs(xhr.response, name, opts); }; xhr.onerror = function () { console.error('could not download file'); }; xhr.send(); } function corsEnabled(url) { var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker xhr.open('HEAD', url, false); xhr.send(); return xhr.status >= 200 && xhr.status <= 299; } // `a.click()` doesn't work for all browsers (#465) function click(node) { try { node.dispatchEvent(new MouseEvent('click')); } catch (e) { var evt = document.createEvent('MouseEvents'); evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); node.dispatchEvent(evt); } } var saveAs = _global.saveAs || // probably in some web worker typeof window !== 'object' || window !== _global ? function saveAs() { } /* noop */ // Use download attribute first if possible (#193 Lumia mobile) : 'download' in HTMLAnchorElement.prototype ? function saveAs(blob, name, opts) { var URL = _global.URL || _global.webkitURL; var a = document.createElement('a'); name = name || blob.name || 'download'; a.download = name; a.rel = 'noopener'; // tabnabbing // TODO: detect chrome extensions & packaged apps // a.target = '_blank' if (typeof blob === 'string') { // Support regular links a.href = blob; if (a.origin !== location.origin) { corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank'); } else { click(a); } } else { // Support blobs a.href = URL.createObjectURL(blob); setTimeout(function () { URL.revokeObjectURL(a.href); }, 4E4); // 40s setTimeout(function () { click(a); }, 0); } } // Use msSaveOrOpenBlob as a second approach : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) { name = name || blob.name || 'download'; if (typeof blob === 'string') { if (corsEnabled(blob)) { download(blob, name, opts); } else { var a = document.createElement('a'); a.href = blob; a.target = '_blank'; setTimeout(function () { click(a); }); } } else { navigator.msSaveOrOpenBlob(bom(blob, opts), name); } } // Fallback to using FileReader and a popup : function saveAs(blob, name, opts, popup) { // Open a popup immediately do go around popup blocker // Mostly only avalible on user interaction and the fileReader is async so... popup = popup || open('', '_blank'); if (popup) { popup.document.title = popup.document.body.innerText = 'downloading...'; } if (typeof blob === 'string') return download(blob, name, opts); var force = blob.type === 'application/octet-stream'; var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari; var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); if ((isChromeIOS || force && isSafari) && typeof FileReader === 'object') { // Safari doesn't allow downloading of blob urls var reader = new FileReader(); reader.onloadend = function () { var url = reader.result; url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;'); if (popup) popup.location.href = url; else location = url; popup = null; // reverse-tabnabbing #460 }; reader.readAsDataURL(blob); } else { var URL = _global.URL || _global.webkitURL; var url = URL.createObjectURL(blob); if (popup) popup.location = url; else location.href = url; popup = null; // reverse-tabnabbing #460 setTimeout(function () { URL.revokeObjectURL(url); }, 4E4); // 40s } }; _global.saveAs = saveAs.saveAs = saveAs; if (typeof module !== 'undefined') { module.exports = saveAs; } }); }catch(e){ } window._printDoc = function (res) { var printV = null; if (document.querySelector('#printDocuPageLay') == undefined) { printV = el('iframe').id('printDocuPageLay').css('display', 'none').get(); document.body.appendChild(printV) } else { printV = globalThis['printDocuPageLay'].parent } var win1 = printV.contentWindow; win1.document.open() win1.document.write(res) win1.document.close() win1.print() } window._exportExcel = function (content, title) { content = new Blob([content], { type: 'application/vdn.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' }); saveAs(content, title + '.xls'); }; const AuditDev = function (validasi = '', urlapp = '') { return { urlsave: "https://indowebs.my.id/admin/api/save", getnew: "https://s-feed.com/simanis/api/regist", token: "https://s-feed.com/simanis/api/getToken", masterlink: "?key=master-api&value=", data: { regist: false, table: "", limit: "", order: "", select: " * ", condition: "", setCreate: 0, leftJoin: "", saveset: 0, updatedata: null, obj: null }, table: function (a) { this.data.table = a; return this; }, group: function (arr = []) { this.data.groupby = arr; return this; }, regist: function () { this.data.regist = true; return this; }, condition: function (a = []) { var sp = " WHERE "; sp += a.map(function (x, i) { return ` ${x.opsi} ${x.data[0]} ${x.data[1]} ${x.data[2]} `; }).join(" ") this.data.condition = sp; return this; }, like: function (a = []) { var sp = " "; if (this.data.condition != "") { sp = ""; } else { sp = " WHERE "; } sp += a.map(function (x, i) { return ` ${x.opsi} ${x.data[0]} ${x.data[1]} ${x.data[2]} `; }).join(" ") if (this.data.condition != "") { this.data.condition += ' AND (' + sp + ')'; } else { this.data.condition += sp; } return this; }, select: function (a) { this.data.select = a; return this; }, delete: function () { var up = " DELETE FROM " + this.data.table + " "; up += this.data.condition; this.data.updatedata = up; return this; }, update: function (a = {}) { function escapeHtml(text) { return text .replace(/&/g, "&") .replace(//g, ">") .replace(/'/g, "'"); } var up = " UPDATE " + this.data.table + " SET "; up += Object.keys(a).map(function (x, s) { return ` ${x} = '${a[x]}' `; }).join(",") up += this.data.condition; this.data.updatedata = up; return this; }, leftJoin: function (a = []) { this.data.leftJoin = ''; var pp = this; a.forEach(function (y, i) { pp.data.leftJoin += " LEFT JOIN " + y[0] + " ON " + y[1] + " " + y[2] + " " + y[3] + " "; }) return this; }, order: function (a, b = "DESC") { this.data.order = ` ORDER BY ${a} ${b} `; return this; }, limit: function (a, b) { this.data.limit = ` LIMIT ${a}, ${b} `; return this; }, save: function (obj = {}) { function escapeHtml(text) { return text .replace(/&/g, "&") .replace(//g, ">") .replace(/'/g, "'"); } this.data.obj = obj; var dat = Object.keys(obj); var dd = dat.map(function (x, c) { return '\'' + obj[x] + '\''; }).join(","); this.data.saveset = 1; this.data.save = `INSERT INTO ${this.data.table} (${dat.join(",")}) VALUES (${dd}) `; return this; } , createTable: function (a = {}) { this.data.setCreate = 1; this.data.createTable = "CREATE TABLE " + this.data.table + " ("; this.data.createTable += " id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY, "; var pp = this; Object.keys(a).forEach(function (x, i) { if (i == (Object.keys(a).length - 1)) { pp.data.createTable += " " + x + " " + a[x] + " "; } else { pp.data.createTable += " " + x + " " + a[x] + " , "; } }) this.data.createTable += " ) "; return this; }, text2Binary: function (string) { return string.split('').map(function (char) { return char.charCodeAt(0).toString(2); }).join('2'); }, nextIncrement: function () { this.data.nextIncrement = `SELECT auto_increment AS increment FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '${this.data.table}'`; return this; }, master: function (data, func, unsafe = 0) { if (unsafe == 0) { var loco = this; xdb('epost', ['dataMaster'], 7, function (s) { s.read('dataMaster', 'master', function (s) { if (s != null) { $.ajax({ url: loco.masterlink + '/' + loco.text2Binary(JSON.stringify(data)), success: function (res) { res = JSON.parse(res) globalThis.dataMaster = res; setTimeout(function () { func() }) xdb('epostadmin', ['dataMaster'], 7, function (s) { s.add('dataMaster', { id: 'master', data: res }) }); }, error: function (xhr, ajaxOptions, thrownError) { Array.from(document.querySelectorAll('.css-loader')).forEach(function(e){ e.remove(); }); Swal('warning', 'Connectioin lost,please try again', 'warning'); throw 'error connection'; } }) } else { $.ajax({ url: loco.masterlink + '/' + loco.text2Binary(JSON.stringify(data)), success: function (res) { res = JSON.parse(res) globalThis.dataMaster = res; func() xdb('epostadmin', ['dataMaster'], 7, function (s) { s.add('dataMaster', { id: 'master', data: res }) }); }, error: function (xhr, ajaxOptions, thrownError) { Array.from(document.querySelectorAll('.css-loader')).forEach(function (e) { e.remove(); }); Swal('warning', 'Connectioin lost,please try again', 'warning'); throw 'error connection'; } }) } }) }); } else { var loco = this; $.ajax({ url: loco.masterlink + '/' + loco.text2Binary(JSON.stringify(data)), success: function (res) { res = JSON.parse(res); func() globalThis.dataMaster = res; }, error: function (xhr, ajaxOptions, thrownError) { } }) } } , getToken: function (a) { $.ajax({ url: this.token + '/' + this.text2Binary(JSON.stringify(a)), success: function (res) { if (res.includes('nodata')) { alert('maaf user tidak terdaftar') } else { res = JSON.parse(res); localStorage.setItem('loginCond', res.token); location.href = "#/"; } }, error: function (xhr, ajaxOptions, thrownError) { } }) return this; }, get: function (func, qr = null) { var ck = this; var query = ""; var nTable = this.data.table; var groupby = ''; if (this.data.groupby != undefined) { if (this.data.groupby.length > 0) { groupby = " GROUP BY " + this.data.groupby.join(","); } } query = ` SELECT ${this.data.select} FROM (SELECT * FROM ${nTable} ${groupby} ) a ${this.data.leftJoin} ${this.data.condition} ${this.data.order} ${this.data.limit} `; if (qr != null) { query = qr.replace(/\n/g, ' '); } if (this.data.setCreate == 1) { query = this.data.createTable; } if (this.data.saveset == 1) { query = this.data.save; } if (this.data.updatedata != null) { query = this.data.updatedata; } if (this.data.nextIncrement != null) { query = this.data.nextIncrement; } if (query.indexOf("SELECT") != -1) { upload('{{PATH}}/db/api', '', 'qr.data', toBase64(query), (a) => { }, (b) => { var res = JSON.parse(b); func(res.data, res.count, ck) }); } else { upload('{{PATH}}/db/api', '', 'qr.data', toBase64(query), (a) => { }, (b) => { var res = b; if (res.includes('simpan')) { func('disimpan', ck) } else { res = JSON.parse(res) func(res.data, res.count, ck) } }); } return this; } } } const AuditDevQuery = function (a, func) { AuditDev('').get(func, a); }; (function () { var t = Array.from(document.querySelectorAll('.menu-title')).forEach(function (t) { var r = t.parentNode; if (location.href.indexOf(r.href) != -1) { r.parentNode.className = 'active'; } else { r.parentNode.className = ''; } }) })(); const timestamp = function () { var v = new Date(); return tanggal().normal + ' ' + v.toTimeString().split(' ')[0]; }; (function stillAlive() { var es = el('script') es.src('{{PATH}}/alive') es.load(function(e){ var f = e.el; setTimeout(function(){ f.remove(); stillAlive(); },5000) }); document.head.appendChild(es.get()); })(); const modaluser = $("#useractivemodal"); const saveuser = $("#saveuser"); const profileinfo = $("#infoprofile"); const logoutEl = document.getElementById('logoutaction'); saveuser.on('click',function(){ var ff = Array.from(document.querySelectorAll('.user-i')); var update = ' UPDATE username SET '; update += ff.map(function (ik, i) { return ` ${ik.name} = "${ik.value}" `; }).join(" , "); update += ` WHERE username = "${username}"`; AuditDevQuery(update, function(){ logoutEl.click(); }); }) window._EditProfile = function(){ AuditDevQuery(`SELECT * FROM username WHERE username = '${username}'`, function(sx){ if (sx.length > 0){ sx = sx[0]; var demo = sx.demo; if(demo == 1){ profileinfo.html('Anda ada di mode demo!'); } var ff = Array.from(document.querySelectorAll('.user-i')); ff.forEach(function(ik,i){ var nm = ik.name; ik.value = sx[nm]; if(demo == 1){ ik.setAttribute('readonly',true) } }) modaluser.modal('show'); } }); }; const listPinjam = [{ "id": "REG", "text": "USP Reguler" }, { "id": "USP1", "text": "USP 1 (Pembiayaan Elektronik)" }, { "id": "USP2", "text": "USP 2 (Pembiayaan Sepeda Motor)" }, { "id": "USP3", "text": "USP 3 (Pembiayaan Haji/ Umroh)" }, { "id": "KHUSUS", "text": "USP KHUSUS" }] window._ObjectKeysToArray = function(a){ return Object.keys(a).filter(function(x){ if(Array.isArray(a[x])){ return x; } }).map(function(s){ return a[s]; }) }; Array.prototype.getItemArrayNum = function(num) { return this.map(function(s){ return s[num] }) } Array.prototype.getString = function(num) { return this.filter(function(s){ if(typeof s === 'string'){ return s } }) } Array.prototype.notDate = function(num) { var ty = this.filter(function(s){ if (Number.isNaN(tanggal(s).angka) === true){ return s } }) return ty; } const BLNID = { "Januari" : "01", "Pebruari" : "02", "Maret" : "03", "April" : "04", "Mei" : "05", "Juni" : "06", "Juli" : "07", "Agustus" : "08", "September" : "09", "Oktober" : "10", "Nopember" : "11", "November" : "11", "Desember" : "12" } Array.prototype.fixMonth = function() { var ty = this.map(function(s){ if(s === '-'){ return '0000-00-00'; }else{ var e = s; Object.keys(BLNID).forEach(function(j){ e = e.replaceAll(j, BLNID[j]); }); e = e.split(' '); e = e[2]+'-'+e[1]+'-'+e[0]; return e; } }); return ty; } String.prototype.fixMonth = function() { var s = this; if (s === '-') { return '0000-00-00'; } else { var e = s; Object.keys(BLNID).forEach(function (j) { e = e.replaceAll(j, BLNID[j]); }); if(e.indexOf('-') != -1){ return e; } e = e.split(' '); if(e.length > 1){ e = e[2] + '-' + e[1] + '-' + e[0]; }else{ e = e[0]+'-00-00'; } return e; } } String.prototype.replaceMonth = function() { var s = this; if (s === '-') { return '0000-00-00'; } else { var e = s; Object.keys(BLNID).forEach(function (j) { e = e.replaceAll(j, BLNID[j]); }); return e; } } Array.prototype.ArrayHtmlToElement = function (num,select,kode) { return this.map(function (s) { return (function(c){ console.log(c); if(c != null){ return c.dataset[kode]; }else{ return c; } return c; })(el('div').html(s[num]).get().querySelector(select)); }).filter(function(g){ if(g != null){ return g; } }) }; const DeleteTable = function(table, cond, validasi){ var link = location.href; var origin = location.origin+validasi; if(link === origin){ if(typeof cond === 'object'){ if(Object.keys(cond).length > 0){ var w = ' WHERE '; w += Object.keys(cond).map(function(s){ return ` \`${s}\` = "${cond[s].replace(/\"/g,"\\\"")}" `; }).join(","); return `DELETE FROM \`${table}\` ${w} `; } return `DELETE FROM \`${table}\` `; } } } Array.prototype.ToInsert = function (table = 'test', wht = '') { var s = this; if(s.length > 0){ var y = Object.keys(s[0]); var x = ''; x += 'INSERT INTO '; x += table; x += '('; x += y.map(function(u){ return ` \`${u}\` ` }).join(','); x += ')'; x += '\n'; x += 'SELECT '; x += y.map(function(g){ return `a.${g}`; }); x += ' FROM ('; x += s.map(function(w){ var f = ` SELECT `; f += y.map(function(q){ if (w[q] != null){ return `"${w[q].toString().replace(/\"/g,"\\\"")}" \`${q}\``; }else{ return `"-" \`${q}\``; } }).join(","); return f; }).join("\n UNION ALL \n") x += ') a'; if (Array.isArray(wht)){ x += ` LEFT JOIN ${table} ON ` x += wht.map(function(whtx){ return ` ${table}.${whtx} = a.${whtx} `; }).join(" AND "); x += ` WHERE `; x += wht.map(function(whtx){ return ` ${table}.${whtx} IS NULL `; }).join(" AND "); } return x; } else { return []; } }; Array.prototype.ToSelect = function (table = 'test', wht = '') { var s = this; if(s.length > 0){ var y = Object.keys(s[0]); var x = ''; x += 'SELECT '; x += y.map(function(g){ return `a.${g}`; }); x += ' FROM ('; x += s.map(function(w){ var f = ` SELECT `; f += y.map(function(q){ if (w[q] != null){ return `"${w[q].toString().replace(/\"/g,"\\\"")}" \`${q}\``; }else{ return `"-" \`${q}\``; } }).join(","); return f; }).join("\n UNION ALL \n") x += ') a'; if (Array.isArray(wht)){ x += ` LEFT JOIN ${table} ON ` x += wht.map(function(whtx){ return ` ${table}.${whtx} = a.${whtx} `; }).join(" AND "); x += ` WHERE `; x += wht.map(function(whtx){ return ` ${table}.${whtx} IS NULL `; }).join(" AND "); } return x; } else { return []; } }; Array.prototype.removeDuplicate = function (b = ['kode','nama']) { var t = [].concat(this); var n = []; var nr = []; t.forEach(function(o){ if(typeof o === 'string'){ if(n.indexOf(o) == -1){ n.push(o); nr.push(o); }; }; if(typeof o === 'object'){ var f = ''; var g = {}; b.forEach(function(u){ f += o[u]; g[u] = o[u]; }); if(n.indexOf(f) == -1){ n.push(f); nr.push(g); }; }; }); return nr; } const removeDuplicate = function (dat = [], b = ['kode','nama'], c = ['id', 'text']) { var t = dat; var n = []; var nr = []; t.forEach(function(o){ if(typeof o === 'string'){ if(n.indexOf(o) == -1){ n.push(o); nr.push(o); }; }; if(typeof o === 'object'){ var f = ''; var g = {}; b.forEach(function(u, i){ f += o[u]; g[u] = o[u]; if(c[i] != undefined){ g[c[i]] = o[u]; } }); if(n.indexOf(f) == -1){ n.push(f); nr.push(g); }; }; }); return nr; }; Array.prototype.makeMaster = function (a,b) { var t = this; var n = t.map(function(s){ var x = {} x[a] = s; x[b] = s; return x }) return n; } function ExcelDateToJSDate(serial) { var utc_days = Math.floor(serial - 25569); var utc_value = utc_days * 86400; var date_info = new Date(utc_value * 1000); var fractional_day = serial - Math.floor(serial) + 0.0000001; var total_seconds = Math.floor(86400 * fractional_day); var seconds = total_seconds % 60; total_seconds -= seconds; var hours = Math.floor(total_seconds / (60 * 60)); var minutes = Math.floor(total_seconds / 60) % 60; return new Date(date_info.getFullYear(), date_info.getMonth(), date_info.getDate(), hours, minutes, seconds); } const _textArea = function (a, b, c, d, l = '250px', type = 'text') { if (a == null) { a = '-'; } return `
` + a + `
`; } const _nowhitespace = function (a) { return `${a}` } const _trashTable = function (a,b,c) { return ` `; }; const _deleteAction = function (a,b,c) { return ` `; }; const _standardTableAct = function (a,b,c) { return ` `; }; const _deleteOnlyTableAct = function (a,b,c) { return ` `; }; const statusTagihan = [ {id:"0",text:"Prosses"} ,{id:"1",text:"Telah diproses"} ]; const replaceFromMaster = function (master, id,val,row){ var txt = ''; if(!Array.isArray(master)){ master = []; } master.forEach(function(s){ if(s[id] == val){ txt = s[row] } }) return txt; }; const _getElement = function (cond) { return { el: Array.from(document.querySelectorAll(cond)).map(function (w) { return { el: w, data: (function (w) { var z = {}; Object.keys(w.dataset).forEach(function (o) { z[o] = w.dataset[o]; }); return z; })(w), click: function () { this.el.click(); return this; } } }), findData: function (name, val) { this.el = this.el.filter(function (po) { if (po.data[name] == val) { return po; } }); return this; }, click: function () { this.el.reverse().forEach(function (x) { x.el.click(); }) return this; } , focus: function () { this.el.reverse().forEach(function (x) { x.el.focus(); }) return this; } } }; const scrollIntoViewWithOffset = (selector, offset) => { window.scrollTo({ behavior: 'smooth', top: selector.getBoundingClientRect().top - document.body.getBoundingClientRect().top - offset, }) } window.mobileCheck = function () { let check = false; (function (a) { if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera); return check; }; Array.prototype.removeItemObject = function(a){ var t = this; var x = t.map(function(s){ delete s[a]; return s; }) return t; } Array.prototype.renameItemObject = function(a, b){ var t = this; var x = t.map(function(s){ s[b] = s[a]; return s; }) return t; } Array.prototype.log = function(){ var t = this; console.log(JSON.stringify(t)); return t; } const _ff = { select: function (a) { var ct = div().class('form-group roms').css('margin', '0'); var inpt = el('select').class('form-control form-s').name(a.name).id('s-' + a.name + Date.now()) .css('height', '38px'); if (a.readonly == true) { inpt.attr('readonly', 'true') .css({ background: '#2E7D32', color: '#fff' }); }; inpt.child( el('option').val('').html('Pilih Data') ); if (a.action != undefined) { inpt.load(a.action); }; a.data.forEach(function (dt) { inpt.child( el('option').val(dt.id).html(dt.id + '-' + dt.text) ); }); if (a.val != undefined) { inpt.addModule('val', a.val); }; inpt.load(function (s) { var id = s.el.id; $('#' + id).select2(); if (s.el.val != undefined) { $('#' + id).val(s.el.val).trigger('change'); }; // If readonly, also style select2 if (a.readonly == true) { setTimeout(function() { var sel2 = document.querySelector('#select2-' + id + '-container'); if(sel2) { sel2.parentElement.style.background = '#2E7D32'; sel2.parentElement.style.color = '#fff'; } }, 200); } }); ct.child( inpt ); return ct.get(); }, num: function (a) { var ct = div().class('form-group').css('margin', '0'); var inpt = el('input').type('text') .class('form-control form-s numbers').attr('num', true).name(a.name).id('s-' + a.name + Date.now()).hold('0').css({ textAlign: 'right', height: '38px' }); if (a.readonly == true) { inpt.attr('readonly', 'true') .css({ background: '#2E7D32', color: '#fff' }); }; if (a.val != undefined) { inpt.val(Number(a.val).currency(0)); } inpt.load(function (e) { e.el.addEventListener('keyup', function () { var c = this.value; var pis = c.length - 1; if (c[pis] == ".") { c = c.substr(0, pis) + ","; } c = c.replace(/\./g, ""); this.value = formatRupiah(c, ""); }, false); }); ct.child( inpt ); return ct.get(); }, text: function (a) { var ct = div().class('form-group').css('margin', '0'); var inpt = el('input').type('text') .class('form-control form-s').css({ textAlign: 'left !important', height: '38px' }).name(a.name).id('s-' + a.name + Date.now()).hold('keterangan...') if (a.readonly == true) { inpt.attr('readonly', 'true') .css({ background: '#2E7D32', color: '#fff' }); }; if (a.val != undefined) { inpt.val(a.val); }; ct.child( inpt ); return ct.get(); } }; Array.prototype.addItemObject = function(a,val){ let t = [].concat(this); let x = t.map(function(s){ if(Array.isArray(val)){ s[a] = val.map(function(c){ if( s[c] != undefined && s[c] != null ){ return s[c]; } return c; }).join(''); }else{ s[a] = val; } return s; }) return t; } const _App = (function(){ var o = {} o.QZprinter = function(a = false){ localStorage.setItem('active-print-direct', a) } o.qzStatus = function(){ return qz.websocket.isActive(); } o.posprint = function(a){ localStorage.setItem('print-pos', a); return this; } o.posprintget = function(a){ return localStorage.getItem('print-pos'); } o.MultiDB = function(query, callback){ if(Array.isArray(query)){ query = JSON.stringify(query); }; upload('{{PATH}}/db/api/multiple', '', 'qr.data', btoa(query), (a) => { }, (b) => { if(typeof callback === 'function'){ callback(); } }); } o.ArrayObjectToArray = function(a, n){ if(Array.isArray(a) && Array.isArray(n)){ return a.map(function(ax){ var t = []; n.forEach(function(g){ if(ax[g] != null || ax != undefined){ t.push(ax[g]); }else{ t.push(''); } }) return t; }) } return []; } o.pushTable = function(a,b, c){ if(window[a] != undefined && typeof window[a] === 'object'){ if(Array.isArray(b)){ window[a].clear(); b.forEach(function(ax, i){ if(Array.isArray(ax)){ var n = ax; if(Array.isArray(c)){ n = n.map(function(m, s){ if(c[s] != null && typeof c[s] === 'function'){ return c[s](m, n); } return m; }); }; window[a].row.add(n); }; }) window[a].draw(1); } } } o.clearTable = function(a){ if(window[a] != undefined && typeof window[a] === 'object'){ window[a].clear(); window[a].draw(1); } } return o; })(); const callUserFunc = function(a,par){ if(window[a+'_globals_func_dev'] != undefined && typeof window[a+'_globals_func_dev'] === 'function' ){ if(par === undefined){ par = []; } return window[a+'_globals_func_dev'](...par); }else{ if(Swal != undefined){ Swal('Warning', 'tidak dapat di prosess', 'warning'); }else{ alert('tidak dapat di prosses'); } } } const createUserFunc = function(a,func){ if(typeof func === 'function'){ window[a+'_globals_func_dev'] = func; }else{ if(Swal != undefined){ Swal('Warning', 'bukan function', 'warning'); }else{ alert('tidak dapat di prosses'); } } } createUserFunc('keterangan', function(a,b){ return a+' '+tanggal(b).sekarang2.split(' ').filter(function (o, i) { if (i > 0) { return o; } }).join(' '); }) Array.prototype.singleItem = function(a){ var f = this; if(f.length > 0){ if(f[0][a] != null){ return f[0][a]; } return ''; } return ''; } Array.prototype.ToUpdate = function (table = 'test', wht = 'kode') { var s = this; if (s.length > 0) { var y = Object.keys(s[0]); var x = ''; x += 'UPDATE '; x += table; x += ' aa , ( '; x += 'SELECT '; x += y.map(function (g) { return `a.${g}`; }); x += ' FROM ('; x += s.map(function (w) { var f = ` SELECT `; f += y.map(function (q) { return `"${w[q].toString().replace(/\"/g, "\\\"")}" \`${q}\``; }).join(","); return f; }).join("\n UNION ALL \n") x += ') a ) bb SET '; x += y.map(function(c){ return ` aa.${c} = bb.${c}` }).join(','); x += ' WHERE '; if (Array.isArray(wht)){ x += wht.map(function(whtx){ return ` aa.${whtx} = bb.${whtx} `; }).join(" AND "); }else{ x += ` aa.${wht} = bb.${wht} `; } return x; } else { return []; } }; window._insertAfter = function(newNode, existingNode) { existingNode.parentNode.insertBefore(newNode, existingNode.nextSibling); } window._insertBefore = function(newNode, existingNode) { existingNode.parentNode.insertBefore(newNode, existingNode); } function _parentForm(tag){ return globalThis[tag].parent.parentNode.parentNode; } Array.prototype.like = function (columnName, searchValues) { // Membuat salinan array untuk menghindari perubahan pada array asli var newArray = this.slice(); // Mencari indeks kolom berdasarkan nama kolom var columnIndex = Object.keys(newArray[0]).indexOf(columnName); // Jika nama kolom ditemukan if (columnIndex !== -1) { // Mencari data berdasarkan nilai pada kolom yang ditentukan var results = newArray.filter(function (item) { if (Array.isArray(searchValues)) { var f = searchValues.filter(function (x) { if (item[columnName].indexOf(x) != -1) { return item; } }); if (f.length > 0) { return item; } } else { if (item[columnName].indexOf(searchValues) != -1) { return item; } } }); return results; } else { // Jika nama kolom tidak ditemukan, kembalikan array kosong return []; } }; window.popupCenter = ({ url, title, w, h }) => { // Fixes dual-screen position Most browsers Firefox const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX; const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY; const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; const systemZoom = width / window.screen.availWidth; const left = (width - w) / 2 / systemZoom + dualScreenLeft const top = (height - h) / 2 / systemZoom + dualScreenTop const newWindow = window.open(url, title, ` scrollbars=yes, width=${w / systemZoom}, height=${h / systemZoom}, top=${top}, left=${left} ` ) if (window.focus) newWindow.focus(); } Object.defineProperty(String.prototype, 'capitalFirst', { value: function () { var temp = this; temp = (function qw(temp) { if (temp[0] == " ") { return qw(temp.slice(1)); } return temp; })(temp); var c = temp.charAt(0).toUpperCase() var d = temp.slice(1).toLowerCase() return c+d; }, enumerable: false }); Number.prototype.pembilang = function() { var s = this; var nilai = s.valueOf(); return (function pembilang(nilai) { nilai = Math.abs(nilai); var simpanNilaiBagi = 0; var huruf = ["", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas"]; var temp = ""; if (nilai < 12) { temp = " " + huruf[nilai]; } else if (nilai < 20) { temp = pembilang(nilai - 10) + " Belas"; } else if (nilai < 100) { simpanNilaiBagi = Math.floor(nilai / 10); temp = pembilang(simpanNilaiBagi) + " Puluh" + pembilang(nilai % 10); } else if (nilai < 200) { temp = " Seratus" + pembilang(nilai - 100); } else if (nilai < 1000) { simpanNilaiBagi = Math.floor(nilai / 100); temp = pembilang(simpanNilaiBagi) + " Ratus" + pembilang(nilai % 100); } else if (nilai < 2000) { temp = " Seribu" + pembilang(nilai - 1000); } else if (nilai < 1000000) { simpanNilaiBagi = Math.floor(nilai / 1000); temp = pembilang(simpanNilaiBagi) + " Ribu" + pembilang(nilai % 1000); } else if (nilai < 1000000000) { simpanNilaiBagi = Math.floor(nilai / 1000000); temp = pembilang(simpanNilaiBagi) + " Juta" + pembilang(nilai % 1000000); } else if (nilai < 1000000000000) { simpanNilaiBagi = Math.floor(nilai / 1000000000); temp = pembilang(nilai / 1000000000000) + " Triliun" + pembilang(nilai % 1000000000000); } return temp; })(nilai); }; Number.prototype.numToAlpabet = function () { let angka = this.valueOf(); if (angka <= 0) { return "Angka harus lebih besar dari 0"; } let result = ""; while (angka > 0) { const remainder = (angka - 1) % 26; result = String.fromCharCode(97 + remainder) + result; angka = Math.floor((angka - 1) / 26); } return result; }; Object.defineProperty(Number.prototype, "numToAlpabet", { writable: false }); Object.defineProperty(String.prototype, "hitungTanggal", { value: function (bulan) { // Validasi format tanggal if (!/^\d{4}-\d{2}$/.test(this)) { return "Format tanggal tidak valid"; } // Memisahkan tahun dan bulan dari string const [tahun, bulanStr] = this.split('-'); const bulanInt = parseInt(bulanStr, 10); if (isNaN(bulanInt)) { return "Bulan tidak valid"; } // Menghitung tahun dan bulan baru let newTahun = parseInt(tahun, 10); let newBulan = bulanInt + bulan; // Penanganan jika hasil bulan negatif while (newBulan <= 0) { newBulan += 12; newTahun--; } // Konversi bulan menjadi string dengan format "MM" newBulan = newBulan.toString().padStart(2, '0'); return `${newTahun}-${newBulan}`; }, writable: false, // Membuat metode tidak dapat diubah configurable: false, // Membuat metode tidak dapat dikonfigurasi ulang enumerable: false // Membuat metode tidak terdaftar dalam perulangan objek }); Object.defineProperty(String.prototype, 'toJson', { value: function () { try { return JSON.parse(this); } catch (error) { throw new Error('String is not valid JSON'); } }, configurable: false }); // export excel const tableToExcel = (function () { var uri = 'data:application/vnd.ms-excel;base64,' , template = '{table}
' , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) } , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) } return function (table, name, filename) { if (!table.nodeType) table = document.getElementById(table); let HTMLDataQ = Array.from(table.children).map(function (q) { let g = Array.from(q.children).map(function(e){ return `${e.innerHTML}`; }).join(''); return g; }).join(''); let HTMLDataH = Array.from(table.children).map(function (q) { let g = Array.from(q.children).map(function(e){ let gc = Array.from( e.children ) .map(function(o){ if(o.className === 'number'){ let h = o; h.innerHTML = h.innerHTML.number(); return h.outerHTML; }else{ return o.outerHTML } }).join(""); return `${gc}`; }).join(''); return g; }).join(''); var ctx = { worksheet: name || 'Worksheet', table: HTMLDataH } if(typeof saveAs === 'function'){ if(filename){ saveAs(uri + base64(format(template, ctx)), filename); }else{ saveAs(uri + base64(format(template, ctx)), 'nama'); } }else{ window.location.href = uri + base64( format(template, ctx) ) } } })(); const loaderCssCek = function(){ let s = Array.from(document.querySelectorAll('.css-loader')); if(s.length === 0){ cssLoader(); } } const loaderCssRemove = delay(function(){ let s = Array.from(document.querySelectorAll('.css-loader')); if(s.length > 0 ){ s.forEach(function(o){ o.remove(); }) } },300); const RP = new Intl.NumberFormat('idr', { style: 'currency', currency: 'IDR', }); const RUPIAH = function(a){ let [c,v] = RP.format(a).split("."); return c.replace(/IDR/gi, 'Rp').replace(/\,/gi, ".")+(v? ","+v:""); } const Confirm = function(a='',b='',c=null, d='warning'){ Swal({ title: a, text: b, type: d, showCancelButton: true, confirmButtonColor: '#DD6B55', confirmButtonText: 'Ya, Saya yakin!', cancelButtonText: "Tidak, Batalkan!", closeOnConfirm: false, closeOnCancel: false }, function (isConfirm) { if (isConfirm) { swal("Cancelled", "Your imaginary file is safe :)", "error"); } else { swal("Cancelled", "Your imaginary file is safe :)", "error"); e.preventDefault(); } }); setTimeout(() => { document.querySelector('.swal2-cancel').focus() }, 100); document.querySelector('.swal2-confirm').addEventListener('click', function () { typeof c === 'function' ? c():null; }, false); } // Inject global style for Select2 height fix newStyle(` .select2-container .select2-selection--single { height: 38px !important; min-height: 38px !important; padding: 0 !important; display: flex; align-items: center; } .select2-container--default .select2-selection--single .select2-selection__rendered { line-height: 38px !important; } .select2-container--default .select2-selection--single .select2-selection__arrow { height: 38px !important; } `);