@things-factory/worklist 10.0.18 → 10.1.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 (215) hide show
  1. package/dist-client/activity-cells.d.ts +21 -0
  2. package/dist-client/activity-cells.js +117 -0
  3. package/dist-client/activity-cells.js.map +1 -0
  4. package/dist-client/activity-summary-generator.js +57 -11
  5. package/dist-client/activity-summary-generator.js.map +1 -1
  6. package/dist-client/approval-progress.d.ts +18 -0
  7. package/dist-client/approval-progress.js +31 -0
  8. package/dist-client/approval-progress.js.map +1 -0
  9. package/dist-client/bootstrap.js +6 -11
  10. package/dist-client/bootstrap.js.map +1 -1
  11. package/dist-client/chip-filters.d.ts +53 -0
  12. package/dist-client/chip-filters.js +60 -0
  13. package/dist-client/chip-filters.js.map +1 -0
  14. package/dist-client/components/activity-approval-ribon.d.ts +19 -0
  15. package/dist-client/components/activity-approval-ribon.js +50 -126
  16. package/dist-client/components/activity-approval-ribon.js.map +1 -1
  17. package/dist-client/components/activity-fields.d.ts +50 -0
  18. package/dist-client/components/activity-fields.js +393 -0
  19. package/dist-client/components/activity-fields.js.map +1 -0
  20. package/dist-client/components/activity-instance-ribon.d.ts +19 -0
  21. package/dist-client/components/activity-instance-ribon.js +55 -122
  22. package/dist-client/components/activity-instance-ribon.js.map +1 -1
  23. package/dist-client/components/activity-thread-ribon.d.ts +25 -0
  24. package/dist-client/components/activity-thread-ribon.js +64 -121
  25. package/dist-client/components/activity-thread-ribon.js.map +1 -1
  26. package/dist-client/components/activity-thread-timeline.d.ts +14 -2
  27. package/dist-client/components/activity-thread-timeline.js +234 -104
  28. package/dist-client/components/activity-thread-timeline.js.map +1 -1
  29. package/dist-client/components/state-ribon.d.ts +40 -0
  30. package/dist-client/components/state-ribon.js +200 -0
  31. package/dist-client/components/state-ribon.js.map +1 -0
  32. package/dist-client/due.d.ts +16 -0
  33. package/dist-client/due.js +78 -0
  34. package/dist-client/due.js.map +1 -0
  35. package/dist-client/pages/activity/activity-list-page.js +4 -6
  36. package/dist-client/pages/activity/activity-list-page.js.map +1 -1
  37. package/dist-client/pages/activity-approval/activity-approval-list-page.js +2 -1
  38. package/dist-client/pages/activity-approval/activity-approval-list-page.js.map +1 -1
  39. package/dist-client/pages/activity-approval/activity-approval-page.d.ts +52 -5
  40. package/dist-client/pages/activity-approval/activity-approval-page.js +265 -118
  41. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  42. package/dist-client/pages/activity-instance/activity-instance-list-page.d.ts +0 -1
  43. package/dist-client/pages/activity-instance/activity-instance-list-page.js +8 -24
  44. package/dist-client/pages/activity-instance/activity-instance-list-page.js.map +1 -1
  45. package/dist-client/pages/activity-instance/activity-instance-start-page.d.ts +1 -0
  46. package/dist-client/pages/activity-instance/activity-instance-start-page.js +7 -0
  47. package/dist-client/pages/activity-instance/activity-instance-start-page.js.map +1 -1
  48. package/dist-client/pages/activity-instance/activity-instance-view.js +1 -1
  49. package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -1
  50. package/dist-client/pages/activity-stats/activity-stats-list-page.js +2 -1
  51. package/dist-client/pages/activity-stats/activity-stats-list-page.js.map +1 -1
  52. package/dist-client/pages/activity-thread/activity-thread-page.d.ts +30 -4
  53. package/dist-client/pages/activity-thread/activity-thread-page.js +142 -66
  54. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  55. package/dist-client/pages/activity-thread/activity-thread-view-page.d.ts +17 -6
  56. package/dist-client/pages/activity-thread/activity-thread-view-page.js +118 -65
  57. package/dist-client/pages/activity-thread/activity-thread-view-page.js.map +1 -1
  58. package/dist-client/pages/activity-thread/activity-thread-view.d.ts +24 -7
  59. package/dist-client/pages/activity-thread/activity-thread-view.js +84 -308
  60. package/dist-client/pages/activity-thread/activity-thread-view.js.map +1 -1
  61. package/dist-client/pages/installable-activity/installable-activity-list-page.d.ts +1 -1
  62. package/dist-client/pages/installable-activity/installable-activity-list-page.js +13 -9
  63. package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
  64. package/dist-client/pages/todo/approval-done-list-page.d.ts +1 -0
  65. package/dist-client/pages/todo/approval-done-list-page.js +111 -58
  66. package/dist-client/pages/todo/approval-done-list-page.js.map +1 -1
  67. package/dist-client/pages/todo/approval-pending-list-page.d.ts +32 -1
  68. package/dist-client/pages/todo/approval-pending-list-page.js +485 -130
  69. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -1
  70. package/dist-client/pages/todo/done-list-calendar-page.d.ts +2 -0
  71. package/dist-client/pages/todo/done-list-calendar-page.js +213 -29
  72. package/dist-client/pages/todo/done-list-calendar-page.js.map +1 -1
  73. package/dist-client/pages/todo/done-list-page.d.ts +1 -0
  74. package/dist-client/pages/todo/done-list-page.js +126 -62
  75. package/dist-client/pages/todo/done-list-page.js.map +1 -1
  76. package/dist-client/pages/todo/draft-list-page.d.ts +1 -0
  77. package/dist-client/pages/todo/draft-list-page.js +82 -34
  78. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  79. package/dist-client/pages/todo/pickable-list-page.js +6 -10
  80. package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
  81. package/dist-client/pages/todo/todo-list-page.d.ts +1 -1
  82. package/dist-client/pages/todo/todo-list-page.js +102 -78
  83. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  84. package/dist-client/route.d.ts +1 -1
  85. package/dist-client/route.js +0 -6
  86. package/dist-client/route.js.map +1 -1
  87. package/dist-client/templates/activity-approval-context-template.js +60 -138
  88. package/dist-client/templates/activity-approval-context-template.js.map +1 -1
  89. package/dist-client/templates/activity-instance-context-template.js +13 -172
  90. package/dist-client/templates/activity-instance-context-template.js.map +1 -1
  91. package/dist-client/templates/activity-thread-context-template.js +39 -131
  92. package/dist-client/templates/activity-thread-context-template.js.map +1 -1
  93. package/dist-client/templates/context-panel.d.ts +26 -0
  94. package/dist-client/templates/context-panel.js +182 -0
  95. package/dist-client/templates/context-panel.js.map +1 -0
  96. package/dist-client/tsconfig.tsbuildinfo +1 -1
  97. package/dist-client/when.d.ts +4 -0
  98. package/dist-client/when.js +72 -0
  99. package/dist-client/when.js.map +1 -0
  100. package/dist-server/controllers/activity-approval/_abort.js +2 -1
  101. package/dist-server/controllers/activity-approval/_abort.js.map +1 -1
  102. package/dist-server/controllers/activity-approval/approval-line.d.ts +106 -0
  103. package/dist-server/controllers/activity-approval/approval-line.js +151 -0
  104. package/dist-server/controllers/activity-approval/approval-line.js.map +1 -0
  105. package/dist-server/controllers/activity-approval/approve.js +61 -51
  106. package/dist-server/controllers/activity-approval/approve.js.map +1 -1
  107. package/dist-server/controllers/activity-approval/claim.d.ts +42 -0
  108. package/dist-server/controllers/activity-approval/claim.js +77 -0
  109. package/dist-server/controllers/activity-approval/claim.js.map +1 -0
  110. package/dist-server/controllers/activity-approval/create-approval.d.ts +41 -0
  111. package/dist-server/controllers/activity-approval/create-approval.js +78 -0
  112. package/dist-server/controllers/activity-approval/create-approval.js.map +1 -0
  113. package/dist-server/controllers/activity-approval/delegate.d.ts +16 -0
  114. package/dist-server/controllers/activity-approval/delegate.js +43 -7
  115. package/dist-server/controllers/activity-approval/delegate.js.map +1 -1
  116. package/dist-server/controllers/activity-approval/opinion.d.ts +10 -0
  117. package/dist-server/controllers/activity-approval/opinion.js +43 -0
  118. package/dist-server/controllers/activity-approval/opinion.js.map +1 -0
  119. package/dist-server/controllers/activity-approval/reject.js +21 -1
  120. package/dist-server/controllers/activity-approval/reject.js.map +1 -1
  121. package/dist-server/controllers/activity-approval/save.js +26 -2
  122. package/dist-server/controllers/activity-approval/save.js.map +1 -1
  123. package/dist-server/controllers/activity-installation/activity-installation-controller.d.ts +26 -0
  124. package/dist-server/controllers/activity-installation/activity-installation-controller.js +45 -0
  125. package/dist-server/controllers/activity-installation/activity-installation-controller.js.map +1 -1
  126. package/dist-server/controllers/activity-instance/approval-expectation.d.ts +34 -0
  127. package/dist-server/controllers/activity-instance/approval-expectation.js +18 -0
  128. package/dist-server/controllers/activity-instance/approval-expectation.js.map +1 -0
  129. package/dist-server/controllers/activity-instance/issue.js +32 -0
  130. package/dist-server/controllers/activity-instance/issue.js.map +1 -1
  131. package/dist-server/controllers/activity-thread/restart.js +17 -1
  132. package/dist-server/controllers/activity-thread/restart.js.map +1 -1
  133. package/dist-server/controllers/activity-thread/submit.js +23 -43
  134. package/dist-server/controllers/activity-thread/submit.js.map +1 -1
  135. package/dist-server/controllers/common.js +46 -0
  136. package/dist-server/controllers/common.js.map +1 -1
  137. package/dist-server/controllers/index.d.ts +1 -0
  138. package/dist-server/controllers/index.js +8 -0
  139. package/dist-server/controllers/index.js.map +1 -1
  140. package/dist-server/service/activity/activity-mutation.js +25 -5
  141. package/dist-server/service/activity/activity-mutation.js.map +1 -1
  142. package/dist-server/service/activity/activity-type.d.ts +14 -0
  143. package/dist-server/service/activity/activity-type.js +8 -0
  144. package/dist-server/service/activity/activity-type.js.map +1 -1
  145. package/dist-server/service/activity/activity.d.ts +18 -0
  146. package/dist-server/service/activity/activity.js +5 -0
  147. package/dist-server/service/activity/activity.js.map +1 -1
  148. package/dist-server/service/activity-approval/activity-approval-mutation.js +3 -2
  149. package/dist-server/service/activity-approval/activity-approval-mutation.js.map +1 -1
  150. package/dist-server/service/activity-approval/activity-approval-query.d.ts +19 -1
  151. package/dist-server/service/activity-approval/activity-approval-query.js +186 -56
  152. package/dist-server/service/activity-approval/activity-approval-query.js.map +1 -1
  153. package/dist-server/service/activity-approval/activity-approval.d.ts +29 -1
  154. package/dist-server/service/activity-approval/activity-approval.js +19 -0
  155. package/dist-server/service/activity-approval/activity-approval.js.map +1 -1
  156. package/dist-server/service/activity-approval/my-pending-approvals.d.ts +21 -0
  157. package/dist-server/service/activity-approval/my-pending-approvals.js +40 -0
  158. package/dist-server/service/activity-approval/my-pending-approvals.js.map +1 -0
  159. package/dist-server/service/activity-instance/activity-instance-type.d.ts +20 -0
  160. package/dist-server/service/activity-instance/activity-instance-type.js +11 -0
  161. package/dist-server/service/activity-instance/activity-instance-type.js.map +1 -1
  162. package/dist-server/service/activity-instance/activity-instance.d.ts +6 -0
  163. package/dist-server/service/activity-instance/activity-instance.js +5 -0
  164. package/dist-server/service/activity-instance/activity-instance.js.map +1 -1
  165. package/dist-server/service/activity-stats/activity-stats-query.d.ts +5 -0
  166. package/dist-server/service/activity-stats/activity-stats-query.js +149 -11
  167. package/dist-server/service/activity-stats/activity-stats-query.js.map +1 -1
  168. package/dist-server/service/activity-stats/activity-stats-type.d.ts +19 -6
  169. package/dist-server/service/activity-stats/activity-stats-type.js +37 -10
  170. package/dist-server/service/activity-stats/activity-stats-type.js.map +1 -1
  171. package/dist-server/service/activity-stats/event-placement.d.ts +55 -0
  172. package/dist-server/service/activity-stats/event-placement.js +82 -0
  173. package/dist-server/service/activity-stats/event-placement.js.map +1 -0
  174. package/dist-server/service/activity-thread/activity-thread-query.js +48 -24
  175. package/dist-server/service/activity-thread/activity-thread-query.js.map +1 -1
  176. package/dist-server/service/activity-thread/my-open-threads.d.ts +15 -0
  177. package/dist-server/service/activity-thread/my-open-threads.js +40 -0
  178. package/dist-server/service/activity-thread/my-open-threads.js.map +1 -0
  179. package/dist-server/service/activity-thread/todo-order.d.ts +49 -0
  180. package/dist-server/service/activity-thread/todo-order.js +70 -0
  181. package/dist-server/service/activity-thread/todo-order.js.map +1 -0
  182. package/dist-server/service/installable-activity/installable-activity-mutation.d.ts +6 -0
  183. package/dist-server/service/installable-activity/installable-activity-mutation.js +7 -24
  184. package/dist-server/service/installable-activity/installable-activity-mutation.js.map +1 -1
  185. package/dist-server/service/nulls-last.d.ts +30 -0
  186. package/dist-server/service/nulls-last.js +37 -0
  187. package/dist-server/service/nulls-last.js.map +1 -0
  188. package/dist-server/tsconfig.tsbuildinfo +1 -1
  189. package/helps/dataset/activity-instance-search-page.ko.md +5 -0
  190. package/helps/dataset/activity-instance-search-page.md +13 -0
  191. package/helps/worklist/activity-approval.ko.md +5 -0
  192. package/helps/worklist/activity-approval.md +14 -0
  193. package/helps/worklist/activity-bank-page.ko.md +5 -0
  194. package/helps/worklist/activity-bank-page.md +13 -0
  195. package/helps/worklist/activity-reporter-list.ko.md +5 -0
  196. package/helps/worklist/activity-reporter-list.md +13 -0
  197. package/helps/worklist/activity-store.ko.md +5 -0
  198. package/helps/worklist/activity-store.md +13 -0
  199. package/helps/worklist/activity-template.ko.md +5 -0
  200. package/helps/worklist/activity-template.md +13 -0
  201. package/helps/worklist/installable-activity.ko.md +5 -0
  202. package/helps/worklist/installable-activity.md +13 -0
  203. package/package.json +13 -12
  204. package/things-factory.config.js +0 -5
  205. package/translations/en.json +129 -51
  206. package/translations/ja.json +130 -52
  207. package/translations/ko.json +82 -4
  208. package/translations/ms.json +129 -51
  209. package/translations/zh.json +132 -54
  210. package/dist-client/pages/dashboard/dashboard-home.d.ts +0 -1
  211. package/dist-client/pages/dashboard/dashboard-home.js +0 -22
  212. package/dist-client/pages/dashboard/dashboard-home.js.map +0 -1
  213. package/dist-client/pages/worklist-home.d.ts +0 -1
  214. package/dist-client/pages/worklist-home.js +0 -17
  215. package/dist-client/pages/worklist-home.js.map +0 -1
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.myPendingApprovalsWhere = myPendingApprovalsWhere;
4
+ const typeorm_1 = require("typeorm");
5
+ const approval_line_js_1 = require("../../controllers/activity-approval/approval-line.js");
6
+ /**
7
+ * The approvals waiting on me — one definition, two readers.
8
+ *
9
+ * 내 결재함 asks this, and so does the calendar. Both have to agree on three things that are easy
10
+ * to get wrong separately:
11
+ *
12
+ * - **참조는 승인 대기가 아니다.** Asking a reference to approve destroys what a reference is. An
13
+ * empty column is an approval: rows created before the column existed have nothing there.
14
+ * - **역할로 걸린 결재도 내 것이다** — but only while unclaimed. A role-held row keeps `approver`
15
+ * empty until someone presses, so without a judgment test finished work stays in the list of
16
+ * everyone holding that role, forever.
17
+ * - **끝난 것의 정의는 한 자리에 있다** (TERMINATED_JUDGMENTS). Counted again here, a new judgment
18
+ * value would land in one reader and not the other.
19
+ *
20
+ * Expects `ap` (ActivityApproval) to be the alias.
21
+ */
22
+ function myPendingApprovalsWhere({ userId, roles }) {
23
+ const judgment = [...approval_line_js_1.TERMINATED_JUDGMENTS];
24
+ return new typeorm_1.Brackets(outer => {
25
+ outer
26
+ .where(`(ap.participation IS NULL OR ap.participation != 'reference')`)
27
+ .andWhere(new typeorm_1.Brackets(qb => {
28
+ qb.where('ap.judgment NOT IN (:...judgment)', { judgment }).andWhere('ap.approver = :userId', { userId });
29
+ if (roles.length > 0) {
30
+ qb.orWhere(new typeorm_1.Brackets(roleQb => {
31
+ roleQb
32
+ .where('ap.judgment NOT IN (:...judgment)', { judgment })
33
+ .andWhere('ap.approverRole IN (:...roles)', { roles })
34
+ .andWhere(`ap.approver IS NULL`);
35
+ }));
36
+ }
37
+ }));
38
+ });
39
+ }
40
+ //# sourceMappingURL=my-pending-approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"my-pending-approvals.js","sourceRoot":"","sources":["../../../server/service/activity-approval/my-pending-approvals.ts"],"names":[],"mappings":";;AAoBA,0DAuBC;AA3CD,qCAAkC;AAElC,2FAA2F;AAE3F;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAuC;IAC5F,MAAM,QAAQ,GAAG,CAAC,GAAG,uCAAoB,CAAC,CAAA;IAE1C,OAAO,IAAI,kBAAQ,CAAC,KAAK,CAAC,EAAE;QAC1B,KAAK;aACF,KAAK,CAAC,+DAA+D,CAAC;aACtE,QAAQ,CACP,IAAI,kBAAQ,CAAC,EAAE,CAAC,EAAE;YAChB,EAAE,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;YAEzG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,EAAE,CAAC,OAAO,CACR,IAAI,kBAAQ,CAAC,MAAM,CAAC,EAAE;oBACpB,MAAM;yBACH,KAAK,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,CAAC;yBACxD,QAAQ,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,CAAC;yBACrD,QAAQ,CAAC,qBAAqB,CAAC,CAAA;gBACpC,CAAC,CAAC,CACH,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CACH,CAAA;IACL,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { Brackets } from 'typeorm'\n\nimport { TERMINATED_JUDGMENTS } from '../../controllers/activity-approval/approval-line.js'\n\n/**\n * The approvals waiting on me — one definition, two readers.\n *\n * 내 결재함 asks this, and so does the calendar. Both have to agree on three things that are easy\n * to get wrong separately:\n *\n * - **참조는 승인 대기가 아니다.** Asking a reference to approve destroys what a reference is. An\n * empty column is an approval: rows created before the column existed have nothing there.\n * - **역할로 걸린 결재도 내 것이다** — but only while unclaimed. A role-held row keeps `approver`\n * empty until someone presses, so without a judgment test finished work stays in the list of\n * everyone holding that role, forever.\n * - **끝난 것의 정의는 한 자리에 있다** (TERMINATED_JUDGMENTS). Counted again here, a new judgment\n * value would land in one reader and not the other.\n *\n * Expects `ap` (ActivityApproval) to be the alias.\n */\nexport function myPendingApprovalsWhere({ userId, roles }: { userId: string; roles: string[] }): Brackets {\n const judgment = [...TERMINATED_JUDGMENTS]\n\n return new Brackets(outer => {\n outer\n .where(`(ap.participation IS NULL OR ap.participation != 'reference')`)\n .andWhere(\n new Brackets(qb => {\n qb.where('ap.judgment NOT IN (:...judgment)', { judgment }).andWhere('ap.approver = :userId', { userId })\n\n if (roles.length > 0) {\n qb.orWhere(\n new Brackets(roleQb => {\n roleQb\n .where('ap.judgment NOT IN (:...judgment)', { judgment })\n .andWhere('ap.approverRole IN (:...roles)', { roles })\n .andWhere(`ap.approver IS NULL`)\n })\n )\n }\n })\n )\n })\n}\n"]}
@@ -32,6 +32,24 @@ export declare class ActivityInstanceDraft {
32
32
  }
33
33
  export declare class ActivityInstanceIssue {
34
34
  id?: string;
35
+ /**
36
+ * 이 건은 **결재를 받아야 한다**고 내는 쪽이 말하는 자리.
37
+ *
38
+ * ── 왜 필요한가 ──────────────────────────────────────────────────────────
39
+ * `startingType: 'post'` 는 낸 사람에게 스레드를 하나 만들고 곧바로 제출까지 간다. 결재선이 있으면
40
+ * 거기서 상신되고, **없으면 그대로 끝난다.** 끝나면 완료 콜백이 돌아 업무가 확정된다.
41
+ *
42
+ * 그 거동 자체는 틀리지 않았다 — 결재 없이 내면 끝나는 일이 있다(작업 일지 같은 것). 문제는 **내는
43
+ * 쪽이 「이건 결재를 받는다」고 믿고 냈는데 결재선이 비어 조용히 확정되는 경우**다. 오류도 없고
44
+ * 흔적도 없어서, 승인 게이트가 있는 척만 하게 된다.
45
+ *
46
+ * 그래서 기대를 여기서 말한다. 말하지 않은 건은 아무것도 달라지지 않는다.
47
+ *
48
+ * ── 왜 내는 쪽에서 미리 보지 않고 여기서 보나 ────────────────────────────
49
+ * 미리 봐도 되지만 그것만으로는 부족하다. 보고 나서 내기까지 사이에 누가 결재선을 비울 수 있다.
50
+ * 내는 것과 같은 트랜잭션 안에서 보는 자리가 여기 하나뿐이다.
51
+ */
52
+ requireApproval?: boolean;
35
53
  name?: string;
36
54
  activityId?: string;
37
55
  description?: string;
@@ -57,6 +75,8 @@ export declare class ActivityInstanceIssue {
57
75
  assigneeRole?: Role;
58
76
  assignees?: AssigneeItem[];
59
77
  approvalLine?: ApprovalLineItem[];
78
+ /** 반려하면 끝인가. 주지 않으면 액티비티의 선언을 따른다. */
79
+ rejectionIsFinal?: boolean;
60
80
  }
61
81
  export declare class ActivityInstanceSave {
62
82
  output?: {
@@ -108,6 +108,13 @@ tslib_1.__decorate([
108
108
  (0, type_graphql_1.Field)(type => type_graphql_1.ID, { nullable: true }),
109
109
  tslib_1.__metadata("design:type", String)
110
110
  ], ActivityInstanceIssue.prototype, "id", void 0);
111
+ tslib_1.__decorate([
112
+ (0, type_graphql_1.Field)({
113
+ nullable: true,
114
+ description: 'true when the caller expects this to go through an approval line — issuing fails if the line is empty'
115
+ }),
116
+ tslib_1.__metadata("design:type", Boolean)
117
+ ], ActivityInstanceIssue.prototype, "requireApproval", void 0);
111
118
  tslib_1.__decorate([
112
119
  (0, type_graphql_1.Field)({ nullable: true }),
113
120
  tslib_1.__metadata("design:type", String)
@@ -192,6 +199,10 @@ tslib_1.__decorate([
192
199
  (0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
193
200
  tslib_1.__metadata("design:type", Array)
194
201
  ], ActivityInstanceIssue.prototype, "approvalLine", void 0);
202
+ tslib_1.__decorate([
203
+ (0, type_graphql_1.Field)({ nullable: true, description: 'true when a rejection closes this case for good' }),
204
+ tslib_1.__metadata("design:type", Boolean)
205
+ ], ActivityInstanceIssue.prototype, "rejectionIsFinal", void 0);
195
206
  exports.ActivityInstanceIssue = ActivityInstanceIssue = tslib_1.__decorate([
196
207
  (0, type_graphql_1.InputType)()
197
208
  ], ActivityInstanceIssue);
@@ -1 +1 @@
1
- {"version":3,"file":"activity-instance-type.js","sourceRoot":"","sources":["../../../server/service/activity-instance/activity-instance-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'\n\nimport { Role } from '@things-factory/auth-base'\nimport { ObjectRef, ScalarDate, ScalarObject } from '@things-factory/shell'\nimport { ApprovalLineItem } from '@things-factory/organization'\n\nimport { ActivityType, ActivityUIType, AssigneeItem } from '../activity/activity.js'\nimport { ActivityInstance, ActivityInstanceStatus } from './activity-instance.js'\n@InputType()\nexport class ActivityInstanceDraft {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field()\n name: string\n\n @Field({ nullable: true })\n activityId: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n priority?: number\n\n @Field({ nullable: true })\n reason?: string\n\n @Field(type => Int, { nullable: true })\n threadsMin?: number\n\n @Field(type => Int, { nullable: true })\n threadsMax?: number\n\n @Field(type => ScalarDate, { nullable: true })\n dueAt?: Date\n\n @Field(type => ScalarObject, { nullable: true })\n input?: { [key: string]: any }\n\n @Field(type => ScalarObject, { nullable: true })\n output?: { [key: string]: any }\n\n @Field({ nullable: true })\n adhocType?: string\n\n @Field({ nullable: true })\n refBy?: string\n\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Field({ nullable: true })\n uiSource?: string\n\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Field({ nullable: true })\n viewSource?: string\n\n @Field(type => ObjectRef, { nullable: true })\n supervisoryRole?: Role\n\n @Field(type => ObjectRef, { nullable: true })\n assigneeRole?: Role\n\n @Field(type => ScalarObject, { nullable: true })\n assignees?: AssigneeItem[]\n\n @Field(type => ScalarObject, { nullable: true })\n approvalLine?: ApprovalLineItem[]\n}\n\n@InputType()\nexport class ActivityInstanceIssue {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n activityId?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n priority?: number\n\n @Field({ nullable: true })\n reason?: string\n\n @Field(type => Int, { nullable: true })\n threadsMin?: number\n\n @Field(type => Int, { nullable: true })\n threadsMax?: number\n\n @Field(type => ScalarDate, { nullable: true })\n dueAt?: Date\n\n @Field(type => ScalarObject, { nullable: true })\n input?: { [key: string]: any }\n\n @Field(type => ScalarObject, { nullable: true })\n output?: { [key: string]: any }\n\n @Field({ nullable: true })\n adhocType?: string\n\n @Field({ nullable: true })\n refBy?: string\n\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Field({ nullable: true })\n uiSource?: string\n\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Field({ nullable: true })\n viewSource?: string\n\n @Field(type => ObjectRef, { nullable: true })\n supervisoryRole?: Role\n\n @Field(type => ObjectRef, { nullable: true })\n assigneeRole?: Role\n\n @Field(type => ScalarObject, { nullable: true })\n assignees?: AssigneeItem[]\n\n @Field(type => ScalarObject, { nullable: true })\n approvalLine?: ApprovalLineItem[]\n}\n\n@InputType()\nexport class ActivityInstanceSave {\n @Field(type => ScalarObject, { nullable: true })\n output?: { [key: string]: any }\n\n @Field(type => ScalarObject, { nullable: true })\n assignees?: AssigneeItem[]\n\n @Field(type => ScalarObject, { nullable: true })\n approvalLine?: ApprovalLineItem[]\n}\n\n@InputType()\nexport class ActivityInstancePatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n priority?: number\n\n @Field({ nullable: true })\n state?: ActivityInstanceStatus\n\n @Field(type => Int, { nullable: true })\n threadsMin?: number\n\n @Field(type => Int, { nullable: true })\n threadsMax?: number\n\n @Field(type => ScalarDate, { nullable: true })\n dueAt?: Date\n\n @Field(type => ScalarObject, { nullable: true })\n input?: { [key: string]: any }\n\n @Field(type => ScalarObject, { nullable: true })\n assignees?: AssigneeItem[]\n\n @Field(type => ScalarObject, { nullable: true })\n approvalLine?: ApprovalLineItem[]\n\n @Field({ nullable: true })\n cuFlag?: string\n}\n\n@ObjectType()\nexport class ActivityInstanceList {\n @Field(type => [ActivityInstance])\n items: ActivityInstance[]\n\n @Field(type => Int)\n total: number\n}\n"]}
1
+ {"version":3,"file":"activity-instance-type.js","sourceRoot":"","sources":["../../../server/service/activity-instance/activity-instance-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'\n\nimport { Role } from '@things-factory/auth-base'\nimport { ObjectRef, ScalarDate, ScalarObject } from '@things-factory/shell'\nimport { ApprovalLineItem } from '@things-factory/organization'\n\nimport { ActivityType, ActivityUIType, AssigneeItem } from '../activity/activity.js'\nimport { ActivityInstance, ActivityInstanceStatus } from './activity-instance.js'\n@InputType()\nexport class ActivityInstanceDraft {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field()\n name: string\n\n @Field({ nullable: true })\n activityId: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n priority?: number\n\n @Field({ nullable: true })\n reason?: string\n\n @Field(type => Int, { nullable: true })\n threadsMin?: number\n\n @Field(type => Int, { nullable: true })\n threadsMax?: number\n\n @Field(type => ScalarDate, { nullable: true })\n dueAt?: Date\n\n @Field(type => ScalarObject, { nullable: true })\n input?: { [key: string]: any }\n\n @Field(type => ScalarObject, { nullable: true })\n output?: { [key: string]: any }\n\n @Field({ nullable: true })\n adhocType?: string\n\n @Field({ nullable: true })\n refBy?: string\n\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Field({ nullable: true })\n uiSource?: string\n\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Field({ nullable: true })\n viewSource?: string\n\n @Field(type => ObjectRef, { nullable: true })\n supervisoryRole?: Role\n\n @Field(type => ObjectRef, { nullable: true })\n assigneeRole?: Role\n\n @Field(type => ScalarObject, { nullable: true })\n assignees?: AssigneeItem[]\n\n @Field(type => ScalarObject, { nullable: true })\n approvalLine?: ApprovalLineItem[]\n}\n\n@InputType()\nexport class ActivityInstanceIssue {\n @Field(type => ID, { nullable: true })\n id?: string\n\n /**\n * 이 건은 **결재를 받아야 한다**고 내는 쪽이 말하는 자리.\n *\n * ── 왜 필요한가 ──────────────────────────────────────────────────────────\n * `startingType: 'post'` 는 낸 사람에게 스레드를 하나 만들고 곧바로 제출까지 간다. 결재선이 있으면\n * 거기서 상신되고, **없으면 그대로 끝난다.** 끝나면 완료 콜백이 돌아 업무가 확정된다.\n *\n * 그 거동 자체는 틀리지 않았다 — 결재 없이 내면 끝나는 일이 있다(작업 일지 같은 것). 문제는 **내는\n * 쪽이 「이건 결재를 받는다」고 믿고 냈는데 결재선이 비어 조용히 확정되는 경우**다. 오류도 없고\n * 흔적도 없어서, 승인 게이트가 있는 척만 하게 된다.\n *\n * 그래서 기대를 여기서 말한다. 말하지 않은 건은 아무것도 달라지지 않는다.\n *\n * ── 왜 내는 쪽에서 미리 보지 않고 여기서 보나 ────────────────────────────\n * 미리 봐도 되지만 그것만으로는 부족하다. 보고 나서 내기까지 사이에 누가 결재선을 비울 수 있다.\n * 내는 것과 같은 트랜잭션 안에서 보는 자리가 여기 하나뿐이다.\n */\n @Field({\n nullable: true,\n description: 'true when the caller expects this to go through an approval line — issuing fails if the line is empty'\n })\n requireApproval?: boolean\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n activityId?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n priority?: number\n\n @Field({ nullable: true })\n reason?: string\n\n @Field(type => Int, { nullable: true })\n threadsMin?: number\n\n @Field(type => Int, { nullable: true })\n threadsMax?: number\n\n @Field(type => ScalarDate, { nullable: true })\n dueAt?: Date\n\n @Field(type => ScalarObject, { nullable: true })\n input?: { [key: string]: any }\n\n @Field(type => ScalarObject, { nullable: true })\n output?: { [key: string]: any }\n\n @Field({ nullable: true })\n adhocType?: string\n\n @Field({ nullable: true })\n refBy?: string\n\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Field({ nullable: true })\n uiSource?: string\n\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Field({ nullable: true })\n viewSource?: string\n\n @Field(type => ObjectRef, { nullable: true })\n supervisoryRole?: Role\n\n @Field(type => ObjectRef, { nullable: true })\n assigneeRole?: Role\n\n @Field(type => ScalarObject, { nullable: true })\n assignees?: AssigneeItem[]\n\n @Field(type => ScalarObject, { nullable: true })\n approvalLine?: ApprovalLineItem[]\n\n /** 반려하면 끝인가. 주지 않으면 액티비티의 선언을 따른다. */\n @Field({ nullable: true, description: 'true when a rejection closes this case for good' })\n rejectionIsFinal?: boolean\n}\n\n@InputType()\nexport class ActivityInstanceSave {\n @Field(type => ScalarObject, { nullable: true })\n output?: { [key: string]: any }\n\n @Field(type => ScalarObject, { nullable: true })\n assignees?: AssigneeItem[]\n\n @Field(type => ScalarObject, { nullable: true })\n approvalLine?: ApprovalLineItem[]\n}\n\n@InputType()\nexport class ActivityInstancePatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n priority?: number\n\n @Field({ nullable: true })\n state?: ActivityInstanceStatus\n\n @Field(type => Int, { nullable: true })\n threadsMin?: number\n\n @Field(type => Int, { nullable: true })\n threadsMax?: number\n\n @Field(type => ScalarDate, { nullable: true })\n dueAt?: Date\n\n @Field(type => ScalarObject, { nullable: true })\n input?: { [key: string]: any }\n\n @Field(type => ScalarObject, { nullable: true })\n assignees?: AssigneeItem[]\n\n @Field(type => ScalarObject, { nullable: true })\n approvalLine?: ApprovalLineItem[]\n\n @Field({ nullable: true })\n cuFlag?: string\n}\n\n@ObjectType()\nexport class ActivityInstanceList {\n @Field(type => [ActivityInstance])\n items: ActivityInstance[]\n\n @Field(type => Int)\n total: number\n}\n"]}
@@ -54,6 +54,12 @@ export declare class ActivityInstance {
54
54
  transaction?: string;
55
55
  assignees?: AssigneeItem[];
56
56
  approvalLine?: ApprovalLineItem[];
57
+ /**
58
+ * 반려하면 끝인가 — 액티비티가 선언한 값을 낼 때 옮겨 담는다(`approvalLine` 과 같은 방식).
59
+ *
60
+ * 인스턴스에 두는 이유는 액티비티 없이 나는 건(adhoc)이 있어서다. 그때는 낸 쪽이 직접 준다.
61
+ */
62
+ rejectionIsFinal?: boolean;
57
63
  createdAt?: Date;
58
64
  updatedAt?: Date;
59
65
  issuedAt?: Date;
@@ -223,6 +223,11 @@ tslib_1.__decorate([
223
223
  (0, type_graphql_1.Field)(type => [organization_1.ApprovalLineItem], { nullable: true }),
224
224
  tslib_1.__metadata("design:type", Array)
225
225
  ], ActivityInstance.prototype, "approvalLine", void 0);
226
+ tslib_1.__decorate([
227
+ (0, typeorm_1.Column)({ type: 'boolean', nullable: true, default: false }),
228
+ (0, type_graphql_1.Field)({ nullable: true, description: 'true when a rejection closes this case for good' }),
229
+ tslib_1.__metadata("design:type", Boolean)
230
+ ], ActivityInstance.prototype, "rejectionIsFinal", void 0);
226
231
  tslib_1.__decorate([
227
232
  (0, typeorm_1.CreateDateColumn)(),
228
233
  (0, type_graphql_1.Field)({ nullable: true }),
@@ -1 +1 @@
1
- {"version":3,"file":"activity-instance.js","sourceRoot":"","sources":["../../../server/service/activity-instance/activity-instance.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, Int, ObjectType, registerEnumType } from 'type-graphql'\nimport {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n OneToMany,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn,\n VersionColumn\n} from 'typeorm'\n\nimport { Role, User } from '@things-factory/auth-base'\nimport { Domain, ScalarObject } from '@things-factory/shell'\nimport { ApprovalLineItem } from '@things-factory/organization'\n\nimport { ActivityThread } from '../activity-thread/activity-thread.js'\nimport { Activity, ActivityType, ActivityUIType, AssigneeItem } from '../activity/activity.js'\n\nexport enum ActivityInstanceStatus {\n Draft = 'draft',\n Issued = 'issued',\n Unassigned = 'unassigned',\n Assigned = 'assigned',\n Started = 'started',\n Pending = 'pending',\n Ended = 'ended',\n Aborted = 'aborted'\n}\n\nregisterEnumType(ActivityInstanceStatus, {\n name: 'ActivityInstanceStatus',\n description: 'state enumeration of a activityInstance'\n})\n\n@Entity()\n@Index(\n 'ix_activity_instance_0',\n (activityInstance: ActivityInstance) => [activityInstance.domain, activityInstance.name],\n { unique: false }\n)\n@Index(\n 'ix_activity_instance_1',\n (activityInstance: ActivityInstance) => [activityInstance.domain, activityInstance.state, activityInstance.priority],\n { unique: false }\n)\n@ObjectType({ description: 'Entity for ActivityInstance' })\nexport class ActivityInstance {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @VersionColumn({ default: 1 })\n @Field({ nullable: true })\n version?: number = 1\n\n @ManyToOne(type => Domain)\n @Field(type => Domain)\n domain?: Domain\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.domain)\n domainId?: string\n\n @Column()\n @Field({ nullable: true })\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n adhocType?: string\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key01?: string = ''\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key02?: string = ''\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key03?: string = ''\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key04?: string = ''\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key05?: string = ''\n\n @OneToMany(type => ActivityThread, activityThread => activityThread.activityInstance)\n @Field(type => [ActivityThread])\n activityThreads?: ActivityThread[]\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n uiSource?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n viewSource?: string\n\n @Column({ nullable: true, default: 1 })\n @Field({ nullable: true })\n priority?: number = 1\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n state?: ActivityInstanceStatus\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n reason?: string\n\n @Column({ nullable: true, default: 0 })\n @Field(type => Int, { nullable: true })\n threadsMin?: number = 0\n\n @Column({ nullable: true, default: 0 })\n @Field(type => Int, { nullable: true })\n threadsMax?: number = 0\n\n @Column('simple-json', { nullable: true })\n @Field(type => ScalarObject, { nullable: true })\n input?: { [key: string]: any }\n\n @Column('simple-json', { nullable: true })\n @Field(type => ScalarObject, { nullable: true })\n output?: { [key: string]: any }\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n refBy?: string\n\n @ManyToOne(type => Activity, { nullable: true })\n @Field(type => Activity, { nullable: true })\n activity?: Activity\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.activity)\n activityId?: string\n\n @ManyToOne(type => Role, { nullable: true })\n @Field(type => Role, { nullable: true })\n assigneeRole?: Role\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.assigneeRole)\n assigneeRoleId?: string\n\n @ManyToOne(type => Role, { nullable: true })\n @Field(type => Role, { nullable: true })\n supervisoryRole?: Role\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.supervisoryRole)\n supervisoryRoleId?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n dueAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n transaction?: string\n\n @Column('simple-json', { nullable: true })\n @Field(type => [AssigneeItem], { nullable: true })\n assignees?: AssigneeItem[]\n\n @Column('simple-json', { nullable: true })\n @Field(type => [ApprovalLineItem], { nullable: true })\n approvalLine?: ApprovalLineItem[]\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n issuedAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n assignedAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n startedAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n terminatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.updater)\n updaterId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n issuer?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.issuer)\n issuerId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n starter?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.starter)\n starterId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n terminator?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.terminator)\n terminatorId?: string\n\n @Field(type => String, { nullable: true })\n thumbnail?: string\n\n isDelegatable(): boolean {\n switch (this.state) {\n case ActivityInstanceStatus.Issued:\n case ActivityInstanceStatus.Assigned:\n return true\n default:\n return false\n }\n }\n}\n"]}
1
+ {"version":3,"file":"activity-instance.js","sourceRoot":"","sources":["../../../server/service/activity-instance/activity-instance.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, Int, ObjectType, registerEnumType } from 'type-graphql'\nimport {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n OneToMany,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn,\n VersionColumn\n} from 'typeorm'\n\nimport { Role, User } from '@things-factory/auth-base'\nimport { Domain, ScalarObject } from '@things-factory/shell'\nimport { ApprovalLineItem } from '@things-factory/organization'\n\nimport { ActivityThread } from '../activity-thread/activity-thread.js'\nimport { Activity, ActivityType, ActivityUIType, AssigneeItem } from '../activity/activity.js'\n\nexport enum ActivityInstanceStatus {\n Draft = 'draft',\n Issued = 'issued',\n Unassigned = 'unassigned',\n Assigned = 'assigned',\n Started = 'started',\n Pending = 'pending',\n Ended = 'ended',\n Aborted = 'aborted'\n}\n\nregisterEnumType(ActivityInstanceStatus, {\n name: 'ActivityInstanceStatus',\n description: 'state enumeration of a activityInstance'\n})\n\n@Entity()\n@Index(\n 'ix_activity_instance_0',\n (activityInstance: ActivityInstance) => [activityInstance.domain, activityInstance.name],\n { unique: false }\n)\n@Index(\n 'ix_activity_instance_1',\n (activityInstance: ActivityInstance) => [activityInstance.domain, activityInstance.state, activityInstance.priority],\n { unique: false }\n)\n@ObjectType({ description: 'Entity for ActivityInstance' })\nexport class ActivityInstance {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @VersionColumn({ default: 1 })\n @Field({ nullable: true })\n version?: number = 1\n\n @ManyToOne(type => Domain)\n @Field(type => Domain)\n domain?: Domain\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.domain)\n domainId?: string\n\n @Column()\n @Field({ nullable: true })\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n adhocType?: string\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key01?: string = ''\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key02?: string = ''\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key03?: string = ''\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key04?: string = ''\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n key05?: string = ''\n\n @OneToMany(type => ActivityThread, activityThread => activityThread.activityInstance)\n @Field(type => [ActivityThread])\n activityThreads?: ActivityThread[]\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n uiSource?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n viewSource?: string\n\n @Column({ nullable: true, default: 1 })\n @Field({ nullable: true })\n priority?: number = 1\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n state?: ActivityInstanceStatus\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n reason?: string\n\n @Column({ nullable: true, default: 0 })\n @Field(type => Int, { nullable: true })\n threadsMin?: number = 0\n\n @Column({ nullable: true, default: 0 })\n @Field(type => Int, { nullable: true })\n threadsMax?: number = 0\n\n @Column('simple-json', { nullable: true })\n @Field(type => ScalarObject, { nullable: true })\n input?: { [key: string]: any }\n\n @Column('simple-json', { nullable: true })\n @Field(type => ScalarObject, { nullable: true })\n output?: { [key: string]: any }\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n refBy?: string\n\n @ManyToOne(type => Activity, { nullable: true })\n @Field(type => Activity, { nullable: true })\n activity?: Activity\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.activity)\n activityId?: string\n\n @ManyToOne(type => Role, { nullable: true })\n @Field(type => Role, { nullable: true })\n assigneeRole?: Role\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.assigneeRole)\n assigneeRoleId?: string\n\n @ManyToOne(type => Role, { nullable: true })\n @Field(type => Role, { nullable: true })\n supervisoryRole?: Role\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.supervisoryRole)\n supervisoryRoleId?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n dueAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n transaction?: string\n\n @Column('simple-json', { nullable: true })\n @Field(type => [AssigneeItem], { nullable: true })\n assignees?: AssigneeItem[]\n\n @Column('simple-json', { nullable: true })\n @Field(type => [ApprovalLineItem], { nullable: true })\n approvalLine?: ApprovalLineItem[]\n\n /**\n * 반려하면 끝인가 — 액티비티가 선언한 값을 낼 때 옮겨 담는다(`approvalLine` 과 같은 방식).\n *\n * 인스턴스에 두는 이유는 액티비티 없이 나는 건(adhoc)이 있어서다. 그때는 낸 쪽이 직접 준다.\n */\n @Column({ type: 'boolean', nullable: true, default: false })\n @Field({ nullable: true, description: 'true when a rejection closes this case for good' })\n rejectionIsFinal?: boolean\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n issuedAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n assignedAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n startedAt?: Date\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n terminatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.updater)\n updaterId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n issuer?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.issuer)\n issuerId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n starter?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.starter)\n starterId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n terminator?: User\n\n @RelationId((activityInstance: ActivityInstance) => activityInstance.terminator)\n terminatorId?: string\n\n @Field(type => String, { nullable: true })\n thumbnail?: string\n\n isDelegatable(): boolean {\n switch (this.state) {\n case ActivityInstanceStatus.Issued:\n case ActivityInstanceStatus.Assigned:\n return true\n default:\n return false\n }\n }\n}\n"]}
@@ -1,4 +1,9 @@
1
1
  import { ActivityEvent } from './activity-stats-type.js';
2
2
  export declare class ActivityStatsQuery {
3
3
  activityEvents(from: string, to: string, context: ResolverContext): Promise<ActivityEvent[]>;
4
+ private rolesOf;
5
+ /** 아직 내 앞에 있는 업무 — 「할 일」 목록과 같은 정의를 읽는다(myOpenThreadsWhere). */
6
+ private myOpenThreadEvents;
7
+ /** 아직 내 판단을 기다리는 결재 — 「내 결재함」과 같은 정의를 읽는다(myPendingApprovalsWhere). */
8
+ private myPendingApprovalEvents;
4
9
  }
@@ -4,9 +4,14 @@ exports.ActivityStatsQuery = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const shell_1 = require("@things-factory/shell");
7
+ const auth_base_1 = require("@things-factory/auth-base");
7
8
  const activity_stats_type_js_1 = require("./activity-stats-type.js");
8
9
  const activity_thread_js_1 = require("../activity-thread/activity-thread.js");
9
10
  const activity_approval_js_1 = require("../activity-approval/activity-approval.js");
11
+ const my_open_threads_js_1 = require("../activity-thread/my-open-threads.js");
12
+ const my_pending_approvals_js_1 = require("../activity-approval/my-pending-approvals.js");
13
+ const approval_line_js_1 = require("../../controllers/activity-approval/approval-line.js");
14
+ const event_placement_js_1 = require("./event-placement.js");
10
15
  let ActivityStatsQuery = class ActivityStatsQuery {
11
16
  async activityEvents(from, to, context) {
12
17
  const { domain, user } = context.state;
@@ -33,22 +38,45 @@ let ActivityStatsQuery = class ActivityStatsQuery {
33
38
  .andWhere('at.state IN (:...status)', { status })
34
39
  .andWhere('at.assignee = :user', { user: user.id })
35
40
  .getMany();
36
- const activityThreadDoneEvents = doneItems.map(({ id, activityInstance, terminatedAt }) => {
41
+ const activityThreadDoneEvents = doneItems.map(({ id, activityInstance, terminatedAt, state }) => {
37
42
  return {
38
43
  id,
39
44
  name: activityInstance.name,
40
45
  date: terminatedAt,
41
46
  priority: activityInstance.priority,
42
- state: activity_stats_type_js_1.ActivityEventStatus.Done,
47
+ /*
48
+ * Giving up on work is not finishing it.
49
+ *
50
+ * This query asks for both endings — Ended and Aborted, three lines up — and then reported
51
+ * every one of them as Done. An aborted thread wore the same checkmark as a completed one,
52
+ * so the calendar answered "what did I finish this month" with a count that included the
53
+ * work that was dropped.
54
+ */
55
+ state: state == activity_thread_js_1.ActivityThreadStatus.Aborted ? activity_stats_type_js_1.ActivityEventStatus.Aborted : activity_stats_type_js_1.ActivityEventStatus.Done,
56
+ basis: activity_stats_type_js_1.ActivityEventDateBasis.Terminated,
43
57
  type: 'activity-thread'
44
58
  };
45
59
  });
46
- const judgment = [
47
- activity_approval_js_1.ActivityApprovalJudgment.Escalated,
48
- activity_approval_js_1.ActivityApprovalJudgment.Delegated,
49
- activity_approval_js_1.ActivityApprovalJudgment.Approved,
50
- activity_approval_js_1.ActivityApprovalJudgment.Rejected
60
+ /*
61
+ * **판단한 것만.** Derived from TERMINATED_JUDGMENTS rather than listed again by hand.
62
+ *
63
+ * This was a hand-written four (escalated, delegated, approved, rejected) while
64
+ * TERMINATED_JUDGMENTS holds six. The pending half asks the complement — NOT IN those six — so
65
+ * `aborted` and `closed` matched neither half and fell out of the calendar entirely: not
66
+ * waiting, not done, simply gone. Two hand-written copies of one definition, exactly what the
67
+ * comment on approvalPendingList warns about.
68
+ *
69
+ * Those two are excluded on purpose, and it is a different sentence from "not finished": the
70
+ * person never judged them. A thread being abandoned closes its open approvals around whoever
71
+ * held them (activity-thread/_abort.ts). Drawing that on 「what I did」 would credit someone
72
+ * with a decision they never made — and the icon set has no honest mark for it, since
73
+ * `judgment == Rejected ? Rejected : Approved` would stamp them 승인.
74
+ */
75
+ const NOT_JUDGED_BY_A_PERSON = [
76
+ activity_approval_js_1.ActivityApprovalJudgment.Aborted,
77
+ activity_approval_js_1.ActivityApprovalJudgment.Closed
51
78
  ];
79
+ const judgment = approval_line_js_1.TERMINATED_JUDGMENTS.filter(one => !NOT_JUDGED_BY_A_PERSON.includes(one));
52
80
  const approvalDoneItems = await (0, shell_1.getQueryBuilderFromListParams)({
53
81
  repository: (0, shell_1.getRepository)(activity_approval_js_1.ActivityApproval),
54
82
  params,
@@ -67,13 +95,123 @@ let ActivityStatsQuery = class ActivityStatsQuery {
67
95
  name: activityInstance.name,
68
96
  date: terminatedAt,
69
97
  priority: activityInstance.priority,
70
- state: judgment == activity_approval_js_1.ActivityApprovalJudgment.Approved || activity_approval_js_1.ActivityApprovalJudgment.Escalated
71
- ? activity_stats_type_js_1.ActivityEventStatus.Approved
72
- : activity_stats_type_js_1.ActivityEventStatus.Rejected,
98
+ /*
99
+ * Only a rejection is a rejection.
100
+ *
101
+ * This read `judgment == Approved || ActivityApprovalJudgment.Escalated`. The right side is
102
+ * not a comparison — it is the string 'escalated', which is always truthy, so the whole
103
+ * expression was always true and every approval on the calendar came back as Approved. A
104
+ * rejected request wore the 승인 icon (done_all instead of assignment_return): the calendar
105
+ * said the opposite of what happened.
106
+ *
107
+ * Of the four judgments that reach this list, three moved the request onward — approved,
108
+ * escalated to a supervisor, delegated to someone else — and one sent it back. The icon set
109
+ * draws that one distinction, so that is the one drawn.
110
+ *
111
+ * 위임 has no mark of its own here. It is not an approval and it is not a rejection, but
112
+ * ActivityEventStatus has no value for it and inventing one would change the API for a
113
+ * distinction the calendar cannot draw anyway. Marking it as sent-back would be the worse
114
+ * of the two available lies.
115
+ */
116
+ state: judgment == activity_approval_js_1.ActivityApprovalJudgment.Rejected ? activity_stats_type_js_1.ActivityEventStatus.Rejected : activity_stats_type_js_1.ActivityEventStatus.Approved,
117
+ basis: activity_stats_type_js_1.ActivityEventDateBasis.Terminated,
73
118
  type: 'activity-approval'
74
119
  };
75
120
  });
76
- return [...activityThreadDoneEvents, ...activityApprovalDoneEvents];
121
+ /*
122
+ * ── 안 끝난 것도 낸다 (2026-09-07) ─────────────────────────────────────
123
+ * 이 질의는 끝난 것만 냈다. 화면 이름이 「완료 달력」이었고, 정말로 끝난 것만 나왔다 — 달력이
124
+ * 아니라 기록부였다. 사람의 한 주에는 앞과 뒤가 다 있는데 뒤만 그렸다.
125
+ *
126
+ * 「안 얹는다」로 한 번 결론냈던 것을 되돌린 것이다. 그때 근거는 「plant 현장 달력의 filter 가
127
+ * 라인 하나뿐이라 결재가 안 맞는다」였는데, 그 달력은 **우리가 만든 것**이다. 지금 그렇게
128
+ * 생겼다는 건 현재 상태이지 제약이 아니었다.
129
+ *
130
+ * `ActivityEventStatus.Pending` 은 선언만 되어 있고 한 번도 나간 적이 없는 값이었다. 실을
131
+ * 자리가 이미 비어 있었다.
132
+ */
133
+ const [pendingThreadEvents, pendingApprovalEvents] = await Promise.all([
134
+ this.myOpenThreadEvents({ from, to }, context),
135
+ this.myPendingApprovalEvents({ from, to }, context)
136
+ ]);
137
+ return [
138
+ ...activityThreadDoneEvents,
139
+ ...activityApprovalDoneEvents,
140
+ ...pendingThreadEvents,
141
+ ...pendingApprovalEvents
142
+ ];
143
+ }
144
+ async rolesOf(context) {
145
+ const { domain, user } = context.state;
146
+ const withRoles = await (0, shell_1.getRepository)(auth_base_1.User).findOne({
147
+ where: { id: user.id },
148
+ relations: ['roles']
149
+ });
150
+ return (withRoles?.roles || []).filter(role => role.domainId === domain.id).map(role => role.id);
151
+ }
152
+ /** 아직 내 앞에 있는 업무 — 「할 일」 목록과 같은 정의를 읽는다(myOpenThreadsWhere). */
153
+ async myOpenThreadEvents({ from, to }, context) {
154
+ const { domain, user } = context.state;
155
+ const roles = await this.rolesOf(context);
156
+ const items = await (0, shell_1.getQueryBuilderFromListParams)({
157
+ repository: (0, shell_1.getRepository)(activity_thread_js_1.ActivityThread),
158
+ params: { filters: [] },
159
+ domain,
160
+ alias: 'at'
161
+ })
162
+ .innerJoinAndSelect('at.activityInstance', 'ai')
163
+ .andWhere((0, my_open_threads_js_1.myOpenThreadsWhere)({ userId: user.id, roles }))
164
+ .getMany();
165
+ return items
166
+ .map(({ id, activityInstance, dueAt, assignedAt }) => ({
167
+ id,
168
+ name: activityInstance.name,
169
+ ...(0, event_placement_js_1.placeOf)(dueAt, assignedAt),
170
+ priority: activityInstance.priority,
171
+ state: activity_stats_type_js_1.ActivityEventStatus.Pending,
172
+ type: 'activity-thread'
173
+ }))
174
+ .filter(event => (0, event_placement_js_1.withinPeriod)(event.date, from, to));
175
+ }
176
+ /** 아직 내 판단을 기다리는 결재 — 「내 결재함」과 같은 정의를 읽는다(myPendingApprovalsWhere). */
177
+ async myPendingApprovalEvents({ from, to }, context) {
178
+ const { domain, user } = context.state;
179
+ const roles = await this.rolesOf(context);
180
+ const items = await (0, shell_1.getQueryBuilderFromListParams)({
181
+ repository: (0, shell_1.getRepository)(activity_approval_js_1.ActivityApproval),
182
+ params: { filters: [] },
183
+ domain,
184
+ alias: 'ap'
185
+ })
186
+ .leftJoinAndSelect('ap.activityThread', 'at')
187
+ .leftJoinAndSelect('at.activityInstance', 'ai')
188
+ .andWhere((0, my_pending_approvals_js_1.myPendingApprovalsWhere)({ userId: user.id, roles }))
189
+ .getMany();
190
+ return items
191
+ .map(({ id, activityThread, createdAt }) => ({
192
+ id,
193
+ name: activityThread?.activityInstance?.name,
194
+ /*
195
+ * **The deadline here is the thread's, not the approval's.**
196
+ *
197
+ * activity_approvals has no due_at column — checked. So a judged-by date can only come
198
+ * from the request the approval hangs off, and that is the right value today: the approval
199
+ * has to be finished by the time the work is due.
200
+ *
201
+ * Written down because the screen reads it as the approval's own. The day an approval
202
+ * grows a deadline of its own the two values part, and whoever meets that day needs to
203
+ * know which one this line meant. (plant lane raised this, 2026-09-07.)
204
+ *
205
+ * The fallback is a different date entirely: `createApproval` writes the row when the turn
206
+ * arrives — submit for the first approver, approve for the next — so createdAt is the day
207
+ * it landed on this person.
208
+ */
209
+ ...(0, event_placement_js_1.placeOf)(activityThread?.dueAt, createdAt),
210
+ priority: activityThread?.activityInstance?.priority,
211
+ state: activity_stats_type_js_1.ActivityEventStatus.Pending,
212
+ type: 'activity-approval'
213
+ }))
214
+ .filter(event => (0, event_placement_js_1.withinPeriod)(event.date, from, to));
77
215
  }
78
216
  };
79
217
  exports.ActivityStatsQuery = ActivityStatsQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"activity-stats-query.js","sourceRoot":"","sources":["../../../server/service/activity-stats/activity-stats-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ActivityEvent, ActivityEventStatus } from './activity-stats-type.js'\nimport { ActivityThread, ActivityThreadStatus } from '../activity-thread/activity-thread.js'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../activity-approval/activity-approval.js'\n\n@Resolver(ActivityStatsQuery)\nexport class ActivityStatsQuery {\n @Query(returns => [ActivityEvent], { description: 'To fetch activity events by period' })\n async activityEvents(\n @Arg('from') from: string,\n @Arg('to') to: string,\n @Ctx() context: ResolverContext\n ): Promise<ActivityEvent[]> {\n const { domain, user } = context.state\n\n if (!from) {\n const beginOfToday = new Date()\n beginOfToday.setHours(0, 0, 0, 0)\n from = beginOfToday.toISOString().split('T').join(' ')\n }\n\n if (!to) {\n const endOfToday = new Date()\n endOfToday.setDate(endOfToday.getDate() + 1)\n endOfToday.setHours(0, 0, 0, 0)\n to = endOfToday.toISOString().split('T').join(' ')\n }\n\n const status = [ActivityThreadStatus.Ended, ActivityThreadStatus.Aborted]\n\n var params = { filters: [{ name: 'terminatedAt', operator: 'between', value: [from, to] }] }\n\n var doneItems = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityThread),\n params,\n domain,\n alias: 'at'\n })\n .leftJoinAndSelect('at.activityInstance', 'ai')\n .andWhere('at.state IN (:...status)', { status })\n .andWhere('at.assignee = :user', { user: user.id })\n .getMany()\n\n const activityThreadDoneEvents = doneItems.map(({ id, activityInstance, terminatedAt }) => {\n return {\n id,\n name: activityInstance.name,\n date: terminatedAt,\n priority: activityInstance.priority,\n state: ActivityEventStatus.Done,\n type: 'activity-thread'\n }\n })\n\n const judgment = [\n ActivityApprovalJudgment.Escalated,\n ActivityApprovalJudgment.Delegated,\n ActivityApprovalJudgment.Approved,\n ActivityApprovalJudgment.Rejected\n ]\n\n const approvalDoneItems = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params,\n domain,\n alias: 'ap'\n })\n .leftJoinAndSelect('ap.activityThread', 'at')\n .leftJoinAndSelect('at.activityInstance', 'ai')\n .andWhere('ap.judgment IN (:...judgment)', { judgment })\n .andWhere('ap.approver = :user', { user: user.id })\n .getMany()\n\n const activityApprovalDoneEvents = approvalDoneItems.map(({ id, activityThread, terminatedAt, judgment }) => {\n const activityInstance = activityThread.activityInstance\n\n return {\n id,\n name: activityInstance.name,\n date: terminatedAt,\n priority: activityInstance.priority,\n state:\n judgment == ActivityApprovalJudgment.Approved || ActivityApprovalJudgment.Escalated\n ? ActivityEventStatus.Approved\n : ActivityEventStatus.Rejected,\n type: 'activity-approval'\n }\n })\n\n return [...activityThreadDoneEvents, ...activityApprovalDoneEvents]\n }\n}\n"]}
1
+ {"version":3,"file":"activity-stats-query.js","sourceRoot":"","sources":["../../../server/service/activity-stats/activity-stats-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { Role, User } from '@things-factory/auth-base'\nimport { ActivityEvent, ActivityEventDateBasis, ActivityEventStatus } from './activity-stats-type.js'\nimport { ActivityThread, ActivityThreadStatus } from '../activity-thread/activity-thread.js'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../activity-approval/activity-approval.js'\nimport { myOpenThreadsWhere } from '../activity-thread/my-open-threads.js'\nimport { myPendingApprovalsWhere } from '../activity-approval/my-pending-approvals.js'\nimport { TERMINATED_JUDGMENTS } from '../../controllers/activity-approval/approval-line.js'\nimport { placeOf, withinPeriod } from './event-placement.js'\n\n@Resolver(ActivityStatsQuery)\nexport class ActivityStatsQuery {\n @Query(returns => [ActivityEvent], { description: 'To fetch activity events by period' })\n async activityEvents(\n @Arg('from') from: string,\n @Arg('to') to: string,\n @Ctx() context: ResolverContext\n ): Promise<ActivityEvent[]> {\n const { domain, user } = context.state\n\n if (!from) {\n const beginOfToday = new Date()\n beginOfToday.setHours(0, 0, 0, 0)\n from = beginOfToday.toISOString().split('T').join(' ')\n }\n\n if (!to) {\n const endOfToday = new Date()\n endOfToday.setDate(endOfToday.getDate() + 1)\n endOfToday.setHours(0, 0, 0, 0)\n to = endOfToday.toISOString().split('T').join(' ')\n }\n\n const status = [ActivityThreadStatus.Ended, ActivityThreadStatus.Aborted]\n\n var params = { filters: [{ name: 'terminatedAt', operator: 'between', value: [from, to] }] }\n\n var doneItems = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityThread),\n params,\n domain,\n alias: 'at'\n })\n .leftJoinAndSelect('at.activityInstance', 'ai')\n .andWhere('at.state IN (:...status)', { status })\n .andWhere('at.assignee = :user', { user: user.id })\n .getMany()\n\n const activityThreadDoneEvents = doneItems.map(({ id, activityInstance, terminatedAt, state }) => {\n return {\n id,\n name: activityInstance.name,\n date: terminatedAt,\n priority: activityInstance.priority,\n /*\n * Giving up on work is not finishing it.\n *\n * This query asks for both endings — Ended and Aborted, three lines up — and then reported\n * every one of them as Done. An aborted thread wore the same checkmark as a completed one,\n * so the calendar answered \"what did I finish this month\" with a count that included the\n * work that was dropped.\n */\n state: state == ActivityThreadStatus.Aborted ? ActivityEventStatus.Aborted : ActivityEventStatus.Done,\n basis: ActivityEventDateBasis.Terminated,\n type: 'activity-thread'\n }\n })\n\n /*\n * **판단한 것만.** Derived from TERMINATED_JUDGMENTS rather than listed again by hand.\n *\n * This was a hand-written four (escalated, delegated, approved, rejected) while\n * TERMINATED_JUDGMENTS holds six. The pending half asks the complement — NOT IN those six — so\n * `aborted` and `closed` matched neither half and fell out of the calendar entirely: not\n * waiting, not done, simply gone. Two hand-written copies of one definition, exactly what the\n * comment on approvalPendingList warns about.\n *\n * Those two are excluded on purpose, and it is a different sentence from \"not finished\": the\n * person never judged them. A thread being abandoned closes its open approvals around whoever\n * held them (activity-thread/_abort.ts). Drawing that on 「what I did」 would credit someone\n * with a decision they never made — and the icon set has no honest mark for it, since\n * `judgment == Rejected ? Rejected : Approved` would stamp them 승인.\n */\n const NOT_JUDGED_BY_A_PERSON: readonly string[] = [\n ActivityApprovalJudgment.Aborted,\n ActivityApprovalJudgment.Closed\n ]\n const judgment = TERMINATED_JUDGMENTS.filter(one => !NOT_JUDGED_BY_A_PERSON.includes(one))\n\n const approvalDoneItems = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params,\n domain,\n alias: 'ap'\n })\n .leftJoinAndSelect('ap.activityThread', 'at')\n .leftJoinAndSelect('at.activityInstance', 'ai')\n .andWhere('ap.judgment IN (:...judgment)', { judgment })\n .andWhere('ap.approver = :user', { user: user.id })\n .getMany()\n\n const activityApprovalDoneEvents = approvalDoneItems.map(({ id, activityThread, terminatedAt, judgment }) => {\n const activityInstance = activityThread.activityInstance\n\n return {\n id,\n name: activityInstance.name,\n date: terminatedAt,\n priority: activityInstance.priority,\n /*\n * Only a rejection is a rejection.\n *\n * This read `judgment == Approved || ActivityApprovalJudgment.Escalated`. The right side is\n * not a comparison — it is the string 'escalated', which is always truthy, so the whole\n * expression was always true and every approval on the calendar came back as Approved. A\n * rejected request wore the 승인 icon (done_all instead of assignment_return): the calendar\n * said the opposite of what happened.\n *\n * Of the four judgments that reach this list, three moved the request onward — approved,\n * escalated to a supervisor, delegated to someone else — and one sent it back. The icon set\n * draws that one distinction, so that is the one drawn.\n *\n * 위임 has no mark of its own here. It is not an approval and it is not a rejection, but\n * ActivityEventStatus has no value for it and inventing one would change the API for a\n * distinction the calendar cannot draw anyway. Marking it as sent-back would be the worse\n * of the two available lies.\n */\n state:\n judgment == ActivityApprovalJudgment.Rejected ? ActivityEventStatus.Rejected : ActivityEventStatus.Approved,\n basis: ActivityEventDateBasis.Terminated,\n type: 'activity-approval'\n }\n })\n\n /*\n * ── 안 끝난 것도 낸다 (2026-09-07) ─────────────────────────────────────\n * 이 질의는 끝난 것만 냈다. 화면 이름이 「완료 달력」이었고, 정말로 끝난 것만 나왔다 — 달력이\n * 아니라 기록부였다. 사람의 한 주에는 앞과 뒤가 다 있는데 뒤만 그렸다.\n *\n * 「안 얹는다」로 한 번 결론냈던 것을 되돌린 것이다. 그때 근거는 「plant 현장 달력의 filter 가\n * 라인 하나뿐이라 결재가 안 맞는다」였는데, 그 달력은 **우리가 만든 것**이다. 지금 그렇게\n * 생겼다는 건 현재 상태이지 제약이 아니었다.\n *\n * `ActivityEventStatus.Pending` 은 선언만 되어 있고 한 번도 나간 적이 없는 값이었다. 실을\n * 자리가 이미 비어 있었다.\n */\n const [pendingThreadEvents, pendingApprovalEvents] = await Promise.all([\n this.myOpenThreadEvents({ from, to }, context),\n this.myPendingApprovalEvents({ from, to }, context)\n ])\n\n return [\n ...activityThreadDoneEvents,\n ...activityApprovalDoneEvents,\n ...pendingThreadEvents,\n ...pendingApprovalEvents\n ]\n }\n\n private async rolesOf(context: ResolverContext): Promise<string[]> {\n const { domain, user } = context.state\n\n const withRoles = await getRepository(User).findOne({\n where: { id: user.id },\n relations: ['roles']\n })\n\n return (withRoles?.roles || []).filter(role => role.domainId === domain.id).map(role => role.id)\n }\n\n /** 아직 내 앞에 있는 업무 — 「할 일」 목록과 같은 정의를 읽는다(myOpenThreadsWhere). */\n private async myOpenThreadEvents(\n { from, to }: { from: string; to: string },\n context: ResolverContext\n ): Promise<ActivityEvent[]> {\n const { domain, user } = context.state\n const roles = await this.rolesOf(context)\n\n const items = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityThread),\n params: { filters: [] },\n domain,\n alias: 'at'\n })\n .innerJoinAndSelect('at.activityInstance', 'ai')\n .andWhere(myOpenThreadsWhere({ userId: user.id, roles }))\n .getMany()\n\n return items\n .map(({ id, activityInstance, dueAt, assignedAt }) => ({\n id,\n name: activityInstance.name,\n ...placeOf(dueAt, assignedAt),\n priority: activityInstance.priority,\n state: ActivityEventStatus.Pending,\n type: 'activity-thread'\n }))\n .filter(event => withinPeriod(event.date, from, to))\n }\n\n /** 아직 내 판단을 기다리는 결재 — 「내 결재함」과 같은 정의를 읽는다(myPendingApprovalsWhere). */\n private async myPendingApprovalEvents(\n { from, to }: { from: string; to: string },\n context: ResolverContext\n ): Promise<ActivityEvent[]> {\n const { domain, user } = context.state\n const roles = await this.rolesOf(context)\n\n const items = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params: { filters: [] },\n domain,\n alias: 'ap'\n })\n .leftJoinAndSelect('ap.activityThread', 'at')\n .leftJoinAndSelect('at.activityInstance', 'ai')\n .andWhere(myPendingApprovalsWhere({ userId: user.id, roles }))\n .getMany()\n\n return items\n .map(({ id, activityThread, createdAt }) => ({\n id,\n name: activityThread?.activityInstance?.name,\n /*\n * **The deadline here is the thread's, not the approval's.**\n *\n * activity_approvals has no due_at column — checked. So a judged-by date can only come\n * from the request the approval hangs off, and that is the right value today: the approval\n * has to be finished by the time the work is due.\n *\n * Written down because the screen reads it as the approval's own. The day an approval\n * grows a deadline of its own the two values part, and whoever meets that day needs to\n * know which one this line meant. (plant lane raised this, 2026-09-07.)\n *\n * The fallback is a different date entirely: `createApproval` writes the row when the turn\n * arrives — submit for the first approver, approve for the next — so createdAt is the day\n * it landed on this person.\n */\n ...placeOf(activityThread?.dueAt, createdAt),\n priority: activityThread?.activityInstance?.priority,\n state: ActivityEventStatus.Pending,\n type: 'activity-approval'\n }))\n .filter(event => withinPeriod(event.date, from, to))\n }\n}\n"]}
@@ -1,14 +1,27 @@
1
- export declare enum ActivityEventStatus {
2
- Done = "done",
3
- Pending = "pending",
4
- Approved = "approved",
5
- Rejected = "rejected"
6
- }
1
+ import { ActivityEventDateBasis } from './event-placement.js';
2
+ export { ActivityEventDateBasis } from './event-placement.js';
3
+ export type { ActivityEventDateBasis as ActivityEventDateBasisType } from './event-placement.js';
4
+ /**
5
+ * How a finished item reads on the calendar.
6
+ *
7
+ * `Aborted` is not decoration. A thread that was given up on ends in the same query as one that was
8
+ * completed, and without a value of its own it was reported as `Done` — the calendar drew a
9
+ * checkmark on work nobody finished.
10
+ */
11
+ export declare const ActivityEventStatus: {
12
+ readonly Done: "done";
13
+ readonly Aborted: "aborted";
14
+ readonly Pending: "pending";
15
+ readonly Approved: "approved";
16
+ readonly Rejected: "rejected";
17
+ };
18
+ export type ActivityEventStatus = (typeof ActivityEventStatus)[keyof typeof ActivityEventStatus];
7
19
  export declare class ActivityEvent {
8
20
  id?: string;
9
21
  name?: string;
10
22
  type?: string;
11
23
  priority?: number;
12
24
  state?: ActivityEventStatus;
25
+ basis?: ActivityEventDateBasis;
13
26
  date?: Date;
14
27
  }