@things-factory/kpi 9.0.13 → 9.0.15

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 (122) hide show
  1. package/client/pages/kpi/kpi-grade-editor.ts +294 -0
  2. package/client/pages/kpi/kpi-list-page.ts +69 -1
  3. package/client/pages/kpi/kpi-overview.ts +5 -11
  4. package/client/pages/kpi-dashboard/kpi-dashboard.ts +43 -15
  5. package/client/pages/kpi-dashboard/kpi-performance-summary.ts +17 -10
  6. package/client/pages/kpi-value/kpi-value-manual-entry-form.ts +1 -0
  7. package/client/route.ts +0 -4
  8. package/dist-client/pages/kpi/kpi-grade-editor.d.ts +35 -0
  9. package/dist-client/pages/kpi/kpi-grade-editor.js +278 -0
  10. package/dist-client/pages/kpi/kpi-grade-editor.js.map +1 -0
  11. package/dist-client/pages/kpi/kpi-list-page.d.ts +4 -0
  12. package/dist-client/pages/kpi/kpi-list-page.js +64 -1
  13. package/dist-client/pages/kpi/kpi-list-page.js.map +1 -1
  14. package/dist-client/pages/kpi/kpi-overview.js +3 -11
  15. package/dist-client/pages/kpi/kpi-overview.js.map +1 -1
  16. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +44 -12
  17. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -1
  18. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +17 -10
  19. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -1
  20. package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.js +1 -0
  21. package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.js.map +1 -1
  22. package/dist-client/route.d.ts +1 -1
  23. package/dist-client/route.js +0 -3
  24. package/dist-client/route.js.map +1 -1
  25. package/dist-client/tsconfig.tsbuildinfo +1 -1
  26. package/dist-server/index.d.ts +0 -1
  27. package/dist-server/index.js +0 -1
  28. package/dist-server/index.js.map +1 -1
  29. package/dist-server/service/index.d.ts +2 -4
  30. package/dist-server/service/index.js +0 -5
  31. package/dist-server/service/index.js.map +1 -1
  32. package/dist-server/service/kpi/aggregate-kpi.js +4 -0
  33. package/dist-server/service/kpi/aggregate-kpi.js.map +1 -1
  34. package/dist-server/service/kpi/kpi-grade.types.d.ts +21 -0
  35. package/dist-server/service/kpi/kpi-grade.types.js +3 -0
  36. package/dist-server/service/kpi/kpi-grade.types.js.map +1 -0
  37. package/dist-server/service/kpi/kpi-history.d.ts +2 -0
  38. package/dist-server/service/kpi/kpi-history.js +8 -0
  39. package/dist-server/service/kpi/kpi-history.js.map +1 -1
  40. package/dist-server/service/kpi/kpi-query.d.ts +0 -2
  41. package/dist-server/service/kpi/kpi-query.js +0 -11
  42. package/dist-server/service/kpi/kpi-query.js.map +1 -1
  43. package/dist-server/service/kpi/kpi-type.d.ts +3 -0
  44. package/dist-server/service/kpi/kpi-type.js +14 -0
  45. package/dist-server/service/kpi/kpi-type.js.map +1 -1
  46. package/dist-server/service/kpi/kpi.d.ts +2 -2
  47. package/dist-server/service/kpi/kpi.js +5 -3
  48. package/dist-server/service/kpi/kpi.js.map +1 -1
  49. package/dist-server/service/kpi-alert/kpi-alert-query.js +13 -13
  50. package/dist-server/service/kpi-alert/kpi-alert-query.js.map +1 -1
  51. package/dist-server/service/kpi-category/kpi-category-type.d.ts +1 -0
  52. package/dist-server/service/kpi-category/kpi-category-type.js +5 -1
  53. package/dist-server/service/kpi-category/kpi-category-type.js.map +1 -1
  54. package/dist-server/service/kpi-value/kpi-value-grade.service.d.ts +34 -0
  55. package/dist-server/service/kpi-value/kpi-value-grade.service.js +117 -0
  56. package/dist-server/service/kpi-value/kpi-value-grade.service.js.map +1 -0
  57. package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +1 -0
  58. package/dist-server/service/kpi-value/kpi-value-mutation.js +15 -0
  59. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -1
  60. package/dist-server/service/kpi-value/kpi-value-query.d.ts +2 -0
  61. package/dist-server/service/kpi-value/kpi-value-query.js +12 -0
  62. package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -1
  63. package/dist-server/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +3 -3
  65. package/server/index.ts +0 -1
  66. package/server/service/index.ts +0 -5
  67. package/server/service/kpi/aggregate-kpi.ts +6 -0
  68. package/server/service/kpi/kpi-grade.types.ts +27 -0
  69. package/server/service/kpi/kpi-history.ts +9 -1
  70. package/server/service/kpi/kpi-query.ts +0 -6
  71. package/server/service/kpi/kpi-type.ts +13 -0
  72. package/server/service/kpi/kpi.ts +8 -4
  73. package/server/service/kpi-alert/kpi-alert-query.ts +13 -14
  74. package/server/service/kpi-category/kpi-category-type.ts +4 -1
  75. package/server/service/kpi-value/kpi-value-grade.service.ts +127 -0
  76. package/server/service/kpi-value/kpi-value-mutation.ts +9 -0
  77. package/server/service/kpi-value/kpi-value-query.ts +7 -0
  78. package/things-factory.config.js +0 -1
  79. package/client/pages/kpi-grade/kpi-grade-importer.ts +0 -90
  80. package/client/pages/kpi-grade/kpi-grade-list-page.ts +0 -405
  81. package/dist-client/pages/kpi-grade/kpi-grade-importer.d.ts +0 -23
  82. package/dist-client/pages/kpi-grade/kpi-grade-importer.js +0 -92
  83. package/dist-client/pages/kpi-grade/kpi-grade-importer.js.map +0 -1
  84. package/dist-client/pages/kpi-grade/kpi-grade-list-page.d.ts +0 -66
  85. package/dist-client/pages/kpi-grade/kpi-grade-list-page.js +0 -387
  86. package/dist-client/pages/kpi-grade/kpi-grade-list-page.js.map +0 -1
  87. package/dist-server/migrations/1752188906708-SeedKpiCategory.d.ts +0 -5
  88. package/dist-server/migrations/1752188906708-SeedKpiCategory.js +0 -56
  89. package/dist-server/migrations/1752188906708-SeedKpiCategory.js.map +0 -1
  90. package/dist-server/migrations/1752190849681-SeedKpi.d.ts +0 -5
  91. package/dist-server/migrations/1752190849681-SeedKpi.js +0 -107
  92. package/dist-server/migrations/1752190849681-SeedKpi.js.map +0 -1
  93. package/dist-server/migrations/1752191090459-SeedKpiGrade.d.ts +0 -5
  94. package/dist-server/migrations/1752191090459-SeedKpiGrade.js +0 -271
  95. package/dist-server/migrations/1752191090459-SeedKpiGrade.js.map +0 -1
  96. package/dist-server/migrations/index.d.ts +0 -1
  97. package/dist-server/migrations/index.js +0 -12
  98. package/dist-server/migrations/index.js.map +0 -1
  99. package/dist-server/service/kpi-grade/index.d.ts +0 -6
  100. package/dist-server/service/kpi-grade/index.js +0 -10
  101. package/dist-server/service/kpi-grade/index.js.map +0 -1
  102. package/dist-server/service/kpi-grade/kpi-grade-mutation.d.ts +0 -10
  103. package/dist-server/service/kpi-grade/kpi-grade-mutation.js +0 -151
  104. package/dist-server/service/kpi-grade/kpi-grade-mutation.js.map +0 -1
  105. package/dist-server/service/kpi-grade/kpi-grade-query.d.ts +0 -13
  106. package/dist-server/service/kpi-grade/kpi-grade-query.js +0 -92
  107. package/dist-server/service/kpi-grade/kpi-grade-query.js.map +0 -1
  108. package/dist-server/service/kpi-grade/kpi-grade-type.d.ts +0 -29
  109. package/dist-server/service/kpi-grade/kpi-grade-type.js +0 -113
  110. package/dist-server/service/kpi-grade/kpi-grade-type.js.map +0 -1
  111. package/dist-server/service/kpi-grade/kpi-grade.d.ts +0 -24
  112. package/dist-server/service/kpi-grade/kpi-grade.js +0 -117
  113. package/dist-server/service/kpi-grade/kpi-grade.js.map +0 -1
  114. package/server/migrations/1752188906708-SeedKpiCategory.ts +0 -61
  115. package/server/migrations/1752190849681-SeedKpi.ts +0 -112
  116. package/server/migrations/1752191090459-SeedKpiGrade.ts +0 -270
  117. package/server/migrations/index.ts +0 -9
  118. package/server/service/kpi-grade/index.ts +0 -7
  119. package/server/service/kpi-grade/kpi-grade-mutation.ts +0 -146
  120. package/server/service/kpi-grade/kpi-grade-query.ts +0 -58
  121. package/server/service/kpi-grade/kpi-grade-type.ts +0 -82
  122. package/server/service/kpi-grade/kpi-grade.ts +0 -101
@@ -1,387 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import '@material/web/button/elevated-button.js';
4
- import '@operato/data-grist/ox-grist.js';
5
- import '@operato/data-grist/ox-filters-form.js';
6
- import '@operato/data-grist/ox-record-creator.js';
7
- import { CommonButtonStyles, CommonHeaderStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles';
8
- import { PageView, store } from '@operato/shell';
9
- import { css, html } from 'lit';
10
- import { customElement, property, query } from 'lit/decorators.js';
11
- import { ScopedElementsMixin } from '@open-wc/scoped-elements';
12
- import { DataGrist } from '@operato/data-grist';
13
- import { client } from '@operato/graphql';
14
- import { i18next, localize } from '@operato/i18n';
15
- import { notify, openPopup } from '@operato/layout';
16
- import { OxPrompt } from '@operato/popup';
17
- import { isMobileDevice } from '@operato/utils';
18
- import { connect } from 'pwa-helpers/connect-mixin';
19
- import gql from 'graphql-tag';
20
- import { KpiGradeImporter } from './kpi-grade-importer';
21
- let KpiGradeListPage = class KpiGradeListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
22
- constructor() {
23
- super(...arguments);
24
- this.mode = isMobileDevice() ? 'CARD' : 'GRID';
25
- }
26
- static { this.styles = [
27
- ScrollbarStyles,
28
- CommonGristStyles,
29
- CommonHeaderStyles,
30
- css `
31
- :host {
32
- display: flex;
33
-
34
- width: 100%;
35
-
36
- --grid-record-emphasized-background-color: #8b0000;
37
- --grid-record-emphasized-color: #ff6b6b;
38
- }
39
-
40
- ox-grist {
41
- overflow-y: auto;
42
- flex: 1;
43
- }
44
-
45
- ox-filters-form {
46
- flex: 1;
47
- }
48
- `
49
- ]; }
50
- static get scopedElements() {
51
- return {
52
- 'kpi-grade-importer': KpiGradeImporter
53
- };
54
- }
55
- get context() {
56
- return {
57
- title: i18next.t('title.kpi grade list'),
58
- search: {
59
- handler: (search) => {
60
- this.grist.searchText = search;
61
- },
62
- value: this.grist.searchText
63
- },
64
- filter: {
65
- handler: () => {
66
- this.grist.toggleHeadroom();
67
- }
68
- },
69
- help: 'kpi/kpi-grade',
70
- actions: [
71
- {
72
- title: i18next.t('button.save'),
73
- action: this._updateKpiGrade.bind(this),
74
- ...CommonButtonStyles.save
75
- },
76
- {
77
- title: i18next.t('button.delete'),
78
- action: this._deleteKpiGrade.bind(this),
79
- ...CommonButtonStyles.delete
80
- }
81
- ],
82
- exportable: {
83
- name: i18next.t('title.kpi grade list'),
84
- data: this.exportHandler.bind(this)
85
- },
86
- importable: {
87
- handler: this.importHandler.bind(this)
88
- }
89
- };
90
- }
91
- render() {
92
- const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID');
93
- return html `
94
- <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
95
- <div slot="headroom" class="header">
96
- <div class="filters">
97
- <ox-filters-form autofocus without-search></ox-filters-form>
98
-
99
- <div id="modes">
100
- <md-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>
101
- <md-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>
102
- <md-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
103
- </div>
104
-
105
- <ox-record-creator id="add" .callback=${this.creationCallback.bind(this)}>
106
- <button>
107
- <md-icon>add</md-icon>
108
- </button>
109
- </ox-record-creator>
110
- </div>
111
- </div>
112
- </ox-grist>
113
- `;
114
- }
115
- async pageInitialized(lifecycle) {
116
- this.gristConfig = {
117
- list: {
118
- fields: [
119
- 'kpi',
120
- 'version',
121
- 'name',
122
- 'description',
123
- 'minValue',
124
- 'maxValue',
125
- 'score',
126
- 'color',
127
- 'active',
128
- 'createdAt',
129
- 'updatedAt',
130
- 'creator',
131
- 'updater'
132
- ],
133
- details: [
134
- 'kpi',
135
- 'version',
136
- 'name',
137
- 'description',
138
- 'minValue',
139
- 'maxValue',
140
- 'score',
141
- 'color',
142
- 'active',
143
- 'createdAt',
144
- 'updatedAt',
145
- 'creator',
146
- 'updater'
147
- ]
148
- },
149
- columns: [
150
- { type: 'gutter', gutterName: 'sequence' },
151
- { type: 'gutter', gutterName: 'row-selector', multiple: true },
152
- {
153
- type: 'resource-object',
154
- name: 'kpi',
155
- label: true,
156
- header: 'KPI',
157
- record: {
158
- editable: true,
159
- options: {
160
- title: i18next.t('title.lookup kpi'),
161
- queryName: 'kpis'
162
- }
163
- },
164
- width: 200
165
- },
166
- { type: 'number', name: 'version', header: '버전', record: { editable: true }, width: 80 },
167
- { type: 'string', name: 'name', header: '등급명', record: { editable: true }, width: 120 },
168
- { type: 'string', name: 'description', header: '설명', record: { editable: true }, width: 200 },
169
- { type: 'number', name: 'minValue', header: '최소값', record: { editable: true }, width: 100 },
170
- { type: 'number', name: 'maxValue', header: '최대값', record: { editable: true }, width: 100 },
171
- { type: 'number', name: 'score', header: '점수', record: { editable: true }, width: 80 },
172
- { type: 'string', name: 'color', header: '색상', record: { editable: true }, width: 80 },
173
- { type: 'checkbox', name: 'active', label: true, header: '활성', record: { editable: true }, width: 60 },
174
- { type: 'datetime', name: 'createdAt', header: '생성일', record: { editable: false }, width: 180 },
175
- { type: 'datetime', name: 'updatedAt', header: '수정일', record: { editable: false }, width: 180 },
176
- {
177
- type: 'resource-object',
178
- name: 'creator',
179
- header: '생성자',
180
- record: { editable: false },
181
- width: 120
182
- },
183
- {
184
- type: 'resource-object',
185
- name: 'updater',
186
- header: '수정자',
187
- record: { editable: false },
188
- width: 120
189
- }
190
- ],
191
- rows: {
192
- appendable: false,
193
- selectable: {
194
- multiple: true
195
- }
196
- },
197
- sorters: [{ name: 'name' }]
198
- };
199
- }
200
- async pageUpdated(changes, lifecycle) {
201
- if (this.active) {
202
- // do something here when this page just became as active
203
- }
204
- }
205
- async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }) {
206
- const response = await client.query({
207
- query: gql `
208
- query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
209
- responses: kpiGrades(filters: $filters, pagination: $pagination, sortings: $sortings) {
210
- items {
211
- id
212
- name
213
- description
214
- active
215
- kpi {
216
- id
217
- name
218
- }
219
- version
220
- updater {
221
- id
222
- name
223
- }
224
- updatedAt
225
- creator {
226
- id
227
- name
228
- }
229
- createdAt
230
- }
231
- total
232
- }
233
- }
234
- `,
235
- variables: {
236
- filters,
237
- pagination: { page, limit },
238
- sortings
239
- }
240
- });
241
- return {
242
- total: response.data.responses.total || 0,
243
- records: response.data.responses.items || []
244
- };
245
- }
246
- async _deleteKpiGrade() {
247
- if (await OxPrompt.open({
248
- title: i18next.t('text.are_you_sure'),
249
- text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),
250
- confirmButton: { text: i18next.t('button.confirm') },
251
- cancelButton: { text: i18next.t('button.cancel') }
252
- })) {
253
- const ids = this.grist.selected.map(record => record.id);
254
- if (ids && ids.length > 0) {
255
- const response = await client.mutate({
256
- mutation: gql `
257
- mutation ($ids: [String!]!) {
258
- deleteKpiGrades(ids: $ids)
259
- }
260
- `,
261
- variables: {
262
- ids
263
- }
264
- });
265
- if (!response.errors) {
266
- this.grist.fetch();
267
- notify({
268
- message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
269
- });
270
- }
271
- }
272
- }
273
- }
274
- async _updateKpiGrade() {
275
- let patches = this.grist.dirtyRecords;
276
- if (patches && patches.length) {
277
- patches = patches.map(patch => {
278
- let patchField = patch.id ? { id: patch.id } : {};
279
- const dirtyFields = patch.__dirtyfields__;
280
- for (let key in dirtyFields) {
281
- patchField[key] = dirtyFields[key].after;
282
- }
283
- patchField.cuFlag = patch.__dirty__;
284
- return patchField;
285
- });
286
- const response = await client.mutate({
287
- mutation: gql `
288
- mutation ($patches: [KpiGradePatch!]!) {
289
- updateMultipleKpiGrade(patches: $patches) {
290
- name
291
- }
292
- }
293
- `,
294
- variables: {
295
- patches
296
- }
297
- });
298
- if (!response.errors) {
299
- this.grist.fetch();
300
- }
301
- }
302
- }
303
- async creationCallback(kpiGrade) {
304
- try {
305
- const response = await client.query({
306
- query: gql `
307
- mutation ($kpiGrade: NewKpiGrade!) {
308
- createKpiGrade(kpiGrade: $kpiGrade) {
309
- id
310
- }
311
- }
312
- `,
313
- variables: {
314
- kpiGrade
315
- },
316
- context: {
317
- hasUpload: true
318
- }
319
- });
320
- if (!response.errors) {
321
- this.grist.fetch();
322
- document.dispatchEvent(new CustomEvent('notify', {
323
- detail: {
324
- message: i18next.t('text.data_created_successfully')
325
- }
326
- }));
327
- }
328
- return true;
329
- }
330
- catch (ex) {
331
- console.error(ex);
332
- document.dispatchEvent(new CustomEvent('notify', {
333
- detail: {
334
- type: 'error',
335
- message: i18next.t('text.error')
336
- }
337
- }));
338
- return false;
339
- }
340
- }
341
- async exportHandler() {
342
- const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records;
343
- const targetFieldSet = new Set(['id', 'name', 'description', 'active']);
344
- return exportTargets.map(kpiGrade => {
345
- let tempObj = {};
346
- for (const field of targetFieldSet) {
347
- tempObj[field] = kpiGrade[field];
348
- }
349
- return tempObj;
350
- });
351
- }
352
- async importHandler(records) {
353
- const popup = openPopup(html `
354
- <kpi-grade-importer
355
- .kpiGrades=${records}
356
- @imported=${() => {
357
- history.back();
358
- this.grist.fetch();
359
- }}
360
- ></kpi-grade-importer>
361
- `, {
362
- backdrop: true,
363
- size: 'large',
364
- title: i18next.t('title.import kpi-grade')
365
- });
366
- popup.onclosed = () => {
367
- this.grist.fetch();
368
- };
369
- }
370
- };
371
- __decorate([
372
- property({ type: Object }),
373
- __metadata("design:type", Object)
374
- ], KpiGradeListPage.prototype, "gristConfig", void 0);
375
- __decorate([
376
- property({ type: String }),
377
- __metadata("design:type", String)
378
- ], KpiGradeListPage.prototype, "mode", void 0);
379
- __decorate([
380
- query('ox-grist'),
381
- __metadata("design:type", DataGrist)
382
- ], KpiGradeListPage.prototype, "grist", void 0);
383
- KpiGradeListPage = __decorate([
384
- customElement('kpi-grade-list-page')
385
- ], KpiGradeListPage);
386
- export { KpiGradeListPage };
387
- //# sourceMappingURL=kpi-grade-list-page.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kpi-grade-list-page.js","sourceRoot":"","sources":["../../../client/pages/kpi-grade/kpi-grade-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@operato/data-grist/ox-grist.js'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/data-grist/ox-record-creator.js'\n\nimport { CommonButtonStyles, CommonHeaderStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView, store } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { ColumnConfig, DataGrist, FetchOption } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { OxPopup, OxPrompt } from '@operato/popup'\nimport { isMobileDevice } from '@operato/utils'\n\nimport { connect } from 'pwa-helpers/connect-mixin'\nimport gql from 'graphql-tag'\n\nimport { KpiGradeImporter } from './kpi-grade-importer'\n\n@customElement('kpi-grade-list-page')\nexport class KpiGradeListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `\n ]\n\n static get scopedElements() {\n return {\n 'kpi-grade-importer': KpiGradeImporter\n }\n }\n\n @property({ type: Object }) gristConfig: any\n @property({ type: String }) mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('title.kpi grade list'),\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist.searchText\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'kpi/kpi-grade',\n actions: [\n {\n title: i18next.t('button.save'),\n action: this._updateKpiGrade.bind(this),\n ...CommonButtonStyles.save\n },\n {\n title: i18next.t('button.delete'),\n action: this._deleteKpiGrade.bind(this),\n ...CommonButtonStyles.delete\n }\n ],\n exportable: {\n name: i18next.t('title.kpi grade list'),\n data: this.exportHandler.bind(this)\n },\n importable: {\n handler: this.importHandler.bind(this)\n }\n }\n }\n\n render() {\n const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form autofocus without-search></ox-filters-form>\n\n <div id=\"modes\">\n <md-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>\n <md-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>\n <md-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>\n </div>\n\n <ox-record-creator id=\"add\" .callback=${this.creationCallback.bind(this)}>\n <button>\n <md-icon>add</md-icon>\n </button>\n </ox-record-creator>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle: any) {\n this.gristConfig = {\n list: {\n fields: [\n 'kpi',\n 'version',\n 'name',\n 'description',\n 'minValue',\n 'maxValue',\n 'score',\n 'color',\n 'active',\n 'createdAt',\n 'updatedAt',\n 'creator',\n 'updater'\n ],\n details: [\n 'kpi',\n 'version',\n 'name',\n 'description',\n 'minValue',\n 'maxValue',\n 'score',\n 'color',\n 'active',\n 'createdAt',\n 'updatedAt',\n 'creator',\n 'updater'\n ]\n },\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'resource-object',\n name: 'kpi',\n label: true,\n header: 'KPI',\n record: {\n editable: true,\n options: {\n title: i18next.t('title.lookup kpi'),\n queryName: 'kpis'\n }\n },\n width: 200\n },\n { type: 'number', name: 'version', header: '버전', record: { editable: true }, width: 80 },\n { type: 'string', name: 'name', header: '등급명', record: { editable: true }, width: 120 },\n { type: 'string', name: 'description', header: '설명', record: { editable: true }, width: 200 },\n { type: 'number', name: 'minValue', header: '최소값', record: { editable: true }, width: 100 },\n { type: 'number', name: 'maxValue', header: '최대값', record: { editable: true }, width: 100 },\n { type: 'number', name: 'score', header: '점수', record: { editable: true }, width: 80 },\n { type: 'string', name: 'color', header: '색상', record: { editable: true }, width: 80 },\n { type: 'checkbox', name: 'active', label: true, header: '활성', record: { editable: true }, width: 60 },\n { type: 'datetime', name: 'createdAt', header: '생성일', record: { editable: false }, width: 180 },\n { type: 'datetime', name: 'updatedAt', header: '수정일', record: { editable: false }, width: 180 },\n {\n type: 'resource-object',\n name: 'creator',\n header: '생성자',\n record: { editable: false },\n width: 120\n },\n {\n type: 'resource-object',\n name: 'updater',\n header: '수정자',\n record: { editable: false },\n width: 120\n }\n ],\n rows: {\n appendable: false,\n selectable: {\n multiple: true\n }\n },\n sorters: [{ name: 'name' }]\n }\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n // do something here when this page just became as active\n }\n }\n\n async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: kpiGrades(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name\n description\n active\n kpi {\n id\n name\n }\n version\n updater {\n id\n name\n }\n updatedAt\n creator {\n id\n name\n }\n createdAt\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: response.data.responses.items || []\n }\n }\n\n async _deleteKpiGrade() {\n if (\n await OxPrompt.open({\n title: i18next.t('text.are_you_sure'),\n text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const ids = this.grist.selected.map(record => record.id)\n if (ids && ids.length > 0) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteKpiGrades(ids: $ids)\n }\n `,\n variables: {\n ids\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n notify({\n message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })\n })\n }\n }\n }\n }\n\n async _updateKpiGrade() {\n let patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(patch => {\n let patchField: any = patch.id ? { id: patch.id } : {}\n const dirtyFields = patch.__dirtyfields__\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($patches: [KpiGradePatch!]!) {\n updateMultipleKpiGrade(patches: $patches) {\n name\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n }\n }\n }\n\n async creationCallback(kpiGrade) {\n try {\n const response = await client.query({\n query: gql`\n mutation ($kpiGrade: NewKpiGrade!) {\n createKpiGrade(kpiGrade: $kpiGrade) {\n id\n }\n }\n `,\n variables: {\n kpiGrade\n },\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n message: i18next.t('text.data_created_successfully')\n }\n })\n )\n }\n\n return true\n } catch (ex) {\n console.error(ex)\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n type: 'error',\n message: i18next.t('text.error')\n }\n })\n )\n return false\n }\n }\n\n async exportHandler() {\n const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records\n const targetFieldSet = new Set(['id', 'name', 'description', 'active'])\n\n return exportTargets.map(kpiGrade => {\n let tempObj = {}\n for (const field of targetFieldSet) {\n tempObj[field] = kpiGrade[field]\n }\n\n return tempObj\n })\n }\n\n async importHandler(records) {\n const popup = openPopup(\n html`\n <kpi-grade-importer\n .kpiGrades=${records}\n @imported=${() => {\n history.back()\n this.grist.fetch()\n }}\n ></kpi-grade-importer>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.import kpi-grade')\n }\n )\n\n popup.onclosed = () => {\n this.grist.fetch()\n }\n }\n}\n"]}
@@ -1,5 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from 'typeorm';
2
- export declare class SeedKpiCategory1752188906708 implements MigrationInterface {
3
- up(queryRunner: QueryRunner): Promise<any>;
4
- down(queryRunner: QueryRunner): Promise<any>;
5
- }
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SeedKpiCategory1752188906708 = void 0;
4
- const shell_1 = require("@things-factory/shell");
5
- const kpi_category_js_1 = require("../service/kpi-category/kpi-category.js");
6
- const SEED = [
7
- {
8
- name: '일정성과',
9
- description: '프로젝트 일정 준수 및 일정 이탈 수준 평가'
10
- },
11
- {
12
- name: '비용성과',
13
- description: '프로젝트 비용 집행 및 비용성과 수준 평가'
14
- },
15
- {
16
- name: '품질성과',
17
- description: '품질 불합격률, 품질성과 수준 등 품질 관련 성과 평가'
18
- },
19
- {
20
- name: '안전성과',
21
- description: '재해율, SL-PA 등 안전 관련 성과 평가'
22
- },
23
- {
24
- name: '환경성과',
25
- description: '건설폐기물 등 환경 관련 성과 평가'
26
- },
27
- {
28
- name: '생산성과',
29
- description: '투입인력 생산성 등 생산성 관련 성과 평가'
30
- }
31
- ];
32
- class SeedKpiCategory1752188906708 {
33
- async up(queryRunner) {
34
- const repository = (0, shell_1.getRepository)(kpi_category_js_1.KpiCategory);
35
- const domain = await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({
36
- name: 'SYSTEM'
37
- });
38
- return await Promise.all(SEED.map(async (kpiCategory) => {
39
- await repository.save({
40
- ...kpiCategory,
41
- domain
42
- });
43
- }));
44
- }
45
- async down(queryRunner) {
46
- const repository = (0, shell_1.getRepository)(kpi_category_js_1.KpiCategory);
47
- const domain = await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({
48
- name: 'SYSTEM'
49
- });
50
- return await Promise.all(SEED.reverse().map(async (kpiCategory) => {
51
- await repository.delete({ name: kpiCategory.name, domain: { id: domain.id } });
52
- }));
53
- }
54
- }
55
- exports.SeedKpiCategory1752188906708 = SeedKpiCategory1752188906708;
56
- //# sourceMappingURL=1752188906708-SeedKpiCategory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1752188906708-SeedKpiCategory.js","sourceRoot":"","sources":["../../server/migrations/1752188906708-SeedKpiCategory.ts"],"names":[],"mappings":";;;AACA,iDAA6D;AAC7D,6EAAqE;AAErE,MAAM,IAAI,GAAG;IACX;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,0BAA0B;KACxC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,yBAAyB;KACvC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,gCAAgC;KAC9C;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,0BAA0B;KACxC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,yBAAyB;KACvC;CACF,CAAA;AAED,MAAa,4BAA4B;IAChC,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,6BAAW,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAW,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAC,SAAS,CAAC;YAC3D,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QAEF,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;YAC3B,MAAM,UAAU,CAAC,IAAI,CAAC;gBACpB,GAAG,WAAW;gBACd,MAAM;aACP,CAAC,CAAA;QACJ,CAAC,CAAC,CACH,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,6BAAW,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAW,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAC,SAAS,CAAC;YAC3D,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QAEF,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;YACrC,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAChF,CAAC,CAAC,CACH,CAAA;IACH,CAAC;CACF;AA7BD,oEA6BC","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { KpiCategory } from '../service/kpi-category/kpi-category.js'\n\nconst SEED = [\n {\n name: '일정성과',\n description: '프로젝트 일정 준수 및 일정 이탈 수준 평가'\n },\n {\n name: '비용성과',\n description: '프로젝트 비용 집행 및 비용성과 수준 평가'\n },\n {\n name: '품질성과',\n description: '품질 불합격률, 품질성과 수준 등 품질 관련 성과 평가'\n },\n {\n name: '안전성과',\n description: '재해율, SL-PA 등 안전 관련 성과 평가'\n },\n {\n name: '환경성과',\n description: '건설폐기물 등 환경 관련 성과 평가'\n },\n {\n name: '생산성과',\n description: '투입인력 생산성 등 생산성 관련 성과 평가'\n }\n]\n\nexport class SeedKpiCategory1752188906708 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<any> {\n const repository = getRepository(KpiCategory)\n const domain: Domain = await getRepository(Domain).findOneBy({\n name: 'SYSTEM'\n })\n\n return await Promise.all(\n SEED.map(async kpiCategory => {\n await repository.save({\n ...kpiCategory,\n domain\n })\n })\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<any> {\n const repository = getRepository(KpiCategory)\n const domain: Domain = await getRepository(Domain).findOneBy({\n name: 'SYSTEM'\n })\n\n return await Promise.all(\n SEED.reverse().map(async kpiCategory => {\n await repository.delete({ name: kpiCategory.name, domain: { id: domain.id } })\n })\n )\n }\n}\n"]}
@@ -1,5 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from 'typeorm';
2
- export declare class SeedKpi1752190849681 implements MigrationInterface {
3
- up(queryRunner: QueryRunner): Promise<any>;
4
- down(queryRunner: QueryRunner): Promise<any>;
5
- }
@@ -1,107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SeedKpi1752190849681 = void 0;
4
- const shell_1 = require("@things-factory/shell");
5
- const kpi_js_1 = require("../service/kpi/kpi.js");
6
- const SEED = [
7
- {
8
- name: '일정 이탈 수준',
9
- description: '프로젝트 일정 이탈 수준 평가',
10
- categoryName: '일정성과',
11
- formula: 'Table(1~5점)',
12
- scoreType: 'table',
13
- dataType: 'score'
14
- },
15
- {
16
- name: '일정성과 수준 평가',
17
- description: '일정성과 종합 평가',
18
- categoryName: '일정성과',
19
- formula: '감리자 1~5점 척도',
20
- scoreType: 'inspector',
21
- dataType: 'score'
22
- },
23
- {
24
- name: '비용성과 수준 평가',
25
- description: '비용성과 종합 평가',
26
- categoryName: '비용성과',
27
- formula: '감리자 1~5점 척도',
28
- scoreType: 'inspector',
29
- dataType: 'score'
30
- },
31
- {
32
- name: '품질 SL-PA 결과값',
33
- description: '품질 SL-PA 결과',
34
- categoryName: '품질성과',
35
- formula: 'Python(1~5점)',
36
- scoreType: 'python',
37
- dataType: 'score'
38
- },
39
- {
40
- name: '품질성과 수준 평가',
41
- description: '품질성과 종합 평가',
42
- categoryName: '품질성과',
43
- formula: '감리자 1~5점 척도',
44
- scoreType: 'inspector',
45
- dataType: 'score'
46
- },
47
- {
48
- name: '안전 SL-PA 결과값',
49
- description: '안전 SL-PA 결과',
50
- categoryName: '안전성과',
51
- formula: 'Python(1~5점)',
52
- scoreType: 'python',
53
- dataType: 'score'
54
- },
55
- {
56
- name: '안전성과 수준 평가',
57
- description: '안전성과 종합 평가',
58
- categoryName: '안전성과',
59
- formula: '감리자 1~5점 척도',
60
- scoreType: 'inspector',
61
- dataType: 'score'
62
- },
63
- {
64
- name: '환경성과 수준 평가',
65
- description: '환경성과 종합 평가',
66
- categoryName: '환경성과',
67
- formula: '감리자 1~5점 척도',
68
- scoreType: 'inspector',
69
- dataType: 'score'
70
- },
71
- {
72
- name: '생산성과 수준 평가',
73
- description: '생산성과 종합 평가',
74
- categoryName: '생산성과',
75
- formula: '감리자 1~5점 척도',
76
- scoreType: 'inspector',
77
- dataType: 'score'
78
- }
79
- ];
80
- class SeedKpi1752190849681 {
81
- async up(queryRunner) {
82
- const repository = (0, shell_1.getRepository)(kpi_js_1.Kpi);
83
- const categoryRepository = (0, shell_1.getRepository)('KpiCategory');
84
- const domain = await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({
85
- name: 'SYSTEM'
86
- });
87
- return await Promise.all(SEED.map(async (kpi) => {
88
- const category = await categoryRepository.findOneBy({ name: kpi.categoryName, domain: { id: domain.id } });
89
- await repository.save({
90
- ...kpi,
91
- category,
92
- domain
93
- });
94
- }));
95
- }
96
- async down(queryRunner) {
97
- const repository = (0, shell_1.getRepository)(kpi_js_1.Kpi);
98
- const domain = await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({
99
- name: 'SYSTEM'
100
- });
101
- return await Promise.all(SEED.reverse().map(async (kpi) => {
102
- await repository.delete({ name: kpi.name, domain: { id: domain.id } });
103
- }));
104
- }
105
- }
106
- exports.SeedKpi1752190849681 = SeedKpi1752190849681;
107
- //# sourceMappingURL=1752190849681-SeedKpi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1752190849681-SeedKpi.js","sourceRoot":"","sources":["../../server/migrations/1752190849681-SeedKpi.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { Kpi } from '../service/kpi/kpi.js'\n\nconst SEED = [\n {\n name: '일정 이탈 수준',\n description: '프로젝트 일정 이탈 수준 평가',\n categoryName: '일정성과',\n formula: 'Table(1~5점)',\n scoreType: 'table',\n dataType: 'score'\n },\n {\n name: '일정성과 수준 평가',\n description: '일정성과 종합 평가',\n categoryName: '일정성과',\n formula: '감리자 1~5점 척도',\n scoreType: 'inspector',\n dataType: 'score'\n },\n {\n name: '비용성과 수준 평가',\n description: '비용성과 종합 평가',\n categoryName: '비용성과',\n formula: '감리자 1~5점 척도',\n scoreType: 'inspector',\n dataType: 'score'\n },\n {\n name: '품질 SL-PA 결과값',\n description: '품질 SL-PA 결과',\n categoryName: '품질성과',\n formula: 'Python(1~5점)',\n scoreType: 'python',\n dataType: 'score'\n },\n {\n name: '품질성과 수준 평가',\n description: '품질성과 종합 평가',\n categoryName: '품질성과',\n formula: '감리자 1~5점 척도',\n scoreType: 'inspector',\n dataType: 'score'\n },\n {\n name: '안전 SL-PA 결과값',\n description: '안전 SL-PA 결과',\n categoryName: '안전성과',\n formula: 'Python(1~5점)',\n scoreType: 'python',\n dataType: 'score'\n },\n {\n name: '안전성과 수준 평가',\n description: '안전성과 종합 평가',\n categoryName: '안전성과',\n formula: '감리자 1~5점 척도',\n scoreType: 'inspector',\n dataType: 'score'\n },\n {\n name: '환경성과 수준 평가',\n description: '환경성과 종합 평가',\n categoryName: '환경성과',\n formula: '감리자 1~5점 척도',\n scoreType: 'inspector',\n dataType: 'score'\n },\n {\n name: '생산성과 수준 평가',\n description: '생산성과 종합 평가',\n categoryName: '생산성과',\n formula: '감리자 1~5점 척도',\n scoreType: 'inspector',\n dataType: 'score'\n }\n]\n\nexport class SeedKpi1752190849681 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<any> {\n const repository = getRepository(Kpi)\n const categoryRepository = getRepository('KpiCategory')\n const domain: Domain = await getRepository(Domain).findOneBy({\n name: 'SYSTEM'\n })\n\n return await Promise.all(\n SEED.map(async kpi => {\n const category = await categoryRepository.findOneBy({ name: kpi.categoryName, domain: { id: domain.id } })\n await repository.save({\n ...kpi,\n category,\n domain\n })\n })\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<any> {\n const repository = getRepository(Kpi)\n const domain: Domain = await getRepository(Domain).findOneBy({\n name: 'SYSTEM'\n })\n\n return await Promise.all(\n SEED.reverse().map(async kpi => {\n await repository.delete({ name: kpi.name, domain: { id: domain.id } })\n })\n )\n }\n}\n"]}
@@ -1,5 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from 'typeorm';
2
- export declare class SeedKpiGrade1752191090459 implements MigrationInterface {
3
- up(queryRunner: QueryRunner): Promise<any>;
4
- down(queryRunner: QueryRunner): Promise<any>;
5
- }