zet-lib 1.5.24 → 1.5.26

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/zRoute.js CHANGED
@@ -196,8 +196,8 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
196
196
  let cleaning;
197
197
  if (Array.isArray(post[routeName][key])) {
198
198
  cleaning = post[routeName][key]
199
- ? post[routeName][key].filter((item) => item)
200
- : null;
199
+ ? post[routeName][key].filter((item) => item)
200
+ : null;
201
201
  }
202
202
  post[routeName][key] = cleaning ? JSON.stringify(cleaning) : null;
203
203
  break;
@@ -206,8 +206,8 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
206
206
  let cleaning2;
207
207
  if (Array.isArray(post[routeName][key])) {
208
208
  cleaning2 = post[routeName][key]
209
- ? post[routeName][key].filter((item) => item)
210
- : null;
209
+ ? post[routeName][key].filter((item) => item)
210
+ : null;
211
211
  }
212
212
  post[routeName][key] = cleaning2 ? JSON.stringify(cleaning2) : null;
213
213
  break;
@@ -242,29 +242,29 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
242
242
  let cleaningdm;
243
243
  if (Array.isArray(item[k])) {
244
244
  cleaningdm = item[k]
245
- ? item[k].filter((myitem) => myitem)
246
- : null;
245
+ ? item[k].filter((myitem) => myitem)
246
+ : null;
247
247
  }
248
248
  item[k] = cleaningdm;
249
249
  }
250
250
  if (
251
- widgetTables[k].name == "file" ||
252
- widgetTables[k].name == "image"
251
+ widgetTables[k].name == "file" ||
252
+ widgetTables[k].name == "image"
253
253
  ) {
254
254
  var fileImageName = `${MYMODEL.table}[${key}][${i}][${k}]`;
255
255
  if (reqfiles && Object.hasOwn(reqfiles, fileImageName)) {
256
256
  var kname =
257
- Util.generateUnique(5) +
258
- "_" +
259
- req.files[fileImageName].name;
257
+ Util.generateUnique(5) +
258
+ "_" +
259
+ req.files[fileImageName].name;
260
260
  item[k] = kname;
261
261
  req.files[fileImageName].mv(
262
- path_tmp + key + "/" + kname,
263
- function (err) {
264
- if (err) {
265
- return res.status(500).send(err);
262
+ path_tmp + key + "/" + kname,
263
+ function (err) {
264
+ if (err) {
265
+ return res.status(500).send(err);
266
+ }
266
267
  }
267
- }
268
268
  );
269
269
  }
270
270
  }
@@ -284,8 +284,8 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
284
284
  let cleaningdm;
285
285
  if (Array.isArray(item[k])) {
286
286
  cleaningdm = item[k]
287
- ? item[k].filter((myitem) => myitem)
288
- : null;
287
+ ? item[k].filter((myitem) => myitem)
288
+ : null;
289
289
  }
290
290
  item[k] = cleaningdm;
291
291
  }
@@ -382,8 +382,8 @@ zRoute.attributeData = async (res, MYMODEL, obj) => {
382
382
  if (zgrid.length) {
383
383
  visibles = zgrid[0].visibles ? zgrid[0].visibles : MYMODEL.grids.visibles;
384
384
  invisibles = zgrid[0].invisibles
385
- ? zgrid[0].invisibles
386
- : MYMODEL.grids.invisibles;
385
+ ? zgrid[0].invisibles
386
+ : MYMODEL.grids.invisibles;
387
387
  filter = zgrid[0].filter ? zgrid[0].filter : null;
388
388
  type = zgrid[0].type;
389
389
  } else {
@@ -445,8 +445,8 @@ zRoute.ajax = async (req, res) => {
445
445
  }
446
446
  if (!type) {
447
447
  io.to(res.locals.token).emit(
448
- "error",
449
- "type must be set, select insert update or delete"
448
+ "error",
449
+ "type must be set, select insert update or delete"
450
450
  );
451
451
  return false;
452
452
  }
@@ -499,8 +499,8 @@ zRoute.validator = function (datas, MYMODEL) {
499
499
  status = 0;
500
500
  field = item;
501
501
  message = Util.jsonError(
502
- item,
503
- labels[item] + " " + LANGUAGE.form_not_empty
502
+ item,
503
+ labels[item] + " " + LANGUAGE.form_not_empty
504
504
  );
505
505
  }
506
506
  }
@@ -577,9 +577,9 @@ zRoute.relationTable = async (req, res, table, visiblesColumns = []) => {
577
577
  table: widget.table,
578
578
  where: { company_id: company_id },
579
579
  order_by:
580
- widget.hasOwnProperty("order_by") && widget.order_by
581
- ? [`${widget.order_by}`]
582
- : ["zname asc"],
580
+ widget.hasOwnProperty("order_by") && widget.order_by
581
+ ? [`${widget.order_by}`]
582
+ : ["zname asc"],
583
583
  };
584
584
  if (Util.in_array(widget.table, zRoute.tableHasNoCompanyId)) {
585
585
  delete obj.where;
@@ -593,9 +593,9 @@ zRoute.relationTable = async (req, res, table, visiblesColumns = []) => {
593
593
  }
594
594
  relations[key] = [Util.arrayUnShift(["id", "zname"]), ...results];
595
595
  relations[keyObject] = Util.arrayWithObject(
596
- relations[key],
597
- "id",
598
- "zname"
596
+ relations[key],
597
+ "id",
598
+ "zname"
599
599
  );
600
600
  } else if (widgetName == "table") {
601
601
  let MODEL_TABLE = MYMODELS[widget.table];
@@ -634,9 +634,9 @@ zRoute.relationTable = async (req, res, table, visiblesColumns = []) => {
634
634
  relations[keyRow] = await zRoute.relations(req, res, widget.table);
635
635
  relations[key + "Table"] = widget.table;
636
636
  relations[key + "TABLE"] = await zRoute.relations(
637
- req,
638
- res,
639
- MODEL_TABLE.table
637
+ req,
638
+ res,
639
+ MODEL_TABLE.table
640
640
  );
641
641
  } else if (widgetName == "multi_line_editor") {
642
642
  let MODEL_TABLE = MYMODELS[widget.table];
@@ -667,9 +667,9 @@ zRoute.relationTable = async (req, res, table, visiblesColumns = []) => {
667
667
  table: widget.table,
668
668
  where: { company_id: company_id },
669
669
  order_by:
670
- widget.hasOwnProperty("order_by") && widget.order_by
671
- ? [`${widget.order_by}`]
672
- : ["zname asc"],
670
+ widget.hasOwnProperty("order_by") && widget.order_by
671
+ ? [`${widget.order_by}`]
672
+ : ["zname asc"],
673
673
  };
674
674
  if (Util.in_array(widget.table, zRoute.tableHasNoCompanyId)) {
675
675
  delete obj.where;
@@ -689,9 +689,9 @@ zRoute.relationTable = async (req, res, table, visiblesColumns = []) => {
689
689
  relations[key] = [emptyArray, ...results];
690
690
  relations[keyFields] = widget.fields;
691
691
  relations[keyObject] = Util.arrayWithObject(
692
- relations[key],
693
- "id",
694
- "zname"
692
+ relations[key],
693
+ "id",
694
+ "zname"
695
695
  );
696
696
  if (widget.isAttributes) {
697
697
  zattributes[key] = Util.arrayToObject(results, "id");
@@ -717,41 +717,41 @@ zRoute.relationTable = async (req, res, table, visiblesColumns = []) => {
717
717
  relations[key] = [Util.arrayUnShift(["id", "zname"]), ...results];
718
718
  relations[keyFields] = widget.fields;
719
719
  relations[keyObject] = Util.arrayWithObject(
720
- relations[key],
721
- "id",
722
- "zname"
720
+ relations[key],
721
+ "id",
722
+ "zname"
723
723
  );
724
724
  } else if (widgetName == "switch") {
725
725
 
726
- /* else if (widgetName == "typeahead") {
727
- const cacheKey = `${widget.table}_${MYMODEL.table}___${key}_${company_id}`;
728
- let results;
729
- if (myCache.has(cacheKey)) {
730
- results = myCache.get(cacheKey);
731
- } else {
732
- let select = widget.fields.join(",") + " as zname ";
733
- let obj = {
734
- select: select,
735
- table: widget.table,
736
- where: { company_id: company_id },
737
- order_by:
738
- widget.hasOwnProperty("order_by") && widget.order_by
739
- ? [`${widget.order_by}`]
740
- : ["zname asc"],
741
- };
742
- if (Util.in_array(widget.table, zRoute.tableHasNoCompanyId)) {
743
- delete obj.where;
726
+ /* else if (widgetName == "typeahead") {
727
+ const cacheKey = `${widget.table}_${MYMODEL.table}___${key}_${company_id}`;
728
+ let results;
729
+ if (myCache.has(cacheKey)) {
730
+ results = myCache.get(cacheKey);
731
+ } else {
732
+ let select = widget.fields.join(",") + " as zname ";
733
+ let obj = {
734
+ select: select,
735
+ table: widget.table,
736
+ where: { company_id: company_id },
737
+ order_by:
738
+ widget.hasOwnProperty("order_by") && widget.order_by
739
+ ? [`${widget.order_by}`]
740
+ : ["zname asc"],
741
+ };
742
+ if (Util.in_array(widget.table, zRoute.tableHasNoCompanyId)) {
743
+ delete obj.where;
744
+ }
745
+ results = await connection.results(obj);
744
746
  }
745
- results = await connection.results(obj);
746
- }
747
- relations[key] = [Util.arrayUnShift(["id", "zname"]), ...results];
748
- relations[keyObject] = Util.arrayWithObject(
749
- relations[key],
750
- "id",
751
- "zname"
752
- );
753
- relations[keyFields] = widget.fields;
754
- } */
747
+ relations[key] = [Util.arrayUnShift(["id", "zname"]), ...results];
748
+ relations[keyObject] = Util.arrayWithObject(
749
+ relations[key],
750
+ "id",
751
+ "zname"
752
+ );
753
+ relations[keyFields] = widget.fields;
754
+ } */
755
755
  relations[key] = Util.modulesSwitch(widget.fields);
756
756
  relations[keyFields] = widget.fields;
757
757
  } else if (widgetName == "virtual") {
@@ -782,9 +782,9 @@ zRoute.relationTable = async (req, res, table, visiblesColumns = []) => {
782
782
  table: widget.table,
783
783
  where: wheredragdrop,
784
784
  order_by:
785
- widget.hasOwnProperty("order_by") && widget.order_by
786
- ? [`${widget.order_by}`]
787
- : ["zname asc"],
785
+ widget.hasOwnProperty("order_by") && widget.order_by
786
+ ? [`${widget.order_by}`]
787
+ : ["zname asc"],
788
788
  };
789
789
  if (Util.in_array(widget.table, zRoute.tableHasNoCompanyId)) {
790
790
  delete obj.where;
@@ -793,9 +793,9 @@ zRoute.relationTable = async (req, res, table, visiblesColumns = []) => {
793
793
  }
794
794
  relations[key] = results;
795
795
  relations[keyObject] = Util.arrayWithObject(
796
- relations[key],
797
- "id",
798
- "zname"
796
+ relations[key],
797
+ "id",
798
+ "zname"
799
799
  );
800
800
  }
801
801
  }
@@ -884,10 +884,10 @@ zRoute.moduleLibGrid = (req, res, MYMODEL) => {
884
884
  let end = "";
885
885
  for (key of autompletes) {
886
886
  let typeaheadObj = moduleLib.typeahead(
887
- req,
888
- res,
889
- MYMODEL.table,
890
- `#${key}Typeahead`
887
+ req,
888
+ res,
889
+ MYMODEL.table,
890
+ `#${key}Typeahead`
891
891
  );
892
892
  scriptForm += typeaheadObj.script;
893
893
  head = typeaheadObj.head;
@@ -933,13 +933,13 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
933
933
  if (key == "id") {
934
934
  types[key] = "input";
935
935
  dataTable[
936
- key
937
- ] = `<input type="number" class="search" placeholder="${fields[key].title}" value="${value}" id="data_table_${key}" >`;
936
+ key
937
+ ] = `<input type="number" class="search" placeholder="${fields[key].title}" value="${value}" id="data_table_${key}" >`;
938
938
  } else if (key == "no") {
939
939
  types[key] = "input";
940
940
  dataTable[
941
- key
942
- ] = `<input type="checkbox" class="form-check-input form-check-grid" id="ck_all" >`;
941
+ key
942
+ ] = `<input type="checkbox" class="form-check-input form-check-grid" id="ck_all" >`;
943
943
  } else {
944
944
  if (widgets.hasOwnProperty(key)) {
945
945
  const widgetName = widgets[key].name;
@@ -948,27 +948,27 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
948
948
  options = relations[key].reduce((result, item) => {
949
949
  var selected = value === item.id ? " selected " : "";
950
950
  return (
951
- result +
952
- `<option value="${item.id}" ${selected}>${item.name}</option>`
951
+ result +
952
+ `<option value="${item.id}" ${selected}>${item.name}</option>`
953
953
  );
954
954
  }, "");
955
955
  dataTable[
956
- key
957
- ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
956
+ key
957
+ ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
958
958
  types[key] = "select";
959
959
  break;
960
960
 
961
961
  case "color":
962
962
  dataTable[
963
- key
964
- ] = `<input type="color" class="form-control form-control-color search" value="${value}" id="data_table_${key}" >`;
963
+ key
964
+ ] = `<input type="color" class="form-control form-control-color search" value="${value}" id="data_table_${key}" >`;
965
965
  types[key] = "input";
966
966
  break;
967
967
 
968
968
  case "datepicker":
969
969
  dataTable[
970
- key
971
- ] = `<input type="text" class="form-control search" value="${value}" id="data_table_${key}" >`;
970
+ key
971
+ ] = `<input type="text" class="form-control search" value="${value}" id="data_table_${key}" >`;
972
972
  types[key] = "input";
973
973
  break;
974
974
 
@@ -976,13 +976,13 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
976
976
  options = relations[key].reduce((result, item) => {
977
977
  var selected = value === item.id ? " selected " : "";
978
978
  return (
979
- result +
980
- `<option value="${item.id}" ${selected}>${item.zname}</option>`
979
+ result +
980
+ `<option value="${item.id}" ${selected}>${item.zname}</option>`
981
981
  );
982
982
  }, "");
983
983
  dataTable[
984
- key
985
- ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
984
+ key
985
+ ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
986
986
  types[key] = "select";
987
987
  break;
988
988
 
@@ -990,12 +990,12 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
990
990
  options = MYMODEL.widgets[key].fields.reduce((result, item) => {
991
991
  var selected = value == item ? " selected " : "";
992
992
  return (
993
- result + `<option value="${item}" ${selected} >${item}</option>`
993
+ result + `<option value="${item}" ${selected} >${item}</option>`
994
994
  );
995
995
  }, "");
996
996
  dataTable[
997
- key
998
- ] = `<select id="data_table_${key}" class="form-control form-select search"><option value=""></option>${options}</select>`;
997
+ key
998
+ ] = `<select id="data_table_${key}" class="form-control form-select search"><option value=""></option>${options}</select>`;
999
999
  types[key] = "select";
1000
1000
  break;
1001
1001
 
@@ -1003,13 +1003,13 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
1003
1003
  options = relations[key].reduce((result, item) => {
1004
1004
  var selected = value == item.id ? " selected " : "";
1005
1005
  return (
1006
- result +
1007
- `<option value="${item.id}" ${selected} >${item.zname}</option>`
1006
+ result +
1007
+ `<option value="${item.id}" ${selected} >${item.zname}</option>`
1008
1008
  );
1009
1009
  }, "");
1010
1010
  dataTable[
1011
- key
1012
- ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
1011
+ key
1012
+ ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
1013
1013
  types[key] = "select";
1014
1014
  break;
1015
1015
 
@@ -1017,13 +1017,13 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
1017
1017
  options = relations[key].reduce((result, item) => {
1018
1018
  var selected = value == item.id ? " selected " : "";
1019
1019
  return (
1020
- result +
1021
- `<option value="${item.id}" ${selected} >${item.zname}</option>`
1020
+ result +
1021
+ `<option value="${item.id}" ${selected} >${item.zname}</option>`
1022
1022
  );
1023
1023
  }, "");
1024
1024
  dataTable[
1025
- key
1026
- ] = `<select id="data_table_${key}" class="form-control form-select search"><option value=""></option>${options}</select>`;
1025
+ key
1026
+ ] = `<select id="data_table_${key}" class="form-control form-select search"><option value=""></option>${options}</select>`;
1027
1027
  types[key] = "select";
1028
1028
  break;
1029
1029
 
@@ -1031,13 +1031,13 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
1031
1031
  options = relations[key].reduce((result, item) => {
1032
1032
  var selected = value == item.id ? " selected " : "";
1033
1033
  return (
1034
- result +
1035
- `<option value="${item.id}" ${selected}>${item.zname}</option>`
1034
+ result +
1035
+ `<option value="${item.id}" ${selected}>${item.zname}</option>`
1036
1036
  );
1037
1037
  }, "");
1038
1038
  dataTable[
1039
- key
1040
- ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
1039
+ key
1040
+ ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
1041
1041
  types[key] = "select";
1042
1042
  break;
1043
1043
 
@@ -1054,8 +1054,8 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
1054
1054
  options += `<option value="${k}" ${selected}>${relations[key][k]}</option>`;
1055
1055
  }
1056
1056
  dataTable[
1057
- key
1058
- ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
1057
+ key
1058
+ ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
1059
1059
  types[key] = "select";
1060
1060
  break;
1061
1061
 
@@ -1074,8 +1074,8 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
1074
1074
  }
1075
1075
  }
1076
1076
  dataTable[
1077
- key
1078
- ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
1077
+ key
1078
+ ] = `<select id="data_table_${key}" class="form-control form-select search" >${options}</select>`;
1079
1079
  types[key] = "select";
1080
1080
  break;
1081
1081
 
@@ -1092,29 +1092,29 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
1092
1092
 
1093
1093
  case "number":
1094
1094
  dataTable[
1095
- key
1096
- ] = `<input type="text" class="form-control search" value="${value}" id="data_table_${key}" >`;
1095
+ key
1096
+ ] = `<input type="text" class="form-control search" value="${value}" id="data_table_${key}" >`;
1097
1097
  types[key] = "input";
1098
1098
  break;
1099
1099
 
1100
1100
  case "integer":
1101
1101
  dataTable[
1102
- key
1103
- ] = `<input type="number" class="form-control search" value="${value}" id="data_table_${key}" >`;
1102
+ key
1103
+ ] = `<input type="number" class="form-control search" value="${value}" id="data_table_${key}" >`;
1104
1104
  types[key] = "input";
1105
1105
  break;
1106
1106
 
1107
1107
  case "table":
1108
1108
  dataTable[
1109
- key
1110
- ] = `<input type="text" class="form-control search" value="${value}" id="data_table_${key}" >`;
1109
+ key
1110
+ ] = `<input type="text" class="form-control search" value="${value}" id="data_table_${key}" >`;
1111
1111
  types[key] = "input";
1112
1112
  break;
1113
1113
 
1114
- /*case "json" :
1115
- dataTable[key] = `<input type="number" class="form-control form-control-sm" value="${value}" id="data_table_${key}" >`;
1116
- types[key] = 'input';
1117
- break;*/
1114
+ /*case "json" :
1115
+ dataTable[key] = `<input type="number" class="form-control form-control-sm" value="${value}" id="data_table_${key}" >`;
1116
+ types[key] = 'input';
1117
+ break;*/
1118
1118
 
1119
1119
  case "virtual":
1120
1120
  dataTable[key] = ``;
@@ -1122,8 +1122,8 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
1122
1122
 
1123
1123
  default:
1124
1124
  dataTable[
1125
- key
1126
- ] = `<input type="text" class="form-control search" value="${value}" id="data_table_${key}" >`;
1125
+ key
1126
+ ] = `<input type="text" class="form-control search" value="${value}" id="data_table_${key}" >`;
1127
1127
  types[key] = "input";
1128
1128
  break;
1129
1129
  }
@@ -1152,27 +1152,43 @@ zRoute.dataTableFilter = (MYMODEL, relations, filter) => {
1152
1152
  };
1153
1153
 
1154
1154
  zRoute.approval_history_data = (arr = []) => {
1155
- let myvalue = "";
1156
- let APPROVAL_LEVELS = myCache.get("APPROVAL_LEVELS");
1157
- let USERS = Util.arrayToObject(myCache.get("zuser_created_by_1"), "id");
1158
- myvalue = "";
1159
- if (arr && arr.length > 0) {
1160
- arr.map((item) => {
1161
- myvalue += `[${APPROVAL_LEVELS[item.status].name} By:${
1162
- USERS[item.user_id].zname
1163
- }(${item.created_at}) (${item.text})] `;
1164
- });
1155
+ try {
1156
+ let myvalue = "";
1157
+ let APPROVAL_LEVELS = myCache.get("APPROVAL_LEVELS");
1158
+ let USERS = Util.arrayToObject(myCache.get("zuser_created_by_1"), "id");
1159
+ myvalue = "";
1160
+ if (arr && arr.length > 0) {
1161
+ arr = arr.reverse();
1162
+ arr.map((item) => {
1163
+ let statusName = ' '
1164
+ if (item.status == 6) {
1165
+ statusName = "Comment"
1166
+ } else if (item.status == 4) {
1167
+ statusName = "Reject"
1168
+ } else if (item.status == 3) {
1169
+ statusName = "Approve"
1170
+ } else {
1171
+ statusName = APPROVAL_LEVELS[item.status] ? APPROVAL_LEVELS[item.status].name : ''
1172
+ }
1173
+ myvalue += `${statusName} By:${
1174
+ USERS[item.user_id].zname || ''
1175
+ }&nbsp;-&nbsp;(${item.time ? Util.dateFormat(item.time, "DD MMM YYYY HH:mm") : ''}) (${item.comments ? item.comments : item.text || ''}) <br>`;
1176
+ });
1177
+ }
1178
+ return myvalue;
1179
+ } catch (e) {
1180
+ console.log(e)
1181
+ return '';
1165
1182
  }
1166
- return myvalue;
1167
- };
1183
+ }
1168
1184
 
1169
1185
  zRoute.dataTableData = (
1170
- key,
1171
- value,
1172
- MYMODEL,
1173
- relations,
1174
- myid = "",
1175
- companyId = 1
1186
+ key,
1187
+ value,
1188
+ MYMODEL,
1189
+ relations,
1190
+ myid = "",
1191
+ companyId = 1
1176
1192
  ) => {
1177
1193
  try {
1178
1194
  relations = relations || {};
@@ -1251,16 +1267,16 @@ zRoute.dataTableData = (
1251
1267
 
1252
1268
  case "image":
1253
1269
  myvalue = Util.fileView(
1254
- "/uploads/" + MYMODEL.routeName + "/",
1255
- value,
1256
- { width: 60 }
1270
+ "/uploads/" + MYMODEL.routeName + "/",
1271
+ value,
1272
+ { width: 60 }
1257
1273
  );
1258
1274
  break;
1259
1275
 
1260
1276
  case "file":
1261
1277
  myvalue = Util.fileView(
1262
- "/uploads/" + MYMODEL.routeName + "/",
1263
- value
1278
+ "/uploads/" + MYMODEL.routeName + "/",
1279
+ value
1264
1280
  );
1265
1281
  break;
1266
1282
 
@@ -1270,10 +1286,10 @@ zRoute.dataTableData = (
1270
1286
  value = [myvalue];
1271
1287
  }
1272
1288
  myvalue = value.map(
1273
- (item) =>
1274
- `<a class="text-success" target="_blank" href="/uploads/${
1275
- MYMODEL.routeName
1276
- }/${key}/${item}"> ${item.substring(13)}</a> `
1289
+ (item) =>
1290
+ `<a class="text-success" target="_blank" href="/uploads/${
1291
+ MYMODEL.routeName
1292
+ }/${key}/${item}"> ${item.substring(13)}</a> `
1277
1293
  );
1278
1294
  }
1279
1295
  break;
@@ -1284,10 +1300,10 @@ zRoute.dataTableData = (
1284
1300
  value = [myvalue];
1285
1301
  }
1286
1302
  myvalue = value.map(
1287
- (item) =>
1288
- `<a class="text-success" target="_blank" href="/zdropbox-view/${
1289
- MYMODEL.routeName
1290
- }/${key}/${item}"> ${item.substring(13)}</a> `
1303
+ (item) =>
1304
+ `<a class="text-success" target="_blank" href="/zdropbox-view/${
1305
+ MYMODEL.routeName
1306
+ }/${key}/${item}"> ${item.substring(13)}</a> `
1291
1307
  );
1292
1308
  }
1293
1309
  break;
@@ -1298,8 +1314,8 @@ zRoute.dataTableData = (
1298
1314
 
1299
1315
  case "json":
1300
1316
  myvalue = value
1301
- ? JSON.stringify(value).replaceAll('","', '", "')
1302
- : "";
1317
+ ? JSON.stringify(value).replaceAll('","', '", "')
1318
+ : "";
1303
1319
  break;
1304
1320
 
1305
1321
  case "location":
@@ -1308,29 +1324,29 @@ zRoute.dataTableData = (
1308
1324
 
1309
1325
  case "json_array":
1310
1326
  myvalue = value
1311
- ? JSON.stringify(value).replaceAll('","', '", "')
1312
- : "";
1327
+ ? JSON.stringify(value).replaceAll('","', '", "')
1328
+ : "";
1313
1329
  break;
1314
1330
 
1315
1331
  case "dropdown_checkbox":
1316
1332
  myvalue = value
1317
- ? value.reduce((acc, item) => `${acc} <u>${item}</u> `, "")
1318
- : "";
1333
+ ? value.reduce((acc, item) => `${acc} <u>${item}</u> `, "")
1334
+ : "";
1319
1335
  break;
1320
1336
 
1321
1337
  case "array":
1322
1338
  myvalue = value
1323
- ? JSON.stringify(value).replaceAll('","', '", "')
1324
- : "";
1339
+ ? JSON.stringify(value).replaceAll('","', '", "')
1340
+ : "";
1325
1341
  break;
1326
1342
 
1327
1343
  case "table":
1328
1344
  myvalue = Util.tableShowInGrid(
1329
- value,
1330
- key,
1331
- MYMODEL,
1332
- myCache,
1333
- companyId
1345
+ value,
1346
+ key,
1347
+ MYMODEL,
1348
+ myCache,
1349
+ companyId
1334
1350
  );
1335
1351
  break;
1336
1352
 
@@ -1351,8 +1367,8 @@ zRoute.users = async (req) => {
1351
1367
  return [];
1352
1368
  } else {
1353
1369
  return await connection.query(
1354
- "SELECT zuser.id, zuser.fullname as zname FROM zuser LEFT JOIN zuser ON (zuser.id = zuser_company.user_id) WHERE zuser_company.company_id = ?",
1355
- [req.session.user.company_id]
1370
+ "SELECT zuser.id, zuser.fullname as zname FROM zuser LEFT JOIN zuser ON (zuser.id = zuser_company.user_id) WHERE zuser_company.company_id = ?",
1371
+ [req.session.user.company_id]
1356
1372
  );
1357
1373
  }
1358
1374
  };
@@ -1435,7 +1451,7 @@ zRoute.resetPassword = async (req, res) => {
1435
1451
  },
1436
1452
  });
1437
1453
  req.session.sessionFlash = Util.jsonSuccess(
1438
- LANGUAGE.change_password_success
1454
+ LANGUAGE.change_password_success
1439
1455
  );
1440
1456
  json = Util.jsonSuccess(LANGUAGE.success);
1441
1457
  } else {
@@ -1481,12 +1497,12 @@ zRoute.loginNormal = async (username, password) => {
1481
1497
  };
1482
1498
 
1483
1499
  zRoute.loginAjax = async (
1484
- username,
1485
- password,
1486
- req,
1487
- res,
1488
- isSocialLogin,
1489
- url = ""
1500
+ username,
1501
+ password,
1502
+ req,
1503
+ res,
1504
+ isSocialLogin,
1505
+ url = ""
1490
1506
  ) => {
1491
1507
  let redirect = "";
1492
1508
  let data = {
@@ -1496,8 +1512,8 @@ zRoute.loginAjax = async (
1496
1512
  try {
1497
1513
  isSocialLogin = isSocialLogin || false;
1498
1514
  const rows = isSocialLogin
1499
- ? await zRoute.loginAuth(username, password)
1500
- : await zRoute.loginNormal(username, password);
1515
+ ? await zRoute.loginAuth(username, password)
1516
+ : await zRoute.loginNormal(username, password);
1501
1517
  if (rows.length > 0) {
1502
1518
  if (rows[0].active == 1) {
1503
1519
  await zRoute.handleSession(req, rows[0]);
@@ -1520,21 +1536,21 @@ zRoute.loginAjax = async (
1520
1536
  };
1521
1537
 
1522
1538
  zRoute.login = async (
1523
- username,
1524
- password,
1525
- req,
1526
- res,
1527
- isSocialLogin,
1528
- url = ""
1529
- ) => {
1530
- isSocialLogin = isSocialLogin || false;
1531
- let data = await zRoute.loginAjax(
1532
1539
  username,
1533
1540
  password,
1534
1541
  req,
1535
1542
  res,
1536
1543
  isSocialLogin,
1537
- url
1544
+ url = ""
1545
+ ) => {
1546
+ isSocialLogin = isSocialLogin || false;
1547
+ let data = await zRoute.loginAjax(
1548
+ username,
1549
+ password,
1550
+ req,
1551
+ res,
1552
+ isSocialLogin,
1553
+ url
1538
1554
  );
1539
1555
  let redirect = data.url;
1540
1556
  if (data.status == 1) {
@@ -1655,9 +1671,9 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1655
1671
  asJSONb.push(key);
1656
1672
  }
1657
1673
  if (
1658
- MYMODEL.widgets[key].name == "json_array" ||
1659
- MYMODEL.widgets[key].name == "array" ||
1660
- MYMODEL.widgets[key].name == "dropzone"
1674
+ MYMODEL.widgets[key].name == "json_array" ||
1675
+ MYMODEL.widgets[key].name == "array" ||
1676
+ MYMODEL.widgets[key].name == "dropzone"
1661
1677
  ) {
1662
1678
  asArray.push(key);
1663
1679
  }
@@ -1692,7 +1708,7 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1692
1708
  fieldNames = result.filter.fields;
1693
1709
  body = result.filter;
1694
1710
  fields = body.fields.filter(
1695
- (item) => item != "no" && item != "actionColumn"
1711
+ (item) => item != "no" && item != "actionColumn"
1696
1712
  );
1697
1713
  select = Util.selectParser(fields, MYMODEL);
1698
1714
  if (zall) {
@@ -1743,9 +1759,9 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1743
1759
  field: "",
1744
1760
  option: "",
1745
1761
  value: ` ${Util.fieldWithTable(
1746
- fieldNames[item.data],
1747
- MYMODEL,
1748
- true
1762
+ fieldNames[item.data],
1763
+ MYMODEL,
1764
+ true
1749
1765
  )}::text ILIKE '${item.search.value}' `,
1750
1766
  operator: "AND",
1751
1767
  type: "inline",
@@ -1762,13 +1778,13 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1762
1778
  }
1763
1779
  });
1764
1780
  const orderColumn =
1765
- fieldNames[body.order[0].column] == "actionColumn"
1766
- ? `${table}.id`
1767
- : fieldNames[body.order[0].column] == "no"
1768
- ? `${table}.id`
1769
- : fieldNames[body.order[0].column] == "actionColum"
1770
- ? `${table}.id`
1771
- : fieldNames[body.order[0].column];
1781
+ fieldNames[body.order[0].column] == "actionColumn"
1782
+ ? `${table}.id`
1783
+ : fieldNames[body.order[0].column] == "no"
1784
+ ? `${table}.id`
1785
+ : fieldNames[body.order[0].column] == "actionColum"
1786
+ ? `${table}.id`
1787
+ : fieldNames[body.order[0].column];
1772
1788
  if (zstandart) {
1773
1789
  select = Util.selectParser(allfields, MYMODEL);
1774
1790
  }
@@ -1845,8 +1861,8 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1845
1861
  const sequence = Util.excelSequence();
1846
1862
  const labels = MYMODEL.labels;
1847
1863
  let start = 4,
1848
- num = 1,
1849
- routeName = res.locals.routeName;
1864
+ num = 1,
1865
+ routeName = res.locals.routeName;
1850
1866
  // properties
1851
1867
  const yellow = {
1852
1868
  type: "pattern",
@@ -1885,20 +1901,20 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1885
1901
  for (let key in MYMODEL.widgets) {
1886
1902
  if (!notJoins.includes(key)) {
1887
1903
  if (
1888
- MYMODEL.widgets[key].name == "relation" ||
1889
- MYMODEL.widgets[key].name == "typeahead" ||
1890
- MYMODEL.widgets[key].name == "dropdown_multi"
1904
+ MYMODEL.widgets[key].name == "relation" ||
1905
+ MYMODEL.widgets[key].name == "typeahead" ||
1906
+ MYMODEL.widgets[key].name == "dropdown_multi"
1891
1907
  ) {
1892
1908
  if (
1893
- MYMODEL.widgets[key].import_field &&
1894
- MYMODEL.widgets[key].import_field != "id"
1909
+ MYMODEL.widgets[key].import_field &&
1910
+ MYMODEL.widgets[key].import_field != "id"
1895
1911
  ) {
1896
1912
  aliasResults[key] = Util.arrayToObject(
1897
- await connection.results({
1898
- select: `id, ${MYMODEL.widgets[key].import_field}`,
1899
- table: MYMODEL.widgets[key].table,
1900
- }),
1901
- "id"
1913
+ await connection.results({
1914
+ select: `id, ${MYMODEL.widgets[key].import_field}`,
1915
+ table: MYMODEL.widgets[key].table,
1916
+ }),
1917
+ "id"
1902
1918
  );
1903
1919
  //console.log(aliasResults[key])
1904
1920
  aliasRelations.push(key);
@@ -1910,10 +1926,10 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1910
1926
  //check relations
1911
1927
  let isRelations = false;
1912
1928
  let relations = [],
1913
- tableObj = {},
1914
- obj = {},
1915
- dropdowns = [],
1916
- passwords = [];
1929
+ tableObj = {},
1930
+ obj = {},
1931
+ dropdowns = [],
1932
+ passwords = [];
1917
1933
  let usersObj = await zRoute.getUsers();
1918
1934
  if (Object.prototype.hasOwnProperty.call(MYMODEL, "widgets")) {
1919
1935
  for (let key in MYMODEL.widgets) {
@@ -1943,37 +1959,37 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1943
1959
  let t;
1944
1960
  if (field == "company_id") {
1945
1961
  t = !callback(result, field)
1946
- ? result.company_id
1947
- : callback(result, field);
1962
+ ? result.company_id
1963
+ : callback(result, field);
1948
1964
  } else if (field == "created_at" || field == "updated_at") {
1949
1965
  worksheet.getCell(sequence[i] + start).numFmt = "@";
1950
1966
  result[field] = Util.dateOriginal(result[field]);
1951
1967
  t = !callback(result, field)
1952
- ? Util.timeSql(result[field])
1953
- : callback(result, field);
1968
+ ? Util.timeSql(result[field])
1969
+ : callback(result, field);
1954
1970
  } else if (Util.in_array(field, ["created_by", "updated_by"])) {
1955
1971
  if (isRaws) {
1956
1972
  t = !callback(result, field)
1957
- ? result[field]
1958
- : callback(result, field);
1973
+ ? result[field]
1974
+ : callback(result, field);
1959
1975
  } else {
1960
1976
  t = !callback(result, field)
1961
- ? usersObj[result[field]].fullname
1962
- : callback(result, field);
1977
+ ? usersObj[result[field]].fullname
1978
+ : callback(result, field);
1963
1979
  }
1964
1980
  } else {
1965
1981
  // callback will call if you have
1966
1982
  if (Util.in_array(field, relations)) {
1967
1983
  if (isRaws) {
1968
1984
  t = !callback(result, field)
1969
- ? result[field]
1970
- : callback(result, field);
1985
+ ? result[field]
1986
+ : callback(result, field);
1971
1987
  } else {
1972
1988
  const objectData = tableObj[field] || {};
1973
1989
  if (!callback(result, field)) {
1974
1990
  if (
1975
- result[field] &&
1976
- Object.hasOwn(objectData[result[field]], "zname")
1991
+ result[field] &&
1992
+ Object.hasOwn(objectData[result[field]], "zname")
1977
1993
  ) {
1978
1994
  t = objectData[result[field]]["zname"];
1979
1995
  } else {
@@ -1985,74 +2001,74 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1985
2001
  }
1986
2002
  } else if (Util.in_array(field, dropdowns)) {
1987
2003
  t = !callback(result, field)
1988
- ? MYMODEL.dropdowns[field].fields[result[field]]
1989
- : callback(result, field);
2004
+ ? MYMODEL.dropdowns[field].fields[result[field]]
2005
+ : callback(result, field);
1990
2006
  } else if (Util.in_array(field, passwords)) {
1991
2007
  t = "xxxxxx";
1992
2008
  } else if (
1993
- widgets.hasOwnProperty(field) &&
1994
- widgets[field].name == "select"
2009
+ widgets.hasOwnProperty(field) &&
2010
+ widgets[field].name == "select"
1995
2011
  ) {
1996
2012
  if (isRaws) {
1997
2013
  t = !callback(result, field)
1998
- ? result[field]
1999
- : callback(result, field);
2014
+ ? result[field]
2015
+ : callback(result, field);
2000
2016
  } else {
2001
2017
  t = !callback(result, field)
2002
- ? Object.hasOwn(tableObj[field], result[field])
2003
- ? tableObj[field][result[field]]
2004
- : result[field]
2005
- : callback(result, field);
2018
+ ? Object.hasOwn(tableObj[field], result[field])
2019
+ ? tableObj[field][result[field]]
2020
+ : result[field]
2021
+ : callback(result, field);
2006
2022
  }
2007
2023
  } else if (
2008
- widgets.hasOwnProperty(field) &&
2009
- widgets[field].name == "datetime"
2024
+ widgets.hasOwnProperty(field) &&
2025
+ widgets[field].name == "datetime"
2010
2026
  ) {
2011
2027
  result[field] = Util.dateOriginal(result[field]);
2012
2028
  worksheet.getCell(sequence[i] + start).numFmt = "@";
2013
2029
  if (isRaws) {
2014
2030
  t = !callback(result, field)
2015
- ? Util.timeSql(result[field])
2016
- : callback(result, field);
2031
+ ? Util.timeSql(result[field])
2032
+ : callback(result, field);
2017
2033
  } else {
2018
2034
  t = !callback(result, field)
2019
- ? Util.timeSql(result[field])
2020
- : callback(result, field);
2035
+ ? Util.timeSql(result[field])
2036
+ : callback(result, field);
2021
2037
  }
2022
2038
  } else if (
2023
- widgets.hasOwnProperty(field) &&
2024
- widgets[field].name == "datepicker"
2039
+ widgets.hasOwnProperty(field) &&
2040
+ widgets[field].name == "datepicker"
2025
2041
  ) {
2026
2042
  worksheet.getCell(sequence[i] + start).numFmt = "@";
2027
2043
  if (isRaws) {
2028
2044
  t = !callback(result, field)
2029
- ? Util.dateFormat(result[field])
2030
- : callback(result, field);
2045
+ ? Util.dateFormat(result[field])
2046
+ : callback(result, field);
2031
2047
  } else {
2032
2048
  t = !callback(result, field)
2033
- ? Util.dateFormat(result[field])
2034
- : callback(result, field);
2049
+ ? Util.dateFormat(result[field])
2050
+ : callback(result, field);
2035
2051
  }
2036
2052
  } else if (
2037
- widgets.hasOwnProperty(field) &&
2038
- widgets[field].name == "switch"
2053
+ widgets.hasOwnProperty(field) &&
2054
+ widgets[field].name == "switch"
2039
2055
  ) {
2040
2056
  if (isRaws) {
2041
2057
  t = !callback(result, field)
2042
- ? result[field]
2043
- : callback(result, field);
2058
+ ? result[field]
2059
+ : callback(result, field);
2044
2060
  } else {
2045
2061
  t = !callback(result, field)
2046
- ? tableObj[field][result[field]] || ""
2047
- : callback(result, field);
2062
+ ? tableObj[field][result[field]] || ""
2063
+ : callback(result, field);
2048
2064
  }
2049
2065
  } else if (
2050
- (widgets.hasOwnProperty(field) &&
2051
- widgets[field].name == "relation") ||
2052
- (widgets.hasOwnProperty(field) &&
2053
- widgets[field].name == "typeahead") ||
2054
- (widgets.hasOwnProperty(field) &&
2055
- widgets[field].name == "dropdown_multi")
2066
+ (widgets.hasOwnProperty(field) &&
2067
+ widgets[field].name == "relation") ||
2068
+ (widgets.hasOwnProperty(field) &&
2069
+ widgets[field].name == "typeahead") ||
2070
+ (widgets.hasOwnProperty(field) &&
2071
+ widgets[field].name == "dropdown_multi")
2056
2072
  ) {
2057
2073
  let myvalue = "";
2058
2074
  if (widgets[field].import_field && widgets[field].import_field != "id") {
@@ -2063,23 +2079,23 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
2063
2079
  dropdownmultivalue.push(relations[field][item].zname);
2064
2080
  });
2065
2081
  result[field] = result[field]
2066
- ? JSON.stringify(dropdownmultivalue)
2067
- : "";
2082
+ ? JSON.stringify(dropdownmultivalue)
2083
+ : "";
2068
2084
  }
2069
2085
  } else {
2070
2086
  if (isNaN(result[field])) {
2071
2087
  myvalue = result[field];
2072
2088
  } else {
2073
2089
  myvalue = result[field]
2074
- ? aliasResults[field][result[field]][
2075
- widgets[field].import_field
2076
- ]
2077
- : "";
2090
+ ? aliasResults[field][result[field]][
2091
+ widgets[field].import_field
2092
+ ]
2093
+ : "";
2078
2094
  result[field] = result[field]
2079
- ? aliasResults[field][result[field]][
2080
- widgets[field].import_field
2081
- ]
2082
- : "";
2095
+ ? aliasResults[field][result[field]][
2096
+ widgets[field].import_field
2097
+ ]
2098
+ : "";
2083
2099
  }
2084
2100
  }
2085
2101
  } else {
@@ -2093,15 +2109,15 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
2093
2109
  }
2094
2110
  if (isRaws) {
2095
2111
  t = !callback(result, field)
2096
- ? result[field]
2097
- : callback(result, field);
2112
+ ? result[field]
2113
+ : callback(result, field);
2098
2114
  } else {
2099
2115
  t = !callback(result, field) ? myvalue : callback(result, field);
2100
2116
  }
2101
2117
  } else {
2102
2118
  t = !callback(result, field)
2103
- ? result[field]
2104
- : callback(result, field);
2119
+ ? result[field]
2120
+ : callback(result, field);
2105
2121
  }
2106
2122
  }
2107
2123
 
@@ -2113,8 +2129,8 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
2113
2129
 
2114
2130
  fileName = fileName || routeName + "_" + new Date().getTime() + ".xlsx";
2115
2131
  res.setHeader(
2116
- "Content-Type",
2117
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
2132
+ "Content-Type",
2133
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
2118
2134
  );
2119
2135
  res.setHeader("Content-Disposition", "attachment; filename=" + fileName);
2120
2136
  await workbook.xlsx.write(res);
@@ -2140,10 +2156,10 @@ zRoute.pdf = async (req, res, MYMODEL, fields, rows, callback) => {
2140
2156
  //check relations
2141
2157
  let isRelations = false;
2142
2158
  let relations = [],
2143
- tableObj = {},
2144
- obj = {},
2145
- dropdowns = [],
2146
- passwords = [];
2159
+ tableObj = {},
2160
+ obj = {},
2161
+ dropdowns = [],
2162
+ passwords = [];
2147
2163
  let usersObj = await zRoute.getUsers();
2148
2164
  if (Object.prototype.hasOwnProperty.call(MYMODEL, "widgets")) {
2149
2165
  for (let key in MYMODEL.widgets) {
@@ -2171,28 +2187,28 @@ zRoute.pdf = async (req, res, MYMODEL, fields, rows, callback) => {
2171
2187
  var t;
2172
2188
  if (field == "company_id") {
2173
2189
  t = !callback(result, field)
2174
- ? result.company_id
2175
- : callback(result, field);
2190
+ ? result.company_id
2191
+ : callback(result, field);
2176
2192
  } else if (field == "created_at" || field == "created_at") {
2177
2193
  t = !callback(result, field)
2178
- ? Util.timeSql(result[field])
2179
- : callback(result, field);
2194
+ ? Util.timeSql(result[field])
2195
+ : callback(result, field);
2180
2196
  } else if (field == "updated_at" || field == "updated_at") {
2181
2197
  t = !callback(result, field)
2182
- ? Util.timeSql(result[field])
2183
- : callback(result, field);
2198
+ ? Util.timeSql(result[field])
2199
+ : callback(result, field);
2184
2200
  } else if (Util.in_array(field, ["created_by", "updated_by"])) {
2185
2201
  t = !callback(result, field)
2186
- ? usersObj[result[field]]
2187
- : callback(result, field);
2202
+ ? usersObj[result[field]]
2203
+ : callback(result, field);
2188
2204
  } else {
2189
2205
  // callback will call if you have
2190
2206
  if (Util.in_array(field, relations)) {
2191
2207
  const objectData = tableObj[field] || {};
2192
2208
  if (!callback(result, field)) {
2193
2209
  if (
2194
- result[field] &&
2195
- Object.hasOwn(objectData[result[field]], "zname")
2210
+ result[field] &&
2211
+ Object.hasOwn(objectData[result[field]], "zname")
2196
2212
  ) {
2197
2213
  t = objectData[result[field]]["zname"];
2198
2214
  } else {
@@ -2203,38 +2219,38 @@ zRoute.pdf = async (req, res, MYMODEL, fields, rows, callback) => {
2203
2219
  }
2204
2220
  } else if (Util.in_array(field, dropdowns)) {
2205
2221
  t = !callback(result, field)
2206
- ? MYMODEL.dropdowns[field].fields[result[field]]
2207
- : callback(result, field);
2222
+ ? MYMODEL.dropdowns[field].fields[result[field]]
2223
+ : callback(result, field);
2208
2224
  } else if (Util.in_array(field, passwords)) {
2209
2225
  t = "xxxxxx";
2210
2226
  } else if (MYMODEL.widgets[field].name == "select") {
2211
2227
  t = !callback(result, field)
2212
- ? Object.hasOwn(tableObj[field], result[field])
2213
- ? tableObj[field][result[field]]
2214
- : result[field]
2215
- : callback(result, field);
2228
+ ? Object.hasOwn(tableObj[field], result[field])
2229
+ ? tableObj[field][result[field]]
2230
+ : result[field]
2231
+ : callback(result, field);
2216
2232
  } else if (MYMODEL.widgets[field].name == "datetime") {
2217
2233
  t = !callback(result, field)
2218
- ? Util.timeSql(result[field])
2219
- : callback(result, field);
2234
+ ? Util.timeSql(result[field])
2235
+ : callback(result, field);
2220
2236
  } else if (MYMODEL.widgets[field].name == "datepicker") {
2221
2237
  t = !callback(result, field)
2222
- ? Util.dateFormat(result[field])
2223
- : callback(result, field);
2238
+ ? Util.dateFormat(result[field])
2239
+ : callback(result, field);
2224
2240
  } else if (MYMODEL.widgets[field].name == "switch") {
2225
2241
  t = !callback(result, field)
2226
- ? tableObj[field][result[field]] || ""
2227
- : callback(result, field);
2242
+ ? tableObj[field][result[field]] || ""
2243
+ : callback(result, field);
2228
2244
  } else if (MYMODEL.widgets[field].name == "relation") {
2229
2245
  if (relations[field][result[field]]) {
2230
2246
  t = !callback(result, field)
2231
- ? relations[field][result[field]].zname || ""
2232
- : callback(result, field);
2247
+ ? relations[field][result[field]].zname || ""
2248
+ : callback(result, field);
2233
2249
  }
2234
2250
  } else {
2235
2251
  t = !callback(result, field)
2236
- ? result[field] || ""
2237
- : callback(result, field);
2252
+ ? result[field] || ""
2253
+ : callback(result, field);
2238
2254
  }
2239
2255
  }
2240
2256
  //worksheet.getCell(sequence[i] + start).value = t;
@@ -2308,9 +2324,9 @@ zRoute.generatePDF = async (file, layout = "pdf_bootstrap", options = {}) => {
2308
2324
  let mylayout = `${dirRoot}/views/layouts/${layout}.ejs`;
2309
2325
  if (file.content) {
2310
2326
  const html = await ejs.renderFile(
2311
- mylayout,
2312
- { data: file.content },
2313
- { async: true }
2327
+ mylayout,
2328
+ { data: file.content },
2329
+ { async: true }
2314
2330
  );
2315
2331
  await page.setContent(html, {
2316
2332
  waitUntil: "load",
@@ -2388,21 +2404,21 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2388
2404
  const MYMODEL = objData.MYMODEL || {};
2389
2405
  const table = MYMODEL.table;
2390
2406
  const fields = Object.prototype.hasOwnProperty.call(objData, "fields")
2391
- ? objData.fields
2392
- : req.body.fields;
2407
+ ? objData.fields
2408
+ : req.body.fields;
2393
2409
  let relations = await zRoute.relations(
2394
- req,
2395
- res,
2396
- MYMODEL.table,
2397
- visibleColumns
2410
+ req,
2411
+ res,
2412
+ MYMODEL.table,
2413
+ visibleColumns
2398
2414
  );
2399
2415
  //find relation with joins
2400
2416
  const select = Object.prototype.hasOwnProperty.call(objData, "select")
2401
- ? objData.select
2402
- : Util.selectParser(fields, MYMODEL);
2417
+ ? objData.select
2418
+ : Util.selectParser(fields, MYMODEL);
2403
2419
  const columns = Object.prototype.hasOwnProperty.call(objData, "columns")
2404
- ? objData.columns
2405
- : body.columns;
2420
+ ? objData.columns
2421
+ : body.columns;
2406
2422
  const asDate = [];
2407
2423
  const asJSONb = [];
2408
2424
  const asArray = [];
@@ -2414,16 +2430,16 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2414
2430
  asDate.push(key);
2415
2431
  }
2416
2432
  if (
2417
- MYMODEL.widgets[key].name == "dropdown_multi" ||
2418
- MYMODEL.widgets[key].name == "dragdrop" ||
2419
- MYMODEL.widgets[key].name == "dropdown_checkbox"
2433
+ MYMODEL.widgets[key].name == "dropdown_multi" ||
2434
+ MYMODEL.widgets[key].name == "dragdrop" ||
2435
+ MYMODEL.widgets[key].name == "dropdown_checkbox"
2420
2436
  ) {
2421
2437
  asJSONb.push(key);
2422
2438
  }
2423
2439
  if (
2424
- MYMODEL.widgets[key].name == "json_array" ||
2425
- MYMODEL.widgets[key].name == "array" ||
2426
- MYMODEL.widgets[key].name == "dropzone"
2440
+ MYMODEL.widgets[key].name == "json_array" ||
2441
+ MYMODEL.widgets[key].name == "array" ||
2442
+ MYMODEL.widgets[key].name == "dropzone"
2427
2443
  ) {
2428
2444
  asArray.push(key);
2429
2445
  }
@@ -2465,9 +2481,9 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2465
2481
  field: "",
2466
2482
  option: "",
2467
2483
  value: ` ${Util.fieldWithTable(
2468
- fields[item.data],
2469
- MYMODEL,
2470
- true
2484
+ fields[item.data],
2485
+ MYMODEL,
2486
+ true
2471
2487
  )}::text ILIKE '${item.search.value}' `,
2472
2488
  operator: "AND",
2473
2489
  type: "inline",
@@ -2485,13 +2501,13 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2485
2501
  });
2486
2502
 
2487
2503
  const orderColumn =
2488
- fields[body.order[0].column] == "actionColumn"
2489
- ? `${table}.id`
2490
- : fields[body.order[0].column] == "no"
2491
- ? `${table}.id`
2492
- : fields[body.order[0].column] == "actionColum"
2493
- ? `${table}.id`
2494
- : fields[body.order[0].column];
2504
+ fields[body.order[0].column] == "actionColumn"
2505
+ ? `${table}.id`
2506
+ : fields[body.order[0].column] == "no"
2507
+ ? `${table}.id`
2508
+ : fields[body.order[0].column] == "actionColum"
2509
+ ? `${table}.id`
2510
+ : fields[body.order[0].column];
2495
2511
  let gridData = {
2496
2512
  select: select,
2497
2513
  table: MYMODEL.table,
@@ -2520,8 +2536,8 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2520
2536
  let datas = [];
2521
2537
  const zRole = objData.zRole || require("./zRole");
2522
2538
  const levels = objData.hasOwnProperty("levels")
2523
- ? objData.levels
2524
- : zRole.myLevel(req, res, MYMODEL.table);
2539
+ ? objData.levels
2540
+ : zRole.myLevel(req, res, MYMODEL.table);
2525
2541
  if (objData.hasOwnProperty("datas")) {
2526
2542
  datas = objData.datas(body, rows, fields, relations, levels);
2527
2543
  } else {
@@ -2530,32 +2546,32 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2530
2546
  fields.forEach(function (item) {
2531
2547
  if (item == "no") {
2532
2548
  arr.push(
2533
- ` <input type="checkbox" name="ck[${row.id}]" id="ck_${
2534
- row.id
2535
- }" class="form-check-input form-check-grid ck"> ${
2536
- +index + 1 + +body.start
2537
- }`
2549
+ ` <input type="checkbox" name="ck[${row.id}]" id="ck_${
2550
+ row.id
2551
+ }" class="form-check-input form-check-grid ck"> ${
2552
+ +index + 1 + +body.start
2553
+ }`
2538
2554
  );
2539
2555
  } else if (item == "actionColumn") {
2540
2556
  let buttons = objData.hasOwnProperty("actionButtons")
2541
- ? objData.actionButtons(levels, row, MYMODEL.table)
2542
- : zRoute.actionButtons(levels, row, MYMODEL.table);
2557
+ ? objData.actionButtons(levels, row, MYMODEL.table)
2558
+ : zRoute.actionButtons(levels, row, MYMODEL.table);
2543
2559
  arr.push(buttons);
2544
2560
  } else {
2545
2561
  let data = objData.hasOwnProperty("dataTableData")
2546
- ? objData.dataTableData(
2547
- item,
2548
- row[item],
2549
- MYMODEL,
2550
- relations,
2551
- row.id
2562
+ ? objData.dataTableData(
2563
+ item,
2564
+ row[item],
2565
+ MYMODEL,
2566
+ relations,
2567
+ row.id
2552
2568
  )
2553
- : zRoute.dataTableData(
2554
- item,
2555
- row[item],
2556
- MYMODEL,
2557
- relations,
2558
- row.id
2569
+ : zRoute.dataTableData(
2570
+ item,
2571
+ row[item],
2572
+ MYMODEL,
2573
+ relations,
2574
+ row.id
2559
2575
  );
2560
2576
  arr.push(data);
2561
2577
  }
@@ -2601,16 +2617,16 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2601
2617
  asDate.push(key);
2602
2618
  }
2603
2619
  if (
2604
- MYMODEL.widgets[key].name == "dropdown_multi" ||
2605
- MYMODEL.widgets[key].name == "dragdrop" ||
2606
- MYMODEL.widgets[key].name == "dropdown_checkbox"
2620
+ MYMODEL.widgets[key].name == "dropdown_multi" ||
2621
+ MYMODEL.widgets[key].name == "dragdrop" ||
2622
+ MYMODEL.widgets[key].name == "dropdown_checkbox"
2607
2623
  ) {
2608
2624
  asJSONb.push(key);
2609
2625
  }
2610
2626
  if (
2611
- MYMODEL.widgets[key].name == "json_array" ||
2612
- MYMODEL.widgets[key].name == "array" ||
2613
- MYMODEL.widgets[key].name == "dropzone"
2627
+ MYMODEL.widgets[key].name == "json_array" ||
2628
+ MYMODEL.widgets[key].name == "array" ||
2629
+ MYMODEL.widgets[key].name == "dropzone"
2614
2630
  ) {
2615
2631
  asArray.push(key);
2616
2632
  }
@@ -2657,9 +2673,9 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2657
2673
  field: "",
2658
2674
  option: "",
2659
2675
  value: ` ${Util.fieldWithTable(
2660
- fields[item.data],
2661
- MYMODEL,
2662
- true
2676
+ fields[item.data],
2677
+ MYMODEL,
2678
+ true
2663
2679
  )}::text ILIKE '${item.search.value}' `,
2664
2680
  operator: "AND",
2665
2681
  type: "inline",
@@ -2669,9 +2685,9 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2669
2685
  field: "",
2670
2686
  option: "",
2671
2687
  value: ` ${Util.fieldWithTable(
2672
- fields[item.data],
2673
- MYMODEL,
2674
- true
2688
+ fields[item.data],
2689
+ MYMODEL,
2690
+ true
2675
2691
  )}::text ILIKE '${item.search.value}' `,
2676
2692
  operator: "AND",
2677
2693
  type: "inline",
@@ -2688,13 +2704,13 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2688
2704
  }
2689
2705
  });
2690
2706
  let orderColumn =
2691
- fields[body.order[0].column] == "actionColumn"
2692
- ? `${table}.id`
2693
- : fields[body.order[0].column] == "no"
2694
- ? `${table}.id`
2695
- : fields[body.order[0].column] == "actionColum"
2696
- ? `${table}.id`
2697
- : fields[body.order[0].column];
2707
+ fields[body.order[0].column] == "actionColumn"
2708
+ ? `${table}.id`
2709
+ : fields[body.order[0].column] == "no"
2710
+ ? `${table}.id`
2711
+ : fields[body.order[0].column] == "actionColum"
2712
+ ? `${table}.id`
2713
+ : fields[body.order[0].column];
2698
2714
  if (Util.in_array(fields[body.order[0].column], asTables)) {
2699
2715
  orderColumn = `${table}.${fields[body.order[0].column]}::text`;
2700
2716
  }
@@ -2727,27 +2743,27 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2727
2743
  fields.forEach(function (item) {
2728
2744
  if (item == "no") {
2729
2745
  arr.push(
2730
- ` <input type="checkbox" name="ck[${row.id}]" id="ck_${
2731
- row.id
2732
- }" class="form-check-input form-check-grid ck"> ${
2733
- +index + 1 + +body.start
2734
- }`
2746
+ ` <input type="checkbox" name="ck[${row.id}]" id="ck_${
2747
+ row.id
2748
+ }" class="form-check-input form-check-grid ck"> ${
2749
+ +index + 1 + +body.start
2750
+ }`
2735
2751
  );
2736
2752
  } else if (item == "actionColumn") {
2737
2753
  let buttons = !actionButtonsFn(levels, row, MYMODEL.table)
2738
- ? zRoute.actionButtons(levels, row, MYMODEL.table)
2739
- : actionButtonsFn(levels, row, MYMODEL.table);
2754
+ ? zRoute.actionButtons(levels, row, MYMODEL.table)
2755
+ : actionButtonsFn(levels, row, MYMODEL.table);
2740
2756
  arr.push(buttons);
2741
2757
  } else {
2742
2758
  arr.push(
2743
- zRoute.dataTableData(
2744
- item,
2745
- row[item],
2746
- MYMODEL,
2747
- relations,
2748
- row.id,
2749
- companyId
2750
- )
2759
+ zRoute.dataTableData(
2760
+ item,
2761
+ row[item],
2762
+ MYMODEL,
2763
+ relations,
2764
+ row.id,
2765
+ companyId
2766
+ )
2751
2767
  );
2752
2768
  }
2753
2769
  });
@@ -2907,8 +2923,8 @@ zRoute.chains = async (req, res) => {
2907
2923
  results.forEach(function (result) {
2908
2924
  var selected = result.id == currentValue ? " selected " : "";
2909
2925
  data[
2910
- target
2911
- ] += `<option value="${result.id}" ${selected} >${result.zname}</option>`;
2926
+ target
2927
+ ] += `<option value="${result.id}" ${selected} >${result.zname}</option>`;
2912
2928
  });
2913
2929
  }
2914
2930
  }
@@ -2965,9 +2981,9 @@ zRoute.formsFieldSync = async (req, res, MYMODEL, data = {}) => {
2965
2981
  for (let key in MYMODEL.widgets) {
2966
2982
  if (MYMODEL.widgets[key].name == "table") {
2967
2983
  tableRelations[key] = await zRoute.relations(
2968
- req,
2969
- res,
2970
- MYMODEL.widgets[key].table
2984
+ req,
2985
+ res,
2986
+ MYMODEL.widgets[key].table
2971
2987
  );
2972
2988
  //console.log("tabelrelations", JSON.stringify(tableRelations[key]))
2973
2989
  } else if (MYMODEL.widgets[key].name == "typeahead") {
@@ -3009,12 +3025,12 @@ zRoute.formFieldSync = async (req, res, MYMODEL, relations, data = {}) => {
3009
3025
  };
3010
3026
 
3011
3027
  zRoute.forms = (
3012
- req,
3013
- res,
3014
- MYMODEL,
3015
- relations,
3016
- data = {},
3017
- tableRelations = {}
3028
+ req,
3029
+ res,
3030
+ MYMODEL,
3031
+ relations,
3032
+ data = {},
3033
+ tableRelations = {}
3018
3034
  ) => {
3019
3035
  relations = relations || {};
3020
3036
  let MYMODELS = zRoute.MYMODELS();
@@ -3121,12 +3137,12 @@ zRoute.forms = (
3121
3137
  dropzone_data_arr.push({ fileName: item, size: fileSizeInBytes });
3122
3138
  });
3123
3139
  myCache.set(
3124
- `dropzone__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
3125
- obj.value
3140
+ `dropzone__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
3141
+ obj.value
3126
3142
  );
3127
3143
  }
3128
3144
  let dropzoneValue =
3129
- obj.value.length > 0 ? JSON.stringify(dropzone_data_arr) : "[]";
3145
+ obj.value.length > 0 ? JSON.stringify(dropzone_data_arr) : "[]";
3130
3146
  script += `let dropzone_${key}_data = ${dropzoneValue};`;
3131
3147
  obj.type = "dropzone";
3132
3148
  obj.class = "dropzone boxy-tiny d-block";
@@ -3153,12 +3169,12 @@ zRoute.forms = (
3153
3169
  dropbox_data_arr.push({ fileName: item, size: fileSizeInBytes });
3154
3170
  });
3155
3171
  myCache.set(
3156
- `dropbox__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
3157
- obj.value
3172
+ `dropbox__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
3173
+ obj.value
3158
3174
  );
3159
3175
  }
3160
3176
  let dropboxValue =
3161
- obj.value.length > 0 ? JSON.stringify(dropbox_data_arr) : "[]";
3177
+ obj.value.length > 0 ? JSON.stringify(dropbox_data_arr) : "[]";
3162
3178
  script += `let dropbox_${key}_data = ${dropboxValue};`;
3163
3179
  obj.type = "dropbox";
3164
3180
  obj.class = "dropzone boxy-tiny d-block";
@@ -3169,8 +3185,8 @@ zRoute.forms = (
3169
3185
  script += `document.addEventListener("DOMContentLoaded", () => {
3170
3186
  setTimeout(function () {
3171
3187
  window.importFile(window.LexicalEditor,${JSON.stringify(
3172
- obj.value
3173
- )});
3188
+ obj.value
3189
+ )});
3174
3190
  }, 1000);
3175
3191
  });`;
3176
3192
  }
@@ -3199,10 +3215,10 @@ zRoute.forms = (
3199
3215
  obj.type = "select";
3200
3216
  var htmlOptions = ` <a href="/${widgets[key].table}" target="_blank"> > </a>`;
3201
3217
  forms.label[key] = cForm.label(
3202
- key,
3203
- fields[key].title,
3204
- fields[key].required,
3205
- htmlOptions
3218
+ key,
3219
+ fields[key].title,
3220
+ fields[key].required,
3221
+ htmlOptions
3206
3222
  );
3207
3223
  obj.data = relations[key];
3208
3224
  obj.please_select = widgets[key].please_select;
@@ -3210,9 +3226,9 @@ zRoute.forms = (
3210
3226
  case "typeahead":
3211
3227
  obj.type = "typeahead";
3212
3228
  forms.label[key] = cForm.label(
3213
- key,
3214
- fields[key].title,
3215
- fields[key].required
3229
+ key,
3230
+ fields[key].title,
3231
+ fields[key].required
3216
3232
  );
3217
3233
  //obj.data = relations[key];
3218
3234
  /*obj.typeaheadvalue = !data[key]
@@ -3225,10 +3241,10 @@ zRoute.forms = (
3225
3241
  obj.type = "select";
3226
3242
  var htmlOptions = ` <a href="/${widgets[key].table}" target="_blank"> > </a>`;
3227
3243
  forms.label[key] = cForm.label(
3228
- key,
3229
- fields[key].title,
3230
- fields[key].required,
3231
- htmlOptions
3244
+ key,
3245
+ fields[key].title,
3246
+ fields[key].required,
3247
+ htmlOptions
3232
3248
  );
3233
3249
  obj.data = relations[key + "Row"];
3234
3250
  break;
@@ -3265,7 +3281,7 @@ zRoute.forms = (
3265
3281
  obj.type = "datetimepicker";
3266
3282
  obj.class = "form-control datetimepicker";
3267
3283
  obj.value =
3268
- obj.value == "0000-00-00 00:00:00" ? "" : Util.timeSql(obj.value);
3284
+ obj.value == "0000-00-00 00:00:00" ? "" : Util.timeSql(obj.value);
3269
3285
  break;
3270
3286
  case "clockpicker":
3271
3287
  obj.type = "input";
@@ -3291,10 +3307,10 @@ zRoute.forms = (
3291
3307
  break;
3292
3308
  case "ide_editor":
3293
3309
  forms.label[key] = cForm.label(
3294
- key,
3295
- fields[key].title,
3296
- fields[key].required,
3297
- ` <span class="badge bg-primary float-end boxy-small">${widgets[key].language}</span>`
3310
+ key,
3311
+ fields[key].title,
3312
+ fields[key].required,
3313
+ ` <span class="badge bg-primary float-end boxy-small">${widgets[key].language}</span>`
3298
3314
  );
3299
3315
  obj.labelOptions = ` <span class="badge bg-primary float-end boxy-small">${widgets[key].language}</span>`;
3300
3316
  obj.type = "ide_editor";
@@ -3319,14 +3335,14 @@ zRoute.forms = (
3319
3335
  //console.log(obj.properties)
3320
3336
  //(req, res, relations, dataObject, parentTable, fieldName, MYMODEL, datas = [])
3321
3337
  obj.bodyTable = zRoute.tableBody(
3322
- req,
3323
- res,
3324
- tableRelations[key],
3325
- obj.data,
3326
- MYMODEL.table,
3327
- key,
3328
- MYMODELS[MYMODEL.widgets[key].table],
3329
- obj.value
3338
+ req,
3339
+ res,
3340
+ tableRelations[key],
3341
+ obj.data,
3342
+ MYMODEL.table,
3343
+ key,
3344
+ MYMODELS[MYMODEL.widgets[key].table],
3345
+ obj.value
3330
3346
  );
3331
3347
  break;
3332
3348
  case "multi_line_editor":
@@ -3422,8 +3438,8 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
3422
3438
  script += `$(()=> {
3423
3439
  ajaxPost('/ztab-access',{table:"${MYMODEL.table}"},(data)=> {
3424
3440
  let dataTabs = ${
3425
- MYMODEL.hasOwnProperty("tabs") ? JSON.stringify(MYMODEL.tabs) : []
3426
- };
3441
+ MYMODEL.hasOwnProperty("tabs") ? JSON.stringify(MYMODEL.tabs) : []
3442
+ };
3427
3443
  let viewAccess = data.view || [];
3428
3444
  let createAccess = data.create || [];
3429
3445
  let editAccess = data.edit || [];
@@ -3462,11 +3478,11 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
3462
3478
  let MODEL = MYMODELS[MYMODEL.widgets[obj.id].table];
3463
3479
  const relationsTable = await zRoute.relations(req, res, MODEL.table);
3464
3480
  let tableForms = zRoute.viewForm(
3465
- req,
3466
- res,
3467
- MODEL,
3468
- relationsTable,
3469
- obj.value || []
3481
+ req,
3482
+ res,
3483
+ MODEL,
3484
+ relationsTable,
3485
+ obj.value || []
3470
3486
  );
3471
3487
  let properties = obj.properties;
3472
3488
  let tableProperties = {};
@@ -3486,13 +3502,13 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
3486
3502
  if (val.length) {
3487
3503
  val.forEach(function (item) {
3488
3504
  let myforms = zRoute.viewForm(
3489
- req,
3490
- res,
3491
- MODEL,
3492
- relationsTable,
3493
- item,
3494
- MYMODEL,
3495
- key
3505
+ req,
3506
+ res,
3507
+ MODEL,
3508
+ relationsTable,
3509
+ item,
3510
+ MYMODEL,
3511
+ key
3496
3512
  );
3497
3513
  html += `<tr>`;
3498
3514
  for (let k in obj.data) {
@@ -3513,16 +3529,28 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
3513
3529
  let APPROVAL_LEVELS = myCache.get("APPROVAL_LEVELS");
3514
3530
  let USERS = Util.arrayToObject(myCache.get("zuser_created_by_1"), "id");
3515
3531
  approval_history_table += `<div class="dropdown"><button class="btn boxy dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Approval Status : ${
3516
- APPROVAL_LEVELS[data.approval_status].name
3532
+ APPROVAL_LEVELS[data.approval_status].name
3517
3533
  }</button>`;
3518
- approval_history_table += `<ul class="dropdown-menu" aria-labelledby="viewApproval">`;
3534
+ approval_history_table += `<ul class="dropdown-menu" aria-labelledby="viewApproval" style="min-width: 300px">`;
3519
3535
  let arr = data.approval_history || [];
3536
+ arr = arr.reverse();
3537
+
3520
3538
  arr.map((item, index) => {
3539
+ let statusName = ' '
3540
+ if(item.status == 6){
3541
+ statusName = "Comment"
3542
+ } else if(item.status == 4){
3543
+ statusName = "Reject"
3544
+ } else if(item.status == 3) {
3545
+ statusName = "Approve"
3546
+ } else {
3547
+ statusName = APPROVAL_LEVELS[item.status] ? APPROVAL_LEVELS[item.status].name : ''
3548
+ }
3521
3549
  approval_history_table += `<li><a class="dropdown-item" href="#">${
3522
- index + 1
3523
- }. ${APPROVAL_LEVELS[item.status].name} (${item.text}) ${
3524
- USERS[item.user_id].zname
3525
- } ${Util.timeSql(data.created_at)}</a></li>`;
3550
+ index + 1
3551
+ }. ${
3552
+ USERS[item.user_id].zname
3553
+ } (${statusName}) <small class="float-end">${item.time ? Util.dateFormat(item.time,"DD MMM YYYY HH:mm") : ''}</small> <p><u>${item.comments ? item.comments : item.name || ''}</u></p> </a></li>`;
3526
3554
  });
3527
3555
  approval_history_table += `</ul></div>`;
3528
3556
  }
@@ -3570,13 +3598,13 @@ zRoute.viewFormSync = (req, res, MYMODEL, relations, data = {}) => {
3570
3598
  };
3571
3599
 
3572
3600
  zRoute.viewForm = (
3573
- req,
3574
- res,
3575
- MYMODEL,
3576
- relations,
3577
- data = {},
3578
- MODEL_TABLE = {},
3579
- keyName = ""
3601
+ req,
3602
+ res,
3603
+ MYMODEL,
3604
+ relations,
3605
+ data = {},
3606
+ MODEL_TABLE = {},
3607
+ keyName = ""
3580
3608
  ) => {
3581
3609
  let isTableType = Object.keys(MODEL_TABLE).length > 0 ? true : false;
3582
3610
  let forms = zRoute.forms(req, res, MYMODEL, relations, data);
@@ -3607,36 +3635,36 @@ zRoute.viewForm = (
3607
3635
  let width = widgets[key].width || "300";
3608
3636
  if (isTableType) {
3609
3637
  obj[key].value = Util.fileView(
3610
- `/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
3611
- data[key],
3612
- {
3613
- width: width,
3614
- class: "boxy zoom",
3615
- }
3638
+ `/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
3639
+ data[key],
3640
+ {
3641
+ width: width,
3642
+ class: "boxy zoom",
3643
+ }
3616
3644
  );
3617
3645
  } else {
3618
3646
  obj[key].value =
3619
- "<br><br>" +
3620
- Util.fileView(`/uploads/${MYMODEL.routeName}/`, data[key], {
3621
- width: width,
3622
- class: "boxy zoom",
3623
- });
3647
+ "<br><br>" +
3648
+ Util.fileView(`/uploads/${MYMODEL.routeName}/`, data[key], {
3649
+ width: width,
3650
+ class: "boxy zoom",
3651
+ });
3624
3652
  }
3625
3653
  break;
3626
3654
  case "file":
3627
3655
  obj[key].type = "plaintext";
3628
3656
  if (isTableType) {
3629
3657
  obj[key].value = Util.fileView(
3630
- `/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
3631
- data[key],
3632
- { withIcon: true }
3658
+ `/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
3659
+ data[key],
3660
+ { withIcon: true }
3633
3661
  );
3634
3662
  } else {
3635
3663
  obj[key].value =
3636
- "<br><br>" +
3637
- Util.fileView(`/uploads/${MYMODEL.routeName}/`, data[key], {
3638
- withIcon: true,
3639
- });
3664
+ "<br><br>" +
3665
+ Util.fileView(`/uploads/${MYMODEL.routeName}/`, data[key], {
3666
+ withIcon: true,
3667
+ });
3640
3668
  }
3641
3669
  break;
3642
3670
  case "switch":
@@ -3648,11 +3676,11 @@ zRoute.viewForm = (
3648
3676
  prepend = `<br>`;
3649
3677
  }
3650
3678
  value = data[key]
3651
- ? widgets[key].fields[data[key]]
3652
- : widgets[key].fields[0];
3679
+ ? widgets[key].fields[data[key]]
3680
+ : widgets[key].fields[0];
3653
3681
  obj[
3654
- key
3655
- ].value = `${prepend}<div class="purple-border">${value}</div>`;
3682
+ key
3683
+ ].value = `${prepend}<div class="purple-border">${value}</div>`;
3656
3684
  break;
3657
3685
  case "relation":
3658
3686
  obj[key].type = "text";
@@ -3721,12 +3749,12 @@ zRoute.usersCommon = (res) => {
3721
3749
  };
3722
3750
 
3723
3751
  zRoute.viewTable = async (
3724
- req,
3725
- res,
3726
- MYMODEL,
3727
- results,
3728
- isPreview,
3729
- hasKeys = ""
3752
+ req,
3753
+ res,
3754
+ MYMODEL,
3755
+ results,
3756
+ isPreview,
3757
+ hasKeys = ""
3730
3758
  ) => {
3731
3759
  isPreview = isPreview || false;
3732
3760
  let data = {};
@@ -3757,26 +3785,26 @@ zRoute.viewTable = async (
3757
3785
  case "image":
3758
3786
  if (hasKeys) {
3759
3787
  data[key] = Util.fileView(
3760
- "/uploads/" + hasKeys + "/",
3761
- results[key]
3788
+ "/uploads/" + hasKeys + "/",
3789
+ results[key]
3762
3790
  );
3763
3791
  } else {
3764
3792
  data[key] = Util.fileView(
3765
- "/uploads/" + routeName + "/",
3766
- results[key]
3793
+ "/uploads/" + routeName + "/",
3794
+ results[key]
3767
3795
  );
3768
3796
  }
3769
3797
  break;
3770
3798
  case "file":
3771
3799
  if (hasKeys) {
3772
3800
  data[key] = Util.fileView(
3773
- "/uploads/" + hasKeys + "/",
3774
- results[key]
3801
+ "/uploads/" + hasKeys + "/",
3802
+ results[key]
3775
3803
  );
3776
3804
  } else {
3777
3805
  data[key] = Util.fileView(
3778
- "/uploads/" + routeName + "/",
3779
- results[key]
3806
+ "/uploads/" + routeName + "/",
3807
+ results[key]
3780
3808
  );
3781
3809
  }
3782
3810
  break;
@@ -3798,22 +3826,22 @@ zRoute.viewTable = async (
3798
3826
  case "relation":
3799
3827
  if (results[key]) {
3800
3828
  row =
3801
- (await connection.result({
3802
- table: widgets[key].table,
3803
- select: widgets[key].fields[1] + " as zname",
3804
- where: { id: results[key] },
3805
- })) || {};
3829
+ (await connection.result({
3830
+ table: widgets[key].table,
3831
+ select: widgets[key].fields[1] + " as zname",
3832
+ where: { id: results[key] },
3833
+ })) || {};
3806
3834
  }
3807
3835
  data[key] = !row.zname ? "" : row.zname;
3808
3836
  break;
3809
3837
  case "typeahead":
3810
3838
  if (results[key]) {
3811
3839
  row =
3812
- (await connection.result({
3813
- table: widgets[key].table,
3814
- select: widgets[key].fields[1] + " as zname",
3815
- where: { id: results[key] },
3816
- })) || {};
3840
+ (await connection.result({
3841
+ table: widgets[key].table,
3842
+ select: widgets[key].fields[1] + " as zname",
3843
+ where: { id: results[key] },
3844
+ })) || {};
3817
3845
  }
3818
3846
  data[key] = !row.zname ? "" : row.zname;
3819
3847
  break;
@@ -3823,19 +3851,19 @@ zRoute.viewTable = async (
3823
3851
  table: widgets[key].table,
3824
3852
  });
3825
3853
  let valArr = Util.arrayToList(
3826
- results[key],
3827
- Util.arrayWithObject(rows, "id", "zname")
3854
+ results[key],
3855
+ Util.arrayWithObject(rows, "id", "zname")
3828
3856
  );
3829
3857
  data[key] = typeof valArr == "object" ? valArr.join("<br>") : valArr;
3830
3858
  break;
3831
3859
  case "dropdown_chain":
3832
3860
  if (results[key]) {
3833
3861
  row =
3834
- (await connection.result({
3835
- table: widgets[key].table,
3836
- select: widgets[key].fields[1] + " as zname",
3837
- where: { id: results[key] },
3838
- })) || {};
3862
+ (await connection.result({
3863
+ table: widgets[key].table,
3864
+ select: widgets[key].fields[1] + " as zname",
3865
+ where: { id: results[key] },
3866
+ })) || {};
3839
3867
  }
3840
3868
  data[key] = !row.zname ? "" : row.zname;
3841
3869
  break;
@@ -3859,13 +3887,13 @@ zRoute.viewTable = async (
3859
3887
  hasIdeEditor = true;
3860
3888
  editors.push(key);
3861
3889
  const editorValue = !results
3862
- ? ""
3863
- : Util.replaceAll(results[key], "</script>", `<//script>`);
3890
+ ? ""
3891
+ : Util.replaceAll(results[key], "</script>", `<//script>`);
3864
3892
  //data[key] = editorValue;
3865
3893
  moduleLib.addScript(
3866
- req,
3867
- res,
3868
- "var ide_editor_" + key + " = `" + editorValue + "` "
3894
+ req,
3895
+ res,
3896
+ "var ide_editor_" + key + " = `" + editorValue + "` "
3869
3897
  );
3870
3898
  break;
3871
3899
  case "lexical":
@@ -3873,8 +3901,8 @@ zRoute.viewTable = async (
3873
3901
  break;
3874
3902
  case "json":
3875
3903
  data[key] = results[key]
3876
- ? JSON.stringify(results[key], undefined, 2)
3877
- : "";
3904
+ ? JSON.stringify(results[key], undefined, 2)
3905
+ : "";
3878
3906
  break;
3879
3907
  case "table":
3880
3908
  let tableClass = isPreview ? "" : "table-striped table-hover";
@@ -3902,12 +3930,12 @@ zRoute.viewTable = async (
3902
3930
  for (let i = 0; i < arr.length; i++) {
3903
3931
  var item = arr[i];
3904
3932
  var data_table = await zRoute.viewTable(
3905
- req,
3906
- res,
3907
- MODEL_TABLE,
3908
- item,
3909
- false,
3910
- `${MYMODEL.table}/${key}`
3933
+ req,
3934
+ res,
3935
+ MODEL_TABLE,
3936
+ item,
3937
+ false,
3938
+ `${MYMODEL.table}/${key}`
3911
3939
  );
3912
3940
  html += `<tr>`;
3913
3941
  for (var k in obj) {
@@ -3931,11 +3959,11 @@ zRoute.viewTable = async (
3931
3959
  editors.forEach(function (item) {
3932
3960
  contentScript += `var editor_${item} = ace.edit("editor_${item}");
3933
3961
  editor_${item}.getSession().setMode("ace/mode/${
3934
- widgets[item].language
3962
+ widgets[item].language
3935
3963
  }");
3936
3964
  editor_${item}.setValue(ace_value(ide_editor_${item}));
3937
3965
  $("#editor_${item}").css({height:${
3938
- widgets[item].height ? widgets[item].height : 400
3966
+ widgets[item].height ? widgets[item].height : 400
3939
3967
  }});
3940
3968
  `;
3941
3969
  });
@@ -4021,7 +4049,7 @@ zRoute.moduleLib = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4021
4049
  if (MODEL_TABLE.widgets[key].name == "dropdown_multi") {
4022
4050
  let relObject = relations[keys + "Row"][key + "Object"];
4023
4051
  scriptTemp += `<script>var ${key}Object = ${JSON.stringify(
4024
- relObject
4052
+ relObject
4025
4053
  )};</script>${Util.newLine}`;
4026
4054
  }
4027
4055
  }
@@ -4053,7 +4081,7 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4053
4081
  let obj = {};
4054
4082
  const MYMODELS = myCache.get("MYMODELS");
4055
4083
  let widgets = MYMODEL.widgets,
4056
- widgetsArray = Object.keys(widgets) || [];
4084
+ widgetsArray = Object.keys(widgets) || [];
4057
4085
 
4058
4086
  let hasTabs = MYMODEL.hasOwnProperty("hasTabs") ? MYMODEL.hasTabs : false;
4059
4087
  let hasDatePicker = false;
@@ -4098,20 +4126,20 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4098
4126
  hasIde = true;
4099
4127
  } else if (widgets[key].name == "switch") {
4100
4128
  let switchObj = moduleLib.switch(
4101
- req,
4102
- res,
4103
- `#${key}`,
4104
- widgets[key].fields
4129
+ req,
4130
+ res,
4131
+ `#${key}`,
4132
+ widgets[key].fields
4105
4133
  );
4106
4134
  scriptForm += switchObj.script;
4107
4135
  headObj.switch = switchObj.head;
4108
4136
  endObj.switch = switchObj.end;
4109
4137
  } else if (widgets[key].name == "typeahead") {
4110
4138
  let typeaheadObj = moduleLib.typeahead(
4111
- req,
4112
- res,
4113
- MYMODEL.table,
4114
- `#${key}Typeahead`
4139
+ req,
4140
+ res,
4141
+ MYMODEL.table,
4142
+ `#${key}Typeahead`
4115
4143
  );
4116
4144
  scriptForm += typeaheadObj.script;
4117
4145
  headObj.typeahead = typeaheadObj.head;
@@ -4265,8 +4293,8 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4265
4293
  scriptForm += `$(()=> {
4266
4294
  ajaxPost('/ztab-access',{table:"${MYMODEL.table}"},(data)=> {
4267
4295
  let dataTabs = ${
4268
- MYMODEL.hasOwnProperty("tabs") ? JSON.stringify(MYMODEL.tabs) : []
4269
- };
4296
+ MYMODEL.hasOwnProperty("tabs") ? JSON.stringify(MYMODEL.tabs) : []
4297
+ };
4270
4298
  let viewAccess = data.view || [];
4271
4299
  let createAccess = data.create || [];
4272
4300
  let editAccess = data.edit || [];
@@ -4501,26 +4529,26 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4501
4529
 
4502
4530
  case "table":
4503
4531
  let MODEL_TABLE =
4504
- MYMODELS[MYMODEL.widgets[keys].table] ||
4505
- require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
4532
+ MYMODELS[MYMODEL.widgets[keys].table] ||
4533
+ require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
4506
4534
  //let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
4507
4535
  //relations[key + "TABLE"]
4508
4536
  let RELATIONS_MODEL_TABLE =
4509
- relations && relations.hasOwnProperty(keys + "TABLE")
4510
- ? relations[keys + "TABLE"]
4511
- : {};
4537
+ relations && relations.hasOwnProperty(keys + "TABLE")
4538
+ ? relations[keys + "TABLE"]
4539
+ : {};
4512
4540
  let zForm = zRoute.formField(
4513
- req,
4514
- res,
4515
- MODEL_TABLE,
4516
- RELATIONS_MODEL_TABLE
4541
+ req,
4542
+ res,
4543
+ MODEL_TABLE,
4544
+ RELATIONS_MODEL_TABLE
4517
4545
  );
4518
4546
  zRoute.moduleLib(
4519
- req,
4520
- res,
4521
- MODEL_TABLE,
4522
- RELATIONS_MODEL_TABLE,
4523
- zForms
4547
+ req,
4548
+ res,
4549
+ MODEL_TABLE,
4550
+ RELATIONS_MODEL_TABLE,
4551
+ zForms
4524
4552
  );
4525
4553
  let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`;
4526
4554
  let subname = MYMODEL.table + "_" + keys;
@@ -4549,9 +4577,9 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4549
4577
  }
4550
4578
 
4551
4579
  scriptForm += `var append${keys} = (increment, callback) => { buildform(increment,'${
4552
- MYMODEL.table
4580
+ MYMODEL.table
4553
4581
  }','${keys}','${JSON.stringify(
4554
- relationsWithKeys
4582
+ relationsWithKeys
4555
4583
  )}', (data) => callback(data)) } `;
4556
4584
  scriptForm += Util.newLine;
4557
4585
  scriptForm += `var append${keys}Max = $('tbody#body-${keys}>tr').length;${Util.newLine}`;
@@ -4680,7 +4708,7 @@ ${keys}.forEach(function (myobj, index) {
4680
4708
  editor_${keys}.setValue(ace_value(ide_editor_${keys}));
4681
4709
  $("#${keys}").text(ace_value(ide_editor_${keys}));
4682
4710
  $("#editor_${keys}").css({height:${
4683
- widgets[keys].height ? widgets[keys].height : 400
4711
+ widgets[keys].height ? widgets[keys].height : 400
4684
4712
  }});
4685
4713
  ${script_annotaions}
4686
4714
  editor_${keys}.on("change",function(e,session){
@@ -4754,7 +4782,7 @@ zRoute.insertSQL = async (req, res, table, data) => {
4754
4782
  //console.log('has dropzone')
4755
4783
  let path_src = dirRoot + "/public/zdropzone/" + userId + "/";
4756
4784
  let path_dest =
4757
- dirRoot + "/public/uploads/" + MYMODEL.routeName + "/" + key + "/";
4785
+ dirRoot + "/public/uploads/" + MYMODEL.routeName + "/" + key + "/";
4758
4786
  if (!fs.existsSync(path_dest)) {
4759
4787
  fs.mkdirSync(path_dest, { recursive: true });
4760
4788
  }
@@ -4904,8 +4932,8 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
4904
4932
  const MYMODEL_TABLE = MYMODELS[MYMODEL.widgets[key].table];
4905
4933
  for (let q in MYMODEL_TABLE.widgets) {
4906
4934
  if (
4907
- MYMODEL_TABLE.widgets[q].name == "file" ||
4908
- MYMODEL_TABLE.widgets[q].name == "image"
4935
+ MYMODEL_TABLE.widgets[q].name == "file" ||
4936
+ MYMODEL_TABLE.widgets[q].name == "image"
4909
4937
  ) {
4910
4938
  hasImages = true;
4911
4939
  tables.push(key);
@@ -4917,7 +4945,7 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
4917
4945
  //console.log('has dropzone')
4918
4946
  let path_src = dirRoot + "/public/zdropzone/" + userId + "/";
4919
4947
  let path_dest =
4920
- dirRoot + "/public/uploads/" + MYMODEL.table + "/" + key + "/";
4948
+ dirRoot + "/public/uploads/" + MYMODEL.table + "/" + key + "/";
4921
4949
  if (!fs.existsSync(path_dest)) {
4922
4950
  fs.mkdirSync(path_dest, { recursive: true });
4923
4951
  }
@@ -5041,17 +5069,17 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
5041
5069
  if (!obj[key]) {
5042
5070
  let resultItem = result[item];
5043
5071
  if (
5044
- resultItem &&
5045
- Object.prototype.hasOwnProperty.call(resultItem, index)
5072
+ resultItem &&
5073
+ Object.prototype.hasOwnProperty.call(resultItem, index)
5046
5074
  ) {
5047
5075
  let resultItemIndex = resultItem[index];
5048
5076
  if (
5049
- resultItemIndex &&
5050
- Object.prototype.hasOwnProperty.call(resultItemIndex, key)
5077
+ resultItemIndex &&
5078
+ Object.prototype.hasOwnProperty.call(resultItemIndex, key)
5051
5079
  ) {
5052
5080
  obj[key] = !result[item][index]
5053
- ? ""
5054
- : result[item][index][key];
5081
+ ? ""
5082
+ : result[item][index][key];
5055
5083
  }
5056
5084
  }
5057
5085
  }
@@ -5204,12 +5232,12 @@ zRoute.import = async (req, res, MYMODEL) => {
5204
5232
  for (let key in MYMODEL.widgets) {
5205
5233
  if (MYMODEL.widgets[key]) {
5206
5234
  if (
5207
- MYMODEL.widgets[key].name == "relation" ||
5208
- MYMODEL.widgets[key].name == "typeahead"
5235
+ MYMODEL.widgets[key].name == "relation" ||
5236
+ MYMODEL.widgets[key].name == "typeahead"
5209
5237
  ) {
5210
5238
  if (
5211
- MYMODEL.widgets[key].import_field &&
5212
- MYMODEL.widgets[key].import_field != "id"
5239
+ MYMODEL.widgets[key].import_field &&
5240
+ MYMODEL.widgets[key].import_field != "id"
5213
5241
  ) {
5214
5242
  aliasRelations.push(key);
5215
5243
  selectRelations += `, (select ${MYMODEL.widgets[key].import_field} from "${MYMODEL.widgets[key].table}" where ${MYMODEL.widgets[key].table}.id = ${MYMODEL.table}.${key} limit 1) as ${key} `;
@@ -5218,8 +5246,8 @@ zRoute.import = async (req, res, MYMODEL) => {
5218
5246
 
5219
5247
  if (MYMODEL.widgets[key].name == "dropdown_multi") {
5220
5248
  if (
5221
- MYMODEL.widgets[key].import_field &&
5222
- MYMODEL.widgets[key].import_field != "id"
5249
+ MYMODEL.widgets[key].import_field &&
5250
+ MYMODEL.widgets[key].import_field != "id"
5223
5251
  ) {
5224
5252
  isDropdownWidgets.push(key);
5225
5253
  let cacheName = `${MYMODEL.widgets[key].table}_${MYMODEL.table}___${key}_${companyId}`;
@@ -5244,8 +5272,8 @@ zRoute.import = async (req, res, MYMODEL) => {
5244
5272
  let uniqueName = Util.generateUnique() + ".xlsx";
5245
5273
  const filename = `${dirRoot}/public/uploads/zlogs_upload/${uniqueName}`;
5246
5274
  let excelFile = req.files.excel,
5247
- labels = MYMODEL.labels,
5248
- keys = {};
5275
+ labels = MYMODEL.labels,
5276
+ keys = {};
5249
5277
  if (!excelFile) {
5250
5278
  return res.json(Util.flashError(LANGUAGE["import_no_file"]));
5251
5279
  }
@@ -5316,7 +5344,7 @@ zRoute.import = async (req, res, MYMODEL) => {
5316
5344
  dropdownMultiArrays.map((dropdownMultiArray) => {
5317
5345
  if (dropdownWidgetRelations[keys[prop]][dropdownMultiArray]) {
5318
5346
  dArray.push(
5319
- dropdownWidgetRelations[keys[prop]][dropdownMultiArray]
5347
+ dropdownWidgetRelations[keys[prop]][dropdownMultiArray]
5320
5348
  );
5321
5349
  }
5322
5350
  });
@@ -5324,9 +5352,9 @@ zRoute.import = async (req, res, MYMODEL) => {
5324
5352
  }
5325
5353
  } else {
5326
5354
  let name =
5327
- MYMODEL.widgets[keys[prop]] && MYMODEL.widgets[keys[prop]].name
5328
- ? MYMODEL.widgets[keys[prop]].name
5329
- : "";
5355
+ MYMODEL.widgets[keys[prop]] && MYMODEL.widgets[keys[prop]].name
5356
+ ? MYMODEL.widgets[keys[prop]].name
5357
+ : "";
5330
5358
  if (name != "virtual") {
5331
5359
  data[keys[prop]] = value;
5332
5360
  }
@@ -5442,12 +5470,12 @@ zRoute.buildForm = async (req, res) => {
5442
5470
  let relations = JSON.parse(req.body.relations) || {};
5443
5471
  let MYMODEL = MYMODELS[table] || require(`${dirRoot}/models/${table}`);
5444
5472
  let MODEL_TABLE =
5445
- MYMODELS[MYMODEL.widgets[keys].table] ||
5446
- require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
5473
+ MYMODELS[MYMODEL.widgets[keys].table] ||
5474
+ require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
5447
5475
  let MODEL_TABLE_RELATIONS = await zRoute.relations(
5448
- req,
5449
- res,
5450
- MODEL_TABLE.table
5476
+ req,
5477
+ res,
5478
+ MODEL_TABLE.table
5451
5479
  );
5452
5480
  let dataName = `${MYMODEL.table}[${keys}]`;
5453
5481
 
@@ -5466,7 +5494,7 @@ zRoute.buildForm = async (req, res) => {
5466
5494
  "data-id": obj.class,
5467
5495
  };
5468
5496
  trtd += `<td class="td_${key}_${
5469
- MYMODEL.widgets[keys].table
5497
+ MYMODEL.widgets[keys].table
5470
5498
  }">${cForm.field(obj)}</td>`;
5471
5499
  }
5472
5500
  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>`;
@@ -5485,7 +5513,7 @@ zRoute.tabAccess = async (req, res) => {
5485
5513
  let roles = myCache.get("ROLES");
5486
5514
  let roleId = res.locals.roleId;
5487
5515
  let tabs =
5488
- roles[roleId] && roles[roleId].tabs ? roles[roleId].tabs[table] : [];
5516
+ roles[roleId] && roles[roleId].tabs ? roles[roleId].tabs[table] : [];
5489
5517
  res.json(tabs);
5490
5518
  } catch (e) {
5491
5519
  console.log(e);
@@ -5513,15 +5541,15 @@ zRoute.buildFileModel = (json, index = 0) => {
5513
5541
  if (typeof item == "string") {
5514
5542
  isStringArray = true;
5515
5543
  textArray += `${Util.tabs(3)} ${separator}"${Util.replaceAll(
5516
- item,
5517
- '"',
5518
- "'"
5544
+ item,
5545
+ '"',
5546
+ "'"
5519
5547
  )}",${Util.newLine}`;
5520
5548
  }
5521
5549
  });
5522
5550
  if (isStringArray) {
5523
5551
  text += `[${Util.newLine}${textArray.slice(0, -3)}${
5524
- Util.newLine
5552
+ Util.newLine
5525
5553
  }${separator}${Util.tabs(2)} ], ${Util.newLine}`;
5526
5554
  } else {
5527
5555
  text += `${JSON.stringify(json[key])}, ${Util.newLine}`;
@@ -5667,16 +5695,16 @@ zRoute.modelsCache = async () => {
5667
5695
  }
5668
5696
  if (!Util.in_array(key, nots)) {
5669
5697
  obj[table][
5670
- `${keys}___${key}`
5671
- ] = `${widgets[key].fields[1]} as ${key}_${models[keys].table}`;
5698
+ `${keys}___${key}`
5699
+ ] = `${widgets[key].fields[1]} as ${key}_${models[keys].table}`;
5672
5700
  if (
5673
- Object.prototype.hasOwnProperty.call(models[keys].widgets, key)
5701
+ Object.prototype.hasOwnProperty.call(models[keys].widgets, key)
5674
5702
  ) {
5675
5703
  if (
5676
- Object.prototype.hasOwnProperty.call(
5677
- models[keys].widgets[key],
5678
- "order_by"
5679
- )
5704
+ Object.prototype.hasOwnProperty.call(
5705
+ models[keys].widgets[key],
5706
+ "order_by"
5707
+ )
5680
5708
  ) {
5681
5709
  if (models[keys].widgets[key].order_by) {
5682
5710
  orderBy[table] = models[keys].widgets[key].order_by;
@@ -5703,7 +5731,7 @@ zRoute.modelsCache = async () => {
5703
5731
  try {
5704
5732
  for (let keys in obj) {
5705
5733
  let checks = await connection.query(
5706
- `SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE tablename = '${keys}') AS oke;`
5734
+ `SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE tablename = '${keys}') AS oke;`
5707
5735
  );
5708
5736
  if (checks[0].oke) {
5709
5737
  if (!Util.in_array(keys, zRoute.tableHasNoCompanyId)) {
@@ -5961,13 +5989,13 @@ zRoute.typeaheadpost = async (req, res) => {
5961
5989
  };
5962
5990
 
5963
5991
  zRoute.history = async (
5964
- req,
5965
- res,
5966
- relations,
5967
- id,
5968
- MYMODEL,
5969
- users,
5970
- results = []
5992
+ req,
5993
+ res,
5994
+ relations,
5995
+ id,
5996
+ MYMODEL,
5997
+ users,
5998
+ results = []
5971
5999
  ) => {
5972
6000
  //html
5973
6001
  let html = "";
@@ -6068,13 +6096,13 @@ zRoute.history = async (
6068
6096
  <div class="card">
6069
6097
  <div class="card-body">
6070
6098
  <div class="float-end text-muted text-end">${
6071
- Util.dateFormat(
6072
- arrDataAttributes[index]
6073
- .date1,
6074
- "DD MMM YYYY HH:mm"
6075
- ) || ""
6076
- }<br><small>${
6077
- users[arrDataAttributes[index].by1].fullname
6099
+ Util.dateFormat(
6100
+ arrDataAttributes[index]
6101
+ .date1,
6102
+ "DD MMM YYYY HH:mm"
6103
+ ) || ""
6104
+ }<br><small>${
6105
+ users[arrDataAttributes[index].by1].fullname
6078
6106
  }</small></div>
6079
6107
  <h4 class="card-title text-muted">Semula</h4>
6080
6108
  <div class="card-text">${html1}</div>
@@ -6085,13 +6113,13 @@ zRoute.history = async (
6085
6113
  <div class="card">
6086
6114
  <div class="card-body">
6087
6115
  <div class="float-end text-muted text-end">${
6088
- Util.dateFormat(
6089
- arrDataAttributes[index]
6090
- .date2,
6091
- "DD MMM YYYY HH:mm"
6092
- ) || ""
6093
- } <br><small>${
6094
- users[arrDataAttributes[index].by2].fullname
6116
+ Util.dateFormat(
6117
+ arrDataAttributes[index]
6118
+ .date2,
6119
+ "DD MMM YYYY HH:mm"
6120
+ ) || ""
6121
+ } <br><small>${
6122
+ users[arrDataAttributes[index].by2].fullname
6095
6123
  }</small></div>
6096
6124
  <h4 class="card-title text-success">Menjadi </h4>
6097
6125
  <div class="card-text">${html2}</div>
@@ -6109,14 +6137,14 @@ zRoute.history = async (
6109
6137
  };
6110
6138
 
6111
6139
  zRoute.tableBody = (
6112
- req,
6113
- res,
6114
- relations,
6115
- dataObject,
6116
- parentTable,
6117
- fieldName,
6118
- MYMODEL,
6119
- datas = []
6140
+ req,
6141
+ res,
6142
+ relations,
6143
+ dataObject,
6144
+ parentTable,
6145
+ fieldName,
6146
+ MYMODEL,
6147
+ datas = []
6120
6148
  ) => {
6121
6149
  let html = "";
6122
6150
  try {
@@ -6136,7 +6164,7 @@ zRoute.tableBody = (
6136
6164
  myobj.additional_attributes = ` data-name="${key}" data-id="${parentTable}_${fieldName}_${key}" `;
6137
6165
  myobj.isTableModule = 1;
6138
6166
  html += `<td class="td_${key}_${MYMODEL.table}">${cForm.field(
6139
- myobj
6167
+ myobj
6140
6168
  )}</td>`;
6141
6169
  }
6142
6170
  html += `<td style="vertical-align:top"><span class="icon-small icons-danger trash_${fieldName}_${MYMODEL.table}" onclick="$(this).closest('tr').remove()" title="Delete"><img class="icons-bg-white griddelete icon-image" src="/assets/icons/trash-filled.svg"></span></td>`;