@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.
- package/client/pages/kpi/kpi-grade-editor.ts +294 -0
- package/client/pages/kpi/kpi-list-page.ts +69 -1
- package/client/pages/kpi/kpi-overview.ts +5 -11
- package/client/pages/kpi-dashboard/kpi-dashboard.ts +43 -15
- package/client/pages/kpi-dashboard/kpi-performance-summary.ts +17 -10
- package/client/pages/kpi-value/kpi-value-manual-entry-form.ts +1 -0
- package/client/route.ts +0 -4
- package/dist-client/pages/kpi/kpi-grade-editor.d.ts +35 -0
- package/dist-client/pages/kpi/kpi-grade-editor.js +278 -0
- package/dist-client/pages/kpi/kpi-grade-editor.js.map +1 -0
- package/dist-client/pages/kpi/kpi-list-page.d.ts +4 -0
- package/dist-client/pages/kpi/kpi-list-page.js +64 -1
- package/dist-client/pages/kpi/kpi-list-page.js.map +1 -1
- package/dist-client/pages/kpi/kpi-overview.js +3 -11
- package/dist-client/pages/kpi/kpi-overview.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +44 -12
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +17 -10
- package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -1
- package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.js +1 -0
- package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +0 -3
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/index.d.ts +0 -1
- package/dist-server/index.js +0 -1
- package/dist-server/index.js.map +1 -1
- package/dist-server/service/index.d.ts +2 -4
- package/dist-server/service/index.js +0 -5
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/kpi/aggregate-kpi.js +4 -0
- package/dist-server/service/kpi/aggregate-kpi.js.map +1 -1
- package/dist-server/service/kpi/kpi-grade.types.d.ts +21 -0
- package/dist-server/service/kpi/kpi-grade.types.js +3 -0
- package/dist-server/service/kpi/kpi-grade.types.js.map +1 -0
- package/dist-server/service/kpi/kpi-history.d.ts +2 -0
- package/dist-server/service/kpi/kpi-history.js +8 -0
- package/dist-server/service/kpi/kpi-history.js.map +1 -1
- package/dist-server/service/kpi/kpi-query.d.ts +0 -2
- package/dist-server/service/kpi/kpi-query.js +0 -11
- package/dist-server/service/kpi/kpi-query.js.map +1 -1
- package/dist-server/service/kpi/kpi-type.d.ts +3 -0
- package/dist-server/service/kpi/kpi-type.js +14 -0
- package/dist-server/service/kpi/kpi-type.js.map +1 -1
- package/dist-server/service/kpi/kpi.d.ts +2 -2
- package/dist-server/service/kpi/kpi.js +5 -3
- package/dist-server/service/kpi/kpi.js.map +1 -1
- package/dist-server/service/kpi-alert/kpi-alert-query.js +13 -13
- package/dist-server/service/kpi-alert/kpi-alert-query.js.map +1 -1
- package/dist-server/service/kpi-category/kpi-category-type.d.ts +1 -0
- package/dist-server/service/kpi-category/kpi-category-type.js +5 -1
- package/dist-server/service/kpi-category/kpi-category-type.js.map +1 -1
- package/dist-server/service/kpi-value/kpi-value-grade.service.d.ts +34 -0
- package/dist-server/service/kpi-value/kpi-value-grade.service.js +117 -0
- package/dist-server/service/kpi-value/kpi-value-grade.service.js.map +1 -0
- package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +1 -0
- package/dist-server/service/kpi-value/kpi-value-mutation.js +15 -0
- package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -1
- package/dist-server/service/kpi-value/kpi-value-query.d.ts +2 -0
- package/dist-server/service/kpi-value/kpi-value-query.js +12 -0
- package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/server/index.ts +0 -1
- package/server/service/index.ts +0 -5
- package/server/service/kpi/aggregate-kpi.ts +6 -0
- package/server/service/kpi/kpi-grade.types.ts +27 -0
- package/server/service/kpi/kpi-history.ts +9 -1
- package/server/service/kpi/kpi-query.ts +0 -6
- package/server/service/kpi/kpi-type.ts +13 -0
- package/server/service/kpi/kpi.ts +8 -4
- package/server/service/kpi-alert/kpi-alert-query.ts +13 -14
- package/server/service/kpi-category/kpi-category-type.ts +4 -1
- package/server/service/kpi-value/kpi-value-grade.service.ts +127 -0
- package/server/service/kpi-value/kpi-value-mutation.ts +9 -0
- package/server/service/kpi-value/kpi-value-query.ts +7 -0
- package/things-factory.config.js +0 -1
- package/client/pages/kpi-grade/kpi-grade-importer.ts +0 -90
- package/client/pages/kpi-grade/kpi-grade-list-page.ts +0 -405
- package/dist-client/pages/kpi-grade/kpi-grade-importer.d.ts +0 -23
- package/dist-client/pages/kpi-grade/kpi-grade-importer.js +0 -92
- package/dist-client/pages/kpi-grade/kpi-grade-importer.js.map +0 -1
- package/dist-client/pages/kpi-grade/kpi-grade-list-page.d.ts +0 -66
- package/dist-client/pages/kpi-grade/kpi-grade-list-page.js +0 -387
- package/dist-client/pages/kpi-grade/kpi-grade-list-page.js.map +0 -1
- package/dist-server/migrations/1752188906708-SeedKpiCategory.d.ts +0 -5
- package/dist-server/migrations/1752188906708-SeedKpiCategory.js +0 -56
- package/dist-server/migrations/1752188906708-SeedKpiCategory.js.map +0 -1
- package/dist-server/migrations/1752190849681-SeedKpi.d.ts +0 -5
- package/dist-server/migrations/1752190849681-SeedKpi.js +0 -107
- package/dist-server/migrations/1752190849681-SeedKpi.js.map +0 -1
- package/dist-server/migrations/1752191090459-SeedKpiGrade.d.ts +0 -5
- package/dist-server/migrations/1752191090459-SeedKpiGrade.js +0 -271
- package/dist-server/migrations/1752191090459-SeedKpiGrade.js.map +0 -1
- package/dist-server/migrations/index.d.ts +0 -1
- package/dist-server/migrations/index.js +0 -12
- package/dist-server/migrations/index.js.map +0 -1
- package/dist-server/service/kpi-grade/index.d.ts +0 -6
- package/dist-server/service/kpi-grade/index.js +0 -10
- package/dist-server/service/kpi-grade/index.js.map +0 -1
- package/dist-server/service/kpi-grade/kpi-grade-mutation.d.ts +0 -10
- package/dist-server/service/kpi-grade/kpi-grade-mutation.js +0 -151
- package/dist-server/service/kpi-grade/kpi-grade-mutation.js.map +0 -1
- package/dist-server/service/kpi-grade/kpi-grade-query.d.ts +0 -13
- package/dist-server/service/kpi-grade/kpi-grade-query.js +0 -92
- package/dist-server/service/kpi-grade/kpi-grade-query.js.map +0 -1
- package/dist-server/service/kpi-grade/kpi-grade-type.d.ts +0 -29
- package/dist-server/service/kpi-grade/kpi-grade-type.js +0 -113
- package/dist-server/service/kpi-grade/kpi-grade-type.js.map +0 -1
- package/dist-server/service/kpi-grade/kpi-grade.d.ts +0 -24
- package/dist-server/service/kpi-grade/kpi-grade.js +0 -117
- package/dist-server/service/kpi-grade/kpi-grade.js.map +0 -1
- package/server/migrations/1752188906708-SeedKpiCategory.ts +0 -61
- package/server/migrations/1752190849681-SeedKpi.ts +0 -112
- package/server/migrations/1752191090459-SeedKpiGrade.ts +0 -270
- package/server/migrations/index.ts +0 -9
- package/server/service/kpi-grade/index.ts +0 -7
- package/server/service/kpi-grade/kpi-grade-mutation.ts +0 -146
- package/server/service/kpi-grade/kpi-grade-query.ts +0 -58
- package/server/service/kpi-grade/kpi-grade-type.ts +0 -82
- package/server/service/kpi-grade/kpi-grade.ts +0 -101
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
import { MigrationInterface, QueryRunner } from 'typeorm'
|
|
2
|
-
import { Domain, getRepository } from '@things-factory/shell'
|
|
3
|
-
import { KpiGrade } from '../service/kpi-grade/kpi-grade.js'
|
|
4
|
-
import { Kpi } from '../service/kpi/kpi.js'
|
|
5
|
-
|
|
6
|
-
const GRADE_SEED = [
|
|
7
|
-
{
|
|
8
|
-
kpiName: '일정성과 수준 평가',
|
|
9
|
-
version: 1,
|
|
10
|
-
grades: [
|
|
11
|
-
{
|
|
12
|
-
name: '1점',
|
|
13
|
-
minValue: 1,
|
|
14
|
-
maxValue: 1,
|
|
15
|
-
score: 1,
|
|
16
|
-
description: '달성상황(기후, 일반변화 등)과 인근주민 민원 등이 발생하여 공기가 지연됨.'
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
name: '2점',
|
|
20
|
-
minValue: 2,
|
|
21
|
-
maxValue: 2,
|
|
22
|
-
score: 2,
|
|
23
|
-
description: '달성상황(기후, 일반변화 등)과 인근주민 민원 등이 발생하여 공기를 맞춤.'
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
name: '3점',
|
|
27
|
-
minValue: 3,
|
|
28
|
-
maxValue: 3,
|
|
29
|
-
score: 3,
|
|
30
|
-
description: '달성상황(기후, 일반변화 등)과 인근주민 민원 등이 발생하지 않으나 공기를 맞춤.'
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
name: '4점',
|
|
34
|
-
minValue: 4,
|
|
35
|
-
maxValue: 4,
|
|
36
|
-
score: 4,
|
|
37
|
-
description: '달성상황(기후, 일반변화 등)과 인근주민 민원 등이 발생하지 않으며 공기를 단축함.'
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
name: '5점',
|
|
41
|
-
minValue: 5,
|
|
42
|
-
maxValue: 5,
|
|
43
|
-
score: 5,
|
|
44
|
-
description: '달성상황(기후, 일반변화 등)과 인근주민 민원 등이 발생하지 않으며 공기를 단축함.'
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
kpiName: '비용성과 수준 평가',
|
|
50
|
-
version: 1,
|
|
51
|
-
grades: [
|
|
52
|
-
{
|
|
53
|
-
name: '1점',
|
|
54
|
-
minValue: 1,
|
|
55
|
-
maxValue: 1,
|
|
56
|
-
score: 1,
|
|
57
|
-
description: '공사비 변동과 민원 등이 발생하여 공사비 관리가 미흡함.'
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
name: '2점',
|
|
61
|
-
minValue: 2,
|
|
62
|
-
maxValue: 2,
|
|
63
|
-
score: 2,
|
|
64
|
-
description: '공사비 변동과 민원 등이 발생하여 공사비 관리가 미흡함.'
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
name: '3점',
|
|
68
|
-
minValue: 3,
|
|
69
|
-
maxValue: 3,
|
|
70
|
-
score: 3,
|
|
71
|
-
description: '공사비 변동과 민원 등이 발생하였으나 공사비 관리를 적정하게 수행함.'
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
name: '4점',
|
|
75
|
-
minValue: 4,
|
|
76
|
-
maxValue: 4,
|
|
77
|
-
score: 4,
|
|
78
|
-
description: '공사비 변동과 민원 등이 발생하지 않으며 공사비 관리를 적정하게 수행함.'
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
name: '5점',
|
|
82
|
-
minValue: 5,
|
|
83
|
-
maxValue: 5,
|
|
84
|
-
score: 5,
|
|
85
|
-
description: '공사비 변동과 민원 등이 발생하지 않으며 매우 훌륭하게 수행함.'
|
|
86
|
-
}
|
|
87
|
-
]
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
kpiName: '품질성과 수준 평가',
|
|
91
|
-
version: 1,
|
|
92
|
-
grades: [
|
|
93
|
-
{
|
|
94
|
-
name: '1점',
|
|
95
|
-
minValue: 1,
|
|
96
|
-
maxValue: 1,
|
|
97
|
-
score: 1,
|
|
98
|
-
description: '법적 요구 수준에 못 미치거나 공사 완성도의 개선이 매우 필요한 경우'
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
name: '2점',
|
|
102
|
-
minValue: 2,
|
|
103
|
-
maxValue: 2,
|
|
104
|
-
score: 2,
|
|
105
|
-
description: '법적 요구 수준을 일부 만족하나, 공사 완성도의 개선이 일부 필요한 경우'
|
|
106
|
-
},
|
|
107
|
-
{ name: '3점', minValue: 3, maxValue: 3, score: 3, description: '법적 요구 수준을 충족하는 수준' },
|
|
108
|
-
{
|
|
109
|
-
name: '4점',
|
|
110
|
-
minValue: 4,
|
|
111
|
-
maxValue: 4,
|
|
112
|
-
score: 4,
|
|
113
|
-
description: '법적 요구 수준을 만족하며, 품질관리 활동이 능동적인 경우'
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
name: '5점',
|
|
117
|
-
minValue: 5,
|
|
118
|
-
maxValue: 5,
|
|
119
|
-
score: 5,
|
|
120
|
-
description: '법적 요구 수준을 만족하며, 품질관리 활동이 매우 능동적인 경우'
|
|
121
|
-
}
|
|
122
|
-
]
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
kpiName: '안전성과 수준 평가',
|
|
126
|
-
version: 1,
|
|
127
|
-
grades: [
|
|
128
|
-
{
|
|
129
|
-
name: '1점',
|
|
130
|
-
minValue: 1,
|
|
131
|
-
maxValue: 1,
|
|
132
|
-
score: 1,
|
|
133
|
-
description: '법적 요구 수준을 미달하거나 안전관리 활동이 미흡한 경우'
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
name: '2점',
|
|
137
|
-
minValue: 2,
|
|
138
|
-
maxValue: 2,
|
|
139
|
-
score: 2,
|
|
140
|
-
description: '법적 요구 수준을 일부 만족하나, 안전관리 활동이 다소 필요한 경우'
|
|
141
|
-
},
|
|
142
|
-
{ name: '3점', minValue: 3, maxValue: 3, score: 3, description: '법적 요구 수준을 충족하는 수준' },
|
|
143
|
-
{
|
|
144
|
-
name: '4점',
|
|
145
|
-
minValue: 4,
|
|
146
|
-
maxValue: 4,
|
|
147
|
-
score: 4,
|
|
148
|
-
description: '법적 요구 수준을 만족하며, 안전관리 활동이 능동적인 경우'
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
name: '5점',
|
|
152
|
-
minValue: 5,
|
|
153
|
-
maxValue: 5,
|
|
154
|
-
score: 5,
|
|
155
|
-
description: '법적 요구 수준을 만족하며, 안전관리 활동이 매우 능동적인 경우'
|
|
156
|
-
}
|
|
157
|
-
]
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
kpiName: '환경성과 수준 평가',
|
|
161
|
-
version: 1,
|
|
162
|
-
grades: [
|
|
163
|
-
{
|
|
164
|
-
name: '1점',
|
|
165
|
-
minValue: 1,
|
|
166
|
-
maxValue: 1,
|
|
167
|
-
score: 1,
|
|
168
|
-
description: '법적 요구 수준에 못 미치거나 환경관리 활동의 개선이 매우 필요한 경우'
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
name: '2점',
|
|
172
|
-
minValue: 2,
|
|
173
|
-
maxValue: 2,
|
|
174
|
-
score: 2,
|
|
175
|
-
description: '법적 요구 수준을 일부 만족하나, 환경관리 활동이 다소 필요한 경우'
|
|
176
|
-
},
|
|
177
|
-
{ name: '3점', minValue: 3, maxValue: 3, score: 3, description: '법적 요구 수준을 충족하는 수준' },
|
|
178
|
-
{
|
|
179
|
-
name: '4점',
|
|
180
|
-
minValue: 4,
|
|
181
|
-
maxValue: 4,
|
|
182
|
-
score: 4,
|
|
183
|
-
description: '법적 요구 수준을 만족하며, 환경관리 활동의 효율성을 다소 높은 수준'
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
name: '5점',
|
|
187
|
-
minValue: 5,
|
|
188
|
-
maxValue: 5,
|
|
189
|
-
score: 5,
|
|
190
|
-
description: '법적 요구 수준을 만족하며, 환경관리 활동의 효율성이 확연히 높은 수준'
|
|
191
|
-
}
|
|
192
|
-
]
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
kpiName: '생산성과 수준 평가',
|
|
196
|
-
version: 1,
|
|
197
|
-
grades: [
|
|
198
|
-
{
|
|
199
|
-
name: '1점',
|
|
200
|
-
minValue: 1,
|
|
201
|
-
maxValue: 1,
|
|
202
|
-
score: 1,
|
|
203
|
-
description: '인력 및 장비 투입 규모에 대한 효율성이 매우 낮은 수준'
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
name: '2점',
|
|
207
|
-
minValue: 2,
|
|
208
|
-
maxValue: 2,
|
|
209
|
-
score: 2,
|
|
210
|
-
description: '인력 및 장비 투입 규모가 법적 요구 수준을 충족하나, 연계에 비해 미흡함.'
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
name: '3점',
|
|
214
|
-
minValue: 3,
|
|
215
|
-
maxValue: 3,
|
|
216
|
-
score: 3,
|
|
217
|
-
description: '인력 및 장비 투입 규모가 법적 요구 수준을 충족하는 수준'
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
name: '4점',
|
|
221
|
-
minValue: 4,
|
|
222
|
-
maxValue: 4,
|
|
223
|
-
score: 4,
|
|
224
|
-
description: '투입 규모가 법적 요구 수준을 충족하며, 효율성이 다소 높은 수준'
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
name: '5점',
|
|
228
|
-
minValue: 5,
|
|
229
|
-
maxValue: 5,
|
|
230
|
-
score: 5,
|
|
231
|
-
description: '투입 규모가 법적 요구 수준을 충족하며, 효율성이 확연히 높은 수준'
|
|
232
|
-
}
|
|
233
|
-
]
|
|
234
|
-
}
|
|
235
|
-
]
|
|
236
|
-
|
|
237
|
-
export class SeedKpiGrade1752191090459 implements MigrationInterface {
|
|
238
|
-
public async up(queryRunner: QueryRunner): Promise<any> {
|
|
239
|
-
const repository = getRepository(KpiGrade)
|
|
240
|
-
const kpiRepository = getRepository(Kpi)
|
|
241
|
-
const domain: Domain = await getRepository(Domain).findOneBy({ name: 'SYSTEM' })
|
|
242
|
-
|
|
243
|
-
for (const seed of GRADE_SEED) {
|
|
244
|
-
const kpi = await kpiRepository.findOneBy({ name: seed.kpiName, domain: { id: domain.id } })
|
|
245
|
-
if (!kpi) continue
|
|
246
|
-
for (const grade of seed.grades) {
|
|
247
|
-
await repository.save({
|
|
248
|
-
...grade,
|
|
249
|
-
version: seed.version,
|
|
250
|
-
kpi,
|
|
251
|
-
domain
|
|
252
|
-
})
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
public async down(queryRunner: QueryRunner): Promise<any> {
|
|
258
|
-
const repository = getRepository(KpiGrade)
|
|
259
|
-
const kpiRepository = getRepository(Kpi)
|
|
260
|
-
const domain: Domain = await getRepository(Domain).findOneBy({ name: 'SYSTEM' })
|
|
261
|
-
|
|
262
|
-
for (const seed of GRADE_SEED) {
|
|
263
|
-
const kpi = await kpiRepository.findOneBy({ name: seed.kpiName, domain: { id: domain.id } })
|
|
264
|
-
if (!kpi) continue
|
|
265
|
-
for (const grade of seed.grades.reverse()) {
|
|
266
|
-
await repository.delete({ name: grade.name, kpi: { id: kpi.id }, domain: { id: domain.id } })
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
const glob = require('glob')
|
|
2
|
-
const path = require('path')
|
|
3
|
-
|
|
4
|
-
export var migrations = []
|
|
5
|
-
|
|
6
|
-
glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {
|
|
7
|
-
if (file.indexOf('index.js') !== -1) return
|
|
8
|
-
migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])
|
|
9
|
-
})
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { KpiGrade } from './kpi-grade'
|
|
2
|
-
import { KpiGradeQuery } from './kpi-grade-query'
|
|
3
|
-
import { KpiGradeMutation } from './kpi-grade-mutation'
|
|
4
|
-
|
|
5
|
-
export const entities = [KpiGrade]
|
|
6
|
-
export const resolvers = [KpiGradeQuery, KpiGradeMutation]
|
|
7
|
-
export const subscribers = []
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
|
|
2
|
-
import { In } from 'typeorm'
|
|
3
|
-
import { getRepository } from '@things-factory/shell'
|
|
4
|
-
|
|
5
|
-
import { KpiGrade } from './kpi-grade'
|
|
6
|
-
import { NewKpiGrade, KpiGradePatch } from './kpi-grade-type'
|
|
7
|
-
import { Kpi } from '../kpi/kpi'
|
|
8
|
-
|
|
9
|
-
@Resolver(KpiGrade)
|
|
10
|
-
export class KpiGradeMutation {
|
|
11
|
-
@Directive('@transaction')
|
|
12
|
-
@Mutation(returns => KpiGrade, { description: 'Create a new KPI grade with the provided details.' })
|
|
13
|
-
async createKpiGrade(
|
|
14
|
-
@Arg('grade', { description: 'Input object containing details for the new KPI grade.' }) grade: NewKpiGrade,
|
|
15
|
-
@Ctx() context: ResolverContext
|
|
16
|
-
): Promise<KpiGrade> {
|
|
17
|
-
const { domain, user, tx } = context.state
|
|
18
|
-
|
|
19
|
-
let kpi = grade.kpiId ? await getRepository(Kpi).findOne({ where: { id: grade.kpiId } }) : undefined
|
|
20
|
-
|
|
21
|
-
const result = await getRepository(KpiGrade, tx).save({
|
|
22
|
-
...grade,
|
|
23
|
-
kpi,
|
|
24
|
-
domain,
|
|
25
|
-
creator: user,
|
|
26
|
-
updater: user
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
return result
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@Directive('@transaction')
|
|
33
|
-
@Mutation(returns => KpiGrade, { description: 'To modify KpiGrade information' })
|
|
34
|
-
async updateKpiGrade(
|
|
35
|
-
@Arg('id') id: string,
|
|
36
|
-
@Arg('patch') patch: KpiGradePatch,
|
|
37
|
-
@Ctx() context: ResolverContext
|
|
38
|
-
): Promise<KpiGrade> {
|
|
39
|
-
const { domain, user, tx } = context.state
|
|
40
|
-
|
|
41
|
-
const repository = getRepository(KpiGrade, tx)
|
|
42
|
-
const kpiGrade = await repository.findOne({
|
|
43
|
-
where: { domain: { id: domain.id }, id }
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
let kpi = patch.kpiId ? await getRepository(Kpi).findOne({ where: { id: patch.kpiId } }) : kpiGrade.kpi
|
|
47
|
-
|
|
48
|
-
const result = await repository.save({
|
|
49
|
-
...kpiGrade,
|
|
50
|
-
...patch,
|
|
51
|
-
kpi,
|
|
52
|
-
updater: user
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
return result
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
@Directive('@transaction')
|
|
59
|
-
@Mutation(returns => [KpiGrade], { description: "To modify multiple KpiGrades' information" })
|
|
60
|
-
async updateMultipleKpiGrade(
|
|
61
|
-
@Arg('patches', type => [KpiGradePatch]) patches: KpiGradePatch[],
|
|
62
|
-
@Ctx() context: ResolverContext
|
|
63
|
-
): Promise<KpiGrade[]> {
|
|
64
|
-
const { domain, user, tx } = context.state
|
|
65
|
-
|
|
66
|
-
let results = []
|
|
67
|
-
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
68
|
-
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
69
|
-
const kpiGradeRepo = getRepository(KpiGrade, tx)
|
|
70
|
-
|
|
71
|
-
if (_createRecords.length > 0) {
|
|
72
|
-
for (let i = 0; i < _createRecords.length; i++) {
|
|
73
|
-
const newRecord = _createRecords[i]
|
|
74
|
-
|
|
75
|
-
const result = await kpiGradeRepo.save({
|
|
76
|
-
...newRecord,
|
|
77
|
-
domain,
|
|
78
|
-
creator: user,
|
|
79
|
-
updater: user
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
results.push({ ...result, cuFlag: '+' })
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (_updateRecords.length > 0) {
|
|
87
|
-
for (let i = 0; i < _updateRecords.length; i++) {
|
|
88
|
-
const updateRecord = _updateRecords[i]
|
|
89
|
-
const kpiGrade = await kpiGradeRepo.findOneBy({ id: updateRecord.id })
|
|
90
|
-
|
|
91
|
-
const result = await kpiGradeRepo.save({
|
|
92
|
-
...kpiGrade,
|
|
93
|
-
...updateRecord,
|
|
94
|
-
updater: user
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
results.push({ ...result, cuFlag: 'M' })
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return results
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
@Directive('@transaction')
|
|
105
|
-
@Mutation(returns => Boolean, { description: 'To delete KpiGrade' })
|
|
106
|
-
async deleteKpiGrade(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
|
107
|
-
const { domain, tx } = context.state
|
|
108
|
-
|
|
109
|
-
await getRepository(KpiGrade, tx).delete({ domain: { id: domain.id }, id })
|
|
110
|
-
|
|
111
|
-
return true
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
@Directive('@transaction')
|
|
115
|
-
@Mutation(returns => Boolean, { description: 'To delete multiple KpiGrades' })
|
|
116
|
-
async deleteKpiGrades(
|
|
117
|
-
@Arg('ids', type => [String]) ids: string[],
|
|
118
|
-
@Ctx() context: ResolverContext
|
|
119
|
-
): Promise<boolean> {
|
|
120
|
-
const { domain, tx } = context.state
|
|
121
|
-
|
|
122
|
-
await getRepository(KpiGrade, tx).delete({
|
|
123
|
-
domain: { id: domain.id },
|
|
124
|
-
id: In(ids)
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
return true
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
@Directive('@transaction')
|
|
131
|
-
@Mutation(returns => Boolean, { description: 'To import multiple KpiGrades' })
|
|
132
|
-
async importKpiGrades(
|
|
133
|
-
@Arg('kpiGrades', type => [KpiGradePatch]) kpiGrades: KpiGradePatch[],
|
|
134
|
-
@Ctx() context: ResolverContext
|
|
135
|
-
): Promise<boolean> {
|
|
136
|
-
const { domain, tx } = context.state
|
|
137
|
-
|
|
138
|
-
await Promise.all(
|
|
139
|
-
kpiGrades.map(async (kpiGrade: KpiGradePatch) => {
|
|
140
|
-
const createdKpiGrade: KpiGrade = await getRepository(KpiGrade, tx).save({ domain, ...kpiGrade })
|
|
141
|
-
})
|
|
142
|
-
)
|
|
143
|
-
|
|
144
|
-
return true
|
|
145
|
-
}
|
|
146
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'
|
|
2
|
-
import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
|
|
3
|
-
import { User } from '@things-factory/auth-base'
|
|
4
|
-
import { KpiGrade } from './kpi-grade'
|
|
5
|
-
import { KpiGradeList } from './kpi-grade-type'
|
|
6
|
-
import { Kpi } from '../kpi/kpi'
|
|
7
|
-
|
|
8
|
-
@Resolver(KpiGrade)
|
|
9
|
-
export class KpiGradeQuery {
|
|
10
|
-
@Query(returns => KpiGrade!, { nullable: true, description: 'Fetch a single KPI grade by its unique identifier.' })
|
|
11
|
-
async kpiGrade(
|
|
12
|
-
@Arg('id', { description: 'Unique identifier of the KPI grade to fetch.' }) id: string,
|
|
13
|
-
@Ctx() context: ResolverContext
|
|
14
|
-
): Promise<KpiGrade> {
|
|
15
|
-
const { domain } = context.state
|
|
16
|
-
|
|
17
|
-
return await getRepository(KpiGrade).findOne({
|
|
18
|
-
where: { domain: { id: domain.id }, id }
|
|
19
|
-
})
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@Query(returns => KpiGradeList, { description: 'To fetch multiple KpiGrades' })
|
|
23
|
-
async kpiGrades(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<KpiGradeList> {
|
|
24
|
-
const { domain } = context.state
|
|
25
|
-
|
|
26
|
-
const queryBuilder = getQueryBuilderFromListParams({
|
|
27
|
-
domain,
|
|
28
|
-
params,
|
|
29
|
-
repository: await getRepository(KpiGrade),
|
|
30
|
-
searchables: ['name', 'description']
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
const [items, total] = await queryBuilder.getManyAndCount()
|
|
34
|
-
|
|
35
|
-
return { items, total }
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
@FieldResolver(type => Domain)
|
|
39
|
-
async domain(@Root() kpiGrade: KpiGrade): Promise<Domain> {
|
|
40
|
-
return kpiGrade.domainId && (await getRepository(Domain).findOneBy({ id: kpiGrade.domainId }))
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
@FieldResolver(type => User)
|
|
44
|
-
async updater(@Root() kpiGrade: KpiGrade): Promise<User> {
|
|
45
|
-
return kpiGrade.updaterId && (await getRepository(User).findOneBy({ id: kpiGrade.updaterId }))
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
@FieldResolver(type => User)
|
|
49
|
-
async creator(@Root() kpiGrade: KpiGrade): Promise<User> {
|
|
50
|
-
return kpiGrade.creatorId && (await getRepository(User).findOneBy({ id: kpiGrade.creatorId }))
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@FieldResolver(type => Kpi, { nullable: true })
|
|
54
|
-
async kpi(@Root() kpiGrade: KpiGrade): Promise<Kpi | null> {
|
|
55
|
-
if (!kpiGrade.kpiId) return null
|
|
56
|
-
return await getRepository(Kpi).findOneBy({ id: kpiGrade.kpiId })
|
|
57
|
-
}
|
|
58
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
|
|
2
|
-
import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
|
|
3
|
-
import { ObjectType, Field, InputType, Int, ID, registerEnumType } from 'type-graphql'
|
|
4
|
-
|
|
5
|
-
import { ObjectRef, ScalarObject } from '@things-factory/shell'
|
|
6
|
-
|
|
7
|
-
import { KpiGrade } from './kpi-grade'
|
|
8
|
-
|
|
9
|
-
@InputType({ description: 'Input type for creating a new KPI grade. Used in mutations to provide grade details.' })
|
|
10
|
-
export class NewKpiGrade {
|
|
11
|
-
@Field({ description: 'Name of the grade or section for this KPI.' })
|
|
12
|
-
name: string
|
|
13
|
-
|
|
14
|
-
@Field({ nullable: true, description: 'Detailed description of this KPI grade.' })
|
|
15
|
-
description?: string
|
|
16
|
-
|
|
17
|
-
@Field(type => ID, { description: 'ID of the KPI to which this grade belongs.' })
|
|
18
|
-
kpiId: string
|
|
19
|
-
|
|
20
|
-
@Field(type => Int, { description: 'Version of the KPI definition to which this grade belongs.' })
|
|
21
|
-
version: number
|
|
22
|
-
|
|
23
|
-
@Field(type => Int, { description: 'Minimum value for this grade section.' })
|
|
24
|
-
minValue: number
|
|
25
|
-
|
|
26
|
-
@Field(type => Int, { description: 'Maximum value for this grade section.' })
|
|
27
|
-
maxValue: number
|
|
28
|
-
|
|
29
|
-
@Field(type => Int, { nullable: true, description: 'Score or weight for this grade (optional).' })
|
|
30
|
-
score?: number
|
|
31
|
-
|
|
32
|
-
@Field({ nullable: true, description: 'Color code for this grade (for visualization purposes).' })
|
|
33
|
-
color?: string
|
|
34
|
-
|
|
35
|
-
@Field({ nullable: true, description: 'Indicates whether this KPI grade is active and usable.' })
|
|
36
|
-
active?: boolean
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@InputType({ description: 'Input type for updating an existing KPI grade. Used in mutations to patch grade details.' })
|
|
40
|
-
export class KpiGradePatch {
|
|
41
|
-
@Field(type => ID, { nullable: true, description: 'ID of the KPI grade to update.' })
|
|
42
|
-
id?: string
|
|
43
|
-
|
|
44
|
-
@Field({ nullable: true, description: 'Name of the grade or section for this KPI.' })
|
|
45
|
-
name?: string
|
|
46
|
-
|
|
47
|
-
@Field({ nullable: true, description: 'Detailed description of this KPI grade.' })
|
|
48
|
-
description?: string
|
|
49
|
-
|
|
50
|
-
@Field(type => ID, { nullable: true, description: 'ID of the KPI to which this grade belongs.' })
|
|
51
|
-
kpiId?: string
|
|
52
|
-
|
|
53
|
-
@Field(type => Int, { nullable: true, description: 'Version of the KPI definition to which this grade belongs.' })
|
|
54
|
-
version?: number
|
|
55
|
-
|
|
56
|
-
@Field(type => Int, { nullable: true, description: 'Minimum value for this grade section.' })
|
|
57
|
-
minValue?: number
|
|
58
|
-
|
|
59
|
-
@Field(type => Int, { nullable: true, description: 'Maximum value for this grade section.' })
|
|
60
|
-
maxValue?: number
|
|
61
|
-
|
|
62
|
-
@Field(type => Int, { nullable: true, description: 'Score or weight for this grade (optional).' })
|
|
63
|
-
score?: number
|
|
64
|
-
|
|
65
|
-
@Field({ nullable: true, description: 'Color code for this grade (for visualization purposes).' })
|
|
66
|
-
color?: string
|
|
67
|
-
|
|
68
|
-
@Field({ nullable: true, description: 'Indicates whether this KPI grade is active and usable.' })
|
|
69
|
-
active?: boolean
|
|
70
|
-
|
|
71
|
-
@Field({ nullable: true, description: 'Custom flag for update operations (internal use).' })
|
|
72
|
-
cuFlag?: string
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
@ObjectType()
|
|
76
|
-
export class KpiGradeList {
|
|
77
|
-
@Field(type => [KpiGrade])
|
|
78
|
-
items: KpiGrade[]
|
|
79
|
-
|
|
80
|
-
@Field(type => Int)
|
|
81
|
-
total: number
|
|
82
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CreateDateColumn,
|
|
3
|
-
UpdateDateColumn,
|
|
4
|
-
Entity,
|
|
5
|
-
Index,
|
|
6
|
-
Column,
|
|
7
|
-
RelationId,
|
|
8
|
-
ManyToOne,
|
|
9
|
-
PrimaryGeneratedColumn
|
|
10
|
-
} from 'typeorm'
|
|
11
|
-
import { ObjectType, Field, Int, ID, registerEnumType, Float } from 'type-graphql'
|
|
12
|
-
|
|
13
|
-
import { Domain } from '@things-factory/shell'
|
|
14
|
-
import { User } from '@things-factory/auth-base'
|
|
15
|
-
import { Kpi } from '../kpi/kpi'
|
|
16
|
-
|
|
17
|
-
@Entity()
|
|
18
|
-
@Index('ix_kpi_grade_0', (kpiGrade: KpiGrade) => [kpiGrade.domain, kpiGrade.kpi, kpiGrade.version, kpiGrade.name], {
|
|
19
|
-
unique: true
|
|
20
|
-
})
|
|
21
|
-
@ObjectType({
|
|
22
|
-
description:
|
|
23
|
-
'KPI grade entity. Represents a grade/section for a KPI version, with value range, score, color, and description.'
|
|
24
|
-
})
|
|
25
|
-
export class KpiGrade {
|
|
26
|
-
@PrimaryGeneratedColumn('uuid')
|
|
27
|
-
@Field(type => ID, { description: 'Unique identifier for this KPI grade.' })
|
|
28
|
-
readonly id: string
|
|
29
|
-
|
|
30
|
-
@ManyToOne(type => Domain)
|
|
31
|
-
@Field({ nullable: true, description: 'Domain (tenant) to which this KPI grade belongs.' })
|
|
32
|
-
domain?: Domain
|
|
33
|
-
|
|
34
|
-
@RelationId((kpiGrade: KpiGrade) => kpiGrade.domain)
|
|
35
|
-
@Field({ nullable: true, description: 'ID of the domain (tenant) for this KPI grade.' })
|
|
36
|
-
domainId?: string
|
|
37
|
-
|
|
38
|
-
@Column()
|
|
39
|
-
@Field({ nullable: true, description: 'Name of the grade or section for this KPI.' })
|
|
40
|
-
name?: string
|
|
41
|
-
|
|
42
|
-
@Column({ nullable: true })
|
|
43
|
-
@Field({ nullable: true, description: 'Detailed description of this KPI grade.' })
|
|
44
|
-
description?: string
|
|
45
|
-
|
|
46
|
-
@Column({ nullable: false, default: false })
|
|
47
|
-
@Field({ nullable: true, description: 'Indicates whether this KPI grade is active and usable.' })
|
|
48
|
-
active?: boolean
|
|
49
|
-
|
|
50
|
-
@ManyToOne(() => Kpi)
|
|
51
|
-
@Field(type => Kpi, { description: 'Reference to the KPI to which this grade belongs.' })
|
|
52
|
-
kpi: Kpi
|
|
53
|
-
|
|
54
|
-
@RelationId((kpiGrade: KpiGrade) => kpiGrade.kpi)
|
|
55
|
-
@Field({ description: 'ID of the referenced KPI.' })
|
|
56
|
-
kpiId: string
|
|
57
|
-
|
|
58
|
-
@Column('int')
|
|
59
|
-
@Field(type => Int, { description: 'Version of the KPI definition to which this grade belongs.' })
|
|
60
|
-
version: number
|
|
61
|
-
|
|
62
|
-
@Column('float')
|
|
63
|
-
@Field(type => Float, { description: 'Minimum value for this grade section.' })
|
|
64
|
-
minValue: number
|
|
65
|
-
|
|
66
|
-
@Column('float')
|
|
67
|
-
@Field(type => Float, { description: 'Maximum value for this grade section.' })
|
|
68
|
-
maxValue: number
|
|
69
|
-
|
|
70
|
-
@Column({ nullable: true, type: 'float' })
|
|
71
|
-
@Field(type => Float, { nullable: true, description: 'Score or weight for this grade (optional).' })
|
|
72
|
-
score?: number
|
|
73
|
-
|
|
74
|
-
@Column({ nullable: true })
|
|
75
|
-
@Field({ nullable: true, description: 'Color code for this grade (for visualization purposes).' })
|
|
76
|
-
color?: string
|
|
77
|
-
|
|
78
|
-
@CreateDateColumn()
|
|
79
|
-
@Field({ nullable: true, description: 'Timestamp when this KPI grade was created.' })
|
|
80
|
-
createdAt?: Date
|
|
81
|
-
|
|
82
|
-
@UpdateDateColumn()
|
|
83
|
-
@Field({ nullable: true, description: 'Timestamp when this KPI grade was last updated.' })
|
|
84
|
-
updatedAt?: Date
|
|
85
|
-
|
|
86
|
-
@ManyToOne(type => User, { nullable: true })
|
|
87
|
-
@Field(type => User, { nullable: true, description: 'User who created this KPI grade.' })
|
|
88
|
-
creator?: User
|
|
89
|
-
|
|
90
|
-
@RelationId((kpiGrade: KpiGrade) => kpiGrade.creator)
|
|
91
|
-
@Field({ nullable: true, description: 'ID of the user who created this KPI grade.' })
|
|
92
|
-
creatorId?: string
|
|
93
|
-
|
|
94
|
-
@ManyToOne(type => User, { nullable: true })
|
|
95
|
-
@Field(type => User, { nullable: true, description: 'User who last updated this KPI grade.' })
|
|
96
|
-
updater?: User
|
|
97
|
-
|
|
98
|
-
@RelationId((kpiGrade: KpiGrade) => kpiGrade.updater)
|
|
99
|
-
@Field({ nullable: true, description: 'ID of the user who last updated this KPI grade.' })
|
|
100
|
-
updaterId?: string
|
|
101
|
-
}
|