@simitgroup/simpleapp-generator 1.1.12 → 1.1.15

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 (96) hide show
  1. package/dist/buildinschemas/autoincreament.d.ts.map +1 -1
  2. package/dist/buildinschemas/autoincreament.js +1 -2
  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 +0 -1
  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 +0 -1
  9. package/dist/buildinschemas/permission.js.map +1 -1
  10. package/dist/framework.js +4 -4
  11. package/dist/framework.js.map +1 -1
  12. package/dist/generate.d.ts.map +1 -1
  13. package/dist/generate.js +20 -7
  14. package/dist/generate.js.map +1 -1
  15. package/dist/processors/bpmnbuilder.d.ts +2 -0
  16. package/dist/processors/bpmnbuilder.d.ts.map +1 -0
  17. package/dist/processors/bpmnbuilder.js +151 -0
  18. package/dist/processors/bpmnbuilder.js.map +1 -0
  19. package/dist/resource/camunda-moodle.d.ts +27 -0
  20. package/dist/resource/camunda-moodle.d.ts.map +1 -0
  21. package/dist/resource/camunda-moodle.js +91 -0
  22. package/dist/resource/camunda-moodle.js.map +1 -0
  23. package/dist/type.d.ts +0 -1
  24. package/dist/type.d.ts.map +1 -1
  25. package/dist/type.js.map +1 -1
  26. package/docs/backend.md +1 -1
  27. package/package.json +3 -1
  28. package/src/buildinschemas/autoincreament.ts +2 -3
  29. package/src/buildinschemas/docnoformat.ts +0 -1
  30. package/src/buildinschemas/permission.ts +0 -1
  31. package/src/framework.ts +4 -4
  32. package/src/generate.ts +25 -7
  33. package/src/processors/bpmnbuilder.ts +148 -0
  34. package/src/resource/camunda-moodle.ts +87 -0
  35. package/src/type.ts +1 -2
  36. package/templates/basic/nest/controller.ts.eta +3 -3
  37. package/templates/basic/nest/service.ts.eta +4 -6
  38. package/templates/basic/nuxt/pages.[id].vue.eta +4 -3
  39. package/templates/basic/nuxt/pages.form.vue.eta +0 -1
  40. package/templates/basic/nuxt/pages.landing.vue.eta +11 -11
  41. package/templates/basic/nuxt/pages.new.vue.eta +4 -3
  42. package/templates/basic/nuxt/pages.viewer.vue.eta +4 -7
  43. package/templates/nest/.env._eta +1 -1
  44. package/templates/nest/src/app.module.ts.eta +20 -2
  45. package/templates/nest/src/simpleapp/.gitignore.eta +2 -1
  46. package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +23 -4
  47. package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +356 -294
  48. package/templates/nest/src/simpleapp/generate/workflow/formschema/SimpleApproveReject.ts.eta +8 -0
  49. package/templates/nest/src/simpleapp/generate/workflow/formschema/index.ts.eta +1 -0
  50. package/templates/nest/src/simpleapp/{workflow → generate/workflow}/workflow.apischema.ts.eta +17 -22
  51. package/templates/nest/src/simpleapp/generate/workflow/workflow.config.ts.eta +57 -0
  52. package/templates/nest/src/simpleapp/{workflow → generate/workflow}/workflow.controller.ts.eta +5 -6
  53. package/templates/nest/src/simpleapp/generate/workflow/workflow.delegate.ts.eta +153 -0
  54. package/templates/nest/src/simpleapp/{workflow → generate/workflow}/workflow.service.ts.eta +62 -75
  55. package/templates/nest/src/simpleapp/{workflow → generate/workflow}/workflow.type.ts.eta +24 -20
  56. package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +16 -6
  57. package/templates/nest/src/simpleapp/workflows/bpmn/readme.md._eta +1 -0
  58. package/templates/nest/src/simpleapp/workflows/delegates/simpleapp.delegate.ts._eta +27 -0
  59. package/templates/nest/src/simpleapp/workflows/readme.md._eta +1 -0
  60. package/templates/nuxt/.gitignore.eta +5 -4
  61. package/templates/nuxt/components/header/button/task/HeaderButtonTaskList.vue.eta +47 -65
  62. package/templates/nuxt/components/simpleApp/SimpleAppForm.vue.eta +1 -1
  63. package/templates/nuxt/components/simpleApp/SimpleAppJsonSchemaForm.vue.eta +58 -23
  64. package/templates/nuxt/components/workflow/forms/dynamicfield.vue._eta +85 -0
  65. package/templates/nuxt/components/workflow/forms/index.ts._eta +10 -0
  66. package/templates/nuxt/components/workflow/forms/simpleapprove.vue._eta +43 -0
  67. package/templates/nuxt/lang/{df.ts.eta → df.ts._eta} +6 -1
  68. package/templates/nuxt/nuxt.config.ts.eta +1 -1
  69. package/templates/nuxt/simpleapp/workflows/bpmn/readme.md._eta +1 -0
  70. package/templates/nuxt/simpleapp/workflows/forms/readme.md._eta +1 -0
  71. package/templates/nuxt/types/schema.ts.eta +1 -2
  72. package/templates/project/groups/admin.json.eta +1 -1
  73. package/templates/{nest/src/simpleapp/workflow/bpmn/suspendcustomer.bpmn.eta → project/workflows/bpmn/suspendcustomer.bpmn._eta} +20 -20
  74. package/templates/project/workflows/forms/index.ts.eta +2 -0
  75. package/templates/project/workflows/forms/simpleapprove.jsonschema.ts.eta +8 -0
  76. package/templates/workflow/next/delegate.ts.eta +31 -0
  77. package/tsconfig.tsbuildinfo +1 -1
  78. package/buildinschemas copy/autoincreament.autoinc.jsonschema.json +0 -39
  79. package/buildinschemas copy/branch.branch.jsonschema.json +0 -41
  80. package/buildinschemas copy/docnoformat.docno.jsonschema.json +0 -23
  81. package/buildinschemas copy/organization.org.jsonschema.json +0 -50
  82. package/buildinschemas copy/permission.perm.jsonschema.json +0 -23
  83. package/buildinschemas copy/permission.perm.jsonschema.try.json +0 -25
  84. package/buildinschemas copy/tenant.tenant.jsonschema.json +0 -21
  85. package/buildinschemas copy/tenant.tenant.jsonschema.try.json +0 -27
  86. package/buildinschemas copy/user.user.jsonschema.json +0 -31
  87. package/src/processors/jsonschemabuilder.ts-old +0 -383
  88. package/templates/nest/src/simpleapp/workflow/appDelegate.ts.eta +0 -194
  89. package/templates/nest/src/simpleapp/workflow/configuration.ts.eta +0 -46
  90. package/templates/nest/src/simpleapp/workflow/delegates/customer.ts._eta +0 -8
  91. package/templates/nest/src/simpleapp/workflow/delegates/hello.ts._eta +0 -5
  92. package/templates/nest/src/simpleapp/workflow/delegates/index.ts._eta +0 -5
  93. package/templates/nest/src/simpleapp/workflow/delegates/invoice.delegates.ts._eta +0 -9
  94. package/templates/nest/src/simpleapp/workflow/delegates/usertask.ts._eta +0 -3
  95. package/templates/nest/src/simpleapp/workflow/formschema/SimpleApproveReject.ts.eta +0 -8
  96. package/templates/nest/src/simpleapp/workflow/formschema/index.ts.eta +0 -1
@@ -1,6 +1,9 @@
1
1
  <template>
2
2
  <button class="text-center border-none cursor-pointer p-1" @click="visible=true" >
3
- <i class="pi pi-bell"></i>
3
+ <i class="pi pi-bell">
4
+ <Badge :value="taskqty" severity="danger"></Badge>
5
+ </i>
6
+
4
7
  <Sidebar v-model:visible="visible" position="right" :modal="false" :dismissable="false">
5
8
  <template #header>
6
9
  <div class="text text-lg font-bold">{{ t('mytasks') }}</div>
@@ -14,52 +17,44 @@
14
17
  :close-on-escape="false" >
15
18
  <template #header>
16
19
  <div class="text text-lg font-bold">
17
- {{ selectedtask.processName }} / {{ selectedtask.name }}
20
+ {{ selectedtask?.processName }} / {{ selectedtask?.name }}
18
21
  </div>
19
22
  </template>
20
23
  <template #default>
21
- <div >
22
-
23
- <div>
24
- <pre>{{ selectedtask.data}}</pre>
25
- </div>
26
- <div class="border ">
27
- <Card>
28
- <template #header>Response</template>
29
- <template #content>
30
- <div v-if="formSchema">
31
-
32
- <SimpleAppJsonSchemaForm :schema="formSchema" #default="o">
33
- <div v-for="field in Object.keys(formSchema.properties)" class="border p-2">
34
- <SimpleAppInput :setting="o.getField(`#/properties/${field}`)"
35
- :input-type="autoPickInput(formSchema.properties[field])"
36
- v-model="data[field]" />
37
- </div>
38
- </SimpleAppJsonSchemaForm>
39
- </div>
40
- </template>
41
- <template #footer>
42
- <Button class="btn-primary" @click="invokeTask()">{{ t('submit') }}</Button>
43
-
44
- </template>
45
- </Card>
46
- </div>
24
+ <div v-if="componentresolver && formSchema" >
25
+ <component :is="componentresolver"
26
+ :processName="selectedtask?.processName ?? ''"
27
+ :taskName="selectedtask?.name??''"
28
+ :instanceData="instanceData"
29
+ :jsonschema="formSchema"
30
+ v-model="data"
31
+ @submit="invokeTask"
32
+ />
47
33
  </div>
48
34
  </template>
49
35
  </Dialog>
50
36
  </button>
51
37
  </template>
52
38
  <script setup lang="ts">
53
- import {UserTaskType,SimpleAppInputType} from '~/types'
39
+ import {UserTaskType,NotificationStatus} from '~/types'
54
40
  import { useDialog } from 'primevue/usedialog';
41
+ import * as forms from '~/simpleapp/workflows/forms'
42
+ import {getFormComponent} from '~/components/workflow/forms'
55
43
  const dialog = useDialog()
56
44
  const dialogvisible = ref(false)
57
45
  const visible = ref(false)
58
- const selectedtask = ref()
46
+ const selectedtask = ref<UserTaskType>()
59
47
  const tasklist = ref<UserTaskType[]>([])
60
48
  const formSchema = ref()
49
+ const formkey = ref<string>('')
61
50
  const data = ref<any>({})
62
- //computed(async ()=>await getTaskList())
51
+ const instanceData = ref<any>({})
52
+ const componentresolver = computed(()=>{
53
+ const workflowform = getFormComponent(formkey.value as string)
54
+ console.log("workflowformworkflowformworkflowform",workflowform)
55
+ return workflowform
56
+ })
57
+ const taskqty = computed(()=>tasklist.value.length)
63
58
 
64
59
  onMounted(async ()=> syncTask())
65
60
  watch(visible,(newvalue)=>{
@@ -78,49 +73,36 @@ const closeDialog = ()=>{
78
73
  }
79
74
 
80
75
  const invokeTask = async ()=>{
81
- const res = await invokeUserTask(selectedtask.value.taskId,data)
76
+ const res = await invokeUserTask(selectedtask.value?.taskId,data)
82
77
  syncTask()
83
78
  dialogvisible.value=false
84
79
  }
85
80
  const viewTask = async (task:UserTaskType)=>{
81
+
86
82
  selectedtask.value=task
87
- dialogvisible.value=true
83
+ instanceData.value=task.data
84
+
88
85
  const formsettings:any = await getTaskForm(task.processName, task.elementId)
89
- formSchema.value = formsettings.schema
90
- Object.keys(formsettings.schema.properties).forEach((key)=>{
91
- data.value[key]=null
92
- })
93
- console.log("data,data",data)
94
- }
86
+ formkey.value = formsettings.schema
87
+ console.log("viewTask formsettings",formsettings)
88
+ formSchema.value = forms[formkey.value as keyof typeof forms]
89
+ if(formSchema.value){
90
+ Object.keys(formSchema.value.properties).forEach((key)=>{
91
+ data.value[key]=''
92
+ })
95
93
 
96
- const autoPickInput = (setting:any) =>{
97
- if(setting.type=='boolean'){
98
- return SimpleAppInputType.checkbox
99
- }if(setting.type=='number'){
100
- return SimpleAppInputType.number
101
- }
102
- else if(setting.enum){
103
- return SimpleAppInputType.select
104
- }
105
- else if(setting.type=='string'){
106
- return pickStringInput(setting)
94
+ dialogvisible.value=true
107
95
  }else{
108
- return SimpleAppInputType.text
96
+ useNuxtApp().$event('Notification',{
97
+ documentName:task.processName,
98
+ summary:t('formKeyNotFound',{formKey:formkey.value}),
99
+ status:NotificationStatus.error,
100
+ message:t('formKeyNotFound',{formKey:formkey.value}),
101
+
102
+ })
109
103
  }
104
+
110
105
  }
111
106
 
112
- const pickStringInput = (setting:any) =>{
113
- switch(setting.format){
114
- case 'date':
115
- return SimpleAppInputType.date
116
- break;
117
- case 'textarea':
118
- return SimpleAppInputType.textarea
119
- break;
120
- case 'text':
121
- default:
122
- return SimpleAppInputType.text
123
- break;
124
- }
125
- }
107
+ onMounted(()=>syncTask())
126
108
  </script>
@@ -21,7 +21,7 @@ import _ from 'lodash'
21
21
  const getField = (path:string)=>{
22
22
  // console.log("simpleform topath",path)
23
23
  const data = props.document.getData()
24
- const schema = props.document.getSchema()
24
+ const schema = props.document.getSchema() as JSONSchema7 //force type for compatibility
25
25
  const fieldsetting = getPathObject(schema,path)
26
26
  // console.log("setting",fieldsetting)
27
27
 
@@ -1,52 +1,43 @@
1
1
  <template>
2
2
  <form class="simpleapp-form" @submit.prevent="true">
3
3
  <slot name="header"><h3 class="flex flex-col">{{ title }}</h3></slot>
4
- <slot name="default" :getField="getField"></slot>
4
+ <slot name="default" :getField="getField" :validate="validate"></slot>
5
5
  </form>
6
6
  </template>
7
7
  <script setup lang="ts" >
8
- // import type {SimpleAppFieldSetting} from '/types'
9
- import { SimpleAppClient } from '~/simpleapp/generate/clients/SimpleAppClient'
10
8
  import type { JSONSchema7,JSONSchema7Definition } from 'json-schema';
9
+ import Ajv from 'ajv';
10
+ import addFormats from 'ajv-formats';
11
+ import addErrors from 'ajv-errors';
11
12
  import _ from 'lodash'
13
+
12
14
  const props = defineProps<{
13
15
  title?:string,
14
16
  schema:JSONSchema7,
17
+ data:any,
15
18
  // document: SimpleAppClient<any,any>
16
19
  readonly?:boolean
17
20
  }>()
18
21
  if(!props.schema){
19
22
  throw "undefine jsonschema property 'schema'"
20
23
  }
21
- // const obj = {schema:props.schema,data: props.schema}
24
+ const formerrors = ref<any>({})
22
25
  const getField = (path:string)=>{
23
- // console.log("simpleform topath",path)
24
- // const data = props.document.getData()
25
- const schema = props.schema
26
- const fieldsetting = getPathObject(schema,path)
27
- // console.log("setting",fieldsetting)
28
-
29
-
30
- return {
26
+ const schema = props.schema
27
+ const fieldsetting = getPathObject(schema,path)
28
+
29
+ return {
31
30
  path: path,
32
31
  key: _.last(path.split('/')),
33
32
  instancepath: getInstancePath(schema,path),
34
- fieldsetting: fieldsetting,
35
- // modelObject: data,
36
- // document: props.document,
37
- // apiObj:props.document.getApi(),
38
- // modelField: 'email',
33
+ fieldsetting: fieldsetting,
39
34
  isrequired: getIsRequired(schema,path),
40
- // errors: props.document.getErrors(),
35
+ errors: formerrors,
41
36
  readonly: props.readonly
42
37
  } //as SimpleAppFieldSetting
43
38
  }
44
39
 
45
- // "schemaPath": "#/properties/email/format",
46
-
47
- const getModelValue=(data:any,path:string)=>{
48
-
49
- }
40
+
50
41
  const getIsRequired=(schema:any,path:string)=>{
51
42
  if(!path){
52
43
  console.error('unknown path')
@@ -130,4 +121,48 @@ import _ from 'lodash'
130
121
 
131
122
  }
132
123
  }
124
+
125
+
126
+ const validate=(callback:Function) => {
127
+ const ajv = new Ajv({ allErrors: true });
128
+ addFormats(ajv);
129
+ addErrors(ajv)
130
+
131
+ ajv.addFormat('tel',/^$|^\d{7,15}$/gm)
132
+ ajv.addFormat('text',/.*$/)
133
+ ajv.addFormat('html',/.*$/)
134
+ ajv.addFormat('documentno',/.*$/)
135
+
136
+ ajv.addKeyword({ keyword: 'x-foreignkey', schemaType: 'string' });
137
+ ajv.addKeyword({ keyword: 'x-simpleapp-config', schemaType: 'object' });
138
+
139
+
140
+ // this.errorlist.value = {};
141
+ // this.hook('pre-validation', this.data.value);
142
+ const validate = ajv.compile(props.schema);
143
+ console.log("validate data",props.data)
144
+ const valid = validate(props.data);
145
+ if (!valid) {
146
+ const errors = validate.errors;
147
+ const tmp: { [key: string]: any } = {};
148
+ if (errors) {
149
+ for (let i = 0; i < errors?.length; i++) {
150
+ const key: string = errors[i]['instancePath'];
151
+ if (!tmp[key]) {
152
+ tmp[key] = [];
153
+ }
154
+ tmp[key].push(errors[i]);
155
+ }
156
+ }
157
+ formerrors.value = tmp;
158
+ console.error(formerrors.value );
159
+
160
+ // return validate.errors;
161
+ callback(formerrors.value )
162
+ } else {
163
+ // this.hook('post-validation', this.data.value);
164
+ callback(false)
165
+ }
166
+ }
167
+
133
168
  </script>
@@ -0,0 +1,85 @@
1
+ <template>
2
+ <div >
3
+ <div>
4
+ <pre>{{ data}}dynamic</pre>
5
+ </div>
6
+ <div class="border " v-if="jsonschema">
7
+ <SimpleAppJsonSchemaForm :schema="jsonschema" :data="data" #default="o" >
8
+ <Card>
9
+ <template #header>Response</template>
10
+ <template #content>
11
+ <div >
12
+ <div v-for="field in Object.keys(jsonschema.properties ?? {} )" class="border p-2">
13
+ <SimpleAppInput :setting="o.getField(`#/properties/${field}`)"
14
+ :input-type="autoPickInput( field )"
15
+ v-model="data[field]" />
16
+ </div>
17
+ </div>
18
+ </template>
19
+ <template #footer>
20
+ <Button class="btn-primary" @click="o.validate(validateCallBack)">{{ t('submit') }}</Button>
21
+
22
+ </template>
23
+ </Card>
24
+ </SimpleAppJsonSchemaForm>
25
+
26
+ </div>
27
+ </div>
28
+ </template>
29
+ <script lang="ts" setup>
30
+ import {UserTaskType,SimpleAppInputType} from '~/types'
31
+ import type { JSONSchema7 } from 'json-schema'
32
+ const props = defineProps<{
33
+ processName:string
34
+ taskName:string
35
+ jsonschema:JSONSchema7
36
+ instanceData:any
37
+ }>()
38
+ // props.jsonschema.properties
39
+ const modelValue = defineModel<any>({})
40
+ const emit = defineEmits(['submit'])
41
+ const validateCallBack = async (errors:any)=>{
42
+ // console.log("After validate",result)
43
+ if(!errors){
44
+ emit('submit',modelValue)
45
+ }
46
+ }
47
+
48
+ const autoPickInput = (field:string) =>{
49
+ let setting :JSONSchema7= {type:'string'}
50
+
51
+ if(props.jsonschema.properties && props.jsonschema.properties[field]){
52
+ setting = props.jsonschema.properties[field] as JSONSchema7 //force type
53
+ }
54
+
55
+
56
+ if(setting.type=='boolean'){
57
+ return SimpleAppInputType.checkbox
58
+ }if(setting.type=='number'){
59
+ return SimpleAppInputType.number
60
+ }
61
+ else if(setting.enum){
62
+ return SimpleAppInputType.select
63
+ }
64
+ else if(setting.type=='string'){
65
+ return pickStringInput(setting)
66
+ }else{
67
+ return SimpleAppInputType.text
68
+ }
69
+ }
70
+
71
+ const pickStringInput = (setting:any) =>{
72
+ switch(setting.format){
73
+ case 'date':
74
+ return SimpleAppInputType.date
75
+ break;
76
+ case 'textarea':
77
+ return SimpleAppInputType.textarea
78
+ break;
79
+ case 'text':
80
+ default:
81
+ return SimpleAppInputType.text
82
+ break;
83
+ }
84
+ }
85
+ </script>
@@ -0,0 +1,10 @@
1
+ import dynamicfield from './dynamicfield.vue'
2
+ import simpleapprove from './simpleapprove.vue'
3
+
4
+ const forms: {[key:string]:Component}={
5
+ dynamicfield:dynamicfield,
6
+ simpleapprove:simpleapprove
7
+ }
8
+
9
+ export const getFormComponent =(formkey:string)=> forms[formkey] ?? forms['dynamicfield']
10
+ export {dynamicfield,simpleapprove}
@@ -0,0 +1,43 @@
1
+ <template>
2
+ <SimpleAppJsonSchemaForm :schema="jsonschema" :data="modelValue" #default="o" >
3
+ <Card>
4
+ <template #content>
5
+ <div>
6
+ <h1>{{t('simpleApproveMessage')}}</h1>
7
+ </div>
8
+ <div >
9
+ <SimpleAppInput :setting="o.getField(`#/properties/decision`)"
10
+ :input-type="SimpleAppInputType.select"
11
+ v-model="modelValue.decision"
12
+ />
13
+ <SimpleAppInput :setting="o.getField(`#/properties/description`)"
14
+ :input-type="SimpleAppInputType.textarea"
15
+ v-model="modelValue.description"
16
+ />
17
+ </div>
18
+ </template>
19
+ <template #footer>
20
+ <Button class="btn-primary" @click="o.validate(validateCallBack)">{{ t('submit') }}</Button>
21
+ </template>
22
+ </Card>
23
+ </SimpleAppJsonSchemaForm>
24
+ </template>
25
+ <script lang="ts" setup>
26
+ import {UserTaskType,SimpleAppInputType} from '~/types'
27
+ import type { JSONSchema7 } from 'json-schema'
28
+ const props = defineProps<{
29
+ processName:string
30
+ taskName:string
31
+ jsonschema:JSONSchema7
32
+ instanceData:any
33
+ }>()
34
+ const modelValue = defineModel<{decision:string,description:string}>()
35
+
36
+ const emit = defineEmits(['submit'])
37
+ const validateCallBack = async (errors:any)=>{
38
+ // console.log("After validate",result)
39
+ if(!errors){
40
+ emit('submit',modelValue)
41
+ }
42
+ }
43
+ </script>
@@ -22,7 +22,12 @@ export default {
22
22
  setting: 'Setting',
23
23
  mytasks: 'My Tasks',
24
24
  suspend: 'Suspend',
25
-
25
+ submit: 'Submit',
26
+ decision: 'Decision',
27
+ simpleApproveMessage: 'Approve or reject',
28
+ suspendcustomer:"Suspend Customer",
29
+ formKeyNotFound:'Formkey not found "{formKey}"',
30
+
26
31
  //auto generate from schema
27
32
  <% for(let i=0; i< it.allfields.length; i++){ %>
28
33
  <% let f = it.allfields[i] %>
@@ -83,7 +83,7 @@ tailwindcss: {
83
83
  exclude: ['chart']
84
84
  },
85
85
  directives: {
86
- include: ['Ripple', 'Tooltip']
86
+ include: ['Ripple', 'Tooltip','BadgeDirective']
87
87
  },
88
88
  cssLayerOrder: 'tailwind-base, primevue, tailwind-utilities',
89
89
  importPT: { as: 'SimpleAppPT', from: path.resolve(__dirname,'./assets/primevue/passthrough.ts') },
@@ -0,0 +1 @@
1
+ put bpmn files here
@@ -0,0 +1 @@
1
+ all form for user task obtain from here
@@ -12,8 +12,7 @@ export type DocumentStatus = {
12
12
  queryPara?:string[] //what query parameter wish to accept, example: ['description','date']
13
13
  requiredRole?: string[] // what special user role wish to allow for this api, example: ['SuperUser']
14
14
  workflowSetting?: {bpmn:string} //optional property, once define code gen connect the bpmn workflow
15
- method:RESTMethods
16
- execute:string, //what service class method name to execute, example: 'ping','getDocumentName'
15
+ method:RESTMethods
17
16
  description:string //description of api
18
17
  }
19
18
  export enum IsolationType {"none"="none" , "tenant"="tenant","org"="org", "branch"="branch"}
@@ -4,7 +4,7 @@
4
4
  "update",
5
5
  "delete",
6
6
  "search",
7
- "genNextNumber"
7
+ "generateNextNo"
8
8
  ],
9
9
  "Branch": [
10
10
  "create",
@@ -1,52 +1,52 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
3
- <bpmn:process id="Process_1" name="approve1" isExecutable="false">
3
+ <bpmn:process id="process1" name="Suspend Customer" isExecutable="false">
4
4
  <bpmn:extensionElements />
5
5
  <bpmn:startEvent id="StartEvent_1">
6
6
  <bpmn:outgoing>Flow_1a63g0z</bpmn:outgoing>
7
7
  </bpmn:startEvent>
8
8
  <bpmn:endEvent id="Event_0qpgd23">
9
- <bpmn:incoming>Flow_0ds03ms</bpmn:incoming>
9
+ <bpmn:incoming>Flow_1g3iygg</bpmn:incoming>
10
10
  </bpmn:endEvent>
11
- <bpmn:sequenceFlow id="Flow_1x9zeai" sourceRef="approve1" targetRef="set-customer-inactive" />
11
+ <bpmn:sequenceFlow id="Flow_1x9zeai" sourceRef="approve1" targetRef="Activity_0pu51x5" />
12
12
  <bpmn:sequenceFlow id="Flow_1a63g0z" sourceRef="StartEvent_1" targetRef="approve1" />
13
- <bpmn:userTask id="approve1" name="approve by supervisor" camunda:formKey="jsonschema://SimpleApproveReject" camunda:assignee="kstan">
13
+ <bpmn:userTask id="approve1" name="approve by supervisor" camunda:formKey="form://simpleapprove" camunda:assignee="kstan">
14
14
  <bpmn:extensionElements />
15
15
  <bpmn:incoming>Flow_1a63g0z</bpmn:incoming>
16
16
  <bpmn:outgoing>Flow_1x9zeai</bpmn:outgoing>
17
17
  </bpmn:userTask>
18
- <bpmn:sequenceFlow id="Flow_0ds03ms" sourceRef="set-customer-inactive" targetRef="Event_0qpgd23" />
19
- <bpmn:serviceTask id="set-customer-inactive" name="set customer inactive" camunda:delegateExpression="suspendCustomer">
18
+ <bpmn:sequenceFlow id="Flow_1g3iygg" sourceRef="Activity_0pu51x5" targetRef="Event_0qpgd23" />
19
+ <bpmn:serviceTask id="Activity_0pu51x5" name="hello" camunda:delegateExpression="system.hello">
20
20
  <bpmn:incoming>Flow_1x9zeai</bpmn:incoming>
21
- <bpmn:outgoing>Flow_0ds03ms</bpmn:outgoing>
21
+ <bpmn:outgoing>Flow_1g3iygg</bpmn:outgoing>
22
22
  </bpmn:serviceTask>
23
23
  </bpmn:process>
24
24
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
25
- <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
25
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="process1">
26
26
  <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
27
- <dc:Bounds x="-148" y="72" width="36" height="36" />
27
+ <dc:Bounds x="122" y="202" width="36" height="36" />
28
28
  </bpmndi:BPMNShape>
29
29
  <bpmndi:BPMNShape id="Event_0qpgd23_di" bpmnElement="Event_0qpgd23">
30
- <dc:Bounds x="352" y="72" width="36" height="36" />
30
+ <dc:Bounds x="672" y="202" width="36" height="36" />
31
31
  </bpmndi:BPMNShape>
32
32
  <bpmndi:BPMNShape id="Activity_1odv9ki_di" bpmnElement="approve1">
33
- <dc:Bounds x="-20" y="50" width="100" height="80" />
33
+ <dc:Bounds x="200" y="180" width="100" height="80" />
34
34
  <bpmndi:BPMNLabel />
35
35
  </bpmndi:BPMNShape>
36
- <bpmndi:BPMNShape id="Activity_03pdbkx_di" bpmnElement="set-customer-inactive">
37
- <dc:Bounds x="170" y="50" width="100" height="80" />
36
+ <bpmndi:BPMNShape id="Activity_1tksj2t_di" bpmnElement="Activity_0pu51x5">
37
+ <dc:Bounds x="520" y="180" width="100" height="80" />
38
38
  </bpmndi:BPMNShape>
39
39
  <bpmndi:BPMNEdge id="Flow_1x9zeai_di" bpmnElement="Flow_1x9zeai">
40
- <di:waypoint x="80" y="90" />
41
- <di:waypoint x="170" y="90" />
40
+ <di:waypoint x="300" y="220" />
41
+ <di:waypoint x="520" y="220" />
42
42
  </bpmndi:BPMNEdge>
43
43
  <bpmndi:BPMNEdge id="Flow_1a63g0z_di" bpmnElement="Flow_1a63g0z">
44
- <di:waypoint x="-112" y="90" />
45
- <di:waypoint x="-20" y="90" />
44
+ <di:waypoint x="158" y="220" />
45
+ <di:waypoint x="200" y="220" />
46
46
  </bpmndi:BPMNEdge>
47
- <bpmndi:BPMNEdge id="Flow_0ds03ms_di" bpmnElement="Flow_0ds03ms">
48
- <di:waypoint x="270" y="90" />
49
- <di:waypoint x="352" y="90" />
47
+ <bpmndi:BPMNEdge id="Flow_1g3iygg_di" bpmnElement="Flow_1g3iygg">
48
+ <di:waypoint x="620" y="220" />
49
+ <di:waypoint x="672" y="220" />
50
50
  </bpmndi:BPMNEdge>
51
51
  </bpmndi:BPMNPlane>
52
52
  </bpmndi:BPMNDiagram>
@@ -0,0 +1,2 @@
1
+ export {simpleapprove} from './simpleapprove.jsonschema'
2
+
@@ -0,0 +1,8 @@
1
+ export const simpleapprove = {
2
+ "type": "object",
3
+ "required": ["decision"],
4
+ "properties": {
5
+ "decision": { "type": "string", "enum": ["", "approve", "reject"] },
6
+ "description": { "type": "string", "default":"" }
7
+ }
8
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * This file was automatically generated by simpleapp generator.
3
+ * --remove-this-line-to-prevent-override--
4
+ * last change 2023-09-23
5
+ * Author: Ks Tan
6
+ */
7
+ import { Injectable,Logger } from "@nestjs/common";
8
+ import { InjectModel } from "@nestjs/mongoose";
9
+ import { Model } from "mongoose";
10
+ import { UserContext } from "../../generate/commons/user.context";
11
+ import { User } from "../../services/user.service";
12
+ import { Permission } from "../../services/perm.service";
13
+ import {SimpleAppDelegateService} from './simpleapp.delegate'
14
+
15
+ let mydelegate:<%=it.processName%>DelegateService
16
+ @Injectable()
17
+ export class <%=it.processName%>DelegateService extends SimpleAppDelegateService{
18
+ logger = new Logger()
19
+ constructor(){
20
+ super()
21
+ mydelegate=this
22
+ }
23
+
24
+ <%for(let i=0; i<it.delegates.length;i++){%>
25
+ <%let delegate=it.delegates[i]%>
26
+ async <%=delegate%>(props,item){
27
+ console.log("Execute delegate at process: ",'<%=it.processName%>, delegate: ','<%=delegate%>' ,props)
28
+ }
29
+ <%}%>
30
+
31
+ }