zet-lib 1.0.48 → 1.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Util.js +869 -859
- package/lib/zRoute.js +94 -54
- package/package.json +3 -3
package/lib/zRoute.js
CHANGED
|
@@ -1078,7 +1078,7 @@ zRoute.excelQuery = async (req, res, MYMODEL) => {
|
|
|
1078
1078
|
let result = results[0]
|
|
1079
1079
|
body = result.filter
|
|
1080
1080
|
fields = body.fields.filter((item) => item != 'no' && item != 'actionColumn')
|
|
1081
|
-
select = Util.
|
|
1081
|
+
select = Util.selectParser(fields, MYMODEL)
|
|
1082
1082
|
if (zall) {
|
|
1083
1083
|
let difference = allfields.filter((x) => !fields.includes(x))
|
|
1084
1084
|
arr = [...fields, ...difference]
|
|
@@ -1115,7 +1115,7 @@ zRoute.excelQuery = async (req, res, MYMODEL) => {
|
|
|
1115
1115
|
rows = await connection.results(obj)
|
|
1116
1116
|
} else {
|
|
1117
1117
|
rows = await connection.results({
|
|
1118
|
-
select: Util.
|
|
1118
|
+
select: Util.selectParser(fields, MYMODEL),
|
|
1119
1119
|
table: MYMODEL.table,
|
|
1120
1120
|
limit: reqQuery.pageSize,
|
|
1121
1121
|
offset: parseInt(reqQuery.pageSize) - 1,
|
|
@@ -1524,7 +1524,7 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
|
|
|
1524
1524
|
const MYMODEL = objData.MYMODEL || {}
|
|
1525
1525
|
const fields = Object.prototype.hasOwnProperty.call(objData, 'fields') ? objData.fields : req.body.fields
|
|
1526
1526
|
const relations = await zRoute.relations(req, res, MYMODEL.table)
|
|
1527
|
-
const select = Object.prototype.hasOwnProperty.call(objData, 'select') ? objData.select : Util.
|
|
1527
|
+
const select = Object.prototype.hasOwnProperty.call(objData, 'select') ? objData.select : Util.selectParser(fields, MYMODEL)
|
|
1528
1528
|
const columns = Object.prototype.hasOwnProperty.call(objData, 'columns') ? objData.columns : body.columns
|
|
1529
1529
|
let whereArray = []
|
|
1530
1530
|
if (objData.hasOwnProperty('whereArray')) {
|
|
@@ -1604,7 +1604,7 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
|
|
|
1604
1604
|
const relations = await zRoute.relations(req, res, MYMODEL.table)
|
|
1605
1605
|
const body = req.body
|
|
1606
1606
|
const fields = body.fields
|
|
1607
|
-
const select = Util.
|
|
1607
|
+
const select = Util.selectParser(fields, MYMODEL)
|
|
1608
1608
|
let whereArray = []
|
|
1609
1609
|
const columns = body.columns
|
|
1610
1610
|
whereArray.push({
|
|
@@ -2738,32 +2738,14 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
|
|
|
2738
2738
|
let MODEL_TABLE = MYMODELS[MYMODEL.widgets[keys].table] || require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`)
|
|
2739
2739
|
//let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
|
|
2740
2740
|
//relations[key + "TABLE"]
|
|
2741
|
-
let MODEL_TABLE_RELATIONS = relations[keys + 'TABLE']
|
|
2741
|
+
let MODEL_TABLE_RELATIONS = relations && relations.hasOwnProperty(keys + 'TABLE') ? relations[keys + 'TABLE'] : {}
|
|
2742
2742
|
let zForm = zRoute.formField(req, res, MODEL_TABLE, MODEL_TABLE_RELATIONS)
|
|
2743
2743
|
zRoute.moduleLib(req, res, MODEL_TABLE, MODEL_TABLE_RELATIONS, zForms)
|
|
2744
2744
|
let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`
|
|
2745
|
-
let trtd = ''
|
|
2746
|
-
for (let key in relations[keys]) {
|
|
2747
|
-
obj = zForm.obj[key] || {}
|
|
2748
|
-
let name = MYMODEL.table + '[' + keys + '][${increment}][' + key + ']'
|
|
2749
|
-
obj.name = name
|
|
2750
|
-
//obj.class = MYMODEL.table + "_" + keys + "_" + key;
|
|
2751
|
-
obj.class = `${MYMODEL.table}_${keys}_${key} form-control`
|
|
2752
|
-
obj.id = key
|
|
2753
|
-
obj.options = {
|
|
2754
|
-
'data-name': key,
|
|
2755
|
-
'data-id': obj.class,
|
|
2756
|
-
}
|
|
2757
|
-
trtd += `<td class="td_${key}_${MYMODEL.widgets[keys].table}">${cForm.field(obj)}</td>`
|
|
2758
|
-
}
|
|
2759
|
-
|
|
2760
|
-
trtd += `<td style="vertical-align:top"><span class="icon-small icons-danger ${trash}" title="Delete"><img class="icons-bg-white griddelete icon-image" src="/assets/icons/trash-filled.svg"></span></td></tr>`
|
|
2761
2745
|
let subname = MYMODEL.table + '_' + keys
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
scriptForm +=
|
|
2765
|
-
scriptForm += trtd
|
|
2766
|
-
scriptForm += '`}'
|
|
2746
|
+
let relationsWithKeys = relations ? relations[keys] : {}
|
|
2747
|
+
|
|
2748
|
+
scriptForm += `var append${keys} = (increment, callback) => { buildform(increment,'${MYMODEL.table}','${keys}','${JSON.stringify(relationsWithKeys)}', (data) => callback(data)) } `
|
|
2767
2749
|
scriptForm += Util.newLine
|
|
2768
2750
|
scriptForm += `var append${keys}Max = $('tbody#body-${keys}>tr').length;${Util.newLine}`
|
|
2769
2751
|
scriptForm += `function ${keys}Handler(){
|
|
@@ -2804,36 +2786,38 @@ $("#body-${keys}>tr").each(function (index, tr) {
|
|
|
2804
2786
|
|
|
2805
2787
|
scriptForm += ` $(function () {
|
|
2806
2788
|
$('#add${keys}').on('click',function(){
|
|
2807
|
-
$
|
|
2789
|
+
append${keys}(append${keys}Max, (data) => $('#body-${keys}').append(data));
|
|
2808
2790
|
append${keys}Max++;
|
|
2809
2791
|
${keys}Handler();
|
|
2810
2792
|
});
|
|
2811
2793
|
var ${keys} = $("#body-${keys}").data("value") ? $("#body-${keys}").data("value") : [];
|
|
2812
2794
|
${keys}.forEach(function (myobj, index) {
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
$(".${subname}_" + key).eq(index).
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2795
|
+
append${keys}(index, (data) => {
|
|
2796
|
+
$("#body-${keys}").append(data);
|
|
2797
|
+
${keys}Handler();
|
|
2798
|
+
for(var key in myobj){
|
|
2799
|
+
if($(".${subname}_" + key).eq(index).attr("type") == "checkbox" && myobj[key] == 1){
|
|
2800
|
+
$(".${subname}_" + key).eq(index).prop("checked", true);
|
|
2801
|
+
$(".${subname}_" + key).eq(index).val(myobj[key] ? myobj[key] : '');
|
|
2802
|
+
} else if($(".${subname}_" + key).eq(index).attr("type") == "file"){
|
|
2803
|
+
var myimg = myobj[key] ? myobj[key] : '';
|
|
2804
|
+
var pathName = "/uploads/${MYMODEL.table}/${keys}/";
|
|
2805
|
+
if(myimg) {
|
|
2806
|
+
var filename = filenamex = pathName+myimg;
|
|
2807
|
+
if (!myimg.match(/\\.(jpg|jpeg|png|gif|svg|jiff)$/i)) {
|
|
2808
|
+
filename = "/img/file.png";
|
|
2809
|
+
}
|
|
2810
|
+
$(".${subname}_" + key).eq(index).closest("TD").find("img").attr("src",filename).addClass("boxy");
|
|
2811
|
+
$(".${subname}_" + key).eq(index).closest("TD").append('<a href="'+filenamex+'" target="_blank" style="font-size: 12px">'+myimg+'</a>');
|
|
2826
2812
|
}
|
|
2827
|
-
|
|
2828
|
-
$(".${subname}_" + key).eq(index).
|
|
2813
|
+
} else {
|
|
2814
|
+
$(".${subname}_" + key).eq(index).val(myobj[key] ? myobj[key] : '');
|
|
2829
2815
|
}
|
|
2830
|
-
} else {
|
|
2831
|
-
$(".${subname}_" + key).eq(index).val(myobj[key] ? myobj[key] : '');
|
|
2832
2816
|
}
|
|
2833
|
-
|
|
2834
|
-
}
|
|
2835
|
-
append${keys}Max = index + 1;
|
|
2817
|
+
append${keys}Max = index + 1;
|
|
2818
|
+
});
|
|
2836
2819
|
});
|
|
2820
|
+
|
|
2837
2821
|
});${Util.newLine}`
|
|
2838
2822
|
break
|
|
2839
2823
|
|
|
@@ -3052,8 +3036,8 @@ zRoute.import = async (req, res, MYMODEL) => {
|
|
|
3052
3036
|
}
|
|
3053
3037
|
//convert to table header
|
|
3054
3038
|
let hd = '<tr>'
|
|
3039
|
+
let i = 0
|
|
3055
3040
|
for (let prop in result[1]) {
|
|
3056
|
-
let i = 0
|
|
3057
3041
|
keys[prop] = result[1][prop]
|
|
3058
3042
|
hd += `<th>${result[0][prop]}</th>`
|
|
3059
3043
|
headers.push({ i: i, prop: prop, value: result[0][prop] })
|
|
@@ -3061,20 +3045,38 @@ zRoute.import = async (req, res, MYMODEL) => {
|
|
|
3061
3045
|
}
|
|
3062
3046
|
hd += `<th>${LANGUAGE['noted']}</th>`
|
|
3063
3047
|
hd += `</tr>`
|
|
3048
|
+
|
|
3049
|
+
let isCut = false;
|
|
3050
|
+
if(i > 20 && result.length > 2000) {
|
|
3051
|
+
io.to(room).emit('message', 'short display data!');
|
|
3052
|
+
isCut = true;
|
|
3053
|
+
}
|
|
3064
3054
|
//convert to table header
|
|
3065
3055
|
io.to(room).emit('import', hd)
|
|
3066
|
-
let isInsert = true
|
|
3067
|
-
|
|
3056
|
+
let isInsert = true;
|
|
3057
|
+
|
|
3068
3058
|
for (let i = 3; i < result.length; i++) {
|
|
3059
|
+
hd = '';
|
|
3060
|
+
hd += `<tr>`
|
|
3069
3061
|
const data = {}
|
|
3070
3062
|
hd += `${i - 2}`
|
|
3063
|
+
//column cut tidak penting hanya jika kebanyakan dipotong
|
|
3064
|
+
let columnCut = 0;
|
|
3071
3065
|
for (var prop in keys) {
|
|
3072
3066
|
let value = result[i][prop]
|
|
3073
3067
|
if (value) {
|
|
3074
3068
|
data[keys[prop]] = value
|
|
3075
3069
|
}
|
|
3076
|
-
|
|
3070
|
+
if(isCut) {
|
|
3071
|
+
console.log('cut and column cut')
|
|
3072
|
+
if(columnCut < 10) {
|
|
3073
|
+
hd += `<td>${value || ''}</td>`
|
|
3074
|
+
}
|
|
3075
|
+
} else {
|
|
3076
|
+
hd += `<td>${value || ''}</td>`
|
|
3077
|
+
}
|
|
3077
3078
|
if (keys[prop] == 'id') isInsert = false
|
|
3079
|
+
columnCut++;
|
|
3078
3080
|
}
|
|
3079
3081
|
try {
|
|
3080
3082
|
if (isInsert) {
|
|
@@ -3097,13 +3099,14 @@ zRoute.import = async (req, res, MYMODEL) => {
|
|
|
3097
3099
|
}
|
|
3098
3100
|
hd += `<td class='text text-success'>${LANGUAGE['success']}</td>`
|
|
3099
3101
|
} catch (err) {
|
|
3100
|
-
hd += `<td class='text text-danger'>${err
|
|
3102
|
+
hd += `<td class='text text-danger'>${err+''}</td>`
|
|
3103
|
+
io.to(room).emit('error', err + '' + ' ')
|
|
3101
3104
|
}
|
|
3102
3105
|
hd += '</tr>'
|
|
3103
3106
|
io.to(room).emit('import', hd)
|
|
3104
3107
|
}
|
|
3105
|
-
|
|
3106
|
-
|
|
3108
|
+
|
|
3109
|
+
|
|
3107
3110
|
fs.removeSync(filename)
|
|
3108
3111
|
//cache for uploading excel
|
|
3109
3112
|
zRoute.modelsCacheRenew(MYMODEL.table, res.locals.companyId)
|
|
@@ -3111,6 +3114,43 @@ zRoute.import = async (req, res, MYMODEL) => {
|
|
|
3111
3114
|
res.json(json)
|
|
3112
3115
|
}
|
|
3113
3116
|
|
|
3117
|
+
/*
|
|
3118
|
+
This is post data return form with tr td htmlform
|
|
3119
|
+
*/
|
|
3120
|
+
zRoute.buildForm = async (req, res) => {
|
|
3121
|
+
const MYMODELS = myCache.get('MYMODELS')
|
|
3122
|
+
let increment = req.body.increment
|
|
3123
|
+
let table = req.body.table
|
|
3124
|
+
let keys = req.body.keys
|
|
3125
|
+
let relations = JSON.parse(req.body.relations)
|
|
3126
|
+
let MYMODEL = MYMODELS[table] || require(`${dirRoot}/models/${table}`)
|
|
3127
|
+
let MODEL_TABLE = MYMODELS[MYMODEL.widgets[keys].table] || require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`)
|
|
3128
|
+
let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table)
|
|
3129
|
+
let dataName = `${MYMODEL.table}[${keys}]`
|
|
3130
|
+
|
|
3131
|
+
let forms = zRoute.formField(req, res, MODEL_TABLE, MODEL_TABLE_RELATIONS)
|
|
3132
|
+
zRoute.moduleLib(req, res, MODEL_TABLE, MODEL_TABLE_RELATIONS, forms)
|
|
3133
|
+
let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`
|
|
3134
|
+
let trtd = ''
|
|
3135
|
+
for (let key in relations) {
|
|
3136
|
+
let obj = forms.obj[key] || {}
|
|
3137
|
+
let name = `${table}[${keys}][${increment}][${key}]`
|
|
3138
|
+
obj.name = name
|
|
3139
|
+
obj.class = `${MYMODEL.table}_${keys}_${key} form-control`
|
|
3140
|
+
obj.id = key
|
|
3141
|
+
obj.options = {
|
|
3142
|
+
'data-name': key,
|
|
3143
|
+
'data-id': obj.class,
|
|
3144
|
+
}
|
|
3145
|
+
trtd += `<td class="td_${key}_${MYMODEL.widgets[keys].table}">${cForm.field(obj)}</td>`
|
|
3146
|
+
}
|
|
3147
|
+
trtd += `<td style="vertical-align:top"><span class="icon-small icons-danger ${trash}" onclick="$(this).closest('tr').remove()" title="Delete"><img class="icons-bg-white griddelete icon-image" src="/assets/icons/trash-filled.svg"></span></td></tr>`
|
|
3148
|
+
let tabledata = `<tr data-id="${increment}" data-name="${dataName}" >`
|
|
3149
|
+
tabledata += trtd
|
|
3150
|
+
|
|
3151
|
+
res.send(tabledata)
|
|
3152
|
+
}
|
|
3153
|
+
|
|
3114
3154
|
zRoute.buildFileModel = (json, index = 0) => {
|
|
3115
3155
|
//let text = `module.exports = { ${Util.newLine}`;
|
|
3116
3156
|
let text = ''
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zet-lib",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.51",
|
|
4
4
|
"description": "zet is a library that part of zet generator.",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=18"
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"homepage": "https://github.com/sintret/zet",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "https://github.com/sintret/zet"
|
|
11
|
+
"url": "git+https://github.com/sintret/zet.git"
|
|
12
12
|
},
|
|
13
13
|
"keywords": [
|
|
14
14
|
"expressjs"
|
|
@@ -49,4 +49,4 @@
|
|
|
49
49
|
"uuid": "^9.0.0",
|
|
50
50
|
"xlsx": "^0.18.5"
|
|
51
51
|
}
|
|
52
|
-
}
|
|
52
|
+
}
|