zet-lib 4.0.3 → 5.0.0

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/index.js CHANGED
@@ -47,7 +47,7 @@ const lazyModules = {
47
47
  return require("axios");
48
48
  },
49
49
  get Excel() {
50
- return require("exceljs");
50
+ return require("exceljsremake");
51
51
  },
52
52
  get pm2() {
53
53
  try {
@@ -1,359 +1,359 @@
1
- const router = require('express').Router();
2
- const {csrf} = require('zet-lib');
3
- const csrfProtection = csrf({cookie: true});
4
- const {Util, access, connection, moduleLib, zDebug, zRoute, zRole, zDataTable, zForm} = require('zet-lib');
5
- const MYMODEL = require('./../models/[[[TABLE_NAME]]]');
6
-
7
- router.get('/', async (req, res) => {
8
- await zRoute.attributeData(res, MYMODEL);
9
- let dataTable = new zDataTable(res.locals);
10
- dataTable.filterMODEL = await zRoute.dataTableFilterSync(req,res, MYMODEL, res.locals.gridFilter);
11
- const levels = zRole.myLevel(req, res, MYMODEL.table);
12
- dataTable.levels = levels;
13
- res.render(`layouts/${layout}`, {
14
- dataTable: dataTable,
15
- levels : levels,
16
- titleHeader: `<strong class="text text-info">${MYMODEL.title}</strong>`,
17
- breadcrumb : zForm.breadcrumbIndex(),
18
- myModal : zForm.modal({
19
- attributeData: res.locals.attributeData,
20
- visibles: res.locals.visibles,
21
- invisibles: res.locals.invisibles,
22
- routeName: MYMODEL.table,
23
- }, LANGUAGE),
24
- renderHead: `${MYMODEL.routeName}/indexcss.ejs`,
25
- renderBody: `${MYMODEL.routeName}/index.ejs`,
26
- renderEnd: `${MYMODEL.routeName}/indexjs.ejs`
27
- });
28
- });
29
-
30
- router.post('/list', async (req, res) => {
31
- const data = await zRoute.listData(req, res, MYMODEL, zRole);
32
- res.json(data);
33
- });
34
-
35
- router.get('/create', csrfProtection, async(req, res) => {
36
- let data = MYMODEL.datas;
37
- const zForms = await zRoute.formsFieldSync(req, res, MYMODEL, data);
38
- res.render(`layouts/${layout}`, {
39
- data: data,
40
- zForms: zForms,
41
- titleHeader: `${LANGUAGE['form_create']} : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
42
- csrfToken: req.csrfToken(),
43
- breadcrumb : zForm.breadcrumbCreate(MYMODEL.routeName),
44
- renderBody: `${MYMODEL.routeName}/create.ejs`,
45
- renderEnd: `${MYMODEL.routeName}/createjs.ejs`
46
- });
47
- });
48
-
49
- router.post('/create', csrfProtection, async (req, res) => {
50
- let json = Util.jsonSuccess(LANGUAGE['data_saved']);
51
- try {
52
- let data = zRoute.post(req,res, MYMODEL)[MYMODEL.routeName];
53
- const validator = zRoute.validator(data, MYMODEL);
54
- if(validator.status == 0) return res.json(validator.message);
55
- const result = await zRoute.insertSQL(req, res, MYMODEL.table, data);
56
- json.data=result;
57
- } catch (err) {
58
- if(Object.hasOwn(err,"sqlMessage")){
59
- json = Util.flashError(err.sqlMessage);
60
- } else {
61
- json = Util.flashError(err.toString());
62
- }
63
- zDebug(req, res, err);
64
- }
65
- res.json(json);
66
- });
67
-
68
- router.get('/update/:id', csrfProtection, async (req, res) => {
69
- const id = parseInt(req.params.id);
70
- const results = await connection.results({
71
- select:zRoute.selectData(MYMODEL),
72
- table: MYMODEL.table,
73
- where: {
74
- id: id,
75
- company_id: res.locals.companyId
76
- }
77
- });
78
- if (results.length == 0) {
79
- req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
80
- return res.redirect('/' + MYMODEL.routeName);
81
- }
82
- let data = results[0];
83
- const zForms = await zRoute.formsFieldSync(req, res, MYMODEL, data);
84
- res.render(`layouts/${layout}`, {
85
- data: data,
86
- zForms: zForms,
87
- titleHeader: `${LANGUAGE['form_update']} : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
88
- csrfToken: req.csrfToken(),
89
- breadcrumb : zForm.breadcrumbUpdate(MYMODEL.routeName, id),
90
- renderBody: `${MYMODEL.routeName}/update.ejs`,
91
- renderEnd: `${MYMODEL.routeName}/updatejs.ejs`,
92
- });
93
- });
94
-
95
- router.post('/update/:id', csrfProtection, async (req, res) => {
96
- let json = Util.jsonSuccess(LANGUAGE['data_saved']);
97
- try {
98
- const id = parseInt(req.params.id);
99
- let data = zRoute.post(req,res, MYMODEL)[MYMODEL.routeName];
100
- const validator = zRoute.validator(data, MYMODEL);
101
- if(validator.status == 0) return res.json(validator.message);
102
- const result = await zRoute.updateSQL(req, res,MYMODEL.table, data, {id:id});
103
- json.data=result;
104
- } catch (err) {
105
- console.log(err)
106
- if(Object.hasOwn(err,"sqlMessage")){
107
- json = Util.flashError(err.sqlMessage);
108
- } else {
109
- json = Util.flashError(err.toString());
110
- }
111
- zDebug(req, res, err)
112
- }
113
- res.json(json);
114
- });
115
-
116
- router.delete('/delete', async (req, res) => {
117
- const id = req.body.id;
118
- let json = Util.jsonSuccess(LANGUAGE['data_delete']);
119
- try {
120
- await zRoute.deleteSQL(MYMODEL.table, id, res.locals.companyId);
121
- } catch (err) {
122
- json = Util.flashError(err.toString());
123
- zDebug(req, res, err)
124
- }
125
- res.json(json);
126
- });
127
-
128
- router.get('/view/:id', async (req, res) => {
129
- await zRoute.attributeData(res, MYMODEL);
130
- const id = req.params.id;
131
- let data = {};
132
- let zForms = {};
133
- try {
134
- const results = await connection.results({select:zRoute.selectData(MYMODEL),table:MYMODEL.table,where:{id:id}});
135
- if (results.length == 0) {
136
- req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
137
- return res.redirect('/' + MYMODEL.routeName);
138
- }
139
- data = results[0];
140
- zForms = await zRoute.viewFormsSync(req, res, MYMODEL, data);
141
- } catch (err){
142
- zDebug(req, res, err);
143
- res.send("Err");
144
- }
145
- res.render(`layouts/${layout}`, {
146
- data: data,
147
- Util:Util,
148
- zForms:zForms,
149
- titleHeader: `View : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
150
- breadcrumb : zForm.breadcrumbView(MYMODEL.routeName),
151
- levels: zRole.myLevel(req, res, MYMODEL.table),
152
- renderBody: `${MYMODEL.routeName}/view.ejs`
153
- });
154
- });
155
-
156
- router.get('/excel-query', async (req,res) => {
157
- await zRoute.excelQuery(req, res, MYMODEL);
158
- });
159
-
160
- router.get('/excel', async (req, res) => {
161
- const fields = MYMODEL.keysExcel;
162
- const results = await connection.results({
163
- table: MYMODEL.table,
164
- where: {company_id: res.locals.companyId},
165
- orderBy: ['id', 'DESC']
166
- });
167
- await zRoute.excel(req, res, MYMODEL, fields, results);
168
- });
169
-
170
- router.get('/sample', async (req, res) => {
171
- let fields = [];
172
- for (let i = 0; i < MYMODEL.keysExcel.length; i++) {
173
- if (!Util.in_array(MYMODEL.keysExcel[i], Util.nots)) {
174
- fields.push(MYMODEL.keysExcel[i]);
175
- }
176
- }
177
- const results = await connection.results({
178
- table:MYMODEL.table,
179
- where:{
180
- company_id:res.locals.companyId
181
- },
182
- orderBy:["id","desc"], limit:10
183
- });
184
- let callback=(result,field)=> {
185
- return MYMODEL.widgets[field] && MYMODEL.widgets[field].name == 'datepicker' ? Util.dateSql(result[field]) : result[field];
186
- };
187
- await zRoute.excel(req, res, MYMODEL, fields, results, callback);
188
- });
189
-
190
- router.get('/import',csrfProtection, async (req, res) => {
191
- const room = res.locals.token;
192
- res.render(`layouts/${layout}`, {
193
- room: room,
194
- titleHeader: `Import / Upload data : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
195
- csrfToken: req.csrfToken(),
196
- breadcrumb : zForm.breadcrumbImport(MYMODEL.routeName),
197
- renderBody: `${MYMODEL.routeName}/import.ejs`,
198
- renderEnd: `${MYMODEL.routeName}/importjs.ejs`
199
- });
200
- });
201
-
202
-
203
- router.post('/import', async(req, res) => {
204
- res.json(await zRoute.import(req,res,MYMODEL));
205
- });
206
-
207
- router.get('/approval/:id', async (req, res) => {
208
- await zRoute.attributeData(res, MYMODEL);
209
- const id = req.params.id;
210
- let data = {};
211
- let data2 = {};
212
- let zForms = {};
213
- let zForms2 = {};
214
- let result = {};
215
- try {
216
- result = await connection.result({table: MYMODEL.table, where: {id: id}});
217
- if (!result.id) {
218
- req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
219
- return res.redirect('/' + MYMODEL.routeName);
220
- }
221
- data=result;
222
- moduleLib.editor(req, res);
223
- zForms = await zRoute.viewFormsSync(req, res, MYMODEL, result);
224
- const contentScript = `$("#submit_draft").on("click", function () {$("#status").val(1);ajaxPost("/zzapproval",$("#form-group").serializeArray(), function (data) {
225
- if (data.status == 0) {
226
- toastr.error(data.message, data.title);
227
- } else {
228
- toastr.success(data.title, data.message);
229
- }
230
- });});
231
- $("#submit").on("click", function () {
232
- $('[name="zapprovals[status]"]').val(2);
233
- ajaxPost("/zzapproval",$("#form-group").serializeArray(), function (data) {
234
- if (data.status == 0) {
235
- toastr.error(data.message, data.title);
236
- } else {
237
- toastr.success(data.title, data.message);
238
- location.href = "";
239
- }
240
- });
241
- });
242
- `;
243
- await moduleLib.addScript(req, res, contentScript);
244
- const MODEL_APROVALS = require("./../models/zapprovals");
245
- const rows = await connection.results({
246
- table: "zapprovals",
247
- where: {table: MYMODEL.table, company_id: res.locals.companyId, id_data: id}
248
- });
249
- if (rows.length) {
250
- data2 = rows[0];
251
- } else {
252
- let obj = {};
253
- obj.token = Util.uuid();
254
- obj.status = 1;
255
- obj.table = MYMODEL.table;
256
- obj.company_id = res.locals.companyId;
257
- obj.id_data = id;
258
- obj.created_by = res.locals.userId;
259
- obj.updated_by = res.locals.userId;
260
- obj.created_at = Util.now();
261
- let zfields = await connection.result({table: "zfields", where: {table: MYMODEL.table}});
262
- let jsonApproval = zfields.approval_json || {}
263
- obj.template = jsonApproval.content || {}
264
- let title = jsonApproval.title;
265
- if (title) {
266
- let titleData = title;
267
- for (var key in data) {
268
- titleData = Util.replaceAll(titleData, "{{" + key + "}}", data[key])
269
- }
270
- obj.title = titleData
271
- }
272
- if (jsonApproval.hasOwnProperty("approvers")) {
273
- obj.approvers = JSON.stringify(jsonApproval.approvers);
274
- obj.knowings = JSON.stringify(jsonApproval.knowings);
275
- obj.type = 1;
276
- }
277
- //insert default data
278
- await connection.insert({table: "zapprovals", data: obj});
279
- data2 = obj;
280
- }
281
- zForms2 = await zRoute.formsFieldSync(req, res, MODEL_APROVALS, data2);
282
- } catch (err) {
283
- zDebug(req, res, err);
284
- res.send("Err");
285
- }
286
- res.render(`layouts/${layout}`, {
287
- zForms: zForms,
288
- zForms2: zForms2,
289
- data: result,
290
- result:result,
291
- data2: data2,
292
- Util: Util,
293
- levels: zRole.myLevel(req, res, MYMODEL.table),
294
- breadcrumb : zForm.breadcrumbApproval(MYMODEL.routeName, id),
295
- renderBody: `${MYMODEL.routeName}/approval.ejs`
296
- });
297
- });
298
-
299
- router.get('/preview/:token', async (req, res) => {
300
- let token = req.params.token;
301
- let data = {}, data2 = {};
302
- let template = "";
303
- let footers = "";
304
- try {
305
- let zfields = await connection.result({table: "zfields", where: {table: MYMODEL.table}});
306
- let jsonApproval = zfields.approval_json || {}
307
- let mytemplate = jsonApproval.content || {}
308
- let results = await connection.results({table: "zapprovals", where: {token: token}});
309
- if (results.length == 0) {
310
- req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
311
- return res.redirect('/' + MYMODEL.routeName);
312
- }
313
- if(results[0].status == 1){
314
- await connection.update({
315
- table : "zapprovals",
316
- data: {
317
- template : mytemplate
318
- },
319
- where : {
320
- token:token
321
- }
322
- })
323
- results = await connection.results({table: "zapprovals", where: {token: token}});
324
- }
325
- let MYMODEL2 = require("./../models/zapprovals")
326
- data = await zRoute.viewTable(req, res, MYMODEL2, results[0], true);
327
- let row = await connection.result({table: results[0].table, where: {id: results[0].id_data}});
328
- data2 = await zRoute.viewTable(req, res, MYMODEL, row, true);
329
- template = data.template;
330
- let title = data.title || ""
331
- for (var key in data2) {
332
- template = Util.replaceAll(template, "{{" + key + "}}", data2[key])
333
- title = Util.replaceAll(title, "{{" + key + "}}", data2[key])
334
- }
335
- data.title = title;
336
- var details = await connection.results({table: "zapprovals_details", where: {title_id: results[0].id}});
337
- if (details.length) {
338
- footers = await zRoute.approversFooter(details);
339
- }
340
- } catch (err) {
341
- zDebug(req, res, err);
342
- res.send("Err");
343
- }
344
- res.render(`layouts/blank`, {
345
- template: template,
346
- data: data,
347
- footers: footers,
348
- Util: Util,
349
- details: details,
350
- renderBody: 'index/zapprovals_preview.ejs'
351
- });
352
- });
353
-
354
- router.post('/grid', access, zRoute.postGrid);
355
- router.post('/reload', access, zRoute.postGridReload);
356
- router.post('/chains', access, zRoute.chains);
357
- router.post('/get_attributes',access, zRoute.getAttributes);
358
-
359
- module.exports = router;
1
+ const router = require('express').Router();
2
+ const {csrf} = require('zet-lib');
3
+ const csrfProtection = csrf({cookie: true});
4
+ const {Util, access, connection, moduleLib, zDebug, zRoute, zRole, zDataTable, zForm} = require('zet-lib');
5
+ const MYMODEL = require('./../models/[[[TABLE_NAME]]]');
6
+
7
+ router.get('/', async (req, res) => {
8
+ await zRoute.attributeData(res, MYMODEL);
9
+ let dataTable = new zDataTable(res.locals);
10
+ dataTable.filterMODEL = await zRoute.dataTableFilterSync(req,res, MYMODEL, res.locals.gridFilter);
11
+ const levels = zRole.myLevel(req, res, MYMODEL.table);
12
+ dataTable.levels = levels;
13
+ res.render(`layouts/${layout}`, {
14
+ dataTable: dataTable,
15
+ levels : levels,
16
+ titleHeader: `<strong class="text text-info">${MYMODEL.title}</strong>`,
17
+ breadcrumb : zForm.breadcrumbIndex(),
18
+ myModal : zForm.modal({
19
+ attributeData: res.locals.attributeData,
20
+ visibles: res.locals.visibles,
21
+ invisibles: res.locals.invisibles,
22
+ routeName: MYMODEL.table,
23
+ }, LANGUAGE),
24
+ renderHead: `${MYMODEL.routeName}/indexcss.ejs`,
25
+ renderBody: `${MYMODEL.routeName}/index.ejs`,
26
+ renderEnd: `${MYMODEL.routeName}/indexjs.ejs`
27
+ });
28
+ });
29
+
30
+ router.post('/list', async (req, res) => {
31
+ const data = await zRoute.listData(req, res, MYMODEL, zRole);
32
+ res.json(data);
33
+ });
34
+
35
+ router.get('/create', csrfProtection, async(req, res) => {
36
+ let data = MYMODEL.datas;
37
+ const zForms = await zRoute.formsFieldSync(req, res, MYMODEL, data);
38
+ res.render(`layouts/${layout}`, {
39
+ data: data,
40
+ zForms: zForms,
41
+ titleHeader: `${LANGUAGE['form_create']} : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
42
+ csrfToken: req.csrfToken(),
43
+ breadcrumb : zForm.breadcrumbCreate(MYMODEL.routeName),
44
+ renderBody: `${MYMODEL.routeName}/create.ejs`,
45
+ renderEnd: `${MYMODEL.routeName}/createjs.ejs`
46
+ });
47
+ });
48
+
49
+ router.post('/create', csrfProtection, async (req, res) => {
50
+ let json = Util.jsonSuccess(LANGUAGE['data_saved']);
51
+ try {
52
+ let data = zRoute.post(req,res, MYMODEL)[MYMODEL.routeName];
53
+ const validator = zRoute.validator(data, MYMODEL);
54
+ if(validator.status == 0) return res.json(validator.message);
55
+ const result = await zRoute.insertSQL(req, res, MYMODEL.table, data);
56
+ json.data=result;
57
+ } catch (err) {
58
+ if(Object.hasOwn(err,"sqlMessage")){
59
+ json = Util.flashError(err.sqlMessage);
60
+ } else {
61
+ json = Util.flashError(err.toString());
62
+ }
63
+ zDebug(req, res, err);
64
+ }
65
+ res.json(json);
66
+ });
67
+
68
+ router.get('/update/:id', csrfProtection, async (req, res) => {
69
+ const id = parseInt(req.params.id);
70
+ const results = await connection.results({
71
+ select:zRoute.selectData(MYMODEL),
72
+ table: MYMODEL.table,
73
+ where: {
74
+ id: id,
75
+ company_id: res.locals.companyId
76
+ }
77
+ });
78
+ if (results.length == 0) {
79
+ req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
80
+ return res.redirect('/' + MYMODEL.routeName);
81
+ }
82
+ let data = results[0];
83
+ const zForms = await zRoute.formsFieldSync(req, res, MYMODEL, data);
84
+ res.render(`layouts/${layout}`, {
85
+ data: data,
86
+ zForms: zForms,
87
+ titleHeader: `${LANGUAGE['form_update']} : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
88
+ csrfToken: req.csrfToken(),
89
+ breadcrumb : zForm.breadcrumbUpdate(MYMODEL.routeName, id),
90
+ renderBody: `${MYMODEL.routeName}/update.ejs`,
91
+ renderEnd: `${MYMODEL.routeName}/updatejs.ejs`,
92
+ });
93
+ });
94
+
95
+ router.post('/update/:id', csrfProtection, async (req, res) => {
96
+ let json = Util.jsonSuccess(LANGUAGE['data_saved']);
97
+ try {
98
+ const id = parseInt(req.params.id);
99
+ let data = zRoute.post(req,res, MYMODEL)[MYMODEL.routeName];
100
+ const validator = zRoute.validator(data, MYMODEL);
101
+ if(validator.status == 0) return res.json(validator.message);
102
+ const result = await zRoute.updateSQL(req, res,MYMODEL.table, data, {id:id});
103
+ json.data=result;
104
+ } catch (err) {
105
+ console.log(err)
106
+ if(Object.hasOwn(err,"sqlMessage")){
107
+ json = Util.flashError(err.sqlMessage);
108
+ } else {
109
+ json = Util.flashError(err.toString());
110
+ }
111
+ zDebug(req, res, err)
112
+ }
113
+ res.json(json);
114
+ });
115
+
116
+ router.delete('/delete', async (req, res) => {
117
+ const id = req.body.id;
118
+ let json = Util.jsonSuccess(LANGUAGE['data_delete']);
119
+ try {
120
+ await zRoute.deleteSQL(MYMODEL.table, id, res.locals.companyId);
121
+ } catch (err) {
122
+ json = Util.flashError(err.toString());
123
+ zDebug(req, res, err)
124
+ }
125
+ res.json(json);
126
+ });
127
+
128
+ router.get('/view/:id', async (req, res) => {
129
+ await zRoute.attributeData(res, MYMODEL);
130
+ const id = req.params.id;
131
+ let data = {};
132
+ let zForms = {};
133
+ try {
134
+ const results = await connection.results({select:zRoute.selectData(MYMODEL),table:MYMODEL.table,where:{id:id}});
135
+ if (results.length == 0) {
136
+ req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
137
+ return res.redirect('/' + MYMODEL.routeName);
138
+ }
139
+ data = results[0];
140
+ zForms = await zRoute.viewFormsSync(req, res, MYMODEL, data);
141
+ } catch (err){
142
+ zDebug(req, res, err);
143
+ res.send("Err");
144
+ }
145
+ res.render(`layouts/${layout}`, {
146
+ data: data,
147
+ Util:Util,
148
+ zForms:zForms,
149
+ titleHeader: `View : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
150
+ breadcrumb : zForm.breadcrumbView(MYMODEL.routeName),
151
+ levels: zRole.myLevel(req, res, MYMODEL.table),
152
+ renderBody: `${MYMODEL.routeName}/view.ejs`
153
+ });
154
+ });
155
+
156
+ router.get('/excel-query', async (req,res) => {
157
+ await zRoute.excelQuery(req, res, MYMODEL);
158
+ });
159
+
160
+ router.get('/excel', async (req, res) => {
161
+ const fields = MYMODEL.keysExcel;
162
+ const results = await connection.results({
163
+ table: MYMODEL.table,
164
+ where: {company_id: res.locals.companyId},
165
+ orderBy: ['id', 'DESC']
166
+ });
167
+ await zRoute.excel(req, res, MYMODEL, fields, results);
168
+ });
169
+
170
+ router.get('/sample', async (req, res) => {
171
+ let fields = [];
172
+ for (let i = 0; i < MYMODEL.keysExcel.length; i++) {
173
+ if (!Util.in_array(MYMODEL.keysExcel[i], Util.nots)) {
174
+ fields.push(MYMODEL.keysExcel[i]);
175
+ }
176
+ }
177
+ const results = await connection.results({
178
+ table:MYMODEL.table,
179
+ where:{
180
+ company_id:res.locals.companyId
181
+ },
182
+ orderBy:["id","desc"], limit:10
183
+ });
184
+ let callback=(result,field)=> {
185
+ return MYMODEL.widgets[field] && MYMODEL.widgets[field].name == 'datepicker' ? Util.dateSql(result[field]) : result[field];
186
+ };
187
+ await zRoute.excel(req, res, MYMODEL, fields, results, callback);
188
+ });
189
+
190
+ router.get('/import',csrfProtection, async (req, res) => {
191
+ const room = res.locals.token;
192
+ res.render(`layouts/${layout}`, {
193
+ room: room,
194
+ titleHeader: `Import / Upload data : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
195
+ csrfToken: req.csrfToken(),
196
+ breadcrumb : zForm.breadcrumbImport(MYMODEL.routeName),
197
+ renderBody: `${MYMODEL.routeName}/import.ejs`,
198
+ renderEnd: `${MYMODEL.routeName}/importjs.ejs`
199
+ });
200
+ });
201
+
202
+
203
+ router.post('/import', async(req, res) => {
204
+ res.json(await zRoute.import(req,res,MYMODEL));
205
+ });
206
+
207
+ router.get('/approval/:id', async (req, res) => {
208
+ await zRoute.attributeData(res, MYMODEL);
209
+ const id = req.params.id;
210
+ let data = {};
211
+ let data2 = {};
212
+ let zForms = {};
213
+ let zForms2 = {};
214
+ let result = {};
215
+ try {
216
+ result = await connection.result({table: MYMODEL.table, where: {id: id}});
217
+ if (!result.id) {
218
+ req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
219
+ return res.redirect('/' + MYMODEL.routeName);
220
+ }
221
+ data=result;
222
+ moduleLib.editor(req, res);
223
+ zForms = await zRoute.viewFormsSync(req, res, MYMODEL, result);
224
+ const contentScript = `$("#submit_draft").on("click", function () {$("#status").val(1);ajaxPost("/zzapproval",$("#form-group").serializeArray(), function (data) {
225
+ if (data.status == 0) {
226
+ toastr.error(data.message, data.title);
227
+ } else {
228
+ toastr.success(data.title, data.message);
229
+ }
230
+ });});
231
+ $("#submit").on("click", function () {
232
+ $('[name="zapprovals[status]"]').val(2);
233
+ ajaxPost("/zzapproval",$("#form-group").serializeArray(), function (data) {
234
+ if (data.status == 0) {
235
+ toastr.error(data.message, data.title);
236
+ } else {
237
+ toastr.success(data.title, data.message);
238
+ location.href = "";
239
+ }
240
+ });
241
+ });
242
+ `;
243
+ await moduleLib.addScript(req, res, contentScript);
244
+ const MODEL_APROVALS = require("./../models/zapprovals");
245
+ const rows = await connection.results({
246
+ table: "zapprovals",
247
+ where: {table: MYMODEL.table, company_id: res.locals.companyId, id_data: id}
248
+ });
249
+ if (rows.length) {
250
+ data2 = rows[0];
251
+ } else {
252
+ let obj = {};
253
+ obj.token = Util.uuid();
254
+ obj.status = 1;
255
+ obj.table = MYMODEL.table;
256
+ obj.company_id = res.locals.companyId;
257
+ obj.id_data = id;
258
+ obj.created_by = res.locals.userId;
259
+ obj.updated_by = res.locals.userId;
260
+ obj.created_at = Util.now();
261
+ let zfields = await connection.result({table: "zfields", where: {table: MYMODEL.table}});
262
+ let jsonApproval = zfields.approval_json || {}
263
+ obj.template = jsonApproval.content || {}
264
+ let title = jsonApproval.title;
265
+ if (title) {
266
+ let titleData = title;
267
+ for (var key in data) {
268
+ titleData = Util.replaceAll(titleData, "{{" + key + "}}", data[key])
269
+ }
270
+ obj.title = titleData
271
+ }
272
+ if (jsonApproval.hasOwnProperty("approvers")) {
273
+ obj.approvers = JSON.stringify(jsonApproval.approvers);
274
+ obj.knowings = JSON.stringify(jsonApproval.knowings);
275
+ obj.type = 1;
276
+ }
277
+ //insert default data
278
+ await connection.insert({table: "zapprovals", data: obj});
279
+ data2 = obj;
280
+ }
281
+ zForms2 = await zRoute.formsFieldSync(req, res, MODEL_APROVALS, data2);
282
+ } catch (err) {
283
+ zDebug(req, res, err);
284
+ res.send("Err");
285
+ }
286
+ res.render(`layouts/${layout}`, {
287
+ zForms: zForms,
288
+ zForms2: zForms2,
289
+ data: result,
290
+ result:result,
291
+ data2: data2,
292
+ Util: Util,
293
+ levels: zRole.myLevel(req, res, MYMODEL.table),
294
+ breadcrumb : zForm.breadcrumbApproval(MYMODEL.routeName, id),
295
+ renderBody: `${MYMODEL.routeName}/approval.ejs`
296
+ });
297
+ });
298
+
299
+ router.get('/preview/:token', async (req, res) => {
300
+ let token = req.params.token;
301
+ let data = {}, data2 = {};
302
+ let template = "";
303
+ let footers = "";
304
+ try {
305
+ let zfields = await connection.result({table: "zfields", where: {table: MYMODEL.table}});
306
+ let jsonApproval = zfields.approval_json || {}
307
+ let mytemplate = jsonApproval.content || {}
308
+ let results = await connection.results({table: "zapprovals", where: {token: token}});
309
+ if (results.length == 0) {
310
+ req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
311
+ return res.redirect('/' + MYMODEL.routeName);
312
+ }
313
+ if(results[0].status == 1){
314
+ await connection.update({
315
+ table : "zapprovals",
316
+ data: {
317
+ template : mytemplate
318
+ },
319
+ where : {
320
+ token:token
321
+ }
322
+ })
323
+ results = await connection.results({table: "zapprovals", where: {token: token}});
324
+ }
325
+ let MYMODEL2 = require("./../models/zapprovals")
326
+ data = await zRoute.viewTable(req, res, MYMODEL2, results[0], true);
327
+ let row = await connection.result({table: results[0].table, where: {id: results[0].id_data}});
328
+ data2 = await zRoute.viewTable(req, res, MYMODEL, row, true);
329
+ template = data.template;
330
+ let title = data.title || ""
331
+ for (var key in data2) {
332
+ template = Util.replaceAll(template, "{{" + key + "}}", data2[key])
333
+ title = Util.replaceAll(title, "{{" + key + "}}", data2[key])
334
+ }
335
+ data.title = title;
336
+ var details = await connection.results({table: "zapprovals_details", where: {title_id: results[0].id}});
337
+ if (details.length) {
338
+ footers = await zRoute.approversFooter(details);
339
+ }
340
+ } catch (err) {
341
+ zDebug(req, res, err);
342
+ res.send("Err");
343
+ }
344
+ res.render(`layouts/blank`, {
345
+ template: template,
346
+ data: data,
347
+ footers: footers,
348
+ Util: Util,
349
+ details: details,
350
+ renderBody: 'index/zapprovals_preview.ejs'
351
+ });
352
+ });
353
+
354
+ router.post('/grid', access, zRoute.postGrid);
355
+ router.post('/reload', access, zRoute.postGridReload);
356
+ router.post('/chains', access, zRoute.chains);
357
+ router.post('/get_attributes',access, zRoute.getAttributes);
358
+
359
+ module.exports = router;
package/lib/zReport.js CHANGED
@@ -3,7 +3,7 @@ const fs = require('fs-extra')
3
3
  const nodemailer = require('nodemailer')
4
4
  const qs = require('qs')
5
5
  const moment = require('moment')
6
- const Excel = require('exceljs')
6
+ const Excel = require('exceljsremake')
7
7
  const debug = require('./debug')
8
8
  const zRoute = require('./zRoute')
9
9
  const Util = require('./Util')
@@ -36,7 +36,7 @@ function colToLetter (col) {
36
36
  }
37
37
 
38
38
  function cellToPrimitive (cell) {
39
- // exceljs cell.text is safest for UI display
39
+ // Excel cell.text is safest for UI display
40
40
  if (!cell) return ''
41
41
  if (typeof cell.text === 'string' && cell.text !== '') return cell.text
42
42
  const v = cell.value
package/lib/zRoute.js CHANGED
@@ -9,7 +9,7 @@ const qs = require("qs");
9
9
  const puppeteer = require("puppeteer");
10
10
  const ejs = require("ejs");
11
11
  const uglifyJS = require("uglify-js");
12
- const Excel = require("exceljs");
12
+ const Excel = require("exceljsremake");
13
13
  const fs = require("fs-extra");
14
14
  const Util = require("./Util");
15
15
  const connection = require("./connection");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zet-lib",
3
- "version": "4.0.3",
3
+ "version": "5.0.0",
4
4
  "description": "zet is a library that part of zet generator.",
5
5
  "engines": {
6
6
  "node": ">=18"
@@ -32,7 +32,7 @@
32
32
  "dotenv": "^16.5.0",
33
33
  "dropbox": "^10.34.0",
34
34
  "ejs": "^3.1.10",
35
- "exceljs": "^4.4.0",
35
+ "exceljsremake": "^0.1.2",
36
36
  "express-zip": "^3.0.0",
37
37
  "fs-extra": "^11.3.4",
38
38
  "html-minifier-terser": "^7.2.0",
@@ -49,15 +49,17 @@
49
49
  "read-excel-file": "^5.8.0",
50
50
  "socket.io": "^4.8.3",
51
51
  "uglify-js": "^3.19.3",
52
- "uuid": "^9.0.1"
52
+ "uuid": "^14.0.0"
53
53
  },
54
54
  "optionalDependencies": {
55
55
  "sharp": "^0.34.1"
56
56
  },
57
57
  "devDependencies": {
58
+ "nyc": "^18.0.0",
58
59
  "standard": "^17.1.2"
59
60
  },
60
61
  "overrides": {
62
+ "uuid": "^14.0.0",
61
63
  "unzipper": "^0.12.3",
62
64
  "rimraf": "^6.1.2",
63
65
  "fstream": "^2.0.0",