@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.
- package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs +2698 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts.mjs +405 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-xxvOfIxf.mjs +141 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-xxvOfIxf.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-failure-register-status.provider-CLBaQy_e.mjs +181 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-failure-register-status.provider-CLBaQy_e.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-fill-work-report-completion.command-Capowl1e.mjs +174 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-fill-work-report-completion.command-Capowl1e.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-report-from-work-order.command-B0O4fWPt.mjs +105 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-report-from-work-order.command-B0O4fWPt.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-CxRfaf0G.mjs +152 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-CxRfaf0G.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-person-user-id.activity-nwXAJHkd.mjs +57 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-person-user-id.activity-nwXAJHkd.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-work-order.activity-q5WM7Sv5.mjs +92 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-work-order.activity-q5WM7Sv5.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B06a962Y.mjs +402 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B06a962Y.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-completed.activity-Di4R6LQl.mjs +89 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-completed.activity-Di4R6LQl.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-CzkCCl1L.mjs +96 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-CzkCCl1L.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-report-on-completion.activity-_B0SUFtQ.mjs +142 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-report-on-completion.activity-_B0SUFtQ.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-validate-work-order-completion.activity-RA2zaQHH.mjs +83 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-validate-work-order-completion.activity-RA2zaQHH.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-list-command-Bh_6PS5w.mjs +153 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-list-command-Bh_6PS5w.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-status.provider-DvBk5kAW.mjs +186 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-status.provider-DvBk5kAW.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-work-report-column.component-Bf1WZWIS.mjs +163 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-work-report-column.component-Bf1WZWIS.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-Dth3Z9fW.mjs +320 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-Dth3Z9fW.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs +74 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-checklist-results-view.component-BSFW0Yt-.mjs +149 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-checklist-results-view.component-BSFW0Yt-.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client.mjs +2 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client.mjs.map +1 -0
- package/package.json +28 -0
- package/types/acorex-platform-module-maintenance-management-client-contracts.d.ts +1081 -0
- 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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"}
|