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/zAppRouter.js +20 -10
- package/lib/zRoute.js +664 -636
- package/package.json +1 -1
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
|
-
|
|
200
|
-
|
|
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
|
-
|
|
210
|
-
|
|
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
|
-
|
|
246
|
-
|
|
245
|
+
? item[k].filter((myitem) => myitem)
|
|
246
|
+
: null;
|
|
247
247
|
}
|
|
248
248
|
item[k] = cleaningdm;
|
|
249
249
|
}
|
|
250
250
|
if (
|
|
251
|
-
|
|
252
|
-
|
|
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
|
-
|
|
258
|
-
|
|
259
|
-
|
|
257
|
+
Util.generateUnique(5) +
|
|
258
|
+
"_" +
|
|
259
|
+
req.files[fileImageName].name;
|
|
260
260
|
item[k] = kname;
|
|
261
261
|
req.files[fileImageName].mv(
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
288
|
-
|
|
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
|
-
|
|
386
|
-
|
|
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
|
-
|
|
449
|
-
|
|
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
|
-
|
|
503
|
-
|
|
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
|
-
|
|
581
|
-
|
|
582
|
-
|
|
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
|
-
|
|
597
|
-
|
|
598
|
-
|
|
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
|
-
|
|
638
|
-
|
|
639
|
-
|
|
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
|
-
|
|
671
|
-
|
|
672
|
-
|
|
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
|
-
|
|
693
|
-
|
|
694
|
-
|
|
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
|
-
|
|
721
|
-
|
|
722
|
-
|
|
720
|
+
relations[key],
|
|
721
|
+
"id",
|
|
722
|
+
"zname"
|
|
723
723
|
);
|
|
724
724
|
} else if (widgetName == "switch") {
|
|
725
725
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
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
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
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
|
-
|
|
786
|
-
|
|
787
|
-
|
|
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
|
-
|
|
797
|
-
|
|
798
|
-
|
|
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
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
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
|
-
|
|
937
|
-
|
|
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
|
-
|
|
942
|
-
|
|
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
|
-
|
|
952
|
-
|
|
951
|
+
result +
|
|
952
|
+
`<option value="${item.id}" ${selected}>${item.name}</option>`
|
|
953
953
|
);
|
|
954
954
|
}, "");
|
|
955
955
|
dataTable[
|
|
956
|
-
|
|
957
|
-
|
|
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
|
-
|
|
964
|
-
|
|
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
|
-
|
|
971
|
-
|
|
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
|
-
|
|
980
|
-
|
|
979
|
+
result +
|
|
980
|
+
`<option value="${item.id}" ${selected}>${item.zname}</option>`
|
|
981
981
|
);
|
|
982
982
|
}, "");
|
|
983
983
|
dataTable[
|
|
984
|
-
|
|
985
|
-
|
|
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
|
-
|
|
993
|
+
result + `<option value="${item}" ${selected} >${item}</option>`
|
|
994
994
|
);
|
|
995
995
|
}, "");
|
|
996
996
|
dataTable[
|
|
997
|
-
|
|
998
|
-
|
|
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
|
-
|
|
1007
|
-
|
|
1006
|
+
result +
|
|
1007
|
+
`<option value="${item.id}" ${selected} >${item.zname}</option>`
|
|
1008
1008
|
);
|
|
1009
1009
|
}, "");
|
|
1010
1010
|
dataTable[
|
|
1011
|
-
|
|
1012
|
-
|
|
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
|
-
|
|
1021
|
-
|
|
1020
|
+
result +
|
|
1021
|
+
`<option value="${item.id}" ${selected} >${item.zname}</option>`
|
|
1022
1022
|
);
|
|
1023
1023
|
}, "");
|
|
1024
1024
|
dataTable[
|
|
1025
|
-
|
|
1026
|
-
|
|
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
|
-
|
|
1035
|
-
|
|
1034
|
+
result +
|
|
1035
|
+
`<option value="${item.id}" ${selected}>${item.zname}</option>`
|
|
1036
1036
|
);
|
|
1037
1037
|
}, "");
|
|
1038
1038
|
dataTable[
|
|
1039
|
-
|
|
1040
|
-
|
|
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
|
-
|
|
1058
|
-
|
|
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
|
-
|
|
1078
|
-
|
|
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
|
-
|
|
1096
|
-
|
|
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
|
-
|
|
1103
|
-
|
|
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
|
-
|
|
1110
|
-
|
|
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
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
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
|
-
|
|
1126
|
-
|
|
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
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
arr.
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
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
|
+
} - (${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
|
-
|
|
1167
|
-
};
|
|
1183
|
+
}
|
|
1168
1184
|
|
|
1169
1185
|
zRoute.dataTableData = (
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
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
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
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
|
-
|
|
1263
|
-
|
|
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
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
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
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1312
|
-
|
|
1327
|
+
? JSON.stringify(value).replaceAll('","', '", "')
|
|
1328
|
+
: "";
|
|
1313
1329
|
break;
|
|
1314
1330
|
|
|
1315
1331
|
case "dropdown_checkbox":
|
|
1316
1332
|
myvalue = value
|
|
1317
|
-
|
|
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
|
-
|
|
1324
|
-
|
|
1339
|
+
? JSON.stringify(value).replaceAll('","', '", "')
|
|
1340
|
+
: "";
|
|
1325
1341
|
break;
|
|
1326
1342
|
|
|
1327
1343
|
case "table":
|
|
1328
1344
|
myvalue = Util.tableShowInGrid(
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
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
|
-
|
|
1355
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
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
|
-
|
|
1500
|
-
|
|
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
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
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
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
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
|
-
|
|
1849
|
-
|
|
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
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
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
|
-
|
|
1894
|
-
|
|
1909
|
+
MYMODEL.widgets[key].import_field &&
|
|
1910
|
+
MYMODEL.widgets[key].import_field != "id"
|
|
1895
1911
|
) {
|
|
1896
1912
|
aliasResults[key] = Util.arrayToObject(
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
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
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
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
|
-
|
|
1947
|
-
|
|
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
|
-
|
|
1953
|
-
|
|
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
|
-
|
|
1958
|
-
|
|
1973
|
+
? result[field]
|
|
1974
|
+
: callback(result, field);
|
|
1959
1975
|
} else {
|
|
1960
1976
|
t = !callback(result, field)
|
|
1961
|
-
|
|
1962
|
-
|
|
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
|
-
|
|
1970
|
-
|
|
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
|
-
|
|
1976
|
-
|
|
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
|
-
|
|
1989
|
-
|
|
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
|
-
|
|
1994
|
-
|
|
2009
|
+
widgets.hasOwnProperty(field) &&
|
|
2010
|
+
widgets[field].name == "select"
|
|
1995
2011
|
) {
|
|
1996
2012
|
if (isRaws) {
|
|
1997
2013
|
t = !callback(result, field)
|
|
1998
|
-
|
|
1999
|
-
|
|
2014
|
+
? result[field]
|
|
2015
|
+
: callback(result, field);
|
|
2000
2016
|
} else {
|
|
2001
2017
|
t = !callback(result, field)
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
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
|
-
|
|
2009
|
-
|
|
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
|
-
|
|
2016
|
-
|
|
2031
|
+
? Util.timeSql(result[field])
|
|
2032
|
+
: callback(result, field);
|
|
2017
2033
|
} else {
|
|
2018
2034
|
t = !callback(result, field)
|
|
2019
|
-
|
|
2020
|
-
|
|
2035
|
+
? Util.timeSql(result[field])
|
|
2036
|
+
: callback(result, field);
|
|
2021
2037
|
}
|
|
2022
2038
|
} else if (
|
|
2023
|
-
|
|
2024
|
-
|
|
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
|
-
|
|
2030
|
-
|
|
2045
|
+
? Util.dateFormat(result[field])
|
|
2046
|
+
: callback(result, field);
|
|
2031
2047
|
} else {
|
|
2032
2048
|
t = !callback(result, field)
|
|
2033
|
-
|
|
2034
|
-
|
|
2049
|
+
? Util.dateFormat(result[field])
|
|
2050
|
+
: callback(result, field);
|
|
2035
2051
|
}
|
|
2036
2052
|
} else if (
|
|
2037
|
-
|
|
2038
|
-
|
|
2053
|
+
widgets.hasOwnProperty(field) &&
|
|
2054
|
+
widgets[field].name == "switch"
|
|
2039
2055
|
) {
|
|
2040
2056
|
if (isRaws) {
|
|
2041
2057
|
t = !callback(result, field)
|
|
2042
|
-
|
|
2043
|
-
|
|
2058
|
+
? result[field]
|
|
2059
|
+
: callback(result, field);
|
|
2044
2060
|
} else {
|
|
2045
2061
|
t = !callback(result, field)
|
|
2046
|
-
|
|
2047
|
-
|
|
2062
|
+
? tableObj[field][result[field]] || ""
|
|
2063
|
+
: callback(result, field);
|
|
2048
2064
|
}
|
|
2049
2065
|
} else if (
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2090
|
+
? aliasResults[field][result[field]][
|
|
2091
|
+
widgets[field].import_field
|
|
2092
|
+
]
|
|
2093
|
+
: "";
|
|
2078
2094
|
result[field] = result[field]
|
|
2079
|
-
|
|
2080
|
-
|
|
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
|
-
|
|
2097
|
-
|
|
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
|
-
|
|
2104
|
-
|
|
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
|
-
|
|
2117
|
-
|
|
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
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
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
|
-
|
|
2175
|
-
|
|
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
|
-
|
|
2179
|
-
|
|
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
|
-
|
|
2183
|
-
|
|
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
|
-
|
|
2187
|
-
|
|
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
|
-
|
|
2195
|
-
|
|
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
|
-
|
|
2207
|
-
|
|
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
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
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
|
-
|
|
2219
|
-
|
|
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
|
-
|
|
2223
|
-
|
|
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
|
-
|
|
2227
|
-
|
|
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
|
-
|
|
2232
|
-
|
|
2247
|
+
? relations[field][result[field]].zname || ""
|
|
2248
|
+
: callback(result, field);
|
|
2233
2249
|
}
|
|
2234
2250
|
} else {
|
|
2235
2251
|
t = !callback(result, field)
|
|
2236
|
-
|
|
2237
|
-
|
|
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
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
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
|
-
|
|
2392
|
-
|
|
2407
|
+
? objData.fields
|
|
2408
|
+
: req.body.fields;
|
|
2393
2409
|
let relations = await zRoute.relations(
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
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
|
-
|
|
2402
|
-
|
|
2417
|
+
? objData.select
|
|
2418
|
+
: Util.selectParser(fields, MYMODEL);
|
|
2403
2419
|
const columns = Object.prototype.hasOwnProperty.call(objData, "columns")
|
|
2404
|
-
|
|
2405
|
-
|
|
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
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
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
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
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
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
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
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
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
|
-
|
|
2524
|
-
|
|
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
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
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
|
-
|
|
2542
|
-
|
|
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
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2562
|
+
? objData.dataTableData(
|
|
2563
|
+
item,
|
|
2564
|
+
row[item],
|
|
2565
|
+
MYMODEL,
|
|
2566
|
+
relations,
|
|
2567
|
+
row.id
|
|
2552
2568
|
)
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
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
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
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
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
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
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
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
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
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
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
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
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
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
|
-
|
|
2739
|
-
|
|
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
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
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
|
-
|
|
2911
|
-
|
|
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
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
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
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
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
|
-
|
|
3125
|
-
|
|
3140
|
+
`dropzone__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
|
|
3141
|
+
obj.value
|
|
3126
3142
|
);
|
|
3127
3143
|
}
|
|
3128
3144
|
let dropzoneValue =
|
|
3129
|
-
|
|
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
|
-
|
|
3157
|
-
|
|
3172
|
+
`dropbox__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
|
|
3173
|
+
obj.value
|
|
3158
3174
|
);
|
|
3159
3175
|
}
|
|
3160
3176
|
let dropboxValue =
|
|
3161
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
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
|
-
|
|
3214
|
-
|
|
3215
|
-
|
|
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
|
-
|
|
3229
|
-
|
|
3230
|
-
|
|
3231
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
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
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
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
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3523
|
-
}. ${
|
|
3524
|
-
|
|
3525
|
-
} ${Util.
|
|
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
|
-
|
|
3574
|
-
|
|
3575
|
-
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3579
|
-
|
|
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
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
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
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
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
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3658
|
+
`/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
|
|
3659
|
+
data[key],
|
|
3660
|
+
{ withIcon: true }
|
|
3633
3661
|
);
|
|
3634
3662
|
} else {
|
|
3635
3663
|
obj[key].value =
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
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
|
-
|
|
3652
|
-
|
|
3679
|
+
? widgets[key].fields[data[key]]
|
|
3680
|
+
: widgets[key].fields[0];
|
|
3653
3681
|
obj[
|
|
3654
|
-
|
|
3655
|
-
|
|
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
|
-
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
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
|
-
|
|
3761
|
-
|
|
3788
|
+
"/uploads/" + hasKeys + "/",
|
|
3789
|
+
results[key]
|
|
3762
3790
|
);
|
|
3763
3791
|
} else {
|
|
3764
3792
|
data[key] = Util.fileView(
|
|
3765
|
-
|
|
3766
|
-
|
|
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
|
-
|
|
3774
|
-
|
|
3801
|
+
"/uploads/" + hasKeys + "/",
|
|
3802
|
+
results[key]
|
|
3775
3803
|
);
|
|
3776
3804
|
} else {
|
|
3777
3805
|
data[key] = Util.fileView(
|
|
3778
|
-
|
|
3779
|
-
|
|
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
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
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
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
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
|
-
|
|
3827
|
-
|
|
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
|
-
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
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
|
-
|
|
3890
|
+
? ""
|
|
3891
|
+
: Util.replaceAll(results[key], "</script>", `<//script>`);
|
|
3864
3892
|
//data[key] = editorValue;
|
|
3865
3893
|
moduleLib.addScript(
|
|
3866
|
-
|
|
3867
|
-
|
|
3868
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
|
|
3909
|
-
|
|
3910
|
-
|
|
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
|
-
|
|
3962
|
+
widgets[item].language
|
|
3935
3963
|
}");
|
|
3936
3964
|
editor_${item}.setValue(ace_value(ide_editor_${item}));
|
|
3937
3965
|
$("#editor_${item}").css({height:${
|
|
3938
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
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
|
-
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4505
|
-
|
|
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
|
-
|
|
4510
|
-
|
|
4511
|
-
|
|
4537
|
+
relations && relations.hasOwnProperty(keys + "TABLE")
|
|
4538
|
+
? relations[keys + "TABLE"]
|
|
4539
|
+
: {};
|
|
4512
4540
|
let zForm = zRoute.formField(
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
|
|
4541
|
+
req,
|
|
4542
|
+
res,
|
|
4543
|
+
MODEL_TABLE,
|
|
4544
|
+
RELATIONS_MODEL_TABLE
|
|
4517
4545
|
);
|
|
4518
4546
|
zRoute.moduleLib(
|
|
4519
|
-
|
|
4520
|
-
|
|
4521
|
-
|
|
4522
|
-
|
|
4523
|
-
|
|
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
|
-
|
|
4580
|
+
MYMODEL.table
|
|
4553
4581
|
}','${keys}','${JSON.stringify(
|
|
4554
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4908
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5045
|
-
|
|
5072
|
+
resultItem &&
|
|
5073
|
+
Object.prototype.hasOwnProperty.call(resultItem, index)
|
|
5046
5074
|
) {
|
|
5047
5075
|
let resultItemIndex = resultItem[index];
|
|
5048
5076
|
if (
|
|
5049
|
-
|
|
5050
|
-
|
|
5077
|
+
resultItemIndex &&
|
|
5078
|
+
Object.prototype.hasOwnProperty.call(resultItemIndex, key)
|
|
5051
5079
|
) {
|
|
5052
5080
|
obj[key] = !result[item][index]
|
|
5053
|
-
|
|
5054
|
-
|
|
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
|
-
|
|
5208
|
-
|
|
5235
|
+
MYMODEL.widgets[key].name == "relation" ||
|
|
5236
|
+
MYMODEL.widgets[key].name == "typeahead"
|
|
5209
5237
|
) {
|
|
5210
5238
|
if (
|
|
5211
|
-
|
|
5212
|
-
|
|
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
|
-
|
|
5222
|
-
|
|
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
|
-
|
|
5248
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5328
|
-
|
|
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
|
-
|
|
5446
|
-
|
|
5473
|
+
MYMODELS[MYMODEL.widgets[keys].table] ||
|
|
5474
|
+
require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
|
|
5447
5475
|
let MODEL_TABLE_RELATIONS = await zRoute.relations(
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5671
|
-
|
|
5698
|
+
`${keys}___${key}`
|
|
5699
|
+
] = `${widgets[key].fields[1]} as ${key}_${models[keys].table}`;
|
|
5672
5700
|
if (
|
|
5673
|
-
|
|
5701
|
+
Object.prototype.hasOwnProperty.call(models[keys].widgets, key)
|
|
5674
5702
|
) {
|
|
5675
5703
|
if (
|
|
5676
|
-
|
|
5677
|
-
|
|
5678
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
|
|
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
|
-
|
|
6072
|
-
|
|
6073
|
-
|
|
6074
|
-
|
|
6075
|
-
|
|
6076
|
-
|
|
6077
|
-
|
|
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
|
-
|
|
6089
|
-
|
|
6090
|
-
|
|
6091
|
-
|
|
6092
|
-
|
|
6093
|
-
|
|
6094
|
-
|
|
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
|
-
|
|
6113
|
-
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6118
|
-
|
|
6119
|
-
|
|
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
|
-
|
|
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>`;
|