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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist-client/graphql/building-inspection.d.ts +1 -0
  2. package/dist-client/graphql/building-inspection.js +100 -0
  3. package/dist-client/graphql/building-inspection.js.map +1 -0
  4. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.d.ts +22 -0
  5. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js +169 -0
  6. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js.map +1 -0
  7. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.d.ts +57 -0
  8. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js +825 -0
  9. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js.map +1 -0
  10. package/dist-client/pages/building-inspection/building-inspection-detail-camera.d.ts +8 -6
  11. package/dist-client/pages/building-inspection/building-inspection-detail-camera.js +115 -65
  12. package/dist-client/pages/building-inspection/building-inspection-detail-camera.js.map +1 -1
  13. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +9 -0
  14. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +130 -72
  15. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
  16. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +1 -0
  17. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js +77 -14
  18. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js.map +1 -1
  19. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +18 -2
  20. package/dist-client/pages/building-inspection/building-inspection-list.js +360 -28
  21. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  22. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.d.ts +3 -0
  23. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js +104 -17
  24. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js.map +1 -1
  25. package/dist-client/pages/building-inspection/component/daily-worklog-popup.d.ts +27 -0
  26. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js +542 -0
  27. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js.map +1 -0
  28. package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +15 -0
  29. package/dist-client/pages/building-inspection/component/image-preview-popup.js +351 -0
  30. package/dist-client/pages/building-inspection/component/image-preview-popup.js.map +1 -0
  31. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +20 -0
  32. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +432 -0
  33. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +1 -0
  34. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +30 -0
  35. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +479 -0
  36. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +1 -0
  37. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +27 -0
  38. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js +416 -0
  39. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js.map +1 -0
  40. package/dist-client/pages/building-inspection/component/inspection-event-provider.d.ts +2 -1
  41. package/dist-client/pages/building-inspection/component/inspection-event-provider.js +39 -17
  42. package/dist-client/pages/building-inspection/component/inspection-event-provider.js.map +1 -1
  43. package/dist-client/pages/building-inspection/inspection-create-popup.js +22 -9
  44. package/dist-client/pages/building-inspection/inspection-create-popup.js.map +1 -1
  45. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +20 -0
  46. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +433 -57
  47. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +1 -1
  48. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +131 -17
  49. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +1 -1
  50. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.d.ts +19 -0
  51. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js +205 -0
  52. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js.map +1 -0
  53. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.d.ts +15 -0
  54. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js +430 -0
  55. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js.map +1 -0
  56. package/dist-client/pages/checklist/attachment-list-popup.d.ts +1 -0
  57. package/dist-client/pages/checklist/attachment-list-popup.js +250 -67
  58. package/dist-client/pages/checklist/attachment-list-popup.js.map +1 -1
  59. package/dist-client/pages/checklist/checklist-view.d.ts +5 -0
  60. package/dist-client/pages/checklist/checklist-view.js +99 -29
  61. package/dist-client/pages/checklist/checklist-view.js.map +1 -1
  62. package/dist-client/pages/checklist/comment-list-popup.js +14 -3
  63. package/dist-client/pages/checklist/comment-list-popup.js.map +1 -1
  64. package/dist-client/pages/checklist/file-preview-popup.js +0 -1
  65. package/dist-client/pages/checklist/file-preview-popup.js.map +1 -1
  66. package/dist-client/pages/checklist/inspection-info-popup.d.ts +50 -0
  67. package/dist-client/pages/checklist/inspection-info-popup.js +684 -0
  68. package/dist-client/pages/checklist/inspection-info-popup.js.map +1 -0
  69. package/dist-client/pages/checklist/inspection-tab-popup.d.ts +18 -0
  70. package/dist-client/pages/checklist/inspection-tab-popup.js +196 -0
  71. package/dist-client/pages/checklist/inspection-tab-popup.js.map +1 -0
  72. package/dist-client/pages/checklist-template/checklist-template-item.js +14 -3
  73. package/dist-client/pages/checklist-template/checklist-template-item.js.map +1 -1
  74. package/dist-client/pages/checklist-template/checklist-template-list.js +1 -1
  75. package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -1
  76. package/dist-client/route.d.ts +1 -1
  77. package/dist-client/route.js +6 -0
  78. package/dist-client/route.js.map +1 -1
  79. package/dist-client/tsconfig.tsbuildinfo +1 -1
  80. package/dist-server/service/building-inspection/building-inspection-mutation.d.ts +3 -3
  81. package/dist-server/service/building-inspection/building-inspection-mutation.js +128 -32
  82. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
  83. package/dist-server/service/building-inspection/building-inspection-query.d.ts +3 -5
  84. package/dist-server/service/building-inspection/building-inspection-query.js +16 -29
  85. package/dist-server/service/building-inspection/building-inspection-query.js.map +1 -1
  86. package/dist-server/service/building-inspection/building-inspection-type.d.ts +23 -7
  87. package/dist-server/service/building-inspection/building-inspection-type.js +80 -13
  88. package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
  89. package/dist-server/service/building-inspection/building-inspection.d.ts +4 -0
  90. package/dist-server/service/building-inspection/building-inspection.js +17 -2
  91. package/dist-server/service/building-inspection/building-inspection.js.map +1 -1
  92. package/dist-server/service/building-inspection/index.d.ts +3 -4
  93. package/dist-server/service/building-inspection/index.js +10 -3
  94. package/dist-server/service/building-inspection/index.js.map +1 -1
  95. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.d.ts +6 -0
  96. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +56 -0
  97. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +1 -0
  98. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.d.ts +16 -0
  99. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js +171 -0
  100. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js.map +1 -0
  101. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.d.ts +23 -0
  102. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js +90 -0
  103. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js.map +1 -0
  104. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.d.ts +33 -0
  105. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js +132 -0
  106. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js.map +1 -0
  107. package/dist-server/service/building-inspection-daily-worklog/index.d.ts +5 -0
  108. package/dist-server/service/building-inspection-daily-worklog/index.js +9 -0
  109. package/dist-server/service/building-inspection-daily-worklog/index.js.map +1 -0
  110. package/dist-server/service/building-inspection-history/building-inspection-history-query.d.ts +16 -0
  111. package/dist-server/service/building-inspection-history/building-inspection-history-query.js +120 -0
  112. package/dist-server/service/building-inspection-history/building-inspection-history-query.js.map +1 -0
  113. package/dist-server/service/building-inspection-history/building-inspection-history-type.d.ts +5 -0
  114. package/dist-server/service/building-inspection-history/building-inspection-history-type.js +21 -0
  115. package/dist-server/service/building-inspection-history/building-inspection-history-type.js.map +1 -0
  116. package/dist-server/service/building-inspection-history/building-inspection-history.d.ts +34 -0
  117. package/dist-server/service/building-inspection-history/building-inspection-history.js +157 -0
  118. package/dist-server/service/building-inspection-history/building-inspection-history.js.map +1 -0
  119. package/dist-server/service/building-inspection-history/event-subscriber.d.ts +7 -0
  120. package/dist-server/service/building-inspection-history/event-subscriber.js +21 -0
  121. package/dist-server/service/building-inspection-history/event-subscriber.js.map +1 -0
  122. package/dist-server/service/building-inspection-history/index.d.ts +6 -0
  123. package/dist-server/service/building-inspection-history/index.js +10 -0
  124. package/dist-server/service/building-inspection-history/index.js.map +1 -0
  125. package/dist-server/service/checklist/checklist-mutation.d.ts +0 -5
  126. package/dist-server/service/checklist/checklist-mutation.js +1 -67
  127. package/dist-server/service/checklist/checklist-mutation.js.map +1 -1
  128. package/dist-server/service/checklist/checklist-query.d.ts +7 -0
  129. package/dist-server/service/checklist/checklist-query.js +83 -0
  130. package/dist-server/service/checklist/checklist-query.js.map +1 -1
  131. package/dist-server/service/checklist/checklist-type.d.ts +0 -13
  132. package/dist-server/service/checklist/checklist-type.js +1 -49
  133. package/dist-server/service/checklist/checklist-type.js.map +1 -1
  134. package/dist-server/service/checklist/checklist.d.ts +28 -3
  135. package/dist-server/service/checklist/checklist.js +89 -15
  136. package/dist-server/service/checklist/checklist.js.map +1 -1
  137. package/dist-server/service/checklist/event-subscriber.d.ts +7 -0
  138. package/dist-server/service/checklist/event-subscriber.js +21 -0
  139. package/dist-server/service/checklist/event-subscriber.js.map +1 -0
  140. package/dist-server/service/checklist/index.d.ts +1 -2
  141. package/dist-server/service/checklist/index.js +1 -2
  142. package/dist-server/service/checklist/index.js.map +1 -1
  143. package/dist-server/service/checklist-history/checklist-history-query.d.ts +11 -0
  144. package/dist-server/service/checklist-history/checklist-history-query.js +77 -0
  145. package/dist-server/service/checklist-history/checklist-history-query.js.map +1 -0
  146. package/dist-server/service/checklist-history/checklist-history-type.d.ts +5 -0
  147. package/dist-server/service/checklist-history/checklist-history-type.js +21 -0
  148. package/dist-server/service/checklist-history/checklist-history-type.js.map +1 -0
  149. package/dist-server/service/{checklist → checklist-history}/checklist-history.d.ts +19 -1
  150. package/dist-server/service/{checklist → checklist-history}/checklist-history.js +97 -14
  151. package/dist-server/service/checklist-history/checklist-history.js.map +1 -0
  152. package/dist-server/service/checklist-history/event-subscriber.d.ts +7 -0
  153. package/dist-server/service/checklist-history/event-subscriber.js +21 -0
  154. package/dist-server/service/checklist-history/event-subscriber.js.map +1 -0
  155. package/dist-server/service/checklist-history/index.d.ts +6 -0
  156. package/dist-server/service/checklist-history/index.js +10 -0
  157. package/dist-server/service/checklist-history/index.js.map +1 -0
  158. package/dist-server/service/checklist-item/checklist-item-query.d.ts +1 -1
  159. package/dist-server/service/checklist-item/checklist-item-query.js +5 -3
  160. package/dist-server/service/checklist-item/checklist-item-query.js.map +1 -1
  161. package/dist-server/service/checklist-item/index.d.ts +0 -1
  162. package/dist-server/service/checklist-item/index.js +1 -2
  163. package/dist-server/service/checklist-item/index.js.map +1 -1
  164. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.d.ts +1 -0
  165. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js +33 -6
  166. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js.map +1 -1
  167. package/dist-server/service/checklist-item-history/checklist-item-history-query.d.ts +16 -0
  168. package/dist-server/service/checklist-item-history/checklist-item-history-query.js +123 -0
  169. package/dist-server/service/checklist-item-history/checklist-item-history-query.js.map +1 -0
  170. package/dist-server/service/checklist-item-history/checklist-item-history-type.d.ts +5 -0
  171. package/dist-server/service/checklist-item-history/checklist-item-history-type.js +21 -0
  172. package/dist-server/service/checklist-item-history/checklist-item-history-type.js.map +1 -0
  173. package/dist-server/service/checklist-item-history/checklist-item-history.d.ts +25 -0
  174. package/dist-server/service/checklist-item-history/checklist-item-history.js +123 -0
  175. package/dist-server/service/checklist-item-history/checklist-item-history.js.map +1 -0
  176. package/dist-server/service/checklist-item-history/event-subscriber.d.ts +7 -0
  177. package/dist-server/service/checklist-item-history/event-subscriber.js +21 -0
  178. package/dist-server/service/checklist-item-history/event-subscriber.js.map +1 -0
  179. package/dist-server/service/checklist-item-history/index.d.ts +6 -0
  180. package/dist-server/service/checklist-item-history/index.js +10 -0
  181. package/dist-server/service/checklist-item-history/index.js.map +1 -0
  182. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js +4 -1
  183. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js.map +1 -1
  184. package/dist-server/service/checklist-template-item/checklist-template-item-type.d.ts +2 -0
  185. package/dist-server/service/checklist-template-item/checklist-template-item-type.js +5 -0
  186. package/dist-server/service/checklist-template-item/checklist-template-item-type.js.map +1 -1
  187. package/dist-server/service/checklist-template-item/checklist-template-item.d.ts +6 -0
  188. package/dist-server/service/checklist-template-item/checklist-template-item.js +16 -1
  189. package/dist-server/service/checklist-template-item/checklist-template-item.js.map +1 -1
  190. package/dist-server/service/checklist-template-item/spec-matching-service.d.ts +2 -0
  191. package/dist-server/service/checklist-template-item/spec-matching-service.js +50 -0
  192. package/dist-server/service/checklist-template-item/spec-matching-service.js.map +1 -0
  193. package/dist-server/service/index.d.ts +4 -1
  194. package/dist-server/service/index.js +22 -3
  195. package/dist-server/service/index.js.map +1 -1
  196. package/dist-server/service/project-report/project-report.d.ts +0 -2
  197. package/dist-server/service/project-report/project-report.js +0 -6
  198. package/dist-server/service/project-report/project-report.js.map +1 -1
  199. package/dist-server/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +14 -13
  201. package/things-factory.config.js +2 -0
  202. package/dist-server/service/building-inspection/building-inspection-history.d.ts +0 -17
  203. package/dist-server/service/building-inspection/building-inspection-history.js +0 -86
  204. package/dist-server/service/building-inspection/building-inspection-history.js.map +0 -1
  205. package/dist-server/service/checklist/checklist-history.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { BuildingInspection } from './building-inspection';
2
- import { NewBuildingInspection, UpdateBuildingInspectionDrawingMarker, UpdateBuildingInspectionSubmitType } from './building-inspection-type';
2
+ import { NewBuildingInspection, UpdateBuildingInspection, UpdateBuildingInspectionSubmitType } from './building-inspection-type';
3
3
  export declare class BuildingInspectionMutation {
4
4
  createBuildingInspection(patch: NewBuildingInspection, context: ResolverContext): Promise<BuildingInspection>;
5
5
  updateBuildingInspectionChecklist(buildingInspection: UpdateBuildingInspectionSubmitType, context: ResolverContext): Promise<boolean>;
6
- updateBuildingInspection(patch: UpdateBuildingInspectionDrawingMarker, context: ResolverContext): Promise<BuildingInspection>;
6
+ updateBuildingInspection(patch: UpdateBuildingInspection, context: ResolverContext): Promise<BuildingInspection>;
7
7
  deleteBuildingInspections(ids: string[], context: ResolverContext): Promise<boolean>;
8
- getRecentDocumentNoByBuildingLevelId(buildingLevelId: string): Promise<string>;
8
+ applyToAllBuildingInspection(buildingInspectionId: string, context: ResolverContext): Promise<boolean>;
9
9
  }
@@ -12,6 +12,7 @@ const checklist_item_1 = require("../checklist-item/checklist-item");
12
12
  const shell_1 = require("@things-factory/shell");
13
13
  const building_complex_1 = require("@dssp/building-complex");
14
14
  const env_1 = require("@things-factory/env");
15
+ const checklist_2 = require("../checklist/checklist");
15
16
  const projectType = env_1.config.get('projectType', building_inspection_1.ProjectType.DSSP);
16
17
  let BuildingInspectionMutation = class BuildingInspectionMutation {
17
18
  async createBuildingInspection(patch, context) {
@@ -21,12 +22,12 @@ let BuildingInspectionMutation = class BuildingInspectionMutation {
21
22
  const checklistRepository = tx.getRepository(checklist_1.Checklist);
22
23
  const checklistItemRepository = tx.getRepository(checklist_item_1.ChecklistItem);
23
24
  // 1. 벨리데이션
24
- if (!buildingLevelId)
25
- throw new Error(' 아이디가 없습니다.');
25
+ if (!checklist.constructionType)
26
+ throw new Error('공종 타입이 없습니다.');
27
+ if (!checklist.constructionDetailType)
28
+ throw new Error('상세 공종 타입이 없습니다.');
26
29
  if (!checklist.name)
27
30
  throw new Error('체크리스트 이름이 없습니다.');
28
- if (!checklist.location)
29
- throw new Error('위치가 없습니다.');
30
31
  if (checklistItem.length === 0)
31
32
  throw new Error('체크리스트 아이템이 없습니다.');
32
33
  if (projectType === building_inspection_1.ProjectType.DSSP) {
@@ -34,21 +35,27 @@ let BuildingInspectionMutation = class BuildingInspectionMutation {
34
35
  throw new Error('셀 좌표가 없습니다.');
35
36
  if (!managerId)
36
37
  throw new Error('담당자가 없습니다.');
38
+ if (!buildingLevelId)
39
+ throw new Error('층 아이디가 없습니다.');
40
+ if (!checklist.location)
41
+ throw new Error('위치가 없습니다.');
37
42
  }
38
43
  else if (projectType === building_inspection_1.ProjectType.DCSP) {
39
- if (!checklist.constructionType)
40
- throw new Error('공종 타입이 없습니다.');
41
- if (!checklist.constructionDetailType)
42
- throw new Error('상세 공종 타입이 없습니다.');
43
44
  if (!checklist.inspectionDrawingType)
44
45
  throw new Error('검측 도면 타입이 없습니다.');
45
46
  if (checklist.inspectionParts.length === 0)
46
47
  throw new Error('검측 부위가 없습니다.');
48
+ if (!buildingLevelId)
49
+ throw new Error('층 아이디가 없습니다.');
50
+ if (!checklist.location)
51
+ throw new Error('위치가 없습니다.');
47
52
  }
48
53
  // 2. checklist 저장
49
- const documentNo = await this.getRecentDocumentNoByBuildingLevelId(buildingLevelId);
50
- const savedChecklist = await checklistRepository.save(Object.assign(Object.assign({}, checklist), { projectType,
51
- documentNo, creator: user, updater: user }));
54
+ const checklistDocumentNo = await getRecentDocumentNoByBuildingLevelId(buildingLevelId, checklist_1.DocumentNoType.CHECKLIST, tx);
55
+ const inspectionRequestDocumentNo = checklistDocumentNo.replace(`검측 제${checklist_1.DocumentNoType.CHECKLIST}-`, `검측 제${checklist_1.DocumentNoType.INSPECTION_REQUEST}-`);
56
+ const inspectionResultDocumentNo = checklistDocumentNo.replace(`검측 제${checklist_1.DocumentNoType.CHECKLIST}-`, `검측 제${checklist_1.DocumentNoType.INSPECTION_RESULT}-`);
57
+ const savedChecklist = await checklistRepository.save(Object.assign(Object.assign({}, checklist), { projectType, checklistReferenceType: checklist_2.ChecklistReferenceType.INSPECTION, documentNo: checklistDocumentNo, inspectionRequestDocumentNo,
58
+ inspectionResultDocumentNo, creator: user, updater: user }));
52
59
  // 3. checklistItem 저장
53
60
  const checklistItems = checklistItem.map((item, idx) => ({
54
61
  name: item.name,
@@ -78,7 +85,7 @@ let BuildingInspectionMutation = class BuildingInspectionMutation {
78
85
  // 검측 상태 변경 & 체크리스트 갱신
79
86
  async updateBuildingInspectionChecklist(buildingInspection, context) {
80
87
  const { user, tx } = context.state;
81
- const { id: buildingInspectionId, checklist, checklistItem } = buildingInspection;
88
+ const { id: buildingInspectionId, memo, checklist, checklistItem } = buildingInspection;
82
89
  const buildingInspectionRepo = tx.getRepository(building_inspection_1.BuildingInspection);
83
90
  const checklistRepo = tx.getRepository(checklist_1.Checklist);
84
91
  const checklistItemRepo = tx.getRepository(checklist_item_1.ChecklistItem);
@@ -88,6 +95,9 @@ let BuildingInspectionMutation = class BuildingInspectionMutation {
88
95
  status == building_inspection_2.BuildingInspectionStatus.OVERALL_WAIT ||
89
96
  status == building_inspection_2.BuildingInspectionStatus.FAIL;
90
97
  let inspectionStatus = null;
98
+ let signedUserType = null; // 싸인을 한 유저 타입
99
+ let inspectionRequestData = {};
100
+ let inspectionResultData = {};
91
101
  // 1. 벨리데이션
92
102
  if (!buildingInspectionId)
93
103
  throw new Error('검측 아이디가 없습니다.');
@@ -117,12 +127,18 @@ let BuildingInspectionMutation = class BuildingInspectionMutation {
117
127
  else if (isPassed && (status === building_inspection_2.BuildingInspectionStatus.WAIT || status === building_inspection_2.BuildingInspectionStatus.FAIL)) {
118
128
  // 2. 검측이 합격이면서 공종 시공자 스탭 = 상태는 총괄 시공자 스탭으로
119
129
  inspectionStatus = building_inspection_2.BuildingInspectionStatus.OVERALL_WAIT;
130
+ signedUserType = 'taskConstructor';
120
131
  }
121
132
  else if (isPassed && status === building_inspection_2.BuildingInspectionStatus.OVERALL_WAIT) {
122
133
  // 3. 검측이 합격이면서 총괄 시공자 스탭 = 상태는 공종 감리자 스탭으로, 감리자 싸인은 모두 초기화
123
134
  inspectionStatus = building_inspection_2.BuildingInspectionStatus.REQUEST;
124
135
  checklist.overallSupervisorySignature = null;
125
136
  checklist.taskSupervisorySignature = null;
137
+ signedUserType = 'overallConstructor';
138
+ inspectionRequestData = {
139
+ inspectionRequestMemo: checklist.inspectionRequestMemo,
140
+ inspectionRequestUpdatedAt: new Date()
141
+ };
126
142
  }
127
143
  }
128
144
  else {
@@ -147,18 +163,27 @@ let BuildingInspectionMutation = class BuildingInspectionMutation {
147
163
  else if (isPassed && status === building_inspection_2.BuildingInspectionStatus.REQUEST) {
148
164
  // 2. 검측이 합격이면서 공종 감리자 스탭 = 상태는 총괄 감리자 스탭으로
149
165
  inspectionStatus = building_inspection_2.BuildingInspectionStatus.OVERALL_REQUEST;
166
+ signedUserType = 'taskSupervisory';
150
167
  }
151
168
  else if (isPassed && status === building_inspection_2.BuildingInspectionStatus.OVERALL_REQUEST) {
152
169
  // 3. 검측이 합격이면서 총괄 감리자 스탭 = 상태는 합격으로
153
170
  inspectionStatus = building_inspection_2.BuildingInspectionStatus.PASS;
171
+ signedUserType = 'overallSupervisory';
172
+ inspectionResultData = {
173
+ inspectionResultStatus: checklist.inspectionResultStatus,
174
+ inspectionResultMemo: checklist.inspectionResultMemo,
175
+ inspectionResultType: checklist.inspectionResultType,
176
+ inspectionResultUpdatedAt: new Date()
177
+ };
154
178
  }
155
179
  }
156
180
  // 2. buildingInspection 저장
157
- await buildingInspectionRepo.save(Object.assign(Object.assign({}, oldBuildingInspection), { status: inspectionStatus, updater: user }));
181
+ await buildingInspectionRepo.save(Object.assign(Object.assign({}, oldBuildingInspection), { status: inspectionStatus, memo: memo, updater: user }));
158
182
  // 3. checklist 저장
159
183
  const oldChecklist = await checklistRepo.findOneBy({ id: checklist.id });
160
184
  const inspectionDateField = isConstructor ? 'constructionInspectionDate' : 'supervisorInspectionDate';
161
- await checklistRepo.save(Object.assign(Object.assign({}, oldChecklist), { [inspectionDateField]: new Date(), overallConstructorSignature: checklist.overallConstructorSignature, taskConstructorSignature: checklist.taskConstructorSignature, overallSupervisorySignature: checklist.overallSupervisorySignature, taskSupervisorySignature: checklist.taskSupervisorySignature, updater: user }));
185
+ const signedUser = signedUserType ? { [signedUserType]: user } : {};
186
+ await checklistRepo.save(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, oldChecklist), { [inspectionDateField]: new Date(), overallConstructorSignature: checklist.overallConstructorSignature, taskConstructorSignature: checklist.taskConstructorSignature, overallSupervisorySignature: checklist.overallSupervisorySignature, taskSupervisorySignature: checklist.taskSupervisorySignature }), signedUser), inspectionRequestData), inspectionResultData), { updater: user }));
162
187
  // 4. checklistItem 저장
163
188
  for (let item of checklistItem) {
164
189
  const confirmStatusField = isConstructor ? 'constructionConfirmStatus' : 'supervisoryConfirmStatus';
@@ -210,25 +235,54 @@ let BuildingInspectionMutation = class BuildingInspectionMutation {
210
235
  .execute();
211
236
  return true;
212
237
  }
213
- async getRecentDocumentNoByBuildingLevelId(buildingLevelId) {
214
- var _a, _b;
215
- const buildingLevel = await (0, shell_1.getRepository)(building_complex_1.BuildingLevel).findOne({
216
- where: { id: buildingLevelId },
217
- relations: ['building']
238
+ async applyToAllBuildingInspection(buildingInspectionId, context) {
239
+ const { user, tx } = context.state;
240
+ const buildingInspectionRepository = tx.getRepository(building_inspection_1.BuildingInspection);
241
+ const buildingInspection = await buildingInspectionRepository.findOne({
242
+ where: { id: buildingInspectionId },
243
+ relations: ['buildingLevel', 'buildingLevel.building', 'checklist', 'checklist.checklistItems']
244
+ });
245
+ const checklist = buildingInspection.checklist;
246
+ const checklistItems = checklist.checklistItems;
247
+ const buildingLevels = await (0, shell_1.getRepository)(building_complex_1.BuildingLevel).find({
248
+ where: { building: { id: buildingInspection.buildingLevel.building.id } }
218
249
  });
219
- const buildingName = ((_b = (_a = buildingLevel.building.name.match(/\d+/g)) === null || _a === void 0 ? void 0 : _a.join('')) === null || _b === void 0 ? void 0 : _b.padStart(4, '0')) || '0000';
220
- const floorName = buildingLevel.floor.toString().padStart(3, '0');
221
- const latestChecklist = await (0, shell_1.getRepository)(checklist_1.Checklist)
222
- .createQueryBuilder('c')
223
- .where('c.document_no LIKE :pattern', { pattern: `${buildingName}-${floorName}-%` })
224
- .orderBy('c.created_at', 'DESC')
225
- .getOne();
226
- let documentNo = '000001';
227
- if (latestChecklist) {
228
- const lastNo = latestChecklist.documentNo.split('-')[2];
229
- documentNo = (Number(lastNo) + 1).toString().padStart(6, '0');
250
+ // 해당 검측 정보가 속한 동의 모든 층에 같은 검측 데이터 등록
251
+ for (let buildingLevel of buildingLevels) {
252
+ // 같은 셀에 이미 검측 정보가 있으면 패스
253
+ const existInspection = await buildingInspectionRepository.findOneBy({
254
+ buildingLevel: { id: buildingLevel.id },
255
+ cellX: buildingInspection.cellX,
256
+ cellY: buildingInspection.cellY
257
+ });
258
+ if (existInspection)
259
+ continue;
260
+ // 새로운 체크리스트 데이터
261
+ const newChecklist = {
262
+ name: checklist.name,
263
+ location: `${buildingInspection.buildingLevel.building.name} ${buildingLevel.floor}층`,
264
+ constructionType: checklist.constructionType,
265
+ constructionDetailType: checklist.constructionDetailType,
266
+ inspectionDrawingType: checklist.inspectionDrawingType,
267
+ inspectionParts: checklist.inspectionParts
268
+ };
269
+ // 새로운 체크리스트 아이템 데이터
270
+ const newChecklistItems = checklistItems.map(item => ({
271
+ name: item.name,
272
+ mainType: item.mainType,
273
+ detailType: item.detailType,
274
+ inspctionCriteria: item.inspctionCriteria
275
+ }));
276
+ await this.createBuildingInspection({
277
+ buildingLevelId: buildingLevel.id,
278
+ checklist: newChecklist,
279
+ checklistItem: newChecklistItems,
280
+ cellX: buildingInspection.cellX,
281
+ cellY: buildingInspection.cellY,
282
+ managerId: buildingInspection.managerId
283
+ }, context);
230
284
  }
231
- return `${buildingName}-${floorName}-${documentNo}`;
285
+ return true;
232
286
  }
233
287
  };
234
288
  exports.BuildingInspectionMutation = BuildingInspectionMutation;
@@ -256,7 +310,7 @@ tslib_1.__decorate([
256
310
  tslib_1.__param(0, (0, type_graphql_1.Arg)('patch')),
257
311
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
258
312
  tslib_1.__metadata("design:type", Function),
259
- tslib_1.__metadata("design:paramtypes", [building_inspection_type_1.UpdateBuildingInspectionDrawingMarker, Object]),
313
+ tslib_1.__metadata("design:paramtypes", [building_inspection_type_1.UpdateBuildingInspection, Object]),
260
314
  tslib_1.__metadata("design:returntype", Promise)
261
315
  ], BuildingInspectionMutation.prototype, "updateBuildingInspection", null);
262
316
  tslib_1.__decorate([
@@ -268,7 +322,49 @@ tslib_1.__decorate([
268
322
  tslib_1.__metadata("design:paramtypes", [Array, Object]),
269
323
  tslib_1.__metadata("design:returntype", Promise)
270
324
  ], BuildingInspectionMutation.prototype, "deleteBuildingInspections", null);
325
+ tslib_1.__decorate([
326
+ (0, type_graphql_1.Directive)('@transaction'),
327
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To apply to all building inspection' }),
328
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('buildingInspectionId')),
329
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
330
+ tslib_1.__metadata("design:type", Function),
331
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
332
+ tslib_1.__metadata("design:returntype", Promise)
333
+ ], BuildingInspectionMutation.prototype, "applyToAllBuildingInspection", null);
271
334
  exports.BuildingInspectionMutation = BuildingInspectionMutation = tslib_1.__decorate([
272
335
  (0, type_graphql_1.Resolver)(building_inspection_1.BuildingInspection)
273
336
  ], BuildingInspectionMutation);
337
+ async function getRecentDocumentNoByBuildingLevelId(buildingLevelId, type, tx) {
338
+ const project = await tx
339
+ .createQueryBuilder()
340
+ .select('p.documentNaming', 'documentNaming')
341
+ .addSelect('bc.id', 'buildingComplexId')
342
+ .from('projects', 'p')
343
+ .innerJoin('building_complexes', 'bc', 'bc.id = p.building_complex_id')
344
+ .innerJoin('buildings', 'b', 'b.building_complex_id = bc.id')
345
+ .innerJoin('building_levels', 'bl', 'bl.building_id = b.id')
346
+ .where('bl.id = :buildingLevelId', { buildingLevelId })
347
+ .getRawOne();
348
+ const latestChecklist = await tx
349
+ .getRepository(checklist_1.Checklist)
350
+ .createQueryBuilder('c')
351
+ .innerJoin('c.buildingInspection', 'bi')
352
+ .innerJoin('bi.buildingLevel', 'bl')
353
+ .innerJoin('bl.building', 'b')
354
+ .where('b.building_complex_id = :buildingComplexId', { buildingComplexId: project.buildingComplexId })
355
+ .andWhere('c.document_no LIKE :pattern', { pattern: `${project.documentNaming} 검측 제${type}-%` })
356
+ .orderBy('c.created_at', 'DESC')
357
+ .getOne();
358
+ // 4. 시퀀스 번호 생성 (5자리)
359
+ let sequence = '00001';
360
+ if (latestChecklist) {
361
+ const documentNoPattern = new RegExp(`${project.documentNaming} 검측 제${type}-(\\d{5})호`);
362
+ const match = latestChecklist.documentNo.match(documentNoPattern);
363
+ if (match) {
364
+ sequence = (Number(match[1]) + 1).toString().padStart(5, '0');
365
+ }
366
+ }
367
+ // 5. 최종 문서 번호 생성
368
+ return `${project.documentNaming} 검측 제${type}-${sequence}호`;
369
+ }
274
370
  //# sourceMappingURL=building-inspection-mutation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"building-inspection-mutation.js","sourceRoot":"","sources":["../../../server/service/building-inspection/building-inspection-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AACtE,qCAA4B;AAC5B,+DAAuE;AACvE,yEAImC;AACnC,+DAAgE;AAChE,sDAAkD;AAClD,qEAAgE;AAChE,iDAAqD;AACrD,6DAAsD;AACtD,6CAA4C;AAC5C,MAAM,WAAW,GAAG,YAAM,CAAC,GAAG,CAAC,aAAa,EAAE,iCAAW,CAAC,IAAI,CAAC,CAAA;AAGxD,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAG/B,AAAN,KAAK,CAAC,wBAAwB,CACd,KAA4B,EACnC,OAAwB;QAE/B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAClC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;QACpF,MAAM,4BAA4B,GAAG,EAAE,CAAC,aAAa,CAAC,wCAAkB,CAAC,CAAA;QACzE,MAAM,mBAAmB,GAAG,EAAE,CAAC,aAAa,CAAC,qBAAS,CAAC,CAAA;QACvD,MAAM,uBAAuB,GAAG,EAAE,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAA;QAE/D,WAAW;QACX,IAAI,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QACrD,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;QACrD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAEnE,IAAI,WAAW,KAAK,iCAAW,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;YACpD,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;QAC/C,CAAC;aAAM,IAAI,WAAW,KAAK,iCAAW,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;YAChE,IAAI,CAAC,SAAS,CAAC,sBAAsB;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;YACzE,IAAI,CAAC,SAAS,CAAC,qBAAqB;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;YACxE,IAAI,SAAS,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QAC7E,CAAC;QAED,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oCAAoC,CAAC,eAAe,CAAC,CAAA;QACnF,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAAC,IAAI,iCAChD,SAAS,KACZ,WAAW;YACX,UAAU,EACV,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,IACb,CAAA;QAEF,sBAAsB;QACtB,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACvD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAA;QACH,MAAM,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAElD,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC;YACrD,MAAM,EAAE,8CAAwB,CAAC,IAAI;YACrC,aAAa,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE;YACtC,SAAS,EAAE,cAAc;YACzB,WAAW;YACX,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;YAC7C,KAAK;YACL,KAAK;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC;IAED,sBAAsB;IAGhB,AAAN,KAAK,CAAC,iCAAiC,CACV,kBAAsD,EAC1E,OAAwB;QAE/B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAClC,MAAM,EAAE,EAAE,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAA;QACjF,MAAM,sBAAsB,GAAG,EAAE,CAAC,aAAa,CAAC,wCAAkB,CAAC,CAAA;QACnE,MAAM,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,qBAAS,CAAC,CAAA;QACjD,MAAM,iBAAiB,GAAG,EAAE,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAA;QACzD,MAAM,qBAAqB,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAClG,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAA;QAC3C,MAAM,aAAa,GACjB,MAAM,IAAI,8CAAwB,CAAC,IAAI;YACvC,MAAM,IAAI,8CAAwB,CAAC,YAAY;YAC/C,MAAM,IAAI,8CAAwB,CAAC,IAAI,CAAA;QACzC,IAAI,gBAAgB,GAAG,IAAI,CAAA;QAE3B,WAAW;QACX,IAAI,CAAC,oBAAoB;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAC3D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QAC5C,IAAI,MAAM,IAAI,8CAAwB,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAEzF,IAAI,aAAa,EAAE,CAAC;YAClB,gBAAgB;YAChB,IAAI,aAAa,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC3F,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;YACtC,CAAC;YACD,IAAI,MAAM,IAAI,8CAAwB,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,2BAA2B,EAAE,CAAC;gBAC9F,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;YACvC,CAAC;YACD,IAAI,MAAM,IAAI,8CAAwB,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE,CAAC;gBACnF,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;YACxC,CAAC;YAED,aAAa;YACb,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,KAAK,GAAG,CAAC,CAAC,MAAM,CAAA;YAE/G,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,yCAAyC;gBACzC,gBAAgB,GAAG,8CAAwB,CAAC,IAAI,CAAA;gBAChD,SAAS,CAAC,2BAA2B,GAAG,IAAI,CAAA;gBAC5C,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAA;YAC3C,CAAC;iBAAM,IAAI,QAAQ,IAAI,CAAC,MAAM,KAAK,8CAAwB,CAAC,IAAI,IAAI,MAAM,KAAK,8CAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9G,2CAA2C;gBAC3C,gBAAgB,GAAG,8CAAwB,CAAC,YAAY,CAAA;YAC1D,CAAC;iBAAM,IAAI,QAAQ,IAAI,MAAM,KAAK,8CAAwB,CAAC,YAAY,EAAE,CAAC;gBACxE,2DAA2D;gBAC3D,gBAAgB,GAAG,8CAAwB,CAAC,OAAO,CAAA;gBACnD,SAAS,CAAC,2BAA2B,GAAG,IAAI,CAAA;gBAC5C,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAA;YAC3C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gBAAgB;YAChB,IAAI,aAAa,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC1F,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;YACtC,CAAC;YACD,IAAI,MAAM,IAAI,8CAAwB,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,2BAA2B,EAAE,CAAC;gBACjG,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;YACvC,CAAC;YACD,IAAI,MAAM,IAAI,8CAAwB,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE,CAAC;gBACtF,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;YACzC,CAAC;YAED,aAAa;YACb,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,KAAK,GAAG,CAAC,CAAC,MAAM,CAAA;YAC9G,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,yCAAyC;gBACzC,gBAAgB,GAAG,8CAAwB,CAAC,IAAI,CAAA;gBAChD,SAAS,CAAC,2BAA2B,GAAG,IAAI,CAAA;gBAC5C,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAA;YAC3C,CAAC;iBAAM,IAAI,QAAQ,IAAI,MAAM,KAAK,8CAAwB,CAAC,OAAO,EAAE,CAAC;gBACnE,2CAA2C;gBAC3C,gBAAgB,GAAG,8CAAwB,CAAC,eAAe,CAAA;YAC7D,CAAC;iBAAM,IAAI,QAAQ,IAAI,MAAM,KAAK,8CAAwB,CAAC,eAAe,EAAE,CAAC;gBAC3E,oCAAoC;gBACpC,gBAAgB,GAAG,8CAAwB,CAAC,IAAI,CAAA;YAClD,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,sBAAsB,CAAC,IAAI,iCAC5B,qBAAqB,KACxB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,IAAI,IACb,CAAA;QAEF,kBAAkB;QAClB,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;QACxE,MAAM,mBAAmB,GAAG,aAAa,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,0BAA0B,CAAA;QACrG,MAAM,aAAa,CAAC,IAAI,iCACnB,YAAY,KACf,CAAC,mBAAmB,CAAC,EAAE,IAAI,IAAI,EAAE,EACjC,2BAA2B,EAAE,SAAS,CAAC,2BAA2B,EAClE,wBAAwB,EAAE,SAAS,CAAC,wBAAwB,EAC5D,2BAA2B,EAAE,SAAS,CAAC,2BAA2B,EAClE,wBAAwB,EAAE,SAAS,CAAC,wBAAwB,EAC5D,OAAO,EAAE,IAAI,IACb,CAAA;QAEF,sBAAsB;QACtB,KAAK,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;YAC/B,MAAM,kBAAkB,GAAG,aAAa,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,0BAA0B,CAAA;YACnG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE;gBACtC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;gBAC9C,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,wBAAwB,CACd,KAA4C,EACnD,OAAwB;QAE/B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAClC,MAAM,sBAAsB,GAAG,EAAE,CAAC,aAAa,CAAC,wCAAkB,CAAC,CAAA;QAEnE,QAAQ;QACR,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAE/C,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;QAEnF,sBAAsB;QACtB,IAAI,kBAAkB,CAAC,MAAM,KAAK,8CAAwB,CAAC,IAAI,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,IAAI,+CAC3C,kBAAkB,GAClB,KAAK,KACR,OAAO,EAAE,IAAI,IACb,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC;IAIK,AAAN,KAAK,CAAC,yBAAyB,CACC,GAAa,EACpC,OAAwB;QAE/B,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC5B,MAAM,4BAA4B,GAAG,EAAE,CAAC,aAAa,CAAC,wCAAkB,CAAC,CAAA;QACzE,MAAM,mBAAmB,GAAG,EAAE,CAAC,aAAa,CAAC,qBAAS,CAAC,CAAA;QACvD,MAAM,uBAAuB,GAAG,EAAE,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAA;QAE/D,MAAM,mBAAmB,GAAG,MAAM,4BAA4B,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;QAEjH,+BAA+B;QAC/B,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,8CAAwB,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC7C,CAAC;QAED,YAAY;QACZ,MAAM,4BAA4B,CAAC,UAAU,CAAC;YAC5C,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QAEF,oBAAoB;QACpB,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QAClE,MAAM,mBAAmB,CAAC,UAAU,CAAC;YACnC,EAAE,EAAE,IAAA,YAAE,EAAC,YAAY,CAAC;SACrB,CAAC,CAAA;QAEF,wBAAwB;QACxB,MAAM,uBAAuB;aAC1B,kBAAkB,EAAE;aACpB,UAAU,EAAE;aACZ,KAAK,CAAC,oCAAoC,EAAE,EAAE,YAAY,EAAE,CAAC;aAC7D,OAAO,EAAE,CAAA;QAEZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,oCAAoC,CAAC,eAAuB;;QAChE,MAAM,aAAa,GAAG,MAAM,IAAA,qBAAa,EAAC,gCAAa,CAAC,CAAC,OAAO,CAAC;YAC/D,KAAK,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE;YAC9B,SAAS,EAAE,CAAC,UAAU,CAAC;SACxB,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,CAAA,MAAA,MAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,IAAI,CAAC,EAAE,CAAC,0CAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAI,MAAM,CAAA;QACpG,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACjE,MAAM,eAAe,GAAG,MAAM,IAAA,qBAAa,EAAC,qBAAS,CAAC;aACnD,kBAAkB,CAAC,GAAG,CAAC;aACvB,KAAK,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,GAAG,YAAY,IAAI,SAAS,IAAI,EAAE,CAAC;aACnF,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;aAC/B,MAAM,EAAE,CAAA;QAEX,IAAI,UAAU,GAAG,QAAQ,CAAA;QACzB,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACvD,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC/D,CAAC;QAED,OAAO,GAAG,YAAY,IAAI,SAAS,IAAI,UAAU,EAAE,CAAA;IACrD,CAAC;CACF,CAAA;AA/QY,gEAA0B;AAG/B;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,wCAAkB,EAAE,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC;IAEnG,mBAAA,IAAA,kBAAG,EAAC,OAAO,CAAC,CAAA;IACZ,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CADe,gDAAqB;;0EA8D3C;AAKK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,yDAAyD,EAAE,CAAC;IAEtG,mBAAA,IAAA,kBAAG,EAAC,oBAAoB,CAAC,CAAA;IACzB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CADyC,6DAAkC;;mFA4GlF;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,wCAAkB,EAAE,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC;IAEnG,mBAAA,IAAA,kBAAG,EAAC,OAAO,CAAC,CAAA;IACZ,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CADe,gEAAqC;;0EAuB3D;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IAE5E,mBAAA,IAAA,kBAAG,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5B,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;2EAiCP;qCAvPU,0BAA0B;IADtC,IAAA,uBAAQ,EAAC,wCAAkB,CAAC;GAChB,0BAA0B,CA+QtC","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { BuildingInspection, ProjectType } from './building-inspection'\nimport {\n NewBuildingInspection,\n UpdateBuildingInspectionDrawingMarker,\n UpdateBuildingInspectionSubmitType\n} from './building-inspection-type'\nimport { BuildingInspectionStatus } from './building-inspection'\nimport { Checklist } from '../checklist/checklist'\nimport { ChecklistItem } from '../checklist-item/checklist-item'\nimport { getRepository } from '@things-factory/shell'\nimport { BuildingLevel } from '@dssp/building-complex'\nimport { config } from '@things-factory/env'\nconst projectType = config.get('projectType', ProjectType.DSSP)\n\n@Resolver(BuildingInspection)\nexport class BuildingInspectionMutation {\n @Directive('@transaction')\n @Mutation(returns => BuildingInspection, { description: 'To create Building Inspection information' })\n async createBuildingInspection(\n @Arg('patch') patch: NewBuildingInspection,\n @Ctx() context: ResolverContext\n ): Promise<BuildingInspection> {\n const { user, tx } = context.state\n const { buildingLevelId, checklist, checklistItem, cellX, cellY, managerId } = patch\n const buildingInspectionRepository = tx.getRepository(BuildingInspection)\n const checklistRepository = tx.getRepository(Checklist)\n const checklistItemRepository = tx.getRepository(ChecklistItem)\n\n // 1. 벨리데이션\n if (!buildingLevelId) throw new Error('층 아이디가 없습니다.')\n if (!checklist.name) throw new Error('체크리스트 이름이 없습니다.')\n if (!checklist.location) throw new Error('위치가 없습니다.')\n if (checklistItem.length === 0) throw new Error('체크리스트 아이템이 없습니다.')\n\n if (projectType === ProjectType.DSSP) {\n if (!cellX || !cellY) throw new Error('셀 좌표가 없습니다.')\n if (!managerId) throw new Error('담당자가 없습니다.')\n } else if (projectType === ProjectType.DCSP) {\n if (!checklist.constructionType) throw new Error('공종 타입이 없습니다.')\n if (!checklist.constructionDetailType) throw new Error('상세 공종 타입이 없습니다.')\n if (!checklist.inspectionDrawingType) throw new Error('검측 도면 타입이 없습니다.')\n if (checklist.inspectionParts.length === 0) throw new Error('검측 부위가 없습니다.')\n }\n\n // 2. checklist 저장\n const documentNo = await this.getRecentDocumentNoByBuildingLevelId(buildingLevelId)\n const savedChecklist = await checklistRepository.save({\n ...checklist,\n projectType,\n documentNo,\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. buildingInspection 저장\n const result = await buildingInspectionRepository.save({\n status: BuildingInspectionStatus.WAIT,\n buildingLevel: { id: buildingLevelId },\n checklist: savedChecklist,\n projectType,\n manager: managerId ? { id: managerId } : null,\n cellX,\n cellY,\n creator: user,\n updater: user\n })\n\n return result\n }\n\n // 검측 상태 변경 & 체크리스트 갱신\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To create Building Inspection And Checklist information' })\n async updateBuildingInspectionChecklist(\n @Arg('buildingInspection') buildingInspection: UpdateBuildingInspectionSubmitType,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { user, tx } = context.state\n const { id: buildingInspectionId, checklist, checklistItem } = buildingInspection\n const buildingInspectionRepo = tx.getRepository(BuildingInspection)\n const checklistRepo = tx.getRepository(Checklist)\n const checklistItemRepo = tx.getRepository(ChecklistItem)\n const oldBuildingInspection = await buildingInspectionRepo.findOneBy({ id: buildingInspectionId })\n const status = oldBuildingInspection.status\n const isConstructor: boolean =\n status == BuildingInspectionStatus.WAIT ||\n status == BuildingInspectionStatus.OVERALL_WAIT ||\n status == BuildingInspectionStatus.FAIL\n let inspectionStatus = null\n\n // 1. 벨리데이션\n if (!buildingInspectionId) throw new Error('검측 아이디가 없습니다.')\n if (!status) throw new Error('검측 상태가 없습니다.')\n if (status == BuildingInspectionStatus.PASS) throw new Error('검측 상태가 수정할 수 있는 상태가 아닙니다.')\n\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 // 시공자 상태 데이터\n const isPassed = checklistItem.length === checklistItem.filter(v => v.constructionConfirmStatus === 'T').length\n\n if (!isPassed) {\n // 1. 검측이 불햡격 = 상태는 불합격으로, 시공자 싸인은 모두 초기화\n inspectionStatus = BuildingInspectionStatus.FAIL\n checklist.overallConstructorSignature = null\n checklist.taskConstructorSignature = null\n } else if (isPassed && (status === BuildingInspectionStatus.WAIT || status === BuildingInspectionStatus.FAIL)) {\n // 2. 검측이 합격이면서 공종 시공자 스탭 = 상태는 총괄 시공자 스탭으로\n inspectionStatus = BuildingInspectionStatus.OVERALL_WAIT\n } else if (isPassed && status === BuildingInspectionStatus.OVERALL_WAIT) {\n // 3. 검측이 합격이면서 총괄 시공자 스탭 = 상태는 공종 감리자 스탭으로, 감리자 싸인은 모두 초기화\n inspectionStatus = 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 // 감리자 상태 데이터\n const isPassed = checklistItem.length === checklistItem.filter(v => v.supervisoryConfirmStatus === 'T').length\n if (!isPassed) {\n // 1. 검측이 불햡격 = 상태는 불합격으로, 시공자 싸인은 모두 초기화\n inspectionStatus = BuildingInspectionStatus.FAIL\n checklist.overallConstructorSignature = null\n checklist.taskConstructorSignature = null\n } else if (isPassed && status === BuildingInspectionStatus.REQUEST) {\n // 2. 검측이 합격이면서 공종 감리자 스탭 = 상태는 총괄 감리자 스탭으로\n inspectionStatus = BuildingInspectionStatus.OVERALL_REQUEST\n } else if (isPassed && status === BuildingInspectionStatus.OVERALL_REQUEST) {\n // 3. 검측이 합격이면서 총괄 감리자 스탭 = 상태는 합격으로\n inspectionStatus = BuildingInspectionStatus.PASS\n }\n }\n\n // 2. buildingInspection 저장\n await buildingInspectionRepo.save({\n ...oldBuildingInspection,\n status: inspectionStatus,\n updater: user\n })\n\n // 3. checklist 저장\n const oldChecklist = await checklistRepo.findOneBy({ id: checklist.id })\n const inspectionDateField = isConstructor ? 'constructionInspectionDate' : 'supervisorInspectionDate'\n await checklistRepo.save({\n ...oldChecklist,\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 return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => BuildingInspection, { description: 'To update Building Inspection information' })\n async updateBuildingInspection(\n @Arg('patch') patch: UpdateBuildingInspectionDrawingMarker,\n @Ctx() context: ResolverContext\n ): Promise<BuildingInspection> {\n const { user, tx } = context.state\n const buildingInspectionRepo = tx.getRepository(BuildingInspection)\n\n // 벨리데이션\n if (!patch.id) throw new Error('검측 아이디가 없습니다.')\n\n const buildingInspection = await buildingInspectionRepo.findOneBy({ id: patch.id })\n\n // 완료 상태인 검측데이터면 삭제 못함\n if (buildingInspection.status === BuildingInspectionStatus.PASS) {\n throw new Error('완료 상태인 검측정보를 변경할 수 없습니다.')\n }\n\n const result = await buildingInspectionRepo.save({\n ...buildingInspection,\n ...patch,\n updater: user\n })\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple Checklists' })\n async deleteBuildingInspections(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { tx } = context.state\n const buildingInspectionRepository = tx.getRepository(BuildingInspection)\n const checklistRepository = tx.getRepository(Checklist)\n const checklistItemRepository = tx.getRepository(ChecklistItem)\n\n const buildingInspections = await buildingInspectionRepository.createQueryBuilder('bi').whereInIds(ids).getMany()\n\n // 완료 상태인 검측데이터가 한개라도 있으면 삭제 못함\n if (buildingInspections.filter(bi => bi.status === BuildingInspectionStatus.PASS).length > 0) {\n throw new Error('완료 상태인 검측정보를 변경할 수 없습니다.')\n }\n\n // 검측 데이터 제거\n await buildingInspectionRepository.softDelete({\n id: In(ids)\n })\n\n // 검측 데이터의 체크 리스트 제거\n const checklistIds = buildingInspections.map(bi => bi.checklistId)\n await checklistRepository.softDelete({\n id: In(checklistIds)\n })\n\n // 검측 데이터의 체크 리스트 아이템 제거\n await checklistItemRepository\n .createQueryBuilder()\n .softDelete()\n .where('checklist_id IN (:...checklistIds)', { checklistIds })\n .execute()\n\n return true\n }\n\n async getRecentDocumentNoByBuildingLevelId(buildingLevelId: string): Promise<string> {\n const buildingLevel = await getRepository(BuildingLevel).findOne({\n where: { id: buildingLevelId },\n relations: ['building']\n })\n\n const buildingName = buildingLevel.building.name.match(/\\d+/g)?.join('')?.padStart(4, '0') || '0000'\n const floorName = buildingLevel.floor.toString().padStart(3, '0')\n const latestChecklist = await getRepository(Checklist)\n .createQueryBuilder('c')\n .where('c.document_no LIKE :pattern', { pattern: `${buildingName}-${floorName}-%` })\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 `${buildingName}-${floorName}-${documentNo}`\n }\n}\n"]}
1
+ {"version":3,"file":"building-inspection-mutation.js","sourceRoot":"","sources":["../../../server/service/building-inspection/building-inspection-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { BuildingInspection, ProjectType } from './building-inspection'\nimport { NewBuildingInspection, UpdateBuildingInspection, UpdateBuildingInspectionSubmitType } from './building-inspection-type'\nimport { BuildingInspectionStatus } from './building-inspection'\nimport { Checklist, DocumentNoType } from '../checklist/checklist'\nimport { ChecklistItem } from '../checklist-item/checklist-item'\nimport { getRepository } from '@things-factory/shell'\nimport { BuildingLevel } from '@dssp/building-complex'\nimport { config } from '@things-factory/env'\nimport { ChecklistReferenceType } from '../checklist/checklist'\n\nconst projectType = config.get('projectType', ProjectType.DSSP)\n\n@Resolver(BuildingInspection)\nexport class BuildingInspectionMutation {\n @Directive('@transaction')\n @Mutation(returns => BuildingInspection, { description: 'To create Building Inspection information' })\n async createBuildingInspection(\n @Arg('patch') patch: NewBuildingInspection,\n @Ctx() context: ResolverContext\n ): Promise<BuildingInspection> {\n const { user, tx } = context.state\n const { buildingLevelId, checklist, checklistItem, cellX, cellY, managerId } = patch\n const buildingInspectionRepository = tx.getRepository(BuildingInspection)\n const checklistRepository = tx.getRepository(Checklist)\n const checklistItemRepository = tx.getRepository(ChecklistItem)\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 if (projectType === ProjectType.DSSP) {\n if (!cellX || !cellY) throw new Error('셀 좌표가 없습니다.')\n if (!managerId) throw new Error('담당자가 없습니다.')\n if (!buildingLevelId) throw new Error('층 아이디가 없습니다.')\n if (!checklist.location) throw new Error('위치가 없습니다.')\n } else if (projectType === ProjectType.DCSP) {\n if (!checklist.inspectionDrawingType) throw new Error('검측 도면 타입이 없습니다.')\n if (checklist.inspectionParts.length === 0) throw new Error('검측 부위가 없습니다.')\n if (!buildingLevelId) throw new Error('층 아이디가 없습니다.')\n if (!checklist.location) throw new Error('위치가 없습니다.')\n }\n\n // 2. checklist 저장\n const checklistDocumentNo = await getRecentDocumentNoByBuildingLevelId(buildingLevelId, DocumentNoType.CHECKLIST, tx)\n const inspectionRequestDocumentNo = checklistDocumentNo.replace(\n `검측 제${DocumentNoType.CHECKLIST}-`,\n `검측 제${DocumentNoType.INSPECTION_REQUEST}-`\n )\n const inspectionResultDocumentNo = checklistDocumentNo.replace(\n `검측 제${DocumentNoType.CHECKLIST}-`,\n `검측 제${DocumentNoType.INSPECTION_RESULT}-`\n )\n\n const savedChecklist = await checklistRepository.save({\n ...checklist,\n projectType,\n checklistReferenceType: ChecklistReferenceType.INSPECTION,\n documentNo: checklistDocumentNo,\n inspectionRequestDocumentNo,\n inspectionResultDocumentNo,\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. buildingInspection 저장\n const result = await buildingInspectionRepository.save({\n status: BuildingInspectionStatus.WAIT,\n buildingLevel: { id: buildingLevelId },\n checklist: savedChecklist,\n projectType,\n manager: managerId ? { id: managerId } : null,\n cellX,\n cellY,\n creator: user,\n updater: user\n })\n\n return result\n }\n\n // 검측 상태 변경 & 체크리스트 갱신\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To create Building Inspection And Checklist information' })\n async updateBuildingInspectionChecklist(\n @Arg('buildingInspection') buildingInspection: UpdateBuildingInspectionSubmitType,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { user, tx } = context.state\n const { id: buildingInspectionId, memo, checklist, checklistItem } = buildingInspection\n const buildingInspectionRepo = tx.getRepository(BuildingInspection)\n const checklistRepo = tx.getRepository(Checklist)\n const checklistItemRepo = tx.getRepository(ChecklistItem)\n const oldBuildingInspection = await buildingInspectionRepo.findOneBy({ id: buildingInspectionId })\n const status = oldBuildingInspection.status\n const isConstructor: boolean =\n status == BuildingInspectionStatus.WAIT ||\n status == BuildingInspectionStatus.OVERALL_WAIT ||\n status == BuildingInspectionStatus.FAIL\n let inspectionStatus = null\n let signedUserType = null // 싸인을 한 유저 타입\n let inspectionRequestData = {}\n let inspectionResultData = {}\n\n // 1. 벨리데이션\n if (!buildingInspectionId) throw new Error('검측 아이디가 없습니다.')\n if (!status) throw new Error('검측 상태가 없습니다.')\n if (status == BuildingInspectionStatus.PASS) throw new Error('검측 상태가 수정할 수 있는 상태가 아닙니다.')\n\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 // 시공자 상태 데이터\n const isPassed = checklistItem.length === checklistItem.filter(v => v.constructionConfirmStatus === 'T').length\n\n if (!isPassed) {\n // 1. 검측이 불햡격 = 상태는 불합격으로, 시공자 싸인은 모두 초기화\n inspectionStatus = BuildingInspectionStatus.FAIL\n checklist.overallConstructorSignature = null\n checklist.taskConstructorSignature = null\n } else if (isPassed && (status === BuildingInspectionStatus.WAIT || status === BuildingInspectionStatus.FAIL)) {\n // 2. 검측이 합격이면서 공종 시공자 스탭 = 상태는 총괄 시공자 스탭으로\n inspectionStatus = BuildingInspectionStatus.OVERALL_WAIT\n signedUserType = 'taskConstructor'\n } else if (isPassed && status === BuildingInspectionStatus.OVERALL_WAIT) {\n // 3. 검측이 합격이면서 총괄 시공자 스탭 = 상태는 공종 감리자 스탭으로, 감리자 싸인은 모두 초기화\n inspectionStatus = BuildingInspectionStatus.REQUEST\n checklist.overallSupervisorySignature = null\n checklist.taskSupervisorySignature = null\n signedUserType = 'overallConstructor'\n inspectionRequestData = {\n inspectionRequestMemo: checklist.inspectionRequestMemo,\n inspectionRequestUpdatedAt: new Date()\n }\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 // 감리자 상태 데이터\n const isPassed = checklistItem.length === checklistItem.filter(v => v.supervisoryConfirmStatus === 'T').length\n if (!isPassed) {\n // 1. 검측이 불햡격 = 상태는 불합격으로, 시공자 싸인은 모두 초기화\n inspectionStatus = BuildingInspectionStatus.FAIL\n checklist.overallConstructorSignature = null\n checklist.taskConstructorSignature = null\n } else if (isPassed && status === BuildingInspectionStatus.REQUEST) {\n // 2. 검측이 합격이면서 공종 감리자 스탭 = 상태는 총괄 감리자 스탭으로\n inspectionStatus = BuildingInspectionStatus.OVERALL_REQUEST\n signedUserType = 'taskSupervisory'\n } else if (isPassed && status === BuildingInspectionStatus.OVERALL_REQUEST) {\n // 3. 검측이 합격이면서 총괄 감리자 스탭 = 상태는 합격으로\n inspectionStatus = BuildingInspectionStatus.PASS\n signedUserType = 'overallSupervisory'\n inspectionResultData = {\n inspectionResultStatus: checklist.inspectionResultStatus,\n inspectionResultMemo: checklist.inspectionResultMemo,\n inspectionResultType: checklist.inspectionResultType,\n inspectionResultUpdatedAt: new Date()\n }\n }\n }\n\n // 2. buildingInspection 저장\n await buildingInspectionRepo.save({\n ...oldBuildingInspection,\n status: inspectionStatus,\n memo: memo,\n updater: user\n })\n\n // 3. checklist 저장\n const oldChecklist = await checklistRepo.findOneBy({ id: checklist.id })\n const inspectionDateField = isConstructor ? 'constructionInspectionDate' : 'supervisorInspectionDate'\n const signedUser = signedUserType ? { [signedUserType]: user } : {}\n\n await checklistRepo.save({\n ...oldChecklist,\n [inspectionDateField]: new Date(),\n overallConstructorSignature: checklist.overallConstructorSignature,\n taskConstructorSignature: checklist.taskConstructorSignature,\n overallSupervisorySignature: checklist.overallSupervisorySignature,\n taskSupervisorySignature: checklist.taskSupervisorySignature,\n ...signedUser,\n ...inspectionRequestData,\n ...inspectionResultData,\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 return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => BuildingInspection, { description: 'To update Building Inspection information' })\n async updateBuildingInspection(\n @Arg('patch') patch: UpdateBuildingInspection,\n @Ctx() context: ResolverContext\n ): Promise<BuildingInspection> {\n const { user, tx } = context.state\n const buildingInspectionRepo = tx.getRepository(BuildingInspection)\n\n // 벨리데이션\n if (!patch.id) throw new Error('검측 아이디가 없습니다.')\n\n const buildingInspection = await buildingInspectionRepo.findOneBy({ id: patch.id })\n\n // 완료 상태인 검측데이터면 삭제 못함\n if (buildingInspection.status === BuildingInspectionStatus.PASS) {\n throw new Error('완료 상태인 검측정보를 변경할 수 없습니다.')\n }\n\n const result = await buildingInspectionRepo.save({\n ...buildingInspection,\n ...patch,\n updater: user\n })\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple Checklists' })\n async deleteBuildingInspections(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { tx } = context.state\n const buildingInspectionRepository = tx.getRepository(BuildingInspection)\n const checklistRepository = tx.getRepository(Checklist)\n const checklistItemRepository = tx.getRepository(ChecklistItem)\n\n const buildingInspections = await buildingInspectionRepository.createQueryBuilder('bi').whereInIds(ids).getMany()\n\n // 완료 상태인 검측데이터가 한개라도 있으면 삭제 못함\n if (buildingInspections.filter(bi => bi.status === BuildingInspectionStatus.PASS).length > 0) {\n throw new Error('완료 상태인 검측정보를 변경할 수 없습니다.')\n }\n\n // 검측 데이터 제거\n await buildingInspectionRepository.softDelete({\n id: In(ids)\n })\n\n // 검측 데이터의 체크 리스트 제거\n const checklistIds = buildingInspections.map(bi => bi.checklistId)\n await checklistRepository.softDelete({\n id: In(checklistIds)\n })\n\n // 검측 데이터의 체크 리스트 아이템 제거\n await checklistItemRepository\n .createQueryBuilder()\n .softDelete()\n .where('checklist_id IN (:...checklistIds)', { checklistIds })\n .execute()\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To apply to all building inspection' })\n async applyToAllBuildingInspection(\n @Arg('buildingInspectionId') buildingInspectionId: string,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { user, tx } = context.state\n const buildingInspectionRepository = tx.getRepository(BuildingInspection)\n\n const buildingInspection = await buildingInspectionRepository.findOne({\n where: { id: buildingInspectionId },\n relations: ['buildingLevel', 'buildingLevel.building', 'checklist', 'checklist.checklistItems']\n })\n\n const checklist = buildingInspection.checklist\n const checklistItems = checklist.checklistItems\n const buildingLevels = await getRepository(BuildingLevel).find({\n where: { building: { id: buildingInspection.buildingLevel.building.id } }\n })\n\n // 해당 검측 정보가 속한 동의 모든 층에 같은 검측 데이터 등록\n for (let buildingLevel of buildingLevels) {\n // 같은 셀에 이미 검측 정보가 있으면 패스\n const existInspection = await buildingInspectionRepository.findOneBy({\n buildingLevel: { id: buildingLevel.id },\n cellX: buildingInspection.cellX,\n cellY: buildingInspection.cellY\n })\n if (existInspection) continue\n\n // 새로운 체크리스트 데이터\n const newChecklist = {\n name: checklist.name,\n location: `${buildingInspection.buildingLevel.building.name} ${buildingLevel.floor}층`,\n constructionType: checklist.constructionType,\n constructionDetailType: checklist.constructionDetailType,\n inspectionDrawingType: checklist.inspectionDrawingType,\n inspectionParts: checklist.inspectionParts\n }\n\n // 새로운 체크리스트 아이템 데이터\n const newChecklistItems = checklistItems.map(item => ({\n name: item.name,\n mainType: item.mainType,\n detailType: item.detailType,\n inspctionCriteria: item.inspctionCriteria\n }))\n\n await this.createBuildingInspection(\n {\n buildingLevelId: buildingLevel.id,\n checklist: newChecklist,\n checklistItem: newChecklistItems,\n cellX: buildingInspection.cellX,\n cellY: buildingInspection.cellY,\n managerId: buildingInspection.managerId\n },\n context\n )\n }\n\n return true\n }\n}\n\nasync function getRecentDocumentNoByBuildingLevelId(buildingLevelId: string, type: DocumentNoType, tx: any): Promise<string> {\n const project = await tx\n .createQueryBuilder()\n .select('p.documentNaming', 'documentNaming')\n .addSelect('bc.id', 'buildingComplexId')\n .from('projects', 'p')\n .innerJoin('building_complexes', 'bc', 'bc.id = p.building_complex_id')\n .innerJoin('buildings', 'b', 'b.building_complex_id = bc.id')\n .innerJoin('building_levels', 'bl', 'bl.building_id = b.id')\n .where('bl.id = :buildingLevelId', { buildingLevelId })\n .getRawOne()\n\n const latestChecklist = await tx\n .getRepository(Checklist)\n .createQueryBuilder('c')\n .innerJoin('c.buildingInspection', 'bi')\n .innerJoin('bi.buildingLevel', 'bl')\n .innerJoin('bl.building', 'b')\n .where('b.building_complex_id = :buildingComplexId', { buildingComplexId: project.buildingComplexId })\n .andWhere('c.document_no LIKE :pattern', { pattern: `${project.documentNaming} 검측 제${type}-%` })\n .orderBy('c.created_at', 'DESC')\n .getOne()\n\n // 4. 시퀀스 번호 생성 (5자리)\n let sequence = '00001'\n if (latestChecklist) {\n const documentNoPattern = new RegExp(`${project.documentNaming} 검측 제${type}-(\\\\d{5})호`)\n const match = latestChecklist.documentNo.match(documentNoPattern)\n if (match) {\n sequence = (Number(match[1]) + 1).toString().padStart(5, '0')\n }\n }\n\n // 5. 최종 문서 번호 생성\n return `${project.documentNaming} 검측 제${type}-${sequence}호`\n}\n"]}
@@ -1,15 +1,13 @@
1
1
  import { Attachment } from '@things-factory/attachment-base';
2
2
  import { ListParam } from '@things-factory/shell';
3
3
  import { BuildingInspection } from './building-inspection';
4
- import { BuildingInspectionList, BuildingInspectionsOfBuildingLevel, BuildingInspectionsOfProject, BuildingInspectionSummary } from './building-inspection-type';
4
+ import { BuildingInspectionList, BuildingInspectionsOfBuildingLevel, BuildingInspectionsOfProject, BuildingInspectionSummary, ProjectManagerOutput } from './building-inspection-type';
5
5
  import { BuildingLevel } from '@dssp/building-complex';
6
6
  import { Checklist } from '../checklist/checklist';
7
- import { Project, ManagerOutput } from '@dssp/project';
8
7
  export declare class BuildingInspectionQuery {
9
8
  buildingInspection(id: string, context: ResolverContext): Promise<BuildingInspection>;
10
9
  buildingInspections(params: ListParam, context: ResolverContext): Promise<BuildingInspectionList>;
11
10
  buildingInspectionsOfProject(params: BuildingInspectionsOfProject, context: ResolverContext): Promise<BuildingInspectionList>;
12
- projectByBuildingLevelId(buildingLevelId: string, context: ResolverContext): Promise<Project>;
13
11
  buildingInspectionsOfBuildingLevel(params: BuildingInspectionsOfBuildingLevel, context: ResolverContext): Promise<BuildingInspectionList>;
14
12
  buildingInspectionSummaryOfBuildingLevel(buildingLevelId: string, context: ResolverContext): Promise<BuildingInspectionSummary>;
15
13
  buildingInspectionDateSummaryOfLevelAndPeriod(buildingLevelId: string, startDate: string, endDate: string, context: ResolverContext): Promise<BuildingInspectionSummary[]>;
@@ -17,6 +15,6 @@ export declare class BuildingInspectionQuery {
17
15
  buildingInspectionSummaryOfProject(projectId: string, context: ResolverContext): Promise<BuildingInspectionSummary>;
18
16
  checklist(buildingInspection: BuildingInspection): Promise<Checklist>;
19
17
  buildingLevel(buildingInspection: BuildingInspection): Promise<BuildingLevel>;
20
- attatchments(buildingInspection: BuildingInspection): Promise<Attachment[] | undefined>;
21
- manager(buildingInspection: BuildingInspection): Promise<ManagerOutput>;
18
+ attachments(buildingInspection: BuildingInspection): Promise<Attachment[] | undefined>;
19
+ manager(buildingInspection: BuildingInspection): Promise<ProjectManagerOutput>;
22
20
  }
@@ -9,7 +9,6 @@ const building_inspection_1 = require("./building-inspection");
9
9
  const building_inspection_type_1 = require("./building-inspection-type");
10
10
  const building_complex_1 = require("@dssp/building-complex");
11
11
  const checklist_1 = require("../checklist/checklist");
12
- const project_1 = require("@dssp/project");
13
12
  const env_1 = require("@things-factory/env");
14
13
  const auth_base_1 = require("@things-factory/auth-base");
15
14
  const projectType = env_1.config.get('projectType', building_inspection_1.ProjectType.DSSP);
@@ -49,18 +48,8 @@ let BuildingInspectionQuery = class BuildingInspectionQuery {
49
48
  const [items, total] = await queryBuilder.getManyAndCount();
50
49
  return { items, total };
51
50
  }
52
- async projectByBuildingLevelId(buildingLevelId, context) {
53
- const queryBuilder = (0, shell_1.getRepository)(project_1.Project)
54
- .createQueryBuilder('p')
55
- .innerJoin('building_complexes', 'bc', 'p.building_complex_id = bc.id')
56
- .innerJoin('buildings', 'b', 'b.building_complex_id = bc.id')
57
- .innerJoin('building_levels', 'bl', 'bl.building_id = b.id')
58
- .where('bl.id = :buildingLevelId', { buildingLevelId });
59
- const result = await queryBuilder.getOne();
60
- return result;
61
- }
62
51
  async buildingInspectionsOfBuildingLevel(params, context) {
63
- const { buildingLevelId, limit } = params;
52
+ const { buildingLevelId, limit, startDate, endDate } = params;
64
53
  const queryBuilder = (0, shell_1.getRepository)(building_inspection_1.BuildingInspection)
65
54
  .createQueryBuilder('bi')
66
55
  .innerJoin('building_levels', 'bl', 'bi.building_level_id = bl.id')
@@ -68,6 +57,12 @@ let BuildingInspectionQuery = class BuildingInspectionQuery {
68
57
  .where('bl.id = :buildingLevelId', { buildingLevelId })
69
58
  .andWhere('bi.project_type = :projectType', { projectType })
70
59
  .orderBy('bi.updated_at', 'DESC');
60
+ if (startDate) {
61
+ queryBuilder.andWhere('bi.request_date >= :startDate', { startDate });
62
+ }
63
+ if (endDate) {
64
+ queryBuilder.andWhere('bi.request_date <= :endDate', { endDate });
65
+ }
71
66
  if (limit) {
72
67
  queryBuilder.limit(limit);
73
68
  }
@@ -131,16 +126,16 @@ let BuildingInspectionQuery = class BuildingInspectionQuery {
131
126
  }
132
127
  async buildingInspectionSummaryOfProject(projectId, context) {
133
128
  const { domain } = context.state;
134
- const result = await (0, shell_1.getRepository)(project_1.Project)
135
- .createQueryBuilder('p')
129
+ const result = await (0, shell_1.getRepository)(building_inspection_1.BuildingInspection)
130
+ .createQueryBuilder('bi')
136
131
  .select(`COUNT(CASE WHEN bi.status='${building_inspection_1.BuildingInspectionStatus.WAIT}' OR bi.status='${building_inspection_1.BuildingInspectionStatus.OVERALL_WAIT}' THEN 1 ELSE NULL END) AS wait`)
137
132
  .addSelect(`COUNT(CASE WHEN bi.status='${building_inspection_1.BuildingInspectionStatus.REQUEST}' OR bi.status='${building_inspection_1.BuildingInspectionStatus.OVERALL_REQUEST}' THEN 1 ELSE NULL END) AS request`)
138
133
  .addSelect(`COUNT(CASE WHEN bi.status = '${building_inspection_1.BuildingInspectionStatus.PASS}' THEN 1 ELSE NULL END) AS pass`)
139
134
  .addSelect(`COUNT(CASE WHEN bi.status = '${building_inspection_1.BuildingInspectionStatus.FAIL}' THEN 1 ELSE NULL END) AS fail`)
140
- .innerJoin('p.buildingComplex', 'bc')
141
- .innerJoin('bc.buildings', 'b')
142
- .innerJoin('b.buildingLevels', 'bl')
143
- .leftJoin('building_inspections', 'bi', 'bi.building_level_id = bl.id AND bi.deleted_at IS NULL')
135
+ .innerJoin('building_levels', 'bl', 'bi.building_level_id = bl.id')
136
+ .innerJoin('buildings', 'b', 'bl.building_id = b.id')
137
+ .innerJoin('building_complexes', 'bc', 'b.building_complex_id = bc.id')
138
+ .innerJoin('projects', 'p', 'bc.id = p.building_complex_id')
144
139
  .where('p.domain = :domain', { domain: domain.id })
145
140
  .andWhere('p.id = :projectId', { projectId })
146
141
  .andWhere('bi.project_type = :projectType', { projectType })
@@ -159,7 +154,7 @@ let BuildingInspectionQuery = class BuildingInspectionQuery {
159
154
  async buildingLevel(buildingInspection) {
160
155
  return await (0, shell_1.getRepository)(building_complex_1.BuildingLevel).findOneBy({ id: buildingInspection.buildingLevelId });
161
156
  }
162
- async attatchments(buildingInspection) {
157
+ async attachments(buildingInspection) {
163
158
  const attachment = await (0, shell_1.getRepository)(attachment_base_1.Attachment).find({
164
159
  where: {
165
160
  refType: building_inspection_1.BuildingInspection.name,
@@ -207,14 +202,6 @@ tslib_1.__decorate([
207
202
  tslib_1.__metadata("design:paramtypes", [building_inspection_type_1.BuildingInspectionsOfProject, Object]),
208
203
  tslib_1.__metadata("design:returntype", Promise)
209
204
  ], BuildingInspectionQuery.prototype, "buildingInspectionsOfProject", null);
210
- tslib_1.__decorate([
211
- (0, type_graphql_1.Query)(returns => project_1.Project, { description: 'To fetch Project' }),
212
- tslib_1.__param(0, (0, type_graphql_1.Arg)('buildingLevelId')),
213
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
214
- tslib_1.__metadata("design:type", Function),
215
- tslib_1.__metadata("design:paramtypes", [String, Object]),
216
- tslib_1.__metadata("design:returntype", Promise)
217
- ], BuildingInspectionQuery.prototype, "projectByBuildingLevelId", null);
218
205
  tslib_1.__decorate([
219
206
  (0, type_graphql_1.Query)(returns => building_inspection_type_1.BuildingInspectionList, { description: 'To fetch multiple BuildingInspections' }),
220
207
  tslib_1.__param(0, (0, type_graphql_1.Arg)('params')),
@@ -276,9 +263,9 @@ tslib_1.__decorate([
276
263
  tslib_1.__metadata("design:type", Function),
277
264
  tslib_1.__metadata("design:paramtypes", [building_inspection_1.BuildingInspection]),
278
265
  tslib_1.__metadata("design:returntype", Promise)
279
- ], BuildingInspectionQuery.prototype, "attatchments", null);
266
+ ], BuildingInspectionQuery.prototype, "attachments", null);
280
267
  tslib_1.__decorate([
281
- (0, type_graphql_1.FieldResolver)(type => project_1.ManagerOutput),
268
+ (0, type_graphql_1.FieldResolver)(type => building_inspection_type_1.ProjectManagerOutput),
282
269
  tslib_1.__param(0, (0, type_graphql_1.Root)()),
283
270
  tslib_1.__metadata("design:type", Function),
284
271
  tslib_1.__metadata("design:paramtypes", [building_inspection_1.BuildingInspection]),