zet-lib 1.3.37 → 1.3.39
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/Util.js +20 -3
- package/lib/zAppRouter.js +10 -6
- package/lib/zRoute.js +162 -117
- package/package.json +1 -1
package/lib/Util.js
CHANGED
|
@@ -1335,23 +1335,40 @@ Util.terbilang = (nilai) => {
|
|
|
1335
1335
|
return penyimpanan
|
|
1336
1336
|
}
|
|
1337
1337
|
|
|
1338
|
-
Util.
|
|
1338
|
+
Util.array_id_to_zname = (arr) => {
|
|
1339
|
+
let r = {}
|
|
1340
|
+
arr.map((item) => {
|
|
1341
|
+
r[item.id] = item.zname;
|
|
1342
|
+
})
|
|
1343
|
+
return r;
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
Util.tableShowInGrid = (arr, qey, MYMODEL, myCache, companyId) => {
|
|
1339
1347
|
try {
|
|
1340
1348
|
if (typeof arr != 'object') {
|
|
1341
1349
|
arr = []
|
|
1342
1350
|
}
|
|
1343
1351
|
arr = arr || []
|
|
1344
1352
|
let html = ''
|
|
1353
|
+
let MYMODELS = myCache.get('MYMODELS');
|
|
1354
|
+
let mywidget = MYMODELS[MYMODEL.widgets[qey].table].widgets
|
|
1345
1355
|
if (arr.length > 0) {
|
|
1346
1356
|
html += `<table class="table table-sm table-striped table-bordered table-hover">`
|
|
1347
1357
|
let json = arr[0]
|
|
1348
1358
|
arr.map((item) => {
|
|
1349
1359
|
html += `<tr>`
|
|
1350
1360
|
for (let key in item) {
|
|
1361
|
+
var keyFields = key + 'Fields'
|
|
1362
|
+
var keyObject = key + 'Object'
|
|
1351
1363
|
let value = item[key]
|
|
1352
|
-
if
|
|
1353
|
-
value = Util.
|
|
1364
|
+
if(mywidget[key].name == "relation"){
|
|
1365
|
+
value = value ? Util.array_id_to_zname(myCache.get(`${mywidget[key].table}_${MYMODEL.widgets[qey].table}___${key}_${companyId}`))[value] : ''
|
|
1366
|
+
} else {
|
|
1367
|
+
if (Util.isNumeric(value)) {
|
|
1368
|
+
value = Util.formatNumber(value, '.')
|
|
1369
|
+
}
|
|
1354
1370
|
}
|
|
1371
|
+
|
|
1355
1372
|
html += `<td>${value}</td>`
|
|
1356
1373
|
}
|
|
1357
1374
|
html += `</tr>`
|
package/lib/zAppRouter.js
CHANGED
|
@@ -1294,12 +1294,16 @@ router.post('/zdeleted-selected/:table', async (req, res) => {
|
|
|
1294
1294
|
if (datas.length > 0) {
|
|
1295
1295
|
for (const data of datas) {
|
|
1296
1296
|
let id = data.name.replace('ck[', '').replace(']', '')
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1297
|
+
try {
|
|
1298
|
+
await connection.delete({
|
|
1299
|
+
table: table,
|
|
1300
|
+
where: {
|
|
1301
|
+
id: id,
|
|
1302
|
+
},
|
|
1303
|
+
})
|
|
1304
|
+
} catch (e) {
|
|
1305
|
+
io.emit('error', e + '')
|
|
1306
|
+
}
|
|
1303
1307
|
}
|
|
1304
1308
|
} else {
|
|
1305
1309
|
json = Util.flashError('No Data')
|
package/lib/zRoute.js
CHANGED
|
@@ -1026,137 +1026,141 @@ zRoute.approval_history_data = (arr = []) => {
|
|
|
1026
1026
|
return myvalue
|
|
1027
1027
|
}
|
|
1028
1028
|
|
|
1029
|
-
zRoute.dataTableData = (key, value, MYMODEL, relations, myid = '') => {
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1029
|
+
zRoute.dataTableData = (key, value, MYMODEL, relations, myid = '', companyId = 1) => {
|
|
1030
|
+
try {
|
|
1031
|
+
relations = relations || {}
|
|
1032
|
+
var keyFields = key + 'Fields'
|
|
1033
|
+
var keyObject = key + 'Object'
|
|
1034
|
+
let myvalue = value
|
|
1035
|
+
var widgetName = MYMODEL.widgets[key] ? MYMODEL.widgets[key].name : ''
|
|
1036
|
+
if (key == 'lock') {
|
|
1037
|
+
myvalue = value == 1 ? 'Lock' : 'Unlock'
|
|
1038
|
+
} else if (key == 'approval_history') {
|
|
1039
|
+
myvalue = zRoute.approval_history_data(myvalue)
|
|
1040
|
+
} else {
|
|
1041
|
+
if (widgetName) {
|
|
1042
|
+
switch (widgetName) {
|
|
1043
|
+
case 'switch':
|
|
1044
|
+
myvalue = relations[keyFields][value] || ''
|
|
1045
|
+
break
|
|
1045
1046
|
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1047
|
+
case 'color':
|
|
1048
|
+
myvalue = `<input type="color" value="${value}">`
|
|
1049
|
+
break
|
|
1049
1050
|
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1051
|
+
case 'relation':
|
|
1052
|
+
myvalue = relations[keyObject][value] || ''
|
|
1053
|
+
break
|
|
1053
1054
|
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1055
|
+
case 'dropdown_multi':
|
|
1056
|
+
let arr = value ? value : []
|
|
1057
|
+
if (arr.length) {
|
|
1058
|
+
let myarr = []
|
|
1059
|
+
arr.forEach(function (item) {
|
|
1060
|
+
myarr.push(relations[keyObject][item])
|
|
1061
|
+
})
|
|
1062
|
+
myvalue = myarr.length ? myarr.join(', ') : ''
|
|
1063
|
+
}
|
|
1064
|
+
break
|
|
1064
1065
|
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1066
|
+
case 'dragdrop':
|
|
1067
|
+
let arr2 = value ? value : []
|
|
1068
|
+
if (arr2.length) {
|
|
1069
|
+
let myarr2 = []
|
|
1070
|
+
arr2.forEach(function (item) {
|
|
1071
|
+
myarr2.push(relations[keyObject][item])
|
|
1072
|
+
})
|
|
1073
|
+
myvalue = myarr2.length ? myarr2.join(', ') : ''
|
|
1074
|
+
}
|
|
1075
|
+
break
|
|
1075
1076
|
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1077
|
+
case 'dropdown_chain':
|
|
1078
|
+
myvalue = relations[key][value] || ''
|
|
1079
|
+
break
|
|
1079
1080
|
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1081
|
+
case 'select':
|
|
1082
|
+
myvalue = relations[keyFields][value] || ''
|
|
1083
|
+
break
|
|
1083
1084
|
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1085
|
+
case 'radio':
|
|
1086
|
+
myvalue = relations[keyFields][value] || ''
|
|
1087
|
+
break
|
|
1087
1088
|
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1089
|
+
case 'typeahead':
|
|
1090
|
+
myvalue = relations[keyObject][value] || ''
|
|
1091
|
+
break
|
|
1091
1092
|
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1093
|
+
case 'datetime':
|
|
1094
|
+
myvalue = Util.timeSql(value)
|
|
1095
|
+
break
|
|
1095
1096
|
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1097
|
+
case 'datepicker':
|
|
1098
|
+
myvalue = Util.dateFormat(value, MYMODEL.widgets[key].format)
|
|
1099
|
+
break
|
|
1099
1100
|
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1101
|
+
case 'number':
|
|
1102
|
+
myvalue = Util.formatNumber(value)
|
|
1103
|
+
break
|
|
1103
1104
|
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1105
|
+
case 'integer':
|
|
1106
|
+
myvalue = value + ''
|
|
1107
|
+
break
|
|
1107
1108
|
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1109
|
+
case 'image':
|
|
1110
|
+
myvalue = Util.fileView('/uploads/' + MYMODEL.routeName + '/', value, { width: 60 })
|
|
1111
|
+
break
|
|
1111
1112
|
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1113
|
+
case 'file':
|
|
1114
|
+
myvalue = Util.fileView('/uploads/' + MYMODEL.routeName + '/', value)
|
|
1115
|
+
break
|
|
1115
1116
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1117
|
+
case 'dropzone':
|
|
1118
|
+
if (myvalue && myvalue.length > 0) {
|
|
1119
|
+
if (typeof myvalue === 'string') {
|
|
1120
|
+
value = [myvalue]
|
|
1121
|
+
}
|
|
1122
|
+
myvalue = value.map((item) => `<a class="text-success" target="_blank" href="/uploads/${MYMODEL.routeName}/${key}/${item}"> ${item.substring(13)}</a> `)
|
|
1120
1123
|
}
|
|
1121
|
-
|
|
1122
|
-
}
|
|
1123
|
-
break
|
|
1124
|
+
break
|
|
1124
1125
|
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1126
|
+
case 'password':
|
|
1127
|
+
myvalue = 'xxxxxx'
|
|
1128
|
+
break
|
|
1128
1129
|
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1130
|
+
case 'json':
|
|
1131
|
+
myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
|
|
1132
|
+
break
|
|
1132
1133
|
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1134
|
+
case 'location':
|
|
1135
|
+
myvalue = value ? value.address1 : ''
|
|
1136
|
+
break
|
|
1136
1137
|
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1138
|
+
case 'json_array':
|
|
1139
|
+
myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
|
|
1140
|
+
break
|
|
1140
1141
|
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1142
|
+
case 'dropdown_checkbox':
|
|
1143
|
+
myvalue = value ? value.reduce((acc, item) => `${acc} <u>${item}</u> `, '') : ''
|
|
1144
|
+
break
|
|
1144
1145
|
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1146
|
+
case 'array':
|
|
1147
|
+
myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
|
|
1148
|
+
break
|
|
1148
1149
|
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1150
|
+
case 'table':
|
|
1151
|
+
myvalue = Util.tableShowInGrid(value, key, MYMODEL, myCache, companyId)
|
|
1152
|
+
break
|
|
1152
1153
|
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1154
|
+
default:
|
|
1155
|
+
value = value || ''
|
|
1156
|
+
myvalue = value.length > 50 ? value.substring(0, 50) : value
|
|
1157
|
+
}
|
|
1156
1158
|
}
|
|
1157
1159
|
}
|
|
1160
|
+
return myvalue
|
|
1161
|
+
} catch (e) {
|
|
1162
|
+
console.log(e)
|
|
1158
1163
|
}
|
|
1159
|
-
return myvalue
|
|
1160
1164
|
}
|
|
1161
1165
|
|
|
1162
1166
|
zRoute.users = async (req) => {
|
|
@@ -1637,7 +1641,7 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
|
|
|
1637
1641
|
let aliasResults = {}
|
|
1638
1642
|
for (let key in MYMODEL.widgets) {
|
|
1639
1643
|
if (!notJoins.includes(key)) {
|
|
1640
|
-
if (MYMODEL.widgets[key].name == 'relation' || MYMODEL.widgets[key].name == 'typeahead') {
|
|
1644
|
+
if (MYMODEL.widgets[key].name == 'relation' || MYMODEL.widgets[key].name == 'typeahead' || MYMODEL.widgets[key].name == 'dropdown_multi') {
|
|
1641
1645
|
if (MYMODEL.widgets[key].import_field && MYMODEL.widgets[key].import_field != 'id') {
|
|
1642
1646
|
aliasResults[key] = Util.arrayToObject(
|
|
1643
1647
|
await connection.results({
|
|
@@ -1671,7 +1675,7 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
|
|
|
1671
1675
|
tableObj[key] = widget.fields
|
|
1672
1676
|
} else if (widget.name == 'switch') {
|
|
1673
1677
|
tableObj[key] = widget.fields
|
|
1674
|
-
} else if (widget.name == 'relation' || widget.name == 'typeahead') {
|
|
1678
|
+
} else if (widget.name == 'relation' || widget.name == 'typeahead' || widget.name == 'dropdown_multi') {
|
|
1675
1679
|
var rowsarr = await connection.results({
|
|
1676
1680
|
table: widget.table,
|
|
1677
1681
|
select: widget.fields[0] + ',' + widget.fields[1] + ' as zname ',
|
|
@@ -1747,20 +1751,31 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
|
|
|
1747
1751
|
} else {
|
|
1748
1752
|
t = !callback(result, field) ? tableObj[field][result[field]] || '' : callback(result, field)
|
|
1749
1753
|
}
|
|
1750
|
-
} else if ((widgets.hasOwnProperty(field) && widgets[field].name == 'relation') || (widgets.hasOwnProperty(field) && widgets[field].name == 'typeahead')) {
|
|
1754
|
+
} else if ((widgets.hasOwnProperty(field) && widgets[field].name == 'relation') || (widgets.hasOwnProperty(field) && widgets[field].name == 'typeahead') || (widgets.hasOwnProperty(field) && widgets[field].name == 'dropdown_multi')) {
|
|
1751
1755
|
let myvalue = ''
|
|
1752
1756
|
if (widgets[field].import_field && widgets[field].import_field != 'id') {
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1757
|
+
if (widgets[field].name == 'dropdown_multi') {
|
|
1758
|
+
if (Array.isArray(result[field])) {
|
|
1759
|
+
let dropdownmultivalue = []
|
|
1760
|
+
result[field].map((item) => {
|
|
1761
|
+
dropdownmultivalue.push(relations[field][item].zname)
|
|
1762
|
+
})
|
|
1763
|
+
result[field] = result[field] ? JSON.stringify(dropdownmultivalue) : ''
|
|
1764
|
+
}
|
|
1758
1765
|
} else {
|
|
1759
|
-
|
|
1760
|
-
|
|
1766
|
+
if (isNaN(result[field])) {
|
|
1767
|
+
myvalue = result[field]
|
|
1768
|
+
} else {
|
|
1769
|
+
myvalue = result[field] ? aliasResults[field][result[field]][widgets[field].import_field] : ''
|
|
1770
|
+
result[field] = result[field] ? aliasResults[field][result[field]][widgets[field].import_field] : ''
|
|
1771
|
+
}
|
|
1761
1772
|
}
|
|
1762
1773
|
} else {
|
|
1763
|
-
|
|
1774
|
+
if (widgets[field].name == 'dropdown_multi') {
|
|
1775
|
+
myvalue = result[field] ? result[field] : ''
|
|
1776
|
+
} else {
|
|
1777
|
+
myvalue = result[field] ? relations[field][result[field]].zname : ''
|
|
1778
|
+
}
|
|
1764
1779
|
}
|
|
1765
1780
|
if (isRaws) {
|
|
1766
1781
|
t = !callback(result, field) ? result[field] : callback(result, field)
|
|
@@ -2161,6 +2176,7 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
|
|
|
2161
2176
|
zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
|
|
2162
2177
|
const room = res.locals.token || 'aa'
|
|
2163
2178
|
const table = MYMODEL.table
|
|
2179
|
+
const companyId = res.locals.companyId;
|
|
2164
2180
|
try {
|
|
2165
2181
|
actionButtonsFn = actionButtonsFn || function () {}
|
|
2166
2182
|
const relations = await zRoute.relations(req, res, MYMODEL.table)
|
|
@@ -2270,7 +2286,7 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
|
|
|
2270
2286
|
let buttons = !actionButtonsFn(levels, row, MYMODEL.table) ? zRoute.actionButtons(levels, row, MYMODEL.table) : actionButtonsFn(levels, row, MYMODEL.table)
|
|
2271
2287
|
arr.push(buttons)
|
|
2272
2288
|
} else {
|
|
2273
|
-
arr.push(zRoute.dataTableData(item, row[item], MYMODEL, relations, row.id))
|
|
2289
|
+
arr.push(zRoute.dataTableData(item, row[item], MYMODEL, relations, row.id, companyId))
|
|
2274
2290
|
}
|
|
2275
2291
|
})
|
|
2276
2292
|
datas.push(arr)
|
|
@@ -4180,6 +4196,8 @@ zRoute.import = async (req, res, MYMODEL) => {
|
|
|
4180
4196
|
let json = Util.jsonSuccess(LANGUAGE['import_success'])
|
|
4181
4197
|
let aliasRelations = []
|
|
4182
4198
|
let selectRelations = ''
|
|
4199
|
+
let isDropdownWidgets = []
|
|
4200
|
+
let dropdownWidgetRelations = {}
|
|
4183
4201
|
for (let key in MYMODEL.widgets) {
|
|
4184
4202
|
if (MYMODEL.widgets[key]) {
|
|
4185
4203
|
if (MYMODEL.widgets[key].name == 'relation' || MYMODEL.widgets[key].name == 'typeahead') {
|
|
@@ -4188,6 +4206,19 @@ zRoute.import = async (req, res, MYMODEL) => {
|
|
|
4188
4206
|
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} `
|
|
4189
4207
|
}
|
|
4190
4208
|
}
|
|
4209
|
+
|
|
4210
|
+
if (MYMODEL.widgets[key].name == 'dropdown_multi') {
|
|
4211
|
+
if (MYMODEL.widgets[key].import_field && MYMODEL.widgets[key].import_field != 'id') {
|
|
4212
|
+
isDropdownWidgets.push(key)
|
|
4213
|
+
let cacheName = `${MYMODEL.widgets[key].table}_${MYMODEL.table}___${key}_${companyId}`
|
|
4214
|
+
let datasName = myCache.get(cacheName) || []
|
|
4215
|
+
let objDatas = {}
|
|
4216
|
+
datasName.map((item) => {
|
|
4217
|
+
objDatas[item.zname] = item.id
|
|
4218
|
+
})
|
|
4219
|
+
dropdownWidgetRelations[key] = objDatas
|
|
4220
|
+
}
|
|
4221
|
+
}
|
|
4191
4222
|
}
|
|
4192
4223
|
}
|
|
4193
4224
|
try {
|
|
@@ -4253,12 +4284,26 @@ zRoute.import = async (req, res, MYMODEL) => {
|
|
|
4253
4284
|
table: MYMODEL.widgets[keys[prop]].table,
|
|
4254
4285
|
whereArray: [
|
|
4255
4286
|
//{field:"your_field",option:"=>",value:"12",operator:"AND",type:"text,json,date"}
|
|
4256
|
-
{ field: MYMODEL.widgets[keys[prop]].import_field, option: 'ILIKE', value: value },
|
|
4287
|
+
//{ field: MYMODEL.widgets[keys[prop]].import_field, option: 'ILIKE', value: value },
|
|
4288
|
+
{ field: MYMODEL.widgets[keys[prop]].import_field, option: '=', value: value },
|
|
4257
4289
|
],
|
|
4258
4290
|
})
|
|
4259
4291
|
if (result_alias.id) {
|
|
4260
4292
|
data[keys[prop]] = result_alias.id
|
|
4261
4293
|
}
|
|
4294
|
+
} else if (isDropdownWidgets.includes(keys[prop])) {
|
|
4295
|
+
value = value + ''.trim()
|
|
4296
|
+
let letter = value.charAt(0)
|
|
4297
|
+
if (letter == '[') {
|
|
4298
|
+
let dArray = []
|
|
4299
|
+
let dropdownMultiArrays = JSON.parse(value)
|
|
4300
|
+
dropdownMultiArrays.map((dropdownMultiArray) => {
|
|
4301
|
+
if (dropdownWidgetRelations[keys[prop]][dropdownMultiArray]) {
|
|
4302
|
+
dArray.push(dropdownWidgetRelations[keys[prop]][dropdownMultiArray])
|
|
4303
|
+
}
|
|
4304
|
+
})
|
|
4305
|
+
data[keys[prop]] = JSON.stringify(dArray)
|
|
4306
|
+
}
|
|
4262
4307
|
} else {
|
|
4263
4308
|
let name = MYMODEL.widgets[keys[prop]] && MYMODEL.widgets[keys[prop]].name ? MYMODEL.widgets[keys[prop]].name : ''
|
|
4264
4309
|
if (name != 'virtual') {
|