@things-factory/dataset 6.2.33 → 6.2.34
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/activities/{activity-data-collect-assign-edit.ts → activity-data-review-edit.ts} +2 -2
- package/client/activities/{activity-data-collect-assign-view.ts → activity-data-review-view.ts} +2 -2
- package/client/bootstrap.ts +2 -2
- package/client/pages/data-set/data-set-list-page.ts +22 -3
- package/dist-client/activities/{activity-data-collect-assign-view.d.ts → activity-data-review-edit.d.ts} +2 -2
- package/dist-client/activities/{activity-data-collect-assign-view.js → activity-data-review-edit.js} +10 -10
- package/dist-client/activities/activity-data-review-edit.js.map +1 -0
- package/dist-client/activities/{activity-data-collect-assign-edit.d.ts → activity-data-review-view.d.ts} +2 -2
- package/dist-client/activities/{activity-data-collect-assign-edit.js → activity-data-review-view.js} +10 -10
- package/dist-client/activities/activity-data-review-view.js.map +1 -0
- package/dist-client/bootstrap.d.ts +2 -2
- package/dist-client/bootstrap.js +2 -2
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/pages/data-set/data-set-list-page.js +22 -3
- package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/activities/{activity-data-collect-assign.js → activity-data-review.js} +16 -28
- package/dist-server/activities/activity-data-review.js.map +1 -0
- package/dist-server/activities/activity-ooc-review.js +2 -3
- package/dist-server/activities/activity-ooc-review.js.map +1 -1
- package/dist-server/activities/index.js +4 -3
- package/dist-server/activities/index.js.map +1 -1
- package/dist-server/controllers/create-data-sample.js +7 -7
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/service/data-set/data-set-mutation.js +5 -5
- package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
- package/dist-server/service/data-set/data-set-query.js +5 -5
- package/dist-server/service/data-set/data-set-query.js.map +1 -1
- package/dist-server/service/data-set/data-set-type.js +10 -2
- package/dist-server/service/data-set/data-set-type.js.map +1 -1
- package/dist-server/service/data-set/data-set.js +6 -1
- package/dist-server/service/data-set/data-set.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/server/activities/{activity-data-collect-assign.ts → activity-data-review.ts} +18 -35
- package/server/activities/activity-ooc-review.ts +2 -3
- package/server/activities/index.ts +4 -3
- package/server/controllers/create-data-sample.ts +7 -7
- package/server/service/data-set/data-set-mutation.ts +5 -5
- package/server/service/data-set/data-set-query.ts +5 -6
- package/server/service/data-set/data-set-type.ts +8 -2
- package/server/service/data-set/data-set.ts +5 -1
- package/translations/en.json +4 -3
- package/translations/ja.json +3 -2
- package/translations/ko.json +3 -2
- package/translations/ms.json +120 -106
- package/translations/zh.json +3 -2
- package/dist-client/activities/activity-data-collect-assign-edit.js.map +0 -1
- package/dist-client/activities/activity-data-collect-assign-view.js.map +0 -1
- package/dist-server/activities/activity-data-collect-assign.js.map +0 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/dataset",
|
3
|
-
"version": "6.2.
|
3
|
+
"version": "6.2.34",
|
4
4
|
"main": "dist-server/index.js",
|
5
5
|
"browser": "dist-client/index.js",
|
6
6
|
"things-factory": true,
|
@@ -37,19 +37,19 @@
|
|
37
37
|
"@operato/shell": "^1.0.1",
|
38
38
|
"@operato/styles": "^1.0.0",
|
39
39
|
"@operato/utils": "^1.0.1",
|
40
|
-
"@things-factory/auth-base": "^6.2.
|
41
|
-
"@things-factory/aws-base": "^6.2.
|
42
|
-
"@things-factory/board-service": "^6.2.
|
40
|
+
"@things-factory/auth-base": "^6.2.34",
|
41
|
+
"@things-factory/aws-base": "^6.2.34",
|
42
|
+
"@things-factory/board-service": "^6.2.34",
|
43
43
|
"@things-factory/env": "^6.2.33",
|
44
|
-
"@things-factory/organization": "^6.2.
|
45
|
-
"@things-factory/scheduler-client": "^6.2.
|
46
|
-
"@things-factory/shell": "^6.2.
|
47
|
-
"@things-factory/work-shift": "^6.2.
|
48
|
-
"@things-factory/worklist": "^6.2.
|
44
|
+
"@things-factory/organization": "^6.2.34",
|
45
|
+
"@things-factory/scheduler-client": "^6.2.34",
|
46
|
+
"@things-factory/shell": "^6.2.34",
|
47
|
+
"@things-factory/work-shift": "^6.2.34",
|
48
|
+
"@things-factory/worklist": "^6.2.34",
|
49
49
|
"cron-parser": "^4.3.0",
|
50
50
|
"moment-timezone": "^0.5.40",
|
51
51
|
"simple-statistics": "^7.8.3",
|
52
52
|
"statistics": "^3.3.0"
|
53
53
|
},
|
54
|
-
"gitHead": "
|
54
|
+
"gitHead": "c1bf972f4b3b088638923bbf62badb572e1e6401"
|
55
55
|
}
|
@@ -1,49 +1,32 @@
|
|
1
|
-
import {
|
2
|
-
import { In } from 'typeorm'
|
1
|
+
import { ActivityInstance, ActivityInstanceStatus, UpdateActivityInstanceStateAddendum } from '@things-factory/worklist'
|
3
2
|
|
4
|
-
import {
|
5
|
-
|
6
|
-
ActivityInstance,
|
7
|
-
ActivityInstanceStatus,
|
8
|
-
UpdateActivityInstanceStateAddendum
|
9
|
-
} from '@things-factory/worklist'
|
10
|
-
|
11
|
-
import { createDataSample } from '../controllers/create-data-sample'
|
3
|
+
import { DataOocStatus } from '../service/data-ooc/data-ooc'
|
4
|
+
import { DataSample } from '../service/data-sample/data-sample'
|
12
5
|
|
13
6
|
async function callback(
|
14
7
|
activityInstance: ActivityInstance,
|
15
8
|
addendum: UpdateActivityInstanceStateAddendum,
|
16
9
|
context: ResolverContext
|
17
10
|
) {
|
18
|
-
const { domain, tx } = context.state
|
11
|
+
const { domain, tx, user } = context.state
|
19
12
|
const { input, output, state } = activityInstance
|
20
13
|
|
21
14
|
if (state == ActivityInstanceStatus.Ended) {
|
22
|
-
|
23
|
-
domain: { id:
|
24
|
-
|
25
|
-
})) as Activity
|
26
|
-
|
27
|
-
const data = output
|
15
|
+
var dataSample = await tx.getRepository(DataSample).findOne({
|
16
|
+
where: { domain: { id: domain.id }, id: input?.dataSample?.id }
|
17
|
+
})
|
28
18
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
data
|
35
|
-
}
|
36
|
-
|
37
|
-
await createDataSample(dataSample, context)
|
38
|
-
} else {
|
39
|
-
console.error('Collect Assign Data Activity not installed.')
|
40
|
-
}
|
19
|
+
dataSample = await tx.getRepository(DataSample).save({
|
20
|
+
...dataSample,
|
21
|
+
output,
|
22
|
+
state: DataOocStatus.REVIEWED
|
23
|
+
})
|
41
24
|
}
|
42
25
|
}
|
43
26
|
|
44
|
-
export const
|
45
|
-
name: '
|
46
|
-
description: 'Tasks
|
27
|
+
export const ActivityDataReview = {
|
28
|
+
name: 'Data Review',
|
29
|
+
description: 'Tasks for data review',
|
47
30
|
release: '1.0.0',
|
48
31
|
provider: 'hatiolab.com',
|
49
32
|
category: 'quality',
|
@@ -88,11 +71,11 @@ export const ActivityDataCollectAssign = {
|
|
88
71
|
}
|
89
72
|
],
|
90
73
|
uiType: 'custom-element',
|
91
|
-
uiSource: 'activity-data-
|
74
|
+
uiSource: 'activity-data-review-edit',
|
92
75
|
viewType: 'custom-element',
|
93
|
-
viewSource: 'activity-data-
|
76
|
+
viewSource: 'activity-data-review-view',
|
94
77
|
reportType: 'custom-element',
|
95
|
-
reportSource: 'activity-data-
|
78
|
+
reportSource: 'activity-data-review-view',
|
96
79
|
thumbnail: '/assets/images/data-collect.png',
|
97
80
|
callback /* Called when there is a change in the lifecycle of a task (activity-instance). */
|
98
81
|
}
|
@@ -36,7 +36,7 @@ async function callback(
|
|
36
36
|
})
|
37
37
|
|
38
38
|
const dataSet = dataOoc.dataSet
|
39
|
-
const { assignees,
|
39
|
+
const { assignees, outlierApprovalLine } = dataSet
|
40
40
|
|
41
41
|
/* dataOoc Review 결과를 dataOoc 엔티티에 반영한다. */
|
42
42
|
dataOoc = await tx.getRepository(DataOoc).save({
|
@@ -59,8 +59,7 @@ async function callback(
|
|
59
59
|
instruction: correctiveInstruction
|
60
60
|
},
|
61
61
|
assignees,
|
62
|
-
approvalLine
|
63
|
-
outlierApprovalLine
|
62
|
+
approvalLine: outlierApprovalLine
|
64
63
|
}
|
65
64
|
|
66
65
|
await issue(activityInstance, context)
|
@@ -1,10 +1,11 @@
|
|
1
1
|
import { ActivityInstallations } from '@things-factory/worklist'
|
2
2
|
|
3
|
-
import { ActivityOocReview } from './activity-ooc-review'
|
4
|
-
import { ActivityOocResolve } from './activity-ooc-resolve'
|
5
3
|
import { ActivityDataCollect } from './activity-data-collect'
|
4
|
+
import { ActivityDataReview } from './activity-data-review'
|
5
|
+
import { ActivityOocResolve } from './activity-ooc-resolve'
|
6
|
+
import { ActivityOocReview } from './activity-ooc-review'
|
6
7
|
|
7
8
|
/* activity templates installation */
|
8
|
-
;[ActivityOocReview, ActivityOocResolve, ActivityDataCollect].forEach(template => {
|
9
|
+
;[ActivityOocReview, ActivityOocResolve, ActivityDataCollect, ActivityDataReview].forEach(template => {
|
9
10
|
ActivityInstallations.installActivityTemplate(template)
|
10
11
|
})
|
@@ -262,10 +262,10 @@ export async function createDataSample(dataSample: NewDataSample, context: Resol
|
|
262
262
|
} catch (err) {
|
263
263
|
logger.error('Notification', err)
|
264
264
|
}
|
265
|
-
} else {
|
265
|
+
} else if(dataSet.requiresReview) {
|
266
266
|
const activity = (await tx.getRepository(Activity).findOneBy({
|
267
267
|
domain: { id: domain.id },
|
268
|
-
name: '
|
268
|
+
name: 'Data Review'
|
269
269
|
})) as Activity
|
270
270
|
|
271
271
|
if (activity) {
|
@@ -279,7 +279,7 @@ export async function createDataSample(dataSample: NewDataSample, context: Resol
|
|
279
279
|
if (assignees && assignees instanceof Array && assignees.length > 0) {
|
280
280
|
result.dataItems = dataItems
|
281
281
|
const activityInstance = {
|
282
|
-
name: `[Data
|
282
|
+
name: `[Data 검토] ${dataSet.name}`,
|
283
283
|
description: dataSet.description,
|
284
284
|
activityId: activity.id,
|
285
285
|
dueAt: new Date(collectedAt.getTime() + 24 * 60 * 60 * 1000),
|
@@ -294,11 +294,11 @@ export async function createDataSample(dataSample: NewDataSample, context: Resol
|
|
294
294
|
await issue(activityInstance, context)
|
295
295
|
} else {
|
296
296
|
console.error(
|
297
|
-
`Assignees are not set. So Data
|
297
|
+
`Assignees are not set. So Data Review task for ${dataSet.name}(${dataSet.id}) could not be issued.`
|
298
298
|
)
|
299
299
|
}
|
300
300
|
} else {
|
301
|
-
console.error('Data
|
301
|
+
console.error('Data Review Activity not installed.')
|
302
302
|
}
|
303
303
|
|
304
304
|
try {
|
@@ -311,8 +311,8 @@ export async function createDataSample(dataSample: NewDataSample, context: Resol
|
|
311
311
|
notification: {
|
312
312
|
domain,
|
313
313
|
type: 'info',
|
314
|
-
title: `[Data
|
315
|
-
body: `Data
|
314
|
+
title: `[Data Review] ${dataSet.name}`,
|
315
|
+
body: `Data Review occurred on '${dataSet.name}'`,
|
316
316
|
url: getRedirectSubdomainPath(context, domain.subdomain, `/data-set/${dataSet.id}`),
|
317
317
|
timestamp: collectedAt
|
318
318
|
}
|
@@ -13,19 +13,19 @@ import { DataSetPatch, NewDataSet } from './data-set-type'
|
|
13
13
|
const crypto = require('crypto')
|
14
14
|
|
15
15
|
function getApprovalLineValue(patch: NewDataSet | DataSetPatch): ApprovalLineItem[] {
|
16
|
-
const {
|
16
|
+
const { reviewApprovalLine } = patch
|
17
17
|
|
18
|
-
if (!('
|
19
|
-
/*
|
18
|
+
if (!('reviewApprovalLine' in patch)) {
|
19
|
+
/* reviewApprovalLine 언급되지 않았다면, 업데이트하지 않는다. */
|
20
20
|
return
|
21
21
|
}
|
22
22
|
|
23
|
-
if (!
|
23
|
+
if (!reviewApprovalLine || !(reviewApprovalLine instanceof Array)) {
|
24
24
|
/* approvalLine의 값이 없거나 배열이 아니라면, 클리어시킨다. */
|
25
25
|
return null
|
26
26
|
}
|
27
27
|
|
28
|
-
return
|
28
|
+
return reviewApprovalLine
|
29
29
|
.map(m => {
|
30
30
|
return {
|
31
31
|
type: m.type,
|
@@ -1,13 +1,12 @@
|
|
1
|
-
import { In } from 'typeorm'
|
2
1
|
import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
2
|
+
import { In } from 'typeorm'
|
3
3
|
|
4
4
|
import { Attachment } from '@things-factory/attachment-base'
|
5
5
|
import { Role, User } from '@things-factory/auth-base'
|
6
6
|
import { Board } from '@things-factory/board-service'
|
7
|
-
import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
|
8
7
|
import { ApprovalLineItem } from '@things-factory/organization'
|
8
|
+
import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
|
9
9
|
import { AssigneeItem } from '@things-factory/worklist'
|
10
|
-
import { Application, getSchedules } from '@things-factory/scheduler-client'
|
11
10
|
|
12
11
|
import { DataKeySet } from '../data-key-set/data-key-set'
|
13
12
|
import { DataSample } from '../data-sample/data-sample'
|
@@ -203,15 +202,15 @@ export class DataSetQuery {
|
|
203
202
|
@FieldResolver(type => [ApprovalLineItem])
|
204
203
|
async approvalLine(@Root() dataSet: DataSet, @Ctx() context: ResolverContext): Promise<ApprovalLineItem[]> {
|
205
204
|
const { domain, user } = context.state
|
206
|
-
const {
|
205
|
+
const { reviewApprovalLine } = dataSet
|
207
206
|
|
208
|
-
if (!
|
207
|
+
if (!reviewApprovalLine || !(reviewApprovalLine instanceof Array)) {
|
209
208
|
return null
|
210
209
|
}
|
211
210
|
|
212
211
|
var approvalLineItems = []
|
213
212
|
|
214
|
-
for (let item of
|
213
|
+
for (let item of reviewApprovalLine) {
|
215
214
|
// "value" deprecated. to be removed
|
216
215
|
var { type, approver, value } = item
|
217
216
|
var id = approver?.id || value
|
@@ -30,7 +30,7 @@ export class NewDataSet {
|
|
30
30
|
assignees?: AssigneeItem[]
|
31
31
|
|
32
32
|
@Field(type => ScalarObject, { nullable: true })
|
33
|
-
|
33
|
+
reviewApprovalLine?: ApprovalLineItem[]
|
34
34
|
|
35
35
|
@Field(type => ScalarObject, { nullable: true })
|
36
36
|
outlierApprovalLine?: ApprovalLineItem[]
|
@@ -56,6 +56,9 @@ export class NewDataSet {
|
|
56
56
|
@Field({ nullable: true })
|
57
57
|
timezone?: string
|
58
58
|
|
59
|
+
@Field({ nullable: true })
|
60
|
+
requiresReview?: boolean
|
61
|
+
|
59
62
|
@Field({ nullable: true })
|
60
63
|
entryType?: DataSetEntryType
|
61
64
|
|
@@ -105,7 +108,7 @@ export class DataSetPatch {
|
|
105
108
|
assignees?: AssigneeItem[]
|
106
109
|
|
107
110
|
@Field(type => ScalarObject, { nullable: true })
|
108
|
-
|
111
|
+
reviewApprovalLine?: ApprovalLineItem[]
|
109
112
|
|
110
113
|
@Field(type => ScalarObject, { nullable: true })
|
111
114
|
outlierApprovalLine?: ApprovalLineItem[]
|
@@ -131,6 +134,9 @@ export class DataSetPatch {
|
|
131
134
|
@Field({ nullable: true })
|
132
135
|
timezone?: string
|
133
136
|
|
137
|
+
@Field({ nullable: true })
|
138
|
+
requiresReview?: boolean
|
139
|
+
|
134
140
|
@Field({ nullable: true })
|
135
141
|
entryType?: DataSetEntryType
|
136
142
|
|
@@ -154,7 +154,7 @@ export class DataSet {
|
|
154
154
|
nullable: true,
|
155
155
|
description: 'Approval line for confrim of the dataset'
|
156
156
|
})
|
157
|
-
|
157
|
+
reviewApprovalLine?: ApprovalLineItem[]
|
158
158
|
|
159
159
|
@Column('simple-json', { nullable: true })
|
160
160
|
@Field(type => [ApprovalLineItem], {
|
@@ -214,6 +214,10 @@ export class DataSet {
|
|
214
214
|
@Field({ nullable: true })
|
215
215
|
timezone?: string
|
216
216
|
|
217
|
+
@Column({ nullable: true })
|
218
|
+
@Field({ nullable: true })
|
219
|
+
requiresReview?: boolean
|
220
|
+
|
217
221
|
@Column({ nullable: true })
|
218
222
|
@Field({ nullable: true })
|
219
223
|
scheduleId?: string
|
package/translations/en.json
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
{
|
2
|
-
"label.group-by data-keys": "group by each data-keys",
|
3
2
|
"button.corrected": "corrected",
|
4
3
|
"button.request-archive": "request archive",
|
5
4
|
"button.reviewed": "reviewed",
|
6
5
|
"error.dataset not found": "Cannot find dataSet with the given name({dataSetName})",
|
7
6
|
"error.summary not supported": "The given dataSet({dataSetName}) does not support reports for {period}",
|
8
7
|
"field.appliance": "appliance",
|
9
|
-
"field.approval-line": "approval line",
|
10
|
-
"field.outlier-approval-line": "outlier approval line",
|
8
|
+
"field.review-approval-line": "review approval line",
|
11
9
|
"field.assignees": "assignees",
|
12
10
|
"field.collected-at": "collected at",
|
13
11
|
"field.corrected-at": "corrected at",
|
@@ -49,6 +47,8 @@
|
|
49
47
|
"field.ooc": "out of control limit",
|
50
48
|
"field.oos": "out of critical limit",
|
51
49
|
"field.options": "options",
|
50
|
+
"field.outlier-approval-line": "outlier approval line",
|
51
|
+
"field.requires-review": "requires review",
|
52
52
|
"field.partition-keys": "partition keys",
|
53
53
|
"field.prev-schedule": "previous schedule",
|
54
54
|
"field.quota": "sampling #",
|
@@ -78,6 +78,7 @@
|
|
78
78
|
"label.critical-limits": "critical limits",
|
79
79
|
"label.data-set-type": "type",
|
80
80
|
"label.end-date": "end date",
|
81
|
+
"label.group-by data-keys": "group by each data-keys",
|
81
82
|
"label.maximum value": "maximum value",
|
82
83
|
"label.minimum value": "minimum value",
|
83
84
|
"label.pass-limits": "pass limits",
|
package/translations/ja.json
CHANGED
@@ -5,8 +5,7 @@
|
|
5
5
|
"error.dataset not found": "指定された名前の({dataSetName})データセットが見つかりません",
|
6
6
|
"error.summary not supported": "指定されたデータセット({dataSetName})は{period}のレポートに対応していません",
|
7
7
|
"field.appliance": "アプライアンス",
|
8
|
-
"field.approval-line": "決済ライン",
|
9
|
-
"field.outlier-approval-line": "異常承認ライン",
|
8
|
+
"field.review-approval-line": "決済ライン",
|
10
9
|
"field.assignees": "譲渡人リスト",
|
11
10
|
"field.collected-at": "取集日時",
|
12
11
|
"field.corrected-at": "措置時間",
|
@@ -48,6 +47,8 @@
|
|
48
47
|
"field.ooc": "管理限界離脱有無",
|
49
48
|
"field.oos": "許容限界離脱有無",
|
50
49
|
"field.options": "選択オプション",
|
50
|
+
"field.outlier-approval-line": "異常承認ライン",
|
51
|
+
"field.requires-review": "見直しが必要",
|
51
52
|
"field.partition-keys": "パーティション キー",
|
52
53
|
"field.prev-schedule": "以前の収集計画",
|
53
54
|
"field.quota": "サンプル数",
|
package/translations/ko.json
CHANGED
@@ -5,8 +5,7 @@
|
|
5
5
|
"error.dataset not found": "주어진 이름의({dataSetName}) dataSet을 찾을 수 없습니다",
|
6
6
|
"error.summary not supported": "주어진 dataSet({dataSetName})은 {period}의 레포트가 지원되지 않습니다",
|
7
7
|
"field.appliance": "어플라이언스",
|
8
|
-
"field.approval-line": "결재라인",
|
9
|
-
"field.outlier-approval-line": "이상치 결재라인",
|
8
|
+
"field.review-approval-line": "결재라인",
|
10
9
|
"field.assignees": "할당자 목록",
|
11
10
|
"field.collected-at": "수집일시",
|
12
11
|
"field.corrected-at": "조치 시간",
|
@@ -48,6 +47,8 @@
|
|
48
47
|
"field.ooc": "관리한계 이탈여부",
|
49
48
|
"field.oos": "허용한계 이탈여부",
|
50
49
|
"field.options": "선택옵션",
|
50
|
+
"field.outlier-approval-line": "이상치 결재라인",
|
51
|
+
"field.requires-review": "검토 요청",
|
51
52
|
"field.partition-keys": "파티션 키",
|
52
53
|
"field.prev-schedule": "이전 수집계획",
|
53
54
|
"field.quota": "샘플수",
|