zet-lib 1.5.24 → 1.5.25

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
  }
@@ -1159,7 +1159,7 @@ zRoute.approval_history_data = (arr = []) => {
1159
1159
  if (arr && arr.length > 0) {
1160
1160
  arr.map((item) => {
1161
1161
  myvalue += `[${APPROVAL_LEVELS[item.status].name} By:${
1162
- USERS[item.user_id].zname
1162
+ USERS[item.user_id].zname
1163
1163
  }(${item.created_at}) (${item.text})] `;
1164
1164
  });
1165
1165
  }
@@ -1167,12 +1167,12 @@ zRoute.approval_history_data = (arr = []) => {
1167
1167
  };
1168
1168
 
1169
1169
  zRoute.dataTableData = (
1170
- key,
1171
- value,
1172
- MYMODEL,
1173
- relations,
1174
- myid = "",
1175
- companyId = 1
1170
+ key,
1171
+ value,
1172
+ MYMODEL,
1173
+ relations,
1174
+ myid = "",
1175
+ companyId = 1
1176
1176
  ) => {
1177
1177
  try {
1178
1178
  relations = relations || {};
@@ -1251,16 +1251,16 @@ zRoute.dataTableData = (
1251
1251
 
1252
1252
  case "image":
1253
1253
  myvalue = Util.fileView(
1254
- "/uploads/" + MYMODEL.routeName + "/",
1255
- value,
1256
- { width: 60 }
1254
+ "/uploads/" + MYMODEL.routeName + "/",
1255
+ value,
1256
+ { width: 60 }
1257
1257
  );
1258
1258
  break;
1259
1259
 
1260
1260
  case "file":
1261
1261
  myvalue = Util.fileView(
1262
- "/uploads/" + MYMODEL.routeName + "/",
1263
- value
1262
+ "/uploads/" + MYMODEL.routeName + "/",
1263
+ value
1264
1264
  );
1265
1265
  break;
1266
1266
 
@@ -1270,10 +1270,10 @@ zRoute.dataTableData = (
1270
1270
  value = [myvalue];
1271
1271
  }
1272
1272
  myvalue = value.map(
1273
- (item) =>
1274
- `<a class="text-success" target="_blank" href="/uploads/${
1275
- MYMODEL.routeName
1276
- }/${key}/${item}"> ${item.substring(13)}</a> `
1273
+ (item) =>
1274
+ `<a class="text-success" target="_blank" href="/uploads/${
1275
+ MYMODEL.routeName
1276
+ }/${key}/${item}"> ${item.substring(13)}</a> `
1277
1277
  );
1278
1278
  }
1279
1279
  break;
@@ -1284,10 +1284,10 @@ zRoute.dataTableData = (
1284
1284
  value = [myvalue];
1285
1285
  }
1286
1286
  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> `
1287
+ (item) =>
1288
+ `<a class="text-success" target="_blank" href="/zdropbox-view/${
1289
+ MYMODEL.routeName
1290
+ }/${key}/${item}"> ${item.substring(13)}</a> `
1291
1291
  );
1292
1292
  }
1293
1293
  break;
@@ -1298,8 +1298,8 @@ zRoute.dataTableData = (
1298
1298
 
1299
1299
  case "json":
1300
1300
  myvalue = value
1301
- ? JSON.stringify(value).replaceAll('","', '", "')
1302
- : "";
1301
+ ? JSON.stringify(value).replaceAll('","', '", "')
1302
+ : "";
1303
1303
  break;
1304
1304
 
1305
1305
  case "location":
@@ -1308,29 +1308,29 @@ zRoute.dataTableData = (
1308
1308
 
1309
1309
  case "json_array":
1310
1310
  myvalue = value
1311
- ? JSON.stringify(value).replaceAll('","', '", "')
1312
- : "";
1311
+ ? JSON.stringify(value).replaceAll('","', '", "')
1312
+ : "";
1313
1313
  break;
1314
1314
 
1315
1315
  case "dropdown_checkbox":
1316
1316
  myvalue = value
1317
- ? value.reduce((acc, item) => `${acc} <u>${item}</u> `, "")
1318
- : "";
1317
+ ? value.reduce((acc, item) => `${acc} <u>${item}</u> `, "")
1318
+ : "";
1319
1319
  break;
1320
1320
 
1321
1321
  case "array":
1322
1322
  myvalue = value
1323
- ? JSON.stringify(value).replaceAll('","', '", "')
1324
- : "";
1323
+ ? JSON.stringify(value).replaceAll('","', '", "')
1324
+ : "";
1325
1325
  break;
1326
1326
 
1327
1327
  case "table":
1328
1328
  myvalue = Util.tableShowInGrid(
1329
- value,
1330
- key,
1331
- MYMODEL,
1332
- myCache,
1333
- companyId
1329
+ value,
1330
+ key,
1331
+ MYMODEL,
1332
+ myCache,
1333
+ companyId
1334
1334
  );
1335
1335
  break;
1336
1336
 
@@ -1351,8 +1351,8 @@ zRoute.users = async (req) => {
1351
1351
  return [];
1352
1352
  } else {
1353
1353
  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]
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]
1356
1356
  );
1357
1357
  }
1358
1358
  };
@@ -1435,7 +1435,7 @@ zRoute.resetPassword = async (req, res) => {
1435
1435
  },
1436
1436
  });
1437
1437
  req.session.sessionFlash = Util.jsonSuccess(
1438
- LANGUAGE.change_password_success
1438
+ LANGUAGE.change_password_success
1439
1439
  );
1440
1440
  json = Util.jsonSuccess(LANGUAGE.success);
1441
1441
  } else {
@@ -1481,12 +1481,12 @@ zRoute.loginNormal = async (username, password) => {
1481
1481
  };
1482
1482
 
1483
1483
  zRoute.loginAjax = async (
1484
- username,
1485
- password,
1486
- req,
1487
- res,
1488
- isSocialLogin,
1489
- url = ""
1484
+ username,
1485
+ password,
1486
+ req,
1487
+ res,
1488
+ isSocialLogin,
1489
+ url = ""
1490
1490
  ) => {
1491
1491
  let redirect = "";
1492
1492
  let data = {
@@ -1496,8 +1496,8 @@ zRoute.loginAjax = async (
1496
1496
  try {
1497
1497
  isSocialLogin = isSocialLogin || false;
1498
1498
  const rows = isSocialLogin
1499
- ? await zRoute.loginAuth(username, password)
1500
- : await zRoute.loginNormal(username, password);
1499
+ ? await zRoute.loginAuth(username, password)
1500
+ : await zRoute.loginNormal(username, password);
1501
1501
  if (rows.length > 0) {
1502
1502
  if (rows[0].active == 1) {
1503
1503
  await zRoute.handleSession(req, rows[0]);
@@ -1520,21 +1520,21 @@ zRoute.loginAjax = async (
1520
1520
  };
1521
1521
 
1522
1522
  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
1523
  username,
1533
1524
  password,
1534
1525
  req,
1535
1526
  res,
1536
1527
  isSocialLogin,
1537
- url
1528
+ url = ""
1529
+ ) => {
1530
+ isSocialLogin = isSocialLogin || false;
1531
+ let data = await zRoute.loginAjax(
1532
+ username,
1533
+ password,
1534
+ req,
1535
+ res,
1536
+ isSocialLogin,
1537
+ url
1538
1538
  );
1539
1539
  let redirect = data.url;
1540
1540
  if (data.status == 1) {
@@ -1655,9 +1655,9 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1655
1655
  asJSONb.push(key);
1656
1656
  }
1657
1657
  if (
1658
- MYMODEL.widgets[key].name == "json_array" ||
1659
- MYMODEL.widgets[key].name == "array" ||
1660
- MYMODEL.widgets[key].name == "dropzone"
1658
+ MYMODEL.widgets[key].name == "json_array" ||
1659
+ MYMODEL.widgets[key].name == "array" ||
1660
+ MYMODEL.widgets[key].name == "dropzone"
1661
1661
  ) {
1662
1662
  asArray.push(key);
1663
1663
  }
@@ -1692,7 +1692,7 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1692
1692
  fieldNames = result.filter.fields;
1693
1693
  body = result.filter;
1694
1694
  fields = body.fields.filter(
1695
- (item) => item != "no" && item != "actionColumn"
1695
+ (item) => item != "no" && item != "actionColumn"
1696
1696
  );
1697
1697
  select = Util.selectParser(fields, MYMODEL);
1698
1698
  if (zall) {
@@ -1743,9 +1743,9 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1743
1743
  field: "",
1744
1744
  option: "",
1745
1745
  value: ` ${Util.fieldWithTable(
1746
- fieldNames[item.data],
1747
- MYMODEL,
1748
- true
1746
+ fieldNames[item.data],
1747
+ MYMODEL,
1748
+ true
1749
1749
  )}::text ILIKE '${item.search.value}' `,
1750
1750
  operator: "AND",
1751
1751
  type: "inline",
@@ -1762,13 +1762,13 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1762
1762
  }
1763
1763
  });
1764
1764
  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];
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];
1772
1772
  if (zstandart) {
1773
1773
  select = Util.selectParser(allfields, MYMODEL);
1774
1774
  }
@@ -1845,8 +1845,8 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1845
1845
  const sequence = Util.excelSequence();
1846
1846
  const labels = MYMODEL.labels;
1847
1847
  let start = 4,
1848
- num = 1,
1849
- routeName = res.locals.routeName;
1848
+ num = 1,
1849
+ routeName = res.locals.routeName;
1850
1850
  // properties
1851
1851
  const yellow = {
1852
1852
  type: "pattern",
@@ -1885,20 +1885,20 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1885
1885
  for (let key in MYMODEL.widgets) {
1886
1886
  if (!notJoins.includes(key)) {
1887
1887
  if (
1888
- MYMODEL.widgets[key].name == "relation" ||
1889
- MYMODEL.widgets[key].name == "typeahead" ||
1890
- MYMODEL.widgets[key].name == "dropdown_multi"
1888
+ MYMODEL.widgets[key].name == "relation" ||
1889
+ MYMODEL.widgets[key].name == "typeahead" ||
1890
+ MYMODEL.widgets[key].name == "dropdown_multi"
1891
1891
  ) {
1892
1892
  if (
1893
- MYMODEL.widgets[key].import_field &&
1894
- MYMODEL.widgets[key].import_field != "id"
1893
+ MYMODEL.widgets[key].import_field &&
1894
+ MYMODEL.widgets[key].import_field != "id"
1895
1895
  ) {
1896
1896
  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"
1897
+ await connection.results({
1898
+ select: `id, ${MYMODEL.widgets[key].import_field}`,
1899
+ table: MYMODEL.widgets[key].table,
1900
+ }),
1901
+ "id"
1902
1902
  );
1903
1903
  //console.log(aliasResults[key])
1904
1904
  aliasRelations.push(key);
@@ -1910,10 +1910,10 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1910
1910
  //check relations
1911
1911
  let isRelations = false;
1912
1912
  let relations = [],
1913
- tableObj = {},
1914
- obj = {},
1915
- dropdowns = [],
1916
- passwords = [];
1913
+ tableObj = {},
1914
+ obj = {},
1915
+ dropdowns = [],
1916
+ passwords = [];
1917
1917
  let usersObj = await zRoute.getUsers();
1918
1918
  if (Object.prototype.hasOwnProperty.call(MYMODEL, "widgets")) {
1919
1919
  for (let key in MYMODEL.widgets) {
@@ -1943,37 +1943,37 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1943
1943
  let t;
1944
1944
  if (field == "company_id") {
1945
1945
  t = !callback(result, field)
1946
- ? result.company_id
1947
- : callback(result, field);
1946
+ ? result.company_id
1947
+ : callback(result, field);
1948
1948
  } else if (field == "created_at" || field == "updated_at") {
1949
1949
  worksheet.getCell(sequence[i] + start).numFmt = "@";
1950
1950
  result[field] = Util.dateOriginal(result[field]);
1951
1951
  t = !callback(result, field)
1952
- ? Util.timeSql(result[field])
1953
- : callback(result, field);
1952
+ ? Util.timeSql(result[field])
1953
+ : callback(result, field);
1954
1954
  } else if (Util.in_array(field, ["created_by", "updated_by"])) {
1955
1955
  if (isRaws) {
1956
1956
  t = !callback(result, field)
1957
- ? result[field]
1958
- : callback(result, field);
1957
+ ? result[field]
1958
+ : callback(result, field);
1959
1959
  } else {
1960
1960
  t = !callback(result, field)
1961
- ? usersObj[result[field]].fullname
1962
- : callback(result, field);
1961
+ ? usersObj[result[field]].fullname
1962
+ : callback(result, field);
1963
1963
  }
1964
1964
  } else {
1965
1965
  // callback will call if you have
1966
1966
  if (Util.in_array(field, relations)) {
1967
1967
  if (isRaws) {
1968
1968
  t = !callback(result, field)
1969
- ? result[field]
1970
- : callback(result, field);
1969
+ ? result[field]
1970
+ : callback(result, field);
1971
1971
  } else {
1972
1972
  const objectData = tableObj[field] || {};
1973
1973
  if (!callback(result, field)) {
1974
1974
  if (
1975
- result[field] &&
1976
- Object.hasOwn(objectData[result[field]], "zname")
1975
+ result[field] &&
1976
+ Object.hasOwn(objectData[result[field]], "zname")
1977
1977
  ) {
1978
1978
  t = objectData[result[field]]["zname"];
1979
1979
  } else {
@@ -1985,74 +1985,74 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1985
1985
  }
1986
1986
  } else if (Util.in_array(field, dropdowns)) {
1987
1987
  t = !callback(result, field)
1988
- ? MYMODEL.dropdowns[field].fields[result[field]]
1989
- : callback(result, field);
1988
+ ? MYMODEL.dropdowns[field].fields[result[field]]
1989
+ : callback(result, field);
1990
1990
  } else if (Util.in_array(field, passwords)) {
1991
1991
  t = "xxxxxx";
1992
1992
  } else if (
1993
- widgets.hasOwnProperty(field) &&
1994
- widgets[field].name == "select"
1993
+ widgets.hasOwnProperty(field) &&
1994
+ widgets[field].name == "select"
1995
1995
  ) {
1996
1996
  if (isRaws) {
1997
1997
  t = !callback(result, field)
1998
- ? result[field]
1999
- : callback(result, field);
1998
+ ? result[field]
1999
+ : callback(result, field);
2000
2000
  } else {
2001
2001
  t = !callback(result, field)
2002
- ? Object.hasOwn(tableObj[field], result[field])
2003
- ? tableObj[field][result[field]]
2004
- : result[field]
2005
- : callback(result, field);
2002
+ ? Object.hasOwn(tableObj[field], result[field])
2003
+ ? tableObj[field][result[field]]
2004
+ : result[field]
2005
+ : callback(result, field);
2006
2006
  }
2007
2007
  } else if (
2008
- widgets.hasOwnProperty(field) &&
2009
- widgets[field].name == "datetime"
2008
+ widgets.hasOwnProperty(field) &&
2009
+ widgets[field].name == "datetime"
2010
2010
  ) {
2011
2011
  result[field] = Util.dateOriginal(result[field]);
2012
2012
  worksheet.getCell(sequence[i] + start).numFmt = "@";
2013
2013
  if (isRaws) {
2014
2014
  t = !callback(result, field)
2015
- ? Util.timeSql(result[field])
2016
- : callback(result, field);
2015
+ ? Util.timeSql(result[field])
2016
+ : callback(result, field);
2017
2017
  } else {
2018
2018
  t = !callback(result, field)
2019
- ? Util.timeSql(result[field])
2020
- : callback(result, field);
2019
+ ? Util.timeSql(result[field])
2020
+ : callback(result, field);
2021
2021
  }
2022
2022
  } else if (
2023
- widgets.hasOwnProperty(field) &&
2024
- widgets[field].name == "datepicker"
2023
+ widgets.hasOwnProperty(field) &&
2024
+ widgets[field].name == "datepicker"
2025
2025
  ) {
2026
2026
  worksheet.getCell(sequence[i] + start).numFmt = "@";
2027
2027
  if (isRaws) {
2028
2028
  t = !callback(result, field)
2029
- ? Util.dateFormat(result[field])
2030
- : callback(result, field);
2029
+ ? Util.dateFormat(result[field])
2030
+ : callback(result, field);
2031
2031
  } else {
2032
2032
  t = !callback(result, field)
2033
- ? Util.dateFormat(result[field])
2034
- : callback(result, field);
2033
+ ? Util.dateFormat(result[field])
2034
+ : callback(result, field);
2035
2035
  }
2036
2036
  } else if (
2037
- widgets.hasOwnProperty(field) &&
2038
- widgets[field].name == "switch"
2037
+ widgets.hasOwnProperty(field) &&
2038
+ widgets[field].name == "switch"
2039
2039
  ) {
2040
2040
  if (isRaws) {
2041
2041
  t = !callback(result, field)
2042
- ? result[field]
2043
- : callback(result, field);
2042
+ ? result[field]
2043
+ : callback(result, field);
2044
2044
  } else {
2045
2045
  t = !callback(result, field)
2046
- ? tableObj[field][result[field]] || ""
2047
- : callback(result, field);
2046
+ ? tableObj[field][result[field]] || ""
2047
+ : callback(result, field);
2048
2048
  }
2049
2049
  } 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")
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")
2056
2056
  ) {
2057
2057
  let myvalue = "";
2058
2058
  if (widgets[field].import_field && widgets[field].import_field != "id") {
@@ -2063,23 +2063,23 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
2063
2063
  dropdownmultivalue.push(relations[field][item].zname);
2064
2064
  });
2065
2065
  result[field] = result[field]
2066
- ? JSON.stringify(dropdownmultivalue)
2067
- : "";
2066
+ ? JSON.stringify(dropdownmultivalue)
2067
+ : "";
2068
2068
  }
2069
2069
  } else {
2070
2070
  if (isNaN(result[field])) {
2071
2071
  myvalue = result[field];
2072
2072
  } else {
2073
2073
  myvalue = result[field]
2074
- ? aliasResults[field][result[field]][
2075
- widgets[field].import_field
2076
- ]
2077
- : "";
2074
+ ? aliasResults[field][result[field]][
2075
+ widgets[field].import_field
2076
+ ]
2077
+ : "";
2078
2078
  result[field] = result[field]
2079
- ? aliasResults[field][result[field]][
2080
- widgets[field].import_field
2081
- ]
2082
- : "";
2079
+ ? aliasResults[field][result[field]][
2080
+ widgets[field].import_field
2081
+ ]
2082
+ : "";
2083
2083
  }
2084
2084
  }
2085
2085
  } else {
@@ -2093,15 +2093,15 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
2093
2093
  }
2094
2094
  if (isRaws) {
2095
2095
  t = !callback(result, field)
2096
- ? result[field]
2097
- : callback(result, field);
2096
+ ? result[field]
2097
+ : callback(result, field);
2098
2098
  } else {
2099
2099
  t = !callback(result, field) ? myvalue : callback(result, field);
2100
2100
  }
2101
2101
  } else {
2102
2102
  t = !callback(result, field)
2103
- ? result[field]
2104
- : callback(result, field);
2103
+ ? result[field]
2104
+ : callback(result, field);
2105
2105
  }
2106
2106
  }
2107
2107
 
@@ -2113,8 +2113,8 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
2113
2113
 
2114
2114
  fileName = fileName || routeName + "_" + new Date().getTime() + ".xlsx";
2115
2115
  res.setHeader(
2116
- "Content-Type",
2117
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
2116
+ "Content-Type",
2117
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
2118
2118
  );
2119
2119
  res.setHeader("Content-Disposition", "attachment; filename=" + fileName);
2120
2120
  await workbook.xlsx.write(res);
@@ -2140,10 +2140,10 @@ zRoute.pdf = async (req, res, MYMODEL, fields, rows, callback) => {
2140
2140
  //check relations
2141
2141
  let isRelations = false;
2142
2142
  let relations = [],
2143
- tableObj = {},
2144
- obj = {},
2145
- dropdowns = [],
2146
- passwords = [];
2143
+ tableObj = {},
2144
+ obj = {},
2145
+ dropdowns = [],
2146
+ passwords = [];
2147
2147
  let usersObj = await zRoute.getUsers();
2148
2148
  if (Object.prototype.hasOwnProperty.call(MYMODEL, "widgets")) {
2149
2149
  for (let key in MYMODEL.widgets) {
@@ -2171,28 +2171,28 @@ zRoute.pdf = async (req, res, MYMODEL, fields, rows, callback) => {
2171
2171
  var t;
2172
2172
  if (field == "company_id") {
2173
2173
  t = !callback(result, field)
2174
- ? result.company_id
2175
- : callback(result, field);
2174
+ ? result.company_id
2175
+ : callback(result, field);
2176
2176
  } else if (field == "created_at" || field == "created_at") {
2177
2177
  t = !callback(result, field)
2178
- ? Util.timeSql(result[field])
2179
- : callback(result, field);
2178
+ ? Util.timeSql(result[field])
2179
+ : callback(result, field);
2180
2180
  } else if (field == "updated_at" || field == "updated_at") {
2181
2181
  t = !callback(result, field)
2182
- ? Util.timeSql(result[field])
2183
- : callback(result, field);
2182
+ ? Util.timeSql(result[field])
2183
+ : callback(result, field);
2184
2184
  } else if (Util.in_array(field, ["created_by", "updated_by"])) {
2185
2185
  t = !callback(result, field)
2186
- ? usersObj[result[field]]
2187
- : callback(result, field);
2186
+ ? usersObj[result[field]]
2187
+ : callback(result, field);
2188
2188
  } else {
2189
2189
  // callback will call if you have
2190
2190
  if (Util.in_array(field, relations)) {
2191
2191
  const objectData = tableObj[field] || {};
2192
2192
  if (!callback(result, field)) {
2193
2193
  if (
2194
- result[field] &&
2195
- Object.hasOwn(objectData[result[field]], "zname")
2194
+ result[field] &&
2195
+ Object.hasOwn(objectData[result[field]], "zname")
2196
2196
  ) {
2197
2197
  t = objectData[result[field]]["zname"];
2198
2198
  } else {
@@ -2203,38 +2203,38 @@ zRoute.pdf = async (req, res, MYMODEL, fields, rows, callback) => {
2203
2203
  }
2204
2204
  } else if (Util.in_array(field, dropdowns)) {
2205
2205
  t = !callback(result, field)
2206
- ? MYMODEL.dropdowns[field].fields[result[field]]
2207
- : callback(result, field);
2206
+ ? MYMODEL.dropdowns[field].fields[result[field]]
2207
+ : callback(result, field);
2208
2208
  } else if (Util.in_array(field, passwords)) {
2209
2209
  t = "xxxxxx";
2210
2210
  } else if (MYMODEL.widgets[field].name == "select") {
2211
2211
  t = !callback(result, field)
2212
- ? Object.hasOwn(tableObj[field], result[field])
2213
- ? tableObj[field][result[field]]
2214
- : result[field]
2215
- : callback(result, field);
2212
+ ? Object.hasOwn(tableObj[field], result[field])
2213
+ ? tableObj[field][result[field]]
2214
+ : result[field]
2215
+ : callback(result, field);
2216
2216
  } else if (MYMODEL.widgets[field].name == "datetime") {
2217
2217
  t = !callback(result, field)
2218
- ? Util.timeSql(result[field])
2219
- : callback(result, field);
2218
+ ? Util.timeSql(result[field])
2219
+ : callback(result, field);
2220
2220
  } else if (MYMODEL.widgets[field].name == "datepicker") {
2221
2221
  t = !callback(result, field)
2222
- ? Util.dateFormat(result[field])
2223
- : callback(result, field);
2222
+ ? Util.dateFormat(result[field])
2223
+ : callback(result, field);
2224
2224
  } else if (MYMODEL.widgets[field].name == "switch") {
2225
2225
  t = !callback(result, field)
2226
- ? tableObj[field][result[field]] || ""
2227
- : callback(result, field);
2226
+ ? tableObj[field][result[field]] || ""
2227
+ : callback(result, field);
2228
2228
  } else if (MYMODEL.widgets[field].name == "relation") {
2229
2229
  if (relations[field][result[field]]) {
2230
2230
  t = !callback(result, field)
2231
- ? relations[field][result[field]].zname || ""
2232
- : callback(result, field);
2231
+ ? relations[field][result[field]].zname || ""
2232
+ : callback(result, field);
2233
2233
  }
2234
2234
  } else {
2235
2235
  t = !callback(result, field)
2236
- ? result[field] || ""
2237
- : callback(result, field);
2236
+ ? result[field] || ""
2237
+ : callback(result, field);
2238
2238
  }
2239
2239
  }
2240
2240
  //worksheet.getCell(sequence[i] + start).value = t;
@@ -2308,9 +2308,9 @@ zRoute.generatePDF = async (file, layout = "pdf_bootstrap", options = {}) => {
2308
2308
  let mylayout = `${dirRoot}/views/layouts/${layout}.ejs`;
2309
2309
  if (file.content) {
2310
2310
  const html = await ejs.renderFile(
2311
- mylayout,
2312
- { data: file.content },
2313
- { async: true }
2311
+ mylayout,
2312
+ { data: file.content },
2313
+ { async: true }
2314
2314
  );
2315
2315
  await page.setContent(html, {
2316
2316
  waitUntil: "load",
@@ -2388,21 +2388,21 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2388
2388
  const MYMODEL = objData.MYMODEL || {};
2389
2389
  const table = MYMODEL.table;
2390
2390
  const fields = Object.prototype.hasOwnProperty.call(objData, "fields")
2391
- ? objData.fields
2392
- : req.body.fields;
2391
+ ? objData.fields
2392
+ : req.body.fields;
2393
2393
  let relations = await zRoute.relations(
2394
- req,
2395
- res,
2396
- MYMODEL.table,
2397
- visibleColumns
2394
+ req,
2395
+ res,
2396
+ MYMODEL.table,
2397
+ visibleColumns
2398
2398
  );
2399
2399
  //find relation with joins
2400
2400
  const select = Object.prototype.hasOwnProperty.call(objData, "select")
2401
- ? objData.select
2402
- : Util.selectParser(fields, MYMODEL);
2401
+ ? objData.select
2402
+ : Util.selectParser(fields, MYMODEL);
2403
2403
  const columns = Object.prototype.hasOwnProperty.call(objData, "columns")
2404
- ? objData.columns
2405
- : body.columns;
2404
+ ? objData.columns
2405
+ : body.columns;
2406
2406
  const asDate = [];
2407
2407
  const asJSONb = [];
2408
2408
  const asArray = [];
@@ -2414,16 +2414,16 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2414
2414
  asDate.push(key);
2415
2415
  }
2416
2416
  if (
2417
- MYMODEL.widgets[key].name == "dropdown_multi" ||
2418
- MYMODEL.widgets[key].name == "dragdrop" ||
2419
- MYMODEL.widgets[key].name == "dropdown_checkbox"
2417
+ MYMODEL.widgets[key].name == "dropdown_multi" ||
2418
+ MYMODEL.widgets[key].name == "dragdrop" ||
2419
+ MYMODEL.widgets[key].name == "dropdown_checkbox"
2420
2420
  ) {
2421
2421
  asJSONb.push(key);
2422
2422
  }
2423
2423
  if (
2424
- MYMODEL.widgets[key].name == "json_array" ||
2425
- MYMODEL.widgets[key].name == "array" ||
2426
- MYMODEL.widgets[key].name == "dropzone"
2424
+ MYMODEL.widgets[key].name == "json_array" ||
2425
+ MYMODEL.widgets[key].name == "array" ||
2426
+ MYMODEL.widgets[key].name == "dropzone"
2427
2427
  ) {
2428
2428
  asArray.push(key);
2429
2429
  }
@@ -2465,9 +2465,9 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2465
2465
  field: "",
2466
2466
  option: "",
2467
2467
  value: ` ${Util.fieldWithTable(
2468
- fields[item.data],
2469
- MYMODEL,
2470
- true
2468
+ fields[item.data],
2469
+ MYMODEL,
2470
+ true
2471
2471
  )}::text ILIKE '${item.search.value}' `,
2472
2472
  operator: "AND",
2473
2473
  type: "inline",
@@ -2485,13 +2485,13 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2485
2485
  });
2486
2486
 
2487
2487
  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];
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];
2495
2495
  let gridData = {
2496
2496
  select: select,
2497
2497
  table: MYMODEL.table,
@@ -2520,8 +2520,8 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2520
2520
  let datas = [];
2521
2521
  const zRole = objData.zRole || require("./zRole");
2522
2522
  const levels = objData.hasOwnProperty("levels")
2523
- ? objData.levels
2524
- : zRole.myLevel(req, res, MYMODEL.table);
2523
+ ? objData.levels
2524
+ : zRole.myLevel(req, res, MYMODEL.table);
2525
2525
  if (objData.hasOwnProperty("datas")) {
2526
2526
  datas = objData.datas(body, rows, fields, relations, levels);
2527
2527
  } else {
@@ -2530,32 +2530,32 @@ zRoute.listDataTable = async (req, res, objData = {}, visibleColumns = []) => {
2530
2530
  fields.forEach(function (item) {
2531
2531
  if (item == "no") {
2532
2532
  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
- }`
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
+ }`
2538
2538
  );
2539
2539
  } else if (item == "actionColumn") {
2540
2540
  let buttons = objData.hasOwnProperty("actionButtons")
2541
- ? objData.actionButtons(levels, row, MYMODEL.table)
2542
- : zRoute.actionButtons(levels, row, MYMODEL.table);
2541
+ ? objData.actionButtons(levels, row, MYMODEL.table)
2542
+ : zRoute.actionButtons(levels, row, MYMODEL.table);
2543
2543
  arr.push(buttons);
2544
2544
  } else {
2545
2545
  let data = objData.hasOwnProperty("dataTableData")
2546
- ? objData.dataTableData(
2547
- item,
2548
- row[item],
2549
- MYMODEL,
2550
- relations,
2551
- row.id
2546
+ ? objData.dataTableData(
2547
+ item,
2548
+ row[item],
2549
+ MYMODEL,
2550
+ relations,
2551
+ row.id
2552
2552
  )
2553
- : zRoute.dataTableData(
2554
- item,
2555
- row[item],
2556
- MYMODEL,
2557
- relations,
2558
- row.id
2553
+ : zRoute.dataTableData(
2554
+ item,
2555
+ row[item],
2556
+ MYMODEL,
2557
+ relations,
2558
+ row.id
2559
2559
  );
2560
2560
  arr.push(data);
2561
2561
  }
@@ -2601,16 +2601,16 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2601
2601
  asDate.push(key);
2602
2602
  }
2603
2603
  if (
2604
- MYMODEL.widgets[key].name == "dropdown_multi" ||
2605
- MYMODEL.widgets[key].name == "dragdrop" ||
2606
- MYMODEL.widgets[key].name == "dropdown_checkbox"
2604
+ MYMODEL.widgets[key].name == "dropdown_multi" ||
2605
+ MYMODEL.widgets[key].name == "dragdrop" ||
2606
+ MYMODEL.widgets[key].name == "dropdown_checkbox"
2607
2607
  ) {
2608
2608
  asJSONb.push(key);
2609
2609
  }
2610
2610
  if (
2611
- MYMODEL.widgets[key].name == "json_array" ||
2612
- MYMODEL.widgets[key].name == "array" ||
2613
- MYMODEL.widgets[key].name == "dropzone"
2611
+ MYMODEL.widgets[key].name == "json_array" ||
2612
+ MYMODEL.widgets[key].name == "array" ||
2613
+ MYMODEL.widgets[key].name == "dropzone"
2614
2614
  ) {
2615
2615
  asArray.push(key);
2616
2616
  }
@@ -2657,9 +2657,9 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2657
2657
  field: "",
2658
2658
  option: "",
2659
2659
  value: ` ${Util.fieldWithTable(
2660
- fields[item.data],
2661
- MYMODEL,
2662
- true
2660
+ fields[item.data],
2661
+ MYMODEL,
2662
+ true
2663
2663
  )}::text ILIKE '${item.search.value}' `,
2664
2664
  operator: "AND",
2665
2665
  type: "inline",
@@ -2669,9 +2669,9 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2669
2669
  field: "",
2670
2670
  option: "",
2671
2671
  value: ` ${Util.fieldWithTable(
2672
- fields[item.data],
2673
- MYMODEL,
2674
- true
2672
+ fields[item.data],
2673
+ MYMODEL,
2674
+ true
2675
2675
  )}::text ILIKE '${item.search.value}' `,
2676
2676
  operator: "AND",
2677
2677
  type: "inline",
@@ -2688,13 +2688,13 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2688
2688
  }
2689
2689
  });
2690
2690
  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];
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];
2698
2698
  if (Util.in_array(fields[body.order[0].column], asTables)) {
2699
2699
  orderColumn = `${table}.${fields[body.order[0].column]}::text`;
2700
2700
  }
@@ -2727,27 +2727,27 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2727
2727
  fields.forEach(function (item) {
2728
2728
  if (item == "no") {
2729
2729
  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
- }`
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
+ }`
2735
2735
  );
2736
2736
  } else if (item == "actionColumn") {
2737
2737
  let buttons = !actionButtonsFn(levels, row, MYMODEL.table)
2738
- ? zRoute.actionButtons(levels, row, MYMODEL.table)
2739
- : actionButtonsFn(levels, row, MYMODEL.table);
2738
+ ? zRoute.actionButtons(levels, row, MYMODEL.table)
2739
+ : actionButtonsFn(levels, row, MYMODEL.table);
2740
2740
  arr.push(buttons);
2741
2741
  } else {
2742
2742
  arr.push(
2743
- zRoute.dataTableData(
2744
- item,
2745
- row[item],
2746
- MYMODEL,
2747
- relations,
2748
- row.id,
2749
- companyId
2750
- )
2743
+ zRoute.dataTableData(
2744
+ item,
2745
+ row[item],
2746
+ MYMODEL,
2747
+ relations,
2748
+ row.id,
2749
+ companyId
2750
+ )
2751
2751
  );
2752
2752
  }
2753
2753
  });
@@ -2907,8 +2907,8 @@ zRoute.chains = async (req, res) => {
2907
2907
  results.forEach(function (result) {
2908
2908
  var selected = result.id == currentValue ? " selected " : "";
2909
2909
  data[
2910
- target
2911
- ] += `<option value="${result.id}" ${selected} >${result.zname}</option>`;
2910
+ target
2911
+ ] += `<option value="${result.id}" ${selected} >${result.zname}</option>`;
2912
2912
  });
2913
2913
  }
2914
2914
  }
@@ -2965,9 +2965,9 @@ zRoute.formsFieldSync = async (req, res, MYMODEL, data = {}) => {
2965
2965
  for (let key in MYMODEL.widgets) {
2966
2966
  if (MYMODEL.widgets[key].name == "table") {
2967
2967
  tableRelations[key] = await zRoute.relations(
2968
- req,
2969
- res,
2970
- MYMODEL.widgets[key].table
2968
+ req,
2969
+ res,
2970
+ MYMODEL.widgets[key].table
2971
2971
  );
2972
2972
  //console.log("tabelrelations", JSON.stringify(tableRelations[key]))
2973
2973
  } else if (MYMODEL.widgets[key].name == "typeahead") {
@@ -3009,12 +3009,12 @@ zRoute.formFieldSync = async (req, res, MYMODEL, relations, data = {}) => {
3009
3009
  };
3010
3010
 
3011
3011
  zRoute.forms = (
3012
- req,
3013
- res,
3014
- MYMODEL,
3015
- relations,
3016
- data = {},
3017
- tableRelations = {}
3012
+ req,
3013
+ res,
3014
+ MYMODEL,
3015
+ relations,
3016
+ data = {},
3017
+ tableRelations = {}
3018
3018
  ) => {
3019
3019
  relations = relations || {};
3020
3020
  let MYMODELS = zRoute.MYMODELS();
@@ -3121,12 +3121,12 @@ zRoute.forms = (
3121
3121
  dropzone_data_arr.push({ fileName: item, size: fileSizeInBytes });
3122
3122
  });
3123
3123
  myCache.set(
3124
- `dropzone__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
3125
- obj.value
3124
+ `dropzone__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
3125
+ obj.value
3126
3126
  );
3127
3127
  }
3128
3128
  let dropzoneValue =
3129
- obj.value.length > 0 ? JSON.stringify(dropzone_data_arr) : "[]";
3129
+ obj.value.length > 0 ? JSON.stringify(dropzone_data_arr) : "[]";
3130
3130
  script += `let dropzone_${key}_data = ${dropzoneValue};`;
3131
3131
  obj.type = "dropzone";
3132
3132
  obj.class = "dropzone boxy-tiny d-block";
@@ -3153,12 +3153,12 @@ zRoute.forms = (
3153
3153
  dropbox_data_arr.push({ fileName: item, size: fileSizeInBytes });
3154
3154
  });
3155
3155
  myCache.set(
3156
- `dropbox__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
3157
- obj.value
3156
+ `dropbox__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
3157
+ obj.value
3158
3158
  );
3159
3159
  }
3160
3160
  let dropboxValue =
3161
- obj.value.length > 0 ? JSON.stringify(dropbox_data_arr) : "[]";
3161
+ obj.value.length > 0 ? JSON.stringify(dropbox_data_arr) : "[]";
3162
3162
  script += `let dropbox_${key}_data = ${dropboxValue};`;
3163
3163
  obj.type = "dropbox";
3164
3164
  obj.class = "dropzone boxy-tiny d-block";
@@ -3169,8 +3169,8 @@ zRoute.forms = (
3169
3169
  script += `document.addEventListener("DOMContentLoaded", () => {
3170
3170
  setTimeout(function () {
3171
3171
  window.importFile(window.LexicalEditor,${JSON.stringify(
3172
- obj.value
3173
- )});
3172
+ obj.value
3173
+ )});
3174
3174
  }, 1000);
3175
3175
  });`;
3176
3176
  }
@@ -3199,10 +3199,10 @@ zRoute.forms = (
3199
3199
  obj.type = "select";
3200
3200
  var htmlOptions = ` <a href="/${widgets[key].table}" target="_blank"> > </a>`;
3201
3201
  forms.label[key] = cForm.label(
3202
- key,
3203
- fields[key].title,
3204
- fields[key].required,
3205
- htmlOptions
3202
+ key,
3203
+ fields[key].title,
3204
+ fields[key].required,
3205
+ htmlOptions
3206
3206
  );
3207
3207
  obj.data = relations[key];
3208
3208
  obj.please_select = widgets[key].please_select;
@@ -3210,9 +3210,9 @@ zRoute.forms = (
3210
3210
  case "typeahead":
3211
3211
  obj.type = "typeahead";
3212
3212
  forms.label[key] = cForm.label(
3213
- key,
3214
- fields[key].title,
3215
- fields[key].required
3213
+ key,
3214
+ fields[key].title,
3215
+ fields[key].required
3216
3216
  );
3217
3217
  //obj.data = relations[key];
3218
3218
  /*obj.typeaheadvalue = !data[key]
@@ -3225,10 +3225,10 @@ zRoute.forms = (
3225
3225
  obj.type = "select";
3226
3226
  var htmlOptions = ` <a href="/${widgets[key].table}" target="_blank"> > </a>`;
3227
3227
  forms.label[key] = cForm.label(
3228
- key,
3229
- fields[key].title,
3230
- fields[key].required,
3231
- htmlOptions
3228
+ key,
3229
+ fields[key].title,
3230
+ fields[key].required,
3231
+ htmlOptions
3232
3232
  );
3233
3233
  obj.data = relations[key + "Row"];
3234
3234
  break;
@@ -3265,7 +3265,7 @@ zRoute.forms = (
3265
3265
  obj.type = "datetimepicker";
3266
3266
  obj.class = "form-control datetimepicker";
3267
3267
  obj.value =
3268
- obj.value == "0000-00-00 00:00:00" ? "" : Util.timeSql(obj.value);
3268
+ obj.value == "0000-00-00 00:00:00" ? "" : Util.timeSql(obj.value);
3269
3269
  break;
3270
3270
  case "clockpicker":
3271
3271
  obj.type = "input";
@@ -3291,10 +3291,10 @@ zRoute.forms = (
3291
3291
  break;
3292
3292
  case "ide_editor":
3293
3293
  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>`
3294
+ key,
3295
+ fields[key].title,
3296
+ fields[key].required,
3297
+ ` <span class="badge bg-primary float-end boxy-small">${widgets[key].language}</span>`
3298
3298
  );
3299
3299
  obj.labelOptions = ` <span class="badge bg-primary float-end boxy-small">${widgets[key].language}</span>`;
3300
3300
  obj.type = "ide_editor";
@@ -3319,14 +3319,14 @@ zRoute.forms = (
3319
3319
  //console.log(obj.properties)
3320
3320
  //(req, res, relations, dataObject, parentTable, fieldName, MYMODEL, datas = [])
3321
3321
  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
3322
+ req,
3323
+ res,
3324
+ tableRelations[key],
3325
+ obj.data,
3326
+ MYMODEL.table,
3327
+ key,
3328
+ MYMODELS[MYMODEL.widgets[key].table],
3329
+ obj.value
3330
3330
  );
3331
3331
  break;
3332
3332
  case "multi_line_editor":
@@ -3422,8 +3422,8 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
3422
3422
  script += `$(()=> {
3423
3423
  ajaxPost('/ztab-access',{table:"${MYMODEL.table}"},(data)=> {
3424
3424
  let dataTabs = ${
3425
- MYMODEL.hasOwnProperty("tabs") ? JSON.stringify(MYMODEL.tabs) : []
3426
- };
3425
+ MYMODEL.hasOwnProperty("tabs") ? JSON.stringify(MYMODEL.tabs) : []
3426
+ };
3427
3427
  let viewAccess = data.view || [];
3428
3428
  let createAccess = data.create || [];
3429
3429
  let editAccess = data.edit || [];
@@ -3462,11 +3462,11 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
3462
3462
  let MODEL = MYMODELS[MYMODEL.widgets[obj.id].table];
3463
3463
  const relationsTable = await zRoute.relations(req, res, MODEL.table);
3464
3464
  let tableForms = zRoute.viewForm(
3465
- req,
3466
- res,
3467
- MODEL,
3468
- relationsTable,
3469
- obj.value || []
3465
+ req,
3466
+ res,
3467
+ MODEL,
3468
+ relationsTable,
3469
+ obj.value || []
3470
3470
  );
3471
3471
  let properties = obj.properties;
3472
3472
  let tableProperties = {};
@@ -3486,13 +3486,13 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
3486
3486
  if (val.length) {
3487
3487
  val.forEach(function (item) {
3488
3488
  let myforms = zRoute.viewForm(
3489
- req,
3490
- res,
3491
- MODEL,
3492
- relationsTable,
3493
- item,
3494
- MYMODEL,
3495
- key
3489
+ req,
3490
+ res,
3491
+ MODEL,
3492
+ relationsTable,
3493
+ item,
3494
+ MYMODEL,
3495
+ key
3496
3496
  );
3497
3497
  html += `<tr>`;
3498
3498
  for (let k in obj.data) {
@@ -3513,16 +3513,28 @@ zRoute.viewFormsSync = async (req, res, MYMODEL, data = {}) => {
3513
3513
  let APPROVAL_LEVELS = myCache.get("APPROVAL_LEVELS");
3514
3514
  let USERS = Util.arrayToObject(myCache.get("zuser_created_by_1"), "id");
3515
3515
  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
3516
+ APPROVAL_LEVELS[data.approval_status].name
3517
3517
  }</button>`;
3518
- approval_history_table += `<ul class="dropdown-menu" aria-labelledby="viewApproval">`;
3518
+ approval_history_table += `<ul class="dropdown-menu" aria-labelledby="viewApproval" style="min-width: 300px">`;
3519
3519
  let arr = data.approval_history || [];
3520
+ arr = arr.reverse();
3521
+
3520
3522
  arr.map((item, index) => {
3523
+ let statusName = ' '
3524
+ if(item.status == 6){
3525
+ statusName = "Comment"
3526
+ } else if(item.status == 4){
3527
+ statusName = "Reject"
3528
+ } else if(item.status == 3) {
3529
+ statusName = "Approve"
3530
+ } else {
3531
+ statusName = APPROVAL_LEVELS[item.status] ? APPROVAL_LEVELS[item.status].name : ''
3532
+ }
3521
3533
  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>`;
3534
+ index + 1
3535
+ }. ${
3536
+ USERS[item.user_id].zname
3537
+ } (${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
3538
  });
3527
3539
  approval_history_table += `</ul></div>`;
3528
3540
  }
@@ -3570,13 +3582,13 @@ zRoute.viewFormSync = (req, res, MYMODEL, relations, data = {}) => {
3570
3582
  };
3571
3583
 
3572
3584
  zRoute.viewForm = (
3573
- req,
3574
- res,
3575
- MYMODEL,
3576
- relations,
3577
- data = {},
3578
- MODEL_TABLE = {},
3579
- keyName = ""
3585
+ req,
3586
+ res,
3587
+ MYMODEL,
3588
+ relations,
3589
+ data = {},
3590
+ MODEL_TABLE = {},
3591
+ keyName = ""
3580
3592
  ) => {
3581
3593
  let isTableType = Object.keys(MODEL_TABLE).length > 0 ? true : false;
3582
3594
  let forms = zRoute.forms(req, res, MYMODEL, relations, data);
@@ -3607,36 +3619,36 @@ zRoute.viewForm = (
3607
3619
  let width = widgets[key].width || "300";
3608
3620
  if (isTableType) {
3609
3621
  obj[key].value = Util.fileView(
3610
- `/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
3611
- data[key],
3612
- {
3613
- width: width,
3614
- class: "boxy zoom",
3615
- }
3622
+ `/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
3623
+ data[key],
3624
+ {
3625
+ width: width,
3626
+ class: "boxy zoom",
3627
+ }
3616
3628
  );
3617
3629
  } else {
3618
3630
  obj[key].value =
3619
- "<br><br>" +
3620
- Util.fileView(`/uploads/${MYMODEL.routeName}/`, data[key], {
3621
- width: width,
3622
- class: "boxy zoom",
3623
- });
3631
+ "<br><br>" +
3632
+ Util.fileView(`/uploads/${MYMODEL.routeName}/`, data[key], {
3633
+ width: width,
3634
+ class: "boxy zoom",
3635
+ });
3624
3636
  }
3625
3637
  break;
3626
3638
  case "file":
3627
3639
  obj[key].type = "plaintext";
3628
3640
  if (isTableType) {
3629
3641
  obj[key].value = Util.fileView(
3630
- `/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
3631
- data[key],
3632
- { withIcon: true }
3642
+ `/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
3643
+ data[key],
3644
+ { withIcon: true }
3633
3645
  );
3634
3646
  } else {
3635
3647
  obj[key].value =
3636
- "<br><br>" +
3637
- Util.fileView(`/uploads/${MYMODEL.routeName}/`, data[key], {
3638
- withIcon: true,
3639
- });
3648
+ "<br><br>" +
3649
+ Util.fileView(`/uploads/${MYMODEL.routeName}/`, data[key], {
3650
+ withIcon: true,
3651
+ });
3640
3652
  }
3641
3653
  break;
3642
3654
  case "switch":
@@ -3648,11 +3660,11 @@ zRoute.viewForm = (
3648
3660
  prepend = `<br>`;
3649
3661
  }
3650
3662
  value = data[key]
3651
- ? widgets[key].fields[data[key]]
3652
- : widgets[key].fields[0];
3663
+ ? widgets[key].fields[data[key]]
3664
+ : widgets[key].fields[0];
3653
3665
  obj[
3654
- key
3655
- ].value = `${prepend}<div class="purple-border">${value}</div>`;
3666
+ key
3667
+ ].value = `${prepend}<div class="purple-border">${value}</div>`;
3656
3668
  break;
3657
3669
  case "relation":
3658
3670
  obj[key].type = "text";
@@ -3721,12 +3733,12 @@ zRoute.usersCommon = (res) => {
3721
3733
  };
3722
3734
 
3723
3735
  zRoute.viewTable = async (
3724
- req,
3725
- res,
3726
- MYMODEL,
3727
- results,
3728
- isPreview,
3729
- hasKeys = ""
3736
+ req,
3737
+ res,
3738
+ MYMODEL,
3739
+ results,
3740
+ isPreview,
3741
+ hasKeys = ""
3730
3742
  ) => {
3731
3743
  isPreview = isPreview || false;
3732
3744
  let data = {};
@@ -3757,26 +3769,26 @@ zRoute.viewTable = async (
3757
3769
  case "image":
3758
3770
  if (hasKeys) {
3759
3771
  data[key] = Util.fileView(
3760
- "/uploads/" + hasKeys + "/",
3761
- results[key]
3772
+ "/uploads/" + hasKeys + "/",
3773
+ results[key]
3762
3774
  );
3763
3775
  } else {
3764
3776
  data[key] = Util.fileView(
3765
- "/uploads/" + routeName + "/",
3766
- results[key]
3777
+ "/uploads/" + routeName + "/",
3778
+ results[key]
3767
3779
  );
3768
3780
  }
3769
3781
  break;
3770
3782
  case "file":
3771
3783
  if (hasKeys) {
3772
3784
  data[key] = Util.fileView(
3773
- "/uploads/" + hasKeys + "/",
3774
- results[key]
3785
+ "/uploads/" + hasKeys + "/",
3786
+ results[key]
3775
3787
  );
3776
3788
  } else {
3777
3789
  data[key] = Util.fileView(
3778
- "/uploads/" + routeName + "/",
3779
- results[key]
3790
+ "/uploads/" + routeName + "/",
3791
+ results[key]
3780
3792
  );
3781
3793
  }
3782
3794
  break;
@@ -3798,22 +3810,22 @@ zRoute.viewTable = async (
3798
3810
  case "relation":
3799
3811
  if (results[key]) {
3800
3812
  row =
3801
- (await connection.result({
3802
- table: widgets[key].table,
3803
- select: widgets[key].fields[1] + " as zname",
3804
- where: { id: results[key] },
3805
- })) || {};
3813
+ (await connection.result({
3814
+ table: widgets[key].table,
3815
+ select: widgets[key].fields[1] + " as zname",
3816
+ where: { id: results[key] },
3817
+ })) || {};
3806
3818
  }
3807
3819
  data[key] = !row.zname ? "" : row.zname;
3808
3820
  break;
3809
3821
  case "typeahead":
3810
3822
  if (results[key]) {
3811
3823
  row =
3812
- (await connection.result({
3813
- table: widgets[key].table,
3814
- select: widgets[key].fields[1] + " as zname",
3815
- where: { id: results[key] },
3816
- })) || {};
3824
+ (await connection.result({
3825
+ table: widgets[key].table,
3826
+ select: widgets[key].fields[1] + " as zname",
3827
+ where: { id: results[key] },
3828
+ })) || {};
3817
3829
  }
3818
3830
  data[key] = !row.zname ? "" : row.zname;
3819
3831
  break;
@@ -3823,19 +3835,19 @@ zRoute.viewTable = async (
3823
3835
  table: widgets[key].table,
3824
3836
  });
3825
3837
  let valArr = Util.arrayToList(
3826
- results[key],
3827
- Util.arrayWithObject(rows, "id", "zname")
3838
+ results[key],
3839
+ Util.arrayWithObject(rows, "id", "zname")
3828
3840
  );
3829
3841
  data[key] = typeof valArr == "object" ? valArr.join("<br>") : valArr;
3830
3842
  break;
3831
3843
  case "dropdown_chain":
3832
3844
  if (results[key]) {
3833
3845
  row =
3834
- (await connection.result({
3835
- table: widgets[key].table,
3836
- select: widgets[key].fields[1] + " as zname",
3837
- where: { id: results[key] },
3838
- })) || {};
3846
+ (await connection.result({
3847
+ table: widgets[key].table,
3848
+ select: widgets[key].fields[1] + " as zname",
3849
+ where: { id: results[key] },
3850
+ })) || {};
3839
3851
  }
3840
3852
  data[key] = !row.zname ? "" : row.zname;
3841
3853
  break;
@@ -3859,13 +3871,13 @@ zRoute.viewTable = async (
3859
3871
  hasIdeEditor = true;
3860
3872
  editors.push(key);
3861
3873
  const editorValue = !results
3862
- ? ""
3863
- : Util.replaceAll(results[key], "</script>", `<//script>`);
3874
+ ? ""
3875
+ : Util.replaceAll(results[key], "</script>", `<//script>`);
3864
3876
  //data[key] = editorValue;
3865
3877
  moduleLib.addScript(
3866
- req,
3867
- res,
3868
- "var ide_editor_" + key + " = `" + editorValue + "` "
3878
+ req,
3879
+ res,
3880
+ "var ide_editor_" + key + " = `" + editorValue + "` "
3869
3881
  );
3870
3882
  break;
3871
3883
  case "lexical":
@@ -3873,8 +3885,8 @@ zRoute.viewTable = async (
3873
3885
  break;
3874
3886
  case "json":
3875
3887
  data[key] = results[key]
3876
- ? JSON.stringify(results[key], undefined, 2)
3877
- : "";
3888
+ ? JSON.stringify(results[key], undefined, 2)
3889
+ : "";
3878
3890
  break;
3879
3891
  case "table":
3880
3892
  let tableClass = isPreview ? "" : "table-striped table-hover";
@@ -3902,12 +3914,12 @@ zRoute.viewTable = async (
3902
3914
  for (let i = 0; i < arr.length; i++) {
3903
3915
  var item = arr[i];
3904
3916
  var data_table = await zRoute.viewTable(
3905
- req,
3906
- res,
3907
- MODEL_TABLE,
3908
- item,
3909
- false,
3910
- `${MYMODEL.table}/${key}`
3917
+ req,
3918
+ res,
3919
+ MODEL_TABLE,
3920
+ item,
3921
+ false,
3922
+ `${MYMODEL.table}/${key}`
3911
3923
  );
3912
3924
  html += `<tr>`;
3913
3925
  for (var k in obj) {
@@ -3931,11 +3943,11 @@ zRoute.viewTable = async (
3931
3943
  editors.forEach(function (item) {
3932
3944
  contentScript += `var editor_${item} = ace.edit("editor_${item}");
3933
3945
  editor_${item}.getSession().setMode("ace/mode/${
3934
- widgets[item].language
3946
+ widgets[item].language
3935
3947
  }");
3936
3948
  editor_${item}.setValue(ace_value(ide_editor_${item}));
3937
3949
  $("#editor_${item}").css({height:${
3938
- widgets[item].height ? widgets[item].height : 400
3950
+ widgets[item].height ? widgets[item].height : 400
3939
3951
  }});
3940
3952
  `;
3941
3953
  });
@@ -4021,7 +4033,7 @@ zRoute.moduleLib = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4021
4033
  if (MODEL_TABLE.widgets[key].name == "dropdown_multi") {
4022
4034
  let relObject = relations[keys + "Row"][key + "Object"];
4023
4035
  scriptTemp += `<script>var ${key}Object = ${JSON.stringify(
4024
- relObject
4036
+ relObject
4025
4037
  )};</script>${Util.newLine}`;
4026
4038
  }
4027
4039
  }
@@ -4053,7 +4065,7 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4053
4065
  let obj = {};
4054
4066
  const MYMODELS = myCache.get("MYMODELS");
4055
4067
  let widgets = MYMODEL.widgets,
4056
- widgetsArray = Object.keys(widgets) || [];
4068
+ widgetsArray = Object.keys(widgets) || [];
4057
4069
 
4058
4070
  let hasTabs = MYMODEL.hasOwnProperty("hasTabs") ? MYMODEL.hasTabs : false;
4059
4071
  let hasDatePicker = false;
@@ -4098,20 +4110,20 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4098
4110
  hasIde = true;
4099
4111
  } else if (widgets[key].name == "switch") {
4100
4112
  let switchObj = moduleLib.switch(
4101
- req,
4102
- res,
4103
- `#${key}`,
4104
- widgets[key].fields
4113
+ req,
4114
+ res,
4115
+ `#${key}`,
4116
+ widgets[key].fields
4105
4117
  );
4106
4118
  scriptForm += switchObj.script;
4107
4119
  headObj.switch = switchObj.head;
4108
4120
  endObj.switch = switchObj.end;
4109
4121
  } else if (widgets[key].name == "typeahead") {
4110
4122
  let typeaheadObj = moduleLib.typeahead(
4111
- req,
4112
- res,
4113
- MYMODEL.table,
4114
- `#${key}Typeahead`
4123
+ req,
4124
+ res,
4125
+ MYMODEL.table,
4126
+ `#${key}Typeahead`
4115
4127
  );
4116
4128
  scriptForm += typeaheadObj.script;
4117
4129
  headObj.typeahead = typeaheadObj.head;
@@ -4265,8 +4277,8 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4265
4277
  scriptForm += `$(()=> {
4266
4278
  ajaxPost('/ztab-access',{table:"${MYMODEL.table}"},(data)=> {
4267
4279
  let dataTabs = ${
4268
- MYMODEL.hasOwnProperty("tabs") ? JSON.stringify(MYMODEL.tabs) : []
4269
- };
4280
+ MYMODEL.hasOwnProperty("tabs") ? JSON.stringify(MYMODEL.tabs) : []
4281
+ };
4270
4282
  let viewAccess = data.view || [];
4271
4283
  let createAccess = data.create || [];
4272
4284
  let editAccess = data.edit || [];
@@ -4501,26 +4513,26 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4501
4513
 
4502
4514
  case "table":
4503
4515
  let MODEL_TABLE =
4504
- MYMODELS[MYMODEL.widgets[keys].table] ||
4505
- require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
4516
+ MYMODELS[MYMODEL.widgets[keys].table] ||
4517
+ require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
4506
4518
  //let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
4507
4519
  //relations[key + "TABLE"]
4508
4520
  let RELATIONS_MODEL_TABLE =
4509
- relations && relations.hasOwnProperty(keys + "TABLE")
4510
- ? relations[keys + "TABLE"]
4511
- : {};
4521
+ relations && relations.hasOwnProperty(keys + "TABLE")
4522
+ ? relations[keys + "TABLE"]
4523
+ : {};
4512
4524
  let zForm = zRoute.formField(
4513
- req,
4514
- res,
4515
- MODEL_TABLE,
4516
- RELATIONS_MODEL_TABLE
4525
+ req,
4526
+ res,
4527
+ MODEL_TABLE,
4528
+ RELATIONS_MODEL_TABLE
4517
4529
  );
4518
4530
  zRoute.moduleLib(
4519
- req,
4520
- res,
4521
- MODEL_TABLE,
4522
- RELATIONS_MODEL_TABLE,
4523
- zForms
4531
+ req,
4532
+ res,
4533
+ MODEL_TABLE,
4534
+ RELATIONS_MODEL_TABLE,
4535
+ zForms
4524
4536
  );
4525
4537
  let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`;
4526
4538
  let subname = MYMODEL.table + "_" + keys;
@@ -4549,9 +4561,9 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
4549
4561
  }
4550
4562
 
4551
4563
  scriptForm += `var append${keys} = (increment, callback) => { buildform(increment,'${
4552
- MYMODEL.table
4564
+ MYMODEL.table
4553
4565
  }','${keys}','${JSON.stringify(
4554
- relationsWithKeys
4566
+ relationsWithKeys
4555
4567
  )}', (data) => callback(data)) } `;
4556
4568
  scriptForm += Util.newLine;
4557
4569
  scriptForm += `var append${keys}Max = $('tbody#body-${keys}>tr').length;${Util.newLine}`;
@@ -4680,7 +4692,7 @@ ${keys}.forEach(function (myobj, index) {
4680
4692
  editor_${keys}.setValue(ace_value(ide_editor_${keys}));
4681
4693
  $("#${keys}").text(ace_value(ide_editor_${keys}));
4682
4694
  $("#editor_${keys}").css({height:${
4683
- widgets[keys].height ? widgets[keys].height : 400
4695
+ widgets[keys].height ? widgets[keys].height : 400
4684
4696
  }});
4685
4697
  ${script_annotaions}
4686
4698
  editor_${keys}.on("change",function(e,session){
@@ -4754,7 +4766,7 @@ zRoute.insertSQL = async (req, res, table, data) => {
4754
4766
  //console.log('has dropzone')
4755
4767
  let path_src = dirRoot + "/public/zdropzone/" + userId + "/";
4756
4768
  let path_dest =
4757
- dirRoot + "/public/uploads/" + MYMODEL.routeName + "/" + key + "/";
4769
+ dirRoot + "/public/uploads/" + MYMODEL.routeName + "/" + key + "/";
4758
4770
  if (!fs.existsSync(path_dest)) {
4759
4771
  fs.mkdirSync(path_dest, { recursive: true });
4760
4772
  }
@@ -4904,8 +4916,8 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
4904
4916
  const MYMODEL_TABLE = MYMODELS[MYMODEL.widgets[key].table];
4905
4917
  for (let q in MYMODEL_TABLE.widgets) {
4906
4918
  if (
4907
- MYMODEL_TABLE.widgets[q].name == "file" ||
4908
- MYMODEL_TABLE.widgets[q].name == "image"
4919
+ MYMODEL_TABLE.widgets[q].name == "file" ||
4920
+ MYMODEL_TABLE.widgets[q].name == "image"
4909
4921
  ) {
4910
4922
  hasImages = true;
4911
4923
  tables.push(key);
@@ -4917,7 +4929,7 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
4917
4929
  //console.log('has dropzone')
4918
4930
  let path_src = dirRoot + "/public/zdropzone/" + userId + "/";
4919
4931
  let path_dest =
4920
- dirRoot + "/public/uploads/" + MYMODEL.table + "/" + key + "/";
4932
+ dirRoot + "/public/uploads/" + MYMODEL.table + "/" + key + "/";
4921
4933
  if (!fs.existsSync(path_dest)) {
4922
4934
  fs.mkdirSync(path_dest, { recursive: true });
4923
4935
  }
@@ -5041,17 +5053,17 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
5041
5053
  if (!obj[key]) {
5042
5054
  let resultItem = result[item];
5043
5055
  if (
5044
- resultItem &&
5045
- Object.prototype.hasOwnProperty.call(resultItem, index)
5056
+ resultItem &&
5057
+ Object.prototype.hasOwnProperty.call(resultItem, index)
5046
5058
  ) {
5047
5059
  let resultItemIndex = resultItem[index];
5048
5060
  if (
5049
- resultItemIndex &&
5050
- Object.prototype.hasOwnProperty.call(resultItemIndex, key)
5061
+ resultItemIndex &&
5062
+ Object.prototype.hasOwnProperty.call(resultItemIndex, key)
5051
5063
  ) {
5052
5064
  obj[key] = !result[item][index]
5053
- ? ""
5054
- : result[item][index][key];
5065
+ ? ""
5066
+ : result[item][index][key];
5055
5067
  }
5056
5068
  }
5057
5069
  }
@@ -5204,12 +5216,12 @@ zRoute.import = async (req, res, MYMODEL) => {
5204
5216
  for (let key in MYMODEL.widgets) {
5205
5217
  if (MYMODEL.widgets[key]) {
5206
5218
  if (
5207
- MYMODEL.widgets[key].name == "relation" ||
5208
- MYMODEL.widgets[key].name == "typeahead"
5219
+ MYMODEL.widgets[key].name == "relation" ||
5220
+ MYMODEL.widgets[key].name == "typeahead"
5209
5221
  ) {
5210
5222
  if (
5211
- MYMODEL.widgets[key].import_field &&
5212
- MYMODEL.widgets[key].import_field != "id"
5223
+ MYMODEL.widgets[key].import_field &&
5224
+ MYMODEL.widgets[key].import_field != "id"
5213
5225
  ) {
5214
5226
  aliasRelations.push(key);
5215
5227
  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 +5230,8 @@ zRoute.import = async (req, res, MYMODEL) => {
5218
5230
 
5219
5231
  if (MYMODEL.widgets[key].name == "dropdown_multi") {
5220
5232
  if (
5221
- MYMODEL.widgets[key].import_field &&
5222
- MYMODEL.widgets[key].import_field != "id"
5233
+ MYMODEL.widgets[key].import_field &&
5234
+ MYMODEL.widgets[key].import_field != "id"
5223
5235
  ) {
5224
5236
  isDropdownWidgets.push(key);
5225
5237
  let cacheName = `${MYMODEL.widgets[key].table}_${MYMODEL.table}___${key}_${companyId}`;
@@ -5244,8 +5256,8 @@ zRoute.import = async (req, res, MYMODEL) => {
5244
5256
  let uniqueName = Util.generateUnique() + ".xlsx";
5245
5257
  const filename = `${dirRoot}/public/uploads/zlogs_upload/${uniqueName}`;
5246
5258
  let excelFile = req.files.excel,
5247
- labels = MYMODEL.labels,
5248
- keys = {};
5259
+ labels = MYMODEL.labels,
5260
+ keys = {};
5249
5261
  if (!excelFile) {
5250
5262
  return res.json(Util.flashError(LANGUAGE["import_no_file"]));
5251
5263
  }
@@ -5316,7 +5328,7 @@ zRoute.import = async (req, res, MYMODEL) => {
5316
5328
  dropdownMultiArrays.map((dropdownMultiArray) => {
5317
5329
  if (dropdownWidgetRelations[keys[prop]][dropdownMultiArray]) {
5318
5330
  dArray.push(
5319
- dropdownWidgetRelations[keys[prop]][dropdownMultiArray]
5331
+ dropdownWidgetRelations[keys[prop]][dropdownMultiArray]
5320
5332
  );
5321
5333
  }
5322
5334
  });
@@ -5324,9 +5336,9 @@ zRoute.import = async (req, res, MYMODEL) => {
5324
5336
  }
5325
5337
  } else {
5326
5338
  let name =
5327
- MYMODEL.widgets[keys[prop]] && MYMODEL.widgets[keys[prop]].name
5328
- ? MYMODEL.widgets[keys[prop]].name
5329
- : "";
5339
+ MYMODEL.widgets[keys[prop]] && MYMODEL.widgets[keys[prop]].name
5340
+ ? MYMODEL.widgets[keys[prop]].name
5341
+ : "";
5330
5342
  if (name != "virtual") {
5331
5343
  data[keys[prop]] = value;
5332
5344
  }
@@ -5442,12 +5454,12 @@ zRoute.buildForm = async (req, res) => {
5442
5454
  let relations = JSON.parse(req.body.relations) || {};
5443
5455
  let MYMODEL = MYMODELS[table] || require(`${dirRoot}/models/${table}`);
5444
5456
  let MODEL_TABLE =
5445
- MYMODELS[MYMODEL.widgets[keys].table] ||
5446
- require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
5457
+ MYMODELS[MYMODEL.widgets[keys].table] ||
5458
+ require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
5447
5459
  let MODEL_TABLE_RELATIONS = await zRoute.relations(
5448
- req,
5449
- res,
5450
- MODEL_TABLE.table
5460
+ req,
5461
+ res,
5462
+ MODEL_TABLE.table
5451
5463
  );
5452
5464
  let dataName = `${MYMODEL.table}[${keys}]`;
5453
5465
 
@@ -5466,7 +5478,7 @@ zRoute.buildForm = async (req, res) => {
5466
5478
  "data-id": obj.class,
5467
5479
  };
5468
5480
  trtd += `<td class="td_${key}_${
5469
- MYMODEL.widgets[keys].table
5481
+ MYMODEL.widgets[keys].table
5470
5482
  }">${cForm.field(obj)}</td>`;
5471
5483
  }
5472
5484
  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 +5497,7 @@ zRoute.tabAccess = async (req, res) => {
5485
5497
  let roles = myCache.get("ROLES");
5486
5498
  let roleId = res.locals.roleId;
5487
5499
  let tabs =
5488
- roles[roleId] && roles[roleId].tabs ? roles[roleId].tabs[table] : [];
5500
+ roles[roleId] && roles[roleId].tabs ? roles[roleId].tabs[table] : [];
5489
5501
  res.json(tabs);
5490
5502
  } catch (e) {
5491
5503
  console.log(e);
@@ -5513,15 +5525,15 @@ zRoute.buildFileModel = (json, index = 0) => {
5513
5525
  if (typeof item == "string") {
5514
5526
  isStringArray = true;
5515
5527
  textArray += `${Util.tabs(3)} ${separator}"${Util.replaceAll(
5516
- item,
5517
- '"',
5518
- "'"
5528
+ item,
5529
+ '"',
5530
+ "'"
5519
5531
  )}",${Util.newLine}`;
5520
5532
  }
5521
5533
  });
5522
5534
  if (isStringArray) {
5523
5535
  text += `[${Util.newLine}${textArray.slice(0, -3)}${
5524
- Util.newLine
5536
+ Util.newLine
5525
5537
  }${separator}${Util.tabs(2)} ], ${Util.newLine}`;
5526
5538
  } else {
5527
5539
  text += `${JSON.stringify(json[key])}, ${Util.newLine}`;
@@ -5667,16 +5679,16 @@ zRoute.modelsCache = async () => {
5667
5679
  }
5668
5680
  if (!Util.in_array(key, nots)) {
5669
5681
  obj[table][
5670
- `${keys}___${key}`
5671
- ] = `${widgets[key].fields[1]} as ${key}_${models[keys].table}`;
5682
+ `${keys}___${key}`
5683
+ ] = `${widgets[key].fields[1]} as ${key}_${models[keys].table}`;
5672
5684
  if (
5673
- Object.prototype.hasOwnProperty.call(models[keys].widgets, key)
5685
+ Object.prototype.hasOwnProperty.call(models[keys].widgets, key)
5674
5686
  ) {
5675
5687
  if (
5676
- Object.prototype.hasOwnProperty.call(
5677
- models[keys].widgets[key],
5678
- "order_by"
5679
- )
5688
+ Object.prototype.hasOwnProperty.call(
5689
+ models[keys].widgets[key],
5690
+ "order_by"
5691
+ )
5680
5692
  ) {
5681
5693
  if (models[keys].widgets[key].order_by) {
5682
5694
  orderBy[table] = models[keys].widgets[key].order_by;
@@ -5703,7 +5715,7 @@ zRoute.modelsCache = async () => {
5703
5715
  try {
5704
5716
  for (let keys in obj) {
5705
5717
  let checks = await connection.query(
5706
- `SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE tablename = '${keys}') AS oke;`
5718
+ `SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE tablename = '${keys}') AS oke;`
5707
5719
  );
5708
5720
  if (checks[0].oke) {
5709
5721
  if (!Util.in_array(keys, zRoute.tableHasNoCompanyId)) {
@@ -5961,13 +5973,13 @@ zRoute.typeaheadpost = async (req, res) => {
5961
5973
  };
5962
5974
 
5963
5975
  zRoute.history = async (
5964
- req,
5965
- res,
5966
- relations,
5967
- id,
5968
- MYMODEL,
5969
- users,
5970
- results = []
5976
+ req,
5977
+ res,
5978
+ relations,
5979
+ id,
5980
+ MYMODEL,
5981
+ users,
5982
+ results = []
5971
5983
  ) => {
5972
5984
  //html
5973
5985
  let html = "";
@@ -6068,13 +6080,13 @@ zRoute.history = async (
6068
6080
  <div class="card">
6069
6081
  <div class="card-body">
6070
6082
  <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
6083
+ Util.dateFormat(
6084
+ arrDataAttributes[index]
6085
+ .date1,
6086
+ "DD MMM YYYY HH:mm"
6087
+ ) || ""
6088
+ }<br><small>${
6089
+ users[arrDataAttributes[index].by1].fullname
6078
6090
  }</small></div>
6079
6091
  <h4 class="card-title text-muted">Semula</h4>
6080
6092
  <div class="card-text">${html1}</div>
@@ -6085,13 +6097,13 @@ zRoute.history = async (
6085
6097
  <div class="card">
6086
6098
  <div class="card-body">
6087
6099
  <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
6100
+ Util.dateFormat(
6101
+ arrDataAttributes[index]
6102
+ .date2,
6103
+ "DD MMM YYYY HH:mm"
6104
+ ) || ""
6105
+ } <br><small>${
6106
+ users[arrDataAttributes[index].by2].fullname
6095
6107
  }</small></div>
6096
6108
  <h4 class="card-title text-success">Menjadi </h4>
6097
6109
  <div class="card-text">${html2}</div>
@@ -6109,14 +6121,14 @@ zRoute.history = async (
6109
6121
  };
6110
6122
 
6111
6123
  zRoute.tableBody = (
6112
- req,
6113
- res,
6114
- relations,
6115
- dataObject,
6116
- parentTable,
6117
- fieldName,
6118
- MYMODEL,
6119
- datas = []
6124
+ req,
6125
+ res,
6126
+ relations,
6127
+ dataObject,
6128
+ parentTable,
6129
+ fieldName,
6130
+ MYMODEL,
6131
+ datas = []
6120
6132
  ) => {
6121
6133
  let html = "";
6122
6134
  try {
@@ -6136,7 +6148,7 @@ zRoute.tableBody = (
6136
6148
  myobj.additional_attributes = ` data-name="${key}" data-id="${parentTable}_${fieldName}_${key}" `;
6137
6149
  myobj.isTableModule = 1;
6138
6150
  html += `<td class="td_${key}_${MYMODEL.table}">${cForm.field(
6139
- myobj
6151
+ myobj
6140
6152
  )}</td>`;
6141
6153
  }
6142
6154
  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>`;