@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.
- package/client/bootstrap.ts +4 -3
- package/client/components/activity-starter-form.ts +6 -0
- package/client/pages/activity-approval/activity-approval-page.ts +61 -14
- package/client/pages/activity-instance/activity-instance-page.ts +18 -0
- package/client/pages/activity-thread/activity-thread-page.ts +24 -3
- package/client/pages/todo/draft-list-page.ts +6 -3
- package/client/types.js +1 -0
- package/dist-client/bootstrap.d.ts +1 -0
- package/dist-client/bootstrap.js +3 -2
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/components/activity-starter-form.js +6 -0
- package/dist-client/components/activity-starter-form.js.map +1 -1
- package/dist-client/pages/activity-approval/activity-approval-page.d.ts +2 -2
- package/dist-client/pages/activity-approval/activity-approval-page.js +59 -14
- package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
- package/dist-client/pages/activity-instance/activity-instance-page.d.ts +2 -1
- package/dist-client/pages/activity-instance/activity-instance-page.js +15 -0
- package/dist-client/pages/activity-instance/activity-instance-page.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-page.d.ts +2 -2
- package/dist-client/pages/activity-thread/activity-thread-page.js +21 -3
- package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
- package/dist-client/pages/todo/draft-list-page.d.ts +4 -8
- package/dist-client/pages/todo/draft-list-page.js +4 -1
- package/dist-client/pages/todo/draft-list-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/types.js +1 -0
- package/dist-client/types.js.map +1 -1
- package/dist-server/controllers/activity-approval/approve.js +1 -1
- package/dist-server/controllers/activity-approval/approve.js.map +1 -1
- package/dist-server/controllers/activity-instance/draft.js +16 -0
- package/dist-server/controllers/activity-instance/draft.js.map +1 -1
- package/dist-server/controllers/activity-instance/post.js +2 -2
- package/dist-server/controllers/activity-instance/post.js.map +1 -1
- package/dist-server/controllers/activity-thread/submit.js +1 -1
- package/dist-server/controllers/activity-thread/submit.js.map +1 -1
- package/dist-server/controllers/common.js +45 -36
- package/dist-server/controllers/common.js.map +1 -1
- package/dist-server/service/activity/activity.js +2 -1
- package/dist-server/service/activity/activity.js.map +1 -1
- package/dist-server/service/activity-instance/activity-instance-query.js +41 -0
- package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
- package/server/controllers/activity-approval/approve.ts +2 -2
- package/server/controllers/activity-instance/draft.ts +18 -0
- package/server/controllers/activity-instance/post.ts +3 -3
- package/server/controllers/activity-thread/submit.ts +2 -2
- package/server/controllers/common.ts +52 -32
- package/server/service/activity/activity.ts +2 -1
- package/server/service/activity-instance/activity-instance-query.ts +44 -0
- package/things-factory.config.js +1 -4
- package/translations/en.json +1 -0
- package/translations/ko.json +1 -0
- package/translations/ms.json +1 -0
- package/translations/zh.json +1 -0
- package/dist-client/pages/installed-activity/installed-activity-list-page.d.ts +0 -45
- package/dist-client/pages/installed-activity/installed-activity-list-page.js +0 -412
- package/dist-client/pages/installed-activity/installed-activity-list-page.js.map +0 -1
- package/dist-client/pages/installed-activity/installed-activity-model-item-list.d.ts +0 -1
- package/dist-client/pages/installed-activity/installed-activity-model-item-list.js +0 -20
- package/dist-client/pages/installed-activity/installed-activity-model-item-list.js.map +0 -1
- package/dist-client/templates/activity-context-template.d.ts +0 -2
- package/dist-client/templates/activity-context-template.js +0 -62
- package/dist-client/templates/activity-context-template.js.map +0 -1
- package/dist-server/controllers/activity-extension-controller.js +0 -11
- package/dist-server/controllers/activity-extension-controller.js.map +0 -1
- package/dist-server/service/installed-activity/index.js +0 -10
- package/dist-server/service/installed-activity/index.js.map +0 -1
- package/dist-server/service/installed-activity/installed-activity-mutation.js +0 -60
- package/dist-server/service/installed-activity/installed-activity-mutation.js.map +0 -1
- package/dist-server/service/installed-activity/installed-activity-query.js +0 -48
- package/dist-server/service/installed-activity/installed-activity-query.js.map +0 -1
- package/dist-server/service/installed-activity/installed-activity-type.js +0 -21
- package/dist-server/service/installed-activity/installed-activity-type.js.map +0 -1
- package/dist-server/service/installed-activity/installed-activity.js +0 -70
- 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.
|
|
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.
|
|
31
|
-
"@things-factory/auth-base": "^6.0.
|
|
32
|
-
"@things-factory/board-service": "^6.0.
|
|
33
|
-
"@things-factory/
|
|
34
|
-
"@things-factory/
|
|
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": "
|
|
37
|
+
"gitHead": "684784a4f3e450e9ce07dcd51db70b8a2d2c2a0f"
|
|
37
38
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
-
|
|
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 =>
|
|
42
|
+
const assignedUsers = await Promise.all(assignees.map(assignee => getSystemUserFromOrgMemberItem(assignee, context)))
|
|
43
43
|
|
|
44
|
-
assignees.map(async assignee => await
|
|
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 {
|
|
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
|
|
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
|
|
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
|
|
121
|
-
|
|
117
|
+
const employee = await tx.getRepository(Employee).findOneBy({
|
|
118
|
+
domain: { id: domain.id },
|
|
119
|
+
user: { id: user.id }
|
|
120
|
+
})
|
|
122
121
|
|
|
123
|
-
if (
|
|
124
|
-
|
|
122
|
+
if (!employee || !employee.departmentId) {
|
|
123
|
+
return
|
|
124
|
+
}
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
126
|
+
const department = await tx.getRepository(Department).findOne({
|
|
127
|
+
where: {
|
|
128
|
+
id: employee.departmentId
|
|
129
|
+
},
|
|
130
|
+
relations: ['manager']
|
|
131
|
+
})
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
191
|
+
return await getSystemUserFromMyDepartmentManager(context)
|
|
172
192
|
} else if (type == OrgMemberTargetType.MySupervisor) {
|
|
173
|
-
|
|
193
|
+
return await getSystemUserFromMySupervosor(context)
|
|
174
194
|
}
|
|
175
195
|
}
|
|
@@ -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 (
|
package/things-factory.config.js
CHANGED
|
@@ -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
|
]
|
package/translations/en.json
CHANGED
package/translations/ko.json
CHANGED
package/translations/ms.json
CHANGED
package/translations/zh.json
CHANGED
|
@@ -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 {};
|