@acorex-platform/module-maintenance-management-client 2.0.0-next.1 → 2.0.0-next.11
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-CGjcOjjv.mjs → acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-gUetoBL2.mjs} +115 -29
- package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-gUetoBL2.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entities-maintenance-plan.mjs +26 -3
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entities-maintenance-plan.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entities-work-order.mjs +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entities-work-order.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-acorex-platform-module-maintenance-management-client-contracts-entity-catalog-Dgu63wyv.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-acorex-platform-module-maintenance-management-client-contracts-entity-catalog-B3VyUXZS.mjs} +27 -27
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-acorex-platform-module-maintenance-management-client-contracts-entity-catalog-Dgu63wyv.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-acorex-platform-module-maintenance-management-client-contracts-entity-catalog-B3VyUXZS.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-asset-type.entity-CePSpBHM.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-asset-type.entity-CsYZTxT_.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-asset-type.entity-CePSpBHM.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-asset-type.entity-CsYZTxT_.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-resource.entity-Bfvk4GcQ.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-resource.entity-Bh5dBgpo.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-resource.entity-Bfvk4GcQ.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-resource.entity-Bh5dBgpo.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type.entity-Jy3BDuNN.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type.entity-DvO6Fzyy.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type.entity-Jy3BDuNN.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type.entity-DvO6Fzyy.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-cause.entity-CCgWn686.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-cause.entity-PdvjV4lk.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-cause.entity-CCgWn686.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-cause.entity-PdvjV4lk.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-detection.entity-r_GaKV4C.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-detection.entity-BV-O5oRI.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-detection.entity-r_GaKV4C.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-detection.entity-BV-O5oRI.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-effect.entity-BC8cmP-E.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-effect.entity-GqFBuuiR.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-effect.entity-BC8cmP-E.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-effect.entity-GqFBuuiR.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mechanism.entity-DkyVyX8d.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mechanism.entity-CiqHDstL.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mechanism.entity-DkyVyX8d.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mechanism.entity-CiqHDstL.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-asset-type.entity-WxiHq42o.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-asset-type.entity-TcC_1stz.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-asset-type.entity-WxiHq42o.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-asset-type.entity-TcC_1stz.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-mechanism.entity-B1yGBbFQ.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-mechanism.entity-q2O4YHPk.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-mechanism.entity-B1yGBbFQ.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-mechanism.entity-q2O4YHPk.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-solution.entity-Bquvs5zg.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-solution.entity-CeyOYGAL.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-solution.entity-Bquvs5zg.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-solution.entity-CeyOYGAL.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode.entity-DU4i03Hi.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode.entity-CDWqPcEx.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode.entity-DU4i03Hi.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode.entity-CDWqPcEx.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-cause.entity-DvO7KoEq.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-cause.entity-6GS66uos.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-cause.entity-DvO7KoEq.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-cause.entity-6GS66uos.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-effect.entity-DK702y8j.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-effect.entity-BDsiwqyj.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-effect.entity-DK702y8j.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-effect.entity-BDsiwqyj.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-mechanism.entity-Dua1ufeE.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-mechanism.entity-DYX8gBDO.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-mechanism.entity-Dua1ufeE.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-mechanism.entity-DYX8gBDO.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register.entity-Cs-SLfHm.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register.entity-DWKPDUB7.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register.entity-Cs-SLfHm.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register.entity-DWKPDUB7.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-severity.entity-C-vkhC0g.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-severity.entity-wHk-6VCb.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-severity.entity-C-vkhC0g.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-severity.entity-wHk-6VCb.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-type.entity-DEcLe9MD.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-type.entity-tTg4D_-N.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-type.entity-DEcLe9MD.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-type.entity-tTg4D_-N.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-plan.entity-R0UVSWKi.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-plan.entity-BwsjdQur.mjs} +28 -5
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-plan.entity-BwsjdQur.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-activity-type.entity-C3KERG4U.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-activity-type.entity-CCx9h8Gq.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-activity-type.entity-C3KERG4U.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-activity-type.entity-CCx9h8Gq.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-failure-mode.entity-EXXJjDYH.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-failure-mode.entity-BlfNXvBw.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-failure-mode.entity-EXXJjDYH.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-failure-mode.entity-BlfNXvBw.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-resource.entity-CrMPuOD8.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-resource.entity-2lGT7_Xi.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-resource.entity-CrMPuOD8.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-resource.entity-2lGT7_Xi.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template.entity-Bn2DAaNN.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template.entity-bJKzxAis.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template.entity-Bn2DAaNN.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template.entity-bJKzxAis.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-type.entity-DS8_oRB7.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-type.entity-j2eyDg9O.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-type.entity-DS8_oRB7.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-type.entity-j2eyDg9O.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-order.entity-DS1RPQ-I.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-order.entity-DFJdx9Km.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-order.entity-DS1RPQ-I.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-order.entity-DFJdx9Km.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-package.entity-BUMsgLTC.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-package.entity-DM60G8nP.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-package.entity-BUMsgLTC.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-package.entity-DM60G8nP.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-report.entity-V0CqICBq.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-report.entity-DOvNijen.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-report.entity-V0CqICBq.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-report.entity-DOvNijen.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog.mjs +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts.mjs +475 -3
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-BXKKfu4I.mjs → acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-ByaIojAq.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-BXKKfu4I.mjs.map → acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-ByaIojAq.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-Be1Nup4H.mjs → acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-C-fjBgRp.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-Be1Nup4H.mjs.map → acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-C-fjBgRp.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-B-6cnmrR.mjs +597 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-B-6cnmrR.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BJUgm59a.mjs → acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-B1MzM5zk.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BJUgm59a.mjs.map → acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-B1MzM5zk.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-sign-off-work-order.command-Ca8WbM3R.mjs +217 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-sign-off-work-order.command-Ca8WbM3R.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow-id.util-CuUi8LBT.mjs +123 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow-id.util-CuUi8LBT.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-start-work-order-flow.command-Bg1do_Uu.mjs → acorex-platform-module-maintenance-management-client-start-work-order-flow.command-0Grjl6rZ.mjs} +249 -129
- package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-0Grjl6rZ.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-B8vjsOI_.mjs → acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-DXhNeYyx.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-B8vjsOI_.mjs.map → acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-DXhNeYyx.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-DG80hqRj.mjs → acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-ClRITLiw.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-DG80hqRj.mjs.map → acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-ClRITLiw.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client.mjs +1 -1
- package/i18n/en-AU/maintenance-management.json +52 -5
- package/i18n/en-US/maintenance-management.json +52 -5
- package/i18n/fa-IR/maintenance-management.json +52 -5
- package/package.json +2 -2
- package/types/acorex-platform-module-maintenance-management-client-contracts.d.ts +153 -2
- package/types/acorex-platform-module-maintenance-management-client.d.ts +3 -2
- package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-CGjcOjjv.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-plan.entity-R0UVSWKi.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-Bg1do_Uu.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-maintenance-management-client-open-work-order-checklist-form.command-B-6cnmrR.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';\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 const answers = this.asRecord(session?.['answers']) ?? {};\n if (Object.keys(answers).length > 0) {\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 const answers = this.asRecord(session?.['answers']) ?? {};\n if (Object.keys(answers).length > 0) {\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-
|
|
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';
|
|
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-
|
|
152
|
+
//# sourceMappingURL=acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-B1MzM5zk.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BJUgm59a.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-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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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { AXToastService } from '@acorex/components/toast';
|
|
2
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
3
|
+
import { AXPSessionService } from '@acorex-platform/framework-client/auth';
|
|
4
|
+
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
5
|
+
import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
|
|
6
|
+
import * as i0 from '@angular/core';
|
|
7
|
+
import { inject, Injectable } from '@angular/core';
|
|
8
|
+
import { get, isString } from 'lodash';
|
|
9
|
+
import { RootConfig, resolveChecklistId, readIntervalChecklistId, AXMWorkOrderStatus, readSignOffActivityOutcome, AXMMaintenanceManagementCommandKeys, AXM_INTERVAL_CHECKLIST_CASE_ID, AXM_INTERVAL_CHECKLIST_SESSION_ID, isWorkOrderChecklistOccurrence } from '@acorex-platform/module-maintenance-management-client/contracts';
|
|
10
|
+
import { r as resolveStartWorkOrderFlowIds, p as persistIntervalTaskCard } from './acorex-platform-module-maintenance-management-client-start-work-order-flow-id.util-CuUi8LBT.mjs';
|
|
11
|
+
|
|
12
|
+
//#region ----- Imports -----
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region ----- Constants -----
|
|
15
|
+
const SIGN_OFF_ACTIVITY = 'workflow-activity:sign-off';
|
|
16
|
+
const ASSESSMENT_MODULE = 'AssessmentManagement';
|
|
17
|
+
const ASSESSMENT_CASE = 'AssessmentCase';
|
|
18
|
+
const ASSESSMENT_SESSION = 'AssessmentSession';
|
|
19
|
+
const WORK_ORDER_SUBJECT_TYPE = `${RootConfig.module.name}.${RootConfig.entities.workOrder.name}`;
|
|
20
|
+
//#endregion
|
|
21
|
+
/**
|
|
22
|
+
* Signs off the interval work-order card.
|
|
23
|
+
* Cancel leaves the work order, answers, and card unchanged.
|
|
24
|
+
* Signed asks the server to complete the work order and keeps this card on the board.
|
|
25
|
+
*/
|
|
26
|
+
class SignOffWorkOrderCommand {
|
|
27
|
+
constructor() {
|
|
28
|
+
//#region ----- Services & Dependencies -----
|
|
29
|
+
this.entityService = inject(AXPEntityService);
|
|
30
|
+
this.commandService = inject(AXPCommandService);
|
|
31
|
+
this.sessionService = inject(AXPSessionService);
|
|
32
|
+
this.toastService = inject(AXToastService);
|
|
33
|
+
this.translationService = inject(AXTranslationService);
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region ----- Command Implementation -----
|
|
37
|
+
async execute(input) {
|
|
38
|
+
const ids = resolveStartWorkOrderFlowIds(input);
|
|
39
|
+
const workOrderId = ids.workOrderId;
|
|
40
|
+
if (!workOrderId) {
|
|
41
|
+
return this.fail('Work order id is required.');
|
|
42
|
+
}
|
|
43
|
+
if (!ids.sourceInstanceId) {
|
|
44
|
+
return this.fail('Workflow instance id is required.');
|
|
45
|
+
}
|
|
46
|
+
const workOrder = await this.loadWorkOrder(workOrderId);
|
|
47
|
+
if (!workOrder) {
|
|
48
|
+
return this.fail('Work order not found.');
|
|
49
|
+
}
|
|
50
|
+
const currentUserId = this.resolveText(this.sessionService.user?.id);
|
|
51
|
+
const assigneeUserId = await this.resolveAssigneeUserId(this.resolveText(workOrder.assignedToId));
|
|
52
|
+
if (!currentUserId || !assigneeUserId || currentUserId !== assigneeUserId) {
|
|
53
|
+
return this.failKey('@maintenance-management:work-orders.messages.interval-sign-off-assignee-only');
|
|
54
|
+
}
|
|
55
|
+
const instance = await this.readWorkflowInstance(ids.sourceInstanceId);
|
|
56
|
+
if (!instance) {
|
|
57
|
+
return this.fail('Workflow instance not found.');
|
|
58
|
+
}
|
|
59
|
+
const requestedChecklist = resolveChecklistId(get(input, 'checklist')) || resolveChecklistId(get(input, 'options.checklist'));
|
|
60
|
+
const questionnaireId = readIntervalChecklistId(instance, requestedChecklist);
|
|
61
|
+
const occurrence = await this.readLinkedOccurrence(instance, workOrderId, questionnaireId);
|
|
62
|
+
if (!occurrence) {
|
|
63
|
+
return this.failKey('@maintenance-management:work-orders.messages.interval-sign-off-checklist-required');
|
|
64
|
+
}
|
|
65
|
+
const statusId = workOrder.statusId ?? '';
|
|
66
|
+
if (statusId === AXMWorkOrderStatus.Completed) {
|
|
67
|
+
await persistIntervalTaskCard(this.entityService, {
|
|
68
|
+
instanceId: ids.sourceInstanceId,
|
|
69
|
+
workOrderId,
|
|
70
|
+
sourceBookmarkId: ids.sourceBookmarkId,
|
|
71
|
+
mode: 'completed',
|
|
72
|
+
});
|
|
73
|
+
return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Signed' } };
|
|
74
|
+
}
|
|
75
|
+
if (statusId !== AXMWorkOrderStatus.InProgress) {
|
|
76
|
+
return this.failKey('@maintenance-management:work-orders.messages.interval-sign-off-requires-in-progress');
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const dialog = await this.commandService.execute(SIGN_OFF_ACTIVITY, {
|
|
80
|
+
message: '@maintenance-management:work-orders.messages.interval-sign-off-dialog',
|
|
81
|
+
refId: workOrderId,
|
|
82
|
+
refType: WORK_ORDER_SUBJECT_TYPE,
|
|
83
|
+
});
|
|
84
|
+
const outcome = readSignOffActivityOutcome(dialog);
|
|
85
|
+
if (outcome === 'Cancelled') {
|
|
86
|
+
return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Cancelled' } };
|
|
87
|
+
}
|
|
88
|
+
if (outcome !== 'Signed') {
|
|
89
|
+
return this.failKey('@maintenance-management:work-orders.messages.interval-sign-off-failed');
|
|
90
|
+
}
|
|
91
|
+
return this.completeOnServer(workOrderId, occurrence, ids.sourceInstanceId, ids.sourceBookmarkId);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
const message = error instanceof Error
|
|
95
|
+
? error.message
|
|
96
|
+
: await this.translationService.translateAsync('@general:messages.generic.error.description');
|
|
97
|
+
console.error('[SignOffWorkOrderCommand]', error);
|
|
98
|
+
return this.fail(message);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
//#region ----- Completion -----
|
|
103
|
+
async completeOnServer(workOrderId, occurrence, instanceId, bookmarkId) {
|
|
104
|
+
const result = await this.commandService.executeRemote(AXMMaintenanceManagementCommandKeys.WorkOrder.CompleteIntervalSignOff, {
|
|
105
|
+
workOrderId,
|
|
106
|
+
caseId: occurrence.caseId,
|
|
107
|
+
sessionId: occurrence.sessionId,
|
|
108
|
+
});
|
|
109
|
+
if (!result?.success) {
|
|
110
|
+
const message = this.resolveText(result?.message?.text);
|
|
111
|
+
return this.failKey(message || '@maintenance-management:work-orders.messages.interval-sign-off-failed');
|
|
112
|
+
}
|
|
113
|
+
await persistIntervalTaskCard(this.entityService, {
|
|
114
|
+
instanceId,
|
|
115
|
+
workOrderId,
|
|
116
|
+
sourceBookmarkId: bookmarkId,
|
|
117
|
+
mode: 'completed',
|
|
118
|
+
});
|
|
119
|
+
return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Signed' } };
|
|
120
|
+
}
|
|
121
|
+
//#endregion
|
|
122
|
+
//#region ----- Checklist -----
|
|
123
|
+
async readLinkedOccurrence(instance, workOrderId, questionnaireId) {
|
|
124
|
+
if (!questionnaireId) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
const properties = this.readProperties(instance);
|
|
128
|
+
const caseId = this.resolveText(properties[AXM_INTERVAL_CHECKLIST_CASE_ID]);
|
|
129
|
+
const sessionId = this.resolveText(properties[AXM_INTERVAL_CHECKLIST_SESSION_ID]);
|
|
130
|
+
if (!caseId || !sessionId) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const assessmentCase = this.asRecord(await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_CASE).data().byKey(caseId));
|
|
134
|
+
const session = this.asRecord(await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().byKey(sessionId));
|
|
135
|
+
if (!isWorkOrderChecklistOccurrence({
|
|
136
|
+
assessmentCase,
|
|
137
|
+
session,
|
|
138
|
+
workOrderId,
|
|
139
|
+
questionnaireId,
|
|
140
|
+
subjectType: WORK_ORDER_SUBJECT_TYPE,
|
|
141
|
+
})) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
return { caseId, sessionId };
|
|
145
|
+
}
|
|
146
|
+
readProperties(instance) {
|
|
147
|
+
const workflowInstance = this.asRecord(instance['workflowInstance']);
|
|
148
|
+
const workflowState = this.asRecord(workflowInstance?.['workflowState']);
|
|
149
|
+
return this.asRecord(workflowState?.['properties']) ?? {};
|
|
150
|
+
}
|
|
151
|
+
//#endregion
|
|
152
|
+
//#region ----- Records -----
|
|
153
|
+
async loadWorkOrder(workOrderId) {
|
|
154
|
+
const loaded = await this.entityService
|
|
155
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.workOrder.name)
|
|
156
|
+
.data()
|
|
157
|
+
.byKey(workOrderId);
|
|
158
|
+
return loaded ?? null;
|
|
159
|
+
}
|
|
160
|
+
async readWorkflowInstance(instanceId) {
|
|
161
|
+
const loaded = await this.entityService
|
|
162
|
+
.withEntity('WorkflowManagement', 'WorkflowInstance')
|
|
163
|
+
.data()
|
|
164
|
+
.byKey(instanceId);
|
|
165
|
+
return this.asRecord(loaded);
|
|
166
|
+
}
|
|
167
|
+
async resolveAssigneeUserId(personId) {
|
|
168
|
+
if (!personId) {
|
|
169
|
+
return '';
|
|
170
|
+
}
|
|
171
|
+
const page = await this.entityService.withEntity('HumanCapitalManagement', 'Employee').data().query({
|
|
172
|
+
skip: 0,
|
|
173
|
+
take: 1,
|
|
174
|
+
filter: {
|
|
175
|
+
logic: 'and',
|
|
176
|
+
filters: [{ field: 'personId', operator: { type: 'equal' }, value: personId }],
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
const row = this.asRecord(page?.items?.[0]);
|
|
180
|
+
return this.resolveText(row?.['userId']);
|
|
181
|
+
}
|
|
182
|
+
resolveText(value) {
|
|
183
|
+
if (!isString(value)) {
|
|
184
|
+
return '';
|
|
185
|
+
}
|
|
186
|
+
return value.trim();
|
|
187
|
+
}
|
|
188
|
+
asRecord(value) {
|
|
189
|
+
if (value != null && typeof value === 'object' && !Array.isArray(value)) {
|
|
190
|
+
return value;
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
async failKey(key) {
|
|
195
|
+
const text = key.startsWith('@') ? await this.translationService.translateAsync(key) : key;
|
|
196
|
+
return this.fail(text);
|
|
197
|
+
}
|
|
198
|
+
async fail(text) {
|
|
199
|
+
this.toastService.show({
|
|
200
|
+
color: 'warning',
|
|
201
|
+
title: await this.translationService.translateAsync('@general:messages.generic.warning.title'),
|
|
202
|
+
content: text,
|
|
203
|
+
closeButton: true,
|
|
204
|
+
timeOut: 8000,
|
|
205
|
+
});
|
|
206
|
+
return { success: false, message: { text } };
|
|
207
|
+
}
|
|
208
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SignOffWorkOrderCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
209
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SignOffWorkOrderCommand, providedIn: 'root' }); }
|
|
210
|
+
}
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SignOffWorkOrderCommand, decorators: [{
|
|
212
|
+
type: Injectable,
|
|
213
|
+
args: [{ providedIn: 'root' }]
|
|
214
|
+
}] });
|
|
215
|
+
|
|
216
|
+
export { SignOffWorkOrderCommand };
|
|
217
|
+
//# sourceMappingURL=acorex-platform-module-maintenance-management-client-sign-off-work-order.command-Ca8WbM3R.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-maintenance-management-client-sign-off-work-order.command-Ca8WbM3R.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/commands/sign-off-work-order.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 { get, isString } from 'lodash';\n\nimport {\n AXMMaintenanceManagementCommandKeys,\n AXMWorkOrderStatus,\n AXM_INTERVAL_CHECKLIST_CASE_ID,\n AXM_INTERVAL_CHECKLIST_SESSION_ID,\n isWorkOrderChecklistOccurrence,\n readIntervalChecklistId,\n readSignOffActivityOutcome,\n resolveChecklistId,\n RootConfig,\n} from '@acorex-platform/module-maintenance-management-client/contracts';\nimport type { AXMMaintenanceManagementWorkOrderEntityModel } from '@acorex-platform/module-maintenance-management-client/contracts';\n\nimport { persistIntervalTaskCard } from './interval-task-card.persist';\nimport { resolveStartWorkOrderFlowIds } from './start-work-order-flow-id.util';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst SIGN_OFF_ACTIVITY = 'workflow-activity:sign-off';\nconst ASSESSMENT_MODULE = 'AssessmentManagement';\nconst ASSESSMENT_CASE = 'AssessmentCase';\nconst ASSESSMENT_SESSION = 'AssessmentSession';\nconst WORK_ORDER_SUBJECT_TYPE = `${RootConfig.module.name}.${RootConfig.entities.workOrder.name}`;\n\ninterface SignOffWorkOrderInput {\n checklist?: string;\n data?: Record<string, unknown>;\n options?: { checklist?: string };\n instanceId?: string;\n bookmarkId?: string;\n}\n\ninterface SignOffDialogData {\n signature?: unknown;\n}\n\n//#endregion\n\n/**\n * Signs off the interval work-order card.\n * Cancel leaves the work order, answers, and card unchanged.\n * Signed asks the server to complete the work order and keeps this card on the board.\n */\n@Injectable({ providedIn: 'root' })\nexport class SignOffWorkOrderCommand implements AXPCommand<SignOffWorkOrderInput, 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: SignOffWorkOrderInput): 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 if (!ids.sourceInstanceId) {\n return this.fail('Workflow instance 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.interval-sign-off-assignee-only');\n }\n\n const instance = await this.readWorkflowInstance(ids.sourceInstanceId);\n if (!instance) {\n return this.fail('Workflow instance not found.');\n }\n const requestedChecklist =\n resolveChecklistId(get(input, 'checklist')) || resolveChecklistId(get(input, 'options.checklist'));\n const questionnaireId = readIntervalChecklistId(instance, requestedChecklist);\n const occurrence = await this.readLinkedOccurrence(instance, workOrderId, questionnaireId);\n if (!occurrence) {\n return this.failKey('@maintenance-management:work-orders.messages.interval-sign-off-checklist-required');\n }\n\n const statusId = workOrder.statusId ?? '';\n if (statusId === AXMWorkOrderStatus.Completed) {\n await persistIntervalTaskCard(this.entityService, {\n instanceId: ids.sourceInstanceId,\n workOrderId,\n sourceBookmarkId: ids.sourceBookmarkId,\n mode: 'completed',\n });\n return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Signed' } };\n }\n if (statusId !== AXMWorkOrderStatus.InProgress) {\n return this.failKey('@maintenance-management:work-orders.messages.interval-sign-off-requires-in-progress');\n }\n\n try {\n const dialog = await this.commandService.execute<Record<string, unknown>, SignOffDialogData>(SIGN_OFF_ACTIVITY, {\n message: '@maintenance-management:work-orders.messages.interval-sign-off-dialog',\n refId: workOrderId,\n refType: WORK_ORDER_SUBJECT_TYPE,\n });\n const outcome = readSignOffActivityOutcome(dialog);\n if (outcome === 'Cancelled') {\n return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Cancelled' } };\n }\n if (outcome !== 'Signed') {\n return this.failKey('@maintenance-management:work-orders.messages.interval-sign-off-failed');\n }\n return this.completeOnServer(workOrderId, occurrence, ids.sourceInstanceId, ids.sourceBookmarkId);\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('[SignOffWorkOrderCommand]', error);\n return this.fail(message);\n }\n }\n\n //#endregion\n\n //#region ----- Completion -----\n\n private async completeOnServer(\n workOrderId: string,\n occurrence: { caseId: string; sessionId: string },\n instanceId: string,\n bookmarkId: string,\n ): AXPCommandExecuteResultPromise<void> {\n const result = await this.commandService.executeRemote<Record<string, unknown>, { alreadySigned: boolean }>(\n AXMMaintenanceManagementCommandKeys.WorkOrder.CompleteIntervalSignOff,\n {\n workOrderId,\n caseId: occurrence.caseId,\n sessionId: occurrence.sessionId,\n },\n );\n if (!result?.success) {\n const message = this.resolveText(result?.message?.text);\n return this.failKey(message || '@maintenance-management:work-orders.messages.interval-sign-off-failed');\n }\n\n await persistIntervalTaskCard(this.entityService, {\n instanceId,\n workOrderId,\n sourceBookmarkId: bookmarkId,\n mode: 'completed',\n });\n return { success: true, kind: 'object', data: undefined, metadata: { outcome: 'Signed' } };\n }\n\n //#endregion\n\n //#region ----- Checklist -----\n\n private async readLinkedOccurrence(\n instance: Record<string, unknown>,\n workOrderId: string,\n questionnaireId: string,\n ): Promise<{ caseId: string; sessionId: string } | null> {\n if (!questionnaireId) {\n return null;\n }\n const properties = this.readProperties(instance);\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 const assessmentCase = this.asRecord(\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_CASE).data().byKey(caseId),\n );\n const session = this.asRecord(\n await this.entityService.withEntity(ASSESSMENT_MODULE, ASSESSMENT_SESSION).data().byKey(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, sessionId };\n }\n\n private readProperties(instance: Record<string, unknown>): 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 //#endregion\n\n //#region ----- Records -----\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 readWorkflowInstance(instanceId: string): Promise<Record<string, unknown> | null> {\n const loaded = await this.entityService\n .withEntity('WorkflowManagement', 'WorkflowInstance')\n .data()\n .byKey(instanceId);\n return this.asRecord(loaded);\n }\n\n private async resolveAssigneeUserId(personId: string): Promise<string> {\n if (!personId) {\n return '';\n }\n const page = await this.entityService.withEntity('HumanCapitalManagement', 'Employee').data().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 row = this.asRecord((page as { items?: unknown[] } | null)?.items?.[0]);\n return this.resolveText(row?.['userId']);\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 async failKey(key: string): AXPCommandExecuteResultPromise<void> {\n const text = key.startsWith('@') ? await this.translationService.translateAsync(key) : 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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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { rewriteIntervalCardBookmarks } from '@acorex-platform/module-maintenance-management-client/contracts';
|
|
2
|
+
|
|
3
|
+
//#region ----- Imports -----
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region ----- Constants -----
|
|
6
|
+
const WORKFLOW_INSTANCE_MODULE = 'WorkflowManagement';
|
|
7
|
+
const WORKFLOW_INSTANCE_ENTITY = 'WorkflowInstance';
|
|
8
|
+
//#endregion
|
|
9
|
+
//#region ----- Persist -----
|
|
10
|
+
/**
|
|
11
|
+
* Rewrites the active interval bookmark in place.
|
|
12
|
+
* The bookmark stays unconsumed, so the task board keeps the same card.
|
|
13
|
+
*/
|
|
14
|
+
async function persistIntervalTaskCard(entityService, input) {
|
|
15
|
+
const loaded = await entityService
|
|
16
|
+
.withEntity(WORKFLOW_INSTANCE_MODULE, WORKFLOW_INSTANCE_ENTITY)
|
|
17
|
+
.data()
|
|
18
|
+
.byKey(input.instanceId);
|
|
19
|
+
const instance = asRecord(loaded);
|
|
20
|
+
if (!instance) {
|
|
21
|
+
throw new Error('Workflow instance not found.');
|
|
22
|
+
}
|
|
23
|
+
const workflowInstance = asRecord(instance['workflowInstance']);
|
|
24
|
+
if (!workflowInstance) {
|
|
25
|
+
throw new Error('Workflow instance payload is missing.');
|
|
26
|
+
}
|
|
27
|
+
const rewritten = rewriteIntervalCardBookmarks({
|
|
28
|
+
instance,
|
|
29
|
+
workOrderId: input.workOrderId,
|
|
30
|
+
sourceBookmarkId: input.sourceBookmarkId,
|
|
31
|
+
mode: input.mode,
|
|
32
|
+
assigneeUserId: input.assigneeUserId,
|
|
33
|
+
});
|
|
34
|
+
if (!rewritten.changed) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
await entityService
|
|
38
|
+
.withEntity(WORKFLOW_INSTANCE_MODULE, WORKFLOW_INSTANCE_ENTITY)
|
|
39
|
+
.data()
|
|
40
|
+
.update(input.instanceId, {
|
|
41
|
+
workflowInstance: {
|
|
42
|
+
...workflowInstance,
|
|
43
|
+
bookmarks: rewritten.bookmarks,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function asRecord(value) {
|
|
48
|
+
if (value != null && typeof value === 'object' && !Array.isArray(value)) {
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
|
|
55
|
+
//#region ----- Types -----
|
|
56
|
+
function resolveText(value) {
|
|
57
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
58
|
+
}
|
|
59
|
+
function isRecord(value) {
|
|
60
|
+
return value != null && typeof value === 'object' && !Array.isArray(value);
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region ----- Resolve -----
|
|
64
|
+
/**
|
|
65
|
+
* Distinguishes WorkOrder id from workflow-instance / bookmark ids on StartFlow input.
|
|
66
|
+
* Prefer explicit business `data.id` / `workOrderId`; never treat bookmarkId or instanceId as the work order.
|
|
67
|
+
*/
|
|
68
|
+
function resolveStartWorkOrderFlowIds(input) {
|
|
69
|
+
const root = isRecord(input) ? input : {};
|
|
70
|
+
const data = isRecord(root['data']) ? root['data'] : {};
|
|
71
|
+
const options = isRecord(root['options']) ? root['options'] : {};
|
|
72
|
+
const optionsData = isRecord(options['data']) ? options['data'] : {};
|
|
73
|
+
const sourceInstanceId = resolveText(root['instanceId']) ||
|
|
74
|
+
resolveText(data['instanceId']) ||
|
|
75
|
+
resolveText(options['instanceId']) ||
|
|
76
|
+
resolveText(optionsData['instanceId']);
|
|
77
|
+
const sourceBookmarkId = resolveText(root['bookmarkId']) ||
|
|
78
|
+
resolveText(data['bookmarkId']) ||
|
|
79
|
+
resolveText(options['bookmarkId']) ||
|
|
80
|
+
resolveText(optionsData['bookmarkId']);
|
|
81
|
+
const sourceActivityId = resolveText(root['activityId']) ||
|
|
82
|
+
resolveText(data['activityId']) ||
|
|
83
|
+
resolveText(options['activityId']) ||
|
|
84
|
+
resolveText(optionsData['activityId']);
|
|
85
|
+
const sourceTaskToken = resolveText(root['taskToken']) ||
|
|
86
|
+
resolveText(data['taskToken']) ||
|
|
87
|
+
resolveText(options['taskToken']) ||
|
|
88
|
+
resolveText(optionsData['taskToken']);
|
|
89
|
+
const candidates = [
|
|
90
|
+
resolveText(data['workOrderId']),
|
|
91
|
+
resolveText(root['workOrderId']),
|
|
92
|
+
resolveText(options['workOrderId']),
|
|
93
|
+
resolveText(data['id']),
|
|
94
|
+
resolveText(optionsData['id']),
|
|
95
|
+
resolveText(optionsData['workOrderId']),
|
|
96
|
+
];
|
|
97
|
+
let workOrderId = '';
|
|
98
|
+
for (const candidate of candidates) {
|
|
99
|
+
if (!candidate) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// Never confuse task-board / workflow ids with the work order.
|
|
103
|
+
if (candidate === sourceInstanceId ||
|
|
104
|
+
candidate === sourceBookmarkId ||
|
|
105
|
+
candidate === sourceActivityId ||
|
|
106
|
+
candidate === sourceTaskToken) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
workOrderId = candidate;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
workOrderId,
|
|
114
|
+
sourceInstanceId,
|
|
115
|
+
sourceBookmarkId,
|
|
116
|
+
sourceActivityId,
|
|
117
|
+
sourceTaskToken,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//#endregion
|
|
121
|
+
|
|
122
|
+
export { persistIntervalTaskCard as p, resolveStartWorkOrderFlowIds as r };
|
|
123
|
+
//# sourceMappingURL=acorex-platform-module-maintenance-management-client-start-work-order-flow-id.util-CuUi8LBT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-maintenance-management-client-start-work-order-flow-id.util-CuUi8LBT.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/commands/interval-task-card.persist.ts","../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/commands/start-work-order-flow-id.util.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { rewriteIntervalCardBookmarks, type IntervalTaskCardMode } from '@acorex-platform/module-maintenance-management-client/contracts';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst WORKFLOW_INSTANCE_MODULE = 'WorkflowManagement';\nconst WORKFLOW_INSTANCE_ENTITY = 'WorkflowInstance';\n\n//#endregion\n\n//#region ----- Persist -----\n\n/**\n * Rewrites the active interval bookmark in place.\n * The bookmark stays unconsumed, so the task board keeps the same card.\n */\nexport async function persistIntervalTaskCard(\n entityService: AXPEntityService,\n input: {\n instanceId: string;\n workOrderId: string;\n sourceBookmarkId?: string;\n mode: IntervalTaskCardMode;\n assigneeUserId?: string;\n },\n): Promise<void> {\n const loaded = await entityService\n .withEntity(WORKFLOW_INSTANCE_MODULE, WORKFLOW_INSTANCE_ENTITY)\n .data()\n .byKey(input.instanceId);\n const instance = asRecord(loaded);\n if (!instance) {\n throw new Error('Workflow instance not found.');\n }\n const workflowInstance = asRecord(instance['workflowInstance']);\n if (!workflowInstance) {\n throw new Error('Workflow instance payload is missing.');\n }\n\n const rewritten = rewriteIntervalCardBookmarks({\n instance,\n workOrderId: input.workOrderId,\n sourceBookmarkId: input.sourceBookmarkId,\n mode: input.mode,\n assigneeUserId: input.assigneeUserId,\n });\n if (!rewritten.changed) {\n return;\n }\n\n await entityService\n .withEntity(WORKFLOW_INSTANCE_MODULE, WORKFLOW_INSTANCE_ENTITY)\n .data()\n .update(input.instanceId, {\n workflowInstance: {\n ...workflowInstance,\n bookmarks: rewritten.bookmarks,\n },\n } as never);\n}\n\nfunction 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//#endregion\n","//#region ----- Types -----\n\nfunction resolveText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport interface StartWorkOrderFlowIdResolution {\n workOrderId: string;\n /** Interval (or other) workflow instance that owns the task-board card. */\n sourceInstanceId: string;\n sourceBookmarkId: string;\n sourceActivityId: string;\n sourceTaskToken: string;\n}\n\n//#endregion\n\n//#region ----- Resolve -----\n\n/**\n * Distinguishes WorkOrder id from workflow-instance / bookmark ids on StartFlow input.\n * Prefer explicit business `data.id` / `workOrderId`; never treat bookmarkId or instanceId as the work order.\n */\nexport function resolveStartWorkOrderFlowIds(input: Record<string, unknown> | null | undefined): StartWorkOrderFlowIdResolution {\n const root = isRecord(input) ? input : {};\n const data = isRecord(root['data']) ? root['data'] : {};\n const options = isRecord(root['options']) ? root['options'] : {};\n const optionsData = isRecord(options['data']) ? options['data'] : {};\n\n const sourceInstanceId =\n resolveText(root['instanceId']) ||\n resolveText(data['instanceId']) ||\n resolveText(options['instanceId']) ||\n resolveText(optionsData['instanceId']);\n const sourceBookmarkId =\n resolveText(root['bookmarkId']) ||\n resolveText(data['bookmarkId']) ||\n resolveText(options['bookmarkId']) ||\n resolveText(optionsData['bookmarkId']);\n const sourceActivityId =\n resolveText(root['activityId']) ||\n resolveText(data['activityId']) ||\n resolveText(options['activityId']) ||\n resolveText(optionsData['activityId']);\n const sourceTaskToken =\n resolveText(root['taskToken']) ||\n resolveText(data['taskToken']) ||\n resolveText(options['taskToken']) ||\n resolveText(optionsData['taskToken']);\n\n const candidates = [\n resolveText(data['workOrderId']),\n resolveText(root['workOrderId']),\n resolveText(options['workOrderId']),\n resolveText(data['id']),\n resolveText(optionsData['id']),\n resolveText(optionsData['workOrderId']),\n ];\n\n let workOrderId = '';\n for (const candidate of candidates) {\n if (!candidate) {\n continue;\n }\n // Never confuse task-board / workflow ids with the work order.\n if (\n candidate === sourceInstanceId ||\n candidate === sourceBookmarkId ||\n candidate === sourceActivityId ||\n candidate === sourceTaskToken\n ) {\n continue;\n }\n workOrderId = candidate;\n break;\n }\n\n return {\n workOrderId,\n sourceInstanceId,\n sourceBookmarkId,\n sourceActivityId,\n sourceTaskToken,\n };\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|