@acorex-platform/module-human-capital-management-client 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-module-human-capital-management-client-acorex-platform-module-human-capital-management-client-DlWna0Lz.mjs +2297 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-acorex-platform-module-human-capital-management-client-DlWna0Lz.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-approve-leave-request.command-Om_S0k9L.mjs +58 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-approve-leave-request.command-Om_S0k9L.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-assign-position-assignment.command-2iHIogn6.mjs +111 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-assign-position-assignment.command-2iHIogn6.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-cancel-leave-request.command-DGriRFiQ.mjs +58 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-cancel-leave-request.command-DGriRFiQ.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-contracts.mjs +193 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-edit-personal-info.command-DK947cW5.mjs +241 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-edit-personal-info.command-DK947cW5.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-edit-signature.command-CKrcMxqr.mjs +76 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-edit-signature.command-CKrcMxqr.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-profile-documents-panel.component-DrRuKQ6Q.mjs +87 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-profile-documents-panel.component-DrRuKQ6Q.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-profile-documents-panel.component.provider-DPH0YiDP.mjs +23 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-profile-documents-panel.component.provider-DPH0YiDP.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-reject-leave-request.command-O9gipd8g.mjs +61 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-reject-leave-request.command-O9gipd8g.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-revoke-position-assignment.command-DmVlDQ8_.mjs +108 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-revoke-position-assignment.command-DmVlDQ8_.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-start-leave-request-flow.command-BcyCI_vr.mjs +248 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-start-leave-request-flow.command-BcyCI_vr.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-start-lifecycle-event-flow.command-Cp_7ZyWU.mjs +250 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client-start-lifecycle-event-flow.command-Cp_7ZyWU.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client.mjs +2 -0
- package/fesm2022/acorex-platform-module-human-capital-management-client.mjs.map +1 -0
- package/package.json +28 -0
- package/types/acorex-platform-module-human-capital-management-client-contracts.d.ts +331 -0
- package/types/acorex-platform-module-human-capital-management-client.d.ts +114 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { AXPSystemStatuses } from '@acorex-platform/framework-shared/core';
|
|
2
|
+
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { inject, Injectable } from '@angular/core';
|
|
5
|
+
import { RootConfig } from '@acorex-platform/module-human-capital-management-client/contracts';
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
/**
|
|
9
|
+
* Cancel Leave Request Command
|
|
10
|
+
* Updates the leave request status to Cancelled
|
|
11
|
+
*/
|
|
12
|
+
class CancelLeaveRequestCommand {
|
|
13
|
+
constructor() {
|
|
14
|
+
//#region ---- Services ----
|
|
15
|
+
this.entityService = inject(AXPEntityService);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region ---- Command Implementation ----
|
|
19
|
+
async execute(input) {
|
|
20
|
+
try {
|
|
21
|
+
const dataAccessor = this.entityService
|
|
22
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.leaveRequest.name)
|
|
23
|
+
.data();
|
|
24
|
+
// Update the leave request status to Cancelled
|
|
25
|
+
const updateData = {
|
|
26
|
+
statusId: AXPSystemStatuses.Cancelled.name,
|
|
27
|
+
};
|
|
28
|
+
// Add reason/note if provided (these fields might not exist in entity model)
|
|
29
|
+
if (input.reason) {
|
|
30
|
+
updateData.reason = input.reason;
|
|
31
|
+
}
|
|
32
|
+
if (input.note) {
|
|
33
|
+
updateData.note = input.note;
|
|
34
|
+
}
|
|
35
|
+
await dataAccessor.update(input.id, updateData);
|
|
36
|
+
return { success: true, kind: 'object', data: undefined,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error('[CancelLeaveRequestCommand] Error:', error);
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
message: {
|
|
44
|
+
text: error.message || 'Failed to cancel leave request',
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: CancelLeaveRequestCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
50
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: CancelLeaveRequestCommand, providedIn: 'root' }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: CancelLeaveRequestCommand, decorators: [{
|
|
53
|
+
type: Injectable,
|
|
54
|
+
args: [{ providedIn: 'root' }]
|
|
55
|
+
}] });
|
|
56
|
+
|
|
57
|
+
export { CancelLeaveRequestCommand };
|
|
58
|
+
//# sourceMappingURL=acorex-platform-module-human-capital-management-client-cancel-leave-request.command-DGriRFiQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-human-capital-management-client-cancel-leave-request.command-DGriRFiQ.mjs","sources":["../../../../libs/modules/human-capital-management/client/src/lib/features/leave-request/commands/cancel-leave-request.command.ts"],"sourcesContent":["\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult, AXPSystemStatuses } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-human-capital-management-client/contracts';\n\n//#region ---- Types ----\n\nexport interface CancelLeaveRequestInput {\n id: string;\n reason?: string;\n note?: string;\n}\n\n//#endregion\n\n/**\n * Cancel Leave Request Command\n * Updates the leave request status to Cancelled\n */\n@Injectable({ providedIn: 'root' })\nexport class CancelLeaveRequestCommand implements AXPCommand<CancelLeaveRequestInput, void> {\n //#region ---- Services ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: CancelLeaveRequestInput): AXPCommandExecuteResultPromise<void> {\n try {\n const dataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.leaveRequest.name)\n .data<string, any>();\n\n // Update the leave request status to Cancelled\n const updateData: any = {\n statusId: AXPSystemStatuses.Cancelled.name,\n };\n\n // Add reason/note if provided (these fields might not exist in entity model)\n if (input.reason) {\n updateData.reason = input.reason;\n }\n if (input.note) {\n updateData.note = input.note;\n }\n\n await dataAccessor.update(input.id, updateData);\n\n return { success: true, kind: 'object', data: undefined,\n };\n } catch (error: any) {\n console.error('[CancelLeaveRequestCommand] Error:', error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to cancel leave request',\n },\n };\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAiBA;AAEA;;;AAGG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAyC1D,IAAA;;;IAnCC,MAAM,OAAO,CAAC,KAA8B,EAAA;AAC1C,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,iBAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI;AACxE,iBAAA,IAAI,EAAe;;AAGtB,YAAA,MAAM,UAAU,GAAQ;AACtB,gBAAA,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,IAAI;aAC3C;;AAGD,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,gBAAA,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;YAClC;AACA,YAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,gBAAA,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;YAC9B;YAEA,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC;YAE/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS;aACtD;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;YAC1D,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,gCAAgC;AACxD,iBAAA;aACF;QACH;IACF;8GAzCW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';
|
|
2
|
+
|
|
3
|
+
/** HR catalog scope for questionnaires, question bank items, and workflow definitions. */
|
|
4
|
+
const HCM_CATALOG_SCOPE_HR = 'human-capital-management.hr';
|
|
5
|
+
|
|
6
|
+
const AXPHumanCapitalManagementCommandKeys = {
|
|
7
|
+
PositionAssignment: {
|
|
8
|
+
Assign: 'HumanCapitalManagement.PositionAssignment:Assign',
|
|
9
|
+
Revoke: 'HumanCapitalManagement.PositionAssignment:Revoke',
|
|
10
|
+
},
|
|
11
|
+
LifecycleEvent: {
|
|
12
|
+
StartFlow: 'HumanCapitalManagement.LifecycleEvent:StartFlow',
|
|
13
|
+
},
|
|
14
|
+
LeaveRequest: {
|
|
15
|
+
StartFlow: 'HumanCapitalManagement.LeaveRequest:StartFlow',
|
|
16
|
+
},
|
|
17
|
+
Profile: {
|
|
18
|
+
EditPersonalInfo: 'HumanCapitalManagement.Profile:EditPersonalInfo',
|
|
19
|
+
EditSignature: 'HumanCapitalManagement.Profile:EditSignature',
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const AXPHumanCapitalManagementFeatureKeys = {
|
|
24
|
+
EmployeeManagement: 'HumanCapitalManagement:Feature:Employee.Management',
|
|
25
|
+
LeaveManagement: 'HumanCapitalManagement:Feature:Leave.Management',
|
|
26
|
+
LifecycleManagement: 'HumanCapitalManagement:Feature:Lifecycle.Management',
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//#region ---- Leave request open statuses ----
|
|
30
|
+
/** Statuses that block starting another run for the same employee and leave type. */
|
|
31
|
+
const AXMLeaveRequestOpenStatusIds = [AXPSystemStatusType.WaitingApproval];
|
|
32
|
+
//#endregion
|
|
33
|
+
|
|
34
|
+
//#region ---- Lifecycle event open statuses ----
|
|
35
|
+
/** Statuses that block starting another run for the same employee and event type. */
|
|
36
|
+
const AXMLifecycleEventOpenStatusIds = [
|
|
37
|
+
AXPSystemStatusType.InProgress,
|
|
38
|
+
AXPSystemStatusType.WaitingSignOff,
|
|
39
|
+
];
|
|
40
|
+
//#endregion
|
|
41
|
+
|
|
42
|
+
const AXPHumanCapitalManagementMenuKeys = {
|
|
43
|
+
Root: 'HumanCapitalManagement:Menu',
|
|
44
|
+
Employees: 'HumanCapitalManagement:Menu:Employees',
|
|
45
|
+
EmploymentTypes: 'HumanCapitalManagement:Menu:EmploymentTypes',
|
|
46
|
+
Divider1: 'HumanCapitalManagement:Menu:Divider1',
|
|
47
|
+
PositionAssignments: 'HumanCapitalManagement:Menu:PositionAssignments',
|
|
48
|
+
Divider2: 'HumanCapitalManagement:Menu:Divider2',
|
|
49
|
+
LeaveTypes: 'HumanCapitalManagement:Menu:LeaveTypes',
|
|
50
|
+
LeaveRequests: 'HumanCapitalManagement:Menu:LeaveRequests',
|
|
51
|
+
LeaveRequestBoard: 'HumanCapitalManagement:Menu:LeaveRequestBoard',
|
|
52
|
+
LifecycleEventTypes: 'HumanCapitalManagement:Menu:LifecycleEventTypes',
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* People & Organization capabilities used by this module.
|
|
57
|
+
* Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).
|
|
58
|
+
*/
|
|
59
|
+
const AXPPeopleOrganizationPermissionKeys = {
|
|
60
|
+
Access: 'PeopleOrganization:Permission:Access',
|
|
61
|
+
ViewOrganization: 'PeopleOrganization:Permission:ViewOrganization',
|
|
62
|
+
MaintainOrganization: 'PeopleOrganization:Permission:MaintainOrganization',
|
|
63
|
+
MaintainTeams: 'PeopleOrganization:Permission:MaintainTeams',
|
|
64
|
+
MaintainEmployees: 'PeopleOrganization:Permission:MaintainEmployees',
|
|
65
|
+
ManageEmployeeActions: 'PeopleOrganization:Permission:ManageEmployeeActions',
|
|
66
|
+
MaintainPersons: 'PeopleOrganization:Permission:MaintainPersons',
|
|
67
|
+
MaintainAttendance: 'PeopleOrganization:Permission:MaintainAttendance',
|
|
68
|
+
ManageAttendanceActions: 'PeopleOrganization:Permission:ManageAttendanceActions',
|
|
69
|
+
DesignJobs: 'PeopleOrganization:Permission:DesignJobs',
|
|
70
|
+
Setup: 'PeopleOrganization:Permission:Setup',
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
//#region ---- Position assignment status names ----
|
|
74
|
+
const AXM_POSITION_ASSIGNMENT_STATUS = {
|
|
75
|
+
active: AXPSystemStatusType.Active,
|
|
76
|
+
scheduled: 'scheduled',
|
|
77
|
+
expired: 'expired',
|
|
78
|
+
revoked: 'revoked',
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Statuses that still occupy the employee / manager seat for overlap and revoke resolution.
|
|
82
|
+
* Keep in sync with position-assignment duplicate-seat validation (mock and future API rules).
|
|
83
|
+
*/
|
|
84
|
+
const AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS = [
|
|
85
|
+
AXM_POSITION_ASSIGNMENT_STATUS.active,
|
|
86
|
+
AXM_POSITION_ASSIGNMENT_STATUS.scheduled,
|
|
87
|
+
];
|
|
88
|
+
//#endregion
|
|
89
|
+
|
|
90
|
+
//#region ---- Profile document drive context ----
|
|
91
|
+
//#endregion
|
|
92
|
+
|
|
93
|
+
//#region ---- Human capital management runtime keys ----
|
|
94
|
+
const AXPHumanCapitalManagementQueryKeys = {
|
|
95
|
+
Profile: {
|
|
96
|
+
GetMyDocumentDriveContext: 'HumanCapitalManagement:Profile:GetMyDocumentDriveContext',
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
//#endregion
|
|
100
|
+
|
|
101
|
+
const config = {
|
|
102
|
+
i18n: 'human-capital-management',
|
|
103
|
+
module: 'HumanCapitalManagement',
|
|
104
|
+
};
|
|
105
|
+
const RootConfig = {
|
|
106
|
+
config,
|
|
107
|
+
module: {
|
|
108
|
+
route: 'human-capital-management',
|
|
109
|
+
name: config.module,
|
|
110
|
+
title: '@human-capital-management:module.title',
|
|
111
|
+
icon: 'fa-light fa-users',
|
|
112
|
+
},
|
|
113
|
+
entities: {
|
|
114
|
+
employee: {
|
|
115
|
+
name: 'Employee',
|
|
116
|
+
source: `${config.module}.Employee`,
|
|
117
|
+
title: '@human-capital-management:employees.entities.employee.title',
|
|
118
|
+
titlePlural: '@human-capital-management:employees.entities.employee.plural',
|
|
119
|
+
icon: 'fa-light fa-address-card',
|
|
120
|
+
},
|
|
121
|
+
employmentType: {
|
|
122
|
+
name: 'EmploymentType',
|
|
123
|
+
source: `${config.module}.EmploymentType`,
|
|
124
|
+
title: '@human-capital-management:employment-types.entities.employment-type.title',
|
|
125
|
+
titlePlural: '@human-capital-management:employment-types.entities.employment-type.plural',
|
|
126
|
+
icon: 'fa-light fa-file-signature',
|
|
127
|
+
},
|
|
128
|
+
positionAssignment: {
|
|
129
|
+
name: 'PositionAssignment',
|
|
130
|
+
source: `${config.module}.PositionAssignment`,
|
|
131
|
+
title: '@human-capital-management:position-assignments.entities.position-assignment.title',
|
|
132
|
+
titlePlural: '@human-capital-management:position-assignments.entities.position-assignment.plural',
|
|
133
|
+
icon: 'fa-light fa-user-tie-hair',
|
|
134
|
+
},
|
|
135
|
+
leaveType: {
|
|
136
|
+
name: 'LeaveType',
|
|
137
|
+
source: `${config.module}.LeaveType`,
|
|
138
|
+
title: '@human-capital-management:leave-types.entities.leave-type.title',
|
|
139
|
+
titlePlural: '@human-capital-management:leave-types.entities.leave-type.plural',
|
|
140
|
+
icon: 'fa-light fa-calendar-days',
|
|
141
|
+
},
|
|
142
|
+
leaveRequest: {
|
|
143
|
+
name: 'LeaveRequest',
|
|
144
|
+
source: `${config.module}.LeaveRequest`,
|
|
145
|
+
title: '@human-capital-management:leave-requests.entities.leave-request.title',
|
|
146
|
+
titlePlural: '@human-capital-management:leave-requests.entities.leave-request.plural',
|
|
147
|
+
icon: 'fa-light fa-plane-departure',
|
|
148
|
+
},
|
|
149
|
+
lifecycleEventType: {
|
|
150
|
+
name: 'LifecycleEventType',
|
|
151
|
+
source: `${config.module}.LifecycleEventType`,
|
|
152
|
+
title: '@human-capital-management:lifecycle-event-types.entities.lifecycle-event-type.title',
|
|
153
|
+
titlePlural: '@human-capital-management:lifecycle-event-types.entities.lifecycle-event-type.plural',
|
|
154
|
+
icon: 'fa-light fa-diagram-next',
|
|
155
|
+
},
|
|
156
|
+
lifecycleEvent: {
|
|
157
|
+
name: 'LifecycleEvent',
|
|
158
|
+
source: `${config.module}.LifecycleEvent`,
|
|
159
|
+
title: '@human-capital-management:lifecycle-events.entities.lifecycle-event.title',
|
|
160
|
+
titlePlural: '@human-capital-management:lifecycle-events.entities.lifecycle-event.plural',
|
|
161
|
+
icon: 'fa-light fa-clipboard-list-check',
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
pages: {
|
|
165
|
+
appointmentBoard: {
|
|
166
|
+
path: 'Boards/ResourceAppointment',
|
|
167
|
+
title: '@human-capital-management:leave-requests.menus.appointment-board.title',
|
|
168
|
+
icon: 'fa-light fa-calendar-lines',
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
queries: {
|
|
172
|
+
dashboard: {
|
|
173
|
+
employeesKpi: `${config.module}:Dashboard:EmployeesKpi`,
|
|
174
|
+
},
|
|
175
|
+
reports: {
|
|
176
|
+
getHeadcountByDepartment: `${config.module}:Reports:GetHeadcountByDepartment`,
|
|
177
|
+
getLeaveUsageByType: `${config.module}:Reports:GetLeaveUsageByType`,
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
//#endregion
|
|
183
|
+
|
|
184
|
+
//#endregion
|
|
185
|
+
|
|
186
|
+
//#region ---- Contracts barrel ----
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Generated bundle index. Do not edit.
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
export { AXMLeaveRequestOpenStatusIds, AXMLifecycleEventOpenStatusIds, AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS, AXM_POSITION_ASSIGNMENT_STATUS, AXPHumanCapitalManagementCommandKeys, AXPHumanCapitalManagementFeatureKeys, AXPHumanCapitalManagementMenuKeys, AXPHumanCapitalManagementQueryKeys, AXPPeopleOrganizationPermissionKeys, HCM_CATALOG_SCOPE_HR, RootConfig };
|
|
193
|
+
//# sourceMappingURL=acorex-platform-module-human-capital-management-client-contracts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-human-capital-management-client-contracts.mjs","sources":["../../../../libs/modules/human-capital-management/contracts/src/catalog-scope.keys.ts","../../../../libs/modules/human-capital-management/contracts/src/commands.keys.ts","../../../../libs/modules/human-capital-management/contracts/src/features.keys.ts","../../../../libs/modules/human-capital-management/contracts/src/leave-request-status.constants.ts","../../../../libs/modules/human-capital-management/contracts/src/lifecycle-event-status.constants.ts","../../../../libs/modules/human-capital-management/contracts/src/menu.keys.ts","../../../../libs/modules/human-capital-management/contracts/src/permission.keys.ts","../../../../libs/modules/human-capital-management/contracts/src/position-assignment.status.ts","../../../../libs/modules/human-capital-management/contracts/src/profile-document-drive.types.ts","../../../../libs/modules/human-capital-management/contracts/src/runtime.keys.ts","../../../../libs/modules/human-capital-management/contracts/src/root-config.ts","../../../../libs/modules/human-capital-management/contracts/src/entities/lifecycle-event/lifecycle-event.types.ts","../../../../libs/modules/human-capital-management/contracts/src/entities/lifecycle-event-type/lifecycle-event-type.types.ts","../../../../libs/modules/human-capital-management/contracts/src/index.ts","../../../../libs/modules/human-capital-management/contracts/src/acorex-platform-module-human-capital-management-client-contracts.ts"],"sourcesContent":["/** HR catalog scope for questionnaires, question bank items, and workflow definitions. */\nexport const HCM_CATALOG_SCOPE_HR = 'human-capital-management.hr';\n","export const AXPHumanCapitalManagementCommandKeys = {\n PositionAssignment: {\n Assign: 'HumanCapitalManagement.PositionAssignment:Assign',\n Revoke: 'HumanCapitalManagement.PositionAssignment:Revoke',\n },\n LifecycleEvent: {\n StartFlow: 'HumanCapitalManagement.LifecycleEvent:StartFlow',\n },\n LeaveRequest: {\n StartFlow: 'HumanCapitalManagement.LeaveRequest:StartFlow',\n },\n Profile: {\n EditPersonalInfo: 'HumanCapitalManagement.Profile:EditPersonalInfo',\n EditSignature: 'HumanCapitalManagement.Profile:EditSignature',\n },\n} as const;\n","export const AXPHumanCapitalManagementFeatureKeys = {\n EmployeeManagement: 'HumanCapitalManagement:Feature:Employee.Management',\n LeaveManagement: 'HumanCapitalManagement:Feature:Leave.Management',\n LifecycleManagement: 'HumanCapitalManagement:Feature:Lifecycle.Management',\n} as const;\n\n","import { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Leave request open statuses ----\n\n/** Statuses that block starting another run for the same employee and leave type. */\nexport const AXMLeaveRequestOpenStatusIds = [AXPSystemStatusType.WaitingApproval] as const;\n\n//#endregion\n","import { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Lifecycle event open statuses ----\n\n/** Statuses that block starting another run for the same employee and event type. */\nexport const AXMLifecycleEventOpenStatusIds = [\n AXPSystemStatusType.InProgress,\n AXPSystemStatusType.WaitingSignOff,\n] as const;\n\n//#endregion\n","export const AXPHumanCapitalManagementMenuKeys = {\n Root: 'HumanCapitalManagement:Menu',\n Employees: 'HumanCapitalManagement:Menu:Employees',\n EmploymentTypes: 'HumanCapitalManagement:Menu:EmploymentTypes',\n Divider1: 'HumanCapitalManagement:Menu:Divider1',\n PositionAssignments: 'HumanCapitalManagement:Menu:PositionAssignments',\n Divider2: 'HumanCapitalManagement:Menu:Divider2',\n LeaveTypes: 'HumanCapitalManagement:Menu:LeaveTypes',\n LeaveRequests: 'HumanCapitalManagement:Menu:LeaveRequests',\n LeaveRequestBoard: 'HumanCapitalManagement:Menu:LeaveRequestBoard',\n LifecycleEventTypes: 'HumanCapitalManagement:Menu:LifecycleEventTypes',\n} as const;\n\n","/**\n * People & Organization capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPPeopleOrganizationPermissionKeys = {\n Access: 'PeopleOrganization:Permission:Access',\n ViewOrganization: 'PeopleOrganization:Permission:ViewOrganization',\n MaintainOrganization: 'PeopleOrganization:Permission:MaintainOrganization',\n MaintainTeams: 'PeopleOrganization:Permission:MaintainTeams',\n MaintainEmployees: 'PeopleOrganization:Permission:MaintainEmployees',\n ManageEmployeeActions: 'PeopleOrganization:Permission:ManageEmployeeActions',\n MaintainPersons: 'PeopleOrganization:Permission:MaintainPersons',\n MaintainAttendance: 'PeopleOrganization:Permission:MaintainAttendance',\n ManageAttendanceActions: 'PeopleOrganization:Permission:ManageAttendanceActions',\n DesignJobs: 'PeopleOrganization:Permission:DesignJobs',\n Setup: 'PeopleOrganization:Permission:Setup',\n} as const;\n","import { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Position assignment status names ----\n\nexport const AXM_POSITION_ASSIGNMENT_STATUS = {\n active: AXPSystemStatusType.Active,\n scheduled: 'scheduled',\n expired: 'expired',\n revoked: 'revoked',\n} as const;\n\nexport type AXMPositionAssignmentStatusId =\n (typeof AXM_POSITION_ASSIGNMENT_STATUS)[keyof typeof AXM_POSITION_ASSIGNMENT_STATUS];\n\n/**\n * Statuses that still occupy the employee / manager seat for overlap and revoke resolution.\n * Keep in sync with position-assignment duplicate-seat validation (mock and future API rules).\n */\nexport const AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS: readonly AXMPositionAssignmentStatusId[] = [\n AXM_POSITION_ASSIGNMENT_STATUS.active,\n AXM_POSITION_ASSIGNMENT_STATUS.scheduled,\n];\n\n//#endregion\n","//#region ---- Profile document drive context ----\n\n/** Result of resolving the current session user's employee EDMS folder ref. */\nexport interface AXMHcmProfileDocumentDriveContext {\n employeeId: string;\n /** e.g. `HumanCapitalManagement.Employee` */\n refType: string;\n /** Employee record id used as folder `refId`. */\n refId: string;\n /** Allowed document type names for create/upload (matches Employee documents plugin). */\n documentTypeNames: string[];\n}\n\n//#endregion\n","//#region ---- Human capital management runtime keys ----\n\nexport const AXPHumanCapitalManagementQueryKeys = {\n Profile: {\n GetMyDocumentDriveContext: 'HumanCapitalManagement:Profile:GetMyDocumentDriveContext',\n },\n} as const;\n\n//#endregion\n","const config = {\n i18n: 'human-capital-management',\n module: 'HumanCapitalManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'human-capital-management',\n name: config.module,\n title: '@human-capital-management:module.title',\n icon: 'fa-light fa-users',\n },\n entities: {\n employee: {\n name: 'Employee',\n source: `${config.module}.Employee`,\n title: '@human-capital-management:employees.entities.employee.title',\n titlePlural: '@human-capital-management:employees.entities.employee.plural',\n icon: 'fa-light fa-address-card',\n },\n employmentType: {\n name: 'EmploymentType',\n source: `${config.module}.EmploymentType`,\n title: '@human-capital-management:employment-types.entities.employment-type.title',\n titlePlural: '@human-capital-management:employment-types.entities.employment-type.plural',\n icon: 'fa-light fa-file-signature',\n },\n positionAssignment: {\n name: 'PositionAssignment',\n source: `${config.module}.PositionAssignment`,\n title: '@human-capital-management:position-assignments.entities.position-assignment.title',\n titlePlural: '@human-capital-management:position-assignments.entities.position-assignment.plural',\n icon: 'fa-light fa-user-tie-hair',\n },\n leaveType: {\n name: 'LeaveType',\n source: `${config.module}.LeaveType`,\n title: '@human-capital-management:leave-types.entities.leave-type.title',\n titlePlural: '@human-capital-management:leave-types.entities.leave-type.plural',\n icon: 'fa-light fa-calendar-days',\n },\n leaveRequest: {\n name: 'LeaveRequest',\n source: `${config.module}.LeaveRequest`,\n title: '@human-capital-management:leave-requests.entities.leave-request.title',\n titlePlural: '@human-capital-management:leave-requests.entities.leave-request.plural',\n icon: 'fa-light fa-plane-departure',\n },\n lifecycleEventType: {\n name: 'LifecycleEventType',\n source: `${config.module}.LifecycleEventType`,\n title: '@human-capital-management:lifecycle-event-types.entities.lifecycle-event-type.title',\n titlePlural: '@human-capital-management:lifecycle-event-types.entities.lifecycle-event-type.plural',\n icon: 'fa-light fa-diagram-next',\n },\n lifecycleEvent: {\n name: 'LifecycleEvent',\n source: `${config.module}.LifecycleEvent`,\n title: '@human-capital-management:lifecycle-events.entities.lifecycle-event.title',\n titlePlural: '@human-capital-management:lifecycle-events.entities.lifecycle-event.plural',\n icon: 'fa-light fa-clipboard-list-check',\n },\n },\n pages: {\n appointmentBoard: {\n path: 'Boards/ResourceAppointment',\n title: '@human-capital-management:leave-requests.menus.appointment-board.title',\n icon: 'fa-light fa-calendar-lines',\n },\n },\n queries: {\n dashboard: {\n employeesKpi: `${config.module}:Dashboard:EmployeesKpi`,\n },\n reports: {\n getHeadcountByDepartment: `${config.module}:Reports:GetHeadcountByDepartment`,\n getLeaveUsageByType: `${config.module}:Reports:GetLeaveUsageByType`,\n },\n },\n} as const;\n","import { AXPMultiLanguageString, AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n//#region ---- Imports ----\nimport { AXMHumanCapitalManagementEmployeeEntityModel } from '../employee/employee.types';\n\n//#endregion\n\n//#region ---- Lifecycle event ----\n\nexport type AXMHumanCapitalManagementLifecycleEventStatus =\n | AXPSystemStatusType.InProgress\n | AXPSystemStatusType.WaitingSignOff\n | AXPSystemStatusType.Completed\n | AXPSystemStatusType.Cancelled;\n\n/**\n * One employee lifecycle event (onboarding, separation, …), driven by {@link AXMHumanCapitalManagementLifecycleEventTypeEntityModel}.\n */\nexport interface AXMHumanCapitalManagementLifecycleEventEntityModel extends AXPEntityModel<string> {\n employeeId: string;\n employee?: AXMHumanCapitalManagementEmployeeEntityModel;\n eventTypeId: string;\n eventType?: { id: string; title: AXPMultiLanguageString };\n /**\n * Platform user currently assigned the active workflow step (human task / cartable assignee).\n * Populate from workflow engine or middleware when tasks are created or claimed.\n */\n assignedToUserId?: string | null;\n assignedToUser?: { id: string; displayName?: string };\n effectiveDate?: Date;\n notes?: string;\n statusId?: AXMHumanCapitalManagementLifecycleEventStatus;\n status?: { id: AXMHumanCapitalManagementLifecycleEventStatus; title?: string };\n}\n\n//#endregion\n","import { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n//#region ---- Imports ----\n\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-contracts';\n//#endregion\n\n//#region ---- Lifecycle event type (reference) ----\n\n/** Workflow template binding and admin-configured default inputs for lifecycle event types. */\nexport interface AXMHumanCapitalManagementLifecycleEventTypeWorkflowConfig {\n workflowDefinitionId: string;\n workflowName: string;\n defaultInput?: Record<string, unknown>;\n}\n\n/**\n * Defines workflow defaults, questionnaire, and metadata schema for employee lifecycle events (onboarding, separation, etc.).\n */\nexport interface AXMHumanCapitalManagementLifecycleEventTypeEntityModel extends AXPEntityModel<string> {\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n /** Selected workflow and template-time input defaults (e.g. questionnaireId). */\n workflowConfig?: AXMHumanCapitalManagementLifecycleEventTypeWorkflowConfig | null;\n /** Font Awesome icon classes (e.g. `fa-light fa-user-plus`). */\n icon?: string;\n /** Meta-data-builder schema (`metaDataList`); drives dynamic fields on lifecycle events for this template. */\n metaDataList?: AXMMetaDataBuilderValue;\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './catalog-scope.keys';\nexport * from './commands.keys';\nexport * from './features.keys';\nexport * from './leave-request-status.constants';\nexport * from './lifecycle-event-status.constants';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './position-assignment.status';\nexport * from './profile-document-drive.types';\nexport * from './runtime.keys';\n\nexport * from './root-config';\n\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { AXPWidgetsList } from '@acorex-platform/framework-shared/core';
|
|
2
|
+
import { AXToastService } from '@acorex/components/toast';
|
|
3
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
4
|
+
import { RootConfig as RootConfig$1 } from '@acorex-platform/module-person-core-client/contracts';
|
|
5
|
+
import { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';
|
|
6
|
+
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
7
|
+
import * as i0 from '@angular/core';
|
|
8
|
+
import { inject, Injectable } from '@angular/core';
|
|
9
|
+
import { trim, isNil, isEmpty, cloneDeep, defaultTo, isArray, isString, isObject } from 'lodash';
|
|
10
|
+
import { A as AXMHcmProfileContextService } from './acorex-platform-module-human-capital-management-client-acorex-platform-module-human-capital-management-client-DlWna0Lz.mjs';
|
|
11
|
+
import { AXPUserProfileIdentityService } from '@acorex-platform/framework-client/auth';
|
|
12
|
+
import { RootConfig } from '@acorex-platform/module-security-management-client/contracts';
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region ---- Sync user from person service ----
|
|
16
|
+
/**
|
|
17
|
+
* Keeps the application user record and session display fields aligned with person identity updates.
|
|
18
|
+
* Avatar sync is handled server-side by HCM avatar middleware when Person.image changes.
|
|
19
|
+
*/
|
|
20
|
+
class AXMHcmSyncUserFromPersonService {
|
|
21
|
+
constructor() {
|
|
22
|
+
//#region ---- Services & Dependencies ----
|
|
23
|
+
this.entityService = inject(AXPEntityService);
|
|
24
|
+
this.identityService = inject(AXPUserProfileIdentityService);
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region ---- Public API ----
|
|
28
|
+
async sync(userId, person) {
|
|
29
|
+
const displayName = trim(`${person.firstName} ${person.lastName}`);
|
|
30
|
+
if (!displayName) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const userData = this.entityService
|
|
34
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.users.name)
|
|
35
|
+
.data();
|
|
36
|
+
await userData.update(userId, { displayName });
|
|
37
|
+
await this.identityService.applySessionPatch({
|
|
38
|
+
title: displayName,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMHcmSyncUserFromPersonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
42
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMHcmSyncUserFromPersonService, providedIn: 'root' }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMHcmSyncUserFromPersonService, decorators: [{
|
|
45
|
+
type: Injectable,
|
|
46
|
+
args: [{ providedIn: 'root' }]
|
|
47
|
+
}] });
|
|
48
|
+
|
|
49
|
+
//#region ---- Repeater children (aligned with Person entity) ----
|
|
50
|
+
const PHONES_REPEATER_CHILDREN = [
|
|
51
|
+
{
|
|
52
|
+
type: AXPWidgetsList.Editors.ContactBox,
|
|
53
|
+
mode: 'edit',
|
|
54
|
+
options: {
|
|
55
|
+
type: 'phone',
|
|
56
|
+
placeholder: '@person-core:persons.entities.person.fields.phone.placeholder',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
const EMAILS_REPEATER_CHILDREN = [
|
|
61
|
+
{
|
|
62
|
+
type: AXPWidgetsList.Editors.ContactBox,
|
|
63
|
+
mode: 'edit',
|
|
64
|
+
options: {
|
|
65
|
+
type: 'email',
|
|
66
|
+
placeholder: '@person-core:persons.entities.person.fields.email.placeholder',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
//#endregion
|
|
71
|
+
//#region ---- Edit personal info command ----
|
|
72
|
+
/** Opens a self-service dialog to update the linked person record and sync user display fields. */
|
|
73
|
+
class AXMHcmEditPersonalInfoCommand {
|
|
74
|
+
constructor() {
|
|
75
|
+
//#region ---- Services & Dependencies ----
|
|
76
|
+
this.layoutBuilder = inject(AXPLayoutBuilderService);
|
|
77
|
+
this.entityService = inject(AXPEntityService);
|
|
78
|
+
this.profileContextService = inject(AXMHcmProfileContextService);
|
|
79
|
+
this.syncUserService = inject(AXMHcmSyncUserFromPersonService);
|
|
80
|
+
this.toastService = inject(AXToastService);
|
|
81
|
+
this.translateService = inject(AXTranslationService);
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region ---- Command ----
|
|
85
|
+
async execute() {
|
|
86
|
+
const profileContext = await this.profileContextService.resolve();
|
|
87
|
+
if (isNil(profileContext)) {
|
|
88
|
+
return {
|
|
89
|
+
success: false,
|
|
90
|
+
message: {
|
|
91
|
+
text: await this.translateService.translateAsync('@human-capital-management:profile-page.commands.edit-personal-info.messages.no-employee'),
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const personData = this.entityService
|
|
96
|
+
.withEntity(RootConfig$1.module.name, RootConfig$1.entities.person.name)
|
|
97
|
+
.data();
|
|
98
|
+
const person = await personData.byKey(profileContext.personId);
|
|
99
|
+
if (isNil(person)) {
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
message: {
|
|
103
|
+
text: await this.translateService.translateAsync('@human-capital-management:profile-page.commands.edit-personal-info.messages.person-not-found'),
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const dialogTitle = await this.translateService.translateAsync('@human-capital-management:profile-page.commands.edit-personal-info.dialog.title');
|
|
108
|
+
const result = await this.layoutBuilder
|
|
109
|
+
.create()
|
|
110
|
+
.dialog((dialog) => {
|
|
111
|
+
dialog
|
|
112
|
+
.setTitle(dialogTitle)
|
|
113
|
+
.setSize('lg')
|
|
114
|
+
.setCloseButton(true)
|
|
115
|
+
.setContext(this.buildFormContext(person))
|
|
116
|
+
.content((layout) => {
|
|
117
|
+
layout.flex((flex) => {
|
|
118
|
+
flex
|
|
119
|
+
.setDirection('column')
|
|
120
|
+
.setGap('1rem')
|
|
121
|
+
.formField('@general:terms.contact.first-name', (field) => {
|
|
122
|
+
field.path('firstName');
|
|
123
|
+
field.textBox({
|
|
124
|
+
placeholder: '@general:terms.contact.first-name',
|
|
125
|
+
validations: [{ rule: 'required' }],
|
|
126
|
+
});
|
|
127
|
+
})
|
|
128
|
+
.formField('@general:terms.contact.last-name', (field) => {
|
|
129
|
+
field.path('lastName');
|
|
130
|
+
field.textBox({
|
|
131
|
+
placeholder: '@general:terms.contact.last-name',
|
|
132
|
+
validations: [{ rule: 'required' }],
|
|
133
|
+
});
|
|
134
|
+
})
|
|
135
|
+
.formField('@person-core:persons.entities.person.groups.phones', (field) => {
|
|
136
|
+
field.path('phones');
|
|
137
|
+
field.customWidget(AXPWidgetsList.Layouts.RepeaterLayout, {
|
|
138
|
+
hasControls: true,
|
|
139
|
+
children: PHONES_REPEATER_CHILDREN,
|
|
140
|
+
});
|
|
141
|
+
})
|
|
142
|
+
.formField('@person-core:persons.entities.person.groups.emails', (field) => {
|
|
143
|
+
field.path('emails');
|
|
144
|
+
field.customWidget(AXPWidgetsList.Layouts.RepeaterLayout, {
|
|
145
|
+
hasControls: true,
|
|
146
|
+
children: EMAILS_REPEATER_CHILDREN,
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
})
|
|
151
|
+
.setActions((actions) => {
|
|
152
|
+
actions.cancel('@general:actions.cancel.title');
|
|
153
|
+
actions.submit('@general:actions.save.title');
|
|
154
|
+
})
|
|
155
|
+
.onAction(async (dialogRef) => {
|
|
156
|
+
if (dialogRef.action() === 'cancel') {
|
|
157
|
+
return { success: false };
|
|
158
|
+
}
|
|
159
|
+
const form = dialogRef.context();
|
|
160
|
+
const firstName = trim(form.firstName);
|
|
161
|
+
const lastName = trim(form.lastName);
|
|
162
|
+
if (isEmpty(firstName) || isEmpty(lastName)) {
|
|
163
|
+
await this.showError('@human-capital-management:profile-page.commands.edit-personal-info.messages.required-name');
|
|
164
|
+
throw new Error('First name and last name are required');
|
|
165
|
+
}
|
|
166
|
+
dialogRef.setLoading(true);
|
|
167
|
+
try {
|
|
168
|
+
const phones = this.normalizeContactItems(form.phones);
|
|
169
|
+
const emails = this.normalizeContactItems(form.emails);
|
|
170
|
+
await personData.update(profileContext.personId, {
|
|
171
|
+
firstName,
|
|
172
|
+
lastName,
|
|
173
|
+
phones,
|
|
174
|
+
emails,
|
|
175
|
+
});
|
|
176
|
+
await this.syncUserService.sync(profileContext.userId, {
|
|
177
|
+
firstName,
|
|
178
|
+
lastName,
|
|
179
|
+
});
|
|
180
|
+
const successTitle = await this.translateService.translateAsync('@human-capital-management:profile-page.commands.edit-personal-info.messages.success');
|
|
181
|
+
this.toastService.show({ color: 'success', title: successTitle });
|
|
182
|
+
dialogRef.close();
|
|
183
|
+
return { success: true, kind: 'object', data: undefined };
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
dialogRef.setLoading(false);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
})
|
|
190
|
+
.show();
|
|
191
|
+
return result ?? { success: false };
|
|
192
|
+
}
|
|
193
|
+
//#endregion
|
|
194
|
+
//#region ---- Utility Methods ----
|
|
195
|
+
buildFormContext(person) {
|
|
196
|
+
return {
|
|
197
|
+
firstName: defaultTo(person.firstName, ''),
|
|
198
|
+
lastName: defaultTo(person.lastName, ''),
|
|
199
|
+
phones: cloneDeep(defaultTo(person.phones, [])),
|
|
200
|
+
emails: cloneDeep(defaultTo(person.emails, [])),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/** Normalizes repeater contact rows to `{ value: string }[]`, matching Person entity storage. */
|
|
204
|
+
normalizeContactItems(items) {
|
|
205
|
+
if (!isArray(items)) {
|
|
206
|
+
return [];
|
|
207
|
+
}
|
|
208
|
+
return items
|
|
209
|
+
.map((entry) => this.normalizeContactEntry(entry))
|
|
210
|
+
.filter((entry) => !isEmpty(entry.value));
|
|
211
|
+
}
|
|
212
|
+
normalizeContactEntry(entry) {
|
|
213
|
+
if (isString(entry)) {
|
|
214
|
+
return { value: trim(entry) };
|
|
215
|
+
}
|
|
216
|
+
if (!isObject(entry) || isNil(entry)) {
|
|
217
|
+
return { value: '' };
|
|
218
|
+
}
|
|
219
|
+
const record = entry;
|
|
220
|
+
const inner = record.value;
|
|
221
|
+
if (isObject(inner) && !isNil(inner) && 'value' in inner) {
|
|
222
|
+
const nested = inner;
|
|
223
|
+
return { value: trim(String(nested.value ?? '')) };
|
|
224
|
+
}
|
|
225
|
+
return { value: trim(String(record.value ?? '')) };
|
|
226
|
+
}
|
|
227
|
+
async showError(messageKey) {
|
|
228
|
+
const content = await this.translateService.translateAsync(messageKey);
|
|
229
|
+
const title = await this.translateService.translateAsync('@general:messages.generic.error.title');
|
|
230
|
+
this.toastService.show({ color: 'danger', title, content, closeButton: true });
|
|
231
|
+
}
|
|
232
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMHcmEditPersonalInfoCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
233
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMHcmEditPersonalInfoCommand, providedIn: 'root' }); }
|
|
234
|
+
}
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMHcmEditPersonalInfoCommand, decorators: [{
|
|
236
|
+
type: Injectable,
|
|
237
|
+
args: [{ providedIn: 'root' }]
|
|
238
|
+
}] });
|
|
239
|
+
|
|
240
|
+
export { AXMHcmEditPersonalInfoCommand };
|
|
241
|
+
//# sourceMappingURL=acorex-platform-module-human-capital-management-client-edit-personal-info.command-DK947cW5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-human-capital-management-client-edit-personal-info.command-DK947cW5.mjs","sources":["../../../../libs/modules/human-capital-management/client/src/lib/features/profile-page/sync-user-from-person.service.ts","../../../../libs/modules/human-capital-management/client/src/lib/features/profile-page/commands/edit-personal-info.command.ts"],"sourcesContent":["import { AXPUserProfileIdentityService } from '@acorex-platform/framework-client/auth';\nimport {RootConfig as SecurityManagementRootConfig} from '@acorex-platform/module-security-management-client/contracts';\nimport {AXMSecurityManagementUsersEntityModel} from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { trim } from 'lodash';\n\n//#region ---- Sync payload ----\n\nexport interface AXMHcmSyncUserFromPersonInput {\n firstName: string;\n lastName: string;\n}\n\n//#endregion\n\n//#region ---- Sync user from person service ----\n\n/**\n * Keeps the application user record and session display fields aligned with person identity updates.\n * Avatar sync is handled server-side by HCM avatar middleware when Person.image changes.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMHcmSyncUserFromPersonService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly identityService = inject(AXPUserProfileIdentityService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async sync(userId: string, person: AXMHcmSyncUserFromPersonInput): Promise<void> {\n const displayName = trim(`${person.firstName} ${person.lastName}`);\n if (!displayName) {\n return;\n }\n\n const userData = this.entityService\n .withEntity(\n SecurityManagementRootConfig.module.name,\n SecurityManagementRootConfig.entities.users.name,\n )\n .data<string, AXMSecurityManagementUsersEntityModel>();\n\n await userData.update(userId, { displayName });\n\n await this.identityService.applySessionPatch({\n title: displayName,\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult, AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport {RootConfig as PersonCoreRootConfig} from '@acorex-platform/module-person-core-client/contracts'\nimport {AXMPersonCorePersonEntityModel} from '@acorex-platform/module-person-core-client/contracts';\n\nimport { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { inject, Injectable } from '@angular/core';\nimport { cloneDeep, defaultTo, isArray, isEmpty, isNil, isObject, isString, trim } from 'lodash';\n\nimport { AXMHcmProfileContextService } from '../profile-context.service';\nimport { AXMHcmSyncUserFromPersonService } from '../sync-user-from-person.service';\n\n//#region ---- Repeater children (aligned with Person entity) ----\n\nconst PHONES_REPEATER_CHILDREN = [\n {\n type: AXPWidgetsList.Editors.ContactBox,\n mode: 'edit' as const,\n options: {\n type: 'phone',\n placeholder: '@person-core:persons.entities.person.fields.phone.placeholder',\n },\n },\n];\n\nconst EMAILS_REPEATER_CHILDREN = [\n {\n type: AXPWidgetsList.Editors.ContactBox,\n mode: 'edit' as const,\n options: {\n type: 'email',\n placeholder: '@person-core:persons.entities.person.fields.email.placeholder',\n },\n },\n];\n\n//#endregion\n\n//#region ---- Form context ----\n\ninterface AXMHcmEditPersonalInfoFormContext {\n firstName: string;\n lastName: string;\n phones: Array<{ value: string; label?: string }>;\n emails: Array<{ value: string; label?: string }>;\n}\n\n//#endregion\n\n//#region ---- Edit personal info command ----\n\n/** Opens a self-service dialog to update the linked person record and sync user display fields. */\n@Injectable({ providedIn: 'root' })\nexport class AXMHcmEditPersonalInfoCommand implements AXPCommand {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly entityService = inject(AXPEntityService);\n private readonly profileContextService = inject(AXMHcmProfileContextService);\n private readonly syncUserService = inject(AXMHcmSyncUserFromPersonService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(): AXPCommandExecuteResultPromise<void> {\n const profileContext = await this.profileContextService.resolve();\n if (isNil(profileContext)) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync(\n '@human-capital-management:profile-page.commands.edit-personal-info.messages.no-employee',\n ),\n },\n };\n }\n\n const personData = this.entityService\n .withEntity(PersonCoreRootConfig.module.name, PersonCoreRootConfig.entities.person.name)\n .data<string, AXMPersonCorePersonEntityModel>();\n\n const person = await personData.byKey(profileContext.personId);\n if (isNil(person)) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync(\n '@human-capital-management:profile-page.commands.edit-personal-info.messages.person-not-found',\n ),\n },\n };\n }\n\n const dialogTitle = await this.translateService.translateAsync(\n '@human-capital-management:profile-page.commands.edit-personal-info.dialog.title',\n );\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXPRuntimeCommandResult<void>>((dialog) => {\n dialog\n .setTitle(dialogTitle)\n .setSize('lg')\n .setCloseButton(true)\n .setContext(this.buildFormContext(person))\n .content((layout) => {\n layout.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('1rem')\n .formField('@general:terms.contact.first-name', (field) => {\n field.path('firstName');\n field.textBox({\n placeholder: '@general:terms.contact.first-name',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@general:terms.contact.last-name', (field) => {\n field.path('lastName');\n field.textBox({\n placeholder: '@general:terms.contact.last-name',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@person-core:persons.entities.person.groups.phones', (field) => {\n field.path('phones');\n field.customWidget(AXPWidgetsList.Layouts.RepeaterLayout, {\n hasControls: true,\n children: PHONES_REPEATER_CHILDREN,\n });\n })\n .formField('@person-core:persons.entities.person.groups.emails', (field) => {\n field.path('emails');\n field.customWidget(AXPWidgetsList.Layouts.RepeaterLayout, {\n hasControls: true,\n children: EMAILS_REPEATER_CHILDREN,\n });\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return { success: false };\n }\n\n const form = dialogRef.context() as AXMHcmEditPersonalInfoFormContext;\n const firstName = trim(form.firstName);\n const lastName = trim(form.lastName);\n\n if (isEmpty(firstName) || isEmpty(lastName)) {\n await this.showError(\n '@human-capital-management:profile-page.commands.edit-personal-info.messages.required-name',\n );\n throw new Error('First name and last name are required');\n }\n\n dialogRef.setLoading(true);\n try {\n const phones = this.normalizeContactItems(form.phones);\n const emails = this.normalizeContactItems(form.emails);\n\n await personData.update(profileContext.personId, {\n firstName,\n lastName,\n phones,\n emails,\n });\n\n await this.syncUserService.sync(profileContext.userId, {\n firstName,\n lastName,\n });\n\n const successTitle = await this.translateService.translateAsync(\n '@human-capital-management:profile-page.commands.edit-personal-info.messages.success',\n );\n this.toastService.show({ color: 'success', title: successTitle });\n dialogRef.close();\n return { success: true, kind: 'object', data: undefined };\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n\n return result ?? { success: false };\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private buildFormContext(person: AXMPersonCorePersonEntityModel): AXMHcmEditPersonalInfoFormContext {\n return {\n firstName: defaultTo(person.firstName, ''),\n lastName: defaultTo(person.lastName, ''),\n phones: cloneDeep(defaultTo(person.phones, [])),\n emails: cloneDeep(defaultTo(person.emails, [])),\n };\n }\n\n /** Normalizes repeater contact rows to `{ value: string }[]`, matching Person entity storage. */\n private normalizeContactItems(items: unknown): Array<{ value: string }> {\n if (!isArray(items)) {\n return [];\n }\n\n return items\n .map((entry) => this.normalizeContactEntry(entry))\n .filter((entry) => !isEmpty(entry.value));\n }\n\n private normalizeContactEntry(entry: unknown): { value: string } {\n if (isString(entry)) {\n return { value: trim(entry) };\n }\n\n if (!isObject(entry) || isNil(entry)) {\n return { value: '' };\n }\n\n const record = entry as { value?: unknown; label?: string };\n const inner = record.value;\n\n if (isObject(inner) && !isNil(inner) && 'value' in inner) {\n const nested = inner as { value?: unknown };\n return { value: trim(String(nested.value ?? '')) };\n }\n\n return { value: trim(String(record.value ?? '')) };\n }\n\n private async showError(messageKey: string): Promise<void> {\n const content = await this.translateService.translateAsync(messageKey);\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["SecurityManagementRootConfig","PersonCoreRootConfig"],"mappings":"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"}
|