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 CHANGED
@@ -1335,23 +1335,40 @@ Util.terbilang = (nilai) => {
1335
1335
  return penyimpanan
1336
1336
  }
1337
1337
 
1338
- Util.tableShowInGrid = (arr) => {
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 (Util.isNumeric(value)) {
1353
- value = Util.formatNumber(value, '.')
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
- await connection.delete({
1298
- table: table,
1299
- where: {
1300
- id: id,
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
- relations = relations || {}
1031
- var keyFields = key + 'Fields'
1032
- var keyObject = key + 'Object'
1033
- let myvalue = value
1034
- var widgetName = MYMODEL.widgets[key] ? MYMODEL.widgets[key].name : ''
1035
- if (key == 'lock') {
1036
- myvalue = value == 1 ? 'Lock' : 'Unlock'
1037
- } else if (key == 'approval_history') {
1038
- myvalue = zRoute.approval_history_data(myvalue)
1039
- } else {
1040
- if (widgetName) {
1041
- switch (widgetName) {
1042
- case 'switch':
1043
- myvalue = relations[keyFields][value] || ''
1044
- break
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
- case 'color':
1047
- myvalue = `<input type="color" value="${value}">`
1048
- break
1047
+ case 'color':
1048
+ myvalue = `<input type="color" value="${value}">`
1049
+ break
1049
1050
 
1050
- case 'relation':
1051
- myvalue = relations[keyObject][value] || ''
1052
- break
1051
+ case 'relation':
1052
+ myvalue = relations[keyObject][value] || ''
1053
+ break
1053
1054
 
1054
- case 'dropdown_multi':
1055
- let arr = value ? value : []
1056
- if (arr.length) {
1057
- let myarr = []
1058
- arr.forEach(function (item) {
1059
- myarr.push(relations[keyObject][item])
1060
- })
1061
- myvalue = myarr.length ? myarr.join(', ') : ''
1062
- }
1063
- break
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
- case 'dragdrop':
1066
- let arr2 = value ? value : []
1067
- if (arr2.length) {
1068
- let myarr2 = []
1069
- arr2.forEach(function (item) {
1070
- myarr2.push(relations[keyObject][item])
1071
- })
1072
- myvalue = myarr2.length ? myarr2.join(', ') : ''
1073
- }
1074
- break
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
- case 'dropdown_chain':
1077
- myvalue = relations[key][value] || ''
1078
- break
1077
+ case 'dropdown_chain':
1078
+ myvalue = relations[key][value] || ''
1079
+ break
1079
1080
 
1080
- case 'select':
1081
- myvalue = relations[keyFields][value] || ''
1082
- break
1081
+ case 'select':
1082
+ myvalue = relations[keyFields][value] || ''
1083
+ break
1083
1084
 
1084
- case 'radio':
1085
- myvalue = relations[keyFields][value] || ''
1086
- break
1085
+ case 'radio':
1086
+ myvalue = relations[keyFields][value] || ''
1087
+ break
1087
1088
 
1088
- case 'typeahead':
1089
- myvalue = relations[keyObject][value] || ''
1090
- break
1089
+ case 'typeahead':
1090
+ myvalue = relations[keyObject][value] || ''
1091
+ break
1091
1092
 
1092
- case 'datetime':
1093
- myvalue = Util.timeSql(value)
1094
- break
1093
+ case 'datetime':
1094
+ myvalue = Util.timeSql(value)
1095
+ break
1095
1096
 
1096
- case 'datepicker':
1097
- myvalue = Util.dateFormat(value, MYMODEL.widgets[key].format)
1098
- break
1097
+ case 'datepicker':
1098
+ myvalue = Util.dateFormat(value, MYMODEL.widgets[key].format)
1099
+ break
1099
1100
 
1100
- case 'number':
1101
- myvalue = Util.formatNumber(value)
1102
- break
1101
+ case 'number':
1102
+ myvalue = Util.formatNumber(value)
1103
+ break
1103
1104
 
1104
- case 'integer':
1105
- myvalue = value + ''
1106
- break
1105
+ case 'integer':
1106
+ myvalue = value + ''
1107
+ break
1107
1108
 
1108
- case 'image':
1109
- myvalue = Util.fileView('/uploads/' + MYMODEL.routeName + '/', value, { width: 60 })
1110
- break
1109
+ case 'image':
1110
+ myvalue = Util.fileView('/uploads/' + MYMODEL.routeName + '/', value, { width: 60 })
1111
+ break
1111
1112
 
1112
- case 'file':
1113
- myvalue = Util.fileView('/uploads/' + MYMODEL.routeName + '/', value)
1114
- break
1113
+ case 'file':
1114
+ myvalue = Util.fileView('/uploads/' + MYMODEL.routeName + '/', value)
1115
+ break
1115
1116
 
1116
- case 'dropzone':
1117
- if (myvalue && myvalue.length > 0) {
1118
- if (typeof myvalue === 'string') {
1119
- value = [myvalue]
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
- myvalue = value.map((item) => `<a class="text-success" target="_blank" href="/uploads/${MYMODEL.routeName}/${key}/${item}"> ${item.substring(13)}</a> `)
1122
- }
1123
- break
1124
+ break
1124
1125
 
1125
- case 'password':
1126
- myvalue = 'xxxxxx'
1127
- break
1126
+ case 'password':
1127
+ myvalue = 'xxxxxx'
1128
+ break
1128
1129
 
1129
- case 'json':
1130
- myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
1131
- break
1130
+ case 'json':
1131
+ myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
1132
+ break
1132
1133
 
1133
- case 'location':
1134
- myvalue = value ? value.address1 : ''
1135
- break
1134
+ case 'location':
1135
+ myvalue = value ? value.address1 : ''
1136
+ break
1136
1137
 
1137
- case 'json_array':
1138
- myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
1139
- break
1138
+ case 'json_array':
1139
+ myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
1140
+ break
1140
1141
 
1141
- case 'dropdown_checkbox':
1142
- myvalue = value ? value.reduce((acc, item) => `${acc} <u>${item}</u> `, '') : ''
1143
- break
1142
+ case 'dropdown_checkbox':
1143
+ myvalue = value ? value.reduce((acc, item) => `${acc} <u>${item}</u> `, '') : ''
1144
+ break
1144
1145
 
1145
- case 'array':
1146
- myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
1147
- break
1146
+ case 'array':
1147
+ myvalue = value ? JSON.stringify(value).replaceAll('","', '", "') : ''
1148
+ break
1148
1149
 
1149
- case 'table':
1150
- myvalue = Util.tableShowInGrid(value)
1151
- break
1150
+ case 'table':
1151
+ myvalue = Util.tableShowInGrid(value, key, MYMODEL, myCache, companyId)
1152
+ break
1152
1153
 
1153
- default:
1154
- value = value || ''
1155
- myvalue = value.length > 50 ? value.substring(0, 50) : value
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
- /*console.log(result[field])
1754
- console.log(widgets[field].import_field)
1755
- console.log([result[field]][widgets[field].import_field])*/
1756
- if (isNaN(result[field])) {
1757
- myvalue = result[field]
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
- myvalue = result[field] ? aliasResults[field][result[field]][widgets[field].import_field] : ''
1760
- result[field] = result[field] ? aliasResults[field][result[field]][widgets[field].import_field] : ''
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
- myvalue = result[field] ? relations[field][result[field]].zname : ''
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') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zet-lib",
3
- "version": "1.3.37",
3
+ "version": "1.3.39",
4
4
  "description": "zet is a library that part of zet generator.",
5
5
  "engines": {
6
6
  "node": ">=18"