@simitgroup/simpleapp-generator 1.4.1-alpha → 1.5.0-alpha

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.
Files changed (76) hide show
  1. package/dist/buildinschemas/autoincreament.d.ts.map +1 -1
  2. package/dist/buildinschemas/autoincreament.js +1 -0
  3. package/dist/buildinschemas/autoincreament.js.map +1 -1
  4. package/dist/buildinschemas/docnoformat.d.ts.map +1 -1
  5. package/dist/buildinschemas/docnoformat.js +1 -0
  6. package/dist/buildinschemas/docnoformat.js.map +1 -1
  7. package/dist/buildinschemas/permission.d.ts.map +1 -1
  8. package/dist/buildinschemas/permission.js +1 -8
  9. package/dist/buildinschemas/permission.js.map +1 -1
  10. package/dist/framework.d.ts.map +1 -1
  11. package/dist/framework.js +4 -2
  12. package/dist/framework.js.map +1 -1
  13. package/dist/generate.js +8 -10
  14. package/dist/generate.js.map +1 -1
  15. package/dist/processors/bpmnbuilder.d.ts.map +1 -1
  16. package/dist/processors/bpmnbuilder.js +10 -4
  17. package/dist/processors/bpmnbuilder.js.map +1 -1
  18. package/dist/processors/jsonschemabuilder.d.ts.map +1 -1
  19. package/dist/processors/jsonschemabuilder.js +9 -0
  20. package/dist/processors/jsonschemabuilder.js.map +1 -1
  21. package/package.json +1 -1
  22. package/src/buildinschemas/autoincreament.ts +1 -0
  23. package/src/buildinschemas/docnoformat.ts +1 -0
  24. package/src/buildinschemas/permission.ts +1 -8
  25. package/src/framework.ts +5 -4
  26. package/src/generate.ts +11 -11
  27. package/src/processors/bpmnbuilder.ts +10 -5
  28. package/src/processors/jsonschemabuilder.ts +10 -0
  29. package/templates/basic/nest/apischema.ts.eta +5 -0
  30. package/templates/basic/nest/controller.ts.eta +28 -10
  31. package/templates/basic/nest/resolver.ts.eta +124 -0
  32. package/templates/basic/nest/service.ts.eta +0 -6
  33. package/templates/basic/nuxt/pages.landing.vue.eta +4 -2
  34. package/templates/basic/nuxt/pages.mobile.landing.vue.eta +3 -3
  35. package/templates/nest/.env._eta +7 -7
  36. package/templates/nest/src/app.module.ts.eta +22 -21
  37. package/templates/nest/src/app.resolver.ts.eta +9 -0
  38. package/templates/nest/src/simpleapp/generate/commons/decorators/appuser.decorator.ts.eta +11 -5
  39. package/templates/nest/src/simpleapp/generate/commons/interceptors/response.interceptor.ts.eta +44 -39
  40. package/templates/nest/src/simpleapp/generate/commons/middlewares/tenant.middleware.ts.eta +16 -4
  41. package/templates/nest/src/simpleapp/generate/commons/roles/roles.guard.ts.eta +24 -12
  42. package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +26 -18
  43. package/templates/nest/src/simpleapp/generate/types/index.ts.eta +1 -0
  44. package/templates/nest/src/simpleapp/generate/types/workflow.type.ts.eta +15 -0
  45. package/templates/nest/src/simpleapp/generate/workflow/workflow.config.ts.eta +2 -2
  46. package/templates/nest/src/simpleapp/generate/workflow/workflow.controller.ts.eta +8 -6
  47. package/templates/nest/src/simpleapp/generate/workflow/workflow.service.ts.eta +41 -22
  48. package/templates/nest/src/simpleapp/resolvers/readme.md.eta +1 -0
  49. package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +9 -2
  50. package/templates/nuxt/app.vue._eta +9 -2
  51. package/templates/nuxt/components/calendar/CalendarByResource.vue.eta +1 -1
  52. package/templates/nuxt/components/mobile/MobileToolbar.vue.eta +11 -11
  53. package/templates/nuxt/components/overlay/OverlayHoldscreen.vue._eta +26 -0
  54. package/templates/nuxt/components/renderer/RendererDate.vue.eta +1 -1
  55. package/templates/nuxt/components/renderer/RendererDateTime.vue.eta +1 -1
  56. package/templates/nuxt/components/renderer/RendererForeignKey.vue.eta +7 -7
  57. package/templates/nuxt/components/renderer/RendererMoney.vue.eta +21 -12
  58. package/templates/nuxt/components/renderer/RendererTime.vue.eta +13 -0
  59. package/templates/nuxt/components/simpleApp/SimpleAppInput.vue.eta +11 -10
  60. package/templates/nuxt/composables/date.generate.ts.eta +10 -3
  61. package/templates/nuxt/composables/getDocument.generate.ts.eta +4 -4
  62. package/templates/nuxt/composables/graphquery.generate.ts.eta +26 -0
  63. package/templates/nuxt/composables/holdscreen.generate.ts.eta +9 -0
  64. package/templates/nuxt/composables/refreshDocumentList.generate.ts.eta +7 -6
  65. package/templates/nuxt/layouts/mobile.vue._eta +3 -3
  66. package/templates/nuxt/nuxt.config.ts._eta +8 -0
  67. package/templates/nuxt/pages/[xorg]/index.vue._eta +9 -0
  68. package/templates/nuxt/pages/[xorg]/mobile/index.vue._eta +2 -15
  69. package/templates/nuxt/pages/picktenant.vue._eta +3 -1
  70. package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +17 -3
  71. package/templates/nuxt/types/calendar.ts.eta +8 -3
  72. package/templates/nuxt/types/documentlist.ts.eta +13 -1
  73. package/templates/nuxt/types/events.ts.eta +5 -3
  74. package/templates/nuxt/types/others.ts.eta +3 -5
  75. package/templates/project/workflows/bpmn/{suspendcustomer.bpmn._eta → sayhello.bpmn._eta} +6 -36
  76. package/tsconfig.tsbuildinfo +1 -1
@@ -1,13 +1,19 @@
1
1
  /**
2
2
  * This file was automatically generated by simpleapp generator. Every
3
3
  * MODIFICATION OVERRIDE BY GENERATEOR
4
- * last change 2023-10-28
4
+ * last change 2024-03-17
5
5
  * Author: Ks Tan
6
6
  */
7
- import { Injectable, Inject, CanActivate, ExecutionContext, Scope } from '@nestjs/common';
7
+ import {
8
+ Injectable,
9
+ Inject,
10
+ CanActivate,
11
+ ExecutionContext,
12
+ Scope,
13
+ } from '@nestjs/common';
8
14
  import { Reflector } from '@nestjs/core';
9
- import { Role } from './roles.enum'
10
- import { ROLES_KEY } from './roles.decorator'
15
+ import { Role } from './roles.enum';
16
+ import { ROLES_KEY } from './roles.decorator';
11
17
  import { UserContext } from '../user.context';
12
18
 
13
19
  @Injectable()
@@ -15,25 +21,31 @@ export class RolesGuard implements CanActivate {
15
21
  constructor(private reflector: Reflector) {}
16
22
 
17
23
  canActivate(context: ExecutionContext): boolean {
18
-
19
24
  const requiredRoles = this.reflector.getAllAndOverride<Role[]>(ROLES_KEY, [
20
25
  context.getHandler(),
21
26
  context.getClass(),
22
27
  ]);
23
28
 
24
- const sessionuser = context.switchToHttp().getRequest()['sessionuser']
29
+ let sessionuser:UserContext
30
+ if (context.getType() == 'http') {
31
+ const request = context.switchToHttp().getRequest();
32
+ sessionuser = request['sessionuser'];
33
+ } else if (context.getArgs()[2]) {
34
+ const req = context.getArgs()[2].req;
35
+ sessionuser = req['sessionuser'];
36
+ }
25
37
 
26
38
  if (!requiredRoles) {
27
39
  return true;
28
40
  }
29
-
30
- const roles = sessionuser.getRoles()
31
- if(!roles){
32
- return false
41
+
42
+ const roles = sessionuser.getRoles();
43
+ if (!roles) {
44
+ return false;
33
45
  }
34
46
  const result = requiredRoles.some((role) => roles.includes(role));
35
47
 
36
- return result
48
+ return result;
37
49
  // return true
38
50
  }
39
- }
51
+ }
@@ -37,6 +37,7 @@ import {
37
37
  DefaultHooks,
38
38
  MoreProjectionType,
39
39
  DeleteResultType,
40
+ WorkflowName,
40
41
  } from '../types';
41
42
  @Injectable()
42
43
  export class SimpleAppService<T extends { _id?: string }> {
@@ -275,29 +276,30 @@ export class SimpleAppService<T extends { _id?: string }> {
275
276
 
276
277
  /**
277
278
  * create many from array, for performance reason it submit all item in 1 go, so it won't implement hooks
278
- * @param appuser
279
- * @param datas
279
+ * @param appuser
280
+ * @param datas
280
281
  */
281
- async createMany (appuser: UserContext, datas: T[]){
282
- if(Array.isArray(datas)){
283
- for(let i=0 ; i< datas.length; i++){
284
- const data = datas[i]
282
+ async createMany(appuser: UserContext, datas: T[]) {
283
+ if (Array.isArray(datas)) {
284
+ for (let i = 0; i < datas.length; i++) {
285
+ const data = datas[i];
285
286
  let isolationFilter: any = { ...appuser.getCreateFilter() };
286
287
  isolationFilter = this.polishIsolationFilter(isolationFilter, data);
287
-
288
+
288
289
  Object.assign(data, isolationFilter);
289
290
  this.reCalculateValue(data);
290
291
  await this.validateData(appuser, data);
291
- this.applyNestedDateTime(appuser, data, 'create');
292
+ this.applyNestedDateTime(appuser, data, 'create');
292
293
  }
293
- const result = await this.doc.insertMany(datas)
294
- return result
295
-
296
- }else{
297
- throw new BadRequestException(this.getDocumentType() +': create many only support array')
294
+ const result = await this.doc.insertMany(datas);
295
+ return result;
296
+ } else {
297
+ throw new BadRequestException(
298
+ this.getDocumentType() + ': create many only support array',
299
+ );
298
300
  }
299
301
  }
300
-
302
+
301
303
  async create(appuser: UserContext, data: T) {
302
304
  let result;
303
305
  if (!data._id) {
@@ -353,7 +355,7 @@ export class SimpleAppService<T extends { _id?: string }> {
353
355
  return result as T;
354
356
  } catch (err) {
355
357
  throw new InternalServerErrorException(
356
- `createHook ${this.documentType} error: ${err}`,
358
+ `createHook ${this.documentType} error: ${JSON.stringify(err)}`,
357
359
  `${this.documentType} createHook error`,
358
360
  );
359
361
  }
@@ -555,11 +557,12 @@ export class SimpleAppService<T extends { _id?: string }> {
555
557
  try {
556
558
  const result = await this.doc.findOneAndReplace(isolationFilter, data, {
557
559
  session: dbsession,
560
+ new: true,
558
561
  });
559
562
  appuser.addUpdatedRecordId(this.documentName, data._id);
560
563
  if (this.hooks.afterUpdate)
561
564
  await this.hooks.afterUpdate(appuser, id, result);
562
- return await this.findById(appuser, id);
565
+ return result // await this.findById(appuser, id);
563
566
  } catch (err) {
564
567
  this.logger.error(err);
565
568
  throw new InternalServerErrorException(err.message);
@@ -605,13 +608,14 @@ export class SimpleAppService<T extends { _id?: string }> {
605
608
  try {
606
609
  const result = await this.doc.findOneAndUpdate(isolationFilter, data, {
607
610
  session: dbsession,
611
+ new: true,
608
612
  });
609
613
 
610
614
  appuser.addUpdatedRecordId(this.documentName, data._id);
611
615
 
612
616
  if (this.hooks.afterUpdate)
613
617
  await this.hooks.afterUpdate(appuser, id, result);
614
- return await this.findById(appuser, id);
618
+ return result //await this.findById(appuser, id);
615
619
  } catch (err) {
616
620
  throw new InternalServerErrorException(err.message);
617
621
  }
@@ -718,7 +722,11 @@ export class SimpleAppService<T extends { _id?: string }> {
718
722
  }
719
723
  }
720
724
 
721
- startWorkflow(appuser: UserContext, processName: string, workflowData: any) {
725
+ startWorkflow(
726
+ appuser: UserContext,
727
+ processName: WorkflowName,
728
+ workflowData: any,
729
+ ) {
722
730
  return this.eventEmitter.emit(
723
731
  'workflow.start',
724
732
  appuser,
@@ -3,5 +3,6 @@
3
3
  export * from './<%= d['doctype']%>.type'
4
4
  <%}%>
5
5
  export * from './simpleapp.type'
6
+ export * from './workflow.type'
6
7
 
7
8
  export * from '../../types';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This file was automatically generated by simpleapp generator. Every
3
+ * MODIFICATION OVERRIDE BY GENERATEOR
4
+ * last change 2024-04-15
5
+ * Author: Ks Tan
6
+ */
7
+
8
+ export type WorkflowCatalogue = {
9
+ <%for(let i=0; i<it.allbpmn.length;i++){ %>
10
+ <% const bpmn = it.allbpmn[i] %>
11
+ <%=bpmn%>:any,
12
+ <%}%>
13
+ }
14
+
15
+ export type WorkflowName = keyof WorkflowCatalogue
@@ -65,8 +65,8 @@ export class WorkflowConfig {
65
65
  },
66
66
  appDelegate: (server: BPMNServer) =>
67
67
  _this.workflowdelegate.setServer(server),
68
- userService: (server: BPMNServer) =>
69
- _this.workflowUserService.setServer(server),
68
+ //userService: (server: BPMNServer) =>
69
+ //_this.workflowUserService.setServer(server),
70
70
  dataStore: function (server: BPMNServer) {
71
71
  return new MyDataStore(server);
72
72
  },
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * This file was automatically generated by simpleapp generator. Every
3
3
  * MODIFICATION OVERRIDE BY GENERATEOR
4
- * last change 2024-02-23
4
+ * last change 2024-04-15
5
5
  * Author: Ks Tan
6
6
  */
7
7
  import {
@@ -15,6 +15,7 @@ import {
15
15
  Delete,
16
16
  HttpCode,
17
17
  } from '@nestjs/common';
18
+
18
19
  import { WorkflowService } from './workflow.service';
19
20
  import { UserTaskActors } from './workflow.type';
20
21
  import { Roles } from '../commons/roles/roles.decorator';
@@ -29,6 +30,7 @@ import {
29
30
  import { ApiTags, ApiBody, ApiResponse, ApiOperation } from '@nestjs/swagger';
30
31
  import { AppUser } from '../commons/decorators/appuser.decorator';
31
32
  import { UserContext } from '../commons/user.context';
33
+ import { WorkflowName } from '../types';
32
34
  @ApiTags('workflow')
33
35
  @Controller('workflow')
34
36
  export class WorkflowController {
@@ -210,7 +212,7 @@ export class WorkflowController {
210
212
  })
211
213
  async newWorkflowDefinitions(
212
214
  @AppUser() appuser: UserContext,
213
- @Param('workflowname') workflowname: string,
215
+ @Param('workflowname') workflowname: WorkflowName,
214
216
  @Body() xml: string,
215
217
  ) {
216
218
  return await this.workflowService.newWorkflowDefinitions(
@@ -234,7 +236,7 @@ export class WorkflowController {
234
236
  })
235
237
  async updateWorkflowDefinition(
236
238
  @AppUser() appuser: UserContext,
237
- @Param('workflowname') workflowname: string,
239
+ @Param('workflowname') workflowname: WorkflowName,
238
240
  @Body() xml: string,
239
241
  ) {
240
242
  return await this.workflowService.updateWorkflowDefinition(
@@ -254,7 +256,7 @@ export class WorkflowController {
254
256
  })
255
257
  async readWorkflowDefinition(
256
258
  @AppUser() appuser: UserContext,
257
- @Param('workflowname') workflowname: string,
259
+ @Param('workflowname') workflowname: WorkflowName,
258
260
  ) {
259
261
  return await this.workflowService.readWorkflowDefinition(
260
262
  appuser,
@@ -271,7 +273,7 @@ export class WorkflowController {
271
273
  })
272
274
  async dropWorkflowDefinition(
273
275
  @AppUser() appuser: UserContext,
274
- @Param('workflowname') workflowname: string,
276
+ @Param('workflowname') workflowname: WorkflowName,
275
277
  ) {
276
278
  return await this.workflowService.deleteWorkflowDefinition(
277
279
  appuser,
@@ -344,7 +346,7 @@ export class WorkflowController {
344
346
  })
345
347
  async startWorkflow(
346
348
  @AppUser() appuser: UserContext,
347
- @Param('workflowname') workflowname: string,
349
+ @Param('workflowname') workflowname: WorkflowName,
348
350
  @Body() data: any,
349
351
  ) {
350
352
  return await this.workflowService.startWorkflow(
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * This file was automatically generated by simpleapp generator. Every
3
3
  * MODIFICATION OVERRIDE BY GENERATEOR
4
- * last change 2024-02-23
4
+ * last change 2024-04-15
5
5
  * Author: Ks Tan
6
6
  */
7
7
  import { WorkflowConfig } from './workflow.config';
@@ -33,6 +33,7 @@ import {
33
33
  } from 'bpmn-server';
34
34
  // import { configuration } from './configuration';
35
35
  import { UserContext } from '../commons/user.context';
36
+ import { WorkflowName } from '../types';
36
37
  //import * as formschemas from '../../workflow/formschema';
37
38
  export {
38
39
  WorkflowSettingApiSchema,
@@ -110,7 +111,7 @@ export class WorkflowService {
110
111
  */
111
112
  async newWorkflowDefinitions(
112
113
  appuser: UserContext,
113
- workflowName: string,
114
+ workflowName: WorkflowName,
114
115
  xml: string,
115
116
  ) {
116
117
  throw new BadRequestException(
@@ -124,13 +125,19 @@ export class WorkflowService {
124
125
  );
125
126
  }
126
127
 
127
- async readWorkflowDefinition(appuser: UserContext, workflowname: string) {
128
+ async readWorkflowDefinition(
129
+ appuser: UserContext,
130
+ workflowname: WorkflowName,
131
+ ) {
128
132
  throw new BadRequestException(
129
133
  `readWorkflowDefinition is not supported yet`,
130
134
  );
131
135
  }
132
136
 
133
- async deleteWorkflowDefinition(appuser: UserContext, workflowname: string) {
137
+ async deleteWorkflowDefinition(
138
+ appuser: UserContext,
139
+ workflowname: WorkflowName,
140
+ ) {
134
141
  throw new BadRequestException(
135
142
  `deleteWorkflowDefinition is not supported yet`,
136
143
  );
@@ -138,7 +145,7 @@ export class WorkflowService {
138
145
 
139
146
  async updateWorkflowDefinition(
140
147
  appuser: UserContext,
141
- workflowname: string,
148
+ workflowname: WorkflowName,
142
149
  xml: string,
143
150
  ) {
144
151
  throw new BadRequestException(
@@ -193,21 +200,20 @@ export class WorkflowService {
193
200
  data: any,
194
201
  ) {
195
202
  try {
196
-
197
203
  const response = await this.bpmnServer.engine.invoke(
198
204
  { 'items.id': taskId, 'items.status': 'wait' },
199
205
  data,
200
206
  appuser.getUid(),
201
- {appuser:appuser}
207
+ { appuser: appuser },
202
208
  );
203
209
  return {
204
- parentKeys:Object.keys(response),
205
- parentId:response.id,
206
- data:response.instance.data,
210
+ parentKeys: Object.keys(response),
211
+ parentId: response.id,
212
+ data: response.instance.data,
207
213
  // parentId:response,
208
- input:response.item.input,
209
- vars:response.item.vars,
210
- id:response.item.id,
214
+ input: response.item.input,
215
+ vars: response.item.vars,
216
+ id: response.item.id,
211
217
  status: response.item.status,
212
218
  };
213
219
  } catch (e) {
@@ -313,12 +319,26 @@ export class WorkflowService {
313
319
  * @returns workflowsummary
314
320
  */
315
321
  @OnEvent('workflow.start')
316
- async startWorkflow(appuser: UserContext, workflowName: string, data?: any) {
322
+ async startWorkflow(
323
+ appuser: UserContext,
324
+ workflowName: WorkflowName,
325
+ data?: any,
326
+ ) {
327
+ //run as event, it wont have transaction
328
+ appuser.setDBSession(undefined);
329
+
330
+ if (!data ) data = {}
331
+
332
+ //sometimes data is Mongoose object instead of pure data, need serialize and deserialize to remove that
333
+ data=JSON.parse(JSON.stringify(data))
334
+
317
335
  try {
318
336
  // console.log('startWorkflow started: ', workflowName);
337
+
319
338
  data.tenantId = appuser.getTenantId();
320
339
  data.orgId = appuser.getOrgId();
321
340
  data.branchId = appuser.getBranchId();
341
+
322
342
  const result = await this.bpmnServer.engine.start(
323
343
  workflowName,
324
344
  data,
@@ -457,13 +477,12 @@ export class WorkflowService {
457
477
  const elementProps = event.context.item.element.def;
458
478
  // const usertaskinput = event.context.item.input ?? null;
459
479
  const data = event.context.instance.data;
460
- const vars = {}
461
- Object.assign(vars,event.context.item.input);
462
- event.context.item.input={}
480
+ const vars = {};
481
+ Object.assign(vars, event.context.item.input);
482
+ event.context.item.input = {};
463
483
  const options = event.context.options;
464
484
  switch (elementType) {
465
485
  case BPMN_TYPE.UserTask:
466
-
467
486
  let usertaskeventtype: UserTaskEventType;
468
487
  if (eventType == EXECUTION_EVENT.node_start)
469
488
  usertaskeventtype = 'start';
@@ -475,7 +494,7 @@ export class WorkflowService {
475
494
  usertaskeventtype = 'invoked';
476
495
  else if (eventType == EXECUTION_EVENT.node_wait)
477
496
  usertaskeventtype = 'wait';
478
- // console.log("event-------=================================",eventType,usertaskeventtype)
497
+ // console.log("event-------=================================",eventType,usertaskeventtype)
479
498
  if (usertaskeventtype) {
480
499
  const props: UserTaskData = {
481
500
  workflowName: workflowName,
@@ -492,9 +511,9 @@ export class WorkflowService {
492
511
  followUpDate: event.context.item.followUpDate,
493
512
  priority: event.context.item.priority,
494
513
  formKey: elementProps.formKey,
495
- },
514
+ },
496
515
  data: data,
497
- vars:vars,
516
+ vars: vars,
498
517
  options: options,
499
518
  };
500
519
  this.eventEmitter.emit(
@@ -518,7 +537,7 @@ export class WorkflowService {
518
537
  elementId: elementId,
519
538
  elementName: elementName,
520
539
  data: data,
521
- vars:vars,
540
+ vars: vars,
522
541
  options: options,
523
542
  };
524
543
  this.eventEmitter.emit(
@@ -0,0 +1 @@
1
+ graphql resolver
@@ -13,6 +13,7 @@ import { AuditTrail } from './generate/commons/audittrail.service';
13
13
  <% for(let i=0;i<it.modules.length; i++){ %>
14
14
  <% let obj = it.modules[i]%>
15
15
  import { <%= obj.docname %>Service } from './services/<%= obj.doctype %>.service';
16
+ import { <%= obj.docname %>Resolver } from './generate/resolvers/<%= obj.doctype %>.resolver';
16
17
  import { <%= obj.docname %>Controller } from './generate/controllers/<%= obj.doctype %>.controller';
17
18
  import { <%= obj.docname %>MongoSchema } from './generate/models/<%= obj.doctype %>.model';
18
19
  <%}%>
@@ -45,12 +46,18 @@ import { <%=capitalizeFirstLetter(bpmn)%>ListenerService } from 'src/simpleapp/w
45
46
  ],
46
47
  controllers: [<% for(let i=0;i<it.modules.length; i++){ %><%= it.modules[i].docname %>Controller,<%}%> ProfileController,WorkflowController],
47
48
  providers: [
48
- AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){ %><%= it.modules[i].docname %>Service,<%}%> ProfileService,WorkflowDelegate,WorkflowConfig,WorkflowService,WorkflowUserService,
49
+ AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){ %>
50
+ <%= it.modules[i].docname %>Service,
51
+ <%= it.modules[i].docname %>Resolver,
52
+ <%}%> ProfileService,WorkflowDelegate,WorkflowConfig,WorkflowService,WorkflowUserService,
49
53
  <%for(let i=0; i<it.allbpmn.length;i++){%>
50
54
  <%let bpmn = it.allbpmn[i]%>
51
55
  <%=capitalizeFirstLetter(bpmn)%>ListenerService,
52
56
  <%}%>
53
57
  ],
54
- exports:[AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){ %><%= it.modules[i].docname %>Service,<%}%> ProfileService,WorkflowDelegate,WorkflowConfig,WorkflowService,WorkflowUserService,]
58
+ exports:[AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){ %>
59
+ <%= it.modules[i].docname %>Service,
60
+ <%= it.modules[i].docname %>Resolver,
61
+ <%}%> ProfileService,WorkflowDelegate,WorkflowConfig,WorkflowService,WorkflowUserService,]
55
62
  })
56
63
  export class GenerateModule {}
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <NuxtLayout :name="getLayout()">
3
3
  <SessionBlock/>
4
+ <OverlayHoldscreen/>
4
5
  <EventDocumentViewer></EventDocumentViewer>
5
6
  <EventDecision/>
6
7
  <EventNotification/>
@@ -12,13 +13,15 @@
12
13
  /**
13
14
  * This file was automatically generated by simpleapp generator. Every
14
15
  * MODIFICATION OVERRIDE BY GENERATEOR
15
- * last change 2023-11-12
16
+ * last change 2024-03-17
16
17
  * Author: Ks Tan
17
18
  */
19
+
18
20
  watch(()=>useRoute().params['xorg'],async (newval,oldvalue)=>{
19
21
  await reloadUserStore()
20
22
  if(getPathPara('xorg','')!=''){
21
23
  if(!getUserProfile()?.currentGroup) goTo('pickgroup')
24
+ setGraphqlServer()
22
25
  }
23
26
  })
24
27
 
@@ -35,6 +38,10 @@ const getLayout = ()=>{
35
38
  onMounted(()=>{
36
39
  const currentgroup = useCookie('currentGroup').value
37
40
  //if no xorg, no enforce pick group
38
- if(getCurrentXorg() && !currentgroup) goTo('pickgroup')
41
+ if(getCurrentXorg()){
42
+ if (!currentgroup)goTo('pickgroup')
43
+ setGraphqlServer()
44
+ }
45
+
39
46
  })
40
47
  </script>
@@ -5,7 +5,7 @@
5
5
  :disable-views="['years', 'year', 'month', 'week']"
6
6
  :time-from="8 * 60"
7
7
  :time-to="22 * 60"
8
- :time-step="60"
8
+ :time-step="30"
9
9
  active-view="day"
10
10
  :snap-to-time="15"
11
11
  hide-view-selector
@@ -1,15 +1,15 @@
1
- <template>
2
- <div v-bind="$attrs"
3
- class="w-full dark:bg-gray-800 z-20 justify justify-between absolute h h-14 flex flex-row place-items-center opacity-90 dark:text-white"
4
- >
5
- <div class="text-left"><slot name="start"></slot></div>
6
- <div class="flex-1 text-center line-clamp-2">
7
- <slot name="center"></slot>
8
- </div>
9
- <div class="text-right"><slot name="end"></slot></div>
1
+ <template>
2
+ <div
3
+ v-bind="$attrs"
4
+ class="w-full bg-gray-800 dark:bg-gray-800 z-20 justify justify-between absolute h h-14 flex flex-row place-items-center opacity-90 dark:text-white text-white"
5
+ >
6
+ <div class="text-left "><slot name="start"></slot></div>
7
+ <div class="flex-1 text-center line-clamp-2">
8
+ <slot name="center"></slot>
10
9
  </div>
11
- <div class="h-14"></div>
12
-
10
+ <div class="text-right"><slot name="end"></slot></div>
11
+ </div>
12
+ <div class="h-14"></div>
13
13
  </template>
14
14
  <script setup lang="ts">
15
15
  /**
@@ -0,0 +1,26 @@
1
+ <template>
2
+ <Dialog modal v-model:visible="visible" :closable="false"
3
+ :pt="{
4
+ root:{class:'w-auto'},
5
+ }">
6
+ <div class=" items-center justify-center flex flex-col ">
7
+ <ProgressSpinner />
8
+ </div>
9
+
10
+ </Dialog>
11
+ </template>
12
+ <script lang="ts" setup>
13
+ /**
14
+ * This file was automatically generated by simpleapp generator.
15
+ * --remove-this-line-to-prevent-override--
16
+ * last change 2024-03-13
17
+ * Author: Ks Tan
18
+ */
19
+ const visible = ref(false)
20
+ onMounted(()=>{
21
+
22
+ useNuxtApp().$listen('HoldScreen',(ishold)=>{
23
+ visible.value=ishold
24
+ })
25
+ })
26
+ </script>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <span v-if="modelValue">{{ toLocalDate(modelValue) }}</span>
2
+ <span v-if="modelValue">{{ toUTCDate(modelValue) }}</span>
3
3
  <span v-else>-</span>
4
4
  </template>
5
5
  <script lang="ts" setup>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <span v-if="modelValue">{{ toLocalDateTime(modelValue) }}</span>
2
+ <span v-if="modelValue">{{ toUTCDateTime(modelValue) }}</span>
3
3
  <span v-else>-</span>
4
4
  </template>
5
5
  <script lang="ts" setup>
@@ -14,14 +14,14 @@
14
14
  /**
15
15
  * This file was automatically generated by simpleapp generator during initialization.
16
16
  * DONT CHANGE THIS FILE CAUSE IT OVERRIDE
17
- * last change 2024-02-04
17
+ * last change 2024-04-14
18
18
  * author: Ks Tan
19
19
  */
20
- import { ForeignKey, FormCrudEvent } from "~/types";
20
+ import { ForeignKey, FormCrudEvent, SimpleAppDocumentType } from "~/types";
21
21
 
22
- type SettingProp = { collection: string; displayField?: string };
22
+ type SettingProp = { collection: SimpleAppDocumentType; displayField?: string };
23
23
  const modelValue = defineModel<ForeignKey>();
24
- const emits = defineEmits(['after'])
24
+ const emits = defineEmits(["after"]);
25
25
  const props = defineProps<{ setting: SettingProp }>();
26
26
  const displayText = computed(() => {
27
27
  const s = props.setting;
@@ -44,9 +44,9 @@ const viewRecord = () => {
44
44
  documentName: props.setting.collection,
45
45
  viewer: viewer.value,
46
46
  readonly: true,
47
- after: async(actionName:FormCrudEvent,data)=>{
48
- emits('after',actionName,data)
49
- }
47
+ after: async (actionName: FormCrudEvent, data) => {
48
+ emits("after", actionName, data);
49
+ },
50
50
  });
51
51
  };
52
52
  </script>
@@ -1,11 +1,13 @@
1
-
2
1
  <template>
3
- <span v-if="showCurrency"> {{ Intl.NumberFormat( useI18n().defaultLocale,{
4
- style:'currency',
5
- currency: getUserProfile()?.currency,
6
- currencyDisplay: 'symbol',
7
- }).format(modelValue) }}</span>
8
- <span v-else> {{ modelValue.toLocaleString(useI18n().defaultLocale,options) }}</span>
2
+ <span v-if="typeof modelValue=='undefined' || typeof modelValue=='string' ">-</span>
3
+ <span v-else-if="showCurrency">
4
+ {{
5
+ currenyValue
6
+ }}</span
7
+ >
8
+ <span v-else>
9
+ {{ modelValue.toLocaleString(useI18n().defaultLocale, options) }}</span
10
+ >
9
11
  </template>
10
12
  <script lang="ts" setup>
11
13
  /**
@@ -14,12 +16,19 @@
14
16
  * last change 2024-02-04
15
17
  * author: Ks Tan
16
18
  */
17
-
19
+ const currenyValue = computed(()=>{
20
+ if(modelValue.value === undefined) return '-'
21
+ return Intl.NumberFormat(useI18n().defaultLocale, {
22
+ // style: "currency",
23
+ // currency: getUserProfile()?.currency ?? '',
24
+ // currencyDisplay: "symbol",
25
+ }).format(modelValue.value)
26
+ })
18
27
  const options = {
19
- style: 'decimal', // Other options: 'currency', 'percent', etc.
28
+ style: "decimal", // Other options: 'currency', 'percent', etc.
20
29
  minimumFractionDigits: 2,
21
30
  maximumFractionDigits: 2,
22
31
  };
23
- const modelValue = defineModel<number>({required:true})
24
- const props = defineProps<{showCurrency?:boolean}>()
25
- </script>
32
+ const modelValue = defineModel<number>({ required: true });
33
+ const props = defineProps<{ showCurrency?: boolean }>();
34
+ </script>