@dssp/project 1.0.0-alpha.8 → 1.0.0-alpha.81

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 (155) 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/project/component/pagenation.d.ts +18 -0
  11. package/dist-client/pages/project/component/pagenation.js +142 -0
  12. package/dist-client/pages/project/component/pagenation.js.map +1 -0
  13. package/dist-client/pages/project/component/project-update-header.js +26 -3
  14. package/dist-client/pages/project/component/project-update-header.js.map +1 -1
  15. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.d.ts +1 -0
  16. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js +308 -0
  17. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +1 -0
  18. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.d.ts +1 -0
  19. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js +356 -0
  20. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +1 -0
  21. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.d.ts +1 -0
  22. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js +681 -0
  23. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +1 -0
  24. package/dist-client/pages/project/popup/checklist/task-checklist-view.d.ts +32 -0
  25. package/dist-client/pages/project/popup/checklist/task-checklist-view.js +620 -0
  26. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +1 -0
  27. package/dist-client/pages/project/popup/popup-plan-export.js +8 -2
  28. package/dist-client/pages/project/popup/popup-plan-export.js.map +1 -1
  29. package/dist-client/pages/project/popup/{popup-schedule-upload.d.ts → popup-task-upload.d.ts} +1 -1
  30. package/dist-client/pages/project/popup/{popup-schedule-upload.js → popup-task-upload.js} +9 -9
  31. package/dist-client/pages/project/popup/popup-task-upload.js.map +1 -0
  32. package/dist-client/pages/project/project-completed-list.d.ts +5 -0
  33. package/dist-client/pages/project/project-completed-list.js +32 -3
  34. package/dist-client/pages/project/project-completed-list.js.map +1 -1
  35. package/dist-client/pages/project/project-detail.d.ts +6 -0
  36. package/dist-client/pages/project/project-detail.js +225 -89
  37. package/dist-client/pages/project/project-detail.js.map +1 -1
  38. package/dist-client/pages/project/project-list.d.ts +57 -0
  39. package/dist-client/pages/project/project-list.js +80 -9
  40. package/dist-client/pages/project/project-list.js.map +1 -1
  41. package/dist-client/pages/project/project-plan-management.js +6 -1
  42. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  43. package/dist-client/pages/project/project-setting-list.d.ts +7 -0
  44. package/dist-client/pages/project/project-setting-list.js +61 -7
  45. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  46. package/dist-client/pages/project/{project-schedule-list.d.ts → project-task-list.d.ts} +2 -2
  47. package/dist-client/pages/project/{project-schedule-list.js → project-task-list.js} +11 -11
  48. package/dist-client/pages/project/project-task-list.js.map +1 -0
  49. package/dist-client/pages/project/{project-schedule.d.ts → project-task.d.ts} +17 -4
  50. package/dist-client/pages/project/project-task.js +691 -0
  51. package/dist-client/pages/project/project-task.js.map +1 -0
  52. package/dist-client/pages/project/project-update.d.ts +34 -0
  53. package/dist-client/pages/project/project-update.js +508 -35
  54. package/dist-client/pages/project/project-update.js.map +1 -1
  55. package/dist-client/pages/resource/construction-type-management.js +14 -0
  56. package/dist-client/pages/resource/construction-type-management.js.map +1 -1
  57. package/dist-client/pages/resource/resource-list-page.d.ts +1 -2
  58. package/dist-client/pages/resource/resource-list-page.js +1 -2
  59. package/dist-client/pages/resource/resource-list-page.js.map +1 -1
  60. package/dist-client/pages/task/task-list-page.d.ts +1 -2
  61. package/dist-client/pages/task/task-list-page.js +1 -2
  62. package/dist-client/pages/task/task-list-page.js.map +1 -1
  63. package/dist-client/pages/task-resource/task-resource-list-page.d.ts +1 -2
  64. package/dist-client/pages/task-resource/task-resource-list-page.js +1 -2
  65. package/dist-client/pages/task-resource/task-resource-list-page.js.map +1 -1
  66. package/dist-client/route.d.ts +1 -1
  67. package/dist-client/route.js +4 -4
  68. package/dist-client/route.js.map +1 -1
  69. package/dist-client/shared/domain-context.d.ts +18 -0
  70. package/dist-client/shared/domain-context.js +28 -0
  71. package/dist-client/shared/domain-context.js.map +1 -0
  72. package/dist-client/tsconfig.tsbuildinfo +1 -1
  73. package/dist-client/viewparts/domain-switch.d.ts +19 -0
  74. package/dist-client/viewparts/domain-switch.js +266 -0
  75. package/dist-client/viewparts/domain-switch.js.map +1 -0
  76. package/dist-server/controllers/parse-excel.js.map +1 -1
  77. package/dist-server/migrations/1723861466414-seed-codes.js +1 -1
  78. package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -1
  79. package/dist-server/service/construction-type/construction-type-query.d.ts +2 -2
  80. package/dist-server/service/construction-type/construction-type-query.js +5 -10
  81. package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
  82. package/dist-server/service/construction-type/construction-type-type.d.ts +1 -0
  83. package/dist-server/service/construction-type/construction-type-type.js +4 -0
  84. package/dist-server/service/construction-type/construction-type-type.js.map +1 -1
  85. package/dist-server/service/construction-type/construction-type.d.ts +1 -0
  86. package/dist-server/service/construction-type/construction-type.js +5 -0
  87. package/dist-server/service/construction-type/construction-type.js.map +1 -1
  88. package/dist-server/service/index.d.ts +2 -2
  89. package/dist-server/service/index.js +5 -2
  90. package/dist-server/service/index.js.map +1 -1
  91. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +2 -2
  92. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +5 -10
  93. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -1
  94. package/dist-server/service/manager/manager-query.d.ts +1 -1
  95. package/dist-server/service/manager/manager-query.js +2 -6
  96. package/dist-server/service/manager/manager-query.js.map +1 -1
  97. package/dist-server/service/project/issue-project-code.d.ts +7 -0
  98. package/dist-server/service/project/issue-project-code.js +27 -0
  99. package/dist-server/service/project/issue-project-code.js.map +1 -0
  100. package/dist-server/service/project/project-mutation.d.ts +2 -0
  101. package/dist-server/service/project/project-mutation.js +109 -11
  102. package/dist-server/service/project/project-mutation.js.map +1 -1
  103. package/dist-server/service/project/project-query.d.ts +13 -2
  104. package/dist-server/service/project/project-query.js +138 -13
  105. package/dist-server/service/project/project-query.js.map +1 -1
  106. package/dist-server/service/project/project-type.d.ts +10 -2
  107. package/dist-server/service/project/project-type.js +32 -2
  108. package/dist-server/service/project/project-type.js.map +1 -1
  109. package/dist-server/service/project/project.d.ts +22 -0
  110. package/dist-server/service/project/project.js +84 -2
  111. package/dist-server/service/project/project.js.map +1 -1
  112. package/dist-server/service/resource/resource-mutation.js +5 -6
  113. package/dist-server/service/resource/resource-mutation.js.map +1 -1
  114. package/dist-server/service/resource/resource-query.d.ts +2 -2
  115. package/dist-server/service/resource/resource-query.js +5 -10
  116. package/dist-server/service/resource/resource-query.js.map +1 -1
  117. package/dist-server/service/task/task-query.d.ts +2 -0
  118. package/dist-server/service/task/task-query.js +11 -0
  119. package/dist-server/service/task/task-query.js.map +1 -1
  120. package/dist-server/service/task/task.d.ts +2 -0
  121. package/dist-server/service/task/task.js +6 -0
  122. package/dist-server/service/task/task.js.map +1 -1
  123. package/dist-server/service/task-checklist-binding/index.d.ts +5 -0
  124. package/dist-server/service/task-checklist-binding/index.js +9 -0
  125. package/dist-server/service/task-checklist-binding/index.js.map +1 -0
  126. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +5 -0
  127. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +186 -0
  128. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +1 -0
  129. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +8 -0
  130. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +61 -0
  131. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +1 -0
  132. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +15 -0
  133. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +57 -0
  134. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +1 -0
  135. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +22 -0
  136. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +106 -0
  137. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +1 -0
  138. package/dist-server/service/task-resource/task-resource-query.d.ts +2 -2
  139. package/dist-server/service/task-resource/task-resource-query.js +4 -9
  140. package/dist-server/service/task-resource/task-resource-query.js.map +1 -1
  141. package/dist-server/service/worker-type/worker-type-query.d.ts +2 -2
  142. package/dist-server/service/worker-type/worker-type-query.js +5 -10
  143. package/dist-server/service/worker-type/worker-type-query.js.map +1 -1
  144. package/dist-server/tsconfig.tsbuildinfo +1 -1
  145. package/package.json +15 -13
  146. package/things-factory.config.js +3 -3
  147. package/translations/en.json +10 -9
  148. package/translations/ja.json +15 -1
  149. package/translations/ko.json +3 -0
  150. package/translations/ms.json +15 -1
  151. package/translations/zh.json +15 -1
  152. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +0 -1
  153. package/dist-client/pages/project/project-schedule-list.js.map +0 -1
  154. package/dist-client/pages/project/project-schedule.js +0 -407
  155. package/dist-client/pages/project/project-schedule.js.map +0 -1
@@ -0,0 +1,691 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import '@material/web/button/elevated-button.js';
4
+ import '@material/web/textfield/outlined-text-field.js';
5
+ import '@material/web/button/filled-button.js';
6
+ import '@material/web/button/outlined-button.js';
7
+ import { PageView } from '@operato/shell';
8
+ import { css, html } from 'lit';
9
+ import { customElement, query, state } from 'lit/decorators.js';
10
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
11
+ import { client } from '@operato/graphql';
12
+ import { i18next } from '@operato/i18n';
13
+ import { notify, openPopup } from '@operato/layout';
14
+ import gql from 'graphql-tag';
15
+ import { ScrollbarStyles } from '@operato/styles';
16
+ import { verifyBiometric } from '@things-factory/auth-base/dist-client';
17
+ import { BuildingInspectionStatus } from './popup/checklist/task-checklist-view';
18
+ import { isProjectTypeDomain } from '../../shared/domain-context';
19
+ import '@operato/gantt/ox-gantt.js';
20
+ import './popup/popup-task-upload';
21
+ import './popup/checklist/task-checklist-create-popup';
22
+ import './popup/checklist/task-checklist-view';
23
+ const TaskFragment = gql `
24
+ fragment TaskFragment on Task {
25
+ type
26
+ title: name
27
+ id: code
28
+ duration
29
+ startDate
30
+ endDate
31
+ dependsOn
32
+ progress
33
+ style
34
+ taskChecklistBinding {
35
+ id
36
+ status
37
+ }
38
+ resources {
39
+ type
40
+ allocated
41
+ }
42
+ }
43
+ `;
44
+ let ProjectTask = class ProjectTask extends ScopedElementsMixin(PageView) {
45
+ constructor() {
46
+ super(...arguments);
47
+ this.defaultProject = {
48
+ name: '',
49
+ buildingComplex: {
50
+ address: '',
51
+ area: 0,
52
+ constructionCompany: '',
53
+ clientCompany: '',
54
+ supervisoryCompany: '',
55
+ designCompany: '',
56
+ constructionType: '',
57
+ buildings: []
58
+ }
59
+ };
60
+ this.projectId = '';
61
+ this.project = Object.assign({}, this.defaultProject);
62
+ this.selectedBuildingIdx = 0;
63
+ this.constructionTypeList = [];
64
+ this.selectedChecklist = {};
65
+ this.selectedConstructionTypeId = '';
66
+ this.fromDate = '2024-01-01';
67
+ this.toDate = '2026-12-31';
68
+ this.selectedFromDate = '';
69
+ this.selectedToDate = '';
70
+ this.timeScale = 'week-day';
71
+ this.extendGridLines = false;
72
+ this.columnConfigProvider = function () {
73
+ return [
74
+ { name: 'title', label: i18next.t('label.gantt-task-title') || 'title', visible: true, width: 150, order: 1 },
75
+ {
76
+ name: 'startDate',
77
+ label: i18next.t('label.gantt-task-start-date') || 'start date',
78
+ visible: true,
79
+ width: 100,
80
+ order: 2
81
+ },
82
+ {
83
+ name: 'resources',
84
+ label: i18next.t('label.gantt-task-resources') || 'resources',
85
+ visible: true,
86
+ width: 100,
87
+ order: 3
88
+ },
89
+ {
90
+ name: 'duration',
91
+ label: i18next.t('label.gantt-task-duration') || 'duration',
92
+ visible: true,
93
+ width: 30,
94
+ order: 4
95
+ }
96
+ ];
97
+ };
98
+ }
99
+ get context() {
100
+ var _a;
101
+ return {
102
+ title: !isProjectTypeDomain() && ((_a = this.project) === null || _a === void 0 ? void 0 : _a.name)
103
+ ? `공정표 - ${this.project.name}`
104
+ : '공정표'
105
+ };
106
+ }
107
+ render() {
108
+ var _a;
109
+ return html `
110
+ <div header>
111
+ <h2>
112
+ <md-icon slot="icon" back @click=${() => history.back()}>arrow_back</md-icon>
113
+ ${this.project.name}
114
+ </h2>
115
+ <div button-container>
116
+ <md-elevated-button @click=${this._openUploadSchedulePopup}>
117
+ <md-icon slot="icon">event_note</md-icon>공정표 관리
118
+ </md-elevated-button>
119
+ </div>
120
+ </div>
121
+
122
+ <div body>
123
+ <ox-gantt
124
+ from-date=${new Date(this.fromDate).toISOString().split('T')[0]}
125
+ to-date=${new Date(this.toDate).toISOString().split('T')[0]}
126
+ .timeScale=${this.timeScale}
127
+ .tasks=${this.tasks}
128
+ @date-range-selected=${this.onRangeSelected}
129
+ @task-clicked=${(e) => {
130
+ console.log('task-clicked', e.detail);
131
+ }}
132
+ ?extend-grid-lines=${this.extendGridLines}
133
+ .columnConfigProvider=${this.columnConfigProvider}
134
+ .colorProvider=${task => {
135
+ return task.style || 'gray';
136
+ }}
137
+ >
138
+ </ox-gantt>
139
+ <div select-container>
140
+ <div date>
141
+ <span name>기간선택</span>
142
+ <div @change=${() => this.onChangePeriodRange()}>
143
+ <input type="date" name="startDate" project .value=${this.project.startDate || ''} max="9999-12-31" />
144
+ ~
145
+ <input type="date" name="endDate" project .value=${this.project.endDate || ''} max="9999-12-31" />
146
+ </div>
147
+ </div>
148
+ <div construction-list-container>
149
+ ${(_a = this.constructionTypeList) === null || _a === void 0 ? void 0 : _a.map((constructionType) => {
150
+ var _a, _b, _c;
151
+ return html ` <md-outlined-button
152
+ id=${constructionType.id}
153
+ ?selected=${this.selectedConstructionTypeId === constructionType.id}
154
+ ?pass=${((_a = constructionType.taskChecklistBinding) === null || _a === void 0 ? void 0 : _a.status) === BuildingInspectionStatus.PASS}
155
+ ?fail=${((_b = constructionType.taskChecklistBinding) === null || _b === void 0 ? void 0 : _b.status) === BuildingInspectionStatus.FAIL}
156
+ @click=${() => this.onClickTaskChecklist(constructionType)}
157
+ >
158
+ <div icon-container>
159
+ ${this._getIconHtmlByStatus((_c = constructionType.taskChecklistBinding) === null || _c === void 0 ? void 0 : _c.status)} ${constructionType.title}
160
+ </div>
161
+ </md-outlined-button>`;
162
+ })}
163
+ </div>
164
+ </div>
165
+ </div>
166
+ `;
167
+ }
168
+ async pageInitialized(lifecycle) { }
169
+ async pageUpdated(changes, lifecycle) {
170
+ if (this.active) {
171
+ this.projectId = lifecycle.resourceId || '';
172
+ await this.initProject(this.projectId);
173
+ }
174
+ }
175
+ async initProject(projectId = '') {
176
+ var _a, _b;
177
+ const response = await client.query({
178
+ query: gql `
179
+ query Project($id: String!, $sortings: [Sorting!]) {
180
+ project(id: $id) {
181
+ id
182
+ name
183
+ startDate
184
+ endDate
185
+ rootTasks {
186
+ ...TaskFragment
187
+ children(sortings: $sortings) {
188
+ ...TaskFragment
189
+ children(sortings: $sortings) {
190
+ ...TaskFragment
191
+ }
192
+ }
193
+ }
194
+ scheduleTable {
195
+ id
196
+ name
197
+ }
198
+ buildingComplex {
199
+ id
200
+ planXScale
201
+ planYScale
202
+ taskConstructorEmails
203
+ overallConstructorEmails
204
+ taskSupervisoryEmails
205
+ overallSupervisoryEmails
206
+ buildings {
207
+ id
208
+ name
209
+ drawing {
210
+ id
211
+ name
212
+ }
213
+ buildingLevels {
214
+ id
215
+ floor
216
+ mainDrawing {
217
+ id
218
+ name
219
+ }
220
+ }
221
+ }
222
+ }
223
+ }
224
+ }
225
+
226
+ ${TaskFragment}
227
+ `,
228
+ variables: {
229
+ id: projectId,
230
+ sortings: [{ name: 'startDate' }]
231
+ }
232
+ });
233
+ this.project = (_a = response.data) === null || _a === void 0 ? void 0 : _a.project;
234
+ this.tasks = (_b = response.data) === null || _b === void 0 ? void 0 : _b.project.rootTasks;
235
+ if (this.project) {
236
+ this.fromDate = this.project.startDate || '2024-01-01'; /* TODO default: start date of this year - 3 */
237
+ this.toDate = this.project.endDate || '2026-12-31'; /* TODO defaule: end date of this year + 3 */
238
+ }
239
+ this.updateContext();
240
+ }
241
+ onChangePeriodRange() {
242
+ this.fromDate = this.inputStartDate.value;
243
+ this.toDate = this.inputEndDate.value;
244
+ }
245
+ onRangeSelected(event) {
246
+ var _a, _b;
247
+ if (event) {
248
+ this.selectedFromDate = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.start;
249
+ this.selectedToDate = (_b = event.detail) === null || _b === void 0 ? void 0 : _b.end;
250
+ }
251
+ const selectedFromDate = new Date(this.selectedFromDate + 'T00:00:00.000Z');
252
+ const selectedToDate = new Date(this.selectedToDate + 'T23:59:59.000Z');
253
+ this.constructionTypeList = this.tasks.filter(constuction => {
254
+ const constuctionStartDate = new Date(constuction.startDate);
255
+ const constuctionEndDate = new Date(constuction.endDate);
256
+ return constuctionStartDate <= selectedToDate && constuctionEndDate >= selectedFromDate;
257
+ });
258
+ }
259
+ _openUploadSchedulePopup() {
260
+ var _a;
261
+ openPopup(html `<popup-task-upload
262
+ .projectId=${this.projectId}
263
+ .scheduleTable=${(_a = this.project) === null || _a === void 0 ? void 0 : _a.scheduleTable}
264
+ @uploaded=${() => this.initProject(this.projectId)}
265
+ ></popup-task-upload>`, { backdrop: true, size: 'medium', title: '공정표 업로드' });
266
+ }
267
+ async onClickTaskChecklist(constructionType) {
268
+ // 선택된 공종 설정
269
+ this.selectedConstructionTypeId = constructionType.id;
270
+ // 체크리스트가 있으면 수정 모드, 없으면 생성 모드
271
+ if (constructionType.taskChecklistBinding) {
272
+ const taskChecklistBinding = await this._getTaskChecklistBindingById(constructionType.taskChecklistBinding.id);
273
+ this.selectedChecklist = Object.assign(Object.assign({}, taskChecklistBinding.checklist), { status: taskChecklistBinding.status });
274
+ this._openUpdateTaskChecklistPopup(constructionType);
275
+ }
276
+ else {
277
+ this._openCreateChecklistPopup(constructionType);
278
+ }
279
+ }
280
+ _openCreateChecklistPopup(constructionType) {
281
+ openPopup(html `<task-checklist-create-popup
282
+ .projectId=${this.projectId}
283
+ .taskCode=${constructionType.id}
284
+ @requestRefresh="${async () => {
285
+ await this.initProject(this.projectId);
286
+ this.onRangeSelected(null);
287
+ }}"
288
+ ></task-checklist-create-popup>`, {
289
+ backdrop: true,
290
+ size: 'large',
291
+ title: `체크리스트 생성`
292
+ });
293
+ }
294
+ _openUpdateTaskChecklistPopup(constructionType) {
295
+ var _a;
296
+ openPopup(html `
297
+ <div style="overflow-y: auto; height: 100%;">
298
+ <task-checklist-view
299
+ .mode=${"EDITOR" /* ChecklistMode.EDITOR */}
300
+ .status=${this.selectedChecklist.status}
301
+ .checklist=${this.selectedChecklist || {}}
302
+ .buildingComplex=${((_a = this.project) === null || _a === void 0 ? void 0 : _a.buildingComplex) || {}}
303
+ ></task-checklist-view>
304
+
305
+ <div style="text-align: right; margin-right: 20px; margin-bottom: 15px">
306
+ <md-elevated-button
307
+ ?disabled=${this.selectedChecklist.status == BuildingInspectionStatus.PASS}
308
+ @click=${this._onClickModifyChecklist.bind(this)}
309
+ >
310
+ <md-icon slot="icon">assignment</md-icon>등록
311
+ </md-elevated-button>
312
+ </div>
313
+ </div>
314
+ `, { backdrop: true, size: 'large', title: constructionType.title });
315
+ }
316
+ _onClickModifyChecklist() {
317
+ this.validateChecklist(this.selectedChecklist);
318
+ }
319
+ async validateChecklist(checklist) {
320
+ var _a, _b;
321
+ try {
322
+ const result = await verifyBiometric();
323
+ if (result.verified) {
324
+ console.log('Verification successful. Proceeding with sensitive action.');
325
+ }
326
+ else {
327
+ notify({ message: 'Verification failed:' + result.message });
328
+ return;
329
+ }
330
+ }
331
+ catch (error) {
332
+ notify({ message: 'Error during biometric verification:' + error });
333
+ return;
334
+ }
335
+ const response = await client.mutate({
336
+ mutation: gql `
337
+ mutation UpdateTaskChecklist($taskChecklist: UpdateTaskChecklistSubmitType!) {
338
+ updateTaskChecklist(taskChecklist: $taskChecklist)
339
+ }
340
+ `,
341
+ variables: {
342
+ taskChecklist: {
343
+ checklistId: checklist.id,
344
+ checklist: {
345
+ id: checklist.id,
346
+ overallConstructorSignature: checklist.overallConstructorSignature,
347
+ taskConstructorSignature: checklist.taskConstructorSignature,
348
+ overallSupervisorySignature: checklist.overallSupervisorySignature,
349
+ taskSupervisorySignature: checklist.taskSupervisorySignature
350
+ },
351
+ checklistItem: checklist.checklistItems.map(item => ({
352
+ id: item.id,
353
+ constructionConfirmStatus: item.constructionConfirmStatus,
354
+ supervisoryConfirmStatus: item.supervisoryConfirmStatus
355
+ }))
356
+ }
357
+ }
358
+ });
359
+ if (!response.errors) {
360
+ notify({ message: '검측 요청서를 등록하였습니다.' });
361
+ await this.initProject(this.projectId);
362
+ this.onRangeSelected(null);
363
+ history.back();
364
+ }
365
+ else {
366
+ notify({ message: ((_b = (_a = response.errors) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) || '검측 요청서 등록에 실패하였습니다.', level: 'error' });
367
+ }
368
+ }
369
+ _getIconHtmlByStatus(status) {
370
+ if (!status)
371
+ return '';
372
+ if (status == BuildingInspectionStatus.WAIT || status == BuildingInspectionStatus.OVERALL_WAIT) {
373
+ return html `<md-icon request>frame_inspect</md-icon>`;
374
+ }
375
+ if (status == BuildingInspectionStatus.REQUEST || status == BuildingInspectionStatus.OVERALL_REQUEST) {
376
+ return html `<md-icon request>exclamation</md-icon>`;
377
+ }
378
+ if (status == BuildingInspectionStatus.PASS) {
379
+ return html `<md-icon pass>check</md-icon>`;
380
+ }
381
+ return html `<md-icon fail>close</md-icon>`;
382
+ }
383
+ async _getTaskChecklistBindingById(id) {
384
+ var _a;
385
+ const response = await client.query({
386
+ query: gql `
387
+ query TaskChecklistBinding($id: String!) {
388
+ taskChecklistBinding(id: $id) {
389
+ id
390
+ status
391
+
392
+ checklist {
393
+ id
394
+ name
395
+ constructionType
396
+ constructionDetailType
397
+ location
398
+ inspectionParts
399
+ documentNo
400
+ constructionInspectionDate
401
+ supervisorInspectionDate
402
+ overallConstructorSignature
403
+ taskConstructorSignature
404
+ overallSupervisorySignature
405
+ taskSupervisorySignature
406
+
407
+ checklistItems {
408
+ id
409
+ name
410
+ sequence
411
+ mainType
412
+ detailType
413
+ inspctionCriteria
414
+ constructionConfirmStatus
415
+ supervisoryConfirmStatus
416
+ checklistItemCommentCount
417
+ checklistItemAttachmentCount
418
+ }
419
+ }
420
+
421
+ manager {
422
+ userId
423
+ name
424
+ }
425
+ }
426
+ }
427
+ `,
428
+ variables: { id }
429
+ });
430
+ if (response.errors)
431
+ return;
432
+ return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.taskChecklistBinding) || {};
433
+ }
434
+ };
435
+ ProjectTask.styles = [
436
+ ScrollbarStyles,
437
+ css `
438
+ :host {
439
+ display: flex;
440
+ flex-direction: column;
441
+
442
+ color: #4e5055;
443
+
444
+ width: 100%;
445
+ background-color: var(--md-sys-color-background, #f6f6f6);
446
+ overflow-y: auto;
447
+
448
+ --grid-record-emphasized-background-color: red;
449
+ --grid-record-emphasized-color: yellow;
450
+ }
451
+
452
+ *[bold] {
453
+ font-weight: bold;
454
+ }
455
+
456
+ div[header] {
457
+ display: flex;
458
+ margin: 0px var(--spacing-large, 12px);
459
+
460
+ h2 {
461
+ display: flex;
462
+ gap: 7px;
463
+ flex: 0.5;
464
+ color: #3f71a0;
465
+ font-size: 18px;
466
+
467
+ md-icon[back] {
468
+ background: linear-gradient(135deg, #3f71a0 0%, #5a8cc7 100%);
469
+ color: white;
470
+ padding: 8px;
471
+ border-radius: 50%;
472
+ cursor: pointer;
473
+ box-shadow: 0 2px 8px rgba(63, 113, 160, 0.3);
474
+ width: 14px;
475
+ height: 14px;
476
+ --md-icon-size: 20px;
477
+ }
478
+
479
+ md-icon[back]:hover {
480
+ background: linear-gradient(135deg, #2e5c89 0%, #4a7bb0 100%);
481
+ box-shadow: 0 4px 12px rgba(63, 113, 160, 0.4);
482
+ }
483
+ }
484
+
485
+ div[button-container] {
486
+ display: flex;
487
+ align-items: center;
488
+ justify-content: end;
489
+ flex: 0.5;
490
+
491
+ md-elevated-button {
492
+ margin: 0px;
493
+ margin-left: var(--spacing-small, 4px);
494
+
495
+ --md-elevated-button-container-height: 32px;
496
+ --md-elevated-button-label-text-size: 16px;
497
+ --md-elevated-button-container-color: #0595e5;
498
+
499
+ --md-elevated-button-label-text-color: var(--md-sys-color-on-primary);
500
+ --md-elevated-button-hover-label-text-color: var(--md-sys-color-on-primary);
501
+ --md-elevated-button-pressed-label-text-color: var(--md-sys-color-on-primary);
502
+ --md-elevated-button-focus-label-text-color: var(--md-sys-color-on-primary);
503
+ --md-elevated-button-icon-color: var(--md-sys-color-on-primary);
504
+ --md-elevated-button-hover-icon-color: var(--md-sys-color-on-primary);
505
+ --md-elevated-button-pressed-icon-color: var(--md-sys-color-on-primary);
506
+ --md-elevated-button-focus-icon-color: var(--md-sys-color-on-primary);
507
+ }
508
+ }
509
+ }
510
+
511
+ div[body] {
512
+ flex: 1;
513
+
514
+ display: flex;
515
+ flex-direction: column;
516
+ margin: var(--spacing-large, 12px);
517
+ margin-top: 0;
518
+ gap: var(--spacing-medium, 8px);
519
+ overflow: hidden;
520
+
521
+ h3 {
522
+ color: #2e79be;
523
+ font-size: 16px;
524
+ margin: 0px;
525
+ }
526
+
527
+ & > div {
528
+ display: flex;
529
+ border-radius: 5px;
530
+ }
531
+
532
+ ox-gantt {
533
+ flex: 1;
534
+ box-sizing: border-box;
535
+ overflow: hidden;
536
+
537
+ background-color: var(--md-sys-color-primary-container);
538
+ color: var(--md-sys-color-on-primary-container);
539
+ }
540
+
541
+ div[select-container] {
542
+ gap: var(--spacing-medium, 8px);
543
+
544
+ div[date] {
545
+ display: flex;
546
+ align-items: center;
547
+ justify-content: space-between;
548
+ background-color: #2ea4df1a;
549
+ border: 1px solid #2ea4df33;
550
+ border-radius: 5px;
551
+ gap: var(--spacing-medium, 8px);
552
+ padding: 12px 36px 12px 15px;
553
+
554
+ span[name] {
555
+ font-size: 16px;
556
+ font-weight: bold;
557
+ }
558
+
559
+ input[type='date'] {
560
+ border: 1px solid rgba(51, 51, 51, 0.2);
561
+ padding: var(--spacing-small, 4px) var(--spacing-medium, 8px);
562
+ border-radius: 5px;
563
+ }
564
+ }
565
+
566
+ div[construction-list-container] {
567
+ flex: 1;
568
+ display: flex;
569
+ border-radius: 5px;
570
+ border: 1px solid #cccccc80;
571
+ background-color: #fff;
572
+ padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);
573
+ gap: var(--spacing-medium, 8px);
574
+ overflow-x: auto;
575
+
576
+ md-outlined-button {
577
+ --md-outlined-button-container-height: 30px;
578
+ --md-outlined-button-trailing-space: var(--spacing-medium, 8px);
579
+ --md-outlined-button-leading-space: var(--spacing-medium, 8px);
580
+ --md-outlined-button-label-text-color: #586878;
581
+ --md-sys-color-outline: rgba(51, 51, 51, 0.2);
582
+ box-shadow: 1px 1px 1px #0000001a;
583
+ padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);
584
+ font-weight: 700;
585
+
586
+ &[selected] {
587
+ --md-outlined-button-label-text-color: #0595e5 !important;
588
+ --md-sys-color-outline: #0595e5 !important;
589
+ background-color: #0595e51a !important;
590
+ }
591
+
592
+ &[pass] {
593
+ --md-outlined-button-label-text-color: #4bbb4a;
594
+ --md-sys-color-outline: #4bbb4a;
595
+ background-color: #4bbb4a1a;
596
+ }
597
+ &[fail] {
598
+ --md-outlined-button-label-text-color: #ff4444;
599
+ --md-sys-color-outline: #ff4444;
600
+ background-color: #ff44441a;
601
+ }
602
+ }
603
+
604
+ div[icon-container] {
605
+ display: flex;
606
+ align-items: center;
607
+ gap: 4px;
608
+
609
+ md-icon[request],
610
+ md-icon[pass],
611
+ md-icon[fail] {
612
+ width: 16px;
613
+ height: 16px;
614
+ margin-right: 4px;
615
+ border-radius: 3px;
616
+ font-size: 14px;
617
+ font-weight: 700;
618
+ color: #fff;
619
+ }
620
+ md-icon[request] {
621
+ background-color: #4e5055;
622
+ }
623
+ md-icon[pass] {
624
+ background-color: #4bbb4a;
625
+ }
626
+ md-icon[fail] {
627
+ background-color: #ff4444;
628
+ }
629
+ }
630
+ }
631
+ }
632
+ }
633
+ `
634
+ ];
635
+ __decorate([
636
+ state(),
637
+ __metadata("design:type", String)
638
+ ], ProjectTask.prototype, "projectId", void 0);
639
+ __decorate([
640
+ state(),
641
+ __metadata("design:type", Object)
642
+ ], ProjectTask.prototype, "project", void 0);
643
+ __decorate([
644
+ state(),
645
+ __metadata("design:type", Number)
646
+ ], ProjectTask.prototype, "selectedBuildingIdx", void 0);
647
+ __decorate([
648
+ state(),
649
+ __metadata("design:type", Object)
650
+ ], ProjectTask.prototype, "tasks", void 0);
651
+ __decorate([
652
+ state(),
653
+ __metadata("design:type", Object)
654
+ ], ProjectTask.prototype, "constructionTypeList", void 0);
655
+ __decorate([
656
+ state(),
657
+ __metadata("design:type", Object)
658
+ ], ProjectTask.prototype, "selectedChecklist", void 0);
659
+ __decorate([
660
+ state(),
661
+ __metadata("design:type", String)
662
+ ], ProjectTask.prototype, "selectedConstructionTypeId", void 0);
663
+ __decorate([
664
+ state(),
665
+ __metadata("design:type", Object)
666
+ ], ProjectTask.prototype, "fromDate", void 0);
667
+ __decorate([
668
+ state(),
669
+ __metadata("design:type", Object)
670
+ ], ProjectTask.prototype, "toDate", void 0);
671
+ __decorate([
672
+ state(),
673
+ __metadata("design:type", Object)
674
+ ], ProjectTask.prototype, "selectedFromDate", void 0);
675
+ __decorate([
676
+ state(),
677
+ __metadata("design:type", Object)
678
+ ], ProjectTask.prototype, "selectedToDate", void 0);
679
+ __decorate([
680
+ query('input[name="startDate"]'),
681
+ __metadata("design:type", HTMLInputElement)
682
+ ], ProjectTask.prototype, "inputStartDate", void 0);
683
+ __decorate([
684
+ query('input[name="endDate"]'),
685
+ __metadata("design:type", HTMLInputElement)
686
+ ], ProjectTask.prototype, "inputEndDate", void 0);
687
+ ProjectTask = __decorate([
688
+ customElement('project-task')
689
+ ], ProjectTask);
690
+ export { ProjectTask };
691
+ //# sourceMappingURL=project-task.js.map