@dssp/project 1.0.0-alpha.5 → 1.0.0-alpha.51

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 (114) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -1
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/pages/lib/chatbot-widget.d.ts +53 -0
  5. package/dist-client/pages/lib/chatbot-widget.js +631 -0
  6. package/dist-client/pages/lib/chatbot-widget.js.map +1 -0
  7. package/dist-client/pages/lib/select2-component.d.ts +1 -1
  8. package/dist-client/pages/lib/select2-component.js +35 -35
  9. package/dist-client/pages/lib/select2-component.js.map +1 -1
  10. package/dist-client/pages/lib/waether.d.ts +2 -1
  11. package/dist-client/pages/lib/waether.js +7 -3
  12. package/dist-client/pages/lib/waether.js.map +1 -1
  13. package/dist-client/pages/project/component/pagenation.d.ts +18 -0
  14. package/dist-client/pages/project/component/pagenation.js +142 -0
  15. package/dist-client/pages/project/component/pagenation.js.map +1 -0
  16. package/dist-client/pages/project/component/project-update-header.js +26 -3
  17. package/dist-client/pages/project/component/project-update-header.js.map +1 -1
  18. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.d.ts +1 -0
  19. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js +309 -0
  20. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +1 -0
  21. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.d.ts +1 -0
  22. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js +357 -0
  23. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +1 -0
  24. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.d.ts +1 -0
  25. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js +681 -0
  26. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +1 -0
  27. package/dist-client/pages/project/popup/checklist/task-checklist-view.d.ts +32 -0
  28. package/dist-client/pages/project/popup/checklist/task-checklist-view.js +621 -0
  29. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +1 -0
  30. package/dist-client/pages/project/popup/popup-plan-export.d.ts +10 -0
  31. package/dist-client/pages/project/popup/popup-plan-export.js +242 -0
  32. package/dist-client/pages/project/popup/popup-plan-export.js.map +1 -0
  33. package/dist-client/pages/project/popup/popup-plan-upload.d.ts +3 -0
  34. package/dist-client/pages/project/popup/popup-plan-upload.js +130 -4
  35. package/dist-client/pages/project/popup/popup-plan-upload.js.map +1 -1
  36. package/dist-client/pages/project/popup/{popup-schedule-upload.d.ts → popup-task-upload.d.ts} +1 -1
  37. package/dist-client/pages/project/popup/{popup-schedule-upload.js → popup-task-upload.js} +9 -9
  38. package/dist-client/pages/project/popup/popup-task-upload.js.map +1 -0
  39. package/dist-client/pages/project/project-completed-list.d.ts +5 -0
  40. package/dist-client/pages/project/project-completed-list.js +32 -3
  41. package/dist-client/pages/project/project-completed-list.js.map +1 -1
  42. package/dist-client/pages/project/project-detail.d.ts +2 -1
  43. package/dist-client/pages/project/project-detail.js +316 -97
  44. package/dist-client/pages/project/project-detail.js.map +1 -1
  45. package/dist-client/pages/project/project-list.d.ts +53 -0
  46. package/dist-client/pages/project/project-list.js +72 -3
  47. package/dist-client/pages/project/project-list.js.map +1 -1
  48. package/dist-client/pages/project/project-plan-management.js +29 -13
  49. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  50. package/dist-client/pages/project/project-setting-list.d.ts +5 -0
  51. package/dist-client/pages/project/project-setting-list.js +32 -3
  52. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  53. package/dist-client/pages/project/{project-schedule-list.d.ts → project-task-list.d.ts} +2 -2
  54. package/dist-client/pages/project/{project-schedule-list.js → project-task-list.js} +11 -11
  55. package/dist-client/pages/project/project-task-list.js.map +1 -0
  56. package/dist-client/pages/project/{project-schedule.d.ts → project-task.d.ts} +17 -4
  57. package/dist-client/pages/project/project-task.js +686 -0
  58. package/dist-client/pages/project/project-task.js.map +1 -0
  59. package/dist-client/pages/project/project-update.d.ts +1 -0
  60. package/dist-client/pages/project/project-update.js +346 -42
  61. package/dist-client/pages/project/project-update.js.map +1 -1
  62. package/dist-client/route.d.ts +1 -1
  63. package/dist-client/route.js +4 -4
  64. package/dist-client/route.js.map +1 -1
  65. package/dist-client/tsconfig.tsbuildinfo +1 -1
  66. package/dist-server/controllers/parse-excel.js.map +1 -1
  67. package/dist-server/service/index.d.ts +2 -2
  68. package/dist-server/service/index.js +5 -2
  69. package/dist-server/service/index.js.map +1 -1
  70. package/dist-server/service/project/project-mutation.d.ts +1 -0
  71. package/dist-server/service/project/project-mutation.js +107 -4
  72. package/dist-server/service/project/project-mutation.js.map +1 -1
  73. package/dist-server/service/project/project-query.d.ts +3 -0
  74. package/dist-server/service/project/project-query.js +52 -0
  75. package/dist-server/service/project/project-query.js.map +1 -1
  76. package/dist-server/service/project/project-type.d.ts +6 -0
  77. package/dist-server/service/project/project-type.js +24 -2
  78. package/dist-server/service/project/project-type.js.map +1 -1
  79. package/dist-server/service/project/project.d.ts +14 -1
  80. package/dist-server/service/project/project.js +49 -2
  81. package/dist-server/service/project/project.js.map +1 -1
  82. package/dist-server/service/task/task-query.d.ts +2 -0
  83. package/dist-server/service/task/task-query.js +11 -0
  84. package/dist-server/service/task/task-query.js.map +1 -1
  85. package/dist-server/service/task/task.d.ts +2 -0
  86. package/dist-server/service/task/task.js +6 -0
  87. package/dist-server/service/task/task.js.map +1 -1
  88. package/dist-server/service/task-checklist-binding/index.d.ts +5 -0
  89. package/dist-server/service/task-checklist-binding/index.js +9 -0
  90. package/dist-server/service/task-checklist-binding/index.js.map +1 -0
  91. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +5 -0
  92. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +186 -0
  93. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +1 -0
  94. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +8 -0
  95. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +61 -0
  96. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +1 -0
  97. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +15 -0
  98. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +57 -0
  99. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +1 -0
  100. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +22 -0
  101. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +106 -0
  102. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +1 -0
  103. package/dist-server/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +15 -12
  105. package/things-factory.config.js +3 -3
  106. package/translations/en.json +10 -9
  107. package/translations/ja.json +15 -1
  108. package/translations/ko.json +3 -0
  109. package/translations/ms.json +15 -1
  110. package/translations/zh.json +15 -1
  111. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +0 -1
  112. package/dist-client/pages/project/project-schedule-list.js.map +0 -1
  113. package/dist-client/pages/project/project-schedule.js +0 -407
  114. package/dist-client/pages/project/project-schedule.js.map +0 -1
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskChecklistBindingMutation = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const task_checklist_binding_1 = require("./task-checklist-binding");
7
+ const supervision_1 = require("@dssp/supervision");
8
+ const task_checklist_binding_type_1 = require("./task-checklist-binding-type");
9
+ let TaskChecklistBindingMutation = class TaskChecklistBindingMutation {
10
+ async createTaskChecklist(patch, context) {
11
+ const { user, tx } = context.state;
12
+ const { checklist, checklistItem, managerId } = patch;
13
+ const { projectId, taskCode } = checklist;
14
+ const checklistRepository = tx.getRepository(supervision_1.Checklist);
15
+ const checklistItemRepository = tx.getRepository(supervision_1.ChecklistItem);
16
+ const taskChecklistBindingRepository = tx.getRepository(task_checklist_binding_1.TaskChecklistBinding);
17
+ // 1. 벨리데이션
18
+ if (!checklist.constructionType)
19
+ throw new Error('공종 타입이 없습니다.');
20
+ if (!checklist.constructionDetailType)
21
+ throw new Error('상세 공종 타입이 없습니다.');
22
+ if (!checklist.name)
23
+ throw new Error('체크리스트 이름이 없습니다.');
24
+ if (checklistItem.length === 0)
25
+ throw new Error('체크리스트 아이템이 없습니다.');
26
+ // 2. checklist 저장
27
+ const documentNo = await getRecentDocumentNoByTaskCode(tx);
28
+ const savedChecklist = await checklistRepository.save(Object.assign(Object.assign({}, checklist), { documentNo, projectType: supervision_1.ProjectType.DSSP, checklistReferenceType: supervision_1.ChecklistReferenceType.TASK, creator: user, updater: user }));
29
+ // 3. checklistItem 저장
30
+ const checklistItems = checklistItem.map((item, idx) => ({
31
+ name: item.name,
32
+ mainType: item.mainType,
33
+ detailType: item.detailType,
34
+ inspctionCriteria: item.inspctionCriteria,
35
+ sequence: idx,
36
+ checklist: savedChecklist,
37
+ creator: user,
38
+ updater: user
39
+ }));
40
+ await checklistItemRepository.save(checklistItems);
41
+ // 4. taskChecklistBinding 저장
42
+ await taskChecklistBindingRepository.save({
43
+ project: { id: projectId },
44
+ taskCode,
45
+ checklist: savedChecklist,
46
+ status: supervision_1.BuildingInspectionStatus.WAIT,
47
+ manager: { id: managerId },
48
+ creator: user,
49
+ updater: user
50
+ });
51
+ return true;
52
+ }
53
+ // 체크리스트 상태 변경 & 체크리스트 갱신
54
+ async updateTaskChecklist(taskChecklist, context) {
55
+ const { user, tx } = context.state;
56
+ const { checklistId, checklist, checklistItem } = taskChecklist;
57
+ const checklistRepo = tx.getRepository(supervision_1.Checklist);
58
+ const checklistItemRepo = tx.getRepository(supervision_1.ChecklistItem);
59
+ const taskChecklistBindingRepository = tx.getRepository(task_checklist_binding_1.TaskChecklistBinding);
60
+ const currChecklist = await checklistRepo.findOneBy({ id: checklistId });
61
+ const currTaskChecklistBinding = await taskChecklistBindingRepository.findOneBy({ checklist: { id: checklistId } });
62
+ const status = currTaskChecklistBinding.status;
63
+ const isConstructor = status == supervision_1.BuildingInspectionStatus.WAIT ||
64
+ status == supervision_1.BuildingInspectionStatus.OVERALL_WAIT ||
65
+ status == supervision_1.BuildingInspectionStatus.FAIL;
66
+ let taskChecklistStatus = null;
67
+ // 1. 벨리데이션
68
+ if (status == supervision_1.BuildingInspectionStatus.PASS)
69
+ throw new Error('체크리스트 상태가 수정할 수 있는 상태가 아닙니다.');
70
+ if (isConstructor) {
71
+ // 시공자 타입별 밸리데이션
72
+ if (checklistItem.length !== checklistItem.filter(v => v.constructionConfirmStatus).length) {
73
+ throw new Error('아이템을 모두 체크해야 합니다.');
74
+ }
75
+ if (status == supervision_1.BuildingInspectionStatus.OVERALL_WAIT && !checklist.overallConstructorSignature) {
76
+ throw new Error('총괄 시공책임자 사인이 없습니다.');
77
+ }
78
+ if (status == supervision_1.BuildingInspectionStatus.WAIT && !checklist.taskConstructorSignature) {
79
+ throw new Error('공종별 시공관리자 사인이 없습니다.');
80
+ }
81
+ // 시공자 상태 데이터
82
+ const isPassed = checklistItem.length === checklistItem.filter(v => v.constructionConfirmStatus === 'T').length;
83
+ if (!isPassed) {
84
+ // 1. 검측이 불햡격 = 상태는 불합격으로, 시공자 싸인은 모두 초기화
85
+ taskChecklistStatus = supervision_1.BuildingInspectionStatus.FAIL;
86
+ checklist.overallConstructorSignature = null;
87
+ checklist.taskConstructorSignature = null;
88
+ }
89
+ else if (isPassed && (status === supervision_1.BuildingInspectionStatus.WAIT || status === supervision_1.BuildingInspectionStatus.FAIL)) {
90
+ // 2. 검측이 합격이면서 공종 시공자 스탭 = 상태는 총괄 시공자 스탭으로
91
+ taskChecklistStatus = supervision_1.BuildingInspectionStatus.OVERALL_WAIT;
92
+ }
93
+ else if (isPassed && status === supervision_1.BuildingInspectionStatus.OVERALL_WAIT) {
94
+ // 3. 검측이 합격이면서 총괄 시공자 스탭 = 상태는 공종 감리자 스탭으로, 감리자 싸인은 모두 초기화
95
+ taskChecklistStatus = supervision_1.BuildingInspectionStatus.REQUEST;
96
+ checklist.overallSupervisorySignature = null;
97
+ checklist.taskSupervisorySignature = null;
98
+ }
99
+ }
100
+ else {
101
+ // 감리자 타입별 밸리데이션
102
+ if (checklistItem.length !== checklistItem.filter(v => v.supervisoryConfirmStatus).length) {
103
+ throw new Error('아이템을 모두 체크해야 합니다.');
104
+ }
105
+ if (status == supervision_1.BuildingInspectionStatus.OVERALL_REQUEST && !checklist.overallSupervisorySignature) {
106
+ throw new Error('총괄 감리책임자 사인이 없습니다.');
107
+ }
108
+ if (status == supervision_1.BuildingInspectionStatus.REQUEST && !checklist.taskSupervisorySignature) {
109
+ throw new Error('공종별 감리 책임자 사인이 없습니다.');
110
+ }
111
+ // 감리자 상태 데이터
112
+ const isPassed = checklistItem.length === checklistItem.filter(v => v.supervisoryConfirmStatus === 'T').length;
113
+ if (!isPassed) {
114
+ // 1. 검측이 불햡격 = 상태는 불합격으로, 시공자 싸인은 모두 초기화
115
+ taskChecklistStatus = supervision_1.BuildingInspectionStatus.FAIL;
116
+ checklist.overallConstructorSignature = null;
117
+ checklist.taskConstructorSignature = null;
118
+ }
119
+ else if (isPassed && status === supervision_1.BuildingInspectionStatus.REQUEST) {
120
+ // 2. 검측이 합격이면서 공종 감리자 스탭 = 상태는 총괄 감리자 스탭으로
121
+ taskChecklistStatus = supervision_1.BuildingInspectionStatus.OVERALL_REQUEST;
122
+ }
123
+ else if (isPassed && status === supervision_1.BuildingInspectionStatus.OVERALL_REQUEST) {
124
+ // 3. 검측이 합격이면서 총괄 감리자 스탭 = 상태는 합격으로
125
+ taskChecklistStatus = supervision_1.BuildingInspectionStatus.PASS;
126
+ }
127
+ }
128
+ // 3. checklist 저장
129
+ const inspectionDateField = isConstructor ? 'constructionInspectionDate' : 'supervisorInspectionDate';
130
+ await checklistRepo.save(Object.assign(Object.assign({}, currChecklist), { [inspectionDateField]: new Date(), overallConstructorSignature: checklist.overallConstructorSignature, taskConstructorSignature: checklist.taskConstructorSignature, overallSupervisorySignature: checklist.overallSupervisorySignature, taskSupervisorySignature: checklist.taskSupervisorySignature, updater: user }));
131
+ // 4. checklistItem 저장
132
+ for (let item of checklistItem) {
133
+ const confirmStatusField = isConstructor ? 'constructionConfirmStatus' : 'supervisoryConfirmStatus';
134
+ await checklistItemRepo.update(item.id, {
135
+ [confirmStatusField]: item[confirmStatusField],
136
+ updater: user
137
+ });
138
+ }
139
+ // 5. taskChecklistBinding 저장
140
+ await taskChecklistBindingRepository.save(Object.assign(Object.assign({}, currTaskChecklistBinding), { status: taskChecklistStatus, updater: user }));
141
+ return true;
142
+ }
143
+ };
144
+ exports.TaskChecklistBindingMutation = TaskChecklistBindingMutation;
145
+ tslib_1.__decorate([
146
+ (0, type_graphql_1.Directive)('@transaction'),
147
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To create Task Checklist information' }),
148
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('patch')),
149
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
150
+ tslib_1.__metadata("design:type", Function),
151
+ tslib_1.__metadata("design:paramtypes", [task_checklist_binding_type_1.NewTaskChecklist, Object]),
152
+ tslib_1.__metadata("design:returntype", Promise)
153
+ ], TaskChecklistBindingMutation.prototype, "createTaskChecklist", null);
154
+ tslib_1.__decorate([
155
+ (0, type_graphql_1.Directive)('@transaction'),
156
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To update Task Checklist information' }),
157
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('taskChecklist')),
158
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
159
+ tslib_1.__metadata("design:type", Function),
160
+ tslib_1.__metadata("design:paramtypes", [task_checklist_binding_type_1.UpdateTaskChecklistSubmitType, Object]),
161
+ tslib_1.__metadata("design:returntype", Promise)
162
+ ], TaskChecklistBindingMutation.prototype, "updateTaskChecklist", null);
163
+ exports.TaskChecklistBindingMutation = TaskChecklistBindingMutation = tslib_1.__decorate([
164
+ (0, type_graphql_1.Resolver)(task_checklist_binding_1.TaskChecklistBinding)
165
+ ], TaskChecklistBindingMutation);
166
+ async function getRecentDocumentNoByTaskCode(tx) {
167
+ // 날짜 6자리 생성 YYMMDD
168
+ const date = new Date();
169
+ const year = date.getFullYear().toString().slice(-2);
170
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
171
+ const day = date.getDate().toString().padStart(2, '0');
172
+ const DocNum = `${year}${month}${day}`;
173
+ const latestChecklist = await tx
174
+ .getRepository(supervision_1.Checklist)
175
+ .createQueryBuilder('c')
176
+ .where('c.document_no LIKE :pattern', { pattern: `${DocNum}-%` })
177
+ .orderBy('c.created_at', 'DESC')
178
+ .getOne();
179
+ let documentNo = '000001';
180
+ if (latestChecklist) {
181
+ const lastNo = latestChecklist.documentNo.split('-')[2];
182
+ documentNo = (Number(lastNo) + 1).toString().padStart(6, '0');
183
+ }
184
+ return `${DocNum}-${documentNo}`;
185
+ }
186
+ //# sourceMappingURL=task-checklist-binding-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-checklist-binding-mutation.js","sourceRoot":"","sources":["../../../server/service/task-checklist-binding/task-checklist-binding-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { TaskChecklistBinding } from './task-checklist-binding'\nimport { ChecklistReferenceType, Checklist, ChecklistItem, BuildingInspectionStatus, ProjectType } from '@dssp/supervision'\nimport { NewTaskChecklist, UpdateTaskChecklistSubmitType } from './task-checklist-binding-type'\n\n@Resolver(TaskChecklistBinding)\nexport class TaskChecklistBindingMutation {\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To create Task Checklist information' })\n async createTaskChecklist(@Arg('patch') patch: NewTaskChecklist, @Ctx() context: ResolverContext): Promise<boolean> {\n const { user, tx } = context.state\n const { checklist, checklistItem, managerId } = patch\n const { projectId, taskCode } = checklist\n const checklistRepository = tx.getRepository(Checklist)\n const checklistItemRepository = tx.getRepository(ChecklistItem)\n const taskChecklistBindingRepository = tx.getRepository(TaskChecklistBinding)\n\n // 1. 벨리데이션\n if (!checklist.constructionType) throw new Error('공종 타입이 없습니다.')\n if (!checklist.constructionDetailType) throw new Error('상세 공종 타입이 없습니다.')\n if (!checklist.name) throw new Error('체크리스트 이름이 없습니다.')\n if (checklistItem.length === 0) throw new Error('체크리스트 아이템이 없습니다.')\n\n // 2. checklist 저장\n const documentNo = await getRecentDocumentNoByTaskCode(tx)\n const savedChecklist = await checklistRepository.save({\n ...checklist,\n documentNo,\n projectType: ProjectType.DSSP,\n checklistReferenceType: ChecklistReferenceType.TASK,\n creator: user,\n updater: user\n })\n\n // 3. checklistItem 저장\n const checklistItems = checklistItem.map((item, idx) => ({\n name: item.name,\n mainType: item.mainType,\n detailType: item.detailType,\n inspctionCriteria: item.inspctionCriteria,\n sequence: idx,\n checklist: savedChecklist,\n creator: user,\n updater: user\n }))\n await checklistItemRepository.save(checklistItems)\n\n // 4. taskChecklistBinding 저장\n await taskChecklistBindingRepository.save({\n project: { id: projectId },\n taskCode,\n checklist: savedChecklist,\n status: BuildingInspectionStatus.WAIT,\n manager: { id: managerId },\n creator: user,\n updater: user\n })\n\n return true\n }\n\n // 체크리스트 상태 변경 & 체크리스트 갱신\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To update Task Checklist information' })\n async updateTaskChecklist(\n @Arg('taskChecklist') taskChecklist: UpdateTaskChecklistSubmitType,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { user, tx } = context.state\n const { checklistId, checklist, checklistItem } = taskChecklist\n const checklistRepo = tx.getRepository(Checklist)\n const checklistItemRepo = tx.getRepository(ChecklistItem)\n const taskChecklistBindingRepository = tx.getRepository(TaskChecklistBinding)\n\n const currChecklist = await checklistRepo.findOneBy({ id: checklistId })\n const currTaskChecklistBinding = await taskChecklistBindingRepository.findOneBy({ checklist: { id: checklistId } })\n const status: any = currTaskChecklistBinding.status\n\n const isConstructor: boolean =\n status == BuildingInspectionStatus.WAIT ||\n status == BuildingInspectionStatus.OVERALL_WAIT ||\n status == BuildingInspectionStatus.FAIL\n let taskChecklistStatus = null\n\n // 1. 벨리데이션\n if (status == BuildingInspectionStatus.PASS) throw new Error('체크리스트 상태가 수정할 수 있는 상태가 아닙니다.')\n if (isConstructor) {\n // 시공자 타입별 밸리데이션\n if (checklistItem.length !== checklistItem.filter(v => v.constructionConfirmStatus).length) {\n throw new Error('아이템을 모두 체크해야 합니다.')\n }\n if (status == BuildingInspectionStatus.OVERALL_WAIT && !checklist.overallConstructorSignature) {\n throw new Error('총괄 시공책임자 사인이 없습니다.')\n }\n if (status == BuildingInspectionStatus.WAIT && !checklist.taskConstructorSignature) {\n throw new Error('공종별 시공관리자 사인이 없습니다.')\n }\n // 시공자 상태 데이터\n const isPassed = checklistItem.length === checklistItem.filter(v => v.constructionConfirmStatus === 'T').length\n if (!isPassed) {\n // 1. 검측이 불햡격 = 상태는 불합격으로, 시공자 싸인은 모두 초기화\n taskChecklistStatus = BuildingInspectionStatus.FAIL\n checklist.overallConstructorSignature = null\n checklist.taskConstructorSignature = null\n } else if (isPassed && (status === BuildingInspectionStatus.WAIT || status === BuildingInspectionStatus.FAIL)) {\n // 2. 검측이 합격이면서 공종 시공자 스탭 = 상태는 총괄 시공자 스탭으로\n taskChecklistStatus = BuildingInspectionStatus.OVERALL_WAIT\n } else if (isPassed && status === BuildingInspectionStatus.OVERALL_WAIT) {\n // 3. 검측이 합격이면서 총괄 시공자 스탭 = 상태는 공종 감리자 스탭으로, 감리자 싸인은 모두 초기화\n taskChecklistStatus = BuildingInspectionStatus.REQUEST\n checklist.overallSupervisorySignature = null\n checklist.taskSupervisorySignature = null\n }\n } else {\n // 감리자 타입별 밸리데이션\n if (checklistItem.length !== checklistItem.filter(v => v.supervisoryConfirmStatus).length) {\n throw new Error('아이템을 모두 체크해야 합니다.')\n }\n if (status == BuildingInspectionStatus.OVERALL_REQUEST && !checklist.overallSupervisorySignature) {\n throw new Error('총괄 감리책임자 사인이 없습니다.')\n }\n if (status == BuildingInspectionStatus.REQUEST && !checklist.taskSupervisorySignature) {\n throw new Error('공종별 감리 책임자 사인이 없습니다.')\n }\n // 감리자 상태 데이터\n const isPassed = checklistItem.length === checklistItem.filter(v => v.supervisoryConfirmStatus === 'T').length\n if (!isPassed) {\n // 1. 검측이 불햡격 = 상태는 불합격으로, 시공자 싸인은 모두 초기화\n taskChecklistStatus = BuildingInspectionStatus.FAIL\n checklist.overallConstructorSignature = null\n checklist.taskConstructorSignature = null\n } else if (isPassed && status === BuildingInspectionStatus.REQUEST) {\n // 2. 검측이 합격이면서 공종 감리자 스탭 = 상태는 총괄 감리자 스탭으로\n taskChecklistStatus = BuildingInspectionStatus.OVERALL_REQUEST\n } else if (isPassed && status === BuildingInspectionStatus.OVERALL_REQUEST) {\n // 3. 검측이 합격이면서 총괄 감리자 스탭 = 상태는 합격으로\n taskChecklistStatus = BuildingInspectionStatus.PASS\n }\n }\n\n // 3. checklist 저장\n const inspectionDateField = isConstructor ? 'constructionInspectionDate' : 'supervisorInspectionDate'\n await checklistRepo.save({\n ...currChecklist,\n [inspectionDateField]: new Date(),\n overallConstructorSignature: checklist.overallConstructorSignature,\n taskConstructorSignature: checklist.taskConstructorSignature,\n overallSupervisorySignature: checklist.overallSupervisorySignature,\n taskSupervisorySignature: checklist.taskSupervisorySignature,\n updater: user\n })\n\n // 4. checklistItem 저장\n for (let item of checklistItem) {\n const confirmStatusField = isConstructor ? 'constructionConfirmStatus' : 'supervisoryConfirmStatus'\n await checklistItemRepo.update(item.id, {\n [confirmStatusField]: item[confirmStatusField],\n updater: user\n })\n }\n\n // 5. taskChecklistBinding 저장\n await taskChecklistBindingRepository.save({\n ...currTaskChecklistBinding,\n status: taskChecklistStatus,\n updater: user\n })\n\n return true\n }\n}\n\nasync function getRecentDocumentNoByTaskCode(tx): Promise<string> {\n // 날짜 6자리 생성 YYMMDD\n const date = new Date()\n const year = date.getFullYear().toString().slice(-2)\n const month = (date.getMonth() + 1).toString().padStart(2, '0')\n const day = date.getDate().toString().padStart(2, '0')\n const DocNum = `${year}${month}${day}`\n\n const latestChecklist = await tx\n .getRepository(Checklist)\n .createQueryBuilder('c')\n .where('c.document_no LIKE :pattern', { pattern: `${DocNum}-%` })\n .orderBy('c.created_at', 'DESC')\n .getOne()\n\n let documentNo = '000001'\n if (latestChecklist) {\n const lastNo = latestChecklist.documentNo.split('-')[2]\n documentNo = (Number(lastNo) + 1).toString().padStart(6, '0')\n }\n\n return `${DocNum}-${documentNo}`\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { TaskChecklistBinding } from './task-checklist-binding';
2
+ import { Checklist } from '@dssp/supervision';
3
+ import { ManagerOutput } from '../manager/manager-type';
4
+ export declare class TaskChecklistBindingQuery {
5
+ taskChecklistBinding(id: string, context: ResolverContext): Promise<TaskChecklistBinding>;
6
+ checklist(taskChecklistBinding: TaskChecklistBinding): Promise<Checklist>;
7
+ manager(taskChecklistBinding: TaskChecklistBinding): Promise<ManagerOutput>;
8
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskChecklistBindingQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const task_checklist_binding_1 = require("./task-checklist-binding");
7
+ const supervision_1 = require("@dssp/supervision");
8
+ const shell_1 = require("@things-factory/shell");
9
+ const manager_type_1 = require("../manager/manager-type");
10
+ const auth_base_1 = require("@things-factory/auth-base");
11
+ let TaskChecklistBindingQuery = class TaskChecklistBindingQuery {
12
+ async taskChecklistBinding(id, context) {
13
+ return await (0, shell_1.getRepository)(task_checklist_binding_1.TaskChecklistBinding).findOne({
14
+ where: { id },
15
+ relations: ['checklist', 'checklist.checklistItems']
16
+ });
17
+ }
18
+ async checklist(taskChecklistBinding) {
19
+ return await (0, shell_1.getRepository)(supervision_1.Checklist).findOneBy({ id: taskChecklistBinding.checklistId });
20
+ }
21
+ async manager(taskChecklistBinding) {
22
+ const queryBuilder = (0, shell_1.getRepository)(auth_base_1.User)
23
+ .createQueryBuilder('u')
24
+ .select('m.id', 'id')
25
+ .addSelect('m.phone', 'phone')
26
+ .addSelect('m.position', 'position')
27
+ .addSelect('u.id', 'userId')
28
+ .addSelect('u.name', 'name')
29
+ .addSelect('u.updated_at', 'updatedAt')
30
+ .leftJoin('managers', 'm', 'u.id = m.user_id')
31
+ .where('u.id = :userId', { userId: taskChecklistBinding.managerId });
32
+ return await queryBuilder.getRawOne();
33
+ }
34
+ };
35
+ exports.TaskChecklistBindingQuery = TaskChecklistBindingQuery;
36
+ tslib_1.__decorate([
37
+ (0, type_graphql_1.Query)(returns => task_checklist_binding_1.TaskChecklistBinding, { nullable: true, description: 'Fetch a single TaskChecklistBinding by its ID' }),
38
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
39
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
40
+ tslib_1.__metadata("design:type", Function),
41
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
42
+ tslib_1.__metadata("design:returntype", Promise)
43
+ ], TaskChecklistBindingQuery.prototype, "taskChecklistBinding", null);
44
+ tslib_1.__decorate([
45
+ (0, type_graphql_1.FieldResolver)(type => supervision_1.Checklist, { description: 'Fetch the checklist' }),
46
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
47
+ tslib_1.__metadata("design:type", Function),
48
+ tslib_1.__metadata("design:paramtypes", [task_checklist_binding_1.TaskChecklistBinding]),
49
+ tslib_1.__metadata("design:returntype", Promise)
50
+ ], TaskChecklistBindingQuery.prototype, "checklist", null);
51
+ tslib_1.__decorate([
52
+ (0, type_graphql_1.FieldResolver)(type => manager_type_1.ManagerOutput),
53
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
54
+ tslib_1.__metadata("design:type", Function),
55
+ tslib_1.__metadata("design:paramtypes", [task_checklist_binding_1.TaskChecklistBinding]),
56
+ tslib_1.__metadata("design:returntype", Promise)
57
+ ], TaskChecklistBindingQuery.prototype, "manager", null);
58
+ exports.TaskChecklistBindingQuery = TaskChecklistBindingQuery = tslib_1.__decorate([
59
+ (0, type_graphql_1.Resolver)(task_checklist_binding_1.TaskChecklistBinding)
60
+ ], TaskChecklistBindingQuery);
61
+ //# sourceMappingURL=task-checklist-binding-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-checklist-binding-query.js","sourceRoot":"","sources":["../../../server/service/task-checklist-binding/task-checklist-binding-query.ts"],"names":[],"mappings":";;;;AAAA,+CAA6E;AAC7E,qEAA+D;AAC/D,mDAA6C;AAC7C,iDAAqD;AACrD,0DAAuD;AACvD,yDAAgD;AAGzC,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IAE9B,AAAN,KAAK,CAAC,oBAAoB,CAAY,EAAU,EAAS,OAAwB;QAC/E,OAAO,MAAM,IAAA,qBAAa,EAAC,6CAAoB,CAAC,CAAC,OAAO,CAAC;YACvD,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,SAAS,EAAE,CAAC,WAAW,EAAE,0BAA0B,CAAC;SACrD,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS,CAAS,oBAA0C;QAChE,OAAO,MAAM,IAAA,qBAAa,EAAC,uBAAS,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,oBAAoB,CAAC,WAAW,EAAE,CAAC,CAAA;IAC3F,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,oBAA0C;QAC9D,MAAM,YAAY,GAAG,IAAA,qBAAa,EAAC,gBAAI,CAAC;aACrC,kBAAkB,CAAC,GAAG,CAAC;aACvB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;aACpB,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;aAC7B,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC;aACnC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;aAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC3B,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC;aACtC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,kBAAkB,CAAC;aAC7C,KAAK,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAA;QAEtE,OAAO,MAAM,YAAY,CAAC,SAAS,EAAE,CAAA;IACvC,CAAC;CACF,CAAA;AA7BY,8DAAyB;AAE9B;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,6CAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,+CAA+C,EAAE,CAAC;IAC9F,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;qEAKvD;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,uBAAS,EAAE,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACxD,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAuB,6CAAoB;;0DAEjE;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,4BAAa,CAAC;IACtB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAuB,6CAAoB;;wDAa/D;oCA5BU,yBAAyB;IADrC,IAAA,uBAAQ,EAAC,6CAAoB,CAAC;GAClB,yBAAyB,CA6BrC","sourcesContent":["import { FieldResolver, Query, Resolver, Root, Arg, Ctx } from 'type-graphql'\nimport { TaskChecklistBinding } from './task-checklist-binding'\nimport { Checklist } from '@dssp/supervision'\nimport { getRepository } from '@things-factory/shell'\nimport { ManagerOutput } from '../manager/manager-type'\nimport { User } from '@things-factory/auth-base'\n\n@Resolver(TaskChecklistBinding)\nexport class TaskChecklistBindingQuery {\n @Query(returns => TaskChecklistBinding!, { nullable: true, description: 'Fetch a single TaskChecklistBinding by its ID' })\n async taskChecklistBinding(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<TaskChecklistBinding> {\n return await getRepository(TaskChecklistBinding).findOne({\n where: { id },\n relations: ['checklist', 'checklist.checklistItems']\n })\n }\n\n @FieldResolver(type => Checklist, { description: 'Fetch the checklist' })\n async checklist(@Root() taskChecklistBinding: TaskChecklistBinding): Promise<Checklist> {\n return await getRepository(Checklist).findOneBy({ id: taskChecklistBinding.checklistId })\n }\n\n @FieldResolver(type => ManagerOutput)\n async manager(@Root() taskChecklistBinding: TaskChecklistBinding): Promise<ManagerOutput> {\n const queryBuilder = getRepository(User)\n .createQueryBuilder('u')\n .select('m.id', 'id')\n .addSelect('m.phone', 'phone')\n .addSelect('m.position', 'position')\n .addSelect('u.id', 'userId')\n .addSelect('u.name', 'name')\n .addSelect('u.updated_at', 'updatedAt')\n .leftJoin('managers', 'm', 'u.id = m.user_id')\n .where('u.id = :userId', { userId: taskChecklistBinding.managerId })\n\n return await queryBuilder.getRawOne()\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { ChecklistItemInputType, ChecklistInputType, ChecklistSubmitInputType, ChecklistItemSubmitInputType } from '@dssp/supervision';
2
+ export declare class TaskChecklistInputType extends ChecklistInputType {
3
+ taskCode?: string;
4
+ projectId?: string;
5
+ }
6
+ export declare class NewTaskChecklist {
7
+ checklist: TaskChecklistInputType;
8
+ checklistItem: ChecklistItemInputType[];
9
+ managerId?: string;
10
+ }
11
+ export declare class UpdateTaskChecklistSubmitType {
12
+ checklistId: string;
13
+ checklist: ChecklistSubmitInputType;
14
+ checklistItem: ChecklistItemSubmitInputType[];
15
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateTaskChecklistSubmitType = exports.NewTaskChecklist = exports.TaskChecklistInputType = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const supervision_1 = require("@dssp/supervision");
7
+ let TaskChecklistInputType = class TaskChecklistInputType extends supervision_1.ChecklistInputType {
8
+ };
9
+ exports.TaskChecklistInputType = TaskChecklistInputType;
10
+ tslib_1.__decorate([
11
+ (0, type_graphql_1.Field)({ nullable: true }),
12
+ tslib_1.__metadata("design:type", String)
13
+ ], TaskChecklistInputType.prototype, "taskCode", void 0);
14
+ tslib_1.__decorate([
15
+ (0, type_graphql_1.Field)({ nullable: true }),
16
+ tslib_1.__metadata("design:type", String)
17
+ ], TaskChecklistInputType.prototype, "projectId", void 0);
18
+ exports.TaskChecklistInputType = TaskChecklistInputType = tslib_1.__decorate([
19
+ (0, type_graphql_1.InputType)()
20
+ ], TaskChecklistInputType);
21
+ let NewTaskChecklist = class NewTaskChecklist {
22
+ };
23
+ exports.NewTaskChecklist = NewTaskChecklist;
24
+ tslib_1.__decorate([
25
+ (0, type_graphql_1.Field)(type => TaskChecklistInputType, { nullable: false }),
26
+ tslib_1.__metadata("design:type", TaskChecklistInputType)
27
+ ], NewTaskChecklist.prototype, "checklist", void 0);
28
+ tslib_1.__decorate([
29
+ (0, type_graphql_1.Field)(type => [supervision_1.ChecklistItemInputType], { nullable: false }),
30
+ tslib_1.__metadata("design:type", Array)
31
+ ], NewTaskChecklist.prototype, "checklistItem", void 0);
32
+ tslib_1.__decorate([
33
+ (0, type_graphql_1.Field)({ nullable: true }),
34
+ tslib_1.__metadata("design:type", String)
35
+ ], NewTaskChecklist.prototype, "managerId", void 0);
36
+ exports.NewTaskChecklist = NewTaskChecklist = tslib_1.__decorate([
37
+ (0, type_graphql_1.InputType)()
38
+ ], NewTaskChecklist);
39
+ let UpdateTaskChecklistSubmitType = class UpdateTaskChecklistSubmitType {
40
+ };
41
+ exports.UpdateTaskChecklistSubmitType = UpdateTaskChecklistSubmitType;
42
+ tslib_1.__decorate([
43
+ (0, type_graphql_1.Field)({ nullable: false }),
44
+ tslib_1.__metadata("design:type", String)
45
+ ], UpdateTaskChecklistSubmitType.prototype, "checklistId", void 0);
46
+ tslib_1.__decorate([
47
+ (0, type_graphql_1.Field)(type => supervision_1.ChecklistSubmitInputType, { nullable: false }),
48
+ tslib_1.__metadata("design:type", supervision_1.ChecklistSubmitInputType)
49
+ ], UpdateTaskChecklistSubmitType.prototype, "checklist", void 0);
50
+ tslib_1.__decorate([
51
+ (0, type_graphql_1.Field)(type => [supervision_1.ChecklistItemSubmitInputType], { nullable: false }),
52
+ tslib_1.__metadata("design:type", Array)
53
+ ], UpdateTaskChecklistSubmitType.prototype, "checklistItem", void 0);
54
+ exports.UpdateTaskChecklistSubmitType = UpdateTaskChecklistSubmitType = tslib_1.__decorate([
55
+ (0, type_graphql_1.InputType)()
56
+ ], UpdateTaskChecklistSubmitType);
57
+ //# sourceMappingURL=task-checklist-binding-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-checklist-binding-type.js","sourceRoot":"","sources":["../../../server/service/task-checklist-binding/task-checklist-binding-type.ts"],"names":[],"mappings":";;;;AAAA,+CAA+C;AAC/C,mDAK0B;AAGnB,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,gCAAkB;CAM7D,CAAA;AANY,wDAAsB;AAEjC;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wDACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACR;iCALP,sBAAsB;IADlC,IAAA,wBAAS,GAAE;GACC,sBAAsB,CAMlC;AAGM,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAS5B,CAAA;AATY,4CAAgB;AAE3B;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;sCAChD,sBAAsB;mDAAA;AAGjC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,oCAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;uDACtB;AAGvC;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACR;2BARP,gBAAgB;IAD5B,IAAA,wBAAS,GAAE;GACC,gBAAgB,CAS5B;AAGM,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;CASzC,CAAA;AATY,sEAA6B;AAExC;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;kEACR;AAGnB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,sCAAwB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;sCAClD,sCAAwB;gEAAA;AAGnC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,0CAA4B,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;oEACtB;wCARlC,6BAA6B;IADzC,IAAA,wBAAS,GAAE;GACC,6BAA6B,CASzC","sourcesContent":["import { Field, InputType } from 'type-graphql'\nimport {\n ChecklistItemInputType,\n ChecklistInputType,\n ChecklistSubmitInputType,\n ChecklistItemSubmitInputType\n} from '@dssp/supervision'\n\n@InputType()\nexport class TaskChecklistInputType extends ChecklistInputType {\n @Field({ nullable: true })\n taskCode?: string\n\n @Field({ nullable: true })\n projectId?: string\n}\n\n@InputType()\nexport class NewTaskChecklist {\n @Field(type => TaskChecklistInputType, { nullable: false })\n checklist: TaskChecklistInputType\n\n @Field(type => [ChecklistItemInputType], { nullable: false })\n checklistItem: ChecklistItemInputType[]\n\n @Field({ nullable: true })\n managerId?: string\n}\n\n@InputType()\nexport class UpdateTaskChecklistSubmitType {\n @Field({ nullable: false })\n checklistId: string\n\n @Field(type => ChecklistSubmitInputType, { nullable: false })\n checklist: ChecklistSubmitInputType\n\n @Field(type => [ChecklistItemSubmitInputType], { nullable: false })\n checklistItem: ChecklistItemSubmitInputType[]\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { User } from '@things-factory/auth-base';
2
+ import { Project } from '../project/project';
3
+ import { Task } from '../task/task';
4
+ import { BuildingInspectionStatus, Checklist } from '@dssp/supervision';
5
+ export declare class TaskChecklistBinding {
6
+ readonly id: string;
7
+ project?: Project;
8
+ projectId: string;
9
+ taskCode: string;
10
+ task?: Task;
11
+ checklist?: Checklist;
12
+ checklistId: string;
13
+ status?: BuildingInspectionStatus;
14
+ manager?: User;
15
+ managerId?: string;
16
+ createdAt?: Date;
17
+ creator?: User;
18
+ creatorId?: string;
19
+ updatedAt?: Date;
20
+ updater?: User;
21
+ updaterId?: string;
22
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskChecklistBinding = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const typeorm_1 = require("typeorm");
6
+ const type_graphql_1 = require("type-graphql");
7
+ const auth_base_1 = require("@things-factory/auth-base");
8
+ const project_1 = require("../project/project");
9
+ const task_1 = require("../task/task");
10
+ const supervision_1 = require("@dssp/supervision");
11
+ const manager_type_1 = require("../manager/manager-type");
12
+ let TaskChecklistBinding = class TaskChecklistBinding {
13
+ };
14
+ exports.TaskChecklistBinding = TaskChecklistBinding;
15
+ tslib_1.__decorate([
16
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
17
+ (0, type_graphql_1.Field)(type => type_graphql_1.ID),
18
+ tslib_1.__metadata("design:type", String)
19
+ ], TaskChecklistBinding.prototype, "id", void 0);
20
+ tslib_1.__decorate([
21
+ (0, typeorm_1.ManyToOne)(() => project_1.Project),
22
+ (0, typeorm_1.JoinColumn)(),
23
+ (0, type_graphql_1.Field)(() => project_1.Project, { nullable: true }),
24
+ tslib_1.__metadata("design:type", project_1.Project)
25
+ ], TaskChecklistBinding.prototype, "project", void 0);
26
+ tslib_1.__decorate([
27
+ (0, typeorm_1.RelationId)((taskChecklistBinding) => taskChecklistBinding.project),
28
+ tslib_1.__metadata("design:type", String)
29
+ ], TaskChecklistBinding.prototype, "projectId", void 0);
30
+ tslib_1.__decorate([
31
+ (0, typeorm_1.Column)({ nullable: false, comment: '작업 코드' }),
32
+ (0, type_graphql_1.Field)(),
33
+ tslib_1.__metadata("design:type", String)
34
+ ], TaskChecklistBinding.prototype, "taskCode", void 0);
35
+ tslib_1.__decorate([
36
+ (0, typeorm_1.OneToOne)(() => task_1.Task, task => task.taskChecklistBinding, { nullable: true }),
37
+ (0, type_graphql_1.Field)(type => task_1.Task, { nullable: true }),
38
+ tslib_1.__metadata("design:type", task_1.Task)
39
+ ], TaskChecklistBinding.prototype, "task", void 0);
40
+ tslib_1.__decorate([
41
+ (0, typeorm_1.OneToOne)(() => supervision_1.Checklist),
42
+ (0, typeorm_1.JoinColumn)(),
43
+ (0, type_graphql_1.Field)(() => supervision_1.Checklist, { nullable: true }),
44
+ tslib_1.__metadata("design:type", supervision_1.Checklist)
45
+ ], TaskChecklistBinding.prototype, "checklist", void 0);
46
+ tslib_1.__decorate([
47
+ (0, typeorm_1.RelationId)((taskChecklistBinding) => taskChecklistBinding.checklist),
48
+ tslib_1.__metadata("design:type", String)
49
+ ], TaskChecklistBinding.prototype, "checklistId", void 0);
50
+ tslib_1.__decorate([
51
+ (0, typeorm_1.Column)({
52
+ nullable: false,
53
+ comment: '상태(WAIT: 검측 대기, OVERALL_WAIT: 총괄자 검측 대기, REQUEST: 검측 요청, OVERALL_REQUEST: 총괄자 검측 요청, PASS: 합격, FAIL: 불합격)',
54
+ default: supervision_1.BuildingInspectionStatus.WAIT
55
+ }),
56
+ (0, type_graphql_1.Field)({ nullable: true }),
57
+ tslib_1.__metadata("design:type", String)
58
+ ], TaskChecklistBinding.prototype, "status", void 0);
59
+ tslib_1.__decorate([
60
+ (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
61
+ (0, type_graphql_1.Field)(type => manager_type_1.ManagerOutput, { nullable: true }),
62
+ tslib_1.__metadata("design:type", auth_base_1.User)
63
+ ], TaskChecklistBinding.prototype, "manager", void 0);
64
+ tslib_1.__decorate([
65
+ (0, typeorm_1.RelationId)((taskChecklistBinding) => taskChecklistBinding.manager),
66
+ tslib_1.__metadata("design:type", String)
67
+ ], TaskChecklistBinding.prototype, "managerId", void 0);
68
+ tslib_1.__decorate([
69
+ (0, typeorm_1.CreateDateColumn)(),
70
+ (0, type_graphql_1.Field)({ nullable: true }),
71
+ tslib_1.__metadata("design:type", Date)
72
+ ], TaskChecklistBinding.prototype, "createdAt", void 0);
73
+ tslib_1.__decorate([
74
+ (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
75
+ (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
76
+ tslib_1.__metadata("design:type", auth_base_1.User)
77
+ ], TaskChecklistBinding.prototype, "creator", void 0);
78
+ tslib_1.__decorate([
79
+ (0, typeorm_1.RelationId)((binding) => binding.creator),
80
+ tslib_1.__metadata("design:type", String)
81
+ ], TaskChecklistBinding.prototype, "creatorId", void 0);
82
+ tslib_1.__decorate([
83
+ (0, typeorm_1.UpdateDateColumn)(),
84
+ (0, type_graphql_1.Field)({ nullable: true }),
85
+ tslib_1.__metadata("design:type", Date)
86
+ ], TaskChecklistBinding.prototype, "updatedAt", void 0);
87
+ tslib_1.__decorate([
88
+ (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
89
+ (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
90
+ tslib_1.__metadata("design:type", auth_base_1.User)
91
+ ], TaskChecklistBinding.prototype, "updater", void 0);
92
+ tslib_1.__decorate([
93
+ (0, typeorm_1.RelationId)((binding) => binding.updater),
94
+ tslib_1.__metadata("design:type", String)
95
+ ], TaskChecklistBinding.prototype, "updaterId", void 0);
96
+ exports.TaskChecklistBinding = TaskChecklistBinding = tslib_1.__decorate([
97
+ (0, typeorm_1.Entity)(),
98
+ (0, typeorm_1.Index)('ix_task_checklist_binding_task', (binding) => [binding.project, binding.taskCode], {
99
+ unique: true
100
+ }),
101
+ (0, typeorm_1.Index)('ix_task_checklist_binding_checklist', (binding) => [binding.checklist])
102
+ // 1:1 관계 - Task는 사라지므로 프로젝트 ID + Task Code로 조인 하며 상태를 가지고 있는 테이블
103
+ ,
104
+ (0, type_graphql_1.ObjectType)({ description: 'Task와 Checklist 간의 바인딩 정보' })
105
+ ], TaskChecklistBinding);
106
+ //# sourceMappingURL=task-checklist-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-checklist-binding.js","sourceRoot":"","sources":["../../../server/service/task-checklist-binding/task-checklist-binding.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CreateDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n OneToOne,\n PrimaryGeneratedColumn,\n JoinColumn,\n UpdateDateColumn\n} from 'typeorm'\nimport { ObjectType, Field, ID } from 'type-graphql'\nimport { User } from '@things-factory/auth-base'\nimport { Project } from '../project/project'\nimport { Task } from '../task/task'\nimport { BuildingInspectionStatus, Checklist } from '@dssp/supervision'\nimport { ManagerOutput } from '../manager/manager-type'\n\n@Entity()\n@Index('ix_task_checklist_binding_task', (binding: TaskChecklistBinding) => [binding.project, binding.taskCode], {\n unique: true\n})\n@Index('ix_task_checklist_binding_checklist', (binding: TaskChecklistBinding) => [binding.checklist])\n// 1:1 관계 - Task는 사라지므로 프로젝트 ID + Task Code로 조인 하며 상태를 가지고 있는 테이블\n@ObjectType({ description: 'Task와 Checklist 간의 바인딩 정보' })\nexport class TaskChecklistBinding {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n // Task 정보는 projectId로 + taskCode로 조회\n @ManyToOne(() => Project)\n @JoinColumn()\n @Field(() => Project, { nullable: true })\n project?: Project\n\n @RelationId((taskChecklistBinding: TaskChecklistBinding) => taskChecklistBinding.project)\n projectId: string\n\n // Task 관계 정보 (taskCode + projectId가 Task의 복합키 역할)\n @Column({ nullable: false, comment: '작업 코드' })\n @Field()\n taskCode: string\n\n @OneToOne(() => Task, task => task.taskChecklistBinding, { nullable: true })\n @Field(type => Task, { nullable: true })\n task?: Task\n\n @OneToOne(() => Checklist)\n @JoinColumn()\n @Field(() => Checklist, { nullable: true })\n checklist?: Checklist\n\n @RelationId((taskChecklistBinding: TaskChecklistBinding) => taskChecklistBinding.checklist)\n checklistId: string\n\n // 검측 상태와 동일한 값이라서 재활용\n @Column({\n nullable: false,\n comment:\n '상태(WAIT: 검측 대기, OVERALL_WAIT: 총괄자 검측 대기, REQUEST: 검측 요청, OVERALL_REQUEST: 총괄자 검측 요청, PASS: 합격, FAIL: 불합격)',\n default: BuildingInspectionStatus.WAIT\n })\n @Field({ nullable: true })\n status?: BuildingInspectionStatus\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => ManagerOutput, { nullable: true })\n manager?: User\n\n @RelationId((taskChecklistBinding: TaskChecklistBinding) => taskChecklistBinding.manager)\n managerId?: string\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((binding: TaskChecklistBinding) => binding.creator)\n creatorId?: string\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((binding: TaskChecklistBinding) => binding.updater)\n updaterId?: string\n}\n"]}