@acorex-platform/module-maintenance-management-client 2.0.0-next.12 → 2.0.0-next.13

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 (20) hide show
  1. package/fesm2022/{acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-gUetoBL2.mjs → acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-C3cGlFKd.mjs} +17 -28
  2. package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-C3cGlFKd.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-ByaIojAq.mjs → acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-C-K8mD4N.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-ByaIojAq.mjs.map → acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-C-K8mD4N.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-C-fjBgRp.mjs → acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-b8sTwXxe.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-C-fjBgRp.mjs.map → acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-b8sTwXxe.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-B-6cnmrR.mjs → acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-C6rDOolF.mjs} +6 -7
  8. package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-C6rDOolF.mjs.map +1 -0
  9. package/fesm2022/{acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-B1MzM5zk.mjs → acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-StzIetk8.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-B1MzM5zk.mjs.map → acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-StzIetk8.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-maintenance-management-client-start-work-order-flow.command-0Grjl6rZ.mjs → acorex-platform-module-maintenance-management-client-start-work-order-flow.command-CNau6u4p.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-module-maintenance-management-client-start-work-order-flow.command-0Grjl6rZ.mjs.map → acorex-platform-module-maintenance-management-client-start-work-order-flow.command-CNau6u4p.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-DXhNeYyx.mjs → acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-DDJHrYkP.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-DXhNeYyx.mjs.map → acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-DDJHrYkP.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-ClRITLiw.mjs → acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-DcBxsEci.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-ClRITLiw.mjs.map → acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-DcBxsEci.mjs.map} +1 -1
  17. package/fesm2022/acorex-platform-module-maintenance-management-client.mjs +1 -1
  18. package/package.json +3 -2
  19. package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-gUetoBL2.mjs.map +0 -1
  20. package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-B-6cnmrR.mjs.map +0 -1
@@ -4,7 +4,7 @@ import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
5
  import { defaultTo, get, isString } from 'lodash';
6
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-gUetoBL2.mjs';
7
+ import { A as AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-C3cGlFKd.mjs';
8
8
 
9
9
  //#region ---- Imports ----
10
10
  //#endregion
@@ -138,4 +138,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
138
138
  }] });
139
139
 
140
140
  export { CreateOrGetWorkReportDraftActivity };
141
- //# sourceMappingURL=acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-ByaIojAq.mjs.map
141
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-C-K8mD4N.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-ByaIojAq.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/workflows/activities/create-or-get-work-report-draft.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 type { AXMMaintenanceManagementWorkOrderEntityModel } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport { AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE } from '../work-order-workflow.debug';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface CreateOrGetWorkReportDraftInput {\n workOrderId: string;\n performedById?: string | null;\n}\n\nexport interface CreateOrGetWorkReportDraftOutput {\n workReportId: string;\n created: boolean;\n reused: boolean;\n}\n\n//#endregion\n\n/**\n * Creates a draft work report for a work order or reuses an existing one to prevent duplicates.\n */\n@Injectable({ providedIn: 'root' })\nexport class CreateOrGetWorkReportDraftActivity\n implements AXPCommand<CreateOrGetWorkReportDraftInput, CreateOrGetWorkReportDraftOutput>\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: CreateOrGetWorkReportDraftInput,\n ): AXPCommandExecuteResultPromise<CreateOrGetWorkReportDraftOutput> {\n const workOrderId = this.resolveText(input?.workOrderId);\n\n if (!workOrderId) {\n return {\n success: false,\n message: { text: 'workOrderId is required' },\n metadata: { outcome: 'Failed' },\n };\n }\n\n const existing = await this.findWorkReportByWorkOrderId(workOrderId);\n if (existing?.id) {\n this.debug.trace(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-draft',\n 'Reused existing work report draft',\n { workOrderId, workReportId: existing.id },\n );\n return { success: true, kind: 'object',\n data: {\n workReportId: existing.id,\n created: false,\n reused: true,\n },\n metadata: { outcome: 'Done' },\n };\n }\n\n const performedById = await this.resolvePerformedById(workOrderId, input.performedById);\n if (!performedById) {\n this.debug.error(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-draft',\n 'performedById could not be resolved',\n { workOrderId },\n );\n return {\n success: false,\n message: { text: 'performedById is required' },\n metadata: { outcome: 'Failed' },\n };\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 workReportId = this.resolveText(createdId);\n if (!workReportId) {\n this.debug.error(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-draft',\n 'Work report draft creation returned no id',\n { workOrderId },\n );\n return {\n success: false,\n message: { text: 'Work report draft could not be created' },\n metadata: { outcome: 'Failed' },\n };\n }\n\n this.debug.trace(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-draft',\n 'Created work report draft',\n { workOrderId, workReportId, performedById },\n );\n\n return { success: true, kind: 'object',\n data: {\n workReportId,\n created: true,\n reused: false,\n },\n metadata: { outcome: 'Done' },\n };\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private async resolvePerformedById(workOrderId: string, explicit: unknown): Promise<string> {\n const fromInput = this.resolveText(explicit);\n if (fromInput) {\n return fromInput;\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 const assignedToId = this.resolveText(workOrder?.assignedToId);\n if (!assignedToId) {\n return '';\n }\n\n const page = await this.entityService\n .withEntity('HumanCapitalManagement', 'Employee')\n .data()\n .query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{ field: 'personId', operator: { type: 'equal' }, value: assignedToId }],\n },\n } as never);\n\n const employee = defaultTo(get(page, 'items[0]'), null) as { id?: string } | null;\n return this.resolveText(employee?.id);\n }\n\n private async findWorkReportByWorkOrderId(workOrderId: string): Promise<{ id?: string } | 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 return defaultTo(get(page, 'items[0]'), null) as { id?: string } | 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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"}
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-C-K8mD4N.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/workflows/activities/create-or-get-work-report-draft.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 type { AXMMaintenanceManagementWorkOrderEntityModel } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport { AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE } from '../work-order-workflow.debug';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface CreateOrGetWorkReportDraftInput {\n workOrderId: string;\n performedById?: string | null;\n}\n\nexport interface CreateOrGetWorkReportDraftOutput {\n workReportId: string;\n created: boolean;\n reused: boolean;\n}\n\n//#endregion\n\n/**\n * Creates a draft work report for a work order or reuses an existing one to prevent duplicates.\n */\n@Injectable({ providedIn: 'root' })\nexport class CreateOrGetWorkReportDraftActivity\n implements AXPCommand<CreateOrGetWorkReportDraftInput, CreateOrGetWorkReportDraftOutput>\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: CreateOrGetWorkReportDraftInput,\n ): AXPCommandExecuteResultPromise<CreateOrGetWorkReportDraftOutput> {\n const workOrderId = this.resolveText(input?.workOrderId);\n\n if (!workOrderId) {\n return {\n success: false,\n message: { text: 'workOrderId is required' },\n metadata: { outcome: 'Failed' },\n };\n }\n\n const existing = await this.findWorkReportByWorkOrderId(workOrderId);\n if (existing?.id) {\n this.debug.trace(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-draft',\n 'Reused existing work report draft',\n { workOrderId, workReportId: existing.id },\n );\n return { success: true, kind: 'object',\n data: {\n workReportId: existing.id,\n created: false,\n reused: true,\n },\n metadata: { outcome: 'Done' },\n };\n }\n\n const performedById = await this.resolvePerformedById(workOrderId, input.performedById);\n if (!performedById) {\n this.debug.error(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-draft',\n 'performedById could not be resolved',\n { workOrderId },\n );\n return {\n success: false,\n message: { text: 'performedById is required' },\n metadata: { outcome: 'Failed' },\n };\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 workReportId = this.resolveText(createdId);\n if (!workReportId) {\n this.debug.error(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-draft',\n 'Work report draft creation returned no id',\n { workOrderId },\n );\n return {\n success: false,\n message: { text: 'Work report draft could not be created' },\n metadata: { outcome: 'Failed' },\n };\n }\n\n this.debug.trace(\n AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE,\n 'work-report-draft',\n 'Created work report draft',\n { workOrderId, workReportId, performedById },\n );\n\n return { success: true, kind: 'object',\n data: {\n workReportId,\n created: true,\n reused: false,\n },\n metadata: { outcome: 'Done' },\n };\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private async resolvePerformedById(workOrderId: string, explicit: unknown): Promise<string> {\n const fromInput = this.resolveText(explicit);\n if (fromInput) {\n return fromInput;\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 const assignedToId = this.resolveText(workOrder?.assignedToId);\n if (!assignedToId) {\n return '';\n }\n\n const page = await this.entityService\n .withEntity('HumanCapitalManagement', 'Employee')\n .data()\n .query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{ field: 'personId', operator: { type: 'equal' }, value: assignedToId }],\n },\n } as never);\n\n const employee = defaultTo(get(page, 'items[0]'), null) as { id?: string } | null;\n return this.resolveText(employee?.id);\n }\n\n private async findWorkReportByWorkOrderId(workOrderId: string): Promise<{ id?: string } | 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 return defaultTo(get(page, 'items[0]'), null) as { id?: string } | 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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"}
@@ -1,7 +1,7 @@
1
1
  import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
2
2
  import * as i0 from '@angular/core';
3
3
  import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
4
- import { a as AXMMaintenanceIntervalComponent } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-gUetoBL2.mjs';
4
+ import { a as AXMMaintenanceIntervalComponent } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-C3cGlFKd.mjs';
5
5
  import { r as readMaintenanceIntervalKinds } from './acorex-platform-module-maintenance-management-client-maintenance-interval-widget.kinds-D8Hnq0ct.mjs';
6
6
 
7
7
  //#region ----- Imports -----
@@ -51,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
51
51
  }] });
52
52
 
53
53
  export { AXMMaintenanceIntervalWidgetEditComponent };
54
- //# sourceMappingURL=acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-C-fjBgRp.mjs.map
54
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-b8sTwXxe.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-C-fjBgRp.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/maintenance-interval/maintenance-interval-widget-edit.component.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport type { AXMMaintenanceIntervalConfig } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { AXMMaintenanceIntervalComponent } from './maintenance-interval.component';\nimport { readMaintenanceIntervalKinds } from './maintenance-interval-widget.kinds';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-maintenance-interval-widget-edit',\n template: `\n <axm-maintenance-interval\n [supportedIntervalKinds]=\"supportedKinds()\"\n [value]=\"currentValue()\"\n [disabled]=\"isDisabled()\"\n (valueChange)=\"onIntervalConfigChange($event)\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMMaintenanceIntervalComponent],\n})\nexport class AXMMaintenanceIntervalWidgetEditComponent extends AXPValueWidgetComponent<\n AXMMaintenanceIntervalConfig | null\n> {\n //#region ----- Computed Properties -----\n\n protected readonly supportedKinds = computed(() =>\n readMaintenanceIntervalKinds(this.options(), (path) => this.contextService.getValue(path)),\n );\n\n protected readonly currentValue = computed(() => this.getValue());\n\n protected readonly isDisabled = computed(() => Boolean(this.options()['disabled']));\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onIntervalConfigChange(config: AXMMaintenanceIntervalConfig): void {\n this.setValue(config);\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;AAAA;AASA;AAEA;AAeM,MAAO,yCAA0C,SAAQ,uBAE9D,CAAA;AAfD,IAAA,WAAA,GAAA;;;QAkBqB,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAC3C,4BAA4B,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;2FAC3F;QAEkB,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;yFAAC;AAE9C,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;uFAAC;AAWpF,IAAA;;;AALW,IAAA,sBAAsB,CAAC,MAAoC,EAAA;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvB;8GAnBW,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAX1C;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,+BAA+B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE9B,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAbrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,+BAA+B,CAAC;AAC3C,iBAAA;;;"}
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-b8sTwXxe.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/maintenance-interval/maintenance-interval-widget-edit.component.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport type { AXMMaintenanceIntervalConfig } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { AXMMaintenanceIntervalComponent } from './maintenance-interval.component';\nimport { readMaintenanceIntervalKinds } from './maintenance-interval-widget.kinds';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-maintenance-interval-widget-edit',\n template: `\n <axm-maintenance-interval\n [supportedIntervalKinds]=\"supportedKinds()\"\n [value]=\"currentValue()\"\n [disabled]=\"isDisabled()\"\n (valueChange)=\"onIntervalConfigChange($event)\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMMaintenanceIntervalComponent],\n})\nexport class AXMMaintenanceIntervalWidgetEditComponent extends AXPValueWidgetComponent<\n AXMMaintenanceIntervalConfig | null\n> {\n //#region ----- Computed Properties -----\n\n protected readonly supportedKinds = computed(() =>\n readMaintenanceIntervalKinds(this.options(), (path) => this.contextService.getValue(path)),\n );\n\n protected readonly currentValue = computed(() => this.getValue());\n\n protected readonly isDisabled = computed(() => Boolean(this.options()['disabled']));\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onIntervalConfigChange(config: AXMMaintenanceIntervalConfig): void {\n this.setValue(config);\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;AAAA;AASA;AAEA;AAeM,MAAO,yCAA0C,SAAQ,uBAE9D,CAAA;AAfD,IAAA,WAAA,GAAA;;;QAkBqB,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAC3C,4BAA4B,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;2FAC3F;QAEkB,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;yFAAC;AAE9C,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;uFAAC;AAWpF,IAAA;;;AALW,IAAA,sBAAsB,CAAC,MAAoC,EAAA;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvB;8GAnBW,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAX1C;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,+BAA+B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE9B,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAbrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,+BAA+B,CAAC;AAC3C,iBAAA;;;"}
@@ -6,8 +6,9 @@ import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
6
6
  import * as i0 from '@angular/core';
7
7
  import { inject, Injectable } from '@angular/core';
8
8
  import { get, defaultTo, isString } from 'lodash';
9
+ import { storedAnswersHaveContent } from '@acorex-platform/module-assessment-management-client/contracts';
9
10
  import { RootConfig, resolveChecklistId, readIntervalChecklistId, pickCanonicalChecklistRow, AXM_INTERVAL_CHECKLIST_QUESTIONNAIRE_ID, AXM_INTERVAL_CHECKLIST_CASE_ID, AXM_INTERVAL_CHECKLIST_SESSION_ID, isWorkOrderChecklistOccurrence, AXM_INTERVAL_CHECKLIST_CLAIM, resolveIntervalChecklistViewerMode } from '@acorex-platform/module-maintenance-management-client/contracts';
10
- import { W as WORK_ORDER_CHECKLIST_ASSET_PREFILL_KEYS } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-gUetoBL2.mjs';
11
+ import { W as WORK_ORDER_CHECKLIST_ASSET_PREFILL_KEYS } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-C3cGlFKd.mjs';
11
12
  import { r as resolveStartWorkOrderFlowIds, p as persistIntervalTaskCard } from './acorex-platform-module-maintenance-management-client-start-work-order-flow-id.util-CuUi8LBT.mjs';
12
13
 
13
14
  //#region ---- Imports ----
@@ -325,7 +326,7 @@ class OpenWorkOrderChecklistFormCommand {
325
326
  caseId,
326
327
  responderId,
327
328
  role: 'responder',
328
- answers: {},
329
+ answers: [],
329
330
  progressPercentage: 0,
330
331
  answeredQuestionsCount: 0,
331
332
  lastSavedAt: now,
@@ -340,16 +341,14 @@ class OpenWorkOrderChecklistFormCommand {
340
341
  }
341
342
  async deleteEmptySession(sessionId) {
342
343
  const session = this.asRecord(await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().byKey(sessionId));
343
- const answers = this.asRecord(session?.['answers']) ?? {};
344
- if (Object.keys(answers).length > 0) {
344
+ if (storedAnswersHaveContent(session?.['answers'])) {
345
345
  return;
346
346
  }
347
347
  await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().delete(sessionId);
348
348
  }
349
349
  async deleteEmptyOccurrence(ids) {
350
350
  const session = this.asRecord(await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().byKey(ids.sessionId));
351
- const answers = this.asRecord(session?.['answers']) ?? {};
352
- if (Object.keys(answers).length > 0) {
351
+ if (storedAnswersHaveContent(session?.['answers'])) {
353
352
  return;
354
353
  }
355
354
  await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().delete(ids.sessionId);
@@ -594,4 +593,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
594
593
  }] });
595
594
 
596
595
  export { OpenWorkOrderChecklistFormCommand };
597
- //# sourceMappingURL=acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-B-6cnmrR.mjs.map
596
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-C6rDOolF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-C6rDOolF.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/commands/open-work-order-checklist-form.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get, isString } from 'lodash';\nimport { storedAnswersHaveContent } from '@acorex-platform/module-assessment-management-client/contracts';\n\nimport {\n AXM_INTERVAL_CHECKLIST_CASE_ID,\n AXM_INTERVAL_CHECKLIST_CLAIM,\n AXM_INTERVAL_CHECKLIST_QUESTIONNAIRE_ID,\n AXM_INTERVAL_CHECKLIST_SESSION_ID,\n isWorkOrderChecklistOccurrence,\n pickCanonicalChecklistRow,\n readIntervalChecklistId,\n resolveChecklistId,\n resolveIntervalChecklistViewerMode,\n RootConfig,\n} from '@acorex-platform/module-maintenance-management-client/contracts';\nimport type { AXMMaintenanceManagementWorkOrderEntityModel } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport { WORK_ORDER_CHECKLIST_ASSET_PREFILL_KEYS } from '../../../middlewares/work-order-checklist-prefill.constants';\nimport { persistIntervalTaskCard } from './interval-task-card.persist';\nimport { resolveStartWorkOrderFlowIds } from './start-work-order-flow-id.util';\n\n//#endregion\n\n//#region ---- Types ----\n\nconst FILL_ASSESSMENT_COMMAND = 'AssessmentManagement.AssessmentCase:Fill';\nconst VIEW_ANSWERS_COMMAND = 'AssessmentManagement.AssessmentSession:ViewAnswers';\nconst ASSESSMENT_MODULE = 'AssessmentManagement';\nconst ASSESSMENT_CASE = 'AssessmentCase';\nconst ASSESSMENT_SESSION = 'AssessmentSession';\nconst WORK_ORDER_SUBJECT_TYPE = `${RootConfig.module.name}.${RootConfig.entities.workOrder.name}`;\nconst CLAIM_TTL_MS = 15_000;\n\ninterface OpenWorkOrderChecklistFormInput {\n checklist?: string;\n data?: Record<string, unknown>;\n options?: { checklist?: string };\n instanceId?: string;\n bookmarkId?: string;\n}\n\ninterface ChecklistOccurrenceIds {\n caseId: string;\n sessionId: string;\n}\n\ninterface ChecklistClaim {\n token: string;\n at: string;\n workOrderId: string;\n questionnaireId: string;\n}\n\n//#endregion\n\n/**\n * Opens the interval work-order checklist in the assessment viewer.\n * In Progress creates one AssessmentCase and AssessmentSession, then reuses them and keeps the form editable.\n * Completed opens that same session with ViewAnswers and does not create, save, or change the card.\n * The task-board card stays active.\n */\n@Injectable({ providedIn: 'root' })\nexport class OpenWorkOrderChecklistFormCommand implements AXPCommand<OpenWorkOrderChecklistFormInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly commandService = inject(AXPCommandService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: OpenWorkOrderChecklistFormInput): AXPCommandExecuteResultPromise<void> {\n const ids = resolveStartWorkOrderFlowIds(input as unknown as Record<string, unknown>);\n const workOrderId = ids.workOrderId;\n if (!workOrderId) {\n return this.fail('Work order id is required.');\n }\n\n const workOrder = await this.loadWorkOrder(workOrderId);\n if (!workOrder) {\n return this.fail('Work order not found.');\n }\n\n const currentUserId = this.resolveText(this.sessionService.user?.id);\n const assigneeUserId = await this.resolveAssigneeUserId(this.resolveText(workOrder.assignedToId));\n if (!currentUserId || !assigneeUserId || currentUserId !== assigneeUserId) {\n return this.failKey('@maintenance-management:work-orders.messages.checklist-assignee-only');\n }\n\n const instanceId = ids.sourceInstanceId;\n if (!instanceId) {\n return this.fail('Workflow instance id is required.');\n }\n const instance = await this.readWorkflowInstance(instanceId);\n if (!instance) {\n return this.fail('Workflow instance not found.');\n }\n\n const viewerMode = this.resolveViewerMode(workOrder, instance, ids.sourceBookmarkId, workOrderId);\n const completed = viewerMode === 'readonly';\n if (viewerMode === 'unavailable') {\n return this.failKey('@maintenance-management:work-orders.messages.checklist-requires-in-progress');\n }\n\n const requestedChecklist =\n resolveChecklistId(get(input, 'checklist')) || resolveChecklistId(get(input, 'options.checklist'));\n const questionnaireId = readIntervalChecklistId(instance, requestedChecklist);\n if (!questionnaireId) {\n return this.failKey('@maintenance-management:work-orders.messages.checklist-missing');\n }\n\n const questionnaire = await this.entityService\n .withEntity(ASSESSMENT_MODULE, 'Questionnaire')\n .data()\n .byKey(questionnaireId);\n if (!questionnaire) {\n return this.failKey('@maintenance-management:work-orders.messages.checklist-missing');\n }\n\n try {\n if (!completed) {\n await persistIntervalTaskCard(this.entityService, {\n instanceId,\n workOrderId,\n sourceBookmarkId: ids.sourceBookmarkId,\n mode: 'in-progress',\n assigneeUserId,\n });\n }\n\n const occurrence = completed\n ? await this.findExistingOccurrence(instanceId, workOrderId, questionnaireId)\n : await this.ensureOccurrence({\n instanceId,\n bookmarkId: ids.sourceBookmarkId,\n workOrderId,\n workOrderNo: this.resolveText(workOrder.workOrderNo),\n questionnaireId,\n responderId: currentUserId,\n });\n if (!occurrence) {\n return this.failKey('@maintenance-management:work-orders.messages.checklist-occurrence-invalid');\n }\n const validated = await this.loadValidatedOccurrence(occurrence, workOrderId, questionnaireId);\n if (!validated) {\n return this.failKey('@maintenance-management:work-orders.messages.checklist-occurrence-invalid');\n }\n\n if (completed) {\n const viewed = await this.commandService.execute<Record<string, unknown>, void>(VIEW_ANSWERS_COMMAND, {\n caseId: validated.caseId,\n sessionId: validated.sessionId,\n });\n return viewed ?? { success: false, message: { text: 'Checklist form could not be opened.' } };\n }\n\n const result = await this.commandService.execute<Record<string, unknown>, void>(FILL_ASSESSMENT_COMMAND, {\n caseId: validated.caseId,\n sessionId: validated.sessionId,\n showAs: 'popup',\n responderId: currentUserId,\n role: 'responder',\n allowEditSubmitted: true,\n readonlyAnswerKeys: [...WORK_ORDER_CHECKLIST_ASSET_PREFILL_KEYS],\n });\n return result ?? { success: false, message: { text: 'Checklist form could not be opened.' } };\n } catch (error: unknown) {\n const message =\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.generic.error.description');\n console.error('[OpenWorkOrderChecklistFormCommand]', error);\n return this.fail(message);\n }\n }\n\n //#endregion\n\n //#region ---- Occurrence ----\n\n /**\n * Reuses stored or work-order-linked case/session ids.\n * A claim on the workflow instance stops a second click from creating another pair.\n */\n private async ensureOccurrence(\n input: {\n instanceId: string;\n bookmarkId: string;\n workOrderId: string;\n workOrderNo: string;\n questionnaireId: string;\n responderId: string;\n },\n attempt = 0,\n ): Promise<ChecklistOccurrenceIds> {\n const existing = await this.findExistingOccurrence(input.instanceId, input.workOrderId, input.questionnaireId);\n if (existing) {\n await this.persistOccurrenceIds(\n input.instanceId,\n input.bookmarkId,\n input.workOrderId,\n input.questionnaireId,\n existing,\n );\n return existing;\n }\n if (attempt > 4) {\n throw new Error('Checklist form could not be opened.');\n }\n\n const token = crypto.randomUUID();\n const owned = await this.tryClaim(input.instanceId, {\n token,\n at: new Date().toISOString(),\n workOrderId: input.workOrderId,\n questionnaireId: input.questionnaireId,\n });\n if (!owned) {\n const waited = await this.waitForOccurrence(input.instanceId, input.workOrderId, input.questionnaireId);\n if (waited) {\n await this.persistOccurrenceIds(\n input.instanceId,\n input.bookmarkId,\n input.workOrderId,\n input.questionnaireId,\n waited,\n );\n return waited;\n }\n return this.ensureOccurrence(input, attempt + 1);\n }\n\n let created: ChecklistOccurrenceIds | null = null;\n try {\n const chosen = await this.createOrReuseOccurrence(input);\n created = chosen.created;\n if (created && created.caseId === chosen.ids.caseId && created.sessionId !== chosen.ids.sessionId) {\n try {\n await this.deleteEmptySession(created.sessionId);\n } catch (error: unknown) {\n console.warn('[OpenWorkOrderChecklistFormCommand] unused checklist session was kept', error);\n }\n } else if (created && created.caseId !== chosen.ids.caseId) {\n try {\n await this.deleteEmptyOccurrence(created);\n } catch (error: unknown) {\n console.warn('[OpenWorkOrderChecklistFormCommand] unused checklist duplicate was kept', error);\n }\n }\n await this.persistOccurrenceIds(\n input.instanceId,\n input.bookmarkId,\n input.workOrderId,\n input.questionnaireId,\n chosen.ids,\n );\n return chosen.ids;\n } finally {\n await this.clearClaim(input.instanceId, token);\n }\n }\n\n /**\n * Attaches a session to the earliest case for this work order and questionnaire.\n * A new case is created only when that pair does not exist yet.\n */\n private async createOrReuseOccurrence(input: {\n workOrderId: string;\n workOrderNo: string;\n questionnaireId: string;\n responderId: string;\n }): Promise<{ ids: ChecklistOccurrenceIds; created: ChecklistOccurrenceIds | null }> {\n const caseId = await this.findCanonicalCaseId(input.workOrderId, input.questionnaireId);\n if (caseId) {\n const existingSessionId = await this.findSessionIdForCase(caseId);\n if (existingSessionId) {\n return { ids: { caseId, sessionId: existingSessionId }, created: null };\n }\n const sessionId = await this.createSession(caseId, input.responderId);\n const canonicalSessionId = (await this.findSessionIdForCase(caseId)) || sessionId;\n return {\n ids: { caseId, sessionId: canonicalSessionId },\n created:\n canonicalSessionId === sessionId\n ? null\n : { caseId, sessionId },\n };\n }\n\n const created = await this.createOccurrence(input);\n const canonicalCaseId =\n (await this.findCanonicalCaseId(input.workOrderId, input.questionnaireId)) || created.caseId;\n if (canonicalCaseId === created.caseId) {\n return { ids: created, created: null };\n }\n\n const existingSessionId = await this.findSessionIdForCase(canonicalCaseId);\n const sessionId = existingSessionId || (await this.createSession(canonicalCaseId, input.responderId));\n return {\n ids: { caseId: canonicalCaseId, sessionId },\n created,\n };\n }\n\n private async findExistingOccurrence(\n instanceId: string,\n workOrderId: string,\n questionnaireId: string,\n ): Promise<ChecklistOccurrenceIds | null> {\n const stored = await this.readStoredOccurrence(instanceId, workOrderId, questionnaireId);\n if (stored) {\n return stored;\n }\n\n const caseId = await this.findCanonicalCaseId(workOrderId, questionnaireId);\n if (!caseId) {\n return null;\n }\n const sessionId = await this.findSessionIdForCase(caseId);\n if (!sessionId) {\n return null;\n }\n return { caseId, sessionId };\n }\n\n private async findCanonicalCaseId(workOrderId: string, questionnaireId: string): Promise<string> {\n const page = await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_CASE).data().query({\n skip: 0,\n take: 50,\n filter: {\n logic: 'and',\n filters: [{ field: 'subjectRef.id', operator: { type: 'equal' }, value: workOrderId }],\n },\n } as never);\n const rows = (defaultTo(get(page, 'items'), []) as unknown as Record<string, unknown>[]).filter((row) =>\n this.caseMatchesWorkOrderChecklist(row, workOrderId, questionnaireId),\n );\n return this.resolveText(pickCanonicalChecklistRow(rows)?.['id']);\n }\n\n private async readStoredOccurrence(\n instanceId: string,\n workOrderId: string,\n questionnaireId: string,\n ): Promise<ChecklistOccurrenceIds | null> {\n const instance = await this.readWorkflowInstance(instanceId);\n const properties = this.readProperties(instance);\n const storedQuestionnaire = resolveChecklistId(properties[AXM_INTERVAL_CHECKLIST_QUESTIONNAIRE_ID]);\n if (storedQuestionnaire && storedQuestionnaire !== questionnaireId) {\n return null;\n }\n const caseId = this.resolveText(properties[AXM_INTERVAL_CHECKLIST_CASE_ID]);\n const sessionId = this.resolveText(properties[AXM_INTERVAL_CHECKLIST_SESSION_ID]);\n if (!caseId || !sessionId) {\n return null;\n }\n return (await this.loadValidatedOccurrence({ caseId, sessionId }, workOrderId, questionnaireId)) ?? null;\n }\n\n private async loadValidatedOccurrence(\n ids: ChecklistOccurrenceIds,\n workOrderId: string,\n questionnaireId: string,\n ): Promise<ChecklistOccurrenceIds | null> {\n const assessmentCase = this.asRecord(\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_CASE).data().byKey(ids.caseId),\n );\n const session = this.asRecord(\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().byKey(ids.sessionId),\n );\n if (\n !isWorkOrderChecklistOccurrence({\n assessmentCase,\n session,\n workOrderId,\n questionnaireId,\n subjectType: WORK_ORDER_SUBJECT_TYPE,\n })\n ) {\n return null;\n }\n return { caseId: ids.caseId, sessionId: ids.sessionId };\n }\n\n private caseMatchesWorkOrderChecklist(\n row: Record<string, unknown>,\n workOrderId: string,\n questionnaireId: string,\n ): boolean {\n const subject = this.asRecord(row['subjectRef']);\n return (\n this.resolveText(row['questionnaireId']) === questionnaireId &&\n this.resolveText(subject?.['type']) === WORK_ORDER_SUBJECT_TYPE &&\n this.resolveText(subject?.['id']) === workOrderId\n );\n }\n\n /** Sessions are located by case id. Questionnaire id is never the lookup key. */\n private async findSessionIdForCase(caseId: string): Promise<string> {\n const page = await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().query({\n skip: 0,\n take: 20,\n filter: {\n logic: 'and',\n filters: [{ field: 'caseId', operator: { type: 'equal' }, value: caseId }],\n },\n } as never);\n const rows = defaultTo(get(page, 'items'), []) as unknown as Record<string, unknown>[];\n const session = pickCanonicalChecklistRow(rows);\n return this.resolveText(session?.['id']);\n }\n\n private async createOccurrence(input: {\n workOrderId: string;\n workOrderNo: string;\n questionnaireId: string;\n responderId: string;\n }): Promise<ChecklistOccurrenceIds> {\n const caseKey = await this.entityService\n .withEntity(ASSESSMENT_MODULE, ASSESSMENT_CASE)\n .data()\n .create({\n questionnaireId: input.questionnaireId,\n title: input.workOrderNo ? `${input.workOrderNo} — checklist` : 'Checklist',\n subjectRef: {\n type: WORK_ORDER_SUBJECT_TYPE,\n id: input.workOrderId,\n title: input.workOrderNo,\n },\n statusId: 'active',\n } as never);\n const caseId = this.resolveCreatedId(caseKey);\n if (!caseId) {\n throw new Error('Checklist case could not be created.');\n }\n const sessionId = await this.createSession(caseId, input.responderId);\n return { caseId, sessionId };\n }\n\n private async createSession(caseId: string, responderId: string): Promise<string> {\n const now = new Date();\n const sessionKey = await this.entityService\n .withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION)\n .data()\n .create({\n caseId,\n responderId,\n role: 'responder',\n answers: [],\n progressPercentage: 0,\n answeredQuestionsCount: 0,\n lastSavedAt: now,\n startedAt: now,\n statusId: 'not-started',\n } as never);\n const sessionId = this.resolveCreatedId(sessionKey);\n if (!sessionId) {\n throw new Error('Checklist session could not be created.');\n }\n return sessionId;\n }\n\n private async deleteEmptySession(sessionId: string): Promise<void> {\n const session = this.asRecord(\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().byKey(sessionId),\n );\n if (storedAnswersHaveContent(session?.['answers'])) {\n return;\n }\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().delete(sessionId);\n }\n\n private async deleteEmptyOccurrence(ids: ChecklistOccurrenceIds): Promise<void> {\n const session = this.asRecord(\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().byKey(ids.sessionId),\n );\n if (storedAnswersHaveContent(session?.['answers'])) {\n return;\n }\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().delete(ids.sessionId);\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_CASE).data().delete(ids.caseId);\n }\n\n //#endregion\n\n //#region ---- Claim & persistence ----\n\n private async tryClaim(instanceId: string, claim: ChecklistClaim): Promise<boolean> {\n const instance = await this.readWorkflowInstance(instanceId);\n const current = this.readClaim(this.readProperties(instance));\n if (\n current &&\n current.token !== claim.token &&\n current.workOrderId === claim.workOrderId &&\n current.questionnaireId === claim.questionnaireId &&\n !this.isClaimStale(current)\n ) {\n return false;\n }\n await this.patchProperties(instanceId, { [AXM_INTERVAL_CHECKLIST_CLAIM]: claim });\n const reread = this.readClaim(this.readProperties(await this.readWorkflowInstance(instanceId)));\n return reread?.token === claim.token;\n }\n\n private async clearClaim(instanceId: string, token: string): Promise<void> {\n const instance = await this.readWorkflowInstance(instanceId);\n const current = this.readClaim(this.readProperties(instance));\n if (!current || current.token !== token) {\n return;\n }\n await this.patchProperties(instanceId, { [AXM_INTERVAL_CHECKLIST_CLAIM]: null });\n }\n\n private async waitForOccurrence(\n instanceId: string,\n workOrderId: string,\n questionnaireId: string,\n ): Promise<ChecklistOccurrenceIds | null> {\n for (let attempt = 0; attempt < 20; attempt += 1) {\n const found = await this.findExistingOccurrence(instanceId, workOrderId, questionnaireId);\n if (found) {\n return found;\n }\n const claim = this.readClaim(this.readProperties(await this.readWorkflowInstance(instanceId)));\n if (!claim || this.isClaimStale(claim)) {\n return null;\n }\n await this.delay(250);\n }\n return null;\n }\n\n private isClaimStale(claim: ChecklistClaim): boolean {\n const at = Date.parse(claim.at);\n return Number.isNaN(at) || Date.now() - at > CLAIM_TTL_MS;\n }\n\n private async persistOccurrenceIds(\n instanceId: string,\n bookmarkId: string,\n workOrderId: string,\n questionnaireId: string,\n ids: ChecklistOccurrenceIds,\n ): Promise<void> {\n await this.patchProperties(\n instanceId,\n {\n [AXM_INTERVAL_CHECKLIST_CASE_ID]: ids.caseId,\n [AXM_INTERVAL_CHECKLIST_SESSION_ID]: ids.sessionId,\n [AXM_INTERVAL_CHECKLIST_QUESTIONNAIRE_ID]: questionnaireId,\n },\n (bookmark) => {\n const payload = this.readBookmarkPayload(bookmark);\n if (!payload) {\n return bookmark;\n }\n const context = this.asRecord(payload['context']) ?? {};\n if (bookmarkId && this.resolveText(bookmark['id']) !== bookmarkId) {\n return bookmark;\n }\n if (!bookmarkId && this.resolveText(context['workOrderId']) !== workOrderId) {\n return bookmark;\n }\n payload['context'] = {\n ...context,\n workOrderId,\n checklist: questionnaireId,\n [AXM_INTERVAL_CHECKLIST_CASE_ID]: ids.caseId,\n [AXM_INTERVAL_CHECKLIST_SESSION_ID]: ids.sessionId,\n [AXM_INTERVAL_CHECKLIST_QUESTIONNAIRE_ID]: questionnaireId,\n };\n return { ...bookmark, payload, payloadJson: JSON.stringify(payload) };\n },\n );\n }\n\n private async patchProperties(\n instanceId: string,\n propertyPatch: Record<string, unknown>,\n mapBookmark?: (bookmark: Record<string, unknown>) => Record<string, unknown>,\n ): Promise<void> {\n const instance = await this.readWorkflowInstance(instanceId);\n if (!instance) {\n throw new Error('Workflow instance not found.');\n }\n const workflowInstance = this.asRecord(instance['workflowInstance']);\n if (!workflowInstance) {\n throw new Error('Workflow instance payload is missing.');\n }\n const workflowState = { ...(this.asRecord(workflowInstance['workflowState']) ?? {}) };\n const properties = { ...(this.asRecord(workflowState['properties']) ?? {}), ...propertyPatch };\n workflowState['properties'] = properties;\n const bookmarks = this.readBookmarks(instance).map((bookmark) => (mapBookmark ? mapBookmark(bookmark) : bookmark));\n await this.entityService\n .withEntity('WorkflowManagement', 'WorkflowInstance')\n .data()\n .update(instanceId, {\n workflowInstance: {\n ...workflowInstance,\n workflowState,\n bookmarks,\n },\n } as never);\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n /**\n * Work-order status wins. A completed card bookmark is used when the stored status is not a plain string.\n */\n private resolveViewerMode(\n workOrder: AXMMaintenanceManagementWorkOrderEntityModel,\n instance: Record<string, unknown>,\n bookmarkId: string,\n workOrderId: string,\n ): 'editable' | 'readonly' | 'unavailable' {\n const record = workOrder as unknown as Record<string, unknown>;\n const fromWorkOrder = resolveIntervalChecklistViewerMode(record['statusId'] ?? record['status']);\n if (fromWorkOrder !== 'unavailable') {\n return fromWorkOrder;\n }\n return resolveIntervalChecklistViewerMode(this.readCardStatus(instance, bookmarkId, workOrderId));\n }\n\n private readCardStatus(\n instance: Record<string, unknown>,\n bookmarkId: string,\n workOrderId: string,\n ): unknown {\n for (const bookmark of this.readBookmarks(instance)) {\n if (bookmark['isConsumed'] === true || bookmark['consumed'] === true) {\n continue;\n }\n const payload = this.readBookmarkPayload(bookmark);\n const context = this.asRecord(payload?.['context']);\n const bookmarkMatches = bookmarkId\n ? this.resolveText(bookmark['id']) === bookmarkId\n : this.resolveText(context?.['workOrderId']) === workOrderId;\n if (!bookmarkMatches) {\n continue;\n }\n return context?.['statusId'];\n }\n return undefined;\n }\n\n private async loadWorkOrder(workOrderId: string): Promise<AXMMaintenanceManagementWorkOrderEntityModel | null> {\n const loaded = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workOrder.name)\n .data()\n .byKey(workOrderId);\n return (loaded as AXMMaintenanceManagementWorkOrderEntityModel | null) ?? null;\n }\n\n private async resolveAssigneeUserId(personId: string): Promise<string> {\n if (!personId) {\n return '';\n }\n const page = await this.entityService\n .withEntity('HumanCapitalManagement', 'Employee')\n .data()\n .query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{ field: 'personId', operator: { type: 'equal' }, value: personId }],\n },\n } as never);\n const employee = defaultTo(get(page, 'items[0]'), null) as { userId?: string } | null;\n return this.resolveText(employee?.userId);\n }\n\n private async readWorkflowInstance(instanceId: string): Promise<Record<string, unknown> | null> {\n const loaded = await this.entityService.withEntity('WorkflowManagement', 'WorkflowInstance').data().byKey(instanceId);\n return this.asRecord(loaded);\n }\n\n private readProperties(instance: Record<string, unknown> | null): Record<string, unknown> {\n const workflowInstance = this.asRecord(instance?.['workflowInstance']);\n const workflowState = this.asRecord(workflowInstance?.['workflowState']);\n return this.asRecord(workflowState?.['properties']) ?? {};\n }\n\n private readClaim(properties: Record<string, unknown>): ChecklistClaim | null {\n const claim = this.asRecord(properties[AXM_INTERVAL_CHECKLIST_CLAIM]);\n const token = this.resolveText(claim?.['token']);\n const at = this.resolveText(claim?.['at']);\n const workOrderId = this.resolveText(claim?.['workOrderId']);\n const questionnaireId = this.resolveText(claim?.['questionnaireId']);\n if (!claim || !token || !at || !workOrderId || !questionnaireId) {\n return null;\n }\n return { token, at, workOrderId, questionnaireId };\n }\n\n private readBookmarks(instance: Record<string, unknown> | null): Record<string, unknown>[] {\n const workflowInstance = this.asRecord(instance?.['workflowInstance']);\n const bookmarks = workflowInstance?.['bookmarks'];\n if (!Array.isArray(bookmarks)) {\n return [];\n }\n return bookmarks\n .map((bookmark) => this.asRecord(bookmark))\n .filter((bookmark): bookmark is Record<string, unknown> => !!bookmark);\n }\n\n private readBookmarkPayload(bookmark: Record<string, unknown>): Record<string, unknown> | null {\n const payload = this.asRecord(bookmark['payload']);\n if (payload) {\n return { ...payload };\n }\n const payloadJson = bookmark['payloadJson'];\n if (typeof payloadJson !== 'string' || !payloadJson.trim()) {\n return null;\n }\n try {\n return this.asRecord(JSON.parse(payloadJson));\n } catch {\n return null;\n }\n }\n\n private resolveCreatedId(created: unknown): string {\n if (typeof created === 'string') {\n return created.trim();\n }\n return this.resolveText(get(created, 'id'));\n }\n\n private resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n }\n\n private asRecord(value: unknown): Record<string, unknown> | null {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return null;\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private async failKey(key: string): AXPCommandExecuteResultPromise<void> {\n const text = await this.translationService.translateAsync(key);\n return this.fail(text);\n }\n\n private async fail(text: string): AXPCommandExecuteResultPromise<void> {\n this.toastService.show({\n color: 'warning',\n title: await this.translationService.translateAsync('@general:messages.generic.warning.title'),\n content: text,\n closeButton: true,\n timeOut: 8000,\n });\n return { success: false, message: { text } };\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
5
  import { defaultTo, get, isString } from 'lodash';
6
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-gUetoBL2.mjs';
7
+ import { A as AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-C3cGlFKd.mjs';
8
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
9
 
10
10
  //#region ---- Imports ----
@@ -149,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
149
149
  }] });
150
150
 
151
151
  export { RecordWorkReportAssessmentActivity };
152
- //# sourceMappingURL=acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-B1MzM5zk.mjs.map
152
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-StzIetk8.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-B1MzM5zk.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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"}
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-StzIetk8.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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"}
@@ -8,7 +8,7 @@ import * as i0 from '@angular/core';
8
8
  import { inject, Injectable } from '@angular/core';
9
9
  import { get, defaultTo, isString } from 'lodash';
10
10
  import { AXMWorkOrderStatus, RootConfig } from '@acorex-platform/module-maintenance-management-client/contracts';
11
- import { q as queryWorkflowTemplatesForAsset, r as resolveDisplayLabel } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-gUetoBL2.mjs';
11
+ import { q as queryWorkflowTemplatesForAsset, r as resolveDisplayLabel } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-C3cGlFKd.mjs';
12
12
  import { r as resolveStartWorkOrderFlowIds, p as persistIntervalTaskCard } from './acorex-platform-module-maintenance-management-client-start-work-order-flow-id.util-CuUi8LBT.mjs';
13
13
 
14
14
  //#region ---- Imports ----
@@ -647,4 +647,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
647
647
  }] });
648
648
 
649
649
  export { StartWorkOrderFlowCommand };
650
- //# sourceMappingURL=acorex-platform-module-maintenance-management-client-start-work-order-flow.command-0Grjl6rZ.mjs.map
650
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-start-work-order-flow.command-CNau6u4p.mjs.map