@things-factory/worklist 6.0.26 → 6.0.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.
Files changed (76) hide show
  1. package/client/bootstrap.ts +4 -3
  2. package/client/components/activity-starter-form.ts +6 -0
  3. package/client/pages/activity-approval/activity-approval-page.ts +61 -14
  4. package/client/pages/activity-instance/activity-instance-page.ts +18 -0
  5. package/client/pages/activity-thread/activity-thread-page.ts +24 -3
  6. package/client/pages/todo/draft-list-page.ts +6 -3
  7. package/client/types.js +1 -0
  8. package/dist-client/bootstrap.d.ts +1 -0
  9. package/dist-client/bootstrap.js +3 -2
  10. package/dist-client/bootstrap.js.map +1 -1
  11. package/dist-client/components/activity-starter-form.js +6 -0
  12. package/dist-client/components/activity-starter-form.js.map +1 -1
  13. package/dist-client/pages/activity-approval/activity-approval-page.d.ts +2 -2
  14. package/dist-client/pages/activity-approval/activity-approval-page.js +59 -14
  15. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  16. package/dist-client/pages/activity-instance/activity-instance-page.d.ts +2 -1
  17. package/dist-client/pages/activity-instance/activity-instance-page.js +15 -0
  18. package/dist-client/pages/activity-instance/activity-instance-page.js.map +1 -1
  19. package/dist-client/pages/activity-thread/activity-thread-page.d.ts +2 -2
  20. package/dist-client/pages/activity-thread/activity-thread-page.js +21 -3
  21. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  22. package/dist-client/pages/todo/draft-list-page.d.ts +4 -8
  23. package/dist-client/pages/todo/draft-list-page.js +4 -1
  24. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  25. package/dist-client/tsconfig.tsbuildinfo +1 -1
  26. package/dist-client/types.js +1 -0
  27. package/dist-client/types.js.map +1 -1
  28. package/dist-server/controllers/activity-approval/approve.js +1 -1
  29. package/dist-server/controllers/activity-approval/approve.js.map +1 -1
  30. package/dist-server/controllers/activity-instance/draft.js +16 -0
  31. package/dist-server/controllers/activity-instance/draft.js.map +1 -1
  32. package/dist-server/controllers/activity-instance/post.js +2 -2
  33. package/dist-server/controllers/activity-instance/post.js.map +1 -1
  34. package/dist-server/controllers/activity-thread/submit.js +1 -1
  35. package/dist-server/controllers/activity-thread/submit.js.map +1 -1
  36. package/dist-server/controllers/common.js +45 -36
  37. package/dist-server/controllers/common.js.map +1 -1
  38. package/dist-server/service/activity/activity.js +2 -1
  39. package/dist-server/service/activity/activity.js.map +1 -1
  40. package/dist-server/service/activity-instance/activity-instance-query.js +41 -0
  41. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  42. package/dist-server/tsconfig.tsbuildinfo +1 -1
  43. package/package.json +8 -7
  44. package/server/controllers/activity-approval/approve.ts +2 -2
  45. package/server/controllers/activity-instance/draft.ts +18 -0
  46. package/server/controllers/activity-instance/post.ts +3 -3
  47. package/server/controllers/activity-thread/submit.ts +2 -2
  48. package/server/controllers/common.ts +52 -32
  49. package/server/service/activity/activity.ts +2 -1
  50. package/server/service/activity-instance/activity-instance-query.ts +44 -0
  51. package/things-factory.config.js +1 -4
  52. package/translations/en.json +1 -0
  53. package/translations/ko.json +1 -0
  54. package/translations/ms.json +1 -0
  55. package/translations/zh.json +1 -0
  56. package/dist-client/pages/installed-activity/installed-activity-list-page.d.ts +0 -45
  57. package/dist-client/pages/installed-activity/installed-activity-list-page.js +0 -412
  58. package/dist-client/pages/installed-activity/installed-activity-list-page.js.map +0 -1
  59. package/dist-client/pages/installed-activity/installed-activity-model-item-list.d.ts +0 -1
  60. package/dist-client/pages/installed-activity/installed-activity-model-item-list.js +0 -20
  61. package/dist-client/pages/installed-activity/installed-activity-model-item-list.js.map +0 -1
  62. package/dist-client/templates/activity-context-template.d.ts +0 -2
  63. package/dist-client/templates/activity-context-template.js +0 -62
  64. package/dist-client/templates/activity-context-template.js.map +0 -1
  65. package/dist-server/controllers/activity-extension-controller.js +0 -11
  66. package/dist-server/controllers/activity-extension-controller.js.map +0 -1
  67. package/dist-server/service/installed-activity/index.js +0 -10
  68. package/dist-server/service/installed-activity/index.js.map +0 -1
  69. package/dist-server/service/installed-activity/installed-activity-mutation.js +0 -60
  70. package/dist-server/service/installed-activity/installed-activity-mutation.js.map +0 -1
  71. package/dist-server/service/installed-activity/installed-activity-query.js +0 -48
  72. package/dist-server/service/installed-activity/installed-activity-query.js.map +0 -1
  73. package/dist-server/service/installed-activity/installed-activity-type.js +0 -21
  74. package/dist-server/service/installed-activity/installed-activity-type.js.map +0 -1
  75. package/dist-server/service/installed-activity/installed-activity.js +0 -70
  76. package/dist-server/service/installed-activity/installed-activity.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/worklist",
3
- "version": "6.0.26",
3
+ "version": "6.0.27",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -27,11 +27,12 @@
27
27
  "dependencies": {
28
28
  "@operato/graphql": "^1.0.0",
29
29
  "@operato/grist-editor": "^1.0.0",
30
- "@things-factory/attachment-base": "^6.0.25",
31
- "@things-factory/auth-base": "^6.0.25",
32
- "@things-factory/board-service": "^6.0.25",
33
- "@things-factory/organization": "^6.0.25",
34
- "@things-factory/shell": "^6.0.25"
30
+ "@things-factory/attachment-base": "^6.0.27",
31
+ "@things-factory/auth-base": "^6.0.27",
32
+ "@things-factory/board-service": "^6.0.27",
33
+ "@things-factory/context-ui": "^6.0.27",
34
+ "@things-factory/organization": "^6.0.27",
35
+ "@things-factory/shell": "^6.0.27"
35
36
  },
36
- "gitHead": "2c9c046d7b1adf48d05b48cf9a6807e6bf9535b7"
37
+ "gitHead": "684784a4f3e450e9ce07dcd51db70b8a2d2c2a0f"
37
38
  }
@@ -1,4 +1,4 @@
1
- import { getSystemUserFromApprovalLineItem } from '../../controllers/common'
1
+ import { getSystemUserFromOrgMemberItem } from '../../controllers/common'
2
2
  import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread'
3
3
  import { ActivityApproval, ActivityApprovalJudgment } from '../../service/activity-approval/activity-approval'
4
4
  import { ApprovalLineItem } from '@things-factory/organization'
@@ -43,7 +43,7 @@ export async function approve(
43
43
 
44
44
  if (approvalLine && approvalLine.length > order) {
45
45
  // approvalLine에서 후속 승인자에게 escalating.
46
- var approverUser = await getSystemUserFromApprovalLineItem(approvalLine[order], context)
46
+ var approverUser = await getSystemUserFromOrgMemberItem(approvalLine[order], context)
47
47
 
48
48
  if (!approverUser) {
49
49
  throw 'Cannot specify the approval user for this approval line'
@@ -34,6 +34,24 @@ export async function draft(
34
34
  activityInstance.dueAt = new Date(Date.now() + activity.standardTime * 1000)
35
35
  }
36
36
 
37
+ if (activityInstance.assignees) {
38
+ activityInstance.assignees = activityInstance.assignees.map(assignee => {
39
+ return {
40
+ type: assignee.type,
41
+ value: assignee.value
42
+ }
43
+ })
44
+ }
45
+
46
+ if (activityInstance.approvalLine) {
47
+ activityInstance.approvalLine = activityInstance.approvalLine.map(approval => {
48
+ return {
49
+ type: approval.type,
50
+ value: approval.value
51
+ }
52
+ })
53
+ }
54
+
37
55
  return await tx.getRepository(ActivityInstance).save({
38
56
  activityType: activity.activityType,
39
57
  uiType: activity.uiType,
@@ -3,7 +3,7 @@ import { ActivityInstancePost } from '../../service/activity-instance/activity-i
3
3
  import {
4
4
  createActivityThreadsForAllRoleUsers,
5
5
  createActivityThreadsForUsers,
6
- getSystemUserFromAssigneeItem
6
+ getSystemUserFromOrgMemberItem
7
7
  } from '../common'
8
8
 
9
9
  export async function post(
@@ -39,9 +39,9 @@ export async function post(
39
39
  updater: user
40
40
  })
41
41
 
42
- const assignedUsers = await Promise.all(assignees.map(assignee => getSystemUserFromAssigneeItem(assignee, context)))
42
+ const assignedUsers = await Promise.all(assignees.map(assignee => getSystemUserFromOrgMemberItem(assignee, context)))
43
43
 
44
- assignees.map(async assignee => await getSystemUserFromAssigneeItem(assignee, context))
44
+ assignees.map(async assignee => await getSystemUserFromOrgMemberItem(assignee, context))
45
45
 
46
46
  if (assignedUsers.length == 0 && posted.threadsMin === 0 && posted.assigneeRoleId) {
47
47
  await createActivityThreadsForAllRoleUsers('post', posted, context)
@@ -1,6 +1,6 @@
1
1
  import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread'
2
2
  import { ActivityApproval, ActivityApprovalJudgment } from '../../service/activity-approval/activity-approval'
3
- import { getSystemUserFromApprovalLineItem, updateActivityInstanceState } from '../common'
3
+ import { getSystemUserFromOrgMemberItem, updateActivityInstanceState } from '../common'
4
4
  import { User } from '@things-factory/auth-base'
5
5
  import { Department, Employee, ApprovalLineItem, OrgMemberTargetType } from '@things-factory/organization'
6
6
 
@@ -28,7 +28,7 @@ export async function submit(
28
28
  const approvalLine: ApprovalLineItem[] = activityThread.activityInstance.approvalLine
29
29
 
30
30
  if (approvalLine && approvalLine.length > 0) {
31
- var approverUser = await getSystemUserFromApprovalLineItem(approvalLine[0], context)
31
+ var approverUser = await getSystemUserFromOrgMemberItem(approvalLine[0], context)
32
32
 
33
33
  if (!approverUser) {
34
34
  throw 'Cannot specify the approval user for this approval line'
@@ -111,65 +111,85 @@ export async function createActivityThreadsForAllRoleUsers(
111
111
  return await createActivityThreadsForUsers(transaction, activityInstance, assignees, context)
112
112
  }
113
113
 
114
- export async function getSystemUserFromApprovalLineItem(
115
- approvalLineItem: ApprovalLineItem,
116
- context: any
117
- ): Promise<User> {
114
+ export async function getSystemUserFromMyDepartmentManager(context: ResolverContext): Promise<User> {
118
115
  const { domain, user, tx } = context.state
119
116
 
120
- const { type, value, approver } = approvalLineItem
121
- const { id: approverId, name, description, controlNo } = approver
117
+ const employee = await tx.getRepository(Employee).findOneBy({
118
+ domain: { id: domain.id },
119
+ user: { id: user.id }
120
+ })
122
121
 
123
- if (type == OrgMemberTargetType.Employee) {
124
- const employee = await tx.getRepository(Employee).findOne({ where: { id: approverId }, relations: ['user'] })
122
+ if (!employee || !employee.departmentId) {
123
+ return
124
+ }
125
125
 
126
- if (!employee || !employee.user) {
127
- return
128
- }
129
- return employee.user
130
- } else if (type == OrgMemberTargetType.Department) {
131
- const department = await tx.getRepository(Department).findOne({ where: { id: approverId }, relations: ['manager'] })
126
+ const department = await tx.getRepository(Department).findOne({
127
+ where: {
128
+ id: employee.departmentId
129
+ },
130
+ relations: ['manager']
131
+ })
132
132
 
133
- if (!department || !department.manager) {
134
- return
135
- }
136
- return await tx.getRepository(User).findOneBy({ id: department.manager.userId })
137
- } else if (type == OrgMemberTargetType.Role) {
138
- } else if (type == OrgMemberTargetType.Myself) {
139
- return user
140
- } else if (type == OrgMemberTargetType.MyDepartment) {
141
- // return user
142
- } else if (type == OrgMemberTargetType.MySupervisor) {
143
- // return user
133
+ return department.manager
134
+ }
135
+
136
+ export async function getSystemUserFromMySupervosor(context: ResolverContext): Promise<User> {
137
+ const { domain, user, tx } = context.state
138
+
139
+ const employee = await tx.getRepository(Employee).findOneBy({
140
+ domain: { id: domain.id },
141
+ user: { id: user.id }
142
+ })
143
+
144
+ if (!employee || !employee.supervisorId) {
145
+ return
144
146
  }
147
+
148
+ const supervisor = await tx.getRepository(Employee).findOne({
149
+ where: {
150
+ id: employee.supervisorId
151
+ },
152
+ relations: ['user']
153
+ })
154
+
155
+ return supervisor.user
145
156
  }
146
157
 
147
- export async function getSystemUserFromAssigneeItem(assigneeItem: AssigneeItem, context: any): Promise<User> {
158
+ export async function getSystemUserFromOrgMemberItem(
159
+ item: AssigneeItem | ApprovalLineItem,
160
+ context: ResolverContext
161
+ ): Promise<User> {
148
162
  const { domain, user, tx } = context.state
149
163
 
150
- const { type, value, assignee } = assigneeItem
151
- const { id: assigneeId, name, description, controlNo } = assignee
164
+ const { type, value: id } = item
152
165
 
153
166
  if (type == OrgMemberTargetType.Employee) {
154
- const employee = await tx.getRepository(Employee).findOne({ where: { id: assigneeId }, relations: ['user'] })
167
+ const employee = await tx.getRepository(Employee).findOne({ where: { id }, relations: ['user'] })
155
168
 
156
169
  if (!employee || !employee.user) {
157
170
  return
158
171
  }
159
172
  return employee.user
160
173
  } else if (type == OrgMemberTargetType.Department) {
161
- const department = await tx.getRepository(Department).findOne({ where: { id: assigneeId }, relations: ['manager'] })
174
+ const department = await tx.getRepository(Department).findOne({ where: { id }, relations: ['manager'] })
162
175
 
163
176
  if (!department || !department.manager) {
164
177
  return
165
178
  }
166
179
  return await tx.getRepository(User).findOneBy({ id: department.manager.userId })
167
180
  } else if (type == OrgMemberTargetType.Role) {
181
+ const role = await tx.getRepository(Role).findOne({ where: { id }, relations: ['users'] })
182
+
183
+ if (!role || !role.users || !role.users[0]) {
184
+ return
185
+ }
186
+
187
+ return await tx.getRepository(User).findOneBy({ id: role.users[0].id })
168
188
  } else if (type == OrgMemberTargetType.Myself) {
169
189
  return user
170
190
  } else if (type == OrgMemberTargetType.MyDepartment) {
171
- // return user
191
+ return await getSystemUserFromMyDepartmentManager(context)
172
192
  } else if (type == OrgMemberTargetType.MySupervisor) {
173
- // return user
193
+ return await getSystemUserFromMySupervosor(context)
174
194
  }
175
195
  }
@@ -48,8 +48,9 @@ registerEnumType(ActivityType, {
48
48
  export enum ActivityUIType {
49
49
  Generated = 'generated',
50
50
  Template = 'template',
51
- Page = 'page',
52
51
  Board = 'board',
52
+ CustomElement = 'custom-element',
53
+ Page = 'page',
53
54
  External = 'external'
54
55
  }
55
56
 
@@ -8,6 +8,7 @@ import { ActivityThread } from '../activity-thread/activity-thread'
8
8
  import { Activity } from '../activity/activity'
9
9
  import { ActivityInstance, ActivityInstanceStatus, AssigneeItem } from './activity-instance'
10
10
  import { ActivityInstanceList } from './activity-instance-type'
11
+ import { ApprovalLineItem } from '@things-factory/organization'
11
12
 
12
13
  @Resolver(ActivityInstance)
13
14
  export class ActivityInstanceQuery {
@@ -193,6 +194,49 @@ export class ActivityInstanceQuery {
193
194
  return assigneeItemList
194
195
  }
195
196
 
197
+ @FieldResolver(type => [ApprovalLineItem])
198
+ async approvalLine(
199
+ @Root() activityInstance: ActivityInstance,
200
+ @Ctx() context: ResolverContext
201
+ ): Promise<ApprovalLineItem[]> {
202
+ const { domain, user } = context.state
203
+ const { approvalLine } = activityInstance
204
+
205
+ if (!approvalLine || !(approvalLine instanceof Array)) {
206
+ return null
207
+ }
208
+
209
+ var approvalLineItems = []
210
+
211
+ for (let item of approvalLine) {
212
+ var { type, value: id } = item
213
+ var approver
214
+
215
+ switch (type) {
216
+ case 'Employee':
217
+ approver = await getRepository('Employee').findOneBy({ domain: { id: domain.id }, id })
218
+ break
219
+ case 'Department':
220
+ approver = await getRepository('Department').findOneBy({ domain: { id: domain.id }, id })
221
+ break
222
+ case 'Role':
223
+ approver = await getRepository('Role').findOneBy({ domain: { id: domain.id }, id })
224
+ break
225
+ case 'Myself':
226
+ approver = user
227
+ break
228
+ case 'MyDepartment':
229
+ case 'MySupervisor':
230
+ break
231
+ default:
232
+ }
233
+
234
+ approver && approvalLineItems.push({ type, value: id, approver })
235
+ }
236
+
237
+ return approvalLineItems
238
+ }
239
+
196
240
  @FieldResolver(type => Role)
197
241
  async supervisoryRole(@Root() activityInstance: ActivityInstance): Promise<Role> {
198
242
  return (
@@ -23,10 +23,7 @@ export default {
23
23
  { tagname: 'worklist-home', page: 'worklist-home' },
24
24
  { tagname: 'activity-template-list-page', page: 'activity-template-list' },
25
25
  { tagname: 'activity-store-page', page: 'activity-store' },
26
- {
27
- tagname: 'activity-thread-list-page',
28
- page: 'activity-thread-list'
29
- },
26
+ { tagname: 'activity-thread-list-page', page: 'activity-thread-list' },
30
27
  { tagname: 'installable-activity-list-page', page: 'installable-activity-list' },
31
28
  { tagname: 'activity-approval-list-page', page: 'activity-approval-list' }
32
29
  ]
@@ -26,6 +26,7 @@
26
26
  "field.mandatory": "mandatory",
27
27
  "field.options": "options",
28
28
  "field.priority": "priority",
29
+ "field.provider": "provider",
29
30
  "field.quantifier": "quantifier",
30
31
  "field.report-type": "report type",
31
32
  "field.report-source": "report source",
@@ -26,6 +26,7 @@
26
26
  "field.mandatory": "필수",
27
27
  "field.options": "선택옵션",
28
28
  "field.priority": "우선순위",
29
+ "field.provider": "공급자",
29
30
  "field.quantifier": "수량",
30
31
  "field.report-type": "리포트 타입",
31
32
  "field.report-source": "리포트 소스",
@@ -26,6 +26,7 @@
26
26
  "field.mandatory": "mandatory",
27
27
  "field.options": "options",
28
28
  "field.priority": "priority",
29
+ "field.provider": "provider",
29
30
  "field.quantifier": "quantifier",
30
31
  "field.report-type": "report type",
31
32
  "field.report-source": "report source",
@@ -21,6 +21,7 @@
21
21
  "field.issuer": "issuer",
22
22
  "field.hidden": "hidden",
23
23
  "field.posted-at": "posted at",
24
+ "field.provider": "provider",
24
25
  "field.issuer-role": "issuer role",
25
26
  "field.lead-time": "LT(sec)",
26
27
  "field.mandatory": "mandatory",
@@ -1,45 +0,0 @@
1
- import '@operato/data-grist';
2
- import './installed-activity-model-item-list.js';
3
- import { DataGrist } from '@operato/data-grist';
4
- import { PageView } from '@operato/shell';
5
- declare const ActivityTemplateListPage_base: (new (...args: any[]) => {
6
- _storeUnsubscribe: import("redux").Unsubscribe;
7
- connectedCallback(): void;
8
- disconnectedCallback(): void;
9
- stateChanged(_state: unknown): void;
10
- readonly isConnected: boolean;
11
- }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView;
12
- export declare class ActivityTemplateListPage extends ActivityTemplateListPage_base {
13
- static styles: import("lit").CSSResult[];
14
- gristConfig: any;
15
- mode?: 'GRID' | 'LIST' | 'CARD';
16
- get context(): {
17
- search: {
18
- handler: (search: string) => void;
19
- placeholder: string;
20
- value: string;
21
- };
22
- filter: {
23
- handler: () => void;
24
- };
25
- help: string;
26
- actions: never[];
27
- };
28
- sorterControl?: any;
29
- grist: DataGrist;
30
- render(): import("lit-html").TemplateResult<1>;
31
- pageInitialized(lifecycle: any): Promise<void>;
32
- pageUpdated(changes: any, lifecycle: any): Promise<void>;
33
- fetchHandler({ page, limit, sortings, filters }: {
34
- page: any;
35
- limit: any;
36
- sortings?: never[] | undefined;
37
- filters?: never[] | undefined;
38
- }): Promise<{
39
- total: any;
40
- records: any;
41
- } | undefined>;
42
- activate(record: any): Promise<void>;
43
- deactivate(record: any): Promise<void>;
44
- }
45
- export {};