zet-lib 1.3.25 → 1.3.27
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 +6 -2
- package/lib/zGeneratorRouter.js +4 -6
- package/lib/zRoute.js +298 -177
- package/package.json +1 -1
package/lib/Util.js
CHANGED
|
@@ -1204,13 +1204,17 @@ Util.selectParser = (fields = [], MYMODEL = {}) => {
|
|
|
1204
1204
|
return select
|
|
1205
1205
|
}
|
|
1206
1206
|
|
|
1207
|
-
Util.fieldWithTable = (field, MYMODEL) => {
|
|
1207
|
+
Util.fieldWithTable = (field, MYMODEL, isWhere = false) => {
|
|
1208
1208
|
let name = ''
|
|
1209
1209
|
let joinList = MYMODEL.joins && MYMODEL.joins.list.length > 0 ? MYMODEL.joins.list : []
|
|
1210
1210
|
if (joinList.length > 0) {
|
|
1211
1211
|
if (joinList.includes(field)) {
|
|
1212
1212
|
let split = field.split('___')
|
|
1213
|
-
|
|
1213
|
+
if (isWhere) {
|
|
1214
|
+
name = `${split[0]}.${split[1]}`
|
|
1215
|
+
} else {
|
|
1216
|
+
name = `${split[0]}.${split[1]} as ${field}`
|
|
1217
|
+
}
|
|
1214
1218
|
} else {
|
|
1215
1219
|
name = `${MYMODEL.table}.${field}`
|
|
1216
1220
|
}
|
package/lib/zGeneratorRouter.js
CHANGED
|
@@ -670,8 +670,6 @@ const buildJoin = async (MYMODEL, result) => {
|
|
|
670
670
|
if (result.joins && Object.keys(joins).length > 0) {
|
|
671
671
|
let newDataObj = {}
|
|
672
672
|
for (let key in joins) {
|
|
673
|
-
//find relation
|
|
674
|
-
//sql.push(` LEFT JOIN ${key} ON ${key}.id = ${table}.${key}_id `)
|
|
675
673
|
let THEIR_MODEL = require(`${dirRoot}/models/${key}`)
|
|
676
674
|
//console.log(THEIR_MODEL)
|
|
677
675
|
let arr = joins[key] || []
|
|
@@ -680,7 +678,8 @@ const buildJoin = async (MYMODEL, result) => {
|
|
|
680
678
|
arr.map((item) => {
|
|
681
679
|
//console.log(item)
|
|
682
680
|
//console.log(typeof item)
|
|
683
|
-
const originKey = key.replace(`${key}___`, '')
|
|
681
|
+
const originKey = item.key.replace(`${key}___`, '')
|
|
682
|
+
console.log(originKey)
|
|
684
683
|
newDataObj[item.key] = item.value
|
|
685
684
|
MYMODEL.keys.push(item.key)
|
|
686
685
|
MYMODEL.keysExcel.push(item.key)
|
|
@@ -689,7 +688,7 @@ const buildJoin = async (MYMODEL, result) => {
|
|
|
689
688
|
MYMODEL.options[item.key] = THEIR_MODEL.options[originKey]
|
|
690
689
|
MYMODEL.grids.invisibles.push(item.key)
|
|
691
690
|
MYMODEL.datas[item.key] = THEIR_MODEL.datas[originKey]
|
|
692
|
-
|
|
691
|
+
MYMODEL.widgets[item.key] = THEIR_MODEL.widgets[originKey]
|
|
693
692
|
join_list.push(item.key)
|
|
694
693
|
})
|
|
695
694
|
}
|
|
@@ -744,7 +743,7 @@ const buildJoin = async (MYMODEL, result) => {
|
|
|
744
743
|
foreignTables.push(row.foreign_table_name)
|
|
745
744
|
foreign_table_name[row.foreign_table_name] = ` LEFT JOIN ${row.foreign_table_name} ON ${row.foreign_table_name}.id = ${table_steps_item}.${row.column_name} `
|
|
746
745
|
})
|
|
747
|
-
console.log(foreignTables)
|
|
746
|
+
//console.log(foreignTables)
|
|
748
747
|
table_joins.map((item) => {
|
|
749
748
|
if (!table_steps.includes(item)) {
|
|
750
749
|
if (foreignTables.includes(item)) {
|
|
@@ -1392,7 +1391,6 @@ const scanning = async (MYMODEL, result) => {
|
|
|
1392
1391
|
newModel += `${Util.newLine}`
|
|
1393
1392
|
newModel += `}`
|
|
1394
1393
|
fs.writeFileSync(`${dirRoot}/models/${MYMODEL.table}.js`, newModel)
|
|
1395
|
-
|
|
1396
1394
|
//return MYMODEL;
|
|
1397
1395
|
}
|
|
1398
1396
|
|
package/lib/zRoute.js
CHANGED
|
@@ -512,7 +512,7 @@ zRoute.selectData = (MYMODEL) => {
|
|
|
512
512
|
return data
|
|
513
513
|
}
|
|
514
514
|
|
|
515
|
-
zRoute.
|
|
515
|
+
zRoute.relationTable = async (req, res, table) => {
|
|
516
516
|
try {
|
|
517
517
|
const MYMODELS = myCache.get('MYMODELS')
|
|
518
518
|
const MYMODEL = MYMODELS[table]
|
|
@@ -523,7 +523,7 @@ zRoute.relations = async (req, res, table) => {
|
|
|
523
523
|
let hasAttributes = false
|
|
524
524
|
let zattributes = {}
|
|
525
525
|
let company_id = res.locals.companyId
|
|
526
|
-
//
|
|
526
|
+
//widgets
|
|
527
527
|
for (let key in MYMODEL.widgets) {
|
|
528
528
|
const keyRow = key + 'Row'
|
|
529
529
|
const keyFields = key + 'Fields'
|
|
@@ -717,7 +717,6 @@ zRoute.relations = async (req, res, table) => {
|
|
|
717
717
|
}
|
|
718
718
|
}
|
|
719
719
|
//console.log(relations);
|
|
720
|
-
|
|
721
720
|
let selectZvirtuals = ''
|
|
722
721
|
for (let key in relations['zvirtuals']) {
|
|
723
722
|
selectZvirtuals += `${relations['zvirtuals'][key]} , `
|
|
@@ -733,6 +732,51 @@ zRoute.relations = async (req, res, table) => {
|
|
|
733
732
|
}
|
|
734
733
|
}
|
|
735
734
|
|
|
735
|
+
zRoute.relations = async (req, res, table) => {
|
|
736
|
+
try {
|
|
737
|
+
const MYMODELS = myCache.get('MYMODELS')
|
|
738
|
+
const MYMODEL = MYMODELS[table]
|
|
739
|
+
let relation = await zRoute.relationTable(req, res, table)
|
|
740
|
+
let relations = {}
|
|
741
|
+
if (MYMODEL.joins && MYMODEL.joins.list) {
|
|
742
|
+
let joinOfTables = MYMODEL.joins.tables
|
|
743
|
+
for (let key of joinOfTables) {
|
|
744
|
+
relations[key] = await zRoute.relationTable(req, res, key)
|
|
745
|
+
}
|
|
746
|
+
let listData = MYMODEL.joins.list || []
|
|
747
|
+
listData.map((item) => {
|
|
748
|
+
let split = item.split('___')
|
|
749
|
+
let mytable = split[0]
|
|
750
|
+
let key = split[1]
|
|
751
|
+
const itemRow = item + 'Row'
|
|
752
|
+
const itemFields = item + 'Fields'
|
|
753
|
+
const itemObject = item + 'Object'
|
|
754
|
+
const keyRow = key + 'Row'
|
|
755
|
+
const keyFields = key + 'Fields'
|
|
756
|
+
const keyObject = key + 'Object'
|
|
757
|
+
|
|
758
|
+
let relName = relations[mytable]
|
|
759
|
+
if (relName[key]) {
|
|
760
|
+
relation[item] = relName[key]
|
|
761
|
+
}
|
|
762
|
+
if (relName[keyRow]) {
|
|
763
|
+
relation[itemRow] = relName[keyRow]
|
|
764
|
+
}
|
|
765
|
+
if (relName[keyFields]) {
|
|
766
|
+
relation[itemFields] = relName[keyFields]
|
|
767
|
+
}
|
|
768
|
+
if (relName[keyObject]) {
|
|
769
|
+
relation[itemObject] = relName[keyObject]
|
|
770
|
+
}
|
|
771
|
+
})
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
return relation
|
|
775
|
+
} catch (e) {
|
|
776
|
+
console.log(e)
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
|
|
736
780
|
/*
|
|
737
781
|
Function to create filter elements on data table grid
|
|
738
782
|
*/
|
|
@@ -1340,6 +1384,7 @@ zRoute.selectAllowedField = (req, res, MYMODEL, arr = []) => {
|
|
|
1340
1384
|
}
|
|
1341
1385
|
|
|
1342
1386
|
zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
|
|
1387
|
+
const table = MYMODEL.table
|
|
1343
1388
|
const cacheRole = myCache.get('ROLES')[res.locals.roleId].params
|
|
1344
1389
|
const levels = cacheRole[MYMODEL.table] || []
|
|
1345
1390
|
if (!levels.includes('export')) {
|
|
@@ -1349,20 +1394,28 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
|
|
|
1349
1394
|
|
|
1350
1395
|
let virtuals = []
|
|
1351
1396
|
let customs = []
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
}
|
|
1357
|
-
if (MYMODEL.widgets[key].name === 'custom') {
|
|
1358
|
-
customs.push(key)
|
|
1359
|
-
}
|
|
1397
|
+
const asDate = []
|
|
1398
|
+
const asJSONb = []
|
|
1399
|
+
const asArray = []
|
|
1400
|
+
for (let key in MYMODEL.widgets) {
|
|
1360
1401
|
if (MYMODEL.widgets[key].name == 'datetime') {
|
|
1361
1402
|
asDate.push(key)
|
|
1362
1403
|
}
|
|
1363
1404
|
if (MYMODEL.widgets[key].name == 'datepicker') {
|
|
1364
1405
|
asDate.push(key)
|
|
1365
1406
|
}
|
|
1407
|
+
if (MYMODEL.widgets[key].name == 'dropdown_multi') {
|
|
1408
|
+
asJSONb.push(key)
|
|
1409
|
+
}
|
|
1410
|
+
if (MYMODEL.widgets[key].name == 'dragdrop') {
|
|
1411
|
+
asJSONb.push(key)
|
|
1412
|
+
}
|
|
1413
|
+
if (MYMODEL.widgets[key].name == 'dropdown_checkbox') {
|
|
1414
|
+
asJSONb.push(key)
|
|
1415
|
+
}
|
|
1416
|
+
if (MYMODEL.widgets[key].name == 'json_array' || MYMODEL.widgets[key].name == 'array' || MYMODEL.widgets[key].name == 'dropzone') {
|
|
1417
|
+
asArray.push(key)
|
|
1418
|
+
}
|
|
1366
1419
|
}
|
|
1367
1420
|
//check directory for import not export
|
|
1368
1421
|
const dir = `${dirRoot}/public/excel/tmp`
|
|
@@ -1397,7 +1450,8 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
|
|
|
1397
1450
|
let difference = allfields.filter((x) => !fields.includes(x))
|
|
1398
1451
|
arr = [...fields, ...difference].filter((x) => !virtuals.includes(x))
|
|
1399
1452
|
arr = arr.filter((item) => !customs.includes(item))
|
|
1400
|
-
select = `"${arr.join('","')}"`
|
|
1453
|
+
//select = `"${arr.join('","')}"`
|
|
1454
|
+
select = Util.selectParser(arr, MYMODEL)
|
|
1401
1455
|
}
|
|
1402
1456
|
let whereArray = []
|
|
1403
1457
|
if (paramsObject.hasOwnProperty('whereArray')) {
|
|
@@ -1407,48 +1461,90 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
|
|
|
1407
1461
|
whereArray.push(paramsObject.whereArray)
|
|
1408
1462
|
}
|
|
1409
1463
|
}
|
|
1464
|
+
|
|
1465
|
+
whereArray.push({
|
|
1466
|
+
field: `${table}.company_id`,
|
|
1467
|
+
option: '=',
|
|
1468
|
+
value: res.locals.companyId,
|
|
1469
|
+
operator: 'AND',
|
|
1470
|
+
})
|
|
1471
|
+
|
|
1410
1472
|
let columns = body.columns
|
|
1411
1473
|
columns.forEach(function (item) {
|
|
1412
1474
|
if (item.search.value) {
|
|
1413
1475
|
let astype = 'text'
|
|
1414
|
-
if (asDate.includes(
|
|
1476
|
+
if (asDate.includes(fields[item.data])) {
|
|
1415
1477
|
astype = 'date'
|
|
1416
1478
|
}
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1479
|
+
if (asJSONb.includes(fields[item.data])) {
|
|
1480
|
+
astype = 'jsonb'
|
|
1481
|
+
}
|
|
1482
|
+
if (asArray.includes(fields[item.data])) {
|
|
1483
|
+
astype = 'array'
|
|
1484
|
+
}
|
|
1485
|
+
if (astype === 'jsonb') {
|
|
1486
|
+
whereArray.push({
|
|
1487
|
+
field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
|
|
1488
|
+
option: ' ',
|
|
1489
|
+
value: ` @> '["${item.search.value}"]'`,
|
|
1490
|
+
operator: 'AND',
|
|
1491
|
+
type: 'inline',
|
|
1492
|
+
})
|
|
1493
|
+
} else if (astype === 'array') {
|
|
1494
|
+
whereArray.push({
|
|
1495
|
+
field: '',
|
|
1496
|
+
option: '',
|
|
1497
|
+
value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL, true)}::text ILIKE '${item.search.value}' `,
|
|
1498
|
+
operator: 'AND',
|
|
1499
|
+
type: 'inline',
|
|
1500
|
+
})
|
|
1501
|
+
} else {
|
|
1502
|
+
whereArray.push({
|
|
1503
|
+
field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
|
|
1504
|
+
option: MYMODEL.options[fields[item.data]],
|
|
1505
|
+
value: item.search.value,
|
|
1506
|
+
operator: 'AND',
|
|
1507
|
+
type: astype,
|
|
1508
|
+
})
|
|
1509
|
+
}
|
|
1424
1510
|
}
|
|
1425
1511
|
})
|
|
1426
|
-
|
|
1512
|
+
|
|
1513
|
+
const orderColumn = fields[body.order[0].column] == 'actionColumn' ? `${table}.id` : fields[body.order[0].column] == 'no' ? `${table}.id` : fields[body.order[0].column] == 'actionColum' ? `${table}.id` : fields[body.order[0].column]
|
|
1427
1514
|
if (zstandart) {
|
|
1428
|
-
select =
|
|
1515
|
+
select = Util.selectParser(allfields, MYMODEL)
|
|
1429
1516
|
}
|
|
1430
|
-
|
|
1517
|
+
let gridData = {
|
|
1431
1518
|
select: select,
|
|
1432
|
-
table:
|
|
1519
|
+
table: table,
|
|
1433
1520
|
whereArray: whereArray,
|
|
1434
|
-
|
|
1521
|
+
order_by: [`${orderColumn} ${body.order[0].dir}`],
|
|
1435
1522
|
}
|
|
1436
1523
|
if (!zall) {
|
|
1437
|
-
|
|
1438
|
-
|
|
1524
|
+
gridData.limit = body.length
|
|
1525
|
+
gridData.offset = body.start
|
|
1439
1526
|
} else {
|
|
1440
|
-
|
|
1441
|
-
|
|
1527
|
+
gridData.limit = 5000
|
|
1528
|
+
gridData.offset = 0
|
|
1442
1529
|
}
|
|
1443
|
-
|
|
1530
|
+
let joins = Util.tableWithJoin(MYMODEL)
|
|
1531
|
+
if (joins.length > 0) {
|
|
1532
|
+
gridData.joins = joins
|
|
1533
|
+
}
|
|
1534
|
+
rows = await connection.results(gridData)
|
|
1444
1535
|
} else {
|
|
1445
|
-
|
|
1536
|
+
let gridData = {
|
|
1446
1537
|
select: Util.selectParser(fields, MYMODEL),
|
|
1447
|
-
table:
|
|
1538
|
+
table: table,
|
|
1448
1539
|
limit: reqQuery.pageSize,
|
|
1449
1540
|
offset: parseInt(reqQuery.pageSize) - 1,
|
|
1450
1541
|
orderBy: ['id', 'desc'],
|
|
1451
|
-
}
|
|
1542
|
+
}
|
|
1543
|
+
let joins = Util.tableWithJoin(MYMODEL)
|
|
1544
|
+
if (joins.length > 0) {
|
|
1545
|
+
gridData.joins = joins
|
|
1546
|
+
}
|
|
1547
|
+
rows = await connection.results({ gridData })
|
|
1452
1548
|
}
|
|
1453
1549
|
if (zall) {
|
|
1454
1550
|
fields = arr
|
|
@@ -1466,13 +1562,24 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
|
|
|
1466
1562
|
}
|
|
1467
1563
|
|
|
1468
1564
|
// for excels
|
|
1469
|
-
zRoute.excel = async (req, res, MYMODEL,
|
|
1565
|
+
zRoute.excel = async (req, res, MYMODEL, myfields, rows, callback, fileName) => {
|
|
1470
1566
|
const cacheRole = myCache.get('ROLES')[res.locals.roleId].params
|
|
1471
1567
|
const levels = cacheRole[MYMODEL.table] || []
|
|
1472
1568
|
if (!levels.includes('export')) {
|
|
1473
1569
|
res.json('no access')
|
|
1474
1570
|
return false
|
|
1475
1571
|
}
|
|
1572
|
+
let joins = Util.tableWithJoin(MYMODEL)
|
|
1573
|
+
let notJoins = []
|
|
1574
|
+
if (joins.length > 0) {
|
|
1575
|
+
notJoins = MYMODEL.joins.list || []
|
|
1576
|
+
}
|
|
1577
|
+
let fields = []
|
|
1578
|
+
myfields.map((item) => {
|
|
1579
|
+
if (!notJoins.includes(item)) {
|
|
1580
|
+
fields.push(item)
|
|
1581
|
+
}
|
|
1582
|
+
})
|
|
1476
1583
|
|
|
1477
1584
|
//if any other custom value then callback needed
|
|
1478
1585
|
callback = callback || function () {}
|
|
@@ -1522,18 +1629,20 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
|
|
|
1522
1629
|
let selectRelations = ''
|
|
1523
1630
|
let aliasResults = {}
|
|
1524
1631
|
for (let key in MYMODEL.widgets) {
|
|
1525
|
-
if (
|
|
1526
|
-
if (MYMODEL.widgets[key].
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1632
|
+
if (!notJoins.includes(key)) {
|
|
1633
|
+
if (MYMODEL.widgets[key].name == 'relation' || MYMODEL.widgets[key].name == 'typeahead') {
|
|
1634
|
+
if (MYMODEL.widgets[key].import_field && MYMODEL.widgets[key].import_field != 'id') {
|
|
1635
|
+
aliasResults[key] = Util.arrayToObject(
|
|
1636
|
+
await connection.results({
|
|
1637
|
+
select: `id, ${MYMODEL.widgets[key].import_field}`,
|
|
1638
|
+
table: MYMODEL.widgets[key].table,
|
|
1639
|
+
}),
|
|
1640
|
+
'id'
|
|
1641
|
+
)
|
|
1642
|
+
//console.log(aliasResults[key])
|
|
1643
|
+
aliasRelations.push(key)
|
|
1644
|
+
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} `
|
|
1645
|
+
}
|
|
1537
1646
|
}
|
|
1538
1647
|
}
|
|
1539
1648
|
}
|
|
@@ -1547,20 +1656,22 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
|
|
|
1547
1656
|
let usersObj = await zRoute.getUsers()
|
|
1548
1657
|
if (Object.prototype.hasOwnProperty.call(MYMODEL, 'widgets')) {
|
|
1549
1658
|
for (let key in MYMODEL.widgets) {
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1659
|
+
if (!notJoins.includes(key)) {
|
|
1660
|
+
let widget = MYMODEL.widgets[key]
|
|
1661
|
+
if (widget.name == 'password') {
|
|
1662
|
+
passwords.push(key)
|
|
1663
|
+
} else if (widget.name == 'select') {
|
|
1664
|
+
tableObj[key] = widget.fields
|
|
1665
|
+
} else if (widget.name == 'switch') {
|
|
1666
|
+
tableObj[key] = widget.fields
|
|
1667
|
+
} else if (widget.name == 'relation' || widget.name == 'typeahead') {
|
|
1668
|
+
var rowsarr = await connection.results({
|
|
1669
|
+
table: widget.table,
|
|
1670
|
+
select: widget.fields[0] + ',' + widget.fields[1] + ' as zname ',
|
|
1671
|
+
})
|
|
1672
|
+
//save to object
|
|
1673
|
+
relations[key] = Util.arrayToObject(rowsarr, 'id')
|
|
1674
|
+
}
|
|
1564
1675
|
}
|
|
1565
1676
|
}
|
|
1566
1677
|
}
|
|
@@ -1903,7 +2014,9 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
|
|
|
1903
2014
|
const MYMODEL = objData.MYMODEL || {}
|
|
1904
2015
|
const table = MYMODEL.table
|
|
1905
2016
|
const fields = Object.prototype.hasOwnProperty.call(objData, 'fields') ? objData.fields : req.body.fields
|
|
1906
|
-
|
|
2017
|
+
let relations = await zRoute.relations(req, res, MYMODEL.table)
|
|
2018
|
+
//find relation with joins
|
|
2019
|
+
|
|
1907
2020
|
const select = Object.prototype.hasOwnProperty.call(objData, 'select') ? objData.select : Util.selectParser(fields, MYMODEL)
|
|
1908
2021
|
const columns = Object.prototype.hasOwnProperty.call(objData, 'columns') ? objData.columns : body.columns
|
|
1909
2022
|
const asDate = []
|
|
@@ -1955,7 +2068,7 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
|
|
|
1955
2068
|
}
|
|
1956
2069
|
if (astype === 'jsonb') {
|
|
1957
2070
|
whereArray.push({
|
|
1958
|
-
field: Util.fieldWithTable(fields[item.data], MYMODEL),
|
|
2071
|
+
field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
|
|
1959
2072
|
option: ' ',
|
|
1960
2073
|
value: ` @> '["${item.search.value}"]'`,
|
|
1961
2074
|
operator: 'AND',
|
|
@@ -1965,13 +2078,13 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
|
|
|
1965
2078
|
whereArray.push({
|
|
1966
2079
|
field: '',
|
|
1967
2080
|
option: '',
|
|
1968
|
-
value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL)}::text ILIKE '${item.search.value}' `,
|
|
2081
|
+
value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL, true)}::text ILIKE '${item.search.value}' `,
|
|
1969
2082
|
operator: 'AND',
|
|
1970
2083
|
type: 'inline',
|
|
1971
2084
|
})
|
|
1972
2085
|
} else {
|
|
1973
2086
|
whereArray.push({
|
|
1974
|
-
field: Util.fieldWithTable(fields[item.data], MYMODEL),
|
|
2087
|
+
field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
|
|
1975
2088
|
option: MYMODEL.options[fields[item.data]],
|
|
1976
2089
|
value: item.search.value,
|
|
1977
2090
|
operator: 'AND',
|
|
@@ -2027,7 +2140,6 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
|
|
|
2027
2140
|
datas.push(arr)
|
|
2028
2141
|
})
|
|
2029
2142
|
}
|
|
2030
|
-
|
|
2031
2143
|
const data = {
|
|
2032
2144
|
draw: body.draw,
|
|
2033
2145
|
recordsTotal: count.count || 0,
|
|
@@ -2086,6 +2198,7 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
|
|
|
2086
2198
|
operator: 'AND',
|
|
2087
2199
|
})
|
|
2088
2200
|
}
|
|
2201
|
+
|
|
2089
2202
|
columns.forEach(function (item) {
|
|
2090
2203
|
if (item.search.value) {
|
|
2091
2204
|
let astype = 'text'
|
|
@@ -2100,7 +2213,7 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
|
|
|
2100
2213
|
}
|
|
2101
2214
|
if (astype === 'jsonb') {
|
|
2102
2215
|
whereArray.push({
|
|
2103
|
-
field: Util.fieldWithTable(fields[item.data], MYMODEL),
|
|
2216
|
+
field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
|
|
2104
2217
|
option: ' ',
|
|
2105
2218
|
value: ` @> '["${item.search.value}"]'`,
|
|
2106
2219
|
operator: 'AND',
|
|
@@ -2110,13 +2223,13 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
|
|
|
2110
2223
|
whereArray.push({
|
|
2111
2224
|
field: '',
|
|
2112
2225
|
option: '',
|
|
2113
|
-
value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL)}::text ILIKE '${item.search.value}' `,
|
|
2226
|
+
value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL, true)}::text ILIKE '${item.search.value}' `,
|
|
2114
2227
|
operator: 'AND',
|
|
2115
2228
|
type: 'inline',
|
|
2116
2229
|
})
|
|
2117
2230
|
} else {
|
|
2118
2231
|
whereArray.push({
|
|
2119
|
-
field: Util.fieldWithTable(fields[item.data], MYMODEL),
|
|
2232
|
+
field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
|
|
2120
2233
|
option: MYMODEL.options[fields[item.data]],
|
|
2121
2234
|
value: item.search.value,
|
|
2122
2235
|
operator: 'AND',
|
|
@@ -3258,70 +3371,76 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
|
|
|
3258
3371
|
let lexicals = []
|
|
3259
3372
|
let mapKey = ''
|
|
3260
3373
|
let hasAttributes = []
|
|
3374
|
+
let joinsFields = []
|
|
3375
|
+
if (MYMODEL.joins) {
|
|
3376
|
+
joinsFields = MYMODEL.joins.list
|
|
3377
|
+
}
|
|
3261
3378
|
for (let key in widgets) {
|
|
3262
|
-
if (
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
// has chains
|
|
3315
|
-
if (widgets[key].name == 'relation') {
|
|
3316
|
-
if (widgets[key].isChain) {
|
|
3317
|
-
if (widgets[key].chains.length) {
|
|
3318
|
-
chainsObj[key] = widgets[key].chains
|
|
3319
|
-
hasChain = true
|
|
3320
|
-
}
|
|
3379
|
+
if (!joinsFields.includes(key)) {
|
|
3380
|
+
if (widgets[key].name == 'datepicker') {
|
|
3381
|
+
hasDatePicker = true
|
|
3382
|
+
} else if (widgets[key].name == 'number') {
|
|
3383
|
+
hasNumber = true
|
|
3384
|
+
} else if (widgets[key].name == 'clockpicker') {
|
|
3385
|
+
hasClockPicker = true
|
|
3386
|
+
} else if (widgets[key].name == 'editor') {
|
|
3387
|
+
hasEditor = true
|
|
3388
|
+
} else if (widgets[key].name == 'ide_editor') {
|
|
3389
|
+
hasIde = true
|
|
3390
|
+
} else if (widgets[key].name == 'switch') {
|
|
3391
|
+
let switchObj = moduleLib.switch(req, res, `#${key}`, widgets[key].fields)
|
|
3392
|
+
scriptForm += switchObj.script
|
|
3393
|
+
headObj.switch = switchObj.head
|
|
3394
|
+
endObj.switch = switchObj.end
|
|
3395
|
+
} else if (widgets[key].name == 'typeahead') {
|
|
3396
|
+
let typeaheadObj = moduleLib.typeahead(req, res, MYMODEL.table, `#${key}Typeahead`)
|
|
3397
|
+
scriptForm += typeaheadObj.script
|
|
3398
|
+
headObj.typeahead = typeaheadObj.head
|
|
3399
|
+
endObj.typeahead = typeaheadObj.end
|
|
3400
|
+
} else if (widgets[key].name == 'location') {
|
|
3401
|
+
let locationObj = moduleLib.location(req, res, key)
|
|
3402
|
+
scriptForm += locationObj.script
|
|
3403
|
+
endObj.location = locationObj.end
|
|
3404
|
+
hasLocation = true
|
|
3405
|
+
mapKey = key
|
|
3406
|
+
} else if (widgets[key].name == 'dragdrop') {
|
|
3407
|
+
let dragdropObj = moduleLib.dragdrop(req, res, key)
|
|
3408
|
+
scriptForm += dragdropObj.script
|
|
3409
|
+
headObj.dragdrop = dragdropObj.head
|
|
3410
|
+
endObj.dragdrop = dragdropObj.end
|
|
3411
|
+
} else if (widgets[key].name == 'datetime') {
|
|
3412
|
+
hasDateTimePicker = true
|
|
3413
|
+
} else if (widgets[key].name == 'table') {
|
|
3414
|
+
hasTable = true
|
|
3415
|
+
hasDateTimePicker = true
|
|
3416
|
+
hasClockPicker = true
|
|
3417
|
+
hasDatePicker = true
|
|
3418
|
+
} else if (widgets[key].name == 'tags') {
|
|
3419
|
+
hasTags = true
|
|
3420
|
+
} else if (widgets[key].name == 'lexical') {
|
|
3421
|
+
let lexicalObj = moduleLib.lexical(req, res, `#${key}`)
|
|
3422
|
+
hasLexical = true
|
|
3423
|
+
headObj.lexical = lexicalObj.head
|
|
3424
|
+
endObj.lexical = lexicalObj.end
|
|
3425
|
+
lexicals.push(key)
|
|
3426
|
+
} else if (widgets[key].name == 'tinymce') {
|
|
3427
|
+
hasTinymce = true
|
|
3428
|
+
} else if (widgets[key].name == 'dropzone') {
|
|
3429
|
+
hasDropzone = true
|
|
3430
|
+
dropzones.push(key)
|
|
3321
3431
|
}
|
|
3322
|
-
//
|
|
3323
|
-
if (widgets[key].
|
|
3324
|
-
|
|
3432
|
+
// has chains
|
|
3433
|
+
if (widgets[key].name == 'relation') {
|
|
3434
|
+
if (widgets[key].isChain) {
|
|
3435
|
+
if (widgets[key].chains.length) {
|
|
3436
|
+
chainsObj[key] = widgets[key].chains
|
|
3437
|
+
hasChain = true
|
|
3438
|
+
}
|
|
3439
|
+
}
|
|
3440
|
+
//relation_all_attributes
|
|
3441
|
+
if (widgets[key].isAttributes) {
|
|
3442
|
+
hasAttributes.push(key)
|
|
3443
|
+
}
|
|
3325
3444
|
}
|
|
3326
3445
|
}
|
|
3327
3446
|
}
|
|
@@ -3559,10 +3678,11 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
|
|
|
3559
3678
|
});`
|
|
3560
3679
|
|
|
3561
3680
|
for (let keys in widgets) {
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3681
|
+
if (!joinsFields.includes(keys)) {
|
|
3682
|
+
let widgetName = widgets[keys].name
|
|
3683
|
+
switch (widgetName) {
|
|
3684
|
+
case 'multi_line_editor':
|
|
3685
|
+
scriptForm += `$(".text-toggle").on("click", function(){
|
|
3566
3686
|
let editorId = $(this).data("id");
|
|
3567
3687
|
$("#"+editorId).attr("type","text");
|
|
3568
3688
|
$("#a_"+editorId).hide();
|
|
@@ -3578,10 +3698,10 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
|
|
|
3578
3698
|
}
|
|
3579
3699
|
}
|
|
3580
3700
|
});`
|
|
3581
|
-
|
|
3701
|
+
break
|
|
3582
3702
|
|
|
3583
|
-
|
|
3584
|
-
|
|
3703
|
+
case 'dropdown_multi':
|
|
3704
|
+
scriptForm += ` $("#dropdownadd${keys}").on("click", function () {
|
|
3585
3705
|
var val = $("#${keys}").val();
|
|
3586
3706
|
if(val == ""){
|
|
3587
3707
|
alert("Please select data");
|
|
@@ -3592,25 +3712,25 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
|
|
|
3592
3712
|
$("#dropdownbox${keys}").append(data);
|
|
3593
3713
|
$("#${keys}").val("");
|
|
3594
3714
|
});${Util.newLine}`
|
|
3595
|
-
|
|
3715
|
+
break
|
|
3596
3716
|
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3601
|
-
|
|
3602
|
-
|
|
3603
|
-
|
|
3604
|
-
|
|
3605
|
-
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3717
|
+
case 'table':
|
|
3718
|
+
let MODEL_TABLE = MYMODELS[MYMODEL.widgets[keys].table] || require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`)
|
|
3719
|
+
//let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
|
|
3720
|
+
//relations[key + "TABLE"]
|
|
3721
|
+
let RELATIONS_MODEL_TABLE = relations && relations.hasOwnProperty(keys + 'TABLE') ? relations[keys + 'TABLE'] : {}
|
|
3722
|
+
let zForm = zRoute.formField(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE)
|
|
3723
|
+
zRoute.moduleLib(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE, zForms)
|
|
3724
|
+
let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`
|
|
3725
|
+
let subname = MYMODEL.table + '_' + keys
|
|
3726
|
+
let relationsWithKeys = relations ? relations[keys] : {}
|
|
3727
|
+
let dropdownMultis = []
|
|
3728
|
+
|
|
3729
|
+
for (let qq in MODEL_TABLE.widgets) {
|
|
3730
|
+
//check if have dropdown_multi
|
|
3731
|
+
if (MODEL_TABLE.widgets[qq].name == 'dropdown_multi') {
|
|
3732
|
+
dropdownMultis.push(qq)
|
|
3733
|
+
scriptForm += `$("#body-${keys}").on("click", "#dropdownadd${qq}",function () {
|
|
3614
3734
|
let elm = $(this).siblings("#${qq}");
|
|
3615
3735
|
var val = elm.val();
|
|
3616
3736
|
if(val == ""){
|
|
@@ -3624,13 +3744,13 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
|
|
|
3624
3744
|
$(this).parent().parent().find("#dropdownbox${qq}").append(data);
|
|
3625
3745
|
$(this).siblings("#${qq}").val("");
|
|
3626
3746
|
});${Util.newLine}`
|
|
3747
|
+
}
|
|
3627
3748
|
}
|
|
3628
|
-
}
|
|
3629
3749
|
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3750
|
+
scriptForm += `var append${keys} = (increment, callback) => { buildform(increment,'${MYMODEL.table}','${keys}','${JSON.stringify(relationsWithKeys)}', (data) => callback(data)) } `
|
|
3751
|
+
scriptForm += Util.newLine
|
|
3752
|
+
scriptForm += `var append${keys}Max = $('tbody#body-${keys}>tr').length;${Util.newLine}`
|
|
3753
|
+
scriptForm += `function ${keys}Handler(){
|
|
3634
3754
|
var index = $("#body-${keys}>tr").length || 0;
|
|
3635
3755
|
$("#body-${keys}>tr").each(function (index, tr) {
|
|
3636
3756
|
let dataname = $(tr).data("name") || "";
|
|
@@ -3670,12 +3790,12 @@ $("#body-${keys}>tr").each(function (index, tr) {
|
|
|
3670
3790
|
|
|
3671
3791
|
}); ${Util.newLine}};${Util.newLine}`
|
|
3672
3792
|
|
|
3673
|
-
|
|
3793
|
+
scriptForm += ` $('#add${keys}').on('click',function(){
|
|
3674
3794
|
append${keys}(append${keys}Max, (data) => $('#body-${keys}').append(data));
|
|
3675
3795
|
append${keys}Max++;
|
|
3676
3796
|
${keys}Handler();
|
|
3677
3797
|
}); ${Util.newLine}`
|
|
3678
|
-
|
|
3798
|
+
scriptForm += `function set${keys}value(index,myobj) {
|
|
3679
3799
|
for(var key in myobj){
|
|
3680
3800
|
if($(".${subname}_" + key).eq(index).attr("type") == "checkbox" && myobj[key] == 1){
|
|
3681
3801
|
$(".${subname}_" + key).eq(index).prop("checked", true);
|
|
@@ -3708,7 +3828,7 @@ $("#body-${keys}>tr").each(function (index, tr) {
|
|
|
3708
3828
|
}
|
|
3709
3829
|
`
|
|
3710
3830
|
|
|
3711
|
-
|
|
3831
|
+
scriptForm += `function build${keys}form(index, myobj) {
|
|
3712
3832
|
append${keys}(index, (data) => {
|
|
3713
3833
|
$("#body-${keys}").append(data);
|
|
3714
3834
|
${keys}Handler();
|
|
@@ -3720,24 +3840,24 @@ $("#body-${keys}>tr").each(function (index, tr) {
|
|
|
3720
3840
|
}
|
|
3721
3841
|
`
|
|
3722
3842
|
|
|
3723
|
-
|
|
3843
|
+
/* scriptForm += ` $(function () {
|
|
3724
3844
|
var ${keys} = $("#body-${keys}").data("value") ? $("#body-${keys}").data("value") : [];
|
|
3725
3845
|
${keys}.forEach(function (myobj, index) {
|
|
3726
3846
|
build${keys}form(index, myobj);
|
|
3727
3847
|
});
|
|
3728
3848
|
});${Util.newLine}`*/
|
|
3729
3849
|
|
|
3730
|
-
|
|
3850
|
+
break
|
|
3731
3851
|
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3739
|
-
|
|
3740
|
-
|
|
3852
|
+
case 'ide_editor':
|
|
3853
|
+
//var additionalScripts = `if (!!session.$worker) {session.$worker.send("setOptions", [{"esversion": 9,"esnext": false,}]);}`;
|
|
3854
|
+
let script_annotaions = ''
|
|
3855
|
+
let script_enabled = ''
|
|
3856
|
+
let script_looping = ''
|
|
3857
|
+
if (widgets[keys].language == 'javascript') {
|
|
3858
|
+
script_annotaions = `editor_${keys}.session.setOption("useWorker", true);`
|
|
3859
|
+
script_enabled = `editor_${keys}.session.setOption("useWorker", true);`
|
|
3860
|
+
script_looping = `
|
|
3741
3861
|
var errors = editor_${keys}.getSession().getAnnotations().filter(a=>a.type==='error');
|
|
3742
3862
|
arr = [];
|
|
3743
3863
|
errors.forEach(function(erItem) {
|
|
@@ -3749,8 +3869,8 @@ ${keys}.forEach(function (myobj, index) {
|
|
|
3749
3869
|
editor_${keys}.getSession().setAnnotations(arr);
|
|
3750
3870
|
editor_${keys}.session.setOption("useWorker", true);
|
|
3751
3871
|
`
|
|
3752
|
-
|
|
3753
|
-
|
|
3872
|
+
}
|
|
3873
|
+
scriptForm += `var editor_${keys} = ace.edit("editor_${keys}");
|
|
3754
3874
|
editor_${keys}.getSession().setMode("ace/mode/${widgets[keys].language}");
|
|
3755
3875
|
editor_${keys}.setValue(ace_value(ide_editor_${keys}));
|
|
3756
3876
|
$("#${keys}").text(ace_value(ide_editor_${keys}));
|
|
@@ -3761,7 +3881,8 @@ ${keys}.forEach(function (myobj, index) {
|
|
|
3761
3881
|
});
|
|
3762
3882
|
`
|
|
3763
3883
|
|
|
3764
|
-
|
|
3884
|
+
break
|
|
3885
|
+
}
|
|
3765
3886
|
}
|
|
3766
3887
|
}
|
|
3767
3888
|
|