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/zAppRouter.js +20 -10
- package/lib/zRoute.js +637 -625
- 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
|
}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
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
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
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
|
-
|
|
1263
|
-
|
|
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
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
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
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1312
|
-
|
|
1311
|
+
? JSON.stringify(value).replaceAll('","', '", "')
|
|
1312
|
+
: "";
|
|
1313
1313
|
break;
|
|
1314
1314
|
|
|
1315
1315
|
case "dropdown_checkbox":
|
|
1316
1316
|
myvalue = value
|
|
1317
|
-
|
|
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
|
-
|
|
1324
|
-
|
|
1323
|
+
? JSON.stringify(value).replaceAll('","', '", "')
|
|
1324
|
+
: "";
|
|
1325
1325
|
break;
|
|
1326
1326
|
|
|
1327
1327
|
case "table":
|
|
1328
1328
|
myvalue = Util.tableShowInGrid(
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
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
|
-
|
|
1355
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
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
|
-
|
|
1500
|
-
|
|
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
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
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
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
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
|
-
|
|
1849
|
-
|
|
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
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
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
|
-
|
|
1894
|
-
|
|
1893
|
+
MYMODEL.widgets[key].import_field &&
|
|
1894
|
+
MYMODEL.widgets[key].import_field != "id"
|
|
1895
1895
|
) {
|
|
1896
1896
|
aliasResults[key] = Util.arrayToObject(
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
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
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
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
|
-
|
|
1947
|
-
|
|
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
|
-
|
|
1953
|
-
|
|
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
|
-
|
|
1958
|
-
|
|
1957
|
+
? result[field]
|
|
1958
|
+
: callback(result, field);
|
|
1959
1959
|
} else {
|
|
1960
1960
|
t = !callback(result, field)
|
|
1961
|
-
|
|
1962
|
-
|
|
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
|
-
|
|
1970
|
-
|
|
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
|
-
|
|
1976
|
-
|
|
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
|
-
|
|
1989
|
-
|
|
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
|
-
|
|
1994
|
-
|
|
1993
|
+
widgets.hasOwnProperty(field) &&
|
|
1994
|
+
widgets[field].name == "select"
|
|
1995
1995
|
) {
|
|
1996
1996
|
if (isRaws) {
|
|
1997
1997
|
t = !callback(result, field)
|
|
1998
|
-
|
|
1999
|
-
|
|
1998
|
+
? result[field]
|
|
1999
|
+
: callback(result, field);
|
|
2000
2000
|
} else {
|
|
2001
2001
|
t = !callback(result, field)
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
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
|
-
|
|
2009
|
-
|
|
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
|
-
|
|
2016
|
-
|
|
2015
|
+
? Util.timeSql(result[field])
|
|
2016
|
+
: callback(result, field);
|
|
2017
2017
|
} else {
|
|
2018
2018
|
t = !callback(result, field)
|
|
2019
|
-
|
|
2020
|
-
|
|
2019
|
+
? Util.timeSql(result[field])
|
|
2020
|
+
: callback(result, field);
|
|
2021
2021
|
}
|
|
2022
2022
|
} else if (
|
|
2023
|
-
|
|
2024
|
-
|
|
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
|
-
|
|
2030
|
-
|
|
2029
|
+
? Util.dateFormat(result[field])
|
|
2030
|
+
: callback(result, field);
|
|
2031
2031
|
} else {
|
|
2032
2032
|
t = !callback(result, field)
|
|
2033
|
-
|
|
2034
|
-
|
|
2033
|
+
? Util.dateFormat(result[field])
|
|
2034
|
+
: callback(result, field);
|
|
2035
2035
|
}
|
|
2036
2036
|
} else if (
|
|
2037
|
-
|
|
2038
|
-
|
|
2037
|
+
widgets.hasOwnProperty(field) &&
|
|
2038
|
+
widgets[field].name == "switch"
|
|
2039
2039
|
) {
|
|
2040
2040
|
if (isRaws) {
|
|
2041
2041
|
t = !callback(result, field)
|
|
2042
|
-
|
|
2043
|
-
|
|
2042
|
+
? result[field]
|
|
2043
|
+
: callback(result, field);
|
|
2044
2044
|
} else {
|
|
2045
2045
|
t = !callback(result, field)
|
|
2046
|
-
|
|
2047
|
-
|
|
2046
|
+
? tableObj[field][result[field]] || ""
|
|
2047
|
+
: callback(result, field);
|
|
2048
2048
|
}
|
|
2049
2049
|
} else if (
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2074
|
+
? aliasResults[field][result[field]][
|
|
2075
|
+
widgets[field].import_field
|
|
2076
|
+
]
|
|
2077
|
+
: "";
|
|
2078
2078
|
result[field] = result[field]
|
|
2079
|
-
|
|
2080
|
-
|
|
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
|
-
|
|
2097
|
-
|
|
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
|
-
|
|
2104
|
-
|
|
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
|
-
|
|
2117
|
-
|
|
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
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
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
|
-
|
|
2175
|
-
|
|
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
|
-
|
|
2179
|
-
|
|
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
|
-
|
|
2183
|
-
|
|
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
|
-
|
|
2187
|
-
|
|
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
|
-
|
|
2195
|
-
|
|
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
|
-
|
|
2207
|
-
|
|
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
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
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
|
-
|
|
2219
|
-
|
|
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
|
-
|
|
2223
|
-
|
|
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
|
-
|
|
2227
|
-
|
|
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
|
-
|
|
2232
|
-
|
|
2231
|
+
? relations[field][result[field]].zname || ""
|
|
2232
|
+
: callback(result, field);
|
|
2233
2233
|
}
|
|
2234
2234
|
} else {
|
|
2235
2235
|
t = !callback(result, field)
|
|
2236
|
-
|
|
2237
|
-
|
|
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
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
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
|
-
|
|
2392
|
-
|
|
2391
|
+
? objData.fields
|
|
2392
|
+
: req.body.fields;
|
|
2393
2393
|
let relations = await zRoute.relations(
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
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
|
-
|
|
2402
|
-
|
|
2401
|
+
? objData.select
|
|
2402
|
+
: Util.selectParser(fields, MYMODEL);
|
|
2403
2403
|
const columns = Object.prototype.hasOwnProperty.call(objData, "columns")
|
|
2404
|
-
|
|
2405
|
-
|
|
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
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
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
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
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
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
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
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
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
|
-
|
|
2524
|
-
|
|
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
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
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
|
-
|
|
2542
|
-
|
|
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
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2546
|
+
? objData.dataTableData(
|
|
2547
|
+
item,
|
|
2548
|
+
row[item],
|
|
2549
|
+
MYMODEL,
|
|
2550
|
+
relations,
|
|
2551
|
+
row.id
|
|
2552
2552
|
)
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
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
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
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
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
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
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
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
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
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
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
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
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
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
|
-
|
|
2739
|
-
|
|
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
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
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
|
-
|
|
2911
|
-
|
|
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
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
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
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
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
|
-
|
|
3125
|
-
|
|
3124
|
+
`dropzone__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
|
|
3125
|
+
obj.value
|
|
3126
3126
|
);
|
|
3127
3127
|
}
|
|
3128
3128
|
let dropzoneValue =
|
|
3129
|
-
|
|
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
|
-
|
|
3157
|
-
|
|
3156
|
+
`dropbox__${res.locals.userId}__${MYMODEL.table}__${key}__${data.id}`,
|
|
3157
|
+
obj.value
|
|
3158
3158
|
);
|
|
3159
3159
|
}
|
|
3160
3160
|
let dropboxValue =
|
|
3161
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
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
|
-
|
|
3214
|
-
|
|
3215
|
-
|
|
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
|
-
|
|
3229
|
-
|
|
3230
|
-
|
|
3231
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
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
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
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
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3523
|
-
}. ${
|
|
3524
|
-
|
|
3525
|
-
} ${Util.
|
|
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
|
-
|
|
3574
|
-
|
|
3575
|
-
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3579
|
-
|
|
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
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
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
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
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
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3642
|
+
`/uploads/${MODEL_TABLE.routeName}/${keyName}/`,
|
|
3643
|
+
data[key],
|
|
3644
|
+
{ withIcon: true }
|
|
3633
3645
|
);
|
|
3634
3646
|
} else {
|
|
3635
3647
|
obj[key].value =
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
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
|
-
|
|
3652
|
-
|
|
3663
|
+
? widgets[key].fields[data[key]]
|
|
3664
|
+
: widgets[key].fields[0];
|
|
3653
3665
|
obj[
|
|
3654
|
-
|
|
3655
|
-
|
|
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
|
-
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
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
|
-
|
|
3761
|
-
|
|
3772
|
+
"/uploads/" + hasKeys + "/",
|
|
3773
|
+
results[key]
|
|
3762
3774
|
);
|
|
3763
3775
|
} else {
|
|
3764
3776
|
data[key] = Util.fileView(
|
|
3765
|
-
|
|
3766
|
-
|
|
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
|
-
|
|
3774
|
-
|
|
3785
|
+
"/uploads/" + hasKeys + "/",
|
|
3786
|
+
results[key]
|
|
3775
3787
|
);
|
|
3776
3788
|
} else {
|
|
3777
3789
|
data[key] = Util.fileView(
|
|
3778
|
-
|
|
3779
|
-
|
|
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
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
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
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
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
|
-
|
|
3827
|
-
|
|
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
|
-
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
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
|
-
|
|
3874
|
+
? ""
|
|
3875
|
+
: Util.replaceAll(results[key], "</script>", `<//script>`);
|
|
3864
3876
|
//data[key] = editorValue;
|
|
3865
3877
|
moduleLib.addScript(
|
|
3866
|
-
|
|
3867
|
-
|
|
3868
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
|
|
3909
|
-
|
|
3910
|
-
|
|
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
|
-
|
|
3946
|
+
widgets[item].language
|
|
3935
3947
|
}");
|
|
3936
3948
|
editor_${item}.setValue(ace_value(ide_editor_${item}));
|
|
3937
3949
|
$("#editor_${item}").css({height:${
|
|
3938
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
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
|
-
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4505
|
-
|
|
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
|
-
|
|
4510
|
-
|
|
4511
|
-
|
|
4521
|
+
relations && relations.hasOwnProperty(keys + "TABLE")
|
|
4522
|
+
? relations[keys + "TABLE"]
|
|
4523
|
+
: {};
|
|
4512
4524
|
let zForm = zRoute.formField(
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
|
|
4525
|
+
req,
|
|
4526
|
+
res,
|
|
4527
|
+
MODEL_TABLE,
|
|
4528
|
+
RELATIONS_MODEL_TABLE
|
|
4517
4529
|
);
|
|
4518
4530
|
zRoute.moduleLib(
|
|
4519
|
-
|
|
4520
|
-
|
|
4521
|
-
|
|
4522
|
-
|
|
4523
|
-
|
|
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
|
-
|
|
4564
|
+
MYMODEL.table
|
|
4553
4565
|
}','${keys}','${JSON.stringify(
|
|
4554
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4908
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5045
|
-
|
|
5056
|
+
resultItem &&
|
|
5057
|
+
Object.prototype.hasOwnProperty.call(resultItem, index)
|
|
5046
5058
|
) {
|
|
5047
5059
|
let resultItemIndex = resultItem[index];
|
|
5048
5060
|
if (
|
|
5049
|
-
|
|
5050
|
-
|
|
5061
|
+
resultItemIndex &&
|
|
5062
|
+
Object.prototype.hasOwnProperty.call(resultItemIndex, key)
|
|
5051
5063
|
) {
|
|
5052
5064
|
obj[key] = !result[item][index]
|
|
5053
|
-
|
|
5054
|
-
|
|
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
|
-
|
|
5208
|
-
|
|
5219
|
+
MYMODEL.widgets[key].name == "relation" ||
|
|
5220
|
+
MYMODEL.widgets[key].name == "typeahead"
|
|
5209
5221
|
) {
|
|
5210
5222
|
if (
|
|
5211
|
-
|
|
5212
|
-
|
|
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
|
-
|
|
5222
|
-
|
|
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
|
-
|
|
5248
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5328
|
-
|
|
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
|
-
|
|
5446
|
-
|
|
5457
|
+
MYMODELS[MYMODEL.widgets[keys].table] ||
|
|
5458
|
+
require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`);
|
|
5447
5459
|
let MODEL_TABLE_RELATIONS = await zRoute.relations(
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5671
|
-
|
|
5682
|
+
`${keys}___${key}`
|
|
5683
|
+
] = `${widgets[key].fields[1]} as ${key}_${models[keys].table}`;
|
|
5672
5684
|
if (
|
|
5673
|
-
|
|
5685
|
+
Object.prototype.hasOwnProperty.call(models[keys].widgets, key)
|
|
5674
5686
|
) {
|
|
5675
5687
|
if (
|
|
5676
|
-
|
|
5677
|
-
|
|
5678
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
|
|
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
|
-
|
|
6072
|
-
|
|
6073
|
-
|
|
6074
|
-
|
|
6075
|
-
|
|
6076
|
-
|
|
6077
|
-
|
|
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
|
-
|
|
6089
|
-
|
|
6090
|
-
|
|
6091
|
-
|
|
6092
|
-
|
|
6093
|
-
|
|
6094
|
-
|
|
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
|
-
|
|
6113
|
-
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6118
|
-
|
|
6119
|
-
|
|
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
|
-
|
|
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>`;
|