@things-factory/kpi 10.1.247 → 10.1.248

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 (409) hide show
  1. package/package.json +3 -3
  2. package/dist-client/bootstrap.d.ts +0 -2
  3. package/dist-client/bootstrap.js +0 -7
  4. package/dist-client/bootstrap.js.map +0 -1
  5. package/dist-client/charts/kpi-boxplot-chart.d.ts +0 -24
  6. package/dist-client/charts/kpi-boxplot-chart.js +0 -324
  7. package/dist-client/charts/kpi-boxplot-chart.js.map +0 -1
  8. package/dist-client/charts/kpi-mini-trend-chart.d.ts +0 -14
  9. package/dist-client/charts/kpi-mini-trend-chart.js +0 -148
  10. package/dist-client/charts/kpi-mini-trend-chart.js.map +0 -1
  11. package/dist-client/charts/kpi-radar-chart.d.ts +0 -16
  12. package/dist-client/charts/kpi-radar-chart.js +0 -138
  13. package/dist-client/charts/kpi-radar-chart.js.map +0 -1
  14. package/dist-client/charts/kpi-trend-chart.d.ts +0 -25
  15. package/dist-client/charts/kpi-trend-chart.js +0 -186
  16. package/dist-client/charts/kpi-trend-chart.js.map +0 -1
  17. package/dist-client/google-map/common-google-map.d.ts +0 -34
  18. package/dist-client/google-map/common-google-map.js +0 -333
  19. package/dist-client/google-map/common-google-map.js.map +0 -1
  20. package/dist-client/google-map/google-map-loader.d.ts +0 -8
  21. package/dist-client/google-map/google-map-loader.js +0 -22
  22. package/dist-client/google-map/google-map-loader.js.map +0 -1
  23. package/dist-client/index.d.ts +0 -1
  24. package/dist-client/index.js +0 -2
  25. package/dist-client/index.js.map +0 -1
  26. package/dist-client/pages/kpi/kpi-grade-editor.d.ts +0 -35
  27. package/dist-client/pages/kpi/kpi-grade-editor.js +0 -165
  28. package/dist-client/pages/kpi/kpi-grade-editor.js.map +0 -1
  29. package/dist-client/pages/kpi/kpi-importer.d.ts +0 -23
  30. package/dist-client/pages/kpi/kpi-importer.js +0 -92
  31. package/dist-client/pages/kpi/kpi-importer.js.map +0 -1
  32. package/dist-client/pages/kpi/kpi-list-page.d.ts +0 -136
  33. package/dist-client/pages/kpi/kpi-list-page.js +0 -948
  34. package/dist-client/pages/kpi/kpi-list-page.js.map +0 -1
  35. package/dist-client/pages/kpi/kpi-overview-sample.d.ts +0 -36
  36. package/dist-client/pages/kpi/kpi-overview-sample.js +0 -264
  37. package/dist-client/pages/kpi/kpi-overview-sample.js.map +0 -1
  38. package/dist-client/pages/kpi/kpi-overview.d.ts +0 -14
  39. package/dist-client/pages/kpi/kpi-overview.js +0 -361
  40. package/dist-client/pages/kpi/kpi-overview.js.map +0 -1
  41. package/dist-client/pages/kpi/kpi-tree-page.d.ts +0 -51
  42. package/dist-client/pages/kpi/kpi-tree-page.js +0 -355
  43. package/dist-client/pages/kpi/kpi-tree-page.js.map +0 -1
  44. package/dist-client/pages/kpi/kpi-view.d.ts +0 -12
  45. package/dist-client/pages/kpi/kpi-view.js +0 -193
  46. package/dist-client/pages/kpi/kpi-view.js.map +0 -1
  47. package/dist-client/pages/kpi/kpi-viz-editor.d.ts +0 -19
  48. package/dist-client/pages/kpi/kpi-viz-editor.js +0 -562
  49. package/dist-client/pages/kpi/kpi-viz-editor.js.map +0 -1
  50. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +0 -17
  51. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +0 -279
  52. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +0 -1
  53. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +0 -19
  54. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +0 -385
  55. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +0 -1
  56. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +0 -23
  57. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +0 -465
  58. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +0 -1
  59. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.d.ts +0 -8
  60. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js +0 -78
  61. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js.map +0 -1
  62. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +0 -24
  63. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +0 -440
  64. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +0 -1
  65. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +0 -33
  66. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +0 -444
  67. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +0 -1
  68. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +0 -23
  69. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +0 -369
  70. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +0 -1
  71. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.d.ts +0 -18
  72. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js +0 -128
  73. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js.map +0 -1
  74. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +0 -31
  75. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +0 -493
  76. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +0 -1
  77. package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +0 -50
  78. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +0 -884
  79. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +0 -1
  80. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.d.ts +0 -12
  81. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js +0 -82
  82. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js.map +0 -1
  83. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.d.ts +0 -11
  84. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js +0 -65
  85. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js.map +0 -1
  86. package/dist-client/pages/kpi-dashboard/kpi-list-summary.d.ts +0 -13
  87. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js +0 -115
  88. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js.map +0 -1
  89. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.d.ts +0 -15
  90. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +0 -146
  91. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +0 -1
  92. package/dist-client/pages/kpi-dashboard/kpi-value-entry.d.ts +0 -7
  93. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js +0 -86
  94. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js.map +0 -1
  95. package/dist-client/pages/kpi-history/kpi-history-list-page.d.ts +0 -21
  96. package/dist-client/pages/kpi-history/kpi-history-list-page.js +0 -160
  97. package/dist-client/pages/kpi-history/kpi-history-list-page.js.map +0 -1
  98. package/dist-client/pages/kpi-metric/kpi-metric-importer.d.ts +0 -23
  99. package/dist-client/pages/kpi-metric/kpi-metric-importer.js +0 -92
  100. package/dist-client/pages/kpi-metric/kpi-metric-importer.js.map +0 -1
  101. package/dist-client/pages/kpi-metric/kpi-metric-list-page.d.ts +0 -65
  102. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +0 -415
  103. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +0 -1
  104. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +0 -52
  105. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +0 -678
  106. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +0 -1
  107. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +0 -23
  108. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +0 -75
  109. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +0 -1
  110. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +0 -64
  111. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +0 -311
  112. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +0 -1
  113. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +0 -12
  114. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +0 -175
  115. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +0 -1
  116. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +0 -35
  117. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +0 -161
  118. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +0 -1
  119. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.d.ts +0 -47
  120. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js +0 -655
  121. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js.map +0 -1
  122. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.d.ts +0 -23
  123. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.js +0 -92
  124. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.js.map +0 -1
  125. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.d.ts +0 -65
  126. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js +0 -416
  127. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js.map +0 -1
  128. package/dist-client/pages/kpi-value/kpi-value-editor-page.d.ts +0 -50
  129. package/dist-client/pages/kpi-value/kpi-value-editor-page.js +0 -700
  130. package/dist-client/pages/kpi-value/kpi-value-editor-page.js.map +0 -1
  131. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +0 -23
  132. package/dist-client/pages/kpi-value/kpi-value-importer.js +0 -92
  133. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +0 -1
  134. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +0 -73
  135. package/dist-client/pages/kpi-value/kpi-value-list-page.js +0 -403
  136. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +0 -1
  137. package/dist-client/route.d.ts +0 -1
  138. package/dist-client/route.js +0 -47
  139. package/dist-client/route.js.map +0 -1
  140. package/dist-client/tsconfig.tsbuildinfo +0 -1
  141. package/dist-client/viewparts/kpi-metric-input.d.ts +0 -23
  142. package/dist-client/viewparts/kpi-metric-input.js +0 -140
  143. package/dist-client/viewparts/kpi-metric-input.js.map +0 -1
  144. package/dist-client/viewparts/kpi-metric-meta-editor.d.ts +0 -36
  145. package/dist-client/viewparts/kpi-metric-meta-editor.js +0 -321
  146. package/dist-client/viewparts/kpi-metric-meta-editor.js.map +0 -1
  147. package/dist-client/viewparts/metric-input-hint.d.ts +0 -26
  148. package/dist-client/viewparts/metric-input-hint.js +0 -19
  149. package/dist-client/viewparts/metric-input-hint.js.map +0 -1
  150. package/dist-client/viewparts/metric-input.test.d.ts +0 -1
  151. package/dist-client/viewparts/metric-input.test.js +0 -43
  152. package/dist-client/viewparts/metric-input.test.js.map +0 -1
  153. package/dist-client/viewparts/metric-renderer-registry.d.ts +0 -18
  154. package/dist-client/viewparts/metric-renderer-registry.js +0 -29
  155. package/dist-client/viewparts/metric-renderer-registry.js.map +0 -1
  156. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.d.ts +0 -19
  157. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.js +0 -76
  158. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.js.map +0 -1
  159. package/dist-server/calculator/calculator.test.d.ts +0 -1
  160. package/dist-server/calculator/calculator.test.js +0 -126
  161. package/dist-server/calculator/calculator.test.js.map +0 -1
  162. package/dist-server/calculator/evaluator.d.ts +0 -8
  163. package/dist-server/calculator/evaluator.js +0 -42
  164. package/dist-server/calculator/evaluator.js.map +0 -1
  165. package/dist-server/calculator/functions.d.ts +0 -3
  166. package/dist-server/calculator/functions.js +0 -62
  167. package/dist-server/calculator/functions.js.map +0 -1
  168. package/dist-server/calculator/index.d.ts +0 -6
  169. package/dist-server/calculator/index.js +0 -10
  170. package/dist-server/calculator/index.js.map +0 -1
  171. package/dist-server/calculator/parser.d.ts +0 -34
  172. package/dist-server/calculator/parser.js +0 -185
  173. package/dist-server/calculator/parser.js.map +0 -1
  174. package/dist-server/calculator/provider.d.ts +0 -8
  175. package/dist-server/calculator/provider.js +0 -13
  176. package/dist-server/calculator/provider.js.map +0 -1
  177. package/dist-server/calculator/score.d.ts +0 -21
  178. package/dist-server/calculator/score.js +0 -36
  179. package/dist-server/calculator/score.js.map +0 -1
  180. package/dist-server/calculator/score.test.d.ts +0 -1
  181. package/dist-server/calculator/score.test.js +0 -47
  182. package/dist-server/calculator/score.test.js.map +0 -1
  183. package/dist-server/calculator/validate.d.ts +0 -15
  184. package/dist-server/calculator/validate.js +0 -30
  185. package/dist-server/calculator/validate.js.map +0 -1
  186. package/dist-server/calculator/validate.test.d.ts +0 -1
  187. package/dist-server/calculator/validate.test.js +0 -45
  188. package/dist-server/calculator/validate.test.js.map +0 -1
  189. package/dist-server/controllers/index.d.ts +0 -2
  190. package/dist-server/controllers/index.js +0 -6
  191. package/dist-server/controllers/index.js.map +0 -1
  192. package/dist-server/controllers/kpi-metric-value-provider.d.ts +0 -11
  193. package/dist-server/controllers/kpi-metric-value-provider.js +0 -97
  194. package/dist-server/controllers/kpi-metric-value-provider.js.map +0 -1
  195. package/dist-server/controllers/kpi-value-provider.d.ts +0 -11
  196. package/dist-server/controllers/kpi-value-provider.js +0 -50
  197. package/dist-server/controllers/kpi-value-provider.js.map +0 -1
  198. package/dist-server/index.d.ts +0 -5
  199. package/dist-server/index.js +0 -9
  200. package/dist-server/index.js.map +0 -1
  201. package/dist-server/migrations/1752190849680-seed-kpi-metrics.d.ts +0 -6
  202. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js +0 -102
  203. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js.map +0 -1
  204. package/dist-server/migrations/1752190849681-seed-kpi.d.ts +0 -5
  205. package/dist-server/migrations/1752190849681-seed-kpi.js +0 -315
  206. package/dist-server/migrations/1752190849681-seed-kpi.js.map +0 -1
  207. package/dist-server/migrations/1752192090123-add-grades-to-kpi.d.ts +0 -7
  208. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js +0 -51
  209. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js.map +0 -1
  210. package/dist-server/migrations/1752192090124-add-kpi-statistics.d.ts +0 -5
  211. package/dist-server/migrations/1752192090124-add-kpi-statistics.js +0 -710
  212. package/dist-server/migrations/1752192090124-add-kpi-statistics.js.map +0 -1
  213. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.d.ts +0 -6
  214. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js +0 -111
  215. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js.map +0 -1
  216. package/dist-server/migrations/1752192090129-seed-kpi-values.d.ts +0 -6
  217. package/dist-server/migrations/1752192090129-seed-kpi-values.js +0 -187
  218. package/dist-server/migrations/1752192090129-seed-kpi-values.js.map +0 -1
  219. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.d.ts +0 -10
  220. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.js +0 -26
  221. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.js.map +0 -1
  222. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.d.ts +0 -11
  223. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.js +0 -54
  224. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.js.map +0 -1
  225. package/dist-server/migrations/grade-data/x11-performance-table.json +0 -962
  226. package/dist-server/migrations/grade-data/x12-performance-table.json +0 -611
  227. package/dist-server/migrations/grade-data/x14-performance-table.json +0 -42
  228. package/dist-server/migrations/grade-data/x21-performance-table.json +0 -889
  229. package/dist-server/migrations/grade-data/x22-performance-table.json +0 -1064
  230. package/dist-server/migrations/grade-data/x23-performance-table.json +0 -42
  231. package/dist-server/migrations/grade-data/x31-performance-table.json +0 -644
  232. package/dist-server/migrations/grade-data/x32-performance-table.json +0 -993
  233. package/dist-server/migrations/grade-data/x33-performance-table.json +0 -195
  234. package/dist-server/migrations/grade-data/x34-performance-table.json +0 -12
  235. package/dist-server/migrations/grade-data/x35-performance-table.json +0 -42
  236. package/dist-server/migrations/grade-data/x41-performance-table.json +0 -825
  237. package/dist-server/migrations/grade-data/x42-performance-table.json +0 -786
  238. package/dist-server/migrations/grade-data/x43-performance-table.json +0 -12
  239. package/dist-server/migrations/grade-data/x44-performance-table.json +0 -42
  240. package/dist-server/migrations/grade-data/x51-performance-table.json +0 -924
  241. package/dist-server/migrations/grade-data/x52-performance-table.json +0 -42
  242. package/dist-server/migrations/grade-data/x61-performance-table.json +0 -261
  243. package/dist-server/migrations/grade-data/x62-performance-table.json +0 -42
  244. package/dist-server/migrations/index.d.ts +0 -1
  245. package/dist-server/migrations/index.js +0 -12
  246. package/dist-server/migrations/index.js.map +0 -1
  247. package/dist-server/migrations/seed-data/kpi-metrics-seed.json +0 -517
  248. package/dist-server/migrations/seed-data/kpi-org-scope-seed.json +0 -1676
  249. package/dist-server/migrations/seed-data/kpi-scopes-seed.json +0 -121
  250. package/dist-server/migrations/seed-data/kpi-values-seed.json +0 -402
  251. package/dist-server/migrations/seed-data/kpis-seed.json +0 -488
  252. package/dist-server/migrations/seed-data/scope-definitions-seed.json +0 -90
  253. package/dist-server/routes.d.ts +0 -1
  254. package/dist-server/routes.js +0 -72
  255. package/dist-server/routes.js.map +0 -1
  256. package/dist-server/service/index.d.ts +0 -15
  257. package/dist-server/service/index.js +0 -49
  258. package/dist-server/service/index.js.map +0 -1
  259. package/dist-server/service/kpi/aggregate-kpi.d.ts +0 -8
  260. package/dist-server/service/kpi/aggregate-kpi.js +0 -123
  261. package/dist-server/service/kpi/aggregate-kpi.js.map +0 -1
  262. package/dist-server/service/kpi/event-subscriber.d.ts +0 -9
  263. package/dist-server/service/kpi/event-subscriber.js +0 -31
  264. package/dist-server/service/kpi/event-subscriber.js.map +0 -1
  265. package/dist-server/service/kpi/index.d.ts +0 -8
  266. package/dist-server/service/kpi/index.js +0 -12
  267. package/dist-server/service/kpi/index.js.map +0 -1
  268. package/dist-server/service/kpi/kpi-formula.service.d.ts +0 -49
  269. package/dist-server/service/kpi/kpi-formula.service.js +0 -165
  270. package/dist-server/service/kpi/kpi-formula.service.js.map +0 -1
  271. package/dist-server/service/kpi/kpi-grade.types.d.ts +0 -22
  272. package/dist-server/service/kpi/kpi-grade.types.js +0 -3
  273. package/dist-server/service/kpi/kpi-grade.types.js.map +0 -1
  274. package/dist-server/service/kpi/kpi-history.d.ts +0 -29
  275. package/dist-server/service/kpi/kpi-history.js +0 -148
  276. package/dist-server/service/kpi/kpi-history.js.map +0 -1
  277. package/dist-server/service/kpi/kpi-mutation.d.ts +0 -14
  278. package/dist-server/service/kpi/kpi-mutation.js +0 -553
  279. package/dist-server/service/kpi/kpi-mutation.js.map +0 -1
  280. package/dist-server/service/kpi/kpi-query.d.ts +0 -24
  281. package/dist-server/service/kpi/kpi-query.js +0 -309
  282. package/dist-server/service/kpi/kpi-query.js.map +0 -1
  283. package/dist-server/service/kpi/kpi-type.d.ts +0 -48
  284. package/dist-server/service/kpi/kpi-type.js +0 -221
  285. package/dist-server/service/kpi/kpi-type.js.map +0 -1
  286. package/dist-server/service/kpi/kpi.d.ts +0 -130
  287. package/dist-server/service/kpi/kpi.js +0 -356
  288. package/dist-server/service/kpi/kpi.js.map +0 -1
  289. package/dist-server/service/kpi-alert/index.d.ts +0 -2
  290. package/dist-server/service/kpi-alert/index.js +0 -6
  291. package/dist-server/service/kpi-alert/index.js.map +0 -1
  292. package/dist-server/service/kpi-alert/kpi-alert-query.d.ts +0 -4
  293. package/dist-server/service/kpi-alert/kpi-alert-query.js +0 -72
  294. package/dist-server/service/kpi-alert/kpi-alert-query.js.map +0 -1
  295. package/dist-server/service/kpi-alert/kpi-alert-type.d.ts +0 -8
  296. package/dist-server/service/kpi-alert/kpi-alert-type.js +0 -33
  297. package/dist-server/service/kpi-alert/kpi-alert-type.js.map +0 -1
  298. package/dist-server/service/kpi-metric/aggregate-kpi-metric.d.ts +0 -8
  299. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js +0 -126
  300. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js.map +0 -1
  301. package/dist-server/service/kpi-metric/index.d.ts +0 -6
  302. package/dist-server/service/kpi-metric/index.js +0 -10
  303. package/dist-server/service/kpi-metric/index.js.map +0 -1
  304. package/dist-server/service/kpi-metric/kpi-metric-meta.d.ts +0 -46
  305. package/dist-server/service/kpi-metric/kpi-metric-meta.js +0 -27
  306. package/dist-server/service/kpi-metric/kpi-metric-meta.js.map +0 -1
  307. package/dist-server/service/kpi-metric/kpi-metric-meta.test.d.ts +0 -1
  308. package/dist-server/service/kpi-metric/kpi-metric-meta.test.js +0 -43
  309. package/dist-server/service/kpi-metric/kpi-metric-meta.test.js.map +0 -1
  310. package/dist-server/service/kpi-metric/kpi-metric-mutation.d.ts +0 -10
  311. package/dist-server/service/kpi-metric/kpi-metric-mutation.js +0 -296
  312. package/dist-server/service/kpi-metric/kpi-metric-mutation.js.map +0 -1
  313. package/dist-server/service/kpi-metric/kpi-metric-query.d.ts +0 -14
  314. package/dist-server/service/kpi-metric/kpi-metric-query.js +0 -126
  315. package/dist-server/service/kpi-metric/kpi-metric-query.js.map +0 -1
  316. package/dist-server/service/kpi-metric/kpi-metric-type.d.ts +0 -45
  317. package/dist-server/service/kpi-metric/kpi-metric-type.js +0 -177
  318. package/dist-server/service/kpi-metric/kpi-metric-type.js.map +0 -1
  319. package/dist-server/service/kpi-metric/kpi-metric.d.ts +0 -39
  320. package/dist-server/service/kpi-metric/kpi-metric.js +0 -174
  321. package/dist-server/service/kpi-metric/kpi-metric.js.map +0 -1
  322. package/dist-server/service/kpi-metric-value/index.d.ts +0 -6
  323. package/dist-server/service/kpi-metric-value/index.js +0 -10
  324. package/dist-server/service/kpi-metric-value/index.js.map +0 -1
  325. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +0 -11
  326. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +0 -283
  327. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +0 -1
  328. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +0 -13
  329. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +0 -106
  330. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +0 -1
  331. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.d.ts +0 -26
  332. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js +0 -112
  333. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js.map +0 -1
  334. package/dist-server/service/kpi-metric-value/kpi-metric-value.d.ts +0 -23
  335. package/dist-server/service/kpi-metric-value/kpi-metric-value.js +0 -107
  336. package/dist-server/service/kpi-metric-value/kpi-metric-value.js.map +0 -1
  337. package/dist-server/service/kpi-org-scope/index.d.ts +0 -5
  338. package/dist-server/service/kpi-org-scope/index.js +0 -9
  339. package/dist-server/service/kpi-org-scope/index.js.map +0 -1
  340. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.d.ts +0 -8
  341. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js +0 -170
  342. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js.map +0 -1
  343. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.d.ts +0 -14
  344. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js +0 -152
  345. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js.map +0 -1
  346. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.d.ts +0 -26
  347. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js +0 -101
  348. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js.map +0 -1
  349. package/dist-server/service/kpi-org-scope/kpi-org-scope.d.ts +0 -26
  350. package/dist-server/service/kpi-org-scope/kpi-org-scope.js +0 -135
  351. package/dist-server/service/kpi-org-scope/kpi-org-scope.js.map +0 -1
  352. package/dist-server/service/kpi-scope/index.d.ts +0 -9
  353. package/dist-server/service/kpi-scope/index.js +0 -14
  354. package/dist-server/service/kpi-scope/index.js.map +0 -1
  355. package/dist-server/service/kpi-scope/kpi-scope-mutation.d.ts +0 -9
  356. package/dist-server/service/kpi-scope/kpi-scope-mutation.js +0 -140
  357. package/dist-server/service/kpi-scope/kpi-scope-mutation.js.map +0 -1
  358. package/dist-server/service/kpi-scope/kpi-scope-query.d.ts +0 -11
  359. package/dist-server/service/kpi-scope/kpi-scope-query.js +0 -89
  360. package/dist-server/service/kpi-scope/kpi-scope-query.js.map +0 -1
  361. package/dist-server/service/kpi-scope/kpi-scope-type.d.ts +0 -35
  362. package/dist-server/service/kpi-scope/kpi-scope-type.js +0 -138
  363. package/dist-server/service/kpi-scope/kpi-scope-type.js.map +0 -1
  364. package/dist-server/service/kpi-scope/kpi-scope.d.ts +0 -38
  365. package/dist-server/service/kpi-scope/kpi-scope.js +0 -144
  366. package/dist-server/service/kpi-scope/kpi-scope.js.map +0 -1
  367. package/dist-server/service/kpi-statistic/index.d.ts +0 -6
  368. package/dist-server/service/kpi-statistic/index.js +0 -10
  369. package/dist-server/service/kpi-statistic/index.js.map +0 -1
  370. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.d.ts +0 -43
  371. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js +0 -181
  372. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js.map +0 -1
  373. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.d.ts +0 -50
  374. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js +0 -324
  375. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js.map +0 -1
  376. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.d.ts +0 -14
  377. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js +0 -279
  378. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js.map +0 -1
  379. package/dist-server/service/kpi-statistic/kpi-statistic-query.d.ts +0 -17
  380. package/dist-server/service/kpi-statistic/kpi-statistic-query.js +0 -183
  381. package/dist-server/service/kpi-statistic/kpi-statistic-query.js.map +0 -1
  382. package/dist-server/service/kpi-statistic/kpi-statistic-type.d.ts +0 -59
  383. package/dist-server/service/kpi-statistic/kpi-statistic-type.js +0 -200
  384. package/dist-server/service/kpi-statistic/kpi-statistic-type.js.map +0 -1
  385. package/dist-server/service/kpi-statistic/kpi-statistic.d.ts +0 -42
  386. package/dist-server/service/kpi-statistic/kpi-statistic.js +0 -210
  387. package/dist-server/service/kpi-statistic/kpi-statistic.js.map +0 -1
  388. package/dist-server/service/kpi-value/index.d.ts +0 -6
  389. package/dist-server/service/kpi-value/index.js +0 -10
  390. package/dist-server/service/kpi-value/index.js.map +0 -1
  391. package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +0 -13
  392. package/dist-server/service/kpi-value/kpi-value-mutation.js +0 -447
  393. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +0 -1
  394. package/dist-server/service/kpi-value/kpi-value-query.d.ts +0 -22
  395. package/dist-server/service/kpi-value/kpi-value-query.js +0 -149
  396. package/dist-server/service/kpi-value/kpi-value-query.js.map +0 -1
  397. package/dist-server/service/kpi-value/kpi-value-score.service.d.ts +0 -24
  398. package/dist-server/service/kpi-value/kpi-value-score.service.js +0 -61
  399. package/dist-server/service/kpi-value/kpi-value-score.service.js.map +0 -1
  400. package/dist-server/service/kpi-value/kpi-value-type.d.ts +0 -33
  401. package/dist-server/service/kpi-value/kpi-value-type.js +0 -156
  402. package/dist-server/service/kpi-value/kpi-value-type.js.map +0 -1
  403. package/dist-server/service/kpi-value/kpi-value.d.ts +0 -32
  404. package/dist-server/service/kpi-value/kpi-value.js +0 -175
  405. package/dist-server/service/kpi-value/kpi-value.js.map +0 -1
  406. package/dist-server/service/utils/value-date-util.d.ts +0 -4
  407. package/dist-server/service/utils/value-date-util.js +0 -117
  408. package/dist-server/service/utils/value-date-util.js.map +0 -1
  409. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -1,700 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import '@material/web/button/elevated-button.js';
4
- import '@material/web/textfield/outlined-text-field.js';
5
- import { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
6
- import { PageView } from '@operato/shell';
7
- import { css, html } from 'lit';
8
- import { customElement, property, state } from 'lit/decorators.js';
9
- import { ScopedElementsMixin } from '@open-wc/scoped-elements';
10
- import { client } from '@operato/graphql';
11
- import { i18next, localize } from '@operato/i18n';
12
- import { notify } from '@operato/layout';
13
- import gql from 'graphql-tag';
14
- let KpiValueEditorPage = class KpiValueEditorPage extends localize(i18next)(ScopedElementsMixin(PageView)) {
15
- constructor() {
16
- super(...arguments);
17
- this.kpiOrgScopeId = '';
18
- this.org = ''; // legacy support
19
- this.startDate = '';
20
- this.endDate = '';
21
- this.kpis = [];
22
- this.dates = [];
23
- this.loading = false;
24
- this.error = '';
25
- this.editingCell = null;
26
- this._existingValues = [];
27
- }
28
- static { this.styles = [
29
- CommonHeaderStyles,
30
- ScrollbarStyles,
31
- css `
32
- :host { display: flex;
33
- flex-direction: column;
34
- padding: 20px;
35
- overflow-x: auto;
36
- }
37
-
38
- .header { display: flex;
39
- gap: 16px;
40
- align-items: center;
41
- margin-bottom: 20px;
42
- padding: 16px;
43
- background: var(--md-sys-color-surface-container);
44
- border-radius: 8px;
45
- }
46
-
47
- .controls { display: flex;
48
- gap: 12px;
49
- align-items: center;
50
- }
51
-
52
- .table-container { flex: 1;
53
- overflow: auto;
54
- border: 1px solid var(--md-sys-color-outline);
55
- border-radius: 8px;
56
- }
57
-
58
- table { width: 100%;
59
- border-collapse: collapse;
60
- min-width: max-content;
61
- }
62
-
63
- th { background: var(--md-sys-color-surface-container-low);
64
- font-weight: 500;
65
- padding: 8px 12px;
66
- border: 1px solid var(--md-sys-color-outline-variant);
67
- min-width: 80px;
68
- height: 120px;
69
- vertical-align: middle;
70
- }
71
-
72
- td { padding: 8px 12px;
73
- border: 1px solid var(--md-sys-color-outline-variant);
74
- min-width: 80px;
75
- height: 60px;
76
- text-align: right;
77
- vertical-align: middle;
78
- }
79
-
80
- .kpi-header { position: sticky;
81
- left: 0;
82
- top: 0;
83
- z-index: 3;
84
- }
85
-
86
- .kpi-name { position: sticky;
87
- left: 0;
88
- background: var(--md-sys-color-surface);
89
- font-weight: 500;
90
- min-width: 200px;
91
- text-align: left;
92
- z-index: 2;
93
- }
94
-
95
- tr:hover { background: var(--md-sys-color-surface-container-high);
96
- }
97
-
98
- th.date-header { position: sticky;
99
- top: 0;
100
- z-index: 2;
101
- text-align: center;
102
- font-size: 11px;
103
- color: var(--md-sys-color-on-surface-variant);
104
- writing-mode: vertical-rl;
105
- text-orientation: mixed;
106
- min-height: 120px;
107
- display: flex;
108
- align-items: center;
109
- justify-content: center;
110
- }
111
-
112
- td.editable-cell { cursor: pointer;
113
- background: var(--md-sys-color-primary-container);
114
- color: var(--md-sys-color-on-primary-container);
115
- }
116
-
117
- td.editable-cell:hover { background: var(--md-sys-color-primary-container);
118
- }
119
-
120
- td.highlighted-cell { background: var(--md-sys-color-secondary-container);
121
- color: var(--md-sys-color-on-secondary-container);
122
- font-weight: 500;
123
- }
124
-
125
- td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);
126
- }
127
-
128
- td.disabled-cell { background: var(--md-sys-color-surface-container);
129
- color: var(--md-sys-color-on-surface-variant);
130
- cursor: not-allowed;
131
- }
132
-
133
- .value-input { width: 100%;
134
- text-align: center;
135
- border: none;
136
- background: transparent;
137
- color: inherit;
138
- font-size: 12px;
139
- padding: 2px;
140
- }
141
-
142
- .value-input:focus { outline: 2px solid var(--md-sys-color-primary);
143
- border-radius: 4px;
144
- }
145
-
146
- .period-type-badge { font-size: 10px;
147
- padding: 2px 6px;
148
- border-radius: 4px;
149
- background: var(--md-sys-color-tertiary-container);
150
- color: var(--md-sys-color-on-tertiary-container);
151
- margin-left: 8px;
152
- }
153
-
154
- .loading { display: flex;
155
- justify-content: center;
156
- align-items: center;
157
- height: 200px;
158
- color: var(--md-sys-color-on-surface-variant);
159
- }
160
-
161
- .error { color: var(--md-sys-color-error);
162
- padding: 16px;
163
- text-align: center;
164
- }
165
-
166
- .legend { display: flex;
167
- gap: 16px;
168
- margin-top: 16px;
169
- font-size: 12px;
170
- }
171
-
172
- .legend-item { display: flex;
173
- align-items: center;
174
- gap: 4px;
175
- }
176
-
177
- .legend-color { width: 16px;
178
- height: 16px;
179
- border-radius: 2px;
180
- }
181
- `
182
- ]; }
183
- get context() {
184
- return { title: i18next.t('title.kpi value editor'),
185
- actions: [
186
- { title: i18next.t('button.save'),
187
- action: this._saveValues.bind(this),
188
- ...CommonButtonStyles.save
189
- },
190
- { title: i18next.t('button.cancel'),
191
- action: this._cancel.bind(this),
192
- ...CommonButtonStyles.cancel
193
- }
194
- ]
195
- };
196
- }
197
- render() {
198
- if (this.loading) {
199
- return html `
200
- <div class="loading">
201
- <md-icon>hourglass_empty</md-icon>
202
- <span>데이터를 불러오는 중...</span>
203
- </div>
204
- `;
205
- }
206
- if (this.error) {
207
- return html `
208
- <div class="error">
209
- <md-icon>error</md-icon>
210
- <span>${this.error}</span>
211
- </div>
212
- `;
213
- }
214
- return html `
215
- <div class="header">
216
- <div class="controls">
217
- <md-outlined-text-field
218
- label="그룹"
219
- .value=${this.org}
220
- @input=${(e) => (this.org = e.target.value)}
221
- style="width: 150px;"
222
- ></md-outlined-text-field>
223
-
224
- <md-outlined-text-field
225
- label="시작일"
226
- type="date"
227
- .value=${this.startDate}
228
- @input=${(e) => (this.startDate = e.target.value)}
229
- style="width: 150px;"
230
- ></md-outlined-text-field>
231
-
232
- <md-outlined-text-field
233
- label="종료일"
234
- type="date"
235
- .value=${this.endDate}
236
- @input=${(e) => (this.endDate = e.target.value)}
237
- style="width: 150px;"
238
- ></md-outlined-text-field>
239
-
240
- <md-elevated-button @click=${this._loadData}>
241
- <md-icon slot="icon">refresh</md-icon>
242
- 새로고침
243
- </md-elevated-button>
244
- </div>
245
- </div>
246
-
247
- <div class="table-container">
248
- <!-- 디버깅 정보 -->
249
- <table style="border-collapse: collapse; width: 100%;">
250
- <thead>
251
- <tr>
252
- <th
253
- style="border: 1px solid #ccc; padding: 8px; background: #f5f5f5; min-width: 200px; left: 0; top: 0;"
254
- class="kpi-header"
255
- >
256
- KPI명
257
- </th>
258
- ${this.dates.map(date => html `
259
- <th
260
- style="border: 1px solid #ccc; padding: 8px; background: #f5f5f5; min-width: 80px; position: sticky; top: 0;"
261
- >
262
- ${this._formatDate(date)}
263
- </th>
264
- `)}
265
- </tr>
266
- </thead>
267
- <tbody>
268
- ${this.kpis.map(kpi => html `
269
- <tr>
270
- <td
271
- style="border: 1px solid #ccc; padding: 8px; background: #fff; min-width: 200px;"
272
- class="kpi-name"
273
- >
274
- ${kpi.kpiName}
275
- <span
276
- style="font-size: 10px; padding: 2px 6px; background: #e0e0e0; border-radius: 4px; margin-left: 8px;"
277
- >${kpi.periodType}</span
278
- >
279
- </td>
280
- ${this.dates.map(date => html `
281
- <td
282
- style="border: 1px solid #ccc; padding: 8px; background: #e3f2fd; text-align: center; min-width: 80px; cursor: pointer;"
283
- @click=${() => this._startEdit(kpi.kpiId, date)}
284
- >
285
- ${this._renderCellContent(kpi, date)}
286
- </td>
287
- `)}
288
- </tr>
289
- `)}
290
- </tbody>
291
- </table>
292
- </div>
293
-
294
- <div class="legend">
295
- <div class="legend-item">
296
- <div class="legend-color" style="background: var(--md-sys-color-primary-container);"></div>
297
- <span>편집 가능</span>
298
- </div>
299
- <div class="legend-item">
300
- <div class="legend-color" style="background: var(--md-sys-color-secondary-container);"></div>
301
- <span>하이라이트 (PeriodType에 따라)</span>
302
- </div>
303
- <div class="legend-item">
304
- <div class="legend-color" style="background: var(--md-sys-color-surface-container);"></div>
305
- <span>편집 불가</span>
306
- </div>
307
- </div>
308
- `;
309
- }
310
- _renderKpiCells(kpi) {
311
- const cells = this._getCellsForKpi(kpi);
312
- return cells.map(cell => {
313
- const isEditing = this.editingCell?.kpiId === kpi.kpiId && this.editingCell?.date === cell.date;
314
- const cellClass = this._getCellClass(cell);
315
- return html `
316
- <div class="cell ${cellClass}" @click=${() => this._startEdit(kpi.kpiId, cell.date)}>
317
- ${isEditing
318
- ? html `
319
- <input
320
- class="value-input"
321
- type="number"
322
- step="0.01"
323
- .value=${(cell.value || '').toString()}
324
- @blur=${(e) => this._finishEdit(kpi.kpiId, cell.date, parseFloat(e.target.value) || 0)}
325
- @keydown=${(e) => e.key === 'Enter' && e.target.blur()}
326
- autofocus
327
- />
328
- `
329
- : html ` <span>${cell.value !== null ? cell.value.toLocaleString() : '-'}</span> `}
330
- </div>
331
- `;
332
- });
333
- }
334
- _getCellsForKpi(kpi) {
335
- const cells = [];
336
- const periodType = kpi.periodType;
337
- this.dates.forEach(date => {
338
- const isEditable = this._isDateEditableForPeriodType(date, periodType);
339
- const isHighlighted = this._isDateHighlightedForPeriodType(date, periodType);
340
- cells.push({ date,
341
- value: kpi.values[date]?.value || null,
342
- score: kpi.values[date]?.score,
343
- isEditable,
344
- isHighlighted
345
- });
346
- });
347
- return cells;
348
- }
349
- _isDateEditableForPeriodType(date, periodType) {
350
- const targetDate = new Date(date);
351
- switch (periodType) {
352
- case 'DAY':
353
- return true; // 모든 날짜 편집 가능
354
- case 'WEEK':
355
- // 해당 주의 첫 번째 날짜만 편집 가능
356
- const weekStart = new Date(targetDate);
357
- weekStart.setDate(targetDate.getDate() - targetDate.getDay());
358
- return date === weekStart.toISOString().split('T')[0];
359
- case 'MONTH':
360
- // 해당 월의 첫 번째 날짜만 편집 가능
361
- return targetDate.getDate() === 1;
362
- case 'QUARTER':
363
- // 해당 분기의 첫 번째 날짜만 편집 가능
364
- const quarterStart = new Date(targetDate.getFullYear(), Math.floor(targetDate.getMonth() / 3) * 3, 1);
365
- return date === quarterStart.toISOString().split('T')[0];
366
- case 'YEAR':
367
- // 해당 연도의 첫 번째 날짜만 편집 가능
368
- const yearStart = new Date(targetDate.getFullYear(), 0, 1);
369
- return date === yearStart.toISOString().split('T')[0];
370
- default:
371
- return true;
372
- }
373
- }
374
- _isDateHighlightedForPeriodType(date, periodType) {
375
- const targetDate = new Date(date);
376
- switch (periodType) {
377
- case 'DAY':
378
- return false; // 하이라이트 없음
379
- case 'WEEK':
380
- // 해당 주의 모든 날짜 하이라이트
381
- const weekStart = new Date(targetDate);
382
- weekStart.setDate(targetDate.getDate() - targetDate.getDay());
383
- const weekEnd = new Date(weekStart);
384
- weekEnd.setDate(weekStart.getDate() + 6);
385
- return date >= weekStart.toISOString().split('T')[0] && date <= weekEnd.toISOString().split('T')[0];
386
- case 'MONTH':
387
- // 해당 월의 모든 날짜 하이라이트
388
- const monthStart = new Date(targetDate.getFullYear(), targetDate.getMonth(), 1);
389
- const monthEnd = new Date(targetDate.getFullYear(), targetDate.getMonth() + 1, 0);
390
- return date >= monthStart.toISOString().split('T')[0] && date <= monthEnd.toISOString().split('T')[0];
391
- case 'QUARTER':
392
- // 해당 분기의 모든 날짜 하이라이트
393
- const quarter = Math.floor(targetDate.getMonth() / 3);
394
- const quarterStart = new Date(targetDate.getFullYear(), quarter * 3, 1);
395
- const quarterEnd = new Date(targetDate.getFullYear(), (quarter + 1) * 3, 0);
396
- return date >= quarterStart.toISOString().split('T')[0] && date <= quarterEnd.toISOString().split('T')[0];
397
- case 'YEAR':
398
- // 해당 연도의 모든 날짜 하이라이트
399
- const yearStart = new Date(targetDate.getFullYear(), 0, 1);
400
- const yearEnd = new Date(targetDate.getFullYear(), 11, 31);
401
- return date >= yearStart.toISOString().split('T')[0] && date <= yearEnd.toISOString().split('T')[0];
402
- default:
403
- return false;
404
- }
405
- }
406
- _getCellClass(cell) {
407
- if (!cell.isEditable) {
408
- return 'disabled-cell';
409
- }
410
- if (cell.isHighlighted) {
411
- return 'highlighted-cell';
412
- }
413
- if (cell.isEditable) {
414
- return 'editable-cell';
415
- }
416
- return '';
417
- }
418
- _formatDate(date) {
419
- const d = new Date(date);
420
- return d.toLocaleDateString('ko-KR', { month: 'numeric', day: 'numeric' });
421
- }
422
- _startEdit(kpiId, date) {
423
- this.editingCell = { kpiId, date };
424
- }
425
- _finishEdit(kpiId, date, value) {
426
- const kpi = this.kpis.find(k => k.kpiId === kpiId);
427
- if (kpi) {
428
- if (!kpi.values[date]) {
429
- kpi.values[date] = { value: 0, isDirty: false };
430
- }
431
- // 값이 변경되었는지 확인
432
- const originalValue = this._findExistingValue(kpiId, date)?.value;
433
- const isChanged = originalValue !== value;
434
- kpi.values[date].value = value;
435
- kpi.values[date].isDirty = isChanged;
436
- // score는 저장 시 서버에서 계산되므로 여기서는 제거
437
- delete kpi.values[date].score;
438
- }
439
- this.editingCell = null;
440
- }
441
- _renderCellContent(kpi, date) {
442
- const isEditing = this.editingCell?.kpiId === kpi.kpiId && this.editingCell?.date === date;
443
- const value = kpi.values[date]?.value;
444
- const score = kpi.values[date]?.score;
445
- if (isEditing) {
446
- return html `
447
- <input
448
- type="number"
449
- step="0.01"
450
- .value=${(value || '').toString()}
451
- @blur=${(e) => this._finishEdit(kpi.kpiId, date, parseFloat(e.target.value) || 0)}
452
- @keydown=${(e) => e.key === 'Enter' && e.target.blur()}
453
- style="width: 100%; text-align: center; border: none; background: transparent;"
454
- autofocus
455
- />
456
- `;
457
- }
458
- return html `
459
- <div style="display: flex; flex-direction: column; gap: 2px;">
460
- <span style="font-weight: 500; color: ${value !== null && value !== undefined ? 'inherit' : '#999'};">
461
- ${value !== null && value !== undefined ? value.toLocaleString() : '클릭하여 입력'}
462
- </span>
463
- ${score !== null && score !== undefined
464
- ? html `<span style="font-size: 10px; color: #666;">Score: ${score.toFixed(3)}</span>`
465
- : ''}
466
- </div>
467
- `;
468
- }
469
- _calculateScore(value, periodType) {
470
- // 실제로는 KPI의 formula나 기준값을 사용해야 함
471
- if (value <= 0)
472
- return 0;
473
- if (value >= 1000)
474
- return 1;
475
- return Math.min(value / 1000, 1);
476
- }
477
- async _loadData() {
478
- if (!this.startDate || !this.endDate) {
479
- this.error = '시작일, 종료일을 모두 입력해주세요.';
480
- return;
481
- }
482
- this.loading = true;
483
- this.error = '';
484
- try { // KPI 목록 조회
485
- const kpisResponse = await client.query({ query: gql `
486
- query ($filters: [Filter!]) { kpis(filters: $filters) { items { id
487
- name
488
- periodType
489
- active
490
- }
491
- total
492
- }
493
- }
494
- `,
495
- variables: { filters: [{ name: 'active', operator: 'eq', value: true }]
496
- }
497
- });
498
- // KPI Value 데이터 조회
499
- const valuesResponse = await client.query({ query: gql `
500
- query ($filters: [Filter!]) { kpiValues(filters: $filters) { items { id
501
- kpiId
502
- valueDate
503
- value
504
- score
505
- kpiOrgScope { id
506
- org
507
- }
508
- }
509
- total
510
- }
511
- }
512
- `,
513
- variables: { filters: [
514
- ...(this.org ? [{ name: 'org', operator: 'eq', value: this.org }] : []),
515
- { name: 'valueDate', operator: 'between', value: [this.startDate, this.endDate] }
516
- ]
517
- }
518
- });
519
- // 날짜 배열 생성
520
- this.dates = this._generateDateArray(this.startDate, this.endDate);
521
- console.log('시작일:', this.startDate);
522
- console.log('종료일:', this.endDate);
523
- console.log('생성된 날짜 배열:', this.dates);
524
- // KPI 목록을 기준으로 데이터 구성
525
- this.kpis = kpisResponse.data.kpis.items.map((kpi) => ({ kpiId: kpi.id,
526
- kpiName: kpi.name,
527
- periodType: kpi.periodType,
528
- values: {}
529
- }));
530
- // 기존 KPI Value 데이터 저장
531
- this._existingValues = valuesResponse.data.kpiValues.items;
532
- // KPI Value 데이터를 해당 KPI에 매핑
533
- valuesResponse.data.kpiValues.items.forEach((value) => {
534
- const kpi = this.kpis.find(k => k.kpiId === value.kpiId);
535
- if (kpi) {
536
- kpi.values[value.valueDate] = { value: value.value,
537
- score: value.score,
538
- isDirty: false
539
- };
540
- }
541
- });
542
- // KPI Value가 없는 KPI도 빈 값으로 초기화
543
- this.kpis.forEach(kpi => {
544
- this.dates.forEach(date => {
545
- if (!kpi.values[date]) {
546
- kpi.values[date] = { value: null, score: undefined, isDirty: false };
547
- }
548
- });
549
- });
550
- // 디버깅 정보 출력
551
- console.log('KPI 총 개수:', kpisResponse.data.kpis.total);
552
- console.log('KPI 목록:', kpisResponse.data.kpis.items);
553
- console.log('KPI Value 총 개수:', valuesResponse.data.kpiValues.total);
554
- console.log('KPI Value 목록:', valuesResponse.data.kpiValues.items);
555
- console.log('구성된 KPI 데이터:', this.kpis);
556
- console.log('날짜 배열:', this.dates);
557
- // 강제 업데이트
558
- this.requestUpdate();
559
- }
560
- catch (error) {
561
- console.error('데이터 로드 중 오류:', error);
562
- this.error = '데이터를 불러오는 중 오류가 발생했습니다.';
563
- }
564
- finally {
565
- this.loading = false;
566
- }
567
- }
568
- _generateDateArray(startDate, endDate) {
569
- const dates = [];
570
- const start = new Date(startDate);
571
- const end = new Date(endDate);
572
- for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
573
- dates.push(d.toLocaleDateString('sv-SE'));
574
- }
575
- return dates;
576
- }
577
- async _saveValues() {
578
- try {
579
- const patches = [];
580
- this.kpis.forEach(kpi => {
581
- Object.entries(kpi.values).forEach(([date, data]) => {
582
- if (data.isDirty && data.value !== null && data.value !== undefined) {
583
- const existingValue = this._findExistingValue(kpi.kpiId, date);
584
- if (existingValue) { // 기존 데이터 업데이트
585
- patches.push({ id: existingValue.id,
586
- value: data.value,
587
- org: this.org,
588
- cuFlag: 'M'
589
- });
590
- }
591
- else { // 새로운 데이터 생성
592
- patches.push({ kpiId: kpi.kpiId,
593
- valueDate: date,
594
- value: data.value,
595
- org: this.org,
596
- cuFlag: '+'
597
- });
598
- }
599
- }
600
- });
601
- });
602
- if (patches.length === 0) {
603
- notify({ message: '저장할 데이터가 없습니다.' });
604
- return;
605
- }
606
- // 단일 mutation으로 생성과 업데이트 처리
607
- const response = await client.mutate({ mutation: gql `
608
- mutation ($patches: [KpiValuePatch!]!) { updateMultipleKpiValue(patches: $patches) { id
609
- value
610
- score
611
- valueDate
612
- kpiId
613
- }
614
- }
615
- `,
616
- variables: { patches }
617
- });
618
- if (!response.errors) { // 서버에서 계산된 score로 UI 업데이트
619
- response.data.updateMultipleKpiValue.forEach((savedValue) => {
620
- const kpi = this.kpis.find(k => k.kpiId === savedValue.kpiId);
621
- if (kpi && kpi.values[savedValue.valueDate]) {
622
- kpi.values[savedValue.valueDate].score = savedValue.score;
623
- kpi.values[savedValue.valueDate].isDirty = false; // 저장 후 dirty 상태 해제
624
- }
625
- });
626
- notify({ message: 'KPI 값이 성공적으로 저장되었습니다.' });
627
- this.requestUpdate(); // UI 강제 업데이트
628
- }
629
- }
630
- catch (error) {
631
- console.error('저장 중 오류:', error);
632
- notify({ message: '저장 중 오류가 발생했습니다.' });
633
- }
634
- }
635
- _findExistingValue(kpiId, date) {
636
- return this._existingValues?.find((v) => v.kpiId === kpiId && v.valueDate === date);
637
- }
638
- _cancel() {
639
- this.editingCell = null;
640
- this._loadData(); // 원본 데이터로 복원
641
- }
642
- async pageInitialized(lifecycle) {
643
- if (!this.startDate) {
644
- const today = new Date();
645
- const oneMonthAgo = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate());
646
- this.startDate = oneMonthAgo.toLocaleDateString('sv-SE');
647
- }
648
- if (!this.endDate) {
649
- const today = new Date();
650
- this.endDate = today.toLocaleDateString('sv-SE');
651
- }
652
- // 페이지 초기화 시 자동으로 데이터 로드
653
- await this._loadData();
654
- }
655
- };
656
- __decorate([
657
- property({ type: String }),
658
- __metadata("design:type", String)
659
- ], KpiValueEditorPage.prototype, "kpiOrgScopeId", void 0);
660
- __decorate([
661
- property({ type: String }),
662
- __metadata("design:type", String)
663
- ], KpiValueEditorPage.prototype, "org", void 0);
664
- __decorate([
665
- property({ type: String }),
666
- __metadata("design:type", String)
667
- ], KpiValueEditorPage.prototype, "startDate", void 0);
668
- __decorate([
669
- property({ type: String }),
670
- __metadata("design:type", String)
671
- ], KpiValueEditorPage.prototype, "endDate", void 0);
672
- __decorate([
673
- state(),
674
- __metadata("design:type", Array)
675
- ], KpiValueEditorPage.prototype, "kpis", void 0);
676
- __decorate([
677
- state(),
678
- __metadata("design:type", Array)
679
- ], KpiValueEditorPage.prototype, "dates", void 0);
680
- __decorate([
681
- state(),
682
- __metadata("design:type", Boolean)
683
- ], KpiValueEditorPage.prototype, "loading", void 0);
684
- __decorate([
685
- state(),
686
- __metadata("design:type", String)
687
- ], KpiValueEditorPage.prototype, "error", void 0);
688
- __decorate([
689
- state(),
690
- __metadata("design:type", Object)
691
- ], KpiValueEditorPage.prototype, "editingCell", void 0);
692
- __decorate([
693
- state(),
694
- __metadata("design:type", Array)
695
- ], KpiValueEditorPage.prototype, "_existingValues", void 0);
696
- KpiValueEditorPage = __decorate([
697
- customElement('kpi-value-editor-page')
698
- ], KpiValueEditorPage);
699
- export { KpiValueEditorPage };
700
- //# sourceMappingURL=kpi-value-editor-page.js.map