@acorex-platform/module-maintenance-management-client 0.0.54 → 0.0.57
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-CGfPQtJ8.mjs → acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-6cXxZPN1.mjs} +477 -64
- package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-6cXxZPN1.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entities-maintenance-plan.mjs +234 -22
- 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-maintenance-template.mjs +2 -23
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entities-maintenance-template.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entities-maintenance-type.mjs +0 -23
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entities-maintenance-type.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-acorex-platform-module-maintenance-management-client-contracts-entity-catalog-DDAXs7ph.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-acorex-platform-module-maintenance-management-client-contracts-entity-catalog-CDwXJTyO.mjs} +27 -27
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-acorex-platform-module-maintenance-management-client-contracts-entity-catalog-DDAXs7ph.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-acorex-platform-module-maintenance-management-client-contracts-entity-catalog-CDwXJTyO.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-asset-type.entity-6XjyRZy6.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-asset-type.entity-BgNCJg1o.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-asset-type.entity-6XjyRZy6.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-asset-type.entity-BgNCJg1o.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-resource.entity-Dcfl5o8o.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-resource.entity-LY3WhspA.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-resource.entity-Dcfl5o8o.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type-resource.entity-LY3WhspA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type.entity-ChuV_aCW.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type.entity-DyXcIKqY.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type.entity-ChuV_aCW.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-activity-type.entity-DyXcIKqY.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-cause.entity-di-vjWEN.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-cause.entity-B93wAqPv.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-cause.entity-di-vjWEN.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-cause.entity-B93wAqPv.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-detection.entity-896J0GU8.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-detection.entity-Clc6RXxF.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-detection.entity-896J0GU8.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-detection.entity-Clc6RXxF.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-effect.entity-CRuuswbK.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-effect.entity-qSSTwoD0.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-effect.entity-CRuuswbK.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-effect.entity-qSSTwoD0.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mechanism.entity-C9W_N1rE.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mechanism.entity-DsMYTxrE.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mechanism.entity-C9W_N1rE.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mechanism.entity-DsMYTxrE.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-asset-type.entity-DtrolwgP.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-asset-type.entity-DlqzE2Za.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-asset-type.entity-DtrolwgP.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-asset-type.entity-DlqzE2Za.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-mechanism.entity-C38Hhz8z.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-mechanism.entity-0xGHmQqy.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-mechanism.entity-C38Hhz8z.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-mechanism.entity-0xGHmQqy.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-solution.entity-3yhzcAdh.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-solution.entity-B5bLQ4g6.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-solution.entity-3yhzcAdh.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode-solution.entity-B5bLQ4g6.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode.entity-Ct2IVb_W.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode.entity-BCCVzThS.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode.entity-Ct2IVb_W.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-mode.entity-BCCVzThS.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-cause.entity-D2WrHgUr.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-cause.entity-CZKNsPR2.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-cause.entity-D2WrHgUr.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-cause.entity-CZKNsPR2.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-effect.entity-DNz6g-mO.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-effect.entity-CWhXlK6i.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-effect.entity-DNz6g-mO.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-effect.entity-CWhXlK6i.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-mechanism.entity-B7O5O2cJ.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-mechanism.entity-DzSmFBD_.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-mechanism.entity-B7O5O2cJ.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register-mechanism.entity-DzSmFBD_.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register.entity-BYhHb6gp.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register.entity-5mfrErkC.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register.entity-BYhHb6gp.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-register.entity-5mfrErkC.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-severity.entity-BKcqicYB.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-severity.entity-DKL3K1P_.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-severity.entity-BKcqicYB.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-severity.entity-DKL3K1P_.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-type.entity-BlN2xNHw.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-type.entity-BwPWU2hj.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-type.entity-BlN2xNHw.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-failure-type.entity-BwPWU2hj.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-plan.entity-Da5_SUPA.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-plan.entity-DZp6tUTX.mjs} +236 -24
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-plan.entity-DZp6tUTX.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-activity-type.entity-DuK6vGUc.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-activity-type.entity-CEgtM97Q.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-activity-type.entity-DuK6vGUc.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-activity-type.entity-CEgtM97Q.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-failure-mode.entity-AVtJcY11.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-failure-mode.entity-DRt6Cfbc.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-failure-mode.entity-AVtJcY11.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-failure-mode.entity-DRt6Cfbc.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-resource.entity-Dv0ht2vz.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-resource.entity-zQAeVklB.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-resource.entity-Dv0ht2vz.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template-resource.entity-zQAeVklB.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template.entity-xx7GbT-x.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template.entity-DgtyyggM.mjs} +4 -25
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template.entity-DgtyyggM.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-type.entity-BtBo0c-c.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-type.entity-D3ipDMzR.mjs} +2 -25
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-type.entity-D3ipDMzR.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-order.entity-DTYYDI-y.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-order.entity-hgfgOV6Q.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-order.entity-DTYYDI-y.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-order.entity-hgfgOV6Q.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-package.entity-BlBbbfU_.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-package.entity-ubzIZ90s.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-package.entity-BlBbbfU_.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-package.entity-ubzIZ90s.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-report.entity-rg2NHWs8.mjs → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-report.entity-Blu2UR8v.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-report.entity-rg2NHWs8.mjs.map → acorex-platform-module-maintenance-management-client-contracts-entity-catalog-work-report.entity-Blu2UR8v.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 +306 -1
- 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-Dk2th4Rc.mjs → acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-DDvUWUU5.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-Dk2th4Rc.mjs.map → acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-DDvUWUU5.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-CUcsLsuh.mjs +54 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-CUcsLsuh.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-maintenance-interval-widget-view.component-CM0Wokah.mjs +121 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-maintenance-interval-widget-view.component-CM0Wokah.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-maintenance-interval-widget.kinds-D8Hnq0ct.mjs +22 -0
- package/fesm2022/acorex-platform-module-maintenance-management-client-maintenance-interval-widget.kinds-D8Hnq0ct.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BvFTVTKQ.mjs → acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BiD6NYBT.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BvFTVTKQ.mjs.map → acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BiD6NYBT.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-start-work-order-flow.command-BJeww85O.mjs → acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B5Ko0JyG.mjs} +8 -5
- package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B5Ko0JyG.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-D0Pv7gvX.mjs → acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-D75YRfD2.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-D0Pv7gvX.mjs.map → acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-D75YRfD2.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-BwOeeKLn.mjs → acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-B90OJ-Ol.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-BwOeeKLn.mjs.map → acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-B90OJ-Ol.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client.mjs +1 -1
- package/i18n/en-AU/maintenance-management.json +2046 -0
- package/i18n/en-US/maintenance-management.json +2046 -0
- package/i18n/fa-IR/maintenance-management.json +2033 -0
- package/package.json +1 -1
- package/types/acorex-platform-module-maintenance-management-client-contracts.d.ts +182 -84
- package/types/acorex-platform-module-maintenance-management-client.d.ts +59 -7
- package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-CGfPQtJ8.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-plan.entity-Da5_SUPA.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-template.entity-xx7GbT-x.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-contracts-entity-catalog-maintenance-type.entity-BtBo0c-c.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-BJeww85O.mjs.map +0 -1
|
@@ -1,15 +1,29 @@
|
|
|
1
|
+
import * as i2 from '@acorex/components/check-box';
|
|
2
|
+
import { AXCheckBoxModule } from '@acorex/components/check-box';
|
|
3
|
+
import * as i2$1 from '@acorex/components/decorators';
|
|
4
|
+
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
5
|
+
import { AXLabelComponent } from '@acorex/components/label';
|
|
6
|
+
import * as i4 from '@acorex/components/number-box';
|
|
7
|
+
import { AXNumberBoxModule } from '@acorex/components/number-box';
|
|
8
|
+
import { AXSchedulerPickerComponent } from '@acorex/components/scheduler-picker';
|
|
9
|
+
import * as i5 from '@acorex/components/selection-list';
|
|
10
|
+
import { AXSelectionListModule } from '@acorex/components/selection-list';
|
|
11
|
+
import * as i6 from '@acorex/core/translation';
|
|
12
|
+
import { AXTranslationModule, isValidMultiLanguageObject, resolveMultiLanguageString, AXTranslationService, createMultiLanguageString } from '@acorex/core/translation';
|
|
13
|
+
import { AXMMaintenanceIntervalUnit, emptyAXMMaintenanceIntervalConfig, AXMMaintenanceIntervalTriggerLogic, emptyAXMMaintenanceIntervalDraft, buildAXMMaintenanceIntervalConfig, draftFromAXMMaintenanceIntervalConfig, isAXMMaintenanceMeterKind, isAXMMaintenanceIntervalUnitForKind, isAXMMaintenanceIntervalKind, readMaintenancePlanCalendarSchedule, AXMWorkOrderSourceType, AXMWorkOrderStatus, RootConfig, readMaintenanceIntervalStates, resolveMaintenanceIntervalStates, AXM_MAINTENANCE_INTERVAL_STATE_ERRORS, AXMMaintenanceManagementCommandKeys, MM_CATALOG_SCOPE_MN, AXM_MAINTENANCE_INTERVAL_WIDGET, AXPAssetsMaintenancePermissionKeys, AXMMaintenanceManagementMenuKeys } from '@acorex-platform/module-maintenance-management-client/contracts';
|
|
14
|
+
import { AsyncPipe } from '@angular/common';
|
|
15
|
+
import * as i0 from '@angular/core';
|
|
16
|
+
import { input, output, signal, computed, effect, ChangeDetectionStrategy, Component, inject, Injectable, NgModule } from '@angular/core';
|
|
17
|
+
import * as i1 from '@angular/forms';
|
|
18
|
+
import { FormsModule } from '@angular/forms';
|
|
1
19
|
import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
|
|
2
20
|
import { AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_STATUS_PROVIDERS, AXPSearchCommandProvider, createEntityCommandOptions } from '@acorex-platform/framework-client/common';
|
|
3
21
|
import { AXPDebugService, AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';
|
|
4
|
-
import { AXPEntityStorageService, AXPEntityDefinitionRegistryService, AXPEntityDataSelectorService, AXPEntityService, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';
|
|
5
|
-
import { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';
|
|
22
|
+
import { AXPEntityStorageService, AXPEntityDefinitionRegistryService, AXPEntityDataSelectorService, AXPMiddlewareAbortError, AXPEntityService, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';
|
|
23
|
+
import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';
|
|
6
24
|
import { AXPCommandService, provideCommandMiddleware, provideCommandSetups } from '@acorex-platform/framework-client/runtime';
|
|
7
|
-
import * as i0 from '@angular/core';
|
|
8
|
-
import { inject, Injectable, NgModule } from '@angular/core';
|
|
9
|
-
import { AXMWorkOrderSourceType, AXMWorkOrderStatus, RootConfig, AXMMaintenanceManagementCommandKeys, MM_CATALOG_SCOPE_MN, AXPAssetsMaintenancePermissionKeys, AXMMaintenanceManagementMenuKeys } from '@acorex-platform/module-maintenance-management-client/contracts';
|
|
10
25
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
11
26
|
import { AXToastService } from '@acorex/components/toast';
|
|
12
|
-
import { isValidMultiLanguageObject, resolveMultiLanguageString, AXTranslationService, createMultiLanguageString } from '@acorex/core/translation';
|
|
13
27
|
import { AXP_IDENTIFIER_SERVICE } from '@acorex-platform/module-identifier-management-client';
|
|
14
28
|
import { isString, get, isNumber, defaultTo, isObject, isEmpty, isNil } from 'lodash';
|
|
15
29
|
import { AXPEntityCommandScope } from '@acorex-platform/framework-shared/entity';
|
|
@@ -21,6 +35,288 @@ import { AXMAssetManagementCommandKeys } from '@acorex-platform/module-asset-man
|
|
|
21
35
|
const AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE = 'maintenance-management';
|
|
22
36
|
//#endregion
|
|
23
37
|
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region ----- Constants -----
|
|
40
|
+
const I18N$2 = '@maintenance-management:maintenance-interval';
|
|
41
|
+
const KIND_ORDER = ['date', 'distance', 'operating-hours', 'operation-count'];
|
|
42
|
+
const LABEL_KEYS = {
|
|
43
|
+
date: `${I18N$2}.kinds.date`,
|
|
44
|
+
distance: `${I18N$2}.kinds.distance`,
|
|
45
|
+
'operating-hours': `${I18N$2}.kinds.operating-hours`,
|
|
46
|
+
'operation-count': `${I18N$2}.kinds.operation-count`,
|
|
47
|
+
};
|
|
48
|
+
const ERROR_KEYS = {
|
|
49
|
+
schedule: `${I18N$2}.validation.schedule`,
|
|
50
|
+
interval: `${I18N$2}.validation.interval`,
|
|
51
|
+
integer: `${I18N$2}.validation.integer`,
|
|
52
|
+
};
|
|
53
|
+
const UNIT_LABEL_KEYS = {
|
|
54
|
+
[AXMMaintenanceIntervalUnit.Kilometer]: `${I18N$2}.units.kilometer`,
|
|
55
|
+
[AXMMaintenanceIntervalUnit.Mile]: `${I18N$2}.units.mile`,
|
|
56
|
+
[AXMMaintenanceIntervalUnit.Hour]: `${I18N$2}.units.hour`,
|
|
57
|
+
[AXMMaintenanceIntervalUnit.Operation]: `${I18N$2}.units.operation`,
|
|
58
|
+
};
|
|
59
|
+
/** Same starting value the scheduler-picker widget uses when a schedule is empty. */
|
|
60
|
+
function createDefaultSchedule() {
|
|
61
|
+
return {
|
|
62
|
+
mode: 'daily',
|
|
63
|
+
interval: 1,
|
|
64
|
+
startCondition: { type: 'now', startDate: new Date() },
|
|
65
|
+
recurrence: {},
|
|
66
|
+
endCondition: { type: 'never' },
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function stable(value) {
|
|
70
|
+
return JSON.stringify(value, (_key, item) => (item instanceof Date ? item.toISOString() : item));
|
|
71
|
+
}
|
|
72
|
+
function configsEqual(left, right) {
|
|
73
|
+
const normalized = left == null ? emptyAXMMaintenanceIntervalConfig() : left;
|
|
74
|
+
return stable(normalized) === stable(right);
|
|
75
|
+
}
|
|
76
|
+
function kindsKey(kinds) {
|
|
77
|
+
return [...new Set(kinds)].sort().join('|');
|
|
78
|
+
}
|
|
79
|
+
function readChoiceId(value) {
|
|
80
|
+
if (typeof value === 'string') {
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
if (Array.isArray(value)) {
|
|
84
|
+
return readChoiceId(value[0]);
|
|
85
|
+
}
|
|
86
|
+
if (value && typeof value === 'object' && 'id' in value && typeof value.id === 'string') {
|
|
87
|
+
return value.id;
|
|
88
|
+
}
|
|
89
|
+
return '';
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region ----- Component -----
|
|
93
|
+
class AXMMaintenanceIntervalComponent {
|
|
94
|
+
//#endregion
|
|
95
|
+
//#region ----- Lifecycle -----
|
|
96
|
+
constructor() {
|
|
97
|
+
//#region ----- Inputs -----
|
|
98
|
+
this.supportedIntervalKinds = input([], /* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "supportedIntervalKinds" }] : /* istanbul ignore next */ []));
|
|
100
|
+
this.value = input(undefined, /* @ts-ignore */
|
|
101
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
102
|
+
this.disabled = input(false, /* @ts-ignore */
|
|
103
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
104
|
+
//#endregion
|
|
105
|
+
//#region ----- Outputs -----
|
|
106
|
+
this.valueChange = output();
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region ----- Constants -----
|
|
109
|
+
this.titleKey = `${I18N$2}.title`;
|
|
110
|
+
this.everyKey = `${I18N$2}.every`;
|
|
111
|
+
this.emptyKey = `${I18N$2}.empty`;
|
|
112
|
+
this.triggerLogicTitleKey = `${I18N$2}.trigger-logic.title`;
|
|
113
|
+
this.triggerLogic = AXMMaintenanceIntervalTriggerLogic;
|
|
114
|
+
this.distanceUnits = [
|
|
115
|
+
{ id: AXMMaintenanceIntervalUnit.Kilometer, text: UNIT_LABEL_KEYS[AXMMaintenanceIntervalUnit.Kilometer] },
|
|
116
|
+
{ id: AXMMaintenanceIntervalUnit.Mile, text: UNIT_LABEL_KEYS[AXMMaintenanceIntervalUnit.Mile] },
|
|
117
|
+
];
|
|
118
|
+
this.triggerLogicItems = [
|
|
119
|
+
{ id: AXMMaintenanceIntervalTriggerLogic.Any, text: `${I18N$2}.trigger-logic.any` },
|
|
120
|
+
{ id: AXMMaintenanceIntervalTriggerLogic.All, text: `${I18N$2}.trigger-logic.all` },
|
|
121
|
+
];
|
|
122
|
+
this.scheduleSettings = {
|
|
123
|
+
mode: 'daily',
|
|
124
|
+
showStartCondition: true,
|
|
125
|
+
showEndConditions: true,
|
|
126
|
+
showExclusions: false,
|
|
127
|
+
showInclusions: false,
|
|
128
|
+
options: { showInterval: true, showWeekdaysOnly: false },
|
|
129
|
+
};
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region ----- State Signals -----
|
|
132
|
+
this.draft = signal(emptyAXMMaintenanceIntervalDraft(), /* @ts-ignore */
|
|
133
|
+
...(ngDevMode ? [{ debugName: "draft" }] : /* istanbul ignore next */ []));
|
|
134
|
+
this.lastEmitted = null;
|
|
135
|
+
this.lastSupportedKey = '';
|
|
136
|
+
//#endregion
|
|
137
|
+
//#region ----- Computed Properties -----
|
|
138
|
+
this.scheduleValue = computed(() => {
|
|
139
|
+
const schedule = this.draft().schedule;
|
|
140
|
+
return schedule ? schedule : null;
|
|
141
|
+
}, /* @ts-ignore */
|
|
142
|
+
...(ngDevMode ? [{ debugName: "scheduleValue" }] : /* istanbul ignore next */ []));
|
|
143
|
+
this.sections = computed(() => {
|
|
144
|
+
const supported = this.supportedKeys();
|
|
145
|
+
const draft = this.draft();
|
|
146
|
+
const errors = new Map(buildAXMMaintenanceIntervalConfig(supported, draft).errors.map((error) => [error.kind, error.code]));
|
|
147
|
+
return KIND_ORDER.filter((kind) => supported.includes(kind)).map((kind) => this.toSection(kind, draft, errors));
|
|
148
|
+
}, /* @ts-ignore */
|
|
149
|
+
...(ngDevMode ? [{ debugName: "sections" }] : /* istanbul ignore next */ []));
|
|
150
|
+
this.showTriggerLogic = computed(() => this.sections().filter((section) => section.enabled).length > 1, /* @ts-ignore */
|
|
151
|
+
...(ngDevMode ? [{ debugName: "showTriggerLogic" }] : /* istanbul ignore next */ []));
|
|
152
|
+
this.selectedTriggerLogic = computed(() => this.draft().triggerLogic, /* @ts-ignore */
|
|
153
|
+
...(ngDevMode ? [{ debugName: "selectedTriggerLogic" }] : /* istanbul ignore next */ []));
|
|
154
|
+
effect(() => {
|
|
155
|
+
const supported = this.supportedKeys();
|
|
156
|
+
const incoming = this.value();
|
|
157
|
+
const supportedKey = kindsKey(supported);
|
|
158
|
+
if (this.lastEmitted &&
|
|
159
|
+
configsEqual(incoming, this.lastEmitted) &&
|
|
160
|
+
supportedKey === this.lastSupportedKey) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.lastSupportedKey = supportedKey;
|
|
164
|
+
const next = draftFromAXMMaintenanceIntervalConfig(incoming, supported);
|
|
165
|
+
this.draft.set(next);
|
|
166
|
+
const built = buildAXMMaintenanceIntervalConfig(supported, next).config;
|
|
167
|
+
this.lastEmitted = built;
|
|
168
|
+
if (!configsEqual(incoming, built)) {
|
|
169
|
+
this.valueChange.emit(built);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//#endregion
|
|
174
|
+
//#region ----- Event Handlers -----
|
|
175
|
+
onEnabled(kind, event) {
|
|
176
|
+
if (!event.isUserInteraction || this.disabled()) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const enabled = Boolean(event.value);
|
|
180
|
+
const draft = this.draft();
|
|
181
|
+
if (kind === 'date') {
|
|
182
|
+
const schedule = enabled && !draft.schedule
|
|
183
|
+
? createDefaultSchedule()
|
|
184
|
+
: draft.schedule;
|
|
185
|
+
this.commit({ ...draft, dateEnabled: enabled, schedule });
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (!isAXMMaintenanceMeterKind(kind)) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this.commit({
|
|
192
|
+
...draft,
|
|
193
|
+
meters: {
|
|
194
|
+
...draft.meters,
|
|
195
|
+
[kind]: { ...draft.meters[kind], enabled },
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
onInterval(kind, event) {
|
|
200
|
+
if (!event.isUserInteraction || this.disabled()) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const interval = typeof event.value === 'number' && Number.isFinite(event.value) ? event.value : null;
|
|
204
|
+
const draft = this.draft();
|
|
205
|
+
if (draft.meters[kind].interval === interval) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
this.commit({
|
|
209
|
+
...draft,
|
|
210
|
+
meters: {
|
|
211
|
+
...draft.meters,
|
|
212
|
+
[kind]: { ...draft.meters[kind], interval },
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
onDistanceUnit(event) {
|
|
217
|
+
if (!event.isUserInteraction || this.disabled()) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const unit = readChoiceId(event.value);
|
|
221
|
+
if (!isAXMMaintenanceIntervalUnitForKind('distance', unit)) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const draft = this.draft();
|
|
225
|
+
if (draft.meters.distance.unit === unit) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
this.commit({
|
|
229
|
+
...draft,
|
|
230
|
+
meters: {
|
|
231
|
+
...draft.meters,
|
|
232
|
+
distance: { ...draft.meters.distance, unit: unit },
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
onSchedule(value) {
|
|
237
|
+
if (this.disabled()) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const draft = this.draft();
|
|
241
|
+
if (stable(draft.schedule) === stable(value)) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
this.commit({ ...draft, schedule: value });
|
|
245
|
+
}
|
|
246
|
+
onTriggerLogic(event) {
|
|
247
|
+
if (!event.isUserInteraction || this.disabled()) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const logic = readChoiceId(event.value);
|
|
251
|
+
const triggerLogic = logic === AXMMaintenanceIntervalTriggerLogic.All
|
|
252
|
+
? AXMMaintenanceIntervalTriggerLogic.All
|
|
253
|
+
: AXMMaintenanceIntervalTriggerLogic.Any;
|
|
254
|
+
const draft = this.draft();
|
|
255
|
+
if (draft.triggerLogic === triggerLogic) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
this.commit({ ...draft, triggerLogic });
|
|
259
|
+
}
|
|
260
|
+
//#endregion
|
|
261
|
+
//#region ----- Draft -----
|
|
262
|
+
supportedKeys() {
|
|
263
|
+
return this.supportedIntervalKinds().filter(isAXMMaintenanceIntervalKind);
|
|
264
|
+
}
|
|
265
|
+
toSection(kind, draft, errors) {
|
|
266
|
+
const error = errors.get(kind);
|
|
267
|
+
if (kind === 'date') {
|
|
268
|
+
return {
|
|
269
|
+
kind,
|
|
270
|
+
labelKey: LABEL_KEYS[kind],
|
|
271
|
+
enabled: draft.dateEnabled,
|
|
272
|
+
editor: 'schedule',
|
|
273
|
+
meterKind: null,
|
|
274
|
+
interval: null,
|
|
275
|
+
decimals: 0,
|
|
276
|
+
unitId: null,
|
|
277
|
+
unitLabelKey: '',
|
|
278
|
+
errorKey: draft.dateEnabled && error ? ERROR_KEYS[error] : null,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
const meter = draft.meters[kind];
|
|
282
|
+
return {
|
|
283
|
+
kind,
|
|
284
|
+
labelKey: LABEL_KEYS[kind],
|
|
285
|
+
enabled: meter.enabled,
|
|
286
|
+
editor: kind === 'distance' ? 'distance' : 'meter',
|
|
287
|
+
meterKind: kind,
|
|
288
|
+
interval: meter.interval,
|
|
289
|
+
decimals: kind === 'operation-count' ? 0 : 2,
|
|
290
|
+
unitId: meter.unit,
|
|
291
|
+
unitLabelKey: UNIT_LABEL_KEYS[meter.unit],
|
|
292
|
+
errorKey: meter.enabled && error ? ERROR_KEYS[error] : null,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
commit(draft) {
|
|
296
|
+
this.draft.set(draft);
|
|
297
|
+
const config = buildAXMMaintenanceIntervalConfig(this.supportedKeys(), draft).config;
|
|
298
|
+
this.lastEmitted = config;
|
|
299
|
+
this.lastSupportedKey = kindsKey(this.supportedKeys());
|
|
300
|
+
this.valueChange.emit(config);
|
|
301
|
+
}
|
|
302
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMMaintenanceIntervalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
303
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMMaintenanceIntervalComponent, isStandalone: true, selector: "axm-maintenance-interval", inputs: { supportedIntervalKinds: { classPropertyName: "supportedIntervalKinds", publicName: "supportedIntervalKinds", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { classAttribute: "block" }, ngImport: i0, template: "<div class=\"flex flex-col gap-4\">\n <span class=\"text-sm font-medium\">{{ titleKey | translate | async }}</span>\n\n <!-- ----- No interval sections when the asset type supports none ----- -->\n @if (sections().length === 0) {\n <p class=\"ax-text-muted\">{{ emptyKey | translate | async }}</p>\n }\n\n @for (section of sections(); track section.kind) {\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center gap-2\">\n <ax-check-box\n [ngModel]=\"section.enabled\"\n [disabled]=\"disabled()\"\n (onValueChanged)=\"onEnabled(section.kind, $event)\"\n ></ax-check-box>\n <ax-label>{{ section.labelKey | translate | async }}</ax-label>\n </div>\n\n <!-- ----- Date interval reuses the scheduler picker ----- -->\n @if (section.enabled && section.editor === 'schedule') {\n <div class=\"ps-7\">\n <ax-scheduler-picker\n [config]=\"scheduleSettings\"\n [ngModel]=\"scheduleValue()\"\n [disabled]=\"disabled()\"\n (ngModelChange)=\"onSchedule($event)\"\n />\n <!-- ----- Schedule is required while Date is enabled ----- -->\n @if (section.errorKey; as errorKey) {\n <p class=\"text-sm text-danger\">{{ errorKey | translate | async }}</p>\n }\n </div>\n }\n <!-- ----- Distance interval with a kilometer or mile choice ----- -->\n @else if (section.enabled && section.editor === 'distance') {\n <div class=\"flex flex-wrap items-end gap-3 ps-7\">\n <span>{{ everyKey | translate | async }}</span>\n <ax-number-box\n class=\"w-36\"\n [minValue]=\"0\"\n [decimals]=\"section.decimals\"\n [ngModel]=\"section.interval\"\n [disabled]=\"disabled()\"\n [showSpinButtons]=\"false\"\n (onValueChanged)=\"onInterval('distance', $event)\"\n ></ax-number-box>\n <ax-selection-list\n [items]=\"distanceUnits\"\n [ngModel]=\"section.unitId\"\n [disabled]=\"disabled()\"\n direction=\"horizontal\"\n [multiple]=\"false\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n (onValueChanged)=\"onDistanceUnit($event)\"\n >\n <ng-template #itemTemplate let-item>\n <span>{{ item.text | translate | async }}</span>\n </ng-template>\n </ax-selection-list>\n </div>\n <!-- ----- Positive distance is required while the section is enabled ----- -->\n @if (section.errorKey; as errorKey) {\n <p class=\"ps-7 text-sm text-danger\">{{ errorKey | translate | async }}</p>\n }\n }\n <!-- ----- Operating hours or operation count with a fixed unit ----- -->\n @else if (section.enabled && section.editor === 'meter') {\n <div class=\"flex flex-wrap items-end gap-3 ps-7\">\n <span>{{ everyKey | translate | async }}</span>\n <ax-number-box\n class=\"w-36\"\n [minValue]=\"0\"\n [decimals]=\"section.decimals\"\n [ngModel]=\"section.interval\"\n [disabled]=\"disabled()\"\n [showSpinButtons]=\"false\"\n (onValueChanged)=\"onInterval(section.meterKind ?? 'operating-hours', $event)\"\n >\n <ax-suffix>{{ section.unitLabelKey | translate | async }}</ax-suffix>\n </ax-number-box>\n </div>\n <!-- ----- Positive meter interval is required while the section is enabled ----- -->\n @if (section.errorKey; as errorKey) {\n <p class=\"ps-7 text-sm text-danger\">{{ errorKey | translate | async }}</p>\n }\n }\n </div>\n }\n\n <!-- ----- Trigger condition when more than one interval is enabled ----- -->\n @if (showTriggerLogic()) {\n <div class=\"flex flex-col gap-2\">\n <ax-label>{{ triggerLogicTitleKey | translate | async }}</ax-label>\n <ax-selection-list\n [items]=\"triggerLogicItems\"\n [ngModel]=\"selectedTriggerLogic()\"\n [disabled]=\"disabled()\"\n direction=\"vertical\"\n [multiple]=\"false\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n (onValueChanged)=\"onTriggerLogic($event)\"\n >\n <ng-template #itemTemplate let-item>\n <span>{{ item.text | translate | async }}</span>\n </ng-template>\n </ax-selection-list>\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i2.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXNumberBoxModule }, { kind: "component", type: i4.AXNumberBoxComponent, selector: "ax-number-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "minValue", "maxValue", "showSpinButtons", "thousandsSeparator", "decimals", "changeOnScroll", "step"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "thousandsSeparatorChange"] }, { kind: "ngmodule", type: AXSelectionListModule }, { kind: "component", type: i5.AXSelectionListComponent, selector: "ax-selection-list", inputs: ["id", "name", "disabled", "readonly", "tabIndex", "value", "valueField", "textField", "disabledField", "readonlyField", "multiple", "direction", "customTemplate", "showControl", "items", "look"], outputs: ["onValueChanged", "onBlur", "onFocus"] }, { kind: "component", type: AXSchedulerPickerComponent, selector: "ax-scheduler-picker", inputs: ["disabled", "readonly", "tabIndex", "value", "state", "name", "id", "config"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "summaryChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
304
|
+
}
|
|
305
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMMaintenanceIntervalComponent, decorators: [{
|
|
306
|
+
type: Component,
|
|
307
|
+
args: [{ selector: 'axm-maintenance-interval', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
308
|
+
AsyncPipe,
|
|
309
|
+
FormsModule,
|
|
310
|
+
AXTranslationModule,
|
|
311
|
+
AXCheckBoxModule,
|
|
312
|
+
AXDecoratorModule,
|
|
313
|
+
AXLabelComponent,
|
|
314
|
+
AXNumberBoxModule,
|
|
315
|
+
AXSelectionListModule,
|
|
316
|
+
AXSchedulerPickerComponent,
|
|
317
|
+
], host: { class: 'block' }, template: "<div class=\"flex flex-col gap-4\">\n <span class=\"text-sm font-medium\">{{ titleKey | translate | async }}</span>\n\n <!-- ----- No interval sections when the asset type supports none ----- -->\n @if (sections().length === 0) {\n <p class=\"ax-text-muted\">{{ emptyKey | translate | async }}</p>\n }\n\n @for (section of sections(); track section.kind) {\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center gap-2\">\n <ax-check-box\n [ngModel]=\"section.enabled\"\n [disabled]=\"disabled()\"\n (onValueChanged)=\"onEnabled(section.kind, $event)\"\n ></ax-check-box>\n <ax-label>{{ section.labelKey | translate | async }}</ax-label>\n </div>\n\n <!-- ----- Date interval reuses the scheduler picker ----- -->\n @if (section.enabled && section.editor === 'schedule') {\n <div class=\"ps-7\">\n <ax-scheduler-picker\n [config]=\"scheduleSettings\"\n [ngModel]=\"scheduleValue()\"\n [disabled]=\"disabled()\"\n (ngModelChange)=\"onSchedule($event)\"\n />\n <!-- ----- Schedule is required while Date is enabled ----- -->\n @if (section.errorKey; as errorKey) {\n <p class=\"text-sm text-danger\">{{ errorKey | translate | async }}</p>\n }\n </div>\n }\n <!-- ----- Distance interval with a kilometer or mile choice ----- -->\n @else if (section.enabled && section.editor === 'distance') {\n <div class=\"flex flex-wrap items-end gap-3 ps-7\">\n <span>{{ everyKey | translate | async }}</span>\n <ax-number-box\n class=\"w-36\"\n [minValue]=\"0\"\n [decimals]=\"section.decimals\"\n [ngModel]=\"section.interval\"\n [disabled]=\"disabled()\"\n [showSpinButtons]=\"false\"\n (onValueChanged)=\"onInterval('distance', $event)\"\n ></ax-number-box>\n <ax-selection-list\n [items]=\"distanceUnits\"\n [ngModel]=\"section.unitId\"\n [disabled]=\"disabled()\"\n direction=\"horizontal\"\n [multiple]=\"false\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n (onValueChanged)=\"onDistanceUnit($event)\"\n >\n <ng-template #itemTemplate let-item>\n <span>{{ item.text | translate | async }}</span>\n </ng-template>\n </ax-selection-list>\n </div>\n <!-- ----- Positive distance is required while the section is enabled ----- -->\n @if (section.errorKey; as errorKey) {\n <p class=\"ps-7 text-sm text-danger\">{{ errorKey | translate | async }}</p>\n }\n }\n <!-- ----- Operating hours or operation count with a fixed unit ----- -->\n @else if (section.enabled && section.editor === 'meter') {\n <div class=\"flex flex-wrap items-end gap-3 ps-7\">\n <span>{{ everyKey | translate | async }}</span>\n <ax-number-box\n class=\"w-36\"\n [minValue]=\"0\"\n [decimals]=\"section.decimals\"\n [ngModel]=\"section.interval\"\n [disabled]=\"disabled()\"\n [showSpinButtons]=\"false\"\n (onValueChanged)=\"onInterval(section.meterKind ?? 'operating-hours', $event)\"\n >\n <ax-suffix>{{ section.unitLabelKey | translate | async }}</ax-suffix>\n </ax-number-box>\n </div>\n <!-- ----- Positive meter interval is required while the section is enabled ----- -->\n @if (section.errorKey; as errorKey) {\n <p class=\"ps-7 text-sm text-danger\">{{ errorKey | translate | async }}</p>\n }\n }\n </div>\n }\n\n <!-- ----- Trigger condition when more than one interval is enabled ----- -->\n @if (showTriggerLogic()) {\n <div class=\"flex flex-col gap-2\">\n <ax-label>{{ triggerLogicTitleKey | translate | async }}</ax-label>\n <ax-selection-list\n [items]=\"triggerLogicItems\"\n [ngModel]=\"selectedTriggerLogic()\"\n [disabled]=\"disabled()\"\n direction=\"vertical\"\n [multiple]=\"false\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n (onValueChanged)=\"onTriggerLogic($event)\"\n >\n <ng-template #itemTemplate let-item>\n <span>{{ item.text | translate | async }}</span>\n </ng-template>\n </ax-selection-list>\n </div>\n }\n</div>\n" }]
|
|
318
|
+
}], ctorParameters: () => [], propDecorators: { supportedIntervalKinds: [{ type: i0.Input, args: [{ isSignal: true, alias: "supportedIntervalKinds", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
|
|
319
|
+
|
|
24
320
|
//#region ---- Imports ----
|
|
25
321
|
//#endregion
|
|
26
322
|
//#region ---- Identifier rules ----
|
|
@@ -182,25 +478,26 @@ function resolveOccurrenceScheduledEnd(scheduledStart, estimatedHours) {
|
|
|
182
478
|
* - End `byDate`: occurrences from anchor through end date (inclusive).
|
|
183
479
|
*/
|
|
184
480
|
function resolveWorkOrderScheduledStarts(schedule, referenceDate = new Date()) {
|
|
185
|
-
|
|
481
|
+
const calendar = readMaintenancePlanCalendarSchedule(schedule);
|
|
482
|
+
if (!calendar) {
|
|
186
483
|
return [];
|
|
187
484
|
}
|
|
188
|
-
const anchor = resolveScheduleAnchorDate(
|
|
485
|
+
const anchor = resolveScheduleAnchorDate(calendar, referenceDate);
|
|
189
486
|
if (!anchor) {
|
|
190
487
|
return [];
|
|
191
488
|
}
|
|
192
|
-
const mode = inferScheduleMode(
|
|
193
|
-
const interval = resolveScheduleInterval(
|
|
194
|
-
const endType = defaultTo(get(
|
|
489
|
+
const mode = inferScheduleMode(calendar);
|
|
490
|
+
const interval = resolveScheduleInterval(calendar);
|
|
491
|
+
const endType = defaultTo(get(calendar, 'endCondition.type'), 'never');
|
|
195
492
|
if (endType === 'never') {
|
|
196
493
|
return [anchor];
|
|
197
494
|
}
|
|
198
495
|
if (endType === 'afterOccurrences') {
|
|
199
|
-
const count = Math.max(1, defaultTo(get(
|
|
496
|
+
const count = Math.max(1, defaultTo(get(calendar, 'endCondition.occurrences'), 1));
|
|
200
497
|
return Array.from({ length: count }, (_, step) => addScheduleInterval(anchor, mode, interval, step));
|
|
201
498
|
}
|
|
202
499
|
if (endType === 'byDate') {
|
|
203
|
-
const endDate = toScheduleEndBoundary(get(
|
|
500
|
+
const endDate = toScheduleEndBoundary(get(calendar, 'endCondition.endDate'));
|
|
204
501
|
if (!endDate) {
|
|
205
502
|
return [anchor];
|
|
206
503
|
}
|
|
@@ -265,9 +562,18 @@ function buildMaintenancePlanPayload(asset, template, options) {
|
|
|
265
562
|
assetId: asset.id,
|
|
266
563
|
maintenanceTypeId: template.maintenanceTypeId,
|
|
267
564
|
maintenanceTemplateId: template.id,
|
|
268
|
-
|
|
269
|
-
|
|
565
|
+
intervalConfig: {
|
|
566
|
+
triggerLogic: AXMMaintenanceIntervalTriggerLogic.Any,
|
|
567
|
+
triggers: [
|
|
568
|
+
{
|
|
569
|
+
kind: 'date',
|
|
570
|
+
schedule: template.schedule ?? {
|
|
571
|
+
startCondition: { type: 'byDate', startDate: new Date().toISOString() },
|
|
572
|
+
},
|
|
573
|
+
},
|
|
574
|
+
],
|
|
270
575
|
},
|
|
576
|
+
intervalStates: [],
|
|
271
577
|
estimatedHours: template.estimatedMinutes
|
|
272
578
|
? Math.max(1, Math.ceil(template.estimatedMinutes / 60))
|
|
273
579
|
: undefined,
|
|
@@ -348,7 +654,7 @@ function mergeMaintenancePlanForWorkOrder(createPayload, stored, id) {
|
|
|
348
654
|
fillIfMissing('assetId');
|
|
349
655
|
fillIfMissing('maintenanceTypeId');
|
|
350
656
|
fillIfMissing('maintenanceTemplateId');
|
|
351
|
-
fillIfMissing('
|
|
657
|
+
fillIfMissing('intervalConfig');
|
|
352
658
|
fillIfMissing('title');
|
|
353
659
|
fillIfMissing('description');
|
|
354
660
|
fillIfMissing('needPermission');
|
|
@@ -438,7 +744,7 @@ function buildWorkOrderPayloadFromFailureRegister(failureRegister, template, wor
|
|
|
438
744
|
function buildWorkOrderPayloadFromPlan(plan, workOrderNo, options) {
|
|
439
745
|
const title = normalizeMultiLanguageString(plan.title, plan.code ?? 'Work order');
|
|
440
746
|
const occurrence = options?.occurrence ??
|
|
441
|
-
resolveWorkOrderOccurrences(plan.
|
|
747
|
+
resolveWorkOrderOccurrences(plan.intervalConfig, {
|
|
442
748
|
referenceDate: options?.referenceDate,
|
|
443
749
|
estimatedHours: resolvePlanEstimatedHours(plan),
|
|
444
750
|
})[0];
|
|
@@ -480,7 +786,7 @@ function buildWorkOrderPayloadFromPlan(plan, workOrderNo, options) {
|
|
|
480
786
|
function buildWorkOrderPayloadsFromPlan(plan, options) {
|
|
481
787
|
const referenceDate = options?.referenceDate ?? new Date();
|
|
482
788
|
const estimatedHours = resolvePlanEstimatedHours(plan);
|
|
483
|
-
const occurrences = resolveWorkOrderOccurrences(plan.
|
|
789
|
+
const occurrences = resolveWorkOrderOccurrences(plan.intervalConfig, {
|
|
484
790
|
referenceDate,
|
|
485
791
|
estimatedHours,
|
|
486
792
|
});
|
|
@@ -641,7 +947,7 @@ async function hasWorkOrderForPlanScheduledStart(backend, workOrderEntityName, p
|
|
|
641
947
|
* For `endCondition.type === 'never'`, returns the next interval from the signed-off scheduled start.
|
|
642
948
|
*/
|
|
643
949
|
function resolveNextWorkOrderOccurrenceAfterSignedOff(plan, signedOffWorkOrder, referenceDate = new Date()) {
|
|
644
|
-
const schedule = plan.
|
|
950
|
+
const schedule = readMaintenancePlanCalendarSchedule(plan.intervalConfig);
|
|
645
951
|
if (!schedule) {
|
|
646
952
|
return null;
|
|
647
953
|
}
|
|
@@ -846,6 +1152,7 @@ const assetCreateMaintenanceOfferMiddleware = {
|
|
|
846
1152
|
/** Asset detail route entity keys (must match AssetManagement registration). */
|
|
847
1153
|
const ASSET_ENTITY = 'AssetManagement.Asset';
|
|
848
1154
|
const ASSET_TYPE_ENTITY = 'AssetManagement.AssetType';
|
|
1155
|
+
const I18N$1 = '@maintenance-management:failure-registers.create-work-order-prompt';
|
|
849
1156
|
//#endregion
|
|
850
1157
|
//#region ---- Helpers ----
|
|
851
1158
|
function normalizeMaintenanceTypeIds(value) {
|
|
@@ -889,6 +1196,7 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
889
1196
|
// IMPORTANT: resolve injected deps before any await to keep Angular injection context valid.
|
|
890
1197
|
const dialogService = inject(AXDialogService, { optional: true });
|
|
891
1198
|
const toastService = inject(AXToastService, { optional: true });
|
|
1199
|
+
const translateService = inject(AXTranslationService, { optional: true });
|
|
892
1200
|
const entityRegistry = inject(AXPEntityDefinitionRegistryService, { optional: true });
|
|
893
1201
|
const entityDataSelector = inject(AXPEntityDataSelectorService, { optional: true });
|
|
894
1202
|
const backend = ctx.entities;
|
|
@@ -908,6 +1216,7 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
908
1216
|
// The middleware can run in non-UI execution contexts; keep it safe.
|
|
909
1217
|
if (!dialogService ||
|
|
910
1218
|
!toastService ||
|
|
1219
|
+
!translateService ||
|
|
911
1220
|
!entityRegistry ||
|
|
912
1221
|
!entityDataSelector ||
|
|
913
1222
|
!entityStorage ||
|
|
@@ -919,7 +1228,7 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
919
1228
|
if (!fr?.assetId) {
|
|
920
1229
|
return;
|
|
921
1230
|
}
|
|
922
|
-
const confirm = await dialogService.confirm(
|
|
1231
|
+
const confirm = await dialogService.confirm(await translateService.translateAsync(`${I18N$1}.confirm-title`), await translateService.translateAsync(`${I18N$1}.confirm-message`), 'warning', 'horizontal', false, 'cancel');
|
|
923
1232
|
if (confirm.result !== true) {
|
|
924
1233
|
return;
|
|
925
1234
|
}
|
|
@@ -927,8 +1236,8 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
927
1236
|
if (!templateEntity) {
|
|
928
1237
|
toastService.show({
|
|
929
1238
|
color: 'danger',
|
|
930
|
-
title:
|
|
931
|
-
content:
|
|
1239
|
+
title: await translateService.translateAsync(`${I18N$1}.template-error-title`),
|
|
1240
|
+
content: await translateService.translateAsync(`${I18N$1}.template-entity-unavailable`),
|
|
932
1241
|
});
|
|
933
1242
|
return;
|
|
934
1243
|
}
|
|
@@ -936,8 +1245,8 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
936
1245
|
if (!maintenanceTypeIds.length) {
|
|
937
1246
|
toastService.show({
|
|
938
1247
|
color: 'warning',
|
|
939
|
-
title:
|
|
940
|
-
content:
|
|
1248
|
+
title: await translateService.translateAsync(`${I18N$1}.no-maintenance-types-title`),
|
|
1249
|
+
content: await translateService.translateAsync(`${I18N$1}.no-maintenance-types-content`),
|
|
941
1250
|
});
|
|
942
1251
|
return;
|
|
943
1252
|
}
|
|
@@ -961,7 +1270,6 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
961
1270
|
'needPermission',
|
|
962
1271
|
'needShutdown',
|
|
963
1272
|
'estimatedHours',
|
|
964
|
-
'hasSchedule',
|
|
965
1273
|
'schedule',
|
|
966
1274
|
'autoGeneratePlan',
|
|
967
1275
|
],
|
|
@@ -975,16 +1283,16 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
975
1283
|
if (!template) {
|
|
976
1284
|
toastService.show({
|
|
977
1285
|
color: 'danger',
|
|
978
|
-
title:
|
|
979
|
-
content:
|
|
1286
|
+
title: await translateService.translateAsync(`${I18N$1}.template-error-title`),
|
|
1287
|
+
content: await translateService.translateAsync(`${I18N$1}.template-missing-type`),
|
|
980
1288
|
});
|
|
981
1289
|
return;
|
|
982
1290
|
}
|
|
983
1291
|
if (!canCreateWorkOrderFromFailureRegister(fr, template)) {
|
|
984
1292
|
toastService.show({
|
|
985
1293
|
color: 'warning',
|
|
986
|
-
title:
|
|
987
|
-
content:
|
|
1294
|
+
title: await translateService.translateAsync(`${I18N$1}.missing-data-title`),
|
|
1295
|
+
content: await translateService.translateAsync(`${I18N$1}.missing-data-content`),
|
|
988
1296
|
});
|
|
989
1297
|
return;
|
|
990
1298
|
}
|
|
@@ -994,15 +1302,15 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
994
1302
|
if (!workOrderId) {
|
|
995
1303
|
toastService.show({
|
|
996
1304
|
color: 'danger',
|
|
997
|
-
title:
|
|
998
|
-
content:
|
|
1305
|
+
title: await translateService.translateAsync(`${I18N$1}.work-order-error-title`),
|
|
1306
|
+
content: await translateService.translateAsync(`${I18N$1}.work-order-error-content`),
|
|
999
1307
|
});
|
|
1000
1308
|
return;
|
|
1001
1309
|
}
|
|
1002
1310
|
toastService.show({
|
|
1003
1311
|
color: 'success',
|
|
1004
|
-
title:
|
|
1005
|
-
content:
|
|
1312
|
+
title: await translateService.translateAsync(`${I18N$1}.success-title`),
|
|
1313
|
+
content: await translateService.translateAsync(`${I18N$1}.success-content`),
|
|
1006
1314
|
});
|
|
1007
1315
|
},
|
|
1008
1316
|
};
|
|
@@ -1013,6 +1321,7 @@ const failureRegisterCreateWorkOrderMiddleware = {
|
|
|
1013
1321
|
//#region ---- Constants ----
|
|
1014
1322
|
/** Per-create ctx.locals flag so duplicate middleware entries schedule only one prompt. */
|
|
1015
1323
|
const WORK_ORDER_PROMPT_SCHEDULED_KEY = 'maintenancePlan.workOrderPromptScheduled';
|
|
1324
|
+
const I18N = '@maintenance-management:maintenance-plans.create-work-order-prompt';
|
|
1016
1325
|
//#endregion
|
|
1017
1326
|
//#region ---- Prompt runner ----
|
|
1018
1327
|
/**
|
|
@@ -1020,47 +1329,52 @@ const WORK_ORDER_PROMPT_SCHEDULED_KEY = 'maintenancePlan.workOrderPromptSchedule
|
|
|
1020
1329
|
* Runs inline after `next()` so the dialog appears before navigation away from the create form.
|
|
1021
1330
|
*/
|
|
1022
1331
|
async function runMaintenancePlanWorkOrderPrompt(deps) {
|
|
1023
|
-
const { createdId, planEntity, createPayload, dialogService, backend, entityStorage, identifierService, sessionService, toastService, } = deps;
|
|
1332
|
+
const { createdId, planEntity, createPayload, dialogService, backend, entityStorage, identifierService, sessionService, toastService, translateService, } = deps;
|
|
1024
1333
|
const storedPlan = (await backend.getOne(planEntity, createdId).catch(() => null));
|
|
1025
1334
|
const plan = mergeMaintenancePlanForWorkOrder(createPayload, storedPlan, createdId);
|
|
1026
1335
|
if (!plan) {
|
|
1027
1336
|
return;
|
|
1028
1337
|
}
|
|
1029
|
-
const plannedWorkOrderCount = countWorkOrdersToCreateFromSchedule(plan.
|
|
1338
|
+
const plannedWorkOrderCount = countWorkOrdersToCreateFromSchedule(plan.intervalConfig);
|
|
1339
|
+
const confirmTitle = await translateService.translateAsync(`${I18N}.confirm-title`);
|
|
1030
1340
|
const confirmMessage = plannedWorkOrderCount === 1
|
|
1031
|
-
?
|
|
1032
|
-
:
|
|
1033
|
-
|
|
1341
|
+
? await translateService.translateAsync(`${I18N}.confirm-single`)
|
|
1342
|
+
: await translateService.translateAsync(`${I18N}.confirm-multiple`, {
|
|
1343
|
+
params: { count: plannedWorkOrderCount },
|
|
1344
|
+
});
|
|
1345
|
+
const confirm = await dialogService.confirm(confirmTitle, confirmMessage, 'warning', 'horizontal', false, 'cancel');
|
|
1034
1346
|
if (confirm.result !== true) {
|
|
1035
1347
|
return;
|
|
1036
1348
|
}
|
|
1037
1349
|
if (!canCreateWorkOrderFromPlan(plan)) {
|
|
1038
|
-
await dialogService.alert(
|
|
1350
|
+
await dialogService.alert(await translateService.translateAsync(`${I18N}.missing-data-title`), await translateService.translateAsync(`${I18N}.missing-data-message`), 'warning');
|
|
1039
1351
|
return;
|
|
1040
1352
|
}
|
|
1041
1353
|
const workOrderEntity = `${RootConfig.module.name}.${RootConfig.entities.workOrder.name}`;
|
|
1042
1354
|
if (await hasWorkOrderForPlan(backend, workOrderEntity, plan.id)) {
|
|
1043
|
-
await dialogService.alert(
|
|
1355
|
+
await dialogService.alert(await translateService.translateAsync(`${I18N}.exists-title`), await translateService.translateAsync(`${I18N}.exists-message`), 'warning');
|
|
1044
1356
|
return;
|
|
1045
1357
|
}
|
|
1046
1358
|
try {
|
|
1047
1359
|
const workOrderCount = await insertWorkOrdersFromPlan(entityStorage, identifierService, sessionService, workOrderEntity, plan, { backend });
|
|
1048
1360
|
if (workOrderCount === 0) {
|
|
1049
|
-
await dialogService.alert(
|
|
1361
|
+
await dialogService.alert(await translateService.translateAsync(`${I18N}.error-title`), await translateService.translateAsync(`${I18N}.error-failed`), 'danger');
|
|
1050
1362
|
return;
|
|
1051
1363
|
}
|
|
1052
1364
|
const successMessage = workOrderCount === 1
|
|
1053
|
-
?
|
|
1054
|
-
: `${
|
|
1365
|
+
? await translateService.translateAsync(`${I18N}.success-single`)
|
|
1366
|
+
: await translateService.translateAsync(`${I18N}.success-multiple`, {
|
|
1367
|
+
params: { count: workOrderCount },
|
|
1368
|
+
});
|
|
1055
1369
|
toastService.show({
|
|
1056
1370
|
color: 'success',
|
|
1057
|
-
title:
|
|
1371
|
+
title: await translateService.translateAsync(`${I18N}.success-title`),
|
|
1058
1372
|
content: successMessage,
|
|
1059
1373
|
});
|
|
1060
1374
|
}
|
|
1061
1375
|
catch (error) {
|
|
1062
|
-
const message = error instanceof Error ? error.message :
|
|
1063
|
-
await dialogService.alert(
|
|
1376
|
+
const message = error instanceof Error ? error.message : await translateService.translateAsync(`${I18N}.error-failed`);
|
|
1377
|
+
await dialogService.alert(await translateService.translateAsync(`${I18N}.error-title`), message, 'danger');
|
|
1064
1378
|
}
|
|
1065
1379
|
}
|
|
1066
1380
|
//#endregion
|
|
@@ -1069,9 +1383,20 @@ async function runMaintenancePlanWorkOrderPrompt(deps) {
|
|
|
1069
1383
|
* After creating a Maintenance Plan, asks whether to create a Work Order immediately.
|
|
1070
1384
|
* If confirmed, creates Work Order using the plan's already selected template.
|
|
1071
1385
|
*/
|
|
1386
|
+
const WRITE_OPS = new Set(['create', 'update', 'upsertOne']);
|
|
1387
|
+
function readRecord(value) {
|
|
1388
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
1389
|
+
return null;
|
|
1390
|
+
}
|
|
1391
|
+
return value;
|
|
1392
|
+
}
|
|
1393
|
+
function assignIntervalStates(record) {
|
|
1394
|
+
record['intervalStates'] = readMaintenanceIntervalStates(record['intervalStates']);
|
|
1395
|
+
}
|
|
1072
1396
|
const maintenancePlanCreateWorkOrderMiddleware = {
|
|
1073
1397
|
target: {
|
|
1074
|
-
ops: ['create'],
|
|
1398
|
+
ops: ['create', 'update', 'upsertOne', 'getOne', 'getAll', 'query', 'queryAll', 'getMany'],
|
|
1399
|
+
entity: `${RootConfig.module.name}.${RootConfig.entities.maintenancePlan.name}`,
|
|
1075
1400
|
order: 91,
|
|
1076
1401
|
},
|
|
1077
1402
|
execute: async (ctx, next) => {
|
|
@@ -1081,16 +1406,52 @@ const maintenancePlanCreateWorkOrderMiddleware = {
|
|
|
1081
1406
|
const entityStorage = inject(AXPEntityStorageService, { optional: true });
|
|
1082
1407
|
const identifierService = inject(AXP_IDENTIFIER_SERVICE, { optional: true });
|
|
1083
1408
|
const sessionService = inject(AXPSessionService, { optional: true });
|
|
1409
|
+
const translateService = inject(AXTranslationService, { optional: true });
|
|
1084
1410
|
const maintenancePlanEntity = `${RootConfig.module.name}.${RootConfig.entities.maintenancePlan.name}`;
|
|
1085
1411
|
if (ctx.entityName !== maintenancePlanEntity) {
|
|
1086
1412
|
await next();
|
|
1087
1413
|
return;
|
|
1088
1414
|
}
|
|
1415
|
+
if (WRITE_OPS.has(ctx.op)) {
|
|
1416
|
+
const data = readRecord(ctx.data);
|
|
1417
|
+
const fieldPresent = ctx.op === 'create' || ctx.op === 'upsertOne' || (data != null && 'intervalStates' in data);
|
|
1418
|
+
if (data && fieldPresent) {
|
|
1419
|
+
const resolved = resolveMaintenanceIntervalStates(data['intervalStates']);
|
|
1420
|
+
if (resolved.issue) {
|
|
1421
|
+
const error = AXM_MAINTENANCE_INTERVAL_STATE_ERRORS[resolved.issue];
|
|
1422
|
+
throw new AXPMiddlewareAbortError(error.message, { code: error.code, status: 400 });
|
|
1423
|
+
}
|
|
1424
|
+
data['intervalStates'] = resolved.states;
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1089
1427
|
const suppressPrompt = ctx.data &&
|
|
1090
1428
|
typeof ctx.data === 'object' &&
|
|
1091
1429
|
ctx.data[SUPPRESS_WORK_ORDER_PROMPT_FIELD] === true;
|
|
1092
1430
|
const createPayload = ctx.data && typeof ctx.data === 'object' ? ctx.data : undefined;
|
|
1093
1431
|
await next();
|
|
1432
|
+
if (ctx.op !== 'create') {
|
|
1433
|
+
if (ctx.op === 'getOne') {
|
|
1434
|
+
const record = readRecord(ctx.result);
|
|
1435
|
+
if (record) {
|
|
1436
|
+
assignIntervalStates(record);
|
|
1437
|
+
}
|
|
1438
|
+
return;
|
|
1439
|
+
}
|
|
1440
|
+
const items = Array.isArray(ctx.result)
|
|
1441
|
+
? ctx.result
|
|
1442
|
+
: Array.isArray(ctx.result?.items)
|
|
1443
|
+
? ctx.result.items
|
|
1444
|
+
: null;
|
|
1445
|
+
if (items) {
|
|
1446
|
+
for (const item of items) {
|
|
1447
|
+
const record = readRecord(item);
|
|
1448
|
+
if (record) {
|
|
1449
|
+
assignIntervalStates(record);
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
}
|
|
1453
|
+
return;
|
|
1454
|
+
}
|
|
1094
1455
|
const createdId = typeof ctx.result === 'string' ? ctx.result : undefined;
|
|
1095
1456
|
if (!createdId ||
|
|
1096
1457
|
!dialogService ||
|
|
@@ -1098,6 +1459,7 @@ const maintenancePlanCreateWorkOrderMiddleware = {
|
|
|
1098
1459
|
!entityStorage ||
|
|
1099
1460
|
!identifierService ||
|
|
1100
1461
|
!sessionService ||
|
|
1462
|
+
!translateService ||
|
|
1101
1463
|
suppressPrompt) {
|
|
1102
1464
|
return;
|
|
1103
1465
|
}
|
|
@@ -1115,6 +1477,7 @@ const maintenancePlanCreateWorkOrderMiddleware = {
|
|
|
1115
1477
|
identifierService,
|
|
1116
1478
|
sessionService,
|
|
1117
1479
|
toastService,
|
|
1480
|
+
translateService,
|
|
1118
1481
|
});
|
|
1119
1482
|
},
|
|
1120
1483
|
};
|
|
@@ -1585,13 +1948,53 @@ class AXMMaintenanceManagementWorkOrderExpressionEvaluatorScopeProvider {
|
|
|
1585
1948
|
}
|
|
1586
1949
|
}
|
|
1587
1950
|
|
|
1951
|
+
//#region ----- Imports -----
|
|
1952
|
+
//#endregion
|
|
1953
|
+
//#region ----- Widget config -----
|
|
1954
|
+
const AXMMaintenanceIntervalWidget = {
|
|
1955
|
+
name: AXM_MAINTENANCE_INTERVAL_WIDGET,
|
|
1956
|
+
title: '@maintenance-management:maintenance-interval.title',
|
|
1957
|
+
description: '@maintenance-management:maintenance-interval.description',
|
|
1958
|
+
type: 'editor',
|
|
1959
|
+
designer: { needLabel: true },
|
|
1960
|
+
categories: [],
|
|
1961
|
+
groups: [AXPWidgetGroupEnum.EntityWidget],
|
|
1962
|
+
icon: 'fa-light fa-calendar-clock',
|
|
1963
|
+
properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],
|
|
1964
|
+
components: {
|
|
1965
|
+
view: {
|
|
1966
|
+
component: () => import('./acorex-platform-module-maintenance-management-client-maintenance-interval-widget-view.component-CM0Wokah.mjs').then((c) => c.AXMMaintenanceIntervalWidgetViewComponent),
|
|
1967
|
+
},
|
|
1968
|
+
edit: {
|
|
1969
|
+
component: () => import('./acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-CUcsLsuh.mjs').then((c) => c.AXMMaintenanceIntervalWidgetEditComponent),
|
|
1970
|
+
},
|
|
1971
|
+
designer: {
|
|
1972
|
+
component: () => import('./acorex-platform-module-maintenance-management-client-maintenance-interval-widget-edit.component-CUcsLsuh.mjs').then((c) => c.AXMMaintenanceIntervalWidgetEditComponent),
|
|
1973
|
+
},
|
|
1974
|
+
},
|
|
1975
|
+
};
|
|
1976
|
+
//#endregion
|
|
1977
|
+
|
|
1978
|
+
//#endregion
|
|
1979
|
+
//#region ----- Provider -----
|
|
1980
|
+
class AXMMaintenanceIntervalWidgetProvider {
|
|
1981
|
+
getWidgets() {
|
|
1982
|
+
return [AXMMaintenanceIntervalWidget];
|
|
1983
|
+
}
|
|
1984
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMMaintenanceIntervalWidgetProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1985
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMMaintenanceIntervalWidgetProvider }); }
|
|
1986
|
+
}
|
|
1987
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMMaintenanceIntervalWidgetProvider, decorators: [{
|
|
1988
|
+
type: Injectable
|
|
1989
|
+
}] });
|
|
1990
|
+
|
|
1588
1991
|
//#region ---- Imports ----
|
|
1589
1992
|
//#endregion
|
|
1590
1993
|
//#region ---- Widget config ----
|
|
1591
1994
|
const AXMWorkOrderWorkflowColumnWidget = {
|
|
1592
1995
|
name: 'work-order-workflow-column',
|
|
1593
|
-
title: '
|
|
1594
|
-
description: '
|
|
1996
|
+
title: '@maintenance-management:widgets.work-order-workflow-column.title',
|
|
1997
|
+
description: '@maintenance-management:widgets.work-order-workflow-column.description',
|
|
1595
1998
|
type: 'view',
|
|
1596
1999
|
categories: [],
|
|
1597
2000
|
groups: [AXPWidgetGroupEnum.EntityWidget],
|
|
@@ -1599,7 +2002,7 @@ const AXMWorkOrderWorkflowColumnWidget = {
|
|
|
1599
2002
|
properties: [],
|
|
1600
2003
|
components: {
|
|
1601
2004
|
column: {
|
|
1602
|
-
component: () => import('./acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-
|
|
2005
|
+
component: () => import('./acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-B90OJ-Ol.mjs').then((c) => c.AXMWorkOrderWorkflowColumnComponent),
|
|
1603
2006
|
},
|
|
1604
2007
|
},
|
|
1605
2008
|
};
|
|
@@ -1610,8 +2013,8 @@ const AXMWorkOrderWorkflowColumnWidget = {
|
|
|
1610
2013
|
//#region ---- Widget config ----
|
|
1611
2014
|
const AXMWorkOrderWorkReportColumnWidget = {
|
|
1612
2015
|
name: 'work-order-work-report-column',
|
|
1613
|
-
title: '
|
|
1614
|
-
description: '
|
|
2016
|
+
title: '@maintenance-management:widgets.work-order-work-report-column.title',
|
|
2017
|
+
description: '@maintenance-management:widgets.work-order-work-report-column.description',
|
|
1615
2018
|
type: 'view',
|
|
1616
2019
|
categories: [],
|
|
1617
2020
|
groups: [AXPWidgetGroupEnum.EntityWidget],
|
|
@@ -1643,8 +2046,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1643
2046
|
//#region ---- Widget config ----
|
|
1644
2047
|
const AXMWorkReportChecklistResultsWidget = {
|
|
1645
2048
|
name: 'work-report-checklist-results',
|
|
1646
|
-
title: '
|
|
1647
|
-
description: '
|
|
2049
|
+
title: '@maintenance-management:widgets.work-report-checklist-results.title',
|
|
2050
|
+
description: '@maintenance-management:widgets.work-report-checklist-results.description',
|
|
1648
2051
|
type: 'view',
|
|
1649
2052
|
categories: [],
|
|
1650
2053
|
groups: [AXPWidgetGroupEnum.EntityWidget],
|
|
@@ -1691,6 +2094,11 @@ class AXMMaintenanceManagementModule {
|
|
|
1691
2094
|
useClass: AXMMaintenanceManagementWorkOrderExpressionEvaluatorScopeProvider,
|
|
1692
2095
|
multi: true,
|
|
1693
2096
|
},
|
|
2097
|
+
{
|
|
2098
|
+
provide: AXP_WIDGET_DEFINITION_PROVIDER,
|
|
2099
|
+
useClass: AXMMaintenanceIntervalWidgetProvider,
|
|
2100
|
+
multi: true,
|
|
2101
|
+
},
|
|
1694
2102
|
{
|
|
1695
2103
|
provide: AXP_WIDGET_DEFINITION_PROVIDER,
|
|
1696
2104
|
useClass: AXMWorkReportWidgetProvider,
|
|
@@ -1724,7 +2132,7 @@ class AXMMaintenanceManagementModule {
|
|
|
1724
2132
|
},
|
|
1725
2133
|
{
|
|
1726
2134
|
key: AXMMaintenanceManagementCommandKeys.WorkOrder.StartFlow,
|
|
1727
|
-
command: () => import('./acorex-platform-module-maintenance-management-client-start-work-order-flow.command-
|
|
2135
|
+
command: () => import('./acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B5Ko0JyG.mjs').then((c) => c.StartWorkOrderFlowCommand),
|
|
1728
2136
|
},
|
|
1729
2137
|
{
|
|
1730
2138
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.ResolveWorkOrder,
|
|
@@ -1736,11 +2144,11 @@ class AXMMaintenanceManagementModule {
|
|
|
1736
2144
|
},
|
|
1737
2145
|
{
|
|
1738
2146
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.CreateOrGetWorkReportDraft,
|
|
1739
|
-
command: () => import('./acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-
|
|
2147
|
+
command: () => import('./acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-DDvUWUU5.mjs').then((c) => c.CreateOrGetWorkReportDraftActivity),
|
|
1740
2148
|
},
|
|
1741
2149
|
{
|
|
1742
2150
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.UpdateWorkOrderInProgress,
|
|
1743
|
-
command: () => import('./acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-
|
|
2151
|
+
command: () => import('./acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-D75YRfD2.mjs').then((c) => c.UpdateWorkOrderInProgressActivity),
|
|
1744
2152
|
},
|
|
1745
2153
|
{
|
|
1746
2154
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.ValidateWorkOrderCompletion,
|
|
@@ -1752,7 +2160,7 @@ class AXMMaintenanceManagementModule {
|
|
|
1752
2160
|
},
|
|
1753
2161
|
{
|
|
1754
2162
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.RecordWorkReportAssessment,
|
|
1755
|
-
command: () => import('./acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-
|
|
2163
|
+
command: () => import('./acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BiD6NYBT.mjs').then((c) => c.RecordWorkReportAssessmentActivity),
|
|
1756
2164
|
},
|
|
1757
2165
|
{
|
|
1758
2166
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.UpdateWorkOrderCompleted,
|
|
@@ -1804,6 +2212,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1804
2212
|
useClass: AXMMaintenanceManagementWorkOrderExpressionEvaluatorScopeProvider,
|
|
1805
2213
|
multi: true,
|
|
1806
2214
|
},
|
|
2215
|
+
{
|
|
2216
|
+
provide: AXP_WIDGET_DEFINITION_PROVIDER,
|
|
2217
|
+
useClass: AXMMaintenanceIntervalWidgetProvider,
|
|
2218
|
+
multi: true,
|
|
2219
|
+
},
|
|
1807
2220
|
{
|
|
1808
2221
|
provide: AXP_WIDGET_DEFINITION_PROVIDER,
|
|
1809
2222
|
useClass: AXMWorkReportWidgetProvider,
|
|
@@ -1837,7 +2250,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1837
2250
|
},
|
|
1838
2251
|
{
|
|
1839
2252
|
key: AXMMaintenanceManagementCommandKeys.WorkOrder.StartFlow,
|
|
1840
|
-
command: () => import('./acorex-platform-module-maintenance-management-client-start-work-order-flow.command-
|
|
2253
|
+
command: () => import('./acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B5Ko0JyG.mjs').then((c) => c.StartWorkOrderFlowCommand),
|
|
1841
2254
|
},
|
|
1842
2255
|
{
|
|
1843
2256
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.ResolveWorkOrder,
|
|
@@ -1849,11 +2262,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1849
2262
|
},
|
|
1850
2263
|
{
|
|
1851
2264
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.CreateOrGetWorkReportDraft,
|
|
1852
|
-
command: () => import('./acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-
|
|
2265
|
+
command: () => import('./acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-DDvUWUU5.mjs').then((c) => c.CreateOrGetWorkReportDraftActivity),
|
|
1853
2266
|
},
|
|
1854
2267
|
{
|
|
1855
2268
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.UpdateWorkOrderInProgress,
|
|
1856
|
-
command: () => import('./acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-
|
|
2269
|
+
command: () => import('./acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-D75YRfD2.mjs').then((c) => c.UpdateWorkOrderInProgressActivity),
|
|
1857
2270
|
},
|
|
1858
2271
|
{
|
|
1859
2272
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.ValidateWorkOrderCompletion,
|
|
@@ -1865,7 +2278,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1865
2278
|
},
|
|
1866
2279
|
{
|
|
1867
2280
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.RecordWorkReportAssessment,
|
|
1868
|
-
command: () => import('./acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-
|
|
2281
|
+
command: () => import('./acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-BiD6NYBT.mjs').then((c) => c.RecordWorkReportAssessmentActivity),
|
|
1869
2282
|
},
|
|
1870
2283
|
{
|
|
1871
2284
|
key: AXMMaintenanceManagementCommandKeys.WorkflowActivity.UpdateWorkOrderCompleted,
|
|
@@ -2587,5 +3000,5 @@ const workOrderExecutionWorkflowDefinition = createWorkOrderExecutionWorkflowDef
|
|
|
2587
3000
|
* Generated bundle index. Do not edit.
|
|
2588
3001
|
*/
|
|
2589
3002
|
|
|
2590
|
-
export { AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE as A,
|
|
2591
|
-
//# sourceMappingURL=acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-
|
|
3003
|
+
export { AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE as A, AXMMaintenanceIntervalComponent as a, AXMMaintenanceManagementMenuProvider as b, AXMMaintenanceManagementModule as c, AXMMaintenanceManagementPermissionDefinitionProvider as d, AXMMaintenanceManagementSearchCommandProvider as e, createWorkOrderExecutionWorkflowDefinition as f, workOrderExecutionWorkflowName as g, queryWorkflowTemplatesForAsset as q, resolveDisplayLabel as r, workOrderExecutionWorkflowDefinition as w };
|
|
3004
|
+
//# sourceMappingURL=acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-6cXxZPN1.mjs.map
|