@acorex/modules 21.0.0-next.89 → 21.0.0-next.90
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-modules-common.mjs +9 -9
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs → acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs} +364 -237
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs → acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs.map → acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Dyx_n0bi.mjs} +3 -3
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Dyx_n0bi.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs → acorex-modules-conversation-comments-page.component--g4ugC_L.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs.map → acorex-modules-conversation-comments-page.component--g4ugC_L.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs → acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs.map → acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs → acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs.map → acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs → acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs.map → acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs → acorex-modules-conversation-send-assist-chat-message.command-g_NgPuxP.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-g_NgPuxP.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs → acorex-modules-conversation-start-assist-chat.command-DeMmJdd6.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs.map → acorex-modules-conversation-start-assist-chat.command-DeMmJdd6.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs → acorex-modules-conversation-sync-read-state.command-4YxdwLaE.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs.map → acorex-modules-conversation-sync-read-state.command-4YxdwLaE.mjs.map} +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +1 -1
- package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-kph3UxDu.mjs} +94 -41
- package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-kph3UxDu.mjs.map +1 -0
- package/fesm2022/{acorex-modules-dashboard-management-index-gjCiELmH.mjs → acorex-modules-dashboard-management-index-rp9dgARq.mjs} +2 -2
- package/fesm2022/{acorex-modules-dashboard-management-index-gjCiELmH.mjs.map → acorex-modules-dashboard-management-index-rp9dgARq.mjs.map} +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-DyJoXajP.mjs → acorex-modules-document-management-drive-choose.component-Dx1slMSA.mjs} +3 -3
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-DyJoXajP.mjs.map → acorex-modules-document-management-drive-choose.component-Dx1slMSA.mjs.map} +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +268 -351
- package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs} +42 -21
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs → acorex-modules-human-capital-management-approve-leave-request.command-B_EBDijL.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-B_EBDijL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-ZzWBeTv1.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-ZzWBeTv1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-Bd3RvlNm.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-Bd3RvlNm.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs → acorex-modules-human-capital-management-edit-personal-info.command-Drbi1WMd.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs.map → acorex-modules-human-capital-management-edit-personal-info.command-Drbi1WMd.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs → acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs.map → acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs → acorex-modules-human-capital-management-reject-leave-request.command-BC-1Kixd.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-BC-1Kixd.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-Caylq9Rv.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-Caylq9Rv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs → acorex-modules-human-capital-management-start-leave-request-flow.command-BsEwA1VM.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs.map → acorex-modules-human-capital-management-start-leave-request-flow.command-BsEwA1VM.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B8xK2iTn.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs.map → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B8xK2iTn.mjs.map} +1 -1
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
- package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
- package/fesm2022/acorex-modules-project-management.mjs +707 -424
- package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +1 -1
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-task-management-start-task-flow.command-HYdQOWDe.mjs +115 -0
- package/fesm2022/acorex-modules-task-management-start-task-flow.command-HYdQOWDe.mjs.map +1 -0
- package/fesm2022/{acorex-modules-task-management-task-board.page-DTWxd_vG.mjs → acorex-modules-task-management-task-board.page-BMTjJlry.mjs} +3 -3
- package/fesm2022/{acorex-modules-task-management-task-board.page-DTWxd_vG.mjs.map → acorex-modules-task-management-task-board.page-BMTjJlry.mjs.map} +1 -1
- package/fesm2022/acorex-modules-task-management.mjs +433 -460
- package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-timesheet-management-report-hours-by-project.query-z38wZLKJ.mjs → acorex-modules-timesheet-management-report-hours-by-project.query-CGc1Q6aB.mjs} +2 -2
- package/fesm2022/acorex-modules-timesheet-management-report-hours-by-project.query-CGc1Q6aB.mjs.map +1 -0
- package/fesm2022/{acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-BDfvz6fH.mjs → acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-AIcAUd3s.mjs} +2 -2
- package/fesm2022/{acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-BDfvz6fH.mjs.map → acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-AIcAUd3s.mjs.map} +1 -1
- package/fesm2022/acorex-modules-timesheet-management.mjs +8 -8
- package/fesm2022/acorex-modules-timesheet-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-edit.component-CFF7X1MO.mjs +70 -0
- package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-edit.component-CFF7X1MO.mjs.map +1 -0
- package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-view.component-DwC2aHVt.mjs +70 -0
- package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-view.component-DwC2aHVt.mjs.map +1 -0
- package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram.types-DmzV305e.mjs +195 -0
- package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram.types-DmzV305e.mjs.map +1 -0
- package/fesm2022/acorex-modules-workplacesafety-management.mjs +139 -16
- package/fesm2022/acorex-modules-workplacesafety-management.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-dashboard-management.d.ts +30 -11
- package/types/acorex-modules-document-management.d.ts +21 -5
- package/types/acorex-modules-human-capital-management.d.ts +4 -0
- package/types/acorex-modules-project-management.d.ts +46 -23
- package/types/acorex-modules-task-management.d.ts +80 -11
- package/types/acorex-modules-timesheet-management.d.ts +2 -2
- package/types/acorex-modules-workplacesafety-management.d.ts +7 -2
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs.map +0 -1
- package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs.map +0 -1
- package/fesm2022/acorex-modules-timesheet-management-report-hours-by-project.query-z38wZLKJ.mjs.map +0 -1
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AXP_IDENTIFIER_RULES } from '@acorex/modules/identifier-management';
|
|
2
|
+
import { AXP_MODULE_MANIFEST_PROVIDER, AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex/platform/core';
|
|
2
3
|
import { AXPEntityService, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
|
|
3
4
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Injectable, inject,
|
|
5
|
-
import {
|
|
6
|
-
import { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex/platform/layout/components';
|
|
5
|
+
import { Injectable, inject, NgModule } from '@angular/core';
|
|
6
|
+
import { AXPRuntimeModule } from '@acorex/platform/runtime';
|
|
7
7
|
import { AXPSearchCommandProvider, createEntitySearchCommand, AXPEntityCommandScope, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex/platform/common';
|
|
8
8
|
import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
|
|
9
9
|
import { AXPCommonMenuKeys } from '@acorex/modules/common';
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { AXPPageLayoutBaseComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
|
|
14
|
-
import { AXPWidgetsCatalog, AXPStatusProvider, AXPSystemActionType, AXPWidgetsList } from '@acorex/platform/contracts';
|
|
15
|
-
import * as i1 from '@angular/common';
|
|
16
|
-
import { CommonModule } from '@angular/common';
|
|
10
|
+
import { AXPStatusProvider, AXPWidgetsCatalog, AXPWidgetsList } from '@acorex/platform/contracts';
|
|
11
|
+
import { AXPTaskManagementCommandKeys } from '@acorex/modules/task-management';
|
|
12
|
+
import { isEmpty, defaultTo, merge, isString, uniq } from 'lodash-es';
|
|
17
13
|
import { createAllQueryView, entityMasterCrudActions, entityMasterRecordActions, AXPEntityCommandScope as AXPEntityCommandScope$1, entityDetailsCrudActions } from '@acorex/platform/layout/entity-contracts';
|
|
18
14
|
|
|
15
|
+
/** Catalog scope for project-management workflows and related catalogs. */
|
|
16
|
+
const PM_CATALOG_SCOPE = 'project-management.pm';
|
|
17
|
+
/** Canonical entity source for {@link AXPEntityReference.type} on project subjects. */
|
|
18
|
+
const PM_PROJECT_ENTITY_SOURCE = 'ProjectManagement.Project';
|
|
19
|
+
|
|
19
20
|
const AXPProjectManagementMenuKeys = {
|
|
20
21
|
Root: 'project-management:menu',
|
|
21
22
|
Projects: 'project-management:menu:projects',
|
|
@@ -67,8 +68,15 @@ const RootConfig = {
|
|
|
67
68
|
titlePlural: `@project-management:projects.project-types.plural`,
|
|
68
69
|
icon: 'fa-light fa-rectangle-vertical-history',
|
|
69
70
|
},
|
|
71
|
+
projectTypeCategory: {
|
|
72
|
+
name: 'ProjectTypeCategory',
|
|
73
|
+
title: '@project-management:projects.project-type-categories.title',
|
|
74
|
+
titlePlural: '@project-management:projects.project-type-categories.plural',
|
|
75
|
+
icon: 'fa-light fa-layer-group',
|
|
76
|
+
},
|
|
70
77
|
project: {
|
|
71
78
|
name: 'Project',
|
|
79
|
+
source: `${config.module}.Project`,
|
|
72
80
|
title: '@project-management:projects.terms.title',
|
|
73
81
|
titlePlural: '@project-management:projects.terms.plural',
|
|
74
82
|
icon: 'fa-light fa-square-kanban',
|
|
@@ -76,8 +84,6 @@ const RootConfig = {
|
|
|
76
84
|
},
|
|
77
85
|
};
|
|
78
86
|
|
|
79
|
-
const PROJECT_TASK_BOARD_PAGE_COMPONENT_KEY = 'project-task-board-page';
|
|
80
|
-
|
|
81
87
|
//#region ---- Contracts barrel ----
|
|
82
88
|
//#endregion
|
|
83
89
|
|
|
@@ -151,7 +157,6 @@ class AXMMenuProvider {
|
|
|
151
157
|
permissions: [AXMPermissionsKeys.ProjectManagement.ProjectType.Management],
|
|
152
158
|
},
|
|
153
159
|
},
|
|
154
|
-
// previously TaskTypes menu was here, now removed with TaskType entity
|
|
155
160
|
]);
|
|
156
161
|
}
|
|
157
162
|
}
|
|
@@ -246,208 +251,6 @@ class AXMSearchCommandProvider extends AXPSearchCommandProvider {
|
|
|
246
251
|
}
|
|
247
252
|
}
|
|
248
253
|
|
|
249
|
-
class AXMProjectTaskBoardPageComponentProvider {
|
|
250
|
-
async components() {
|
|
251
|
-
return [
|
|
252
|
-
{
|
|
253
|
-
key: PROJECT_TASK_BOARD_PAGE_COMPONENT_KEY,
|
|
254
|
-
loader: () => Promise.resolve().then(function () { return projectTaskBoardPage_component; }).then((m) => m.AXMProjectTaskBoardPageComponent),
|
|
255
|
-
},
|
|
256
|
-
];
|
|
257
|
-
}
|
|
258
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectTaskBoardPageComponentProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
259
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectTaskBoardPageComponentProvider }); }
|
|
260
|
-
}
|
|
261
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectTaskBoardPageComponentProvider, decorators: [{
|
|
262
|
-
type: Injectable
|
|
263
|
-
}] });
|
|
264
|
-
|
|
265
|
-
//#region ---- Component ----
|
|
266
|
-
class AXMProjectTaskBoardPageComponent extends AXPPageLayoutBaseComponent {
|
|
267
|
-
constructor() {
|
|
268
|
-
super();
|
|
269
|
-
this.rootContext = input(...(ngDevMode ? [undefined, { debugName: "rootContext" }] : /* istanbul ignore next */ []));
|
|
270
|
-
this.pageConfig = input(...(ngDevMode ? [undefined, { debugName: "pageConfig" }] : /* istanbul ignore next */ []));
|
|
271
|
-
this.options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
272
|
-
/** Set once after create menu is built from rootContext; prevents re-running. */
|
|
273
|
-
this.isInitialized = false;
|
|
274
|
-
/** Menu items built once when rootContext is available. */
|
|
275
|
-
this.createMenuItems = signal([], ...(ngDevMode ? [{ debugName: "createMenuItems" }] : /* istanbul ignore next */ []));
|
|
276
|
-
this.deviceService = inject(AXPDeviceService);
|
|
277
|
-
this.commandService = inject(AXPCommandService);
|
|
278
|
-
//#endregion
|
|
279
|
-
//#region ---- Workflow list layout (entity-list with projectId filter) ----
|
|
280
|
-
/**
|
|
281
|
-
* Entity-list widget node for WorkflowInstance, filtered by current project.
|
|
282
|
-
* Only rendered when project id is available.
|
|
283
|
-
*/
|
|
284
|
-
this.workflowListLayout = computed(() => {
|
|
285
|
-
const ctx = this.rootContext();
|
|
286
|
-
const projectId = ctx && typeof ctx === 'object' && 'id' in ctx ? ctx.id : undefined;
|
|
287
|
-
if (!projectId) {
|
|
288
|
-
return null;
|
|
289
|
-
}
|
|
290
|
-
return {
|
|
291
|
-
type: AXPWidgetsCatalog.entityList,
|
|
292
|
-
name: 'project-workflow-instances',
|
|
293
|
-
path: 'workflowInstances',
|
|
294
|
-
mode: 'view',
|
|
295
|
-
options: {
|
|
296
|
-
entity: 'WorkflowManagement.WorkflowInstance',
|
|
297
|
-
showEntityActions: false,
|
|
298
|
-
showToolbar: true,
|
|
299
|
-
actions: [
|
|
300
|
-
{
|
|
301
|
-
command: 'open-entity',
|
|
302
|
-
scope: AXPEntityCommandScope.Individual,
|
|
303
|
-
priority: 'secondary',
|
|
304
|
-
hidden: true,
|
|
305
|
-
},
|
|
306
|
-
{
|
|
307
|
-
command: 'delete-entity',
|
|
308
|
-
scope: AXPEntityCommandScope.Individual,
|
|
309
|
-
priority: 'secondary',
|
|
310
|
-
hidden: true,
|
|
311
|
-
},
|
|
312
|
-
],
|
|
313
|
-
},
|
|
314
|
-
defaultValue: {
|
|
315
|
-
toolbar: {
|
|
316
|
-
filters: [
|
|
317
|
-
{
|
|
318
|
-
field: 'workflowInstance.workflowState.input.projectId',
|
|
319
|
-
operator: { type: 'equal' },
|
|
320
|
-
value: projectId,
|
|
321
|
-
hidden: true,
|
|
322
|
-
},
|
|
323
|
-
],
|
|
324
|
-
},
|
|
325
|
-
},
|
|
326
|
-
};
|
|
327
|
-
}, ...(ngDevMode ? [{ debugName: "workflowListLayout" }] : /* istanbul ignore next */ []));
|
|
328
|
-
this.layoutContext = computed(() => ({}), ...(ngDevMode ? [{ debugName: "layoutContext" }] : /* istanbul ignore next */ []));
|
|
329
|
-
effect(() => {
|
|
330
|
-
const ctx = this.rootContext();
|
|
331
|
-
if (ctx == null || this.isInitialized) {
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
const projectType = ctx?.projectType ?? {};
|
|
335
|
-
const workflows = projectType.workflows ?? [];
|
|
336
|
-
const items = workflows.filter((w) => !!w?.name);
|
|
337
|
-
if (!items.length) {
|
|
338
|
-
this.isInitialized = true;
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
const typedCtx = ctx;
|
|
342
|
-
console.log('typedCtx', typedCtx);
|
|
343
|
-
console.log('typedCtx.metaDataForm', typedCtx?.metaDataForm);
|
|
344
|
-
this.createMenuItems.set([
|
|
345
|
-
{
|
|
346
|
-
title: '@general:actions.create.title',
|
|
347
|
-
icon: 'fa-light fa-plus',
|
|
348
|
-
color: 'primary',
|
|
349
|
-
items: items.map((w) => ({
|
|
350
|
-
name: `start-workflow:${w.name}`,
|
|
351
|
-
title: w.title ?? w.name,
|
|
352
|
-
icon: 'fa-light fa-diagram-project',
|
|
353
|
-
command: {
|
|
354
|
-
name: 'WorkflowManagement.WorkflowDefinition:Execute',
|
|
355
|
-
options: {
|
|
356
|
-
workflowId: w.name,
|
|
357
|
-
input: {
|
|
358
|
-
metadata: {
|
|
359
|
-
...(typedCtx?.metaDataForm ?? {}),
|
|
360
|
-
isNeedReview: true,
|
|
361
|
-
},
|
|
362
|
-
projectId: typedCtx?.id,
|
|
363
|
-
projectTypeId: typedCtx?.projectType?.id,
|
|
364
|
-
},
|
|
365
|
-
},
|
|
366
|
-
},
|
|
367
|
-
})),
|
|
368
|
-
},
|
|
369
|
-
]);
|
|
370
|
-
this.isInitialized = true;
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
//#endregion
|
|
374
|
-
//#region ---- Lifecycle ----
|
|
375
|
-
async ngOnInit() {
|
|
376
|
-
await super.ngOnInit();
|
|
377
|
-
}
|
|
378
|
-
//#endregion
|
|
379
|
-
//#region ---- Page metadata (AXPPageLayoutBase) ----
|
|
380
|
-
async getPrimaryMenuItems() {
|
|
381
|
-
return this.createMenuItems();
|
|
382
|
-
}
|
|
383
|
-
async getSecondaryMenuItems() {
|
|
384
|
-
return [];
|
|
385
|
-
}
|
|
386
|
-
async getPageTitle() {
|
|
387
|
-
return this.translateService.translateAsync('@project-management:projects.tasks.plural');
|
|
388
|
-
}
|
|
389
|
-
async getPageBreadcrumbs() {
|
|
390
|
-
return [];
|
|
391
|
-
}
|
|
392
|
-
async execute(command) {
|
|
393
|
-
if (command.name === 'WorkflowManagement.WorkflowDefinition:Execute') {
|
|
394
|
-
await this.commandService.execute(command.name, command.options);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
//#endregion
|
|
398
|
-
static { this.COMPONENT_KEY = PROJECT_TASK_BOARD_PAGE_COMPONENT_KEY; }
|
|
399
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectTaskBoardPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
400
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMProjectTaskBoardPageComponent, isStandalone: true, selector: "axm-project-task-board-page", inputs: { rootContext: { classPropertyName: "rootContext", publicName: "rootContext", isSignal: true, isRequired: false, transformFunction: null }, pageConfig: { classPropertyName: "pageConfig", publicName: "pageConfig", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-h-full" }, providers: [
|
|
401
|
-
{
|
|
402
|
-
provide: AXPPageLayoutBase,
|
|
403
|
-
useExisting: AXMProjectTaskBoardPageComponent,
|
|
404
|
-
},
|
|
405
|
-
], usesInheritance: true, ngImport: i0, template: `
|
|
406
|
-
<div class="ax-flex-1 ax-min-h-0 ax-h-full ax-flex ax-flex-col">
|
|
407
|
-
@if (workflowListLayout(); as layout) {
|
|
408
|
-
<axp-layout-renderer [layout]="layout" [context]="layoutContext()" class="ax-flex-1 ax-min-h-0 ax-w-full" />
|
|
409
|
-
} @else {
|
|
410
|
-
<div class="ax-p-4 ax-text-sm ax-text-muted">
|
|
411
|
-
{{ '@general:state-message.empty.title' | translate | async }}
|
|
412
|
-
</div>
|
|
413
|
-
}
|
|
414
|
-
</div>
|
|
415
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXPLayoutRendererComponent, selector: "axp-layout-renderer", inputs: ["layout", "context", "look", "mode"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
416
|
-
}
|
|
417
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectTaskBoardPageComponent, decorators: [{
|
|
418
|
-
type: Component,
|
|
419
|
-
args: [{
|
|
420
|
-
selector: 'axm-project-task-board-page',
|
|
421
|
-
standalone: true,
|
|
422
|
-
imports: [CommonModule, AXPLayoutRendererComponent, AXTranslationModule],
|
|
423
|
-
template: `
|
|
424
|
-
<div class="ax-flex-1 ax-min-h-0 ax-h-full ax-flex ax-flex-col">
|
|
425
|
-
@if (workflowListLayout(); as layout) {
|
|
426
|
-
<axp-layout-renderer [layout]="layout" [context]="layoutContext()" class="ax-flex-1 ax-min-h-0 ax-w-full" />
|
|
427
|
-
} @else {
|
|
428
|
-
<div class="ax-p-4 ax-text-sm ax-text-muted">
|
|
429
|
-
{{ '@general:state-message.empty.title' | translate | async }}
|
|
430
|
-
</div>
|
|
431
|
-
}
|
|
432
|
-
</div>
|
|
433
|
-
`,
|
|
434
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
435
|
-
encapsulation: ViewEncapsulation.None,
|
|
436
|
-
host: { class: 'ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-h-full' },
|
|
437
|
-
providers: [
|
|
438
|
-
{
|
|
439
|
-
provide: AXPPageLayoutBase,
|
|
440
|
-
useExisting: AXMProjectTaskBoardPageComponent,
|
|
441
|
-
},
|
|
442
|
-
],
|
|
443
|
-
}]
|
|
444
|
-
}], ctorParameters: () => [], propDecorators: { rootContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "rootContext", required: false }] }], pageConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageConfig", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
|
|
445
|
-
|
|
446
|
-
var projectTaskBoardPage_component = /*#__PURE__*/Object.freeze({
|
|
447
|
-
__proto__: null,
|
|
448
|
-
AXMProjectTaskBoardPageComponent: AXMProjectTaskBoardPageComponent
|
|
449
|
-
});
|
|
450
|
-
|
|
451
254
|
//#region ---- Imports ----
|
|
452
255
|
//#endregion
|
|
453
256
|
//#region ---- Project Status Provider ----
|
|
@@ -516,17 +319,280 @@ class AXMProjectStatusProvider extends AXPStatusProvider {
|
|
|
516
319
|
}
|
|
517
320
|
//#endregion
|
|
518
321
|
|
|
322
|
+
//#endregion
|
|
323
|
+
//#region ---- Constants ----
|
|
324
|
+
const WORKFLOW_DEFINITION = 'WorkflowManagement.WorkflowDefinition';
|
|
325
|
+
//#endregion
|
|
326
|
+
//#region ---- Provider ----
|
|
327
|
+
class AXMProjectManagementCatalogScopeDefinitionProvider {
|
|
328
|
+
async items() {
|
|
329
|
+
return [
|
|
330
|
+
{
|
|
331
|
+
name: PM_CATALOG_SCOPE,
|
|
332
|
+
title: '@project-management:catalog-scopes.pm.title',
|
|
333
|
+
description: '@project-management:catalog-scopes.pm.description',
|
|
334
|
+
targets: [WORKFLOW_DEFINITION],
|
|
335
|
+
icon: 'fa-light fa-diagram-project',
|
|
336
|
+
cssClass: 'ax-secondary-lighter',
|
|
337
|
+
order: 15,
|
|
338
|
+
},
|
|
339
|
+
];
|
|
340
|
+
}
|
|
341
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectManagementCatalogScopeDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
342
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectManagementCatalogScopeDefinitionProvider }); }
|
|
343
|
+
}
|
|
344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectManagementCatalogScopeDefinitionProvider, decorators: [{
|
|
345
|
+
type: Injectable
|
|
346
|
+
}] });
|
|
347
|
+
|
|
348
|
+
//#region ---- Imports ----
|
|
349
|
+
//#endregion
|
|
350
|
+
/**
|
|
351
|
+
* Expression-evaluator scope for project "Start task" dropdown items (allowed task types).
|
|
352
|
+
*/
|
|
353
|
+
class AXMProjectManagementAllowedTaskTypesExpressionEvaluatorScopeProvider {
|
|
354
|
+
constructor() {
|
|
355
|
+
//#region ---- Services & Dependencies ----
|
|
356
|
+
this.entityService = inject(AXPEntityService);
|
|
357
|
+
//#endregion
|
|
358
|
+
}
|
|
359
|
+
//#endregion
|
|
360
|
+
//#region ---- AXPExpressionEvaluatorScopeProvider ----
|
|
361
|
+
async provide(context) {
|
|
362
|
+
context.addScope(RootConfig.module.name, {
|
|
363
|
+
AllowedTaskTypes: async (projectTypeIdRaw) => {
|
|
364
|
+
try {
|
|
365
|
+
const projectTypeId = typeof projectTypeIdRaw === 'string' ? projectTypeIdRaw.trim() : '';
|
|
366
|
+
if (!projectTypeId) {
|
|
367
|
+
return [];
|
|
368
|
+
}
|
|
369
|
+
const allowedRows = await this.loadAllowedTaskTypes(projectTypeId);
|
|
370
|
+
if (isEmpty(allowedRows)) {
|
|
371
|
+
return [];
|
|
372
|
+
}
|
|
373
|
+
return allowedRows.map((row) => this.buildAction(row));
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
console.error(`${RootConfig.module.name}.AllowedTaskTypes failed:`, error instanceof Error ? error.message : error);
|
|
377
|
+
return [];
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
//#endregion
|
|
383
|
+
//#region ---- Helpers ----
|
|
384
|
+
async loadAllowedTaskTypes(projectTypeId) {
|
|
385
|
+
const projectType = (await this.entityService
|
|
386
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.projectType.name)
|
|
387
|
+
.data()
|
|
388
|
+
.byKey(projectTypeId));
|
|
389
|
+
if (!projectType) {
|
|
390
|
+
return [];
|
|
391
|
+
}
|
|
392
|
+
const taskTypeIds = this.resolveAllowedTaskTypeIds(projectType);
|
|
393
|
+
const enriched = [];
|
|
394
|
+
for (const taskTypeId of taskTypeIds) {
|
|
395
|
+
const trimmedId = taskTypeId?.trim();
|
|
396
|
+
if (!trimmedId) {
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
const taskTypeDetail = (await this.entityService
|
|
400
|
+
.withEntity('TaskManagement', 'TaskType')
|
|
401
|
+
.data()
|
|
402
|
+
.byKey(trimmedId));
|
|
403
|
+
if (!taskTypeDetail?.isActive) {
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
enriched.push({
|
|
407
|
+
taskTypeId: trimmedId,
|
|
408
|
+
projectTypeId,
|
|
409
|
+
taskTypeDetail: {
|
|
410
|
+
id: taskTypeDetail.id,
|
|
411
|
+
title: taskTypeDetail.title,
|
|
412
|
+
workflowConfig: taskTypeDetail.workflowConfig,
|
|
413
|
+
isActive: taskTypeDetail.isActive,
|
|
414
|
+
},
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
return enriched;
|
|
418
|
+
}
|
|
419
|
+
resolveAllowedTaskTypeIds(projectType) {
|
|
420
|
+
const fromRefs = projectType.allowedTaskTypes?.map((row) => row.id).filter(Boolean) ?? [];
|
|
421
|
+
if (!isEmpty(fromRefs)) {
|
|
422
|
+
return fromRefs;
|
|
423
|
+
}
|
|
424
|
+
return defaultTo(projectType.allowedTaskTypeIds, []).filter((id) => typeof id === 'string' && id.trim().length > 0);
|
|
425
|
+
}
|
|
426
|
+
buildAction(row) {
|
|
427
|
+
const taskTypeId = row.taskTypeId;
|
|
428
|
+
const taskTypeTitle = row.taskTypeDetail?.title ?? taskTypeId;
|
|
429
|
+
const workflowConfig = row.taskTypeDetail?.workflowConfig;
|
|
430
|
+
const workflowId = workflowConfig?.workflowName?.trim();
|
|
431
|
+
const guidedFlowCommand = workflowId
|
|
432
|
+
? {
|
|
433
|
+
name: AXPTaskManagementCommandKeys.Task.StartFlow,
|
|
434
|
+
options: {
|
|
435
|
+
workflowId,
|
|
436
|
+
input: merge(defaultTo(workflowConfig?.defaultInput, {}), {
|
|
437
|
+
taskTypeId,
|
|
438
|
+
taskTypeTitle,
|
|
439
|
+
projectTypeId: row.projectTypeId,
|
|
440
|
+
subjectRef: {
|
|
441
|
+
type: PM_PROJECT_ENTITY_SOURCE,
|
|
442
|
+
id: '{{ context.eval("id") }}',
|
|
443
|
+
title: '{{ context.eval("title") }}',
|
|
444
|
+
},
|
|
445
|
+
}),
|
|
446
|
+
},
|
|
447
|
+
}
|
|
448
|
+
: undefined;
|
|
449
|
+
const notConfiguredCommand = {
|
|
450
|
+
name: 'workflow-activity:show-toast',
|
|
451
|
+
options: {
|
|
452
|
+
message: '@project-management:projects.messages.task-type-not-configured',
|
|
453
|
+
type: 'warning',
|
|
454
|
+
},
|
|
455
|
+
};
|
|
456
|
+
return {
|
|
457
|
+
name: `start-project-task-${taskTypeId}`,
|
|
458
|
+
title: taskTypeTitle,
|
|
459
|
+
icon: 'fa-light fa-play',
|
|
460
|
+
color: 'default',
|
|
461
|
+
command: guidedFlowCommand ?? notConfiguredCommand,
|
|
462
|
+
priority: 'primary',
|
|
463
|
+
type: 'create',
|
|
464
|
+
scope: AXPEntityCommandScope.TypeLevel,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
//#region ---- Imports ----
|
|
470
|
+
//#endregion
|
|
471
|
+
/**
|
|
472
|
+
* Expression-evaluator scope for resolving allowed document type names from a project record.
|
|
473
|
+
* Unions document type names configured on each allowed TaskType for the project's ProjectType.
|
|
474
|
+
*/
|
|
475
|
+
class AXMProjectManagementDocumentTypeNamesExpressionEvaluatorScopeProvider {
|
|
476
|
+
constructor() {
|
|
477
|
+
//#region ---- Services & Dependencies ----
|
|
478
|
+
this.entityService = inject(AXPEntityService);
|
|
479
|
+
//#endregion
|
|
480
|
+
}
|
|
481
|
+
//#endregion
|
|
482
|
+
//#region ---- AXPExpressionEvaluatorScopeProvider ----
|
|
483
|
+
async provide(context) {
|
|
484
|
+
context.addScope(RootConfig.module.name, {
|
|
485
|
+
resolveDocumentTypeNames: async (projectIdRaw) => {
|
|
486
|
+
try {
|
|
487
|
+
const projectId = isString(projectIdRaw) ? projectIdRaw.trim() : '';
|
|
488
|
+
if (!projectId) {
|
|
489
|
+
return [];
|
|
490
|
+
}
|
|
491
|
+
return await this.loadAllowedDocumentTypeNamesForProject(projectId);
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
console.error(`${RootConfig.module.name}.resolveDocumentTypeNames failed:`, error instanceof Error ? error.message : error);
|
|
495
|
+
return [];
|
|
496
|
+
}
|
|
497
|
+
},
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
//#endregion
|
|
501
|
+
//#region ---- Helpers ----
|
|
502
|
+
async loadAllowedDocumentTypeNamesForProject(projectId) {
|
|
503
|
+
const project = (await this.entityService
|
|
504
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.project.name)
|
|
505
|
+
.data()
|
|
506
|
+
.byKey(projectId));
|
|
507
|
+
if (!project) {
|
|
508
|
+
return [];
|
|
509
|
+
}
|
|
510
|
+
const projectTypeId = this.resolveProjectTypeId(project);
|
|
511
|
+
if (!projectTypeId) {
|
|
512
|
+
return [];
|
|
513
|
+
}
|
|
514
|
+
const projectType = (await this.entityService
|
|
515
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.projectType.name)
|
|
516
|
+
.data()
|
|
517
|
+
.byKey(projectTypeId));
|
|
518
|
+
if (!projectType) {
|
|
519
|
+
return [];
|
|
520
|
+
}
|
|
521
|
+
const taskTypeIds = this.resolveAllowedTaskTypeIds(projectType);
|
|
522
|
+
if (isEmpty(taskTypeIds)) {
|
|
523
|
+
return [];
|
|
524
|
+
}
|
|
525
|
+
const names = [];
|
|
526
|
+
for (const taskTypeId of taskTypeIds) {
|
|
527
|
+
const trimmedId = taskTypeId?.trim();
|
|
528
|
+
if (!trimmedId) {
|
|
529
|
+
continue;
|
|
530
|
+
}
|
|
531
|
+
const taskType = (await this.entityService
|
|
532
|
+
.withEntity('TaskManagement', 'TaskType')
|
|
533
|
+
.data()
|
|
534
|
+
.byKey(trimmedId));
|
|
535
|
+
if (!taskType?.isActive) {
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
names.push(...this.extractDocumentTypeNames(taskType));
|
|
539
|
+
}
|
|
540
|
+
return uniq(names.filter((name) => name.trim().length > 0));
|
|
541
|
+
}
|
|
542
|
+
resolveProjectTypeId(project) {
|
|
543
|
+
const fromNested = project.projectType?.id;
|
|
544
|
+
if (isString(fromNested) && fromNested.trim()) {
|
|
545
|
+
return fromNested.trim();
|
|
546
|
+
}
|
|
547
|
+
const raw = project.projectTypeId;
|
|
548
|
+
if (isString(raw) && raw.trim()) {
|
|
549
|
+
return raw.trim();
|
|
550
|
+
}
|
|
551
|
+
if (raw && typeof raw === 'object' && isString(raw.id)) {
|
|
552
|
+
return (raw.id ?? '').trim();
|
|
553
|
+
}
|
|
554
|
+
return '';
|
|
555
|
+
}
|
|
556
|
+
resolveAllowedTaskTypeIds(projectType) {
|
|
557
|
+
const fromRefs = projectType.allowedTaskTypes?.map((row) => row.id).filter(Boolean) ?? [];
|
|
558
|
+
if (!isEmpty(fromRefs)) {
|
|
559
|
+
return fromRefs;
|
|
560
|
+
}
|
|
561
|
+
return defaultTo(projectType.allowedTaskTypeIds, []).filter((id) => isString(id) && id.trim().length > 0);
|
|
562
|
+
}
|
|
563
|
+
extractDocumentTypeNames(taskType) {
|
|
564
|
+
return (taskType.documentTypes ?? [])
|
|
565
|
+
.map((row) => row?.name)
|
|
566
|
+
.filter((name) => isString(name) && name.trim().length > 0)
|
|
567
|
+
.map((name) => name.trim());
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
const AXM_PROJECT_CODE_IDENTIFIER_RULE = {
|
|
572
|
+
id: 'project-code',
|
|
573
|
+
title: 'Project Code',
|
|
574
|
+
entity: RootConfig.entities.project.source,
|
|
575
|
+
/** `PRJ-` + calendar year + padded sequence. */
|
|
576
|
+
pattern: 'PRJ-{date:YYYY}-{seq:4}',
|
|
577
|
+
enabled: true,
|
|
578
|
+
priority: 1,
|
|
579
|
+
scopeConfig: { byTenant: true, period: 'yearly', minValue: 1, blockSize: 0 },
|
|
580
|
+
};
|
|
581
|
+
|
|
519
582
|
class AXMProjectManagementModule {
|
|
520
583
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
521
584
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectManagementModule, imports: [AXPRuntimeModule] }); }
|
|
522
585
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMProjectManagementModule, providers: [
|
|
523
|
-
|
|
586
|
+
{
|
|
587
|
+
provide: AXP_IDENTIFIER_RULES,
|
|
588
|
+
multi: true,
|
|
589
|
+
useValue: AXM_PROJECT_CODE_IDENTIFIER_RULE,
|
|
590
|
+
},
|
|
524
591
|
{
|
|
525
592
|
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
526
593
|
useValue: ProjectManagementManifest,
|
|
527
594
|
multi: true,
|
|
528
595
|
},
|
|
529
|
-
// Provider references (now using tokens)
|
|
530
596
|
{
|
|
531
597
|
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
532
598
|
useClass: AXMPermissionDefinitionProvider,
|
|
@@ -553,13 +619,23 @@ class AXMProjectManagementModule {
|
|
|
553
619
|
multi: true,
|
|
554
620
|
},
|
|
555
621
|
{
|
|
556
|
-
provide:
|
|
622
|
+
provide: AXP_STATUS_PROVIDERS,
|
|
623
|
+
useClass: AXMProjectStatusProvider,
|
|
557
624
|
multi: true,
|
|
558
|
-
useClass: AXMProjectTaskBoardPageComponentProvider,
|
|
559
625
|
},
|
|
560
626
|
{
|
|
561
|
-
provide:
|
|
562
|
-
useClass:
|
|
627
|
+
provide: AXP_CATALOG_SCOPE_DEFINITION_PROVIDER,
|
|
628
|
+
useClass: AXMProjectManagementCatalogScopeDefinitionProvider,
|
|
629
|
+
multi: true,
|
|
630
|
+
},
|
|
631
|
+
{
|
|
632
|
+
provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,
|
|
633
|
+
useClass: AXMProjectManagementAllowedTaskTypesExpressionEvaluatorScopeProvider,
|
|
634
|
+
multi: true,
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,
|
|
638
|
+
useClass: AXMProjectManagementDocumentTypeNamesExpressionEvaluatorScopeProvider,
|
|
563
639
|
multi: true,
|
|
564
640
|
},
|
|
565
641
|
], imports: [AXPRuntimeModule] }); }
|
|
@@ -569,19 +645,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
569
645
|
args: [{
|
|
570
646
|
imports: [
|
|
571
647
|
AXPRuntimeModule,
|
|
572
|
-
// Entity Modules
|
|
573
|
-
// Feature Modules
|
|
574
648
|
],
|
|
575
649
|
exports: [],
|
|
576
650
|
declarations: [],
|
|
577
651
|
providers: [
|
|
578
|
-
|
|
652
|
+
{
|
|
653
|
+
provide: AXP_IDENTIFIER_RULES,
|
|
654
|
+
multi: true,
|
|
655
|
+
useValue: AXM_PROJECT_CODE_IDENTIFIER_RULE,
|
|
656
|
+
},
|
|
579
657
|
{
|
|
580
658
|
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
581
659
|
useValue: ProjectManagementManifest,
|
|
582
660
|
multi: true,
|
|
583
661
|
},
|
|
584
|
-
// Provider references (now using tokens)
|
|
585
662
|
{
|
|
586
663
|
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
587
664
|
useClass: AXMPermissionDefinitionProvider,
|
|
@@ -608,13 +685,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
608
685
|
multi: true,
|
|
609
686
|
},
|
|
610
687
|
{
|
|
611
|
-
provide:
|
|
688
|
+
provide: AXP_STATUS_PROVIDERS,
|
|
689
|
+
useClass: AXMProjectStatusProvider,
|
|
690
|
+
multi: true,
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
provide: AXP_CATALOG_SCOPE_DEFINITION_PROVIDER,
|
|
694
|
+
useClass: AXMProjectManagementCatalogScopeDefinitionProvider,
|
|
612
695
|
multi: true,
|
|
613
|
-
useClass: AXMProjectTaskBoardPageComponentProvider,
|
|
614
696
|
},
|
|
615
697
|
{
|
|
616
|
-
provide:
|
|
617
|
-
useClass:
|
|
698
|
+
provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,
|
|
699
|
+
useClass: AXMProjectManagementAllowedTaskTypesExpressionEvaluatorScopeProvider,
|
|
700
|
+
multi: true,
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,
|
|
704
|
+
useClass: AXMProjectManagementDocumentTypeNamesExpressionEvaluatorScopeProvider,
|
|
618
705
|
multi: true,
|
|
619
706
|
},
|
|
620
707
|
],
|
|
@@ -636,7 +723,17 @@ async function projectFactory() {
|
|
|
636
723
|
},
|
|
637
724
|
},
|
|
638
725
|
plugins: [
|
|
726
|
+
{ name: 'comments', options: { display: 'page' } },
|
|
639
727
|
{ name: 'history' },
|
|
728
|
+
{ name: 'archive' },
|
|
729
|
+
{ name: 'identifier', options: { field: 'code', rule: 'project-code' } },
|
|
730
|
+
{
|
|
731
|
+
name: 'documents',
|
|
732
|
+
options: {
|
|
733
|
+
documentTypeNames: `{{ await ${RootConfig.module.name}.resolveDocumentTypeNames(context.eval("id")) }}`,
|
|
734
|
+
},
|
|
735
|
+
},
|
|
736
|
+
{ name: 'unique-fields', options: { fields: 'code', scope: 'global' } },
|
|
640
737
|
{
|
|
641
738
|
name: 'status',
|
|
642
739
|
options: {
|
|
@@ -680,7 +777,7 @@ async function projectFactory() {
|
|
|
680
777
|
},
|
|
681
778
|
},
|
|
682
779
|
priority: 'primary',
|
|
683
|
-
type:
|
|
780
|
+
type: 'create',
|
|
684
781
|
scope: AXPEntityCommandScope$1.TypeLevel,
|
|
685
782
|
},
|
|
686
783
|
...entityDetailsCrudActions('projectId', { create: false }),
|
|
@@ -690,23 +787,48 @@ async function projectFactory() {
|
|
|
690
787
|
type: 'page-list',
|
|
691
788
|
},
|
|
692
789
|
},
|
|
693
|
-
],
|
|
694
|
-
pages: [
|
|
695
790
|
{
|
|
696
|
-
|
|
697
|
-
title: '@
|
|
698
|
-
|
|
699
|
-
|
|
791
|
+
entity: 'TaskManagement.Task',
|
|
792
|
+
title: '@task-management:task.plural-title',
|
|
793
|
+
columns: ['title', 'taskTypeId', 'statusId', 'dueDate', 'progress'],
|
|
794
|
+
conditions: [
|
|
795
|
+
{ name: 'subjectRef.type', operator: { type: 'equal' }, value: PM_PROJECT_ENTITY_SOURCE },
|
|
796
|
+
{ name: 'subjectRef.id', operator: { type: 'equal' }, value: '{{ context.eval("id") }}' },
|
|
797
|
+
],
|
|
798
|
+
excludeProperties: ['subjectRef'],
|
|
799
|
+
actions: [
|
|
800
|
+
{
|
|
801
|
+
title: '@project-management:projects.entities.project.related-entities.task-start.title',
|
|
802
|
+
icon: 'fa-light fa-play',
|
|
803
|
+
command: {
|
|
804
|
+
name: 'Entity:Create',
|
|
805
|
+
options: {
|
|
806
|
+
process: {
|
|
807
|
+
redirect: false,
|
|
808
|
+
canCreateNewOne: true,
|
|
809
|
+
data: {},
|
|
810
|
+
},
|
|
811
|
+
},
|
|
812
|
+
},
|
|
813
|
+
priority: 'primary',
|
|
814
|
+
type: 'create',
|
|
815
|
+
scope: AXPEntityCommandScope$1.TypeLevel,
|
|
816
|
+
items: `{{ await ${RootConfig.module.name}.AllowedTaskTypes(context.eval("projectType.id")) }}`,
|
|
817
|
+
},
|
|
818
|
+
...entityDetailsCrudActions('subjectRef.id', { create: false, edit: true, delete: true, view: true }),
|
|
819
|
+
],
|
|
820
|
+
layout: { type: 'page-list', position: 'after', order: 10 },
|
|
700
821
|
},
|
|
701
822
|
],
|
|
702
823
|
groups: [
|
|
703
824
|
{ id: 'basic-info', title: `@general:terms.interface.basic-info` },
|
|
704
|
-
{ id: '
|
|
825
|
+
{ id: 'organization-parties', title: `@project-management:projects.groups.organization-parties` },
|
|
826
|
+
{ id: 'schedule', title: `@project-management:projects.groups.schedule` },
|
|
705
827
|
],
|
|
706
828
|
properties: [
|
|
707
829
|
{
|
|
708
|
-
name: '
|
|
709
|
-
title: '@general:terms.common.
|
|
830
|
+
name: 'code',
|
|
831
|
+
title: '@general:terms.common.code',
|
|
710
832
|
groupId: 'basic-info',
|
|
711
833
|
options: {
|
|
712
834
|
sort: {
|
|
@@ -723,19 +845,44 @@ async function projectFactory() {
|
|
|
723
845
|
},
|
|
724
846
|
schema: {
|
|
725
847
|
dataType: 'string',
|
|
848
|
+
unique: { enabled: true },
|
|
726
849
|
interface: {
|
|
727
850
|
type: AXPWidgetsCatalog.text,
|
|
851
|
+
options: {
|
|
852
|
+
disabled: true,
|
|
853
|
+
},
|
|
728
854
|
},
|
|
729
855
|
},
|
|
730
|
-
validations: [
|
|
731
|
-
|
|
732
|
-
|
|
856
|
+
validations: [{ rule: 'required' }],
|
|
857
|
+
},
|
|
858
|
+
{
|
|
859
|
+
name: 'title',
|
|
860
|
+
title: '@general:terms.common.title',
|
|
861
|
+
groupId: 'basic-info',
|
|
862
|
+
options: {
|
|
863
|
+
sort: {
|
|
864
|
+
enabled: true,
|
|
733
865
|
},
|
|
734
|
-
|
|
866
|
+
filter: {
|
|
867
|
+
advance: {
|
|
868
|
+
enabled: true,
|
|
869
|
+
},
|
|
870
|
+
inline: {
|
|
871
|
+
enabled: true,
|
|
872
|
+
},
|
|
873
|
+
},
|
|
874
|
+
},
|
|
875
|
+
schema: {
|
|
876
|
+
dataType: 'string',
|
|
877
|
+
interface: {
|
|
878
|
+
type: AXPWidgetsCatalog.text,
|
|
879
|
+
},
|
|
880
|
+
},
|
|
881
|
+
validations: [{ rule: 'required' }],
|
|
735
882
|
},
|
|
736
883
|
{
|
|
737
884
|
name: 'projectTypeId',
|
|
738
|
-
title: '@
|
|
885
|
+
title: '@general:terms.common.type',
|
|
739
886
|
groupId: 'basic-info',
|
|
740
887
|
options: {
|
|
741
888
|
sort: {
|
|
@@ -761,16 +908,77 @@ async function projectFactory() {
|
|
|
761
908
|
expose: [
|
|
762
909
|
{ source: 'id', target: 'projectType.id' },
|
|
763
910
|
{ source: 'title', target: 'projectType.title' },
|
|
764
|
-
{ source: 'workflows', target: 'projectType.workflows' },
|
|
765
911
|
],
|
|
766
912
|
},
|
|
767
913
|
},
|
|
768
914
|
},
|
|
769
|
-
validations: [
|
|
770
|
-
|
|
771
|
-
|
|
915
|
+
validations: [{ rule: 'required' }],
|
|
916
|
+
},
|
|
917
|
+
{
|
|
918
|
+
name: 'customerId',
|
|
919
|
+
title: '@project-management:projects.terms.customerId',
|
|
920
|
+
groupId: 'organization-parties',
|
|
921
|
+
options: {
|
|
922
|
+
sort: { enabled: true },
|
|
923
|
+
filter: { advance: { enabled: true }, inline: { enabled: true } },
|
|
924
|
+
},
|
|
925
|
+
schema: {
|
|
926
|
+
dataType: 'string',
|
|
927
|
+
interface: {
|
|
928
|
+
type: AXPWidgetsList.Editors.LookupBox,
|
|
929
|
+
options: {
|
|
930
|
+
entity: 'CustomerManagement.Customer',
|
|
931
|
+
textField: 'party.title',
|
|
932
|
+
valueField: 'id',
|
|
933
|
+
look: 'select',
|
|
934
|
+
columns: ['party.code', 'party.title'],
|
|
935
|
+
expose: [
|
|
936
|
+
{ source: 'id', target: 'customer.id' },
|
|
937
|
+
{ source: 'party.title', target: 'customer.title' },
|
|
938
|
+
{ source: 'partyId', target: 'customer.partyId' },
|
|
939
|
+
],
|
|
940
|
+
},
|
|
772
941
|
},
|
|
773
|
-
|
|
942
|
+
},
|
|
943
|
+
},
|
|
944
|
+
{
|
|
945
|
+
name: 'partyLocationId',
|
|
946
|
+
title: '@project-management:projects.terms.location',
|
|
947
|
+
groupId: 'organization-parties',
|
|
948
|
+
options: {
|
|
949
|
+
sort: { enabled: true },
|
|
950
|
+
filter: { advance: { enabled: true }, inline: { enabled: false } },
|
|
951
|
+
},
|
|
952
|
+
schema: {
|
|
953
|
+
dataType: 'string',
|
|
954
|
+
interface: {
|
|
955
|
+
type: AXPWidgetsList.Editors.LookupBox,
|
|
956
|
+
options: {
|
|
957
|
+
entity: 'BusinessCore.PartyLocation',
|
|
958
|
+
textField: 'location.title',
|
|
959
|
+
valueField: 'id',
|
|
960
|
+
look: 'select',
|
|
961
|
+
columns: ['location.title', 'locationRole.title', 'location.street1', 'location.city.title'],
|
|
962
|
+
expose: [
|
|
963
|
+
{ source: 'id', target: 'partyLocation.id' },
|
|
964
|
+
{ source: 'location.title', target: 'partyLocation.title' },
|
|
965
|
+
{ source: 'location.street1', target: 'partyLocation.location.street1' },
|
|
966
|
+
{ source: 'location.city.title', target: 'partyLocation.location.city.title' },
|
|
967
|
+
],
|
|
968
|
+
filter: {
|
|
969
|
+
logic: 'and',
|
|
970
|
+
filters: [
|
|
971
|
+
{
|
|
972
|
+
field: 'partyId',
|
|
973
|
+
operator: { type: 'equal' },
|
|
974
|
+
value: '{{ context.eval("customer.partyId") }}',
|
|
975
|
+
},
|
|
976
|
+
],
|
|
977
|
+
},
|
|
978
|
+
triggers: [{ event: "{{ events.context('customerId') }}", action: `{{ widget.refresh() }}` }],
|
|
979
|
+
},
|
|
980
|
+
},
|
|
981
|
+
},
|
|
774
982
|
},
|
|
775
983
|
{
|
|
776
984
|
name: 'description',
|
|
@@ -797,11 +1005,43 @@ async function projectFactory() {
|
|
|
797
1005
|
},
|
|
798
1006
|
},
|
|
799
1007
|
{
|
|
800
|
-
name: '
|
|
801
|
-
title: '@project-management:projects.terms.
|
|
802
|
-
groupId: '
|
|
1008
|
+
name: 'startDate',
|
|
1009
|
+
title: '@project-management:projects.terms.startDate',
|
|
1010
|
+
groupId: 'schedule',
|
|
803
1011
|
options: {
|
|
804
|
-
sort: {
|
|
1012
|
+
sort: { enabled: true },
|
|
1013
|
+
filter: { advance: { enabled: true }, inline: { enabled: true } },
|
|
1014
|
+
},
|
|
1015
|
+
schema: {
|
|
1016
|
+
dataType: 'date',
|
|
1017
|
+
interface: {
|
|
1018
|
+
type: AXPWidgetsCatalog.dateTime,
|
|
1019
|
+
options: { showTime: false },
|
|
1020
|
+
},
|
|
1021
|
+
},
|
|
1022
|
+
},
|
|
1023
|
+
{
|
|
1024
|
+
name: 'endDate',
|
|
1025
|
+
title: '@project-management:projects.terms.endDate',
|
|
1026
|
+
groupId: 'schedule',
|
|
1027
|
+
options: {
|
|
1028
|
+
sort: { enabled: true },
|
|
1029
|
+
filter: { advance: { enabled: true }, inline: { enabled: true } },
|
|
1030
|
+
},
|
|
1031
|
+
schema: {
|
|
1032
|
+
dataType: 'date',
|
|
1033
|
+
interface: {
|
|
1034
|
+
type: AXPWidgetsCatalog.dateTime,
|
|
1035
|
+
options: { showTime: false },
|
|
1036
|
+
},
|
|
1037
|
+
},
|
|
1038
|
+
},
|
|
1039
|
+
{
|
|
1040
|
+
name: 'dueDate',
|
|
1041
|
+
title: '@project-management:projects.terms.duedate',
|
|
1042
|
+
groupId: 'schedule',
|
|
1043
|
+
options: {
|
|
1044
|
+
sort: {
|
|
805
1045
|
enabled: true,
|
|
806
1046
|
},
|
|
807
1047
|
filter: {
|
|
@@ -817,12 +1057,46 @@ async function projectFactory() {
|
|
|
817
1057
|
dataType: 'date',
|
|
818
1058
|
interface: {
|
|
819
1059
|
type: AXPWidgetsCatalog.dateTime,
|
|
1060
|
+
options: { showTime: false },
|
|
1061
|
+
},
|
|
1062
|
+
},
|
|
1063
|
+
},
|
|
1064
|
+
{
|
|
1065
|
+
name: 'actualStartDate',
|
|
1066
|
+
title: '@project-management:projects.terms.actualStartDate',
|
|
1067
|
+
groupId: 'schedule',
|
|
1068
|
+
options: {
|
|
1069
|
+
sort: { enabled: true },
|
|
1070
|
+
filter: { advance: { enabled: true }, inline: { enabled: false } },
|
|
1071
|
+
},
|
|
1072
|
+
schema: {
|
|
1073
|
+
dataType: 'date',
|
|
1074
|
+
interface: {
|
|
1075
|
+
type: AXPWidgetsCatalog.dateTime,
|
|
1076
|
+
options: { showTime: false },
|
|
1077
|
+
},
|
|
1078
|
+
},
|
|
1079
|
+
},
|
|
1080
|
+
{
|
|
1081
|
+
name: 'actualEndDate',
|
|
1082
|
+
title: '@project-management:projects.terms.actualEndDate',
|
|
1083
|
+
groupId: 'schedule',
|
|
1084
|
+
options: {
|
|
1085
|
+
sort: { enabled: true },
|
|
1086
|
+
filter: { advance: { enabled: true }, inline: { enabled: false } },
|
|
1087
|
+
},
|
|
1088
|
+
schema: {
|
|
1089
|
+
dataType: 'date',
|
|
1090
|
+
interface: {
|
|
1091
|
+
type: AXPWidgetsCatalog.dateTime,
|
|
1092
|
+
options: { showTime: false },
|
|
820
1093
|
},
|
|
821
1094
|
},
|
|
822
1095
|
},
|
|
823
1096
|
],
|
|
824
1097
|
columns: [
|
|
825
|
-
{ name: '
|
|
1098
|
+
{ name: 'code' },
|
|
1099
|
+
{ name: 'title' },
|
|
826
1100
|
{ name: 'dueDate' },
|
|
827
1101
|
{ name: 'description' },
|
|
828
1102
|
{ name: 'projectTypeId', options: { dataPath: 'projectType' } },
|
|
@@ -831,150 +1105,157 @@ async function projectFactory() {
|
|
|
831
1105
|
master: {
|
|
832
1106
|
create: {
|
|
833
1107
|
sections: [
|
|
834
|
-
{
|
|
835
|
-
|
|
836
|
-
},
|
|
1108
|
+
{ id: 'basic-info' },
|
|
1109
|
+
{ id: 'organization-parties' },
|
|
1110
|
+
{ id: 'schedule' },
|
|
837
1111
|
],
|
|
838
1112
|
properties: [
|
|
839
1113
|
{
|
|
840
|
-
name: '
|
|
841
|
-
layout: {
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
},
|
|
847
|
-
},
|
|
848
|
-
},
|
|
1114
|
+
name: 'code',
|
|
1115
|
+
layout: { positions: { lg: { colSpan: 2, order: 1 } } },
|
|
1116
|
+
},
|
|
1117
|
+
{
|
|
1118
|
+
name: 'title',
|
|
1119
|
+
layout: { positions: { lg: { colSpan: 6, order: 2 } } },
|
|
849
1120
|
},
|
|
850
1121
|
{
|
|
851
1122
|
name: 'projectTypeId',
|
|
852
|
-
layout: {
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
1123
|
+
layout: { positions: { lg: { colSpan: 4, order: 3 } } },
|
|
1124
|
+
},
|
|
1125
|
+
{
|
|
1126
|
+
name: 'description',
|
|
1127
|
+
layout: { positions: { lg: { colSpan: 12, order: 4 } } },
|
|
1128
|
+
},
|
|
1129
|
+
{
|
|
1130
|
+
name: 'customerId',
|
|
1131
|
+
layout: { positions: { lg: { colSpan: 6, order: 1 } } },
|
|
1132
|
+
},
|
|
1133
|
+
{
|
|
1134
|
+
name: 'partyLocationId',
|
|
1135
|
+
layout: { positions: { lg: { colSpan: 6, order: 2 } } },
|
|
1136
|
+
},
|
|
1137
|
+
{
|
|
1138
|
+
name: 'startDate',
|
|
1139
|
+
layout: { positions: { lg: { colSpan: 4, order: 1 } } },
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
name: 'endDate',
|
|
1143
|
+
layout: { positions: { lg: { colSpan: 4, order: 2 } } },
|
|
860
1144
|
},
|
|
861
1145
|
{
|
|
862
1146
|
name: 'dueDate',
|
|
863
|
-
layout: {
|
|
864
|
-
positions: {
|
|
865
|
-
lg: {
|
|
866
|
-
colSpan: 6,
|
|
867
|
-
order: 3,
|
|
868
|
-
},
|
|
869
|
-
},
|
|
870
|
-
},
|
|
1147
|
+
layout: { positions: { lg: { colSpan: 4, order: 3 } } },
|
|
871
1148
|
},
|
|
872
1149
|
{
|
|
873
|
-
name: '
|
|
874
|
-
layout: {
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
},
|
|
880
|
-
},
|
|
881
|
-
},
|
|
1150
|
+
name: 'actualStartDate',
|
|
1151
|
+
layout: { positions: { lg: { colSpan: 4, order: 4 } } },
|
|
1152
|
+
},
|
|
1153
|
+
{
|
|
1154
|
+
name: 'actualEndDate',
|
|
1155
|
+
layout: { positions: { lg: { colSpan: 4, order: 5 } } },
|
|
882
1156
|
},
|
|
883
1157
|
],
|
|
884
1158
|
},
|
|
885
1159
|
update: {
|
|
886
1160
|
sections: [
|
|
887
|
-
{
|
|
888
|
-
|
|
889
|
-
},
|
|
1161
|
+
{ id: 'basic-info' },
|
|
1162
|
+
{ id: 'organization-parties' },
|
|
1163
|
+
{ id: 'schedule' },
|
|
890
1164
|
],
|
|
891
1165
|
properties: [
|
|
892
1166
|
{
|
|
893
|
-
name: '
|
|
894
|
-
layout: {
|
|
895
|
-
positions: {
|
|
896
|
-
lg: {
|
|
897
|
-
colSpan: 6,
|
|
898
|
-
order: 1,
|
|
899
|
-
},
|
|
900
|
-
},
|
|
901
|
-
},
|
|
1167
|
+
name: 'code',
|
|
1168
|
+
layout: { positions: { lg: { colSpan: 2, order: 1 } } },
|
|
902
1169
|
},
|
|
903
1170
|
{
|
|
904
|
-
name: '
|
|
905
|
-
layout: {
|
|
906
|
-
positions: {
|
|
907
|
-
lg: {
|
|
908
|
-
colSpan: 6,
|
|
909
|
-
order: 2,
|
|
910
|
-
},
|
|
911
|
-
},
|
|
912
|
-
},
|
|
1171
|
+
name: 'title',
|
|
1172
|
+
layout: { positions: { lg: { colSpan: 6, order: 2 } } },
|
|
913
1173
|
},
|
|
914
1174
|
{
|
|
915
1175
|
name: 'description',
|
|
916
|
-
layout: {
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
1176
|
+
layout: { positions: { lg: { colSpan: 12, order: 3 } } },
|
|
1177
|
+
},
|
|
1178
|
+
{
|
|
1179
|
+
name: 'customerId',
|
|
1180
|
+
layout: { positions: { lg: { colSpan: 6, order: 1 } } },
|
|
1181
|
+
},
|
|
1182
|
+
{
|
|
1183
|
+
name: 'partyLocationId',
|
|
1184
|
+
layout: { positions: { lg: { colSpan: 6, order: 2 } } },
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
name: 'startDate',
|
|
1188
|
+
layout: { positions: { lg: { colSpan: 4, order: 1 } } },
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
name: 'endDate',
|
|
1192
|
+
layout: { positions: { lg: { colSpan: 4, order: 2 } } },
|
|
1193
|
+
},
|
|
1194
|
+
{
|
|
1195
|
+
name: 'dueDate',
|
|
1196
|
+
layout: { positions: { lg: { colSpan: 4, order: 3 } } },
|
|
1197
|
+
},
|
|
1198
|
+
{
|
|
1199
|
+
name: 'actualStartDate',
|
|
1200
|
+
layout: { positions: { lg: { colSpan: 4, order: 4 } } },
|
|
1201
|
+
},
|
|
1202
|
+
{
|
|
1203
|
+
name: 'actualEndDate',
|
|
1204
|
+
layout: { positions: { lg: { colSpan: 4, order: 5 } } },
|
|
924
1205
|
},
|
|
925
1206
|
],
|
|
926
1207
|
},
|
|
927
1208
|
single: {
|
|
928
|
-
title: '{{
|
|
1209
|
+
title: '{{title}}',
|
|
929
1210
|
sections: [
|
|
930
|
-
{
|
|
931
|
-
|
|
932
|
-
},
|
|
1211
|
+
{ id: 'basic-info' },
|
|
1212
|
+
{ id: 'organization-parties' },
|
|
1213
|
+
{ id: 'schedule' },
|
|
933
1214
|
],
|
|
934
1215
|
properties: [
|
|
935
1216
|
{
|
|
936
|
-
name: '
|
|
937
|
-
layout: {
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
},
|
|
943
|
-
},
|
|
944
|
-
},
|
|
1217
|
+
name: 'code',
|
|
1218
|
+
layout: { positions: { lg: { colSpan: 2, order: 1 } } },
|
|
1219
|
+
},
|
|
1220
|
+
{
|
|
1221
|
+
name: 'title',
|
|
1222
|
+
layout: { positions: { lg: { colSpan: 6, order: 2 } } },
|
|
945
1223
|
},
|
|
946
1224
|
{
|
|
947
1225
|
name: 'projectTypeId',
|
|
948
|
-
layout: {
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
1226
|
+
layout: { positions: { lg: { colSpan: 4, order: 3 } } },
|
|
1227
|
+
},
|
|
1228
|
+
{
|
|
1229
|
+
name: 'description',
|
|
1230
|
+
layout: { positions: { lg: { colSpan: 12, order: 4 } } },
|
|
1231
|
+
},
|
|
1232
|
+
{
|
|
1233
|
+
name: 'customerId',
|
|
1234
|
+
layout: { positions: { lg: { colSpan: 6, order: 1 } } },
|
|
1235
|
+
},
|
|
1236
|
+
{
|
|
1237
|
+
name: 'partyLocationId',
|
|
1238
|
+
layout: { positions: { lg: { colSpan: 6, order: 2 } } },
|
|
1239
|
+
},
|
|
1240
|
+
{
|
|
1241
|
+
name: 'startDate',
|
|
1242
|
+
layout: { positions: { lg: { colSpan: 4, order: 1 } } },
|
|
1243
|
+
},
|
|
1244
|
+
{
|
|
1245
|
+
name: 'endDate',
|
|
1246
|
+
layout: { positions: { lg: { colSpan: 4, order: 2 } } },
|
|
956
1247
|
},
|
|
957
1248
|
{
|
|
958
1249
|
name: 'dueDate',
|
|
959
|
-
layout: {
|
|
960
|
-
positions: {
|
|
961
|
-
lg: {
|
|
962
|
-
colSpan: 6,
|
|
963
|
-
order: 3,
|
|
964
|
-
},
|
|
965
|
-
},
|
|
966
|
-
},
|
|
1250
|
+
layout: { positions: { lg: { colSpan: 4, order: 3 } } },
|
|
967
1251
|
},
|
|
968
1252
|
{
|
|
969
|
-
name: '
|
|
970
|
-
layout: {
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
},
|
|
976
|
-
},
|
|
977
|
-
},
|
|
1253
|
+
name: 'actualStartDate',
|
|
1254
|
+
layout: { positions: { lg: { colSpan: 4, order: 4 } } },
|
|
1255
|
+
},
|
|
1256
|
+
{
|
|
1257
|
+
name: 'actualEndDate',
|
|
1258
|
+
layout: { positions: { lg: { colSpan: 4, order: 5 } } },
|
|
978
1259
|
},
|
|
979
1260
|
],
|
|
980
1261
|
actions: [...entityMasterRecordActions()],
|
|
@@ -983,7 +1264,7 @@ async function projectFactory() {
|
|
|
983
1264
|
actions: [...entityMasterCrudActions()],
|
|
984
1265
|
views: [
|
|
985
1266
|
createAllQueryView({
|
|
986
|
-
sorts: [{ name: '
|
|
1267
|
+
sorts: [{ name: 'title', dir: 'asc' }],
|
|
987
1268
|
}),
|
|
988
1269
|
],
|
|
989
1270
|
},
|
|
@@ -1031,12 +1312,12 @@ async function projectMemeberFactory() {
|
|
|
1031
1312
|
type: AXPWidgetsList.Editors.LookupBox,
|
|
1032
1313
|
options: {
|
|
1033
1314
|
entity: `${RootConfig.module.name}.${RootConfig.entities.project.name}`,
|
|
1034
|
-
textField: '
|
|
1315
|
+
textField: 'title',
|
|
1035
1316
|
valueField: 'id',
|
|
1036
1317
|
look: 'select',
|
|
1037
1318
|
expose: [
|
|
1038
1319
|
{ source: 'id', target: 'project.id' },
|
|
1039
|
-
{ source: '
|
|
1320
|
+
{ source: 'title', target: 'project.displayName' },
|
|
1040
1321
|
{ source: 'projectTypeId', target: 'project.projectTypeId' },
|
|
1041
1322
|
],
|
|
1042
1323
|
},
|
|
@@ -1170,7 +1451,6 @@ var index$2 = /*#__PURE__*/Object.freeze({
|
|
|
1170
1451
|
});
|
|
1171
1452
|
|
|
1172
1453
|
async function projectTypeFactory() {
|
|
1173
|
-
const i18n = RootConfig.config.i18n;
|
|
1174
1454
|
const entityDef = {
|
|
1175
1455
|
module: RootConfig.module.name,
|
|
1176
1456
|
name: RootConfig.entities.projectType.name,
|
|
@@ -1179,6 +1459,19 @@ async function projectTypeFactory() {
|
|
|
1179
1459
|
plugins: [
|
|
1180
1460
|
{
|
|
1181
1461
|
name: 'meta-data-builder',
|
|
1462
|
+
options: {
|
|
1463
|
+
display: {
|
|
1464
|
+
section: { enabled: false },
|
|
1465
|
+
page: { enabled: true },
|
|
1466
|
+
},
|
|
1467
|
+
},
|
|
1468
|
+
},
|
|
1469
|
+
{
|
|
1470
|
+
name: 'category',
|
|
1471
|
+
options: {
|
|
1472
|
+
appearance: { icon: true, color: true },
|
|
1473
|
+
metaData: { enabled: true },
|
|
1474
|
+
},
|
|
1182
1475
|
},
|
|
1183
1476
|
],
|
|
1184
1477
|
formats: {
|
|
@@ -1195,19 +1488,11 @@ async function projectTypeFactory() {
|
|
|
1195
1488
|
title: RootConfig.entities.projectTypeRoleType.titlePlural,
|
|
1196
1489
|
columns: ['title', 'description'],
|
|
1197
1490
|
conditions: [{ name: 'projectTypeId', operator: { type: 'equal' }, value: '{{ context.eval("id") }}' }],
|
|
1198
|
-
actions: [...entityDetailsCrudActions('projectTypeId')]
|
|
1199
|
-
// {
|
|
1200
|
-
// title: '@general:actions.create.title',
|
|
1201
|
-
// command: { name: 'Entity:Create', options: { process: { redirect: false, canCreateNewOne: true } } },
|
|
1202
|
-
// priority: 'primary',
|
|
1203
|
-
// type: 'create',
|
|
1204
|
-
// scope: AXPEntityCommandScope.TypeLevel,
|
|
1205
|
-
// },
|
|
1206
|
-
,
|
|
1491
|
+
actions: [...entityDetailsCrudActions('projectTypeId')],
|
|
1207
1492
|
layout: {
|
|
1208
1493
|
type: 'page-list',
|
|
1209
1494
|
},
|
|
1210
|
-
}
|
|
1495
|
+
},
|
|
1211
1496
|
],
|
|
1212
1497
|
groups: [
|
|
1213
1498
|
{
|
|
@@ -1246,8 +1531,8 @@ async function projectTypeFactory() {
|
|
|
1246
1531
|
],
|
|
1247
1532
|
},
|
|
1248
1533
|
{
|
|
1249
|
-
name: '
|
|
1250
|
-
title: '@
|
|
1534
|
+
name: 'description',
|
|
1535
|
+
title: '@general:terms.common.description',
|
|
1251
1536
|
groupId: 'section',
|
|
1252
1537
|
options: {
|
|
1253
1538
|
sort: {
|
|
@@ -1263,58 +1548,63 @@ async function projectTypeFactory() {
|
|
|
1263
1548
|
},
|
|
1264
1549
|
},
|
|
1265
1550
|
schema: {
|
|
1266
|
-
dataType: '
|
|
1551
|
+
dataType: 'string',
|
|
1552
|
+
interface: {
|
|
1553
|
+
type: AXPWidgetsCatalog.largeText,
|
|
1554
|
+
},
|
|
1555
|
+
},
|
|
1556
|
+
},
|
|
1557
|
+
{
|
|
1558
|
+
name: 'allowedTaskTypeIds',
|
|
1559
|
+
title: '@project-management:projects.project-type-allowed-task-types.plural',
|
|
1560
|
+
groupId: 'section',
|
|
1561
|
+
schema: {
|
|
1562
|
+
dataType: 'object',
|
|
1267
1563
|
interface: {
|
|
1268
1564
|
type: AXPWidgetsCatalog.lookup,
|
|
1269
1565
|
options: {
|
|
1270
|
-
entity: '
|
|
1566
|
+
entity: 'TaskManagement.TaskType',
|
|
1567
|
+
textField: 'title',
|
|
1568
|
+
valueField: 'id',
|
|
1569
|
+
columns: ['name', 'title'],
|
|
1271
1570
|
multiple: true,
|
|
1272
1571
|
expose: [
|
|
1273
|
-
{ source: '
|
|
1274
|
-
{ source: 'title', target: '
|
|
1572
|
+
{ source: 'id', target: 'allowedTaskTypes.{id}' },
|
|
1573
|
+
{ source: 'title', target: 'allowedTaskTypes.{title}' },
|
|
1574
|
+
{ source: 'name', target: 'allowedTaskTypes.{name}' },
|
|
1275
1575
|
],
|
|
1276
1576
|
},
|
|
1277
1577
|
},
|
|
1278
1578
|
},
|
|
1279
|
-
},
|
|
1280
|
-
{
|
|
1281
|
-
name: 'description',
|
|
1282
|
-
title: '@general:terms.common.description',
|
|
1283
|
-
groupId: 'section',
|
|
1284
1579
|
options: {
|
|
1285
|
-
sort: {
|
|
1286
|
-
|
|
1287
|
-
},
|
|
1288
|
-
filter: {
|
|
1289
|
-
advance: {
|
|
1290
|
-
enabled: true,
|
|
1291
|
-
},
|
|
1292
|
-
inline: {
|
|
1293
|
-
enabled: true,
|
|
1294
|
-
},
|
|
1295
|
-
},
|
|
1580
|
+
sort: { enabled: false },
|
|
1581
|
+
filter: { advance: { enabled: true }, inline: { enabled: false } },
|
|
1296
1582
|
},
|
|
1583
|
+
},
|
|
1584
|
+
{
|
|
1585
|
+
name: 'allowedTaskTypes',
|
|
1586
|
+
title: '@project-management:projects.project-type-allowed-task-types.plural',
|
|
1297
1587
|
schema: {
|
|
1298
|
-
dataType: '
|
|
1588
|
+
dataType: 'array',
|
|
1299
1589
|
interface: {
|
|
1300
|
-
type: AXPWidgetsCatalog.
|
|
1590
|
+
type: AXPWidgetsCatalog.text,
|
|
1301
1591
|
},
|
|
1302
|
-
}
|
|
1592
|
+
},
|
|
1593
|
+
options: {
|
|
1594
|
+
sort: { enabled: false },
|
|
1595
|
+
filter: { advance: { enabled: false }, inline: { enabled: false } },
|
|
1596
|
+
},
|
|
1303
1597
|
},
|
|
1304
1598
|
],
|
|
1305
1599
|
columns: [
|
|
1306
1600
|
{ name: 'title' },
|
|
1307
|
-
{ name: 'taskTypeIds', options: { dataPath: 'workflows' } },
|
|
1308
1601
|
{ name: 'description' },
|
|
1602
|
+
{ name: 'allowedTaskTypeIds', options: { dataPath: 'allowedTaskTypes' } },
|
|
1309
1603
|
],
|
|
1310
1604
|
interfaces: {
|
|
1311
1605
|
master: {
|
|
1312
1606
|
create: {
|
|
1313
|
-
sections: [
|
|
1314
|
-
{
|
|
1315
|
-
id: 'section',
|
|
1316
|
-
},
|
|
1317
|
-
],
|
|
1607
|
+
sections: [{ id: 'section' }],
|
|
1318
1608
|
properties: [
|
|
1319
1609
|
{
|
|
1320
1610
|
name: 'title',
|
|
@@ -1328,23 +1618,22 @@ async function projectTypeFactory() {
|
|
|
1328
1618
|
},
|
|
1329
1619
|
},
|
|
1330
1620
|
{
|
|
1331
|
-
name: '
|
|
1332
|
-
dataPath: 'taskTypes',
|
|
1621
|
+
name: 'description',
|
|
1333
1622
|
layout: {
|
|
1334
1623
|
positions: {
|
|
1335
1624
|
lg: {
|
|
1336
|
-
colSpan:
|
|
1625
|
+
colSpan: 12,
|
|
1337
1626
|
order: 2,
|
|
1338
1627
|
},
|
|
1339
1628
|
},
|
|
1340
1629
|
},
|
|
1341
1630
|
},
|
|
1342
1631
|
{
|
|
1343
|
-
name: '
|
|
1632
|
+
name: 'allowedTaskTypeIds',
|
|
1344
1633
|
layout: {
|
|
1345
1634
|
positions: {
|
|
1346
1635
|
lg: {
|
|
1347
|
-
colSpan:
|
|
1636
|
+
colSpan: 12,
|
|
1348
1637
|
order: 3,
|
|
1349
1638
|
},
|
|
1350
1639
|
},
|
|
@@ -1353,11 +1642,7 @@ async function projectTypeFactory() {
|
|
|
1353
1642
|
],
|
|
1354
1643
|
},
|
|
1355
1644
|
update: {
|
|
1356
|
-
sections: [
|
|
1357
|
-
{
|
|
1358
|
-
id: 'section',
|
|
1359
|
-
},
|
|
1360
|
-
],
|
|
1645
|
+
sections: [{ id: 'section' }],
|
|
1361
1646
|
properties: [
|
|
1362
1647
|
{
|
|
1363
1648
|
name: 'title',
|
|
@@ -1371,23 +1656,22 @@ async function projectTypeFactory() {
|
|
|
1371
1656
|
},
|
|
1372
1657
|
},
|
|
1373
1658
|
{
|
|
1374
|
-
name: '
|
|
1375
|
-
dataPath: 'taskTypes',
|
|
1659
|
+
name: 'description',
|
|
1376
1660
|
layout: {
|
|
1377
1661
|
positions: {
|
|
1378
1662
|
lg: {
|
|
1379
|
-
colSpan:
|
|
1663
|
+
colSpan: 12,
|
|
1380
1664
|
order: 2,
|
|
1381
1665
|
},
|
|
1382
1666
|
},
|
|
1383
1667
|
},
|
|
1384
1668
|
},
|
|
1385
1669
|
{
|
|
1386
|
-
name: '
|
|
1670
|
+
name: 'allowedTaskTypeIds',
|
|
1387
1671
|
layout: {
|
|
1388
1672
|
positions: {
|
|
1389
1673
|
lg: {
|
|
1390
|
-
colSpan:
|
|
1674
|
+
colSpan: 12,
|
|
1391
1675
|
order: 3,
|
|
1392
1676
|
},
|
|
1393
1677
|
},
|
|
@@ -1422,23 +1706,22 @@ async function projectTypeFactory() {
|
|
|
1422
1706
|
},
|
|
1423
1707
|
},
|
|
1424
1708
|
{
|
|
1425
|
-
name: '
|
|
1426
|
-
dataPath: 'taskTypes',
|
|
1709
|
+
name: 'description',
|
|
1427
1710
|
layout: {
|
|
1428
1711
|
positions: {
|
|
1429
1712
|
lg: {
|
|
1430
|
-
colSpan:
|
|
1713
|
+
colSpan: 12,
|
|
1431
1714
|
order: 2,
|
|
1432
1715
|
},
|
|
1433
1716
|
},
|
|
1434
1717
|
},
|
|
1435
1718
|
},
|
|
1436
1719
|
{
|
|
1437
|
-
name: '
|
|
1720
|
+
name: 'allowedTaskTypeIds',
|
|
1438
1721
|
layout: {
|
|
1439
1722
|
positions: {
|
|
1440
1723
|
lg: {
|
|
1441
|
-
colSpan:
|
|
1724
|
+
colSpan: 12,
|
|
1442
1725
|
order: 3,
|
|
1443
1726
|
},
|
|
1444
1727
|
},
|