@dssp/dkpi 1.0.0-y.0 → 1.0.0

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 (139) hide show
  1. package/KPI-STATISTICS-SERVICE.md +233 -0
  2. package/_index.html +4 -9
  3. package/assets/helps/index.md +1 -1
  4. package/assets/images/project-image.png +0 -0
  5. package/assets/manifest.json +2 -2
  6. package/config/config.development.js +2 -1
  7. package/config/config.production.js +2 -1
  8. package/kpi-module-service-tests.md +1286 -0
  9. package/kpi-module-test-report.md +676 -0
  10. package/kpi-module-unit-test-detailed-report.md +925 -0
  11. package/kpi-module-unit-tests-detailed.md +1452 -0
  12. package/openapi/unstable.yaml +2 -2
  13. package/package.json +58 -54
  14. package/recalculate-batch.sh +64 -0
  15. package/recalculate-projects-range.sh +98 -0
  16. package/schema.graphql +1159 -55
  17. package/things-factory.config.js +6 -1
  18. package/translations/en.json +5 -1
  19. package/translations/ko.json +5 -1
  20. package/views/auth-page.html +4 -5
  21. package/views/public/home.html +5 -6
  22. package/dist-client/bootstrap.d.ts +0 -8
  23. package/dist-client/bootstrap.js +0 -257
  24. package/dist-client/bootstrap.js.map +0 -1
  25. package/dist-client/components/kpi-single-boxplot-chart.d.ts +0 -24
  26. package/dist-client/components/kpi-single-boxplot-chart.js +0 -317
  27. package/dist-client/components/kpi-single-boxplot-chart.js.map +0 -1
  28. package/dist-client/components/sv-pagenation-control.d.ts +0 -18
  29. package/dist-client/components/sv-pagenation-control.js +0 -142
  30. package/dist-client/components/sv-pagenation-control.js.map +0 -1
  31. package/dist-client/entries/public/home.d.ts +0 -8
  32. package/dist-client/entries/public/home.js +0 -97
  33. package/dist-client/entries/public/home.js.map +0 -1
  34. package/dist-client/icons/menu-icons.d.ts +0 -11
  35. package/dist-client/icons/menu-icons.js +0 -126
  36. package/dist-client/icons/menu-icons.js.map +0 -1
  37. package/dist-client/index.d.ts +0 -0
  38. package/dist-client/index.js +0 -2
  39. package/dist-client/index.js.map +0 -1
  40. package/dist-client/menu.d.ts +0 -23
  41. package/dist-client/menu.js +0 -59
  42. package/dist-client/menu.js.map +0 -1
  43. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +0 -58
  44. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +0 -731
  45. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +0 -1
  46. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +0 -23
  47. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +0 -76
  48. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +0 -1
  49. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +0 -69
  50. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +0 -385
  51. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +0 -1
  52. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +0 -12
  53. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +0 -174
  54. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +0 -1
  55. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +0 -41
  56. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +0 -191
  57. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +0 -1
  58. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +0 -23
  59. package/dist-client/pages/kpi-value/kpi-value-importer.js +0 -93
  60. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +0 -1
  61. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +0 -72
  62. package/dist-client/pages/kpi-value/kpi-value-list-page.js +0 -465
  63. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +0 -1
  64. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +0 -13
  65. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +0 -248
  66. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +0 -1
  67. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +0 -10
  68. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +0 -229
  69. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +0 -1
  70. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.d.ts +0 -12
  71. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +0 -213
  72. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +0 -1
  73. package/dist-client/pages/sv-project-complete.d.ts +0 -22
  74. package/dist-client/pages/sv-project-complete.js +0 -213
  75. package/dist-client/pages/sv-project-complete.js.map +0 -1
  76. package/dist-client/pages/sv-project-completed-list.d.ts +0 -24
  77. package/dist-client/pages/sv-project-completed-list.js +0 -357
  78. package/dist-client/pages/sv-project-completed-list.js.map +0 -1
  79. package/dist-client/pages/sv-project-detail.d.ts +0 -13
  80. package/dist-client/pages/sv-project-detail.js +0 -494
  81. package/dist-client/pages/sv-project-detail.js.map +0 -1
  82. package/dist-client/pages/sv-project-list.d.ts +0 -157
  83. package/dist-client/pages/sv-project-list.js +0 -431
  84. package/dist-client/pages/sv-project-list.js.map +0 -1
  85. package/dist-client/pages/sv-user-management.d.ts +0 -5
  86. package/dist-client/pages/sv-user-management.js +0 -219
  87. package/dist-client/pages/sv-user-management.js.map +0 -1
  88. package/dist-client/route.d.ts +0 -1
  89. package/dist-client/route.js +0 -31
  90. package/dist-client/route.js.map +0 -1
  91. package/dist-client/shared/complete-api.d.ts +0 -5
  92. package/dist-client/shared/complete-api.js +0 -125
  93. package/dist-client/shared/complete-api.js.map +0 -1
  94. package/dist-client/shared/func.d.ts +0 -2
  95. package/dist-client/shared/func.js +0 -22
  96. package/dist-client/shared/func.js.map +0 -1
  97. package/dist-client/themes/dark.css +0 -51
  98. package/dist-client/themes/light.css +0 -51
  99. package/dist-client/tsconfig.tsbuildinfo +0 -1
  100. package/dist-client/viewparts/menu-tools.d.ts +0 -54
  101. package/dist-client/viewparts/menu-tools.js +0 -503
  102. package/dist-client/viewparts/menu-tools.js.map +0 -1
  103. package/dist-client/viewparts/user-circle.d.ts +0 -5
  104. package/dist-client/viewparts/user-circle.js +0 -26
  105. package/dist-client/viewparts/user-circle.js.map +0 -1
  106. package/dist-server/index.d.ts +0 -2
  107. package/dist-server/index.js +0 -6
  108. package/dist-server/index.js.map +0 -1
  109. package/dist-server/migrations/index.d.ts +0 -1
  110. package/dist-server/migrations/index.js +0 -12
  111. package/dist-server/migrations/index.js.map +0 -1
  112. package/dist-server/scripts/calculate-kpi-scores.d.ts +0 -10
  113. package/dist-server/scripts/calculate-kpi-scores.js +0 -271
  114. package/dist-server/scripts/calculate-kpi-scores.js.map +0 -1
  115. package/dist-server/scripts/load-grade-data-migration.d.ts +0 -10
  116. package/dist-server/scripts/load-grade-data-migration.js +0 -194
  117. package/dist-server/scripts/load-grade-data-migration.js.map +0 -1
  118. package/dist-server/scripts/propagate-parent-kpi-values.d.ts +0 -10
  119. package/dist-server/scripts/propagate-parent-kpi-values.js +0 -440
  120. package/dist-server/scripts/propagate-parent-kpi-values.js.map +0 -1
  121. package/dist-server/service/index.d.ts +0 -6
  122. package/dist-server/service/index.js +0 -21
  123. package/dist-server/service/index.js.map +0 -1
  124. package/dist-server/service/kpi-metric-value/index.d.ts +0 -4
  125. package/dist-server/service/kpi-metric-value/index.js +0 -8
  126. package/dist-server/service/kpi-metric-value/index.js.map +0 -1
  127. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +0 -7
  128. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +0 -112
  129. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +0 -1
  130. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +0 -7
  131. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +0 -47
  132. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +0 -1
  133. package/dist-server/service/kpi-value/index.d.ts +0 -3
  134. package/dist-server/service/kpi-value/index.js +0 -7
  135. package/dist-server/service/kpi-value/index.js.map +0 -1
  136. package/dist-server/service/kpi-value/kpi-value-query.d.ts +0 -7
  137. package/dist-server/service/kpi-value/kpi-value-query.js +0 -47
  138. package/dist-server/service/kpi-value/kpi-value-query.js.map +0 -1
  139. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -1,219 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import '@things-factory/component-ui';
4
- import '@things-factory/auth-ui/dist-client/components/ownership-transfer-popup';
5
- import '@things-factory/auth-ui/dist-client/components/user-role-editor';
6
- import '@things-factory/auth-ui/dist-client/components/create-user';
7
- import gql from 'graphql-tag';
8
- import { css, html } from 'lit';
9
- import { customElement, property, query } from 'lit/decorators.js';
10
- import { client, gqlContext } from '@operato/graphql';
11
- import { i18next } from '@operato/i18n';
12
- import { PageView } from '@operato/shell';
13
- import { OxPrompt } from '@operato/popup/ox-prompt.js';
14
- let SVUserManagement = class SVUserManagement extends PageView {
15
- constructor() {
16
- super(...arguments);
17
- this.domainUsers = [];
18
- this.currentTab = '';
19
- this.passwordResettable = false;
20
- this.userCreatable = false;
21
- }
22
- get context() {
23
- return {
24
- title: i18next.t('text.user management'),
25
- help: 'auth/users'
26
- };
27
- }
28
- render() {
29
- const groupingUser = (this.domainUsers || []).reduce((groupingUser, user) => {
30
- const userType = user.userType;
31
- if (!groupingUser[userType]) {
32
- groupingUser[userType] = [];
33
- }
34
- user.activated = user.status === 'activated';
35
- groupingUser[userType].push(user);
36
- return groupingUser;
37
- }, {
38
- admin: [],
39
- user: [],
40
- application: [],
41
- appliance: []
42
- });
43
- const USER_TYPES = {
44
- USER: i18next.t('label.user'),
45
- APPLICATION: i18next.t('label.application'),
46
- APPLIANCE: i18next.t('text.appliance')
47
- };
48
- const userSet = {
49
- [USER_TYPES.USER]: [...groupingUser.user, ...groupingUser.admin],
50
- [USER_TYPES.APPLICATION]: groupingUser.application,
51
- [USER_TYPES.APPLIANCE]: groupingUser.appliance
52
- };
53
- return html `
54
- ${this.userCreatable
55
- ? html `<create-user
56
- @create-user=${async (event) => {
57
- const user = event.detail;
58
- user.userType = 'user';
59
- await this.createUser(user);
60
- }}
61
- ></create-user>`
62
- : ''}
63
- <quick-find-list
64
- id="user-list"
65
- .data=${userSet}
66
- @tabChanged=${e => (this.currentTab = e.detail.currentTabKey)}
67
- .headerRenderer=${user => {
68
- return html `
69
- ${!user.activated
70
- ? html `
71
- <md-icon>do_disturb</md-icon>
72
- ${user.name}
73
- `
74
- : html ` ${user.owner ? html ` <md-icon>supervisor_account</md-icon> ` : ''} ${user.name} `}
75
- `;
76
- }}
77
- .contentRenderer=${user => html ` <user-role-editor
78
- .user=${user}
79
- .domainOwner=${this.owner}
80
- .activate=${user.activated}
81
- @userUpdated=${this.refreshUsers.bind(this)}
82
- @ownershipTransferred=${this.refreshUsers.bind(this)}
83
- .passwordResettable=${this.passwordResettable}
84
- ></user-role-editor>`}
85
- ></quick-find-list>
86
- `;
87
- }
88
- async pageUpdated(changes, lifecycle, before) {
89
- if (this.active) {
90
- this.refreshUsers();
91
- this.checkPasswordResettable();
92
- this.checkUserCreatable();
93
- }
94
- }
95
- async refreshUsers() {
96
- var _a, _b;
97
- const domainUsersResp = await client.query({
98
- query: gql `
99
- query {
100
- users {
101
- items {
102
- id
103
- name
104
- email
105
- userType
106
- status
107
- owner
108
- }
109
- }
110
- }
111
- `,
112
- context: gqlContext()
113
- });
114
- if (!((_a = domainUsersResp.errors) === null || _a === void 0 ? void 0 : _a.length)) {
115
- this.domainUsers = domainUsersResp.data.users.items || [];
116
- this.owner = this.domainUsers.filter(user => user.owner)[0] || {};
117
- (_b = this.userListElement) === null || _b === void 0 ? void 0 : _b.close();
118
- }
119
- }
120
- async checkPasswordResettable() {
121
- const response = await client.query({
122
- query: gql `
123
- query {
124
- checkResettablePasswordToDefault
125
- }
126
- `
127
- });
128
- if (!response.errors) {
129
- this.passwordResettable = response.data.checkResettablePasswordToDefault;
130
- }
131
- }
132
- async checkUserCreatable() {
133
- const response = await client.query({
134
- query: gql `
135
- query {
136
- checkDefaultPassword
137
- }
138
- `
139
- });
140
- if (!response.errors) {
141
- this.userCreatable = response.data.checkDefaultPassword;
142
- }
143
- }
144
- async createUser(user) {
145
- if (await OxPrompt.open({
146
- title: i18next.t('text.are_you_sure'),
147
- text: i18next.t('text.are_you_sure_to_x_user', { x: i18next.t('button.create') }),
148
- confirmButton: { text: i18next.t('button.confirm') },
149
- cancelButton: { text: i18next.t('button.cancel') }
150
- })) {
151
- const response = await client.mutate({
152
- mutation: gql `
153
- mutation createUser($user: NewUser!) {
154
- createUser(user: $user) {
155
- name
156
- }
157
- }
158
- `,
159
- variables: { user },
160
- context: gqlContext()
161
- });
162
- if (!response.errors) {
163
- await OxPrompt.open({
164
- title: i18next.t('text.completed'),
165
- confirmButton: { text: i18next.t('button.confirm') }
166
- });
167
- await this.refreshUsers();
168
- }
169
- }
170
- }
171
- showToast(message) {
172
- document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }));
173
- }
174
- };
175
- SVUserManagement.styles = [
176
- css `
177
- :host {
178
- display: flex;
179
- flex-direction: column;
180
- background-color: var(--main-section-background-color);
181
- padding: var(--padding-wide);
182
- overflow: auto;
183
- }
184
-
185
- @media screen and (max-width: 600px) {
186
- :host {
187
- padding: var(--padding-narrow);
188
- }
189
- }
190
- `
191
- ];
192
- __decorate([
193
- property({ type: Array }),
194
- __metadata("design:type", Array)
195
- ], SVUserManagement.prototype, "domainUsers", void 0);
196
- __decorate([
197
- property({ type: Object }),
198
- __metadata("design:type", Object)
199
- ], SVUserManagement.prototype, "owner", void 0);
200
- __decorate([
201
- property({ type: String }),
202
- __metadata("design:type", String)
203
- ], SVUserManagement.prototype, "currentTab", void 0);
204
- __decorate([
205
- property({ type: Boolean }),
206
- __metadata("design:type", Boolean)
207
- ], SVUserManagement.prototype, "passwordResettable", void 0);
208
- __decorate([
209
- property({ type: Boolean }),
210
- __metadata("design:type", Boolean)
211
- ], SVUserManagement.prototype, "userCreatable", void 0);
212
- __decorate([
213
- query('#user-list'),
214
- __metadata("design:type", Object)
215
- ], SVUserManagement.prototype, "userListElement", void 0);
216
- SVUserManagement = __decorate([
217
- customElement('sv-user-management')
218
- ], SVUserManagement);
219
- //# sourceMappingURL=sv-user-management.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sv-user-management.js","sourceRoot":"","sources":["../../client/pages/sv-user-management.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@things-factory/component-ui'\nimport '@things-factory/auth-ui/dist-client/components/ownership-transfer-popup'\nimport '@things-factory/auth-ui/dist-client/components/user-role-editor'\nimport '@things-factory/auth-ui/dist-client/components/create-user'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { client, gqlContext } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { PageView } from '@operato/shell'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\n\n@customElement('sv-user-management')\nclass SVUserManagement extends PageView {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: var(--main-section-background-color);\n padding: var(--padding-wide);\n overflow: auto;\n }\n\n @media screen and (max-width: 600px) {\n :host {\n padding: var(--padding-narrow);\n }\n }\n `\n ]\n\n @property({ type: Array }) domainUsers: any[] = []\n @property({ type: Object }) owner: any\n @property({ type: String }) currentTab: string = ''\n @property({ type: Boolean }) passwordResettable: boolean = false\n @property({ type: Boolean }) userCreatable: boolean = false\n\n @query('#user-list') userListElement!: HTMLElement & { close: () => void }\n\n get context() {\n return {\n title: i18next.t('text.user management'),\n help: 'auth/users'\n }\n }\n\n render() {\n const groupingUser = (this.domainUsers || []).reduce(\n (groupingUser, user) => {\n const userType = user.userType\n if (!groupingUser[userType]) {\n groupingUser[userType] = []\n }\n user.activated = user.status === 'activated'\n groupingUser[userType].push(user)\n\n return groupingUser\n },\n {\n admin: [],\n user: [],\n application: [],\n appliance: []\n }\n )\n\n const USER_TYPES = {\n USER: i18next.t('label.user'),\n APPLICATION: i18next.t('label.application'),\n APPLIANCE: i18next.t('text.appliance')\n }\n\n const userSet = {\n [USER_TYPES.USER]: [...groupingUser.user, ...groupingUser.admin],\n [USER_TYPES.APPLICATION]: groupingUser.application,\n [USER_TYPES.APPLIANCE]: groupingUser.appliance\n }\n\n return html`\n ${this.userCreatable\n ? html`<create-user\n @create-user=${async event => {\n const user = event.detail\n user.userType = 'user'\n\n await this.createUser(user)\n }}\n ></create-user>`\n : ''}\n <quick-find-list\n id=\"user-list\"\n .data=${userSet}\n @tabChanged=${e => (this.currentTab = e.detail.currentTabKey)}\n .headerRenderer=${user => {\n return html`\n ${!user.activated\n ? html`\n <md-icon>do_disturb</md-icon>\n ${user.name}\n `\n : html` ${user.owner ? html` <md-icon>supervisor_account</md-icon> ` : ''} ${user.name} `}\n `\n }}\n .contentRenderer=${user =>\n html` <user-role-editor\n .user=${user}\n .domainOwner=${this.owner}\n .activate=${user.activated}\n @userUpdated=${this.refreshUsers.bind(this)}\n @ownershipTransferred=${this.refreshUsers.bind(this)}\n .passwordResettable=${this.passwordResettable}\n ></user-role-editor>`}\n ></quick-find-list>\n `\n }\n\n async pageUpdated(changes, lifecycle, before) {\n if (this.active) {\n this.refreshUsers()\n this.checkPasswordResettable()\n this.checkUserCreatable()\n }\n }\n\n async refreshUsers() {\n const domainUsersResp = await client.query({\n query: gql`\n query {\n users {\n items {\n id\n name\n email\n userType\n status\n owner\n }\n }\n }\n `,\n context: gqlContext()\n })\n\n if (!domainUsersResp.errors?.length) {\n this.domainUsers = domainUsersResp.data.users.items || []\n this.owner = this.domainUsers.filter(user => user.owner)[0] || {}\n this.userListElement?.close()\n }\n }\n\n async checkPasswordResettable() {\n const response = await client.query({\n query: gql`\n query {\n checkResettablePasswordToDefault\n }\n `\n })\n\n if (!response.errors) {\n this.passwordResettable = response.data.checkResettablePasswordToDefault\n }\n }\n\n async checkUserCreatable() {\n const response = await client.query({\n query: gql`\n query {\n checkDefaultPassword\n }\n `\n })\n\n if (!response.errors) {\n this.userCreatable = response.data.checkDefaultPassword\n }\n }\n\n async createUser(user) {\n if (\n await OxPrompt.open({\n title: i18next.t('text.are_you_sure'),\n text: i18next.t('text.are_you_sure_to_x_user', { x: i18next.t('button.create') }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const response = await client.mutate({\n mutation: gql`\n mutation createUser($user: NewUser!) {\n createUser(user: $user) {\n name\n }\n }\n `,\n variables: { user },\n context: gqlContext()\n })\n\n if (!response.errors) {\n await OxPrompt.open({\n title: i18next.t('text.completed'),\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n await this.refreshUsers()\n }\n }\n }\n\n showToast(message) {\n document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))\n }\n}\n"]}
@@ -1 +0,0 @@
1
- export default function route(page: string): "project-list" | "project-completed-list" | "kpi-value-list" | "kpi-metric-value-list" | "kpi-metric-value-manual-entry" | "users" | "/kpi-dashboard-map" | "project-detail" | "project-complete" | undefined;
@@ -1,31 +0,0 @@
1
- export default function route(page) {
2
- switch (page) {
3
- case '':
4
- return '/kpi-dashboard-map';
5
- case 'users':
6
- import('./pages/sv-user-management');
7
- return page;
8
- case 'project-list':
9
- import('./pages/sv-project-list');
10
- return page;
11
- case 'project-completed-list':
12
- import('./pages/sv-project-completed-list');
13
- return page;
14
- case 'project-detail':
15
- import('./pages/sv-project-detail');
16
- return page;
17
- case 'project-complete':
18
- import('./pages/sv-project-complete');
19
- return page;
20
- case 'kpi-value-list':
21
- import('./pages/kpi-value/kpi-value-list-page');
22
- return page;
23
- case 'kpi-metric-value-list':
24
- import('./pages/kpi-metric-value/kpi-metric-value-list-page');
25
- return page;
26
- case 'kpi-metric-value-manual-entry':
27
- import('./pages/kpi-metric-value/kpi-metric-value-manual-entry-page');
28
- return page;
29
- }
30
- }
31
- //# sourceMappingURL=route.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,EAAE;YACL,OAAO,oBAAoB,CAAA;QAE7B,KAAK,OAAO;YACV,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;QAEb,KAAK,cAAc;YACjB,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACjC,OAAO,IAAI,CAAA;QAEb,KAAK,wBAAwB;YAC3B,MAAM,CAAC,mCAAmC,CAAC,CAAA;YAC3C,OAAO,IAAI,CAAA;QAEb,KAAK,gBAAgB;YACnB,MAAM,CAAC,2BAA2B,CAAC,CAAA;YACnC,OAAO,IAAI,CAAA;QAEb,KAAK,kBAAkB;YACrB,MAAM,CAAC,6BAA6B,CAAC,CAAA;YACrC,OAAO,IAAI,CAAA;QAEb,KAAK,gBAAgB;YACnB,MAAM,CAAC,uCAAuC,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAA;QAEb,KAAK,uBAAuB;YAC1B,MAAM,CAAC,qDAAqD,CAAC,CAAA;YAC7D,OAAO,IAAI,CAAA;QAEb,KAAK,+BAA+B;YAClC,MAAM,CAAC,6DAA6D,CAAC,CAAA;YACrE,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC","sourcesContent":["export default function route(page: string) {\n switch (page) {\n case '':\n return '/kpi-dashboard-map'\n\n case 'users':\n import('./pages/sv-user-management')\n return page\n\n case 'project-list':\n import('./pages/sv-project-list')\n return page\n\n case 'project-completed-list':\n import('./pages/sv-project-completed-list')\n return page\n\n case 'project-detail':\n import('./pages/sv-project-detail')\n return page\n\n case 'project-complete':\n import('./pages/sv-project-complete')\n return page\n\n case 'kpi-value-list':\n import('./pages/kpi-value/kpi-value-list-page')\n return page\n\n case 'kpi-metric-value-list':\n import('./pages/kpi-metric-value/kpi-metric-value-list-page')\n return page\n\n case 'kpi-metric-value-manual-entry':\n import('./pages/kpi-metric-value/kpi-metric-value-manual-entry-page')\n return page\n }\n}\n"]}
@@ -1,5 +0,0 @@
1
- export declare const getProject: (projectId: string) => Promise<any>;
2
- export declare const getKpiMetrics: () => Promise<any>;
3
- export declare const getKpiMetricValues: (projectId: string) => Promise<any>;
4
- export declare const updateProjectCompleteStep1: (patches: any) => Promise<import("@apollo/client").InteropMutateResult<any>>;
5
- export declare const getKpiCategories: () => Promise<any>;
@@ -1,125 +0,0 @@
1
- import { gql } from '@apollo/client';
2
- import { client } from '@operato/graphql';
3
- export const getProject = async (projectId) => {
4
- const response = await client.query({
5
- query: gql `
6
- query Project($id: String!) {
7
- project(id: $id) {
8
- id
9
- name
10
- startDate
11
- endDate
12
- state
13
-
14
- completeReports {
15
- id
16
- name
17
- fullpath
18
- }
19
-
20
- buildingComplex {
21
- id
22
- coverageRatio
23
- floorAreaRatio
24
- workerCount
25
- designChangeCount
26
- constructionCost
27
- area
28
- }
29
- }
30
- }
31
- `,
32
- variables: { id: projectId }
33
- });
34
- if (response.errors) {
35
- return {};
36
- }
37
- return response.data.project;
38
- };
39
- export const getKpiMetrics = async () => {
40
- const response = await client.query({
41
- query: gql `
42
- query KpiMetrics {
43
- kpiMetrics {
44
- items {
45
- id
46
- name
47
- unit
48
- periodType
49
- }
50
- }
51
- }
52
- `
53
- });
54
- if (response.errors) {
55
- return [];
56
- }
57
- return response.data.kpiMetrics.items;
58
- };
59
- export const getKpiMetricValues = async (projectId) => {
60
- const filters = [{ name: 'org', operator: 'eq', value: projectId }];
61
- const response = await client.query({
62
- query: gql `
63
- query KpiMetricValues($filters: [Filter!]) {
64
- kpiMetricValues(filters: $filters) {
65
- items {
66
- id
67
- value
68
- unit
69
- periodType
70
- metricId
71
- }
72
- }
73
- }
74
- `,
75
- variables: {
76
- filters
77
- }
78
- });
79
- if (response.errors) {
80
- return [];
81
- }
82
- return response.data.kpiMetricValues.items;
83
- };
84
- export const updateProjectCompleteStep1 = async (patches) => {
85
- const response = await client.mutate({
86
- mutation: gql `
87
- mutation UpdateKpiMetricValuesCumulative($patches: [KpiMetricValuePatch!]!) {
88
- updateKpiMetricValuesCumulative(patches: $patches) {
89
- id
90
- }
91
- }
92
- `,
93
- variables: {
94
- patches
95
- }
96
- });
97
- return response;
98
- };
99
- export const getKpiCategories = async () => {
100
- const response = await client.query({
101
- query: gql `
102
- query {
103
- kpiCategories: kpisLevel1 {
104
- id
105
- name
106
- description
107
- active
108
- kpis: children {
109
- id
110
- name
111
- description
112
- formula
113
- active
114
- grades
115
- }
116
- }
117
- }
118
- `
119
- });
120
- if (response.errors) {
121
- return [];
122
- }
123
- return response.data.kpiCategories;
124
- };
125
- //# sourceMappingURL=complete-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"complete-api.js","sourceRoot":"","sources":["../../client/shared/complete-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;KA0BT;QACD,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;KAC7B,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;KAWT;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;IAC5D,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAEnE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;KAYT;QACD,SAAS,EAAE;YACT,OAAO;SACR;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAAE,OAAY,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;KAMZ;QACD,SAAS,EAAE;YACT,OAAO;SACR;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IACzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;KAiBT;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAA;AACpC,CAAC,CAAA","sourcesContent":["import { gql } from '@apollo/client'\nimport { client } from '@operato/graphql'\n\nexport const getProject = async (projectId: string) => {\n const response = await client.query({\n query: gql`\n query Project($id: String!) {\n project(id: $id) {\n id\n name\n startDate\n endDate\n state\n\n completeReports {\n id\n name\n fullpath\n }\n\n buildingComplex {\n id\n coverageRatio\n floorAreaRatio\n workerCount\n designChangeCount\n constructionCost\n area\n }\n }\n }\n `,\n variables: { id: projectId }\n })\n\n if (response.errors) {\n return {}\n }\n\n return response.data.project\n}\n\nexport const getKpiMetrics = async () => {\n const response = await client.query({\n query: gql`\n query KpiMetrics {\n kpiMetrics {\n items {\n id\n name\n unit\n periodType\n }\n }\n }\n `\n })\n\n if (response.errors) {\n return []\n }\n\n return response.data.kpiMetrics.items\n}\n\nexport const getKpiMetricValues = async (projectId: string) => {\n const filters = [{ name: 'org', operator: 'eq', value: projectId }]\n\n const response = await client.query({\n query: gql`\n query KpiMetricValues($filters: [Filter!]) {\n kpiMetricValues(filters: $filters) {\n items {\n id\n value\n unit\n periodType\n metricId\n }\n }\n }\n `,\n variables: {\n filters\n }\n })\n\n if (response.errors) {\n return []\n }\n\n return response.data.kpiMetricValues.items\n}\n\nexport const updateProjectCompleteStep1 = async (patches: any) => {\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateKpiMetricValuesCumulative($patches: [KpiMetricValuePatch!]!) {\n updateKpiMetricValuesCumulative(patches: $patches) {\n id\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n return response\n}\n\nexport const getKpiCategories = async () => {\n const response = await client.query({\n query: gql`\n query {\n kpiCategories: kpisLevel1 {\n id\n name\n description\n active\n kpis: children {\n id\n name\n description\n formula\n active\n grades\n }\n }\n }\n `\n })\n\n if (response.errors) {\n return []\n }\n\n return response.data.kpiCategories\n}\n"]}
@@ -1,2 +0,0 @@
1
- export declare const calcDiff: (a: string, b: string) => number;
2
- export declare const calcDateDiff: (a: string, b: string) => number;
@@ -1,22 +0,0 @@
1
- import moment from 'moment';
2
- // a와 b의 차이를 계산하여 값과 클래스를 반환
3
- export const calcDiff = (a, b) => {
4
- const origin = Number(a || '0');
5
- const complete = Number(b || '0');
6
- const diff = complete - origin;
7
- if (!isFinite(diff))
8
- return 0;
9
- return diff;
10
- };
11
- // a와 b의 날짜 차이를 계산하여 값과 클래스를 반환
12
- export const calcDateDiff = (a, b) => {
13
- const origin = moment(a, 'YYYY-MM-DD', true);
14
- const complete = moment(b, 'YYYY-MM-DD', true);
15
- if (!origin.isValid() || !complete.isValid())
16
- return 0;
17
- const diffDays = complete.diff(origin, 'days');
18
- if (diffDays === 0)
19
- return 0;
20
- return diffDays;
21
- };
22
- //# sourceMappingURL=func.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"func.js","sourceRoot":"","sources":["../../client/shared/func.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,CAAA;IAEtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAE5B,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA","sourcesContent":["import moment from 'moment'\n\n// a와 b의 차이를 계산하여 값과 클래스를 반환\nexport const calcDiff = (a: string, b: string): number => {\n const origin = Number(a || '0')\n const complete = Number(b || '0')\n const diff = complete - origin\n if (!isFinite(diff)) return 0\n return diff\n}\n\n// a와 b의 날짜 차이를 계산하여 값과 클래스를 반환\nexport const calcDateDiff = (a: string, b: string): number => {\n const origin = moment(a, 'YYYY-MM-DD', true)\n const complete = moment(b, 'YYYY-MM-DD', true)\n if (!origin.isValid() || !complete.isValid()) return 0\n\n const diffDays = complete.diff(origin, 'days')\n if (diffDays === 0) return 0\n\n return diffDays\n}\n"]}
@@ -1,51 +0,0 @@
1
- .dark {
2
- --md-sys-color-primary: rgb(173 198 255);
3
- --md-sys-color-surface-tint: rgb(173 198 255);
4
- --md-sys-color-on-primary: rgb(16 47 96);
5
- --md-sys-color-primary-container: rgb(43 70 120);
6
- --md-sys-color-on-primary-container: rgb(216 226 255);
7
- --md-sys-color-secondary: rgb(167 200 255);
8
- --md-sys-color-on-secondary: rgb(4 48 95);
9
- --md-sys-color-secondary-container: rgb(36 71 119);
10
- --md-sys-color-on-secondary-container: rgb(213 227 255);
11
- --md-sys-color-tertiary: rgb(234 181 238);
12
- --md-sys-color-on-tertiary: rgb(72 32 79);
13
- --md-sys-color-tertiary-container: rgb(96 55 103);
14
- --md-sys-color-on-tertiary-container: rgb(254 214 255);
15
- --md-sys-color-error: rgb(255 180 171);
16
- --md-sys-color-on-error: rgb(105 0 5);
17
- --md-sys-color-error-container: rgb(147 0 10);
18
- --md-sys-color-on-error-container: rgb(255 218 214);
19
- --md-sys-color-background: rgb(17 19 24);
20
- --md-sys-color-on-background: rgb(226 226 233);
21
- --md-sys-color-surface: rgb(17 19 24);
22
- --md-sys-color-on-surface: rgb(226 226 233);
23
- --md-sys-color-surface-variant: rgb(68 71 79);
24
- --md-sys-color-on-surface-variant: rgb(196 198 208);
25
- --md-sys-color-outline: rgb(142 144 153);
26
- --md-sys-color-outline-variant: rgb(68 71 79);
27
- --md-sys-color-shadow: rgb(0 0 0);
28
- --md-sys-color-scrim: rgb(0 0 0);
29
- --md-sys-color-inverse-surface: rgb(226 226 233);
30
- --md-sys-color-inverse-on-surface: rgb(47 48 54);
31
- --md-sys-color-inverse-primary: rgb(68 94 145);
32
- --md-sys-color-primary-fixed: rgb(216 226 255);
33
- --md-sys-color-on-primary-fixed: rgb(0 26 65);
34
- --md-sys-color-primary-fixed-dim: rgb(173 198 255);
35
- --md-sys-color-on-primary-fixed-variant: rgb(43 70 120);
36
- --md-sys-color-secondary-fixed: rgb(213 227 255);
37
- --md-sys-color-on-secondary-fixed: rgb(0 27 60);
38
- --md-sys-color-secondary-fixed-dim: rgb(167 200 255);
39
- --md-sys-color-on-secondary-fixed-variant: rgb(36 71 119);
40
- --md-sys-color-tertiary-fixed: rgb(254 214 255);
41
- --md-sys-color-on-tertiary-fixed: rgb(48 9 57);
42
- --md-sys-color-tertiary-fixed-dim: rgb(234 181 238);
43
- --md-sys-color-on-tertiary-fixed-variant: rgb(96 55 103);
44
- --md-sys-color-surface-dim: rgb(17 19 24);
45
- --md-sys-color-surface-bright: rgb(55 57 62);
46
- --md-sys-color-surface-container-lowest: rgb(12 14 19);
47
- --md-sys-color-surface-container-low: rgb(26 27 32);
48
- --md-sys-color-surface-container: rgb(30 31 37);
49
- --md-sys-color-surface-container-high: rgb(40 42 47);
50
- --md-sys-color-surface-container-highest: rgb(51 53 58);
51
- }
@@ -1,51 +0,0 @@
1
- .light {
2
- --md-sys-color-primary: rgb(11 77 162);
3
- --md-sys-color-surface-tint: rgb(68 94 145);
4
- --md-sys-color-on-primary: rgb(255 255 255);
5
- --md-sys-color-primary-container: rgb(216 226 255);
6
- --md-sys-color-on-primary-container: rgb(43 70 120);
7
- --md-sys-color-secondary: rgb(36, 41, 60);
8
- --md-sys-color-on-secondary: rgb(255 255 255);
9
- --md-sys-color-secondary-container: rgb(213 227 255);
10
- --md-sys-color-on-secondary-container: rgb(36 71 119);
11
- --md-sys-color-tertiary: rgb(122 79 128);
12
- --md-sys-color-on-tertiary: rgb(255 255 255);
13
- --md-sys-color-tertiary-container: rgb(254 214 255);
14
- --md-sys-color-on-tertiary-container: rgb(96 55 103);
15
- --md-sys-color-error: rgb(186 26 26);
16
- --md-sys-color-on-error: rgb(255 255 255);
17
- --md-sys-color-error-container: rgb(255 218 214);
18
- --md-sys-color-on-error-container: rgb(147 0 10);
19
- --md-sys-color-background: rgb(249 249 255);
20
- --md-sys-color-on-background: rgb(26 27 32);
21
- --md-sys-color-surface: rgb(249 249 255);
22
- --md-sys-color-on-surface: rgb(26 27 32);
23
- --md-sys-color-surface-variant: rgb(225 226 236);
24
- --md-sys-color-on-surface-variant: rgb(68 71 79);
25
- --md-sys-color-outline: rgb(117 119 127);
26
- --md-sys-color-outline-variant: rgb(196 198 208);
27
- --md-sys-color-shadow: rgb(0 0 0);
28
- --md-sys-color-scrim: rgb(0 0 0);
29
- --md-sys-color-inverse-surface: rgb(47 48 54);
30
- --md-sys-color-inverse-on-surface: rgb(240 240 247);
31
- --md-sys-color-inverse-primary: rgb(173 198 255);
32
- --md-sys-color-primary-fixed: rgb(216 226 255);
33
- --md-sys-color-on-primary-fixed: rgb(0 26 65);
34
- --md-sys-color-primary-fixed-dim: rgb(173 198 255);
35
- --md-sys-color-on-primary-fixed-variant: rgb(43 70 120);
36
- --md-sys-color-secondary-fixed: rgb(213 227 255);
37
- --md-sys-color-on-secondary-fixed: rgb(0 27 60);
38
- --md-sys-color-secondary-fixed-dim: rgb(167 200 255);
39
- --md-sys-color-on-secondary-fixed-variant: rgb(36 71 119);
40
- --md-sys-color-tertiary-fixed: rgb(254 214 255);
41
- --md-sys-color-on-tertiary-fixed: rgb(48 9 57);
42
- --md-sys-color-tertiary-fixed-dim: rgb(234 181 238);
43
- --md-sys-color-on-tertiary-fixed-variant: rgb(96 55 103);
44
- --md-sys-color-surface-dim: rgb(217 217 224);
45
- --md-sys-color-surface-bright: rgb(249 249 255);
46
- --md-sys-color-surface-container-lowest: rgb(255 255 255);
47
- --md-sys-color-surface-container-low: rgb(243 243 250);
48
- --md-sys-color-surface-container: rgb(237 237 244);
49
- --md-sys-color-surface-container-high: rgb(232 231 238);
50
- --md-sys-color-surface-container-highest: rgb(226 226 233);
51
- }