@things-factory/dataset 8.0.0-beta.9 → 8.0.2

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 (134) hide show
  1. package/client/activities/activity-data-collect-edit.ts +105 -0
  2. package/client/activities/activity-data-collect-view.ts +91 -0
  3. package/client/activities/activity-data-review-edit.ts +278 -0
  4. package/client/activities/activity-data-review-view.ts +226 -0
  5. package/client/activities/activity-ooc-resolve-edit.ts +195 -0
  6. package/client/activities/activity-ooc-resolve-view.ts +143 -0
  7. package/client/activities/activity-ooc-review-edit.ts +173 -0
  8. package/client/activities/activity-ooc-review-view.ts +129 -0
  9. package/client/bootstrap.ts +35 -0
  10. package/client/components/data-entry-form.ts +109 -0
  11. package/client/index.ts +1 -0
  12. package/client/pages/data-archive/data-archive-list-page.ts +277 -0
  13. package/client/pages/data-archive/data-archive-request-popup.ts +177 -0
  14. package/client/pages/data-entry/data-entry-list-page.ts +464 -0
  15. package/client/pages/data-key-set/data-key-item-list.ts +183 -0
  16. package/client/pages/data-key-set/data-key-set-importer.ts +89 -0
  17. package/client/pages/data-key-set/data-key-set-list-page.ts +413 -0
  18. package/client/pages/data-ooc/data-ooc-list-page.ts +549 -0
  19. package/client/pages/data-ooc/data-ooc-page.ts +164 -0
  20. package/client/pages/data-ooc/data-ooc-view.ts +236 -0
  21. package/client/pages/data-ooc/data-oocs-page.ts +200 -0
  22. package/client/pages/data-report/data-report-embed-page.ts +108 -0
  23. package/client/pages/data-report/data-report-list-page.ts +454 -0
  24. package/client/pages/data-report/data-report-samples-page.ts +174 -0
  25. package/client/pages/data-report/jasper-report-oocs-page.ts +110 -0
  26. package/client/pages/data-report/jasper-report-samples-crosstab-page.ts +110 -0
  27. package/client/pages/data-report/jasper-report-samples-page.ts +110 -0
  28. package/client/pages/data-sample/data-sample-list-page.ts +442 -0
  29. package/client/pages/data-sample/data-sample-page.ts +55 -0
  30. package/client/pages/data-sample/data-sample-search-page.ts +424 -0
  31. package/client/pages/data-sample/data-sample-view.ts +292 -0
  32. package/client/pages/data-sample/data-samples-page.ts +249 -0
  33. package/client/pages/data-sensor/data-sensor-list-page.ts +456 -0
  34. package/client/pages/data-set/data-item-list.ts +304 -0
  35. package/client/pages/data-set/data-set-importer.ts +89 -0
  36. package/client/pages/data-set/data-set-list-page.ts +1078 -0
  37. package/client/pages/data-summary/data-summary-list-page.ts +363 -0
  38. package/client/pages/data-summary/data-summary-period-page.ts +439 -0
  39. package/client/pages/data-summary/data-summary-search-page.ts +426 -0
  40. package/client/pages/data-summary/data-summary-view.ts +133 -0
  41. package/client/route.ts +91 -0
  42. package/client/tsconfig.json +13 -0
  43. package/dist-client/activities/activity-data-review-edit.js +19 -10
  44. package/dist-client/activities/activity-data-review-edit.js.map +1 -1
  45. package/dist-client/activities/activity-data-review-view.js +80 -0
  46. package/dist-client/activities/activity-data-review-view.js.map +1 -1
  47. package/dist-client/pages/data-entry/data-entry-list-page.js +2 -2
  48. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  49. package/dist-client/tsconfig.tsbuildinfo +1 -1
  50. package/dist-server/controllers/create-data-ooc.js +2 -0
  51. package/dist-server/controllers/create-data-ooc.js.map +1 -1
  52. package/dist-server/service/data-archive/index.d.ts +1 -1
  53. package/dist-server/service/data-ooc/index.d.ts +1 -1
  54. package/dist-server/service/data-sample/data-sample-query.d.ts +1 -1
  55. package/dist-server/service/data-sample/data-sample-query.js +3 -3
  56. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  57. package/dist-server/service/data-sample/index.d.ts +1 -1
  58. package/dist-server/service/data-set/index.d.ts +1 -1
  59. package/dist-server/service/index.d.ts +2 -2
  60. package/dist-server/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +26 -26
  62. package/server/activities/activity-data-collect.ts +100 -0
  63. package/server/activities/activity-data-review.ts +109 -0
  64. package/server/activities/activity-ooc-resolve.ts +123 -0
  65. package/server/activities/activity-ooc-review.ts +95 -0
  66. package/server/activities/index.ts +11 -0
  67. package/server/controllers/create-data-ooc.ts +80 -0
  68. package/server/controllers/create-data-sample.ts +323 -0
  69. package/server/controllers/data-use-case.ts +98 -0
  70. package/server/controllers/finalize-data-collection.ts +388 -0
  71. package/server/controllers/index.ts +6 -0
  72. package/server/controllers/issue-data-collection-task.ts +70 -0
  73. package/server/controllers/issue-ooc-resolve.ts +58 -0
  74. package/server/controllers/issue-ooc-review.ts +52 -0
  75. package/server/controllers/jasper-report.ts +186 -0
  76. package/server/controllers/query-data-summary-by-period.ts +178 -0
  77. package/server/controllers/shiny-report.ts +54 -0
  78. package/server/engine/index.ts +1 -0
  79. package/server/engine/task/create-data-sample.ts +100 -0
  80. package/server/engine/task/index.ts +2 -0
  81. package/server/engine/task/issue-collect-data.ts +45 -0
  82. package/server/index.ts +8 -0
  83. package/server/routes.ts +188 -0
  84. package/server/service/data-archive/data-archive-mutation.ts +273 -0
  85. package/server/service/data-archive/data-archive-query.ts +58 -0
  86. package/server/service/data-archive/data-archive-type.ts +48 -0
  87. package/server/service/data-archive/data-archive.ts +69 -0
  88. package/server/service/data-archive/index.ts +6 -0
  89. package/server/service/data-key-set/data-key-item-type.ts +31 -0
  90. package/server/service/data-key-set/data-key-set-mutation.ts +201 -0
  91. package/server/service/data-key-set/data-key-set-query.ts +68 -0
  92. package/server/service/data-key-set/data-key-set-type.ts +70 -0
  93. package/server/service/data-key-set/data-key-set.ts +86 -0
  94. package/server/service/data-key-set/index.ts +6 -0
  95. package/server/service/data-ooc/data-ooc-mutation.ts +154 -0
  96. package/server/service/data-ooc/data-ooc-query.ts +106 -0
  97. package/server/service/data-ooc/data-ooc-subscription.ts +48 -0
  98. package/server/service/data-ooc/data-ooc-type.ts +71 -0
  99. package/server/service/data-ooc/data-ooc.ts +259 -0
  100. package/server/service/data-ooc/index.ts +7 -0
  101. package/server/service/data-sample/data-sample-mutation.ts +18 -0
  102. package/server/service/data-sample/data-sample-query.ts +215 -0
  103. package/server/service/data-sample/data-sample-type.ts +47 -0
  104. package/server/service/data-sample/data-sample.ts +193 -0
  105. package/server/service/data-sample/index.ts +6 -0
  106. package/server/service/data-sensor/data-sensor-mutation.ts +116 -0
  107. package/server/service/data-sensor/data-sensor-query.ts +76 -0
  108. package/server/service/data-sensor/data-sensor-type.ts +104 -0
  109. package/server/service/data-sensor/data-sensor.ts +126 -0
  110. package/server/service/data-sensor/index.ts +6 -0
  111. package/server/service/data-set/data-item-type.ts +155 -0
  112. package/server/service/data-set/data-set-mutation.ts +552 -0
  113. package/server/service/data-set/data-set-query.ts +461 -0
  114. package/server/service/data-set/data-set-type.ts +204 -0
  115. package/server/service/data-set/data-set.ts +326 -0
  116. package/server/service/data-set/index.ts +6 -0
  117. package/server/service/data-set-history/data-set-history-query.ts +126 -0
  118. package/server/service/data-set-history/data-set-history-type.ts +12 -0
  119. package/server/service/data-set-history/data-set-history.ts +217 -0
  120. package/server/service/data-set-history/event-subscriber.ts +17 -0
  121. package/server/service/data-set-history/index.ts +7 -0
  122. package/server/service/data-spec/data-spec-manager.ts +21 -0
  123. package/server/service/data-spec/data-spec-query.ts +21 -0
  124. package/server/service/data-spec/data-spec.ts +45 -0
  125. package/server/service/data-spec/index.ts +5 -0
  126. package/server/service/data-summary/data-summary-mutation.ts +45 -0
  127. package/server/service/data-summary/data-summary-query.ts +179 -0
  128. package/server/service/data-summary/data-summary-type.ts +86 -0
  129. package/server/service/data-summary/data-summary.ts +170 -0
  130. package/server/service/data-summary/index.ts +7 -0
  131. package/server/service/index.ts +57 -0
  132. package/server/tsconfig.json +10 -0
  133. package/server/utils/config-resolver.ts +29 -0
  134. package/server/utils/index.ts +1 -0
@@ -0,0 +1,236 @@
1
+ import '@material/web/icon/icon.js'
2
+ import '@material/web/fab/fab.js'
3
+ import '@operato/dataset/ox-data-ooc-brief-view.js'
4
+ import '@things-factory/worklist/dist-client/components/activity-thread-timeline.js'
5
+
6
+ import gql from 'graphql-tag'
7
+ import { css, html, LitElement, nothing } from 'lit'
8
+ import { customElement, property, query, state } from 'lit/decorators.js'
9
+
10
+ import { client } from '@operato/graphql'
11
+ import { i18next, localize } from '@operato/i18n'
12
+ import { ScrollbarStyles } from '@operato/styles'
13
+ import { GhostPrint } from '@operato/ghost-print'
14
+
15
+ @customElement('data-ooc-view')
16
+ export class DataOocView extends localize(i18next)(LitElement) {
17
+ static styles = [
18
+ ScrollbarStyles,
19
+ css`
20
+ :host {
21
+ display: block;
22
+ position: relative;
23
+ background-color: var(--md-sys-color-surface);
24
+
25
+ overflow: auto;
26
+ }
27
+
28
+ ox-data-ooc-brief-view {
29
+ padding: var(--spacing-large);
30
+ }
31
+
32
+ activity-thread-timeline {
33
+ margin: var(--spacing-medium);
34
+ }
35
+
36
+ md-fab {
37
+ position: fixed;
38
+ bottom: 15px;
39
+ right: 16px;
40
+ text-decoration: auto;
41
+ opacity: 0.5;
42
+ }
43
+
44
+ @media print {
45
+ md-fab {
46
+ display: none;
47
+ }
48
+ }
49
+ `
50
+ ]
51
+
52
+ @property({
53
+ type: String,
54
+ attribute: 'data-ooc-id'
55
+ })
56
+ dataOocId?: string
57
+
58
+ @state() dataOoc?: any
59
+
60
+ private printHandler = this.handlePrint.bind(this)
61
+
62
+ render() {
63
+ if (!this.dataOoc) {
64
+ return nothing
65
+ }
66
+
67
+ const reviewActivityThread = this.dataOoc?.reviewActivityInstance?.activityThreads?.[0]
68
+ const resolveActivityThread = this.dataOoc?.resolveActivityInstance?.activityThreads?.[0]
69
+
70
+ return html`
71
+ <ox-data-ooc-brief-view .dataOoc=${this.dataOoc}></ox-data-ooc-brief-view>
72
+ ${reviewActivityThread
73
+ ? html`
74
+ <activity-thread-timeline
75
+ subtitle=${String(i18next.t('label.ooc review timeline'))}
76
+ .activityThread=${reviewActivityThread}
77
+ short-form
78
+ ></activity-thread-timeline>
79
+ `
80
+ : nothing}
81
+ ${resolveActivityThread
82
+ ? html`
83
+ <activity-thread-timeline
84
+ subtitle=${String(i18next.t('label.ooc resolve timeline'))}
85
+ .activityThread=${resolveActivityThread}
86
+ short-form
87
+ ></activity-thread-timeline>
88
+ `
89
+ : nothing}
90
+
91
+ <md-fab
92
+ title="print"
93
+ @click=${() =>
94
+ GhostPrint.print({
95
+ src: `./data-ooc/${this.dataOoc.id}`
96
+ })}
97
+ >
98
+ <md-icon slot="icon">print</md-icon>
99
+ </md-fab>
100
+ `
101
+ }
102
+
103
+ updated(changes) {
104
+ if (changes.has('dataOocId')) {
105
+ this.fetchDataOoc()
106
+ }
107
+ }
108
+
109
+ async fetchDataOoc() {
110
+ const id = this.dataOocId
111
+
112
+ const response = await client.query({
113
+ query: gql`
114
+ query ($id: String!) {
115
+ dataOoc(id: $id) {
116
+ id
117
+ name
118
+ description
119
+ useCase
120
+ dataSet {
121
+ id
122
+ name
123
+ }
124
+ key01
125
+ key02
126
+ key03
127
+ key04
128
+ key05
129
+ partitionKeys
130
+ dataItems {
131
+ name
132
+ description
133
+ active
134
+ hidden
135
+ tag
136
+ group
137
+ type
138
+ unit
139
+ options
140
+ quota
141
+ spec
142
+ stat
143
+ }
144
+ data
145
+ rawData
146
+ judgment
147
+ ooc
148
+ oos
149
+ state
150
+ history
151
+ workDate
152
+ workShift
153
+ correctiveInstruction
154
+ correctiveAction
155
+ reviewedAt
156
+ reviewer {
157
+ id
158
+ name
159
+ }
160
+ correctedAt
161
+ corrector {
162
+ id
163
+ name
164
+ }
165
+ updater {
166
+ id
167
+ name
168
+ }
169
+ updatedAt
170
+ collectedAt
171
+ reviewActivityInstance {
172
+ ...ActivityInstanceFragment
173
+ }
174
+ resolveActivityInstance {
175
+ ...ActivityInstanceFragment
176
+ }
177
+ }
178
+ }
179
+
180
+ fragment ActivityInstanceFragment on ActivityInstance {
181
+ activityThreads {
182
+ assignee {
183
+ name
184
+ }
185
+ output
186
+ activityApprovals {
187
+ judgment
188
+ approver {
189
+ name
190
+ }
191
+ comment
192
+ createdAt
193
+ updatedAt
194
+ terminatedAt
195
+ }
196
+ activityThreadHistories {
197
+ transaction
198
+ reason
199
+ updater {
200
+ name
201
+ }
202
+ updatedAt
203
+ state
204
+ output
205
+ }
206
+ }
207
+ }
208
+ `,
209
+ variables: {
210
+ id
211
+ }
212
+ })
213
+
214
+ this.dataOoc = response.data.dataOoc
215
+ }
216
+
217
+ handlePrint(event) {
218
+ if ((event.ctrlKey || event.metaKey) && event.key === 'p') {
219
+ event.preventDefault()
220
+
221
+ GhostPrint.print({
222
+ src: `./data-ooc/${this.dataOoc.id}`
223
+ })
224
+ }
225
+ }
226
+
227
+ connectedCallback(): void {
228
+ super.connectedCallback()
229
+ window.addEventListener('keydown', this.printHandler)
230
+ }
231
+
232
+ disconnectedCallback(): void {
233
+ super.disconnectedCallback()
234
+ window.removeEventListener('keydown', this.printHandler)
235
+ }
236
+ }
@@ -0,0 +1,200 @@
1
+ import '@operato/dataset/ox-data-ooc-brief-view.js'
2
+ import '@things-factory/worklist/dist-client/components/activity-thread-timeline.js'
3
+
4
+ import gql from 'graphql-tag'
5
+ import { PropertyValues, html, css, nothing } from 'lit'
6
+ import { customElement, state } from 'lit/decorators.js'
7
+ import { PageView } from '@operato/shell'
8
+ import { i18next, localize } from '@operato/i18n'
9
+ import { client } from '@operato/graphql'
10
+
11
+ /**
12
+ * 이 페이지는 여러개의 Data OOC를 한번에 프린트하기 위한 용도로 사용되는 페이지이다.
13
+ */
14
+ @customElement('data-oocs-page')
15
+ export class DataOocsPage extends localize(i18next)(PageView) {
16
+ static styles = [
17
+ css`
18
+ :host {
19
+ display: block;
20
+ overflow: auto;
21
+ }
22
+
23
+ activity-thread-timeline {
24
+ margin: var(--spacing-medium);
25
+ }
26
+
27
+ .end {
28
+ page-break-after: always;
29
+ break-after: always;
30
+ }
31
+ `
32
+ ]
33
+
34
+ @state() dataOocs?: any[]
35
+
36
+ get context() {
37
+ return {
38
+ title: i18next.t('title.data-ooc view')
39
+ }
40
+ }
41
+
42
+ render() {
43
+ return this.dataOocs?.map(dataOoc => {
44
+ const reviewActivityThread = dataOoc?.reviewActivityInstance?.activityThreads?.[0]
45
+ const resolveActivityThread = dataOoc?.resolveActivityInstance?.activityThreads?.[0]
46
+
47
+ return html`
48
+ <ox-data-ooc-brief-view .dataOoc=${dataOoc}></ox-data-ooc-brief-view>
49
+ ${reviewActivityThread
50
+ ? html`
51
+ <activity-thread-timeline
52
+ subtitle=${String(i18next.t('label.ooc review timeline'))}
53
+ .activityThread=${reviewActivityThread}
54
+ short-form
55
+ ></activity-thread-timeline>
56
+ `
57
+ : nothing}
58
+ ${resolveActivityThread
59
+ ? html`
60
+ <activity-thread-timeline
61
+ subtitle=${String(i18next.t('label.ooc resolve timeline'))}
62
+ .activityThread=${resolveActivityThread}
63
+ short-form
64
+ ></activity-thread-timeline>
65
+ `
66
+ : nothing}
67
+ <div class="end"></div>
68
+ `
69
+ })
70
+ }
71
+
72
+ pageUpdated(changes: any, lifecycle: any, before: any) {
73
+ if (this.active) {
74
+ /*
75
+ * this page is activated
76
+ */
77
+ const { ids = '' } = lifecycle.params
78
+
79
+ this.fetchOocs(ids.split('|').map(id => id.trim()))
80
+ } else {
81
+ /* this page is deactivated */
82
+ }
83
+ }
84
+
85
+ async fetchOocs(ids: string[]) {
86
+ const filters = [
87
+ {
88
+ name: 'id',
89
+ operator: 'in',
90
+ value: ids
91
+ }
92
+ ]
93
+
94
+ const response = await client.query({
95
+ query: gql`
96
+ query ($filters: [Filter!]) {
97
+ dataOocs(filters: $filters) {
98
+ items {
99
+ id
100
+ name
101
+ description
102
+ useCase
103
+ dataSet {
104
+ id
105
+ name
106
+ }
107
+ key01
108
+ key02
109
+ key03
110
+ key04
111
+ key05
112
+ partitionKeys
113
+ dataItems {
114
+ name
115
+ description
116
+ active
117
+ hidden
118
+ tag
119
+ group
120
+ type
121
+ unit
122
+ options
123
+ quota
124
+ spec
125
+ stat
126
+ }
127
+ data
128
+ rawData
129
+ judgment
130
+ ooc
131
+ oos
132
+ state
133
+ history
134
+ workDate
135
+ workShift
136
+ correctiveInstruction
137
+ correctiveAction
138
+ reviewedAt
139
+ reviewer {
140
+ id
141
+ name
142
+ }
143
+ correctedAt
144
+ corrector {
145
+ id
146
+ name
147
+ }
148
+ updater {
149
+ id
150
+ name
151
+ }
152
+ updatedAt
153
+ collectedAt
154
+ reviewActivityInstance {
155
+ ...ActivityInstanceFragment
156
+ }
157
+ resolveActivityInstance {
158
+ ...ActivityInstanceFragment
159
+ }
160
+ }
161
+ }
162
+ }
163
+
164
+ fragment ActivityInstanceFragment on ActivityInstance {
165
+ activityThreads {
166
+ assignee {
167
+ name
168
+ }
169
+ output
170
+ activityApprovals {
171
+ judgment
172
+ approver {
173
+ name
174
+ }
175
+ comment
176
+ createdAt
177
+ updatedAt
178
+ terminatedAt
179
+ }
180
+ activityThreadHistories {
181
+ transaction
182
+ reason
183
+ updater {
184
+ name
185
+ }
186
+ updatedAt
187
+ state
188
+ output
189
+ }
190
+ }
191
+ }
192
+ `,
193
+ variables: {
194
+ filters
195
+ }
196
+ })
197
+
198
+ this.dataOocs = response.data.dataOocs.items
199
+ }
200
+ }
@@ -0,0 +1,108 @@
1
+ /**
2
+ * report page from 'data-set-list-page'
3
+ * datasetId is required
4
+ */
5
+ import '@operato/data-grist'
6
+ import '@things-factory/form-ui'
7
+
8
+ import { css, html } from 'lit'
9
+ import { customElement, property, query, state } from 'lit/decorators.js'
10
+
11
+ import { PageView } from '@operato/shell'
12
+ import { i18next, localize } from '@operato/i18n'
13
+ import { CommonButtonStyles, ScrollbarStyles } from '@operato/styles'
14
+ import { encodeUrlParams } from '@operato/utils'
15
+
16
+ @customElement('data-report-embed-page')
17
+ export class DataReportEmbedPage extends localize(i18next)(PageView) {
18
+ static styles = [
19
+ ScrollbarStyles,
20
+ css`
21
+ :host {
22
+ display: flex;
23
+ flex-direction: column;
24
+ padding: 0;
25
+ }
26
+
27
+ #container {
28
+ flex: 1;
29
+ padding: 0;
30
+ margin: 0;
31
+ border: 0;
32
+ }
33
+ `
34
+ ]
35
+
36
+ @query('iframe') iframe!: HTMLIFrameElement
37
+
38
+ get context() {
39
+ const filters = [
40
+ {
41
+ name: 'workDateRange',
42
+ type: 'date',
43
+ label: 'date',
44
+ operator: 'between'
45
+ }
46
+ ]
47
+ var actions = [
48
+ {
49
+ title: i18next.t('button.print'),
50
+ action: () => {
51
+ this.iframe.contentWindow?.print()
52
+ },
53
+ ...CommonButtonStyles.print
54
+ }
55
+ ]
56
+ return {
57
+ title: 'data-report-embed',
58
+ actions,
59
+ filters
60
+ }
61
+ }
62
+ render() {
63
+ return html`
64
+ <ox-filters-form-base
65
+ .filters=${this.context.filters}
66
+ @filters-change=${e => {
67
+ console.log('filters changed', e.detail)
68
+ this.reportTemplate(e.detail.filters)
69
+ }}
70
+ ?url-params-sensitive=${this.active}
71
+ ></ox-filters-form-base>
72
+ <iframe frameborder="0" style="border:0"></iframe>
73
+ `
74
+ }
75
+
76
+ async pageUpdated(changes, lifecycle) {
77
+ if (this.active) {
78
+ this.updateContext()
79
+ }
80
+ }
81
+
82
+ async reportTemplate(filters) {
83
+ // convert filters array to object
84
+ const params = filters.reduce((acc, curr) => ((acc[curr.name] = curr.value), acc), {})
85
+ Object.assign(params, this.lifecycle.params)
86
+
87
+ const { id, workDateRange, workShift, reportType, reportView } = params
88
+
89
+ /** ignoring date conditions */
90
+ if (!workDateRange[0] || !workDateRange[1] || workDateRange[0] > workDateRange[1]) {
91
+ return
92
+ }
93
+
94
+ /** urlencoded params including test values */
95
+ const urlParams = {
96
+ table: 'samples',
97
+ dataSetId: id,
98
+ startDate: workDateRange[0],
99
+ endDate: workDateRange[1],
100
+ workShift,
101
+ reportView
102
+ }
103
+
104
+ const encodedUrlParams = encodeUrlParams(urlParams)
105
+
106
+ this.iframe.src = `/data-report/${reportType}/?${encodedUrlParams}`
107
+ }
108
+ }