@acorex-platform/module-maintenance-management-client 0.0.21

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 (45) hide show
  1. package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs +2698 -0
  2. package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-maintenance-management-client-contracts.mjs +405 -0
  4. package/fesm2022/acorex-platform-module-maintenance-management-client-contracts.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-xxvOfIxf.mjs +141 -0
  6. package/fesm2022/acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-xxvOfIxf.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-maintenance-management-client-failure-register-status.provider-CLBaQy_e.mjs +181 -0
  8. package/fesm2022/acorex-platform-module-maintenance-management-client-failure-register-status.provider-CLBaQy_e.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-maintenance-management-client-fill-work-report-completion.command-Capowl1e.mjs +174 -0
  10. package/fesm2022/acorex-platform-module-maintenance-management-client-fill-work-report-completion.command-Capowl1e.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-report-from-work-order.command-B0O4fWPt.mjs +105 -0
  12. package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-report-from-work-order.command-B0O4fWPt.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-CxRfaf0G.mjs +152 -0
  14. package/fesm2022/acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-CxRfaf0G.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-person-user-id.activity-nwXAJHkd.mjs +57 -0
  16. package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-person-user-id.activity-nwXAJHkd.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-work-order.activity-q5WM7Sv5.mjs +92 -0
  18. package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-work-order.activity-q5WM7Sv5.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B06a962Y.mjs +402 -0
  20. package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B06a962Y.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-completed.activity-Di4R6LQl.mjs +89 -0
  22. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-completed.activity-Di4R6LQl.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-CzkCCl1L.mjs +96 -0
  24. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-CzkCCl1L.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-report-on-completion.activity-_B0SUFtQ.mjs +142 -0
  26. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-report-on-completion.activity-_B0SUFtQ.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-maintenance-management-client-validate-work-order-completion.activity-RA2zaQHH.mjs +83 -0
  28. package/fesm2022/acorex-platform-module-maintenance-management-client-validate-work-order-completion.activity-RA2zaQHH.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-list-command-Bh_6PS5w.mjs +153 -0
  30. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-list-command-Bh_6PS5w.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-status.provider-DvBk5kAW.mjs +186 -0
  32. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-status.provider-DvBk5kAW.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-work-report-column.component-Bf1WZWIS.mjs +163 -0
  34. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-work-report-column.component-Bf1WZWIS.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-Dth3Z9fW.mjs +320 -0
  36. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-Dth3Z9fW.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs +74 -0
  38. package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs.map +1 -0
  39. package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-checklist-results-view.component-BSFW0Yt-.mjs +149 -0
  40. package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-checklist-results-view.component-BSFW0Yt-.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-module-maintenance-management-client.mjs +2 -0
  42. package/fesm2022/acorex-platform-module-maintenance-management-client.mjs.map +1 -0
  43. package/package.json +28 -0
  44. package/types/acorex-platform-module-maintenance-management-client-contracts.d.ts +1081 -0
  45. package/types/acorex-platform-module-maintenance-management-client.d.ts +54 -0
@@ -0,0 +1,105 @@
1
+ import { AXToastService } from '@acorex/components/toast';
2
+ import { AXTranslationService } from '@acorex/core/translation';
3
+ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
4
+ import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
5
+ import * as i0 from '@angular/core';
6
+ import { inject, Injectable } from '@angular/core';
7
+ import { defaultTo, get, isString } from 'lodash';
8
+ import { RootConfig } from '@acorex-platform/module-maintenance-management-client/contracts';
9
+ import { a as isWorkReportEditable } from './acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs';
10
+ import { FillWorkReportCompletionCommand } from './acorex-platform-module-maintenance-management-client-fill-work-report-completion.command-Capowl1e.mjs';
11
+
12
+ //#region ---- Imports ----
13
+ //#endregion
14
+ /**
15
+ * Opens an existing work report for a work order from grid/detail.
16
+ * Does not create work reports; shows a friendly message when none exists.
17
+ */
18
+ class OpenWorkReportFromWorkOrderCommand {
19
+ constructor() {
20
+ //#region ---- Services & Dependencies ----
21
+ this.entityService = inject(AXPEntityService);
22
+ this.commandService = inject(AXPCommandService);
23
+ this.fillCompletion = inject(FillWorkReportCompletionCommand);
24
+ this.toastService = inject(AXToastService);
25
+ this.translation = inject(AXTranslationService);
26
+ }
27
+ //#endregion
28
+ //#region ---- Command Implementation ----
29
+ async execute(input) {
30
+ const workOrderId = this.resolveText(input?.workOrderId);
31
+ if (!workOrderId) {
32
+ return { success: false, message: { text: 'workOrderId is required' } };
33
+ }
34
+ const workReport = await this.findWorkReportByWorkOrderId(workOrderId);
35
+ if (!workReport?.id) {
36
+ const content = await this.translation.translateAsync('@maintenance-management:work-reports.messages.not-created-yet');
37
+ this.toastService.show({
38
+ color: 'warning',
39
+ title: await this.translation.translateAsync('@general:messages.generic.warning.title'),
40
+ content,
41
+ closeButton: true,
42
+ });
43
+ return { success: true, kind: 'object', data: undefined };
44
+ }
45
+ const workOrder = (await this.entityService
46
+ .withEntity(RootConfig.module.name, RootConfig.entities.workOrder.name)
47
+ .data()
48
+ .byKey(workOrderId));
49
+ if (isWorkReportEditable(workReport, workOrder)) {
50
+ await this.fillCompletion.execute({
51
+ workReportId: workReport.id,
52
+ workOrderId,
53
+ persistOnSubmit: true,
54
+ });
55
+ return { success: true, kind: 'object', data: undefined };
56
+ }
57
+ await this.commandService.execute('Entity:View', {
58
+ entity: RootConfig.entities.workReport.source,
59
+ entityInfo: {
60
+ name: RootConfig.entities.workReport.name,
61
+ module: RootConfig.module.name,
62
+ title: RootConfig.entities.workReport.title,
63
+ parentKey: 'workOrderId',
64
+ source: RootConfig.entities.workReport.source,
65
+ },
66
+ data: workReport.id,
67
+ options: {
68
+ excludeProperties: ['workOrderId'],
69
+ },
70
+ });
71
+ return { success: true, kind: 'object', data: undefined };
72
+ }
73
+ //#endregion
74
+ //#region ---- Helpers ----
75
+ async findWorkReportByWorkOrderId(workOrderId) {
76
+ const page = await this.entityService
77
+ .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)
78
+ .data()
79
+ .query({
80
+ skip: 0,
81
+ take: 1,
82
+ filter: {
83
+ logic: 'and',
84
+ filters: [{ field: 'workOrderId', operator: { type: 'equal' }, value: workOrderId }],
85
+ },
86
+ });
87
+ const report = defaultTo(get(page, 'items[0]'), null);
88
+ return report?.id ? report : null;
89
+ }
90
+ resolveText(value) {
91
+ if (!isString(value)) {
92
+ return '';
93
+ }
94
+ return value.trim();
95
+ }
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OpenWorkReportFromWorkOrderCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
97
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OpenWorkReportFromWorkOrderCommand, providedIn: 'root' }); }
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OpenWorkReportFromWorkOrderCommand, decorators: [{
100
+ type: Injectable,
101
+ args: [{ providedIn: 'root' }]
102
+ }] });
103
+
104
+ export { OpenWorkReportFromWorkOrderCommand };
105
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-open-work-report-from-work-order.command-B0O4fWPt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-open-work-report-from-work-order.command-B0O4fWPt.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-report/commands/open-work-report-from-work-order.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get, isString } from 'lodash';\n\nimport { RootConfig } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport type { AXMMaintenanceManagementWorkOrderEntityModel } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport type { AXMMaintenanceManagementWorkReportEntityModel } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport { isWorkReportEditable } from '../work-report-assessment.util';\nimport { FillWorkReportCompletionCommand } from './fill-work-report-completion.command';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface OpenWorkReportFromWorkOrderInput {\n workOrderId: string;\n}\n\n//#endregion\n\n/**\n * Opens an existing work report for a work order from grid/detail.\n * Does not create work reports; shows a friendly message when none exists.\n */\n@Injectable({ providedIn: 'root' })\nexport class OpenWorkReportFromWorkOrderCommand implements AXPCommand<OpenWorkReportFromWorkOrderInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly commandService = inject(AXPCommandService);\n private readonly fillCompletion = inject(FillWorkReportCompletionCommand);\n private readonly toastService = inject(AXToastService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: OpenWorkReportFromWorkOrderInput): AXPCommandExecuteResultPromise<void> {\n const workOrderId = this.resolveText(input?.workOrderId);\n if (!workOrderId) {\n return { success: false, message: { text: 'workOrderId is required' } };\n }\n\n const workReport = await this.findWorkReportByWorkOrderId(workOrderId);\n if (!workReport?.id) {\n const content = await this.translation.translateAsync(\n '@maintenance-management:work-reports.messages.not-created-yet',\n );\n this.toastService.show({\n color: 'warning',\n title: await this.translation.translateAsync('@general:messages.generic.warning.title'),\n content,\n closeButton: true,\n });\n return { success: true, kind: 'object', data: undefined };\n }\n\n const workOrder = (await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workOrder.name)\n .data()\n .byKey(workOrderId)) as AXMMaintenanceManagementWorkOrderEntityModel | null;\n\n if (isWorkReportEditable(workReport, workOrder)) {\n await this.fillCompletion.execute({\n workReportId: workReport.id,\n workOrderId,\n persistOnSubmit: true,\n });\n return { success: true, kind: 'object', data: undefined };\n }\n\n await this.commandService.execute('Entity:View', {\n entity: RootConfig.entities.workReport.source,\n entityInfo: {\n name: RootConfig.entities.workReport.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.workReport.title,\n parentKey: 'workOrderId',\n source: RootConfig.entities.workReport.source,\n },\n data: workReport.id,\n options: {\n excludeProperties: ['workOrderId'],\n },\n \n });\n\n return { success: true, kind: 'object', data: undefined };\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private async findWorkReportByWorkOrderId(\n workOrderId: string,\n ): Promise<AXMMaintenanceManagementWorkReportEntityModel | null> {\n const page = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)\n .data()\n .query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{ field: 'workOrderId', operator: { type: 'equal' }, value: workOrderId }],\n },\n } as never);\n\n const report = defaultTo(get(page, 'items[0]'), null) as AXMMaintenanceManagementWorkReportEntityModel | null;\n return report?.id ? report : null;\n }\n\n private resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ import { AXPDebugService } from '@acorex-platform/framework-client/core';
2
+ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, Injectable } from '@angular/core';
5
+ import { defaultTo, get, isString } from 'lodash';
6
+ import { RootConfig } from '@acorex-platform/module-maintenance-management-client/contracts';
7
+ import { A as AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs';
8
+ import { i as isWorkReportFinalized, s as sortWorkReportAssessments, u as upsertWorkReportAssessment } from './acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs';
9
+
10
+ //#region ---- Imports ----
11
+ //#endregion
12
+ /**
13
+ * Persists a lightweight checklist assessment reference on WorkReport after a checklist is submitted.
14
+ * Questionnaire answers remain in AssessmentCase / AssessmentSession storage.
15
+ */
16
+ class RecordWorkReportAssessmentActivity {
17
+ constructor() {
18
+ //#region ---- Services & Dependencies ----
19
+ this.entityService = inject(AXPEntityService);
20
+ this.debug = inject(AXPDebugService);
21
+ }
22
+ //#endregion
23
+ //#region ---- Command Implementation ----
24
+ async execute(input) {
25
+ const workOrderId = this.resolveText(input?.workOrderId);
26
+ const assessmentCaseId = this.resolveText(input?.assessmentCaseId);
27
+ if (!workOrderId) {
28
+ return {
29
+ success: false,
30
+ message: { text: 'workOrderId is required' },
31
+ metadata: { outcome: 'Failed' },
32
+ };
33
+ }
34
+ if (!assessmentCaseId) {
35
+ return { success: true, kind: 'object',
36
+ data: { workReportId: this.resolveText(input.workReportId), workOrderId },
37
+ metadata: { outcome: 'Done' },
38
+ };
39
+ }
40
+ const workReport = await this.resolveWorkReport(workOrderId, input);
41
+ if (!workReport?.id) {
42
+ return {
43
+ success: false,
44
+ message: { text: 'Work report could not be resolved for the work order' },
45
+ metadata: { outcome: 'Failed' },
46
+ };
47
+ }
48
+ if (isWorkReportFinalized(workReport)) {
49
+ return {
50
+ success: false,
51
+ message: { text: 'Work report is finalized and cannot be updated' },
52
+ metadata: { outcome: 'Failed' },
53
+ };
54
+ }
55
+ const assessmentCase = await this.loadAssessmentCase(assessmentCaseId);
56
+ const completedById = this.resolveText(input.completedById);
57
+ const assessments = sortWorkReportAssessments(upsertWorkReportAssessment(workReport.assessments, {
58
+ assessmentCaseId,
59
+ assessmentCaseTitle: assessmentCase?.title,
60
+ completedAt: new Date().toISOString(),
61
+ completedById: completedById || null,
62
+ }));
63
+ await this.entityService
64
+ .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)
65
+ .data()
66
+ .update(workReport.id, { assessments });
67
+ this.debug.trace(AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE, 'work-report-assessment', 'Recorded checklist reference on work report', { workOrderId, workReportId: workReport.id, assessmentCaseId, assessmentCount: assessments.length });
68
+ return { success: true, kind: 'object',
69
+ data: { workReportId: workReport.id, workOrderId },
70
+ metadata: { outcome: 'Done' },
71
+ };
72
+ }
73
+ //#endregion
74
+ //#region ---- Helpers ----
75
+ async resolveWorkReport(workOrderId, input) {
76
+ const workReportId = this.resolveText(input.workReportId);
77
+ if (workReportId) {
78
+ const byId = (await this.entityService
79
+ .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)
80
+ .data()
81
+ .byKey(workReportId));
82
+ if (byId?.id && this.resolveText(byId.workOrderId) === workOrderId) {
83
+ return byId;
84
+ }
85
+ }
86
+ const page = await this.entityService
87
+ .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)
88
+ .data()
89
+ .query({
90
+ skip: 0,
91
+ take: 1,
92
+ filter: {
93
+ logic: 'and',
94
+ filters: [{ field: 'workOrderId', operator: { type: 'equal' }, value: workOrderId }],
95
+ },
96
+ });
97
+ const existing = defaultTo(get(page, 'items[0]'), null);
98
+ if (existing?.id) {
99
+ return existing;
100
+ }
101
+ const performedById = this.resolveText(input.performedById);
102
+ if (!performedById) {
103
+ return null;
104
+ }
105
+ const now = new Date().toISOString();
106
+ const createdId = await this.entityService
107
+ .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)
108
+ .data()
109
+ .create({
110
+ workOrderId,
111
+ reportedAt: now,
112
+ performedById,
113
+ startedAt: now,
114
+ finalizedAt: null,
115
+ assessments: [],
116
+ });
117
+ const id = this.resolveText(createdId);
118
+ if (!id) {
119
+ return null;
120
+ }
121
+ return (await this.entityService
122
+ .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)
123
+ .data()
124
+ .byKey(id));
125
+ }
126
+ async loadAssessmentCase(assessmentCaseId) {
127
+ try {
128
+ return (await this.entityService
129
+ .withEntity('AssessmentManagement', 'AssessmentCase')
130
+ .data()
131
+ .byKey(assessmentCaseId));
132
+ }
133
+ catch {
134
+ return null;
135
+ }
136
+ }
137
+ resolveText(value) {
138
+ if (!isString(value)) {
139
+ return '';
140
+ }
141
+ return value.trim();
142
+ }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RecordWorkReportAssessmentActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
144
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RecordWorkReportAssessmentActivity, providedIn: 'root' }); }
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RecordWorkReportAssessmentActivity, decorators: [{
147
+ type: Injectable,
148
+ args: [{ providedIn: 'root' }]
149
+ }] });
150
+
151
+ export { RecordWorkReportAssessmentActivity };
152
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-CxRfaf0G.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-CxRfaf0G.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/workflows/activities/record-work-report-assessment.activity.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPDebugService } from '@acorex-platform/framework-client/core';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get, isString } from 'lodash';\n\nimport { RootConfig } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport { AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE } from '../work-order-workflow.debug';\nimport type { AXMMaintenanceManagementWorkReportEntityModel } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport {\n isWorkReportFinalized,\n sortWorkReportAssessments,\n upsertWorkReportAssessment,\n} from '../../../work-report/work-report-assessment.util';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface RecordWorkReportAssessmentInput {\n workOrderId: string;\n workReportId?: string | null;\n performedById?: string | null;\n assessmentCaseId: string;\n completedById?: string | null;\n}\n\nexport interface RecordWorkReportAssessmentOutput {\n workReportId: string;\n workOrderId: string;\n}\n\n//#endregion\n\n/**\n * Persists a lightweight checklist assessment reference on WorkReport after a checklist is submitted.\n * Questionnaire answers remain in AssessmentCase / AssessmentSession storage.\n */\n@Injectable({ providedIn: 'root' })\nexport class RecordWorkReportAssessmentActivity\n implements AXPCommand<RecordWorkReportAssessmentInput, RecordWorkReportAssessmentOutput>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly debug = inject(AXPDebugService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(\n input: RecordWorkReportAssessmentInput,\n ): AXPCommandExecuteResultPromise<RecordWorkReportAssessmentOutput> {\n const workOrderId = this.resolveText(input?.workOrderId);\n const assessmentCaseId = this.resolveText(input?.assessmentCaseId);\n\n if (!workOrderId) {\n return {\n success: false,\n message: { text: 'workOrderId is required' },\n metadata: { outcome: 'Failed' },\n };\n }\n\n if (!assessmentCaseId) {\n return { success: true, kind: 'object',\n data: { workReportId: this.resolveText(input.workReportId), workOrderId },\n metadata: { outcome: 'Done' },\n };\n }\n\n const workReport = await this.resolveWorkReport(workOrderId, input);\n if (!workReport?.id) {\n return {\n success: false,\n message: { text: 'Work report could not be resolved for the work order' },\n metadata: { outcome: 'Failed' },\n };\n }\n\n if (isWorkReportFinalized(workReport)) {\n return {\n success: false,\n message: { text: 'Work report is finalized and cannot be updated' },\n metadata: { outcome: 'Failed' },\n };\n }\n\n const assessmentCase = await this.loadAssessmentCase(assessmentCaseId);\n const completedById = this.resolveText(input.completedById);\n const assessments = sortWorkReportAssessments(\n upsertWorkReportAssessment(workReport.assessments, {\n assessmentCaseId,\n assessmentCaseTitle: assessmentCase?.title as never,\n completedAt: new Date().toISOString(),\n completedById: completedById || null,\n }),\n );\n\n await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)\n .data()\n .update(workReport.id, { assessments } as never);\n\n this.debug.trace(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-assessment',\n 'Recorded checklist reference on work report',\n { workOrderId, workReportId: workReport.id, assessmentCaseId, assessmentCount: assessments.length },\n );\n\n return { success: true, kind: 'object',\n data: { workReportId: workReport.id, workOrderId },\n metadata: { outcome: 'Done' },\n };\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private async resolveWorkReport(\n workOrderId: string,\n input: RecordWorkReportAssessmentInput,\n ): Promise<AXMMaintenanceManagementWorkReportEntityModel | null> {\n const workReportId = this.resolveText(input.workReportId);\n if (workReportId) {\n const byId = (await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)\n .data()\n .byKey(workReportId)) as AXMMaintenanceManagementWorkReportEntityModel | null;\n\n if (byId?.id && this.resolveText(byId.workOrderId) === workOrderId) {\n return byId;\n }\n }\n\n const page = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)\n .data()\n .query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{ field: 'workOrderId', operator: { type: 'equal' }, value: workOrderId }],\n },\n } as never);\n\n const existing = defaultTo(get(page, 'items[0]'), null) as AXMMaintenanceManagementWorkReportEntityModel | null;\n if (existing?.id) {\n return existing;\n }\n\n const performedById = this.resolveText(input.performedById);\n if (!performedById) {\n return null;\n }\n\n const now = new Date().toISOString();\n const createdId = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)\n .data()\n .create({\n workOrderId,\n reportedAt: now,\n performedById,\n startedAt: now,\n finalizedAt: null,\n assessments: [],\n } as never);\n\n const id = this.resolveText(createdId);\n if (!id) {\n return null;\n }\n\n return (await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workReport.name)\n .data()\n .byKey(id)) as AXMMaintenanceManagementWorkReportEntityModel | null;\n }\n\n private async loadAssessmentCase(assessmentCaseId: string): Promise<{ title?: unknown } | null> {\n try {\n return (await this.entityService\n .withEntity('AssessmentManagement', 'AssessmentCase')\n .data()\n .byKey(assessmentCaseId)) as { title?: unknown } | null;\n } catch {\n return null;\n }\n }\n\n private resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, Injectable } from '@angular/core';
4
+ import { isString } from 'lodash';
5
+
6
+ //#endregion
7
+ /**
8
+ * Resolves a PersonCore.Person id to the platform user id used by task-board assignment.
9
+ */
10
+ class ResolvePersonUserIdActivity {
11
+ constructor() {
12
+ //#region ---- Services & Dependencies ----
13
+ this.entityService = inject(AXPEntityService);
14
+ }
15
+ //#endregion
16
+ //#region ---- Command Implementation ----
17
+ async execute(input) {
18
+ const personId = this.resolveText(input?.personId);
19
+ if (!personId) {
20
+ return {
21
+ success: false,
22
+ message: { details: { userId: null, personId: null }, text: 'personId is required' },
23
+ metadata: { outcome: 'Failed' },
24
+ };
25
+ }
26
+ const person = (await this.entityService.withEntity('PersonCore', 'Person').data().byKey(personId));
27
+ const userId = this.resolveText(person?.userId);
28
+ if (!userId) {
29
+ return {
30
+ success: false,
31
+ message: { details: { userId: null, personId }, text: 'Assigned person has no linked platform user.' },
32
+ metadata: { outcome: 'Failed' },
33
+ };
34
+ }
35
+ return { success: true, kind: 'object',
36
+ data: { userId, personId },
37
+ metadata: { outcome: 'Done' },
38
+ };
39
+ }
40
+ //#endregion
41
+ //#region ---- Helpers ----
42
+ resolveText(value) {
43
+ if (!isString(value)) {
44
+ return '';
45
+ }
46
+ return value.trim();
47
+ }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ResolvePersonUserIdActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
49
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ResolvePersonUserIdActivity, providedIn: 'root' }); }
50
+ }
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ResolvePersonUserIdActivity, decorators: [{
52
+ type: Injectable,
53
+ args: [{ providedIn: 'root' }]
54
+ }] });
55
+
56
+ export { ResolvePersonUserIdActivity };
57
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-resolve-person-user-id.activity-nwXAJHkd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-resolve-person-user-id.activity-nwXAJHkd.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/workflows/activities/resolve-person-user-id.activity.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { isString } from 'lodash';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface ResolvePersonUserIdInput {\n personId?: string;\n}\n\nexport interface ResolvePersonUserIdOutput {\n userId: string | null;\n personId: string | null;\n}\n\n//#endregion\n\n/**\n * Resolves a PersonCore.Person id to the platform user id used by task-board assignment.\n */\n@Injectable({ providedIn: 'root' })\nexport class ResolvePersonUserIdActivity implements AXPCommand<ResolvePersonUserIdInput, ResolvePersonUserIdOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: ResolvePersonUserIdInput): AXPCommandExecuteResultPromise<ResolvePersonUserIdOutput> {\n const personId = this.resolveText(input?.personId);\n if (!personId) {\n return {\n success: false,\n message: { details: { userId: null, personId: null }, text: 'personId is required' },\n \n metadata: { outcome: 'Failed' },\n };\n }\n\n const person = (await this.entityService.withEntity('PersonCore', 'Person').data().byKey(personId)) as\n | { id?: string; userId?: string | null }\n | null;\n\n const userId = this.resolveText(person?.userId);\n if (!userId) {\n return {\n success: false,\n message: { details: { userId: null, personId }, text: 'Assigned person has no linked platform user.' },\n \n metadata: { outcome: 'Failed' },\n };\n }\n\n return { success: true, kind: 'object',\n data: { userId, personId },\n metadata: { outcome: 'Done' },\n };\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;AAqBA;AAEA;;AAEG;MAEU,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAiD1D,IAAA;;;IA3CC,MAAM,OAAO,CAAC,KAA+B,EAAA;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;AAEpF,gBAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;aAChC;QACH;QAEA,MAAM,MAAM,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAE1F;QAER,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,8CAA8C,EAAE;AAEtG,gBAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;aAChC;QACH;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;AACpC,YAAA,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC1B,YAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;SAC9B;IACH;;;AAMQ,IAAA,WAAW,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACpB,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,KAAK,CAAC,IAAI,EAAE;IACrB;8GAjDW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -0,0 +1,92 @@
1
+ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, Injectable } from '@angular/core';
4
+ import { isString } from 'lodash';
5
+ import { RootConfig } from '@acorex-platform/module-maintenance-management-client/contracts';
6
+
7
+ //#endregion
8
+ /**
9
+ * Loads the existing work order and validates that an assignee is present before execution starts.
10
+ */
11
+ class ResolveWorkOrderActivity {
12
+ constructor() {
13
+ //#region ---- Services & Dependencies ----
14
+ this.entityService = inject(AXPEntityService);
15
+ }
16
+ //#endregion
17
+ //#region ---- Command Implementation ----
18
+ async execute(input) {
19
+ const workOrderId = this.resolveText(input?.workOrderId);
20
+ if (!workOrderId) {
21
+ return {
22
+ success: false,
23
+ message: { text: 'workOrderId is required' },
24
+ metadata: { outcome: 'Failed' },
25
+ };
26
+ }
27
+ const workOrder = (await this.entityService
28
+ .withEntity(RootConfig.module.name, RootConfig.entities.workOrder.name)
29
+ .data()
30
+ .byKey(workOrderId));
31
+ if (!workOrder?.id) {
32
+ return {
33
+ success: false,
34
+ message: { text: 'Work order not found' },
35
+ metadata: { outcome: 'NotFound' },
36
+ };
37
+ }
38
+ const assignedToId = this.resolveText(input?.assignedToId) || this.resolveText(workOrder.assignedToId);
39
+ if (!assignedToId) {
40
+ return {
41
+ success: false,
42
+ message: { text: 'Assigned user is required before starting work order execution.' },
43
+ metadata: { outcome: 'Blocked' },
44
+ };
45
+ }
46
+ return { success: true, kind: 'object',
47
+ data: {
48
+ workOrderId: workOrder.id,
49
+ workOrderNo: workOrder.workOrderNo,
50
+ assetId: this.resolveText(workOrder.assetId),
51
+ assetDisplayName: this.resolveDisplayName(workOrder.asset?.title, workOrder.assetId),
52
+ assignedToId,
53
+ assignedToDisplayName: this.resolveDisplayName(workOrder.assignedTo?.fullName, assignedToId),
54
+ maintenanceTypeId: this.resolveText(workOrder.maintenanceTypeId),
55
+ maintenanceTypeName: this.resolveDisplayName(workOrder.maintenanceType?.title, workOrder.maintenanceTypeId),
56
+ maintenancePlanId: workOrder.maintenancePlanId?.trim() || null,
57
+ failureRegisterId: workOrder.failureRegisterId?.trim() || null,
58
+ sourceType: workOrder.sourceType?.trim() || null,
59
+ dueDate: workOrder.scheduledEnd ?? workOrder.scheduledStart ?? null,
60
+ statusId: workOrder.statusId ?? null,
61
+ },
62
+ metadata: { outcome: 'Done' },
63
+ };
64
+ }
65
+ //#endregion
66
+ //#region ---- Helpers ----
67
+ resolveText(value) {
68
+ if (!isString(value)) {
69
+ return '';
70
+ }
71
+ return value.trim();
72
+ }
73
+ resolveDisplayName(value, fallback) {
74
+ if (isString(value) && value.trim()) {
75
+ return value.trim();
76
+ }
77
+ if (value && typeof value === 'object') {
78
+ const record = value;
79
+ return record['en-US'] ?? record['fa-IR'] ?? Object.values(record)[0] ?? fallback;
80
+ }
81
+ return fallback;
82
+ }
83
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ResolveWorkOrderActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
84
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ResolveWorkOrderActivity, providedIn: 'root' }); }
85
+ }
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ResolveWorkOrderActivity, decorators: [{
87
+ type: Injectable,
88
+ args: [{ providedIn: 'root' }]
89
+ }] });
90
+
91
+ export { ResolveWorkOrderActivity };
92
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-resolve-work-order.activity-q5WM7Sv5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-resolve-work-order.activity-q5WM7Sv5.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/workflows/activities/resolve-work-order.activity.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get, isString } from 'lodash';\n\nimport { RootConfig } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport type { AXMMaintenanceManagementWorkOrderEntityModel } from '@acorex-platform/module-maintenance-management-client/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface ResolveWorkOrderInput {\n workOrderId?: string;\n assignedToId?: string;\n}\n\nexport interface ResolveWorkOrderOutput {\n workOrderId: string;\n workOrderNo: string;\n assetId: string;\n assetDisplayName: string;\n assignedToId: string;\n assignedToDisplayName: string;\n maintenanceTypeId: string;\n maintenanceTypeName: string;\n maintenancePlanId: string | null;\n failureRegisterId: string | null;\n sourceType: string | null;\n dueDate: string | null;\n statusId: string | null;\n}\n\n//#endregion\n\n/**\n * Loads the existing work order and validates that an assignee is present before execution starts.\n */\n@Injectable({ providedIn: 'root' })\nexport class ResolveWorkOrderActivity implements AXPCommand<ResolveWorkOrderInput, ResolveWorkOrderOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: ResolveWorkOrderInput): AXPCommandExecuteResultPromise<ResolveWorkOrderOutput> {\n const workOrderId = this.resolveText(input?.workOrderId);\n if (!workOrderId) {\n return {\n success: false,\n message: { text: 'workOrderId is required' },\n metadata: { outcome: 'Failed' },\n };\n }\n\n const workOrder = (await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workOrder.name)\n .data()\n .byKey(workOrderId)) as AXMMaintenanceManagementWorkOrderEntityModel | null;\n\n if (!workOrder?.id) {\n return {\n success: false,\n message: { text: 'Work order not found' },\n metadata: { outcome: 'NotFound' },\n };\n }\n\n const assignedToId = this.resolveText(input?.assignedToId) || this.resolveText(workOrder.assignedToId);\n if (!assignedToId) {\n return {\n success: false,\n message: { text: 'Assigned user is required before starting work order execution.' },\n metadata: { outcome: 'Blocked' },\n };\n }\n\n return { success: true, kind: 'object',\n data: {\n workOrderId: workOrder.id,\n workOrderNo: workOrder.workOrderNo,\n assetId: this.resolveText(workOrder.assetId),\n assetDisplayName: this.resolveDisplayName(workOrder.asset?.title, workOrder.assetId),\n assignedToId,\n assignedToDisplayName: this.resolveDisplayName(workOrder.assignedTo?.fullName, assignedToId),\n maintenanceTypeId: this.resolveText(workOrder.maintenanceTypeId),\n maintenanceTypeName: this.resolveDisplayName(workOrder.maintenanceType?.title, workOrder.maintenanceTypeId),\n maintenancePlanId: workOrder.maintenancePlanId?.trim() || null,\n failureRegisterId: workOrder.failureRegisterId?.trim() || null,\n sourceType: workOrder.sourceType?.trim() || null,\n dueDate: workOrder.scheduledEnd ?? workOrder.scheduledStart ?? null,\n statusId: workOrder.statusId ?? null,\n },\n metadata: { outcome: 'Done' },\n };\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n }\n\n private resolveDisplayName(value: unknown, fallback: string): string {\n if (isString(value) && value.trim()) {\n return value.trim();\n }\n if (value && typeof value === 'object') {\n const record = value as Record<string, string>;\n return record['en-US'] ?? record['fa-IR'] ?? Object.values(record)[0] ?? fallback;\n }\n return fallback;\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}