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.
Files changed (3) hide show
  1. package/lib/Util.js +869 -859
  2. package/lib/zRoute.js +94 -54
  3. 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.selectMysql(fields)
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.selectMysql(fields),
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.selectMysql(fields, relations)
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.selectMysql(fields, relations)
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
- scriptForm += `$("table").on("click", ".${trash}", function () {$(this).closest('tr').remove();});`
2763
- scriptForm += Util.newLine
2764
- scriptForm += 'var append' + keys + ' = function (increment) {return `<tr data-id="${increment}" data-name="' + MYMODEL.table + '[' + keys + ']">'
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
- $('#body-${keys}').append(append${keys}(append${keys}Max));
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
- $("#body-${keys}").append(append${keys}(index));
2814
- ${keys}Handler();
2815
- for(var key in myobj){
2816
- if($(".${subname}_" + key).eq(index).attr("type") == "checkbox" && myobj[key] == 1){
2817
- $(".${subname}_" + key).eq(index).prop("checked", true);
2818
- $(".${subname}_" + key).eq(index).val(myobj[key] ? myobj[key] : '');
2819
- } else if($(".${subname}_" + key).eq(index).attr("type") == "file"){
2820
- var myimg = myobj[key] ? myobj[key] : '';
2821
- var pathName = "/uploads/${MYMODEL.table}/${keys}/";
2822
- if(myimg) {
2823
- var filename = filenamex = pathName+myimg;
2824
- if (!myimg.match(/\\.(jpg|jpeg|png|gif|svg|jiff)$/i)) {
2825
- filename = "/img/file.png";
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
- $(".${subname}_" + key).eq(index).closest("TD").find("img").attr("src",filename).addClass("boxy");
2828
- $(".${subname}_" + key).eq(index).closest("TD").append('<a href="'+filenamex+'" target="_blank" style="font-size: 12px">'+myimg+'</a>');
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
- hd += `<tr>`
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
- hd += `<td>${value}</td>`
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.toString()}</td>`
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
- hd += ''
3106
- io.to(room).emit('import', hd)
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.48",
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
+ }