@dssp/dkpi 1.0.0-alpha.5 → 1.0.0-alpha.50

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 (128) hide show
  1. package/assets/favicon.ico +0 -0
  2. package/assets/manifest/apple-1024.png +0 -0
  3. package/assets/manifest/apple-120.png +0 -0
  4. package/assets/manifest/apple-152.png +0 -0
  5. package/assets/manifest/apple-167.png +0 -0
  6. package/assets/manifest/apple-180.png +0 -0
  7. package/assets/manifest/apple-touch-icon.png +0 -0
  8. package/assets/manifest/badge-128x128.png +0 -0
  9. package/assets/manifest/chrome-splashscreen-icon-384x384.png +0 -0
  10. package/assets/manifest/chrome-touch-icon-192x192.png +0 -0
  11. package/assets/manifest/icon-128x128.png +0 -0
  12. package/assets/manifest/icon-192x192.png +0 -0
  13. package/assets/manifest/icon-512x512.png +0 -0
  14. package/assets/manifest/icon-72x72.png +0 -0
  15. package/assets/manifest/icon-96x96.png +0 -0
  16. package/assets/manifest/image-metaog.png +0 -0
  17. package/assets/manifest/maskable_icon.png +0 -0
  18. package/assets/manifest/ms-icon-144x144.png +0 -0
  19. package/assets/manifest/ms-touch-icon-144x144-precomposed.png +0 -0
  20. package/assets/videos/intro.mp4 +0 -0
  21. package/dist-client/bootstrap.js +64 -4
  22. package/dist-client/bootstrap.js.map +1 -1
  23. package/dist-client/components/kpi-single-boxplot-chart.d.ts +24 -0
  24. package/dist-client/components/kpi-single-boxplot-chart.js +317 -0
  25. package/dist-client/components/kpi-single-boxplot-chart.js.map +1 -0
  26. package/dist-client/components/sv-pagenation-control.d.ts +18 -0
  27. package/dist-client/components/sv-pagenation-control.js +142 -0
  28. package/dist-client/components/sv-pagenation-control.js.map +1 -0
  29. package/dist-client/icons/menu-icons.d.ts +6 -0
  30. package/dist-client/icons/menu-icons.js +42 -0
  31. package/dist-client/icons/menu-icons.js.map +1 -1
  32. package/dist-client/menu.d.ts +23 -1
  33. package/dist-client/menu.js +57 -2
  34. package/dist-client/menu.js.map +1 -1
  35. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +58 -0
  36. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +731 -0
  37. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -0
  38. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +23 -0
  39. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +76 -0
  40. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +1 -0
  41. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +69 -0
  42. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +385 -0
  43. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -0
  44. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +12 -0
  45. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +174 -0
  46. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +1 -0
  47. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +41 -0
  48. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +191 -0
  49. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +1 -0
  50. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +23 -0
  51. package/dist-client/pages/kpi-value/kpi-value-importer.js +93 -0
  52. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +1 -0
  53. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +72 -0
  54. package/dist-client/pages/kpi-value/kpi-value-list-page.js +465 -0
  55. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -0
  56. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +13 -0
  57. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +248 -0
  58. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -0
  59. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +10 -0
  60. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +229 -0
  61. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +1 -0
  62. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.d.ts +12 -0
  63. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +213 -0
  64. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +1 -0
  65. package/dist-client/pages/sv-project-complete.d.ts +22 -0
  66. package/dist-client/pages/sv-project-complete.js +213 -0
  67. package/dist-client/pages/sv-project-complete.js.map +1 -0
  68. package/dist-client/pages/sv-project-completed-list.d.ts +24 -0
  69. package/dist-client/pages/sv-project-completed-list.js +357 -0
  70. package/dist-client/pages/sv-project-completed-list.js.map +1 -0
  71. package/dist-client/pages/sv-project-detail.d.ts +13 -0
  72. package/dist-client/pages/sv-project-detail.js +494 -0
  73. package/dist-client/pages/sv-project-detail.js.map +1 -0
  74. package/dist-client/pages/sv-project-list.d.ts +157 -0
  75. package/dist-client/pages/sv-project-list.js +431 -0
  76. package/dist-client/pages/sv-project-list.js.map +1 -0
  77. package/dist-client/route.d.ts +1 -1
  78. package/dist-client/route.js +22 -1
  79. package/dist-client/route.js.map +1 -1
  80. package/dist-client/shared/complete-api.d.ts +5 -0
  81. package/dist-client/shared/complete-api.js +125 -0
  82. package/dist-client/shared/complete-api.js.map +1 -0
  83. package/dist-client/shared/func.d.ts +2 -0
  84. package/dist-client/shared/func.js +22 -0
  85. package/dist-client/shared/func.js.map +1 -0
  86. package/dist-client/themes/dark.css +24 -24
  87. package/dist-client/themes/light.css +23 -23
  88. package/dist-client/tsconfig.tsbuildinfo +1 -1
  89. package/dist-client/viewparts/menu-tools.d.ts +37 -1
  90. package/dist-client/viewparts/menu-tools.js +348 -15
  91. package/dist-client/viewparts/menu-tools.js.map +1 -1
  92. package/dist-server/index.d.ts +2 -0
  93. package/dist-server/index.js +5 -0
  94. package/dist-server/index.js.map +1 -1
  95. package/dist-server/migrations/index.d.ts +1 -0
  96. package/dist-server/migrations/index.js +12 -0
  97. package/dist-server/migrations/index.js.map +1 -0
  98. package/dist-server/scripts/calculate-kpi-scores.d.ts +10 -0
  99. package/dist-server/scripts/calculate-kpi-scores.js +271 -0
  100. package/dist-server/scripts/calculate-kpi-scores.js.map +1 -0
  101. package/dist-server/scripts/load-grade-data-migration.d.ts +10 -0
  102. package/dist-server/scripts/load-grade-data-migration.js +194 -0
  103. package/dist-server/scripts/load-grade-data-migration.js.map +1 -0
  104. package/dist-server/scripts/propagate-parent-kpi-values.d.ts +10 -0
  105. package/dist-server/scripts/propagate-parent-kpi-values.js +440 -0
  106. package/dist-server/scripts/propagate-parent-kpi-values.js.map +1 -0
  107. package/dist-server/service/index.d.ts +6 -0
  108. package/dist-server/service/index.js +21 -0
  109. package/dist-server/service/index.js.map +1 -0
  110. package/dist-server/service/kpi-metric-value/index.d.ts +4 -0
  111. package/dist-server/service/kpi-metric-value/index.js +8 -0
  112. package/dist-server/service/kpi-metric-value/index.js.map +1 -0
  113. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +7 -0
  114. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +112 -0
  115. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -0
  116. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +7 -0
  117. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +47 -0
  118. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +1 -0
  119. package/dist-server/service/kpi-value/index.d.ts +3 -0
  120. package/dist-server/service/kpi-value/index.js +7 -0
  121. package/dist-server/service/kpi-value/index.js.map +1 -0
  122. package/dist-server/service/kpi-value/kpi-value-query.d.ts +7 -0
  123. package/dist-server/service/kpi-value/kpi-value-query.js +47 -0
  124. package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -0
  125. package/dist-server/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +62 -51
  127. package/schema.graphql +11497 -3215
  128. package/things-factory.config.js +7 -1
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KpiMetricValueMutation = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const shell_1 = require("@things-factory/shell");
7
+ const kpi_1 = require("@things-factory/kpi");
8
+ // import { ScalarObject } from '@things-factory/shell'
9
+ // import { getDefaultValueDate } from '@things-factory/kpi/utils/value-date-util'
10
+ let KpiMetricValueMutation = class KpiMetricValueMutation {
11
+ /* 프로젝트 수행과정 중에 (시간, 비용, 발생 건수 등) 누적된 값을 반영하여 KPI Metric Value 값을 수정 - 예를 들면, 총 설계 변경 건수, 총 건설 폐기물 발생량, 공사비, 공사기간, 재해 건수 등 */
12
+ async updateKpiMetricValuesCumulative(patches, context) {
13
+ const { domain, user, tx } = context.state;
14
+ const metricValueRepo = (0, shell_1.getRepository)(kpi_1.KpiMetricValue, tx);
15
+ const metricRepo = (0, shell_1.getRepository)(kpi_1.KpiMetric, tx);
16
+ const results = [];
17
+ for (const patch of patches) {
18
+ const metric = await metricRepo.findOne({ where: { id: patch.metricId } });
19
+ if (!metric) {
20
+ throw new Error(`Metric not found: ${patch.metricId}`);
21
+ }
22
+ const result = await metricValueRepo.save(Object.assign(Object.assign({ domain }, patch), { metric, updater: user }));
23
+ results.push(result);
24
+ }
25
+ return results;
26
+ }
27
+ /* 전문 감리사에 의해서 평가된 별점을 반영하여 KPI Metric Value 값을 수정 */
28
+ async updateKpiMetricValuesAssessment(patches, context) {
29
+ const { domain, user, tx } = context.state;
30
+ const metricValueRepo = (0, shell_1.getRepository)(kpi_1.KpiMetricValue, tx);
31
+ const metricRepo = (0, shell_1.getRepository)(kpi_1.KpiMetric, tx);
32
+ const results = [];
33
+ for (const patch of patches) {
34
+ const metric = await metricRepo.findOne({ where: { id: patch.metricId } });
35
+ if (!metric) {
36
+ throw new Error(`Metric not found: ${patch.metricId}`);
37
+ }
38
+ const result = await metricValueRepo.save(Object.assign(Object.assign({ domain }, patch), { metric, updater: user }));
39
+ results.push(result);
40
+ }
41
+ return results;
42
+ }
43
+ /* 전문 감리사에 의 감리 최종 평가서의 긍부정을 텍스트 분석하는 감정 분석 기반 평가값을 수정 */
44
+ async updateKpiMetricValuesSentiment(patches, context) {
45
+ const { domain, user, tx } = context.state;
46
+ const metricValueRepo = (0, shell_1.getRepository)(kpi_1.KpiMetricValue, tx);
47
+ const metricRepo = (0, shell_1.getRepository)(kpi_1.KpiMetric, tx);
48
+ // 이 케이스는 pdf 파일 업로드를 처리해야 한다.
49
+ const results = [];
50
+ for (const patch of patches) {
51
+ const metric = await metricRepo.findOne({ where: { id: patch.metricId } });
52
+ if (!metric) {
53
+ throw new Error(`Metric not found: ${patch.metricId}`);
54
+ }
55
+ const result = await metricValueRepo.save(Object.assign(Object.assign({ domain }, patch), { metric, updater: user }));
56
+ results.push(result);
57
+ }
58
+ return results;
59
+ }
60
+ async finalizeProjectWithKpiRecalculation(projectId, context) {
61
+ const { domain, user, tx } = context.state;
62
+ const metricValueRepo = (0, shell_1.getRepository)(kpi_1.KpiMetricValue, tx);
63
+ const metricRepo = (0, shell_1.getRepository)(kpi_1.KpiMetric, tx);
64
+ const results = [];
65
+ return true;
66
+ }
67
+ };
68
+ exports.KpiMetricValueMutation = KpiMetricValueMutation;
69
+ tslib_1.__decorate([
70
+ (0, type_graphql_1.Directive)('@transaction'),
71
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "mutation", domainOwnerGranted: true, superUserGranted: true)'),
72
+ (0, type_graphql_1.Mutation)(returns => [kpi_1.KpiMetricValue], { description: "To modify multiple cumulative KpiMetricValues' value" }),
73
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [kpi_1.KpiMetricValuePatch])),
74
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
75
+ tslib_1.__metadata("design:type", Function),
76
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
77
+ tslib_1.__metadata("design:returntype", Promise)
78
+ ], KpiMetricValueMutation.prototype, "updateKpiMetricValuesCumulative", null);
79
+ tslib_1.__decorate([
80
+ (0, type_graphql_1.Directive)('@transaction'),
81
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "mutation", domainOwnerGranted: true, superUserGranted: true)'),
82
+ (0, type_graphql_1.Mutation)(returns => [kpi_1.KpiMetricValue], { description: "To modify multiple assessment KpiMetricValues' value" }),
83
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [kpi_1.KpiMetricValuePatch])),
84
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
85
+ tslib_1.__metadata("design:type", Function),
86
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
87
+ tslib_1.__metadata("design:returntype", Promise)
88
+ ], KpiMetricValueMutation.prototype, "updateKpiMetricValuesAssessment", null);
89
+ tslib_1.__decorate([
90
+ (0, type_graphql_1.Directive)('@transaction'),
91
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "mutation", domainOwnerGranted: true, superUserGranted: true)'),
92
+ (0, type_graphql_1.Mutation)(returns => [kpi_1.KpiMetricValue], { description: "To modify multiple sentiment KpiMetricValues' value" }),
93
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [kpi_1.KpiMetricValuePatch])),
94
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
95
+ tslib_1.__metadata("design:type", Function),
96
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
97
+ tslib_1.__metadata("design:returntype", Promise)
98
+ ], KpiMetricValueMutation.prototype, "updateKpiMetricValuesSentiment", null);
99
+ tslib_1.__decorate([
100
+ (0, type_graphql_1.Directive)('@transaction'),
101
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "mutation", domainOwnerGranted: true, superUserGranted: true)'),
102
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To finalize project with KPI recalculation' }),
103
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('projectId', type => String)),
104
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
105
+ tslib_1.__metadata("design:type", Function),
106
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
107
+ tslib_1.__metadata("design:returntype", Promise)
108
+ ], KpiMetricValueMutation.prototype, "finalizeProjectWithKpiRecalculation", null);
109
+ exports.KpiMetricValueMutation = KpiMetricValueMutation = tslib_1.__decorate([
110
+ (0, type_graphql_1.Resolver)(kpi_1.KpiMetricValue)
111
+ ], KpiMetricValueMutation);
112
+ //# sourceMappingURL=kpi-metric-value-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-metric-value-mutation.js","sourceRoot":"","sources":["../../../server/service/kpi-metric-value/kpi-metric-value-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { getRepository } from '@things-factory/shell'\nimport { Float } from 'type-graphql'\nimport { KpiPeriodType, KpiMetric, KpiMetricValue, KpiMetricValuePatch } from '@things-factory/kpi'\n\n// import { ScalarObject } from '@things-factory/shell'\n// import { getDefaultValueDate } from '@things-factory/kpi/utils/value-date-util'\n\n@Resolver(KpiMetricValue)\nexport class KpiMetricValueMutation {\n /* 프로젝트 수행과정 중에 (시간, 비용, 발생 건수 등) 누적된 값을 반영하여 KPI Metric Value 값을 수정 - 예를 들면, 총 설계 변경 건수, 총 건설 폐기물 발생량, 공사비, 공사기간, 재해 건수 등 */\n @Directive('@transaction')\n @Directive('@privilege(category: \"kpi\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)')\n @Mutation(returns => [KpiMetricValue], { description: \"To modify multiple cumulative KpiMetricValues' value\" })\n async updateKpiMetricValuesCumulative(\n @Arg('patches', type => [KpiMetricValuePatch]) patches: KpiMetricValuePatch[],\n @Ctx() context: ResolverContext\n ): Promise<KpiMetricValue[]> {\n const { domain, user, tx } = context.state\n const metricValueRepo = getRepository(KpiMetricValue, tx)\n const metricRepo = getRepository(KpiMetric, tx)\n\n const results = []\n for (const patch of patches) {\n const metric = await metricRepo.findOne({ where: { id: patch.metricId } })\n if (!metric) {\n throw new Error(`Metric not found: ${patch.metricId}`)\n }\n const result = await metricValueRepo.save({\n domain,\n ...patch,\n metric,\n updater: user\n } as any)\n\n results.push(result)\n }\n\n return results\n }\n\n /* 전문 감리사에 의해서 평가된 별점을 반영하여 KPI Metric Value 값을 수정 */\n @Directive('@transaction')\n @Directive('@privilege(category: \"kpi\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)')\n @Mutation(returns => [KpiMetricValue], { description: \"To modify multiple assessment KpiMetricValues' value\" })\n async updateKpiMetricValuesAssessment(\n @Arg('patches', type => [KpiMetricValuePatch]) patches: KpiMetricValuePatch[],\n @Ctx() context: ResolverContext\n ): Promise<KpiMetricValue[]> {\n const { domain, user, tx } = context.state\n const metricValueRepo = getRepository(KpiMetricValue, tx)\n const metricRepo = getRepository(KpiMetric, tx)\n\n const results = []\n for (const patch of patches) {\n const metric = await metricRepo.findOne({ where: { id: patch.metricId } })\n if (!metric) {\n throw new Error(`Metric not found: ${patch.metricId}`)\n }\n const result = await metricValueRepo.save({\n domain,\n ...patch,\n metric,\n updater: user\n } as any)\n\n results.push(result)\n }\n\n return results\n }\n\n /* 전문 감리사에 의 감리 최종 평가서의 긍부정을 텍스트 분석하는 감정 분석 기반 평가값을 수정 */\n @Directive('@transaction')\n @Directive('@privilege(category: \"kpi\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)')\n @Mutation(returns => [KpiMetricValue], { description: \"To modify multiple sentiment KpiMetricValues' value\" })\n async updateKpiMetricValuesSentiment(\n @Arg('patches', type => [KpiMetricValuePatch]) patches: KpiMetricValuePatch[],\n @Ctx() context: ResolverContext\n ): Promise<KpiMetricValue[]> {\n const { domain, user, tx } = context.state\n const metricValueRepo = getRepository(KpiMetricValue, tx)\n const metricRepo = getRepository(KpiMetric, tx)\n\n // 이 케이스는 pdf 파일 업로드를 처리해야 한다.\n const results = []\n for (const patch of patches) {\n const metric = await metricRepo.findOne({ where: { id: patch.metricId } })\n if (!metric) {\n throw new Error(`Metric not found: ${patch.metricId}`)\n }\n const result = await metricValueRepo.save({\n domain,\n ...patch,\n metric,\n updater: user\n } as any)\n\n results.push(result)\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"kpi\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)')\n @Mutation(returns => Boolean, { description: 'To finalize project with KPI recalculation' })\n async finalizeProjectWithKpiRecalculation(\n @Arg('projectId', type => String) projectId: string,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, user, tx } = context.state\n const metricValueRepo = getRepository(KpiMetricValue, tx)\n const metricRepo = getRepository(KpiMetric, tx)\n\n const results = []\n\n return true\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { ListParam } from '@things-factory/shell';
2
+ import { KpiMetricValue, KpiMetricValueList } from '@things-factory/kpi';
3
+ import { Project } from '@dssp/project';
4
+ export declare class KpiMetricValueQuery {
5
+ kpiMetricValues(params: ListParam, context: ResolverContext): Promise<KpiMetricValueList>;
6
+ project(kpiMetricValue: KpiMetricValue): Promise<Project | null>;
7
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KpiMetricValueQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const shell_1 = require("@things-factory/shell");
7
+ const kpi_1 = require("@things-factory/kpi");
8
+ const project_1 = require("@dssp/project");
9
+ let KpiMetricValueQuery = class KpiMetricValueQuery {
10
+ async kpiMetricValues(params, context) {
11
+ const { domain } = context.state;
12
+ const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
13
+ domain,
14
+ params,
15
+ repository: await (0, shell_1.getRepository)(kpi_1.KpiMetricValue),
16
+ searchables: ['metricId', 'group', 'valueDate', 'org']
17
+ });
18
+ const [items, total] = await queryBuilder.getManyAndCount();
19
+ return { items, total };
20
+ }
21
+ async project(kpiMetricValue) {
22
+ if (!kpiMetricValue.org)
23
+ return null;
24
+ return await (0, shell_1.getRepository)(project_1.Project).findOneBy({ id: kpiMetricValue.org });
25
+ }
26
+ };
27
+ exports.KpiMetricValueQuery = KpiMetricValueQuery;
28
+ tslib_1.__decorate([
29
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
30
+ (0, type_graphql_1.Query)(returns => kpi_1.KpiMetricValueList, { description: 'To fetch multiple KpiMetricValues' }),
31
+ tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
32
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
33
+ tslib_1.__metadata("design:type", Function),
34
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
35
+ tslib_1.__metadata("design:returntype", Promise)
36
+ ], KpiMetricValueQuery.prototype, "kpiMetricValues", null);
37
+ tslib_1.__decorate([
38
+ (0, type_graphql_1.FieldResolver)(type => project_1.Project),
39
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
40
+ tslib_1.__metadata("design:type", Function),
41
+ tslib_1.__metadata("design:paramtypes", [kpi_1.KpiMetricValue]),
42
+ tslib_1.__metadata("design:returntype", Promise)
43
+ ], KpiMetricValueQuery.prototype, "project", null);
44
+ exports.KpiMetricValueQuery = KpiMetricValueQuery = tslib_1.__decorate([
45
+ (0, type_graphql_1.Resolver)(kpi_1.KpiMetricValue)
46
+ ], KpiMetricValueQuery);
47
+ //# sourceMappingURL=kpi-metric-value-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-metric-value-query.js","sourceRoot":"","sources":["../../../server/service/kpi-metric-value/kpi-metric-value-query.ts"],"names":[],"mappings":";;;;AAAA,+CAA8F;AAC9F,iDAAuG;AAEvG,6CAAwE;AACxE,2CAAuC;AAGhC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAGxB,AAAN,KAAK,CAAC,eAAe,CACM,MAAiB,EACnC,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,MAAM;YACN,MAAM;YACN,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,oBAAc,CAAC;YAC/C,WAAW,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;SACvD,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QAE3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,cAA8B;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QACpC,OAAO,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,CAAA;IAC3E,CAAC;CACF,CAAA;AAzBY,kDAAmB;AAGxB;IAFL,IAAA,wBAAS,EAAC,mGAAmG,CAAC;IAC9G,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,wBAAkB,EAAE,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;IAExF,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IACvB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAD2B,iBAAS;;0DAc3C;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAO,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAiB,oBAAc;;kDAGnD;8BAxBU,mBAAmB;IAD/B,IAAA,uBAAQ,EAAC,oBAAc,CAAC;GACZ,mBAAmB,CAyB/B","sourcesContent":["import { Directive, Resolver, Query, Args, Arg, Ctx, FieldResolver, Root } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { KpiMetricValue, KpiMetricValueList } from '@things-factory/kpi'\nimport { Project } from '@dssp/project'\n\n@Resolver(KpiMetricValue)\nexport class KpiMetricValueQuery {\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => KpiMetricValueList, { description: 'To fetch multiple KpiMetricValues' })\n async kpiMetricValues(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<KpiMetricValueList> {\n const { domain } = context.state\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiMetricValue),\n searchables: ['metricId', 'group', 'valueDate', 'org']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => Project)\n async project(@Root() kpiMetricValue: KpiMetricValue): Promise<Project | null> {\n if (!kpiMetricValue.org) return null\n return await getRepository(Project).findOneBy({ id: kpiMetricValue.org })\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { KpiValueQueryForProject } from './kpi-value-query';
2
+ export declare const resolvers: (typeof KpiValueQueryForProject)[];
3
+ export declare const subscribers: any[];
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.subscribers = exports.resolvers = void 0;
4
+ const kpi_value_query_1 = require("./kpi-value-query");
5
+ exports.resolvers = [kpi_value_query_1.KpiValueQueryForProject];
6
+ exports.subscribers = [];
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/kpi-value/index.ts"],"names":[],"mappings":";;;AAAA,uDAA2D;AAE9C,QAAA,SAAS,GAAG,CAAC,yCAAuB,CAAC,CAAA;AACrC,QAAA,WAAW,GAAG,EAAE,CAAA","sourcesContent":["import { KpiValueQueryForProject } from './kpi-value-query'\n\nexport const resolvers = [KpiValueQueryForProject]\nexport const subscribers = []\n"]}
@@ -0,0 +1,7 @@
1
+ import { ListParam } from '@things-factory/shell';
2
+ import { KpiValue, KpiValueList } from '@things-factory/kpi';
3
+ import { Project } from '@dssp/project/dist-server/service/project/project';
4
+ export declare class KpiValueQueryForProject {
5
+ kpiValues(params: ListParam, context: ResolverContext): Promise<KpiValueList>;
6
+ project(kpiValue: KpiValue): Promise<Project | null>;
7
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KpiValueQueryForProject = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const shell_1 = require("@things-factory/shell");
7
+ const kpi_1 = require("@things-factory/kpi");
8
+ const project_1 = require("@dssp/project/dist-server/service/project/project");
9
+ let KpiValueQueryForProject = class KpiValueQueryForProject {
10
+ async kpiValues(params, context) {
11
+ const { domain } = context.state;
12
+ const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
13
+ domain,
14
+ params,
15
+ repository: await (0, shell_1.getRepository)(kpi_1.KpiValue),
16
+ searchables: ['kpi', 'group', 'valueDate']
17
+ });
18
+ const [items, total] = await queryBuilder.getManyAndCount();
19
+ return { items, total };
20
+ }
21
+ async project(kpiValue) {
22
+ if (!kpiValue.group)
23
+ return null;
24
+ return await (0, shell_1.getRepository)(project_1.Project).findOneBy({ id: kpiValue.group });
25
+ }
26
+ };
27
+ exports.KpiValueQueryForProject = KpiValueQueryForProject;
28
+ tslib_1.__decorate([
29
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
30
+ (0, type_graphql_1.Query)(returns => kpi_1.KpiValueList, { description: 'To fetch multiple KpiValues' }),
31
+ tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
32
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
33
+ tslib_1.__metadata("design:type", Function),
34
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
35
+ tslib_1.__metadata("design:returntype", Promise)
36
+ ], KpiValueQueryForProject.prototype, "kpiValues", null);
37
+ tslib_1.__decorate([
38
+ (0, type_graphql_1.FieldResolver)(type => project_1.Project),
39
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
40
+ tslib_1.__metadata("design:type", Function),
41
+ tslib_1.__metadata("design:paramtypes", [kpi_1.KpiValue]),
42
+ tslib_1.__metadata("design:returntype", Promise)
43
+ ], KpiValueQueryForProject.prototype, "project", null);
44
+ exports.KpiValueQueryForProject = KpiValueQueryForProject = tslib_1.__decorate([
45
+ (0, type_graphql_1.Resolver)(kpi_1.KpiValue)
46
+ ], KpiValueQueryForProject);
47
+ //# sourceMappingURL=kpi-value-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-value-query.js","sourceRoot":"","sources":["../../../server/service/kpi-value/kpi-value-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAqG;AACrG,iDAAuG;AAEvG,6CAAiE;AACjE,+EAA2E;AAGpE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAG5B,AAAN,KAAK,CAAC,SAAS,CAA0B,MAAiB,EAAS,OAAwB;QACzF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,MAAM;YACN,MAAM;YACN,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,cAAQ,CAAC;YACzC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC;SAC3C,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QAE3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,QAAkB;QACtC,IAAI,CAAC,QAAQ,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAChC,OAAO,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACvE,CAAC;CACF,CAAA;AAvBY,0DAAuB;AAG5B;IAFL,IAAA,wBAAS,EAAC,mGAAmG,CAAC;IAC9G,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,kBAAY,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAC9D,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;wDAazD;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAO,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAW,cAAQ;;sDAGvC;kCAtBU,uBAAuB;IADnC,IAAA,uBAAQ,EAAC,cAAQ,CAAC;GACN,uBAAuB,CAuBnC","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive, Float } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Kpi, KpiValue, KpiValueList } from '@things-factory/kpi'\nimport { Project } from '@dssp/project/dist-server/service/project/project'\n\n@Resolver(KpiValue)\nexport class KpiValueQueryForProject {\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => KpiValueList, { description: 'To fetch multiple KpiValues' })\n async kpiValues(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<KpiValueList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiValue),\n searchables: ['kpi', 'group', 'valueDate']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => Project)\n async project(@Root() kpiValue: KpiValue): Promise<Project | null> {\n if (!kpiValue.group) return null\n return await getRepository(Project).findOneBy({ id: kpiValue.group })\n }\n}\n"]}