@things-factory/dataset 5.0.0-alpha.32 → 5.0.0-alpha.35

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.
@@ -77,19 +77,21 @@ export async function createDataSample(
77
77
  }, {})
78
78
 
79
79
  const collectedAt = dataSample.collectedAt || new Date()
80
- // workDate ex) 2022-04-04
81
- const { workDate, workShift } = await getWorkDateAndShift(domain, collectedAt)
82
80
 
83
- const dateFormat = 'YYYY-MM-DD'
81
+ const timezone = dataSet.timezone || domain.timezone || 'UTC'
82
+ const format = 'YYYY-MM-DD'
83
+
84
+ // workDate ex) 2022-04-04
85
+ const { workDate, workShift } = await getWorkDateAndShift(domain, collectedAt, { timezone, format })
86
+
84
87
  // local time dataSet timezone or domain timezone or default 'UTC'
85
- const timezone = dataSet['timezone'] || domain['timezone'] || 'UTC'
86
88
 
87
89
  // const collectedAt = dataSample.collectedAt || new Date()
88
90
  const localDateTz = moment(collectedAt).tz(timezone)
89
91
  const defaultPartitionKeys = {
90
92
  domain: domain.subdomain,
91
93
  datasetid: dataSample.dataSet.id, /* It should not be 'data_set_id' as column name duplicated for Glue */
92
- date: localDateTz.format(dateFormat), /* local time date */
94
+ date: localDateTz.format(format), /* local time date */
93
95
  workdate: workDate, /* working date */
94
96
  workshift: workShift
95
97
  }
@@ -39,6 +39,25 @@ export class DataSetQuery {
39
39
  async dataSetsForEntry(@Args() params: ListParam, @Ctx() context: any): Promise<DataSetList> {
40
40
  const { domain } = context.state
41
41
 
42
+ /* TODO. 조회한 사용자가 entry-role을 가진 data-set 리스트만 반환 */
43
+
44
+ const { where = {}, order, skip, take } = convertListParams(params, domain.id)
45
+ where.active = Equal(true)
46
+
47
+ const [items, total] = await getRepository(DataSet).findAndCount({
48
+ where,
49
+ order,
50
+ skip,
51
+ take
52
+ })
53
+
54
+ return { items, total }
55
+ }
56
+
57
+ @Query(returns => DataSetList, { description: 'To fetch multiple DataSets to see data report' })
58
+ async dataSetsForReport(@Args() params: ListParam, @Ctx() context: any): Promise<DataSetList> {
59
+ const { domain } = context.state
60
+
42
61
  /* TODO. 조회한 사용자가 supervisory 역할을 가진 data-set 리스트만 반환 */
43
62
 
44
63
  const { where = {}, order, skip, take } = convertListParams(params, domain.id)
@@ -61,6 +80,13 @@ export class DataSetQuery {
61
80
  })
62
81
  }
63
82
 
83
+ @FieldResolver(type => Role)
84
+ async entryRole(@Root() dataSet: DataSet): Promise<Role> {
85
+ return await getRepository(Role).findOne({
86
+ id: dataSet.entryRoleId
87
+ })
88
+ }
89
+
64
90
  @FieldResolver(type => Role)
65
91
  async supervisoryRole(@Root() dataSet: DataSet): Promise<Role> {
66
92
  return await getRepository(Role).findOne({
@@ -110,14 +136,14 @@ export class DataSetQuery {
110
136
 
111
137
  @FieldResolver(type => Date, { nullable: true })
112
138
  async nextSchedule(@Root() dataSet: DataSet): Promise<Date> {
113
- const { timezone, schedule } = dataSet
139
+ const { domain, schedule, timezone } = dataSet
114
140
 
115
141
  if (!schedule) {
116
142
  return
117
143
  }
118
144
 
119
145
  var interval = parser.parseExpression(schedule, {
120
- tz: timezone
146
+ tz: timezone || domain.timezone || 'UTC'
121
147
  })
122
148
 
123
149
  return interval.next().toDate()
@@ -125,14 +151,14 @@ export class DataSetQuery {
125
151
 
126
152
  @FieldResolver(type => Date, { nullable: true })
127
153
  async prevSchedule(@Root() dataSet: DataSet): Promise<Date> {
128
- const { timezone, schedule } = dataSet
154
+ const { domain, schedule, timezone } = dataSet
129
155
 
130
156
  if (!schedule) {
131
157
  return
132
158
  }
133
159
 
134
160
  var interval = parser.parseExpression(schedule, {
135
- tz: timezone
161
+ tz: timezone || domain.timezone || 'UTC'
136
162
  })
137
163
 
138
164
  return interval.prev().toDate()
@@ -2,7 +2,7 @@ import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
2
 
3
3
  import { ObjectRef, ScalarObject } from '@things-factory/shell'
4
4
 
5
- import { DataSet, DataSetViewType } from './data-set'
5
+ import { DataSet, DataSetEntryType, DataSetMonitorType, DataSetReportType } from './data-set'
6
6
 
7
7
  @InputType()
8
8
  export class NewDataSet {
@@ -12,6 +12,9 @@ export class NewDataSet {
12
12
  @Field({ nullable: true })
13
13
  description?: string
14
14
 
15
+ @Field(type => ObjectRef, { nullable: true })
16
+ entryRole?: ObjectRef
17
+
15
18
  @Field(type => ObjectRef, { nullable: true })
16
19
  supervisoryRole?: ObjectRef
17
20
 
@@ -34,16 +37,22 @@ export class NewDataSet {
34
37
  timezone?: string
35
38
 
36
39
  @Field({ nullable: true })
37
- entryType?: DataSetViewType
40
+ entryType?: DataSetEntryType
38
41
 
39
42
  @Field({ nullable: true })
40
43
  entryView?: string
41
44
 
42
45
  @Field({ nullable: true })
43
- monitorType?: DataSetViewType
46
+ monitorType?: DataSetMonitorType
44
47
 
45
48
  @Field({ nullable: true })
46
49
  monitorView?: string
50
+
51
+ @Field({ nullable: true })
52
+ reportType?: DataSetReportType
53
+
54
+ @Field({ nullable: true })
55
+ reportView?: string
47
56
  }
48
57
 
49
58
  @InputType()
@@ -60,6 +69,9 @@ export class DataSetPatch {
60
69
  @Field(type => ObjectRef, { nullable: true })
61
70
  supervisoryRole?: ObjectRef
62
71
 
72
+ @Field(type => ObjectRef, { nullable: true })
73
+ entryRole?: ObjectRef
74
+
63
75
  @Field({ nullable: true })
64
76
  active?: boolean
65
77
 
@@ -76,17 +88,23 @@ export class DataSetPatch {
76
88
  timezone?: string
77
89
 
78
90
  @Field({ nullable: true })
79
- entryType?: DataSetViewType
91
+ entryType?: DataSetEntryType
80
92
 
81
93
  @Field({ nullable: true })
82
94
  entryView?: string
83
95
 
84
96
  @Field({ nullable: true })
85
- monitorType?: DataSetViewType
97
+ monitorType?: DataSetMonitorType
86
98
 
87
99
  @Field({ nullable: true })
88
100
  monitorView?: string
89
101
 
102
+ @Field({ nullable: true })
103
+ reportType?: DataSetReportType
104
+
105
+ @Field({ nullable: true })
106
+ reportView?: string
107
+
90
108
  @Field()
91
109
  cuFlag: string
92
110
  }
@@ -16,16 +16,40 @@ import { Domain, ScalarObject } from '@things-factory/shell'
16
16
 
17
17
  import { DataItem } from '../data-item/data-item'
18
18
 
19
- export enum DataSetViewType {
19
+ export enum DataSetEntryType {
20
20
  Generated = 'generated',
21
21
  Board = 'board',
22
22
  Page = 'page',
23
23
  ExternalURL = 'external'
24
24
  }
25
25
 
26
- registerEnumType(DataSetViewType, {
27
- name: 'DataSetViewType',
28
- description: 'view type enumeration for data-set'
26
+ registerEnumType(DataSetEntryType, {
27
+ name: 'DataSetEntryType',
28
+ description: 'entry type enumeration for data-set'
29
+ })
30
+
31
+ export enum DataSetMonitorType {
32
+ Generated = 'generated',
33
+ Board = 'board',
34
+ Page = 'page',
35
+ ExternalURL = 'external'
36
+ }
37
+
38
+ registerEnumType(DataSetMonitorType, {
39
+ name: 'DataSetMonitorType',
40
+ description: 'monitor type enumeration for data-set'
41
+ })
42
+
43
+ export enum DataSetReportType {
44
+ Generated = 'generated',
45
+ Board = 'board',
46
+ Page = 'page',
47
+ ExternalURL = 'external'
48
+ }
49
+
50
+ registerEnumType(DataSetReportType, {
51
+ name: 'DataSetReportType',
52
+ description: 'report type enumeration for data-set'
29
53
  })
30
54
 
31
55
  @Entity()
@@ -59,6 +83,15 @@ export class DataSet {
59
83
  @Field({ nullable: true })
60
84
  active?: boolean
61
85
 
86
+ @ManyToOne(type => Role, {
87
+ nullable: true
88
+ })
89
+ @Field(type => Role, { nullable: true })
90
+ entryRole?: Role
91
+
92
+ @RelationId((dataSet: DataSet) => dataSet.entryRole)
93
+ entryRoleId?: string
94
+
62
95
  @ManyToOne(type => Role, {
63
96
  nullable: true
64
97
  })
@@ -78,7 +111,7 @@ export class DataSet {
78
111
  nullable: true
79
112
  })
80
113
  @Field({ nullable: true })
81
- entryType?: DataSetViewType
114
+ entryType?: DataSetEntryType
82
115
 
83
116
  @Column({
84
117
  nullable: true
@@ -90,7 +123,7 @@ export class DataSet {
90
123
  nullable: true
91
124
  })
92
125
  @Field({ nullable: true })
93
- monitorType?: DataSetViewType
126
+ monitorType?: DataSetMonitorType
94
127
 
95
128
  @Column({
96
129
  nullable: true
@@ -98,6 +131,18 @@ export class DataSet {
98
131
  @Field({ nullable: true })
99
132
  monitorView?: string
100
133
 
134
+ @Column({
135
+ nullable: true
136
+ })
137
+ @Field({ nullable: true })
138
+ reportType?: DataSetReportType
139
+
140
+ @Column({
141
+ nullable: true
142
+ })
143
+ @Field({ nullable: true })
144
+ reportView?: string
145
+
101
146
  @Column({
102
147
  nullable: true
103
148
  })
@@ -23,6 +23,10 @@ export default {
23
23
  {
24
24
  tagname: 'data-entry-list-page',
25
25
  page: 'data-entry-list'
26
+ },
27
+ {
28
+ tagname: 'data-report-list-page',
29
+ page: 'data-report-list'
26
30
  }
27
31
  ],
28
32
  bootstrap
@@ -10,6 +10,7 @@
10
10
  "field.data-sample": "data sample",
11
11
  "field.data-set": "data set",
12
12
  "field.device-id": "device id",
13
+ "field.entry-role": "entry role",
13
14
  "field.entry-type": "entry type",
14
15
  "field.entry-view": "entry view",
15
16
  "field.hidden": "hidden",
@@ -26,6 +27,8 @@
26
27
  "field.quota": "sampling #",
27
28
  "field.raw-data": "raw data",
28
29
  "field.ref-by": "ref. by",
30
+ "field.report-type": "report type",
31
+ "field.report-view": "report view",
29
32
  "field.serial-no": "serial #",
30
33
  "field.spec": "spec",
31
34
  "field.state": "state",
@@ -35,15 +38,26 @@
35
38
  "field.use-case": "use case",
36
39
  "field.work-date": "work date",
37
40
  "field.work-shift": "work shift",
41
+ "label.acceptables": "acceptables",
42
+ "label.critical limits": "critical limits",
43
+ "label.minimum value": "minimum value",
44
+ "label.maximum value": "maximum value",
45
+ "label.pass limits": "pass limits",
46
+ "label.target limits": "target limits",
47
+ "text.automatically collected": "automatically collected",
38
48
  "text.data sample created successfully": "a data sample created successfully",
39
49
  "text.data ooc updated successfully": "a data ooc updated successfully",
50
+ "text.manually collected": "manually collected",
40
51
  "title.data-entry-form": "data entry form",
41
52
  "title.data-entry list": "data entry list",
42
53
  "title.data-item list": "data item list",
54
+ "title.data-monitor-view": "data monitor view",
55
+ "title.data-report-view": "data report view",
43
56
  "title.data-ooc list": "data OOC list",
44
57
  "title.data-ooc view": "data OOC view",
45
58
  "title.data-sample list": "data sample list",
46
59
  "title.data-sample view": "data sample view",
47
60
  "title.data-sensor list": "data sensor list",
48
- "title.data-set list": "data set list"
49
- }
61
+ "title.data-set list": "data set list",
62
+ "title.edit code": "edit code"
63
+ }
@@ -10,6 +10,7 @@
10
10
  "field.data-sample": "데이타 샘플",
11
11
  "field.data-set": "데이타셋",
12
12
  "field.device-id": "디바이스 아이디",
13
+ "field.entry-role": "입력담당 역할",
13
14
  "field.entry-type": "입력용 화면종류",
14
15
  "field.entry-view": "입력용 화면",
15
16
  "field.hidden": "숨기기",
@@ -26,6 +27,8 @@
26
27
  "field.quota": "샘플수",
27
28
  "field.raw-data": "데이타 원본",
28
29
  "field.ref-by": "참조아이템",
30
+ "field.report-type": "리포트용 화면종류",
31
+ "field.report-view": "리포트용 화면",
29
32
  "field.serial-no": "시리얼번호",
30
33
  "field.spec": "명세",
31
34
  "field.state": "상태",
@@ -35,14 +38,25 @@
35
38
  "field.use-case": "사용 사례",
36
39
  "field.work-date": "작업기준일",
37
40
  "field.work-shift": "교대근무조",
41
+ "label.acceptables": "허용값",
42
+ "label.critical limits": "허용 한계범위",
43
+ "label.minimum value": "최소값",
44
+ "label.maximum value": "최대값",
45
+ "label.pass limits": "통과 허용범위",
46
+ "label.target limits": "관리 목표범위",
47
+ "text.automatically collected": "자동 수집",
38
48
  "text.data sample created successfully": "데이타 샘플이 성공적으로 생성되었습니다",
39
49
  "text.data ooc updated successfully": "이탈데이타 내용이 수정되었습니다",
50
+ "text.manually collected": "수동 수집",
40
51
  "title.data-entry-form": "데이타 입력",
41
52
  "title.data-item list": "데이타 아이템 조회",
53
+ "title.data-monitor-view": "데이타 모니터",
54
+ "title.data-report-view": "데이타 리포트",
42
55
  "title.data-ooc list": "데이타 이탈점 조회",
43
56
  "title.data-ooc view": "데이타 이탈점 상세",
44
57
  "title.data-sample list": "데이타 샘플 조회",
45
58
  "title.data-sample view": "데이타 샘플 상세",
46
59
  "title.data-sensor list": "데이타 센서 조회",
47
- "title.data-set list": "데이타 셋 조회"
48
- }
60
+ "title.data-set list": "데이타 셋 조회",
61
+ "title.edit code": "코드 편집"
62
+ }
@@ -10,6 +10,7 @@
10
10
  "field.data-sample": "data sample",
11
11
  "field.data-set": "data set",
12
12
  "field.device-id": "device id",
13
+ "field.entry-role": "entry role",
13
14
  "field.entry-type": "entry type",
14
15
  "field.entry-view": "entry view",
15
16
  "field.latest-collected-at": "latest collected at",
@@ -26,6 +27,8 @@
26
27
  "field.quota": "sampling #",
27
28
  "field.raw-data": "raw data",
28
29
  "field.ref-by": "ref. by",
30
+ "field.report-type": "report type",
31
+ "field.report-view": "report view",
29
32
  "field.serial-no": "serial #",
30
33
  "field.spec": "spec",
31
34
  "field.state": "keadaan",
@@ -35,14 +38,25 @@
35
38
  "field.use-case": "use case",
36
39
  "field.work-date": "work date",
37
40
  "field.work-shift": "work shift",
41
+ "label.acceptables": "acceptables",
42
+ "label.critical limits": "critical limits",
43
+ "label.minimum value": "minimum value",
44
+ "label.maximum value": "maximum value",
45
+ "label.pass limits": "pass limits",
46
+ "label.target limits": "target limits",
47
+ "text.automatically collected": "automatically collected",
38
48
  "text.data sample created successfully": "a data sample created successfully",
39
49
  "text.data ooc updated successfully": "a data ooc updated successfully",
50
+ "text.manually collected": "manually collected",
40
51
  "title.data-entry-form": "data entry form",
41
52
  "title.data-item list": "data item list",
53
+ "title.data-monitor-view": "data monitor view",
54
+ "title.data-report-view": "data report view",
42
55
  "title.data-ooc list": "data OOC list",
43
56
  "title.data-ooc view": "data OOC view",
44
57
  "title.data-sample list": "data sample list",
45
58
  "title.data-sample view": "data sample view",
46
59
  "title.data-sensor list": "data sensor list",
47
- "title.data-set list": "data set list"
48
- }
60
+ "title.data-set list": "data set list",
61
+ "title.edit code": "edit code"
62
+ }
@@ -10,6 +10,7 @@
10
10
  "field.data-sample": "data sample",
11
11
  "field.data-set": "data set",
12
12
  "field.device-id": "device id",
13
+ "field.entry-role": "entry role",
13
14
  "field.entry-type": "entry type",
14
15
  "field.entry-view": "entry view",
15
16
  "field.hidden": "hidden",
@@ -26,6 +27,8 @@
26
27
  "field.quota": "sampling #",
27
28
  "field.raw-data": "raw data",
28
29
  "field.ref-by": "ref. by",
30
+ "field.report-type": "report type",
31
+ "field.report-view": "report view",
29
32
  "field.serial-no": "serial #",
30
33
  "field.spec": "spec",
31
34
  "field.state": "状态",
@@ -35,14 +38,25 @@
35
38
  "field.use-case": "use case",
36
39
  "field.work-date": "work date",
37
40
  "field.work-shift": "work shift",
41
+ "label.acceptables": "acceptables",
42
+ "label.critical limits": "critical limits",
43
+ "label.minimum value": "minimum value",
44
+ "label.maximum value": "maximum value",
45
+ "label.pass limits": "pass limits",
46
+ "label.target limits": "target limits",
47
+ "text.automatically collected": "automatically collected",
38
48
  "text.data sample created successfully": "a data sample created successfully",
39
49
  "text.data ooc updated successfully": "a data ooc updated successfully",
50
+ "text.manually collected": "manually collected",
40
51
  "title.data-entry-form": "data entry form",
41
52
  "title.data-item list": "data item list",
53
+ "title.data-monitor-view": "data monitor view",
54
+ "title.data-report-view": "data report view",
42
55
  "title.data-ooc list": "data OOC list",
43
56
  "title.data-ooc view": "data OOC view",
44
57
  "title.data-sample list": "data sample list",
45
58
  "title.data-sample view": "data sample view",
46
59
  "title.data-sensor list": "data sensor list",
47
- "title.data-set list": "data set list"
48
- }
60
+ "title.data-set list": "data set list",
61
+ "title.edit code": "edit code"
62
+ }
package/yarn-error.log CHANGED
@@ -1176,7 +1176,7 @@ Lockfile:
1176
1176
  "@babel/types" "^7.17.0"
1177
1177
  convert-source-map "^1.7.0"
1178
1178
  debug "^4.1.0"
1179
- gensync "^1.0.0-beta.2"
1179
+ gensync "^1.0.0-beta.3"
1180
1180
  json5 "^2.1.2"
1181
1181
  semver "^6.3.0"
1182
1182
 
@@ -11884,9 +11884,9 @@ Lockfile:
11884
11884
  resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.8.2.tgz#aab4f280adb522fdfbdc5e5b64d718d3683f04e9"
11885
11885
  integrity sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==
11886
11886
 
11887
- gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2:
11888
- version "1.0.0-beta.2"
11889
- resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
11887
+ gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.3:
11888
+ version "1.0.0-beta.3"
11889
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.3.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
11890
11890
  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
11891
11891
 
11892
11892
  get-caller-file@^1.0.1: