@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.
Files changed (91) hide show
  1. package/fesm2022/acorex-modules-common.mjs +9 -9
  2. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs → acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs} +364 -237
  4. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs → acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs} +2 -2
  6. 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
  7. 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
  8. 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
  9. package/fesm2022/{acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs → acorex-modules-conversation-comments-page.component--g4ugC_L.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs.map → acorex-modules-conversation-comments-page.component--g4ugC_L.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs → acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs} +2 -2
  12. 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
  13. package/fesm2022/{acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs → acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs} +2 -2
  14. 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
  15. package/fesm2022/{acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs → acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs} +2 -2
  16. 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
  17. 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
  18. 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
  19. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs → acorex-modules-conversation-start-assist-chat.command-DeMmJdd6.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs.map → acorex-modules-conversation-start-assist-chat.command-DeMmJdd6.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs → acorex-modules-conversation-sync-read-state.command-4YxdwLaE.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs.map → acorex-modules-conversation-sync-read-state.command-4YxdwLaE.mjs.map} +1 -1
  23. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  24. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-kph3UxDu.mjs} +94 -41
  25. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-kph3UxDu.mjs.map +1 -0
  26. package/fesm2022/{acorex-modules-dashboard-management-index-gjCiELmH.mjs → acorex-modules-dashboard-management-index-rp9dgARq.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-dashboard-management-index-gjCiELmH.mjs.map → acorex-modules-dashboard-management-index-rp9dgARq.mjs.map} +1 -1
  28. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  29. package/fesm2022/{acorex-modules-document-management-drive-choose.component-DyJoXajP.mjs → acorex-modules-document-management-drive-choose.component-Dx1slMSA.mjs} +3 -3
  30. package/fesm2022/{acorex-modules-document-management-drive-choose.component-DyJoXajP.mjs.map → acorex-modules-document-management-drive-choose.component-Dx1slMSA.mjs.map} +1 -1
  31. package/fesm2022/acorex-modules-document-management.mjs +268 -351
  32. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  33. 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
  34. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs.map +1 -0
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs → acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs} +2 -2
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  54. package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
  55. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  56. package/fesm2022/acorex-modules-project-management.mjs +707 -424
  57. package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
  58. package/fesm2022/acorex-modules-report-management.mjs +1 -1
  59. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  60. package/fesm2022/acorex-modules-task-management-start-task-flow.command-HYdQOWDe.mjs +115 -0
  61. package/fesm2022/acorex-modules-task-management-start-task-flow.command-HYdQOWDe.mjs.map +1 -0
  62. package/fesm2022/{acorex-modules-task-management-task-board.page-DTWxd_vG.mjs → acorex-modules-task-management-task-board.page-BMTjJlry.mjs} +3 -3
  63. 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
  64. package/fesm2022/acorex-modules-task-management.mjs +433 -460
  65. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  66. 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
  67. package/fesm2022/acorex-modules-timesheet-management-report-hours-by-project.query-CGc1Q6aB.mjs.map +1 -0
  68. 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
  69. 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
  70. package/fesm2022/acorex-modules-timesheet-management.mjs +8 -8
  71. package/fesm2022/acorex-modules-timesheet-management.mjs.map +1 -1
  72. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-edit.component-CFF7X1MO.mjs +70 -0
  73. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-edit.component-CFF7X1MO.mjs.map +1 -0
  74. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-view.component-DwC2aHVt.mjs +70 -0
  75. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-view.component-DwC2aHVt.mjs.map +1 -0
  76. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram.types-DmzV305e.mjs +195 -0
  77. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram.types-DmzV305e.mjs.map +1 -0
  78. package/fesm2022/acorex-modules-workplacesafety-management.mjs +139 -16
  79. package/fesm2022/acorex-modules-workplacesafety-management.mjs.map +1 -1
  80. package/package.json +2 -2
  81. package/types/acorex-modules-dashboard-management.d.ts +30 -11
  82. package/types/acorex-modules-document-management.d.ts +21 -5
  83. package/types/acorex-modules-human-capital-management.d.ts +4 -0
  84. package/types/acorex-modules-project-management.d.ts +46 -23
  85. package/types/acorex-modules-task-management.d.ts +80 -11
  86. package/types/acorex-modules-timesheet-management.d.ts +2 -2
  87. package/types/acorex-modules-workplacesafety-management.d.ts +7 -2
  88. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs.map +0 -1
  89. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs.map +0 -1
  90. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs.map +0 -1
  91. package/fesm2022/acorex-modules-timesheet-management-report-hours-by-project.query-z38wZLKJ.mjs.map +0 -1
@@ -2,7 +2,7 @@ import { AXPSystemStatuses } from '@acorex/platform/contracts';
2
2
  import { AXPEntityService } from '@acorex/platform/layout/entity';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
- import { R as RootConfig } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
5
+ import { R as RootConfig } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
6
6
 
7
7
  //#endregion
8
8
  /**
@@ -56,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
56
56
  }] });
57
57
 
58
58
  export { ApproveLeaveRequestCommand };
59
- //# sourceMappingURL=acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs.map
59
+ //# sourceMappingURL=acorex-modules-human-capital-management-approve-leave-request.command-B_EBDijL.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/leave-request/commands/approve-leave-request.command.ts"],"sourcesContent":["import { AXPSystemStatuses } from '@acorex/platform/contracts';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\n\n//#region ---- Types ----\n\nexport interface ApproveLeaveRequestInput {\n id: string;\n reason?: string;\n note?: string;\n}\n\n//#endregion\n\n/**\n * Approve Leave Request Command\n * Updates the leave request status to Approved\n */\n@Injectable({ providedIn: 'root' })\nexport class ApproveLeaveRequestCommand implements AXPCommand<ApproveLeaveRequestInput, void> {\n //#region ---- Services ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: ApproveLeaveRequestInput): Promise<AXPExecuteCommandResult<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 Approved\n const updateData: any = {\n statusId: AXPSystemStatuses.Approved.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 {\n success: true,\n };\n } catch (error: any) {\n console.error('[ApproveLeaveRequestCommand] Error:', error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to approve leave request',\n },\n };\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAeA;AAEA;;;AAGG;MAEU,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA0C1D,IAAA;;;IApCC,MAAM,OAAO,CAAC,KAA+B,EAAA;AAC3C,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,QAAQ,CAAC,IAAI;aAC1C;;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;AACL,gBAAA,OAAO,EAAE,IAAI;aACd;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;YAC3D,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,iCAAiC;AACzD,iBAAA;aACF;QACH;IACF;8GA1CW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,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,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-modules-human-capital-management-approve-leave-request.command-B_EBDijL.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/leave-request/commands/approve-leave-request.command.ts"],"sourcesContent":["import { AXPSystemStatuses } from '@acorex/platform/contracts';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\n\n//#region ---- Types ----\n\nexport interface ApproveLeaveRequestInput {\n id: string;\n reason?: string;\n note?: string;\n}\n\n//#endregion\n\n/**\n * Approve Leave Request Command\n * Updates the leave request status to Approved\n */\n@Injectable({ providedIn: 'root' })\nexport class ApproveLeaveRequestCommand implements AXPCommand<ApproveLeaveRequestInput, void> {\n //#region ---- Services ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: ApproveLeaveRequestInput): Promise<AXPExecuteCommandResult<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 Approved\n const updateData: any = {\n statusId: AXPSystemStatuses.Approved.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 {\n success: true,\n };\n } catch (error: any) {\n console.error('[ApproveLeaveRequestCommand] Error:', error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to approve leave request',\n },\n };\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAeA;AAEA;;;AAGG;MAEU,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA0C1D,IAAA;;;IApCC,MAAM,OAAO,CAAC,KAA+B,EAAA;AAC3C,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,QAAQ,CAAC,IAAI;aAC1C;;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;AACL,gBAAA,OAAO,EAAE,IAAI;aACd;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;YAC3D,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,iCAAiC;AACzD,iBAAA;aACF;QACH;IACF;8GA1CW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,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,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -3,7 +3,7 @@ import { AXPCommandService } from '@acorex/platform/runtime';
3
3
  import { AXTranslationService } from '@acorex/core/translation';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, Injectable } from '@angular/core';
6
- import { R as RootConfig, A as AXM_POSITION_ASSIGNMENT_STATUS } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
6
+ import { R as RootConfig, A as AXM_POSITION_ASSIGNMENT_STATUS } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
7
7
 
8
8
  class AXMAssignPositionAssignmentCommand {
9
9
  constructor() {
@@ -87,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
87
87
  }] });
88
88
 
89
89
  export { AXMAssignPositionAssignmentCommand };
90
- //# sourceMappingURL=acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs.map
90
+ //# sourceMappingURL=acorex-modules-human-capital-management-assign-position-assignment.command-ZzWBeTv1.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/organization-chart/commands/assign-position-assignment.command.ts"],"sourcesContent":["import { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { AXPCommand, AXPCommandService } from '@acorex/platform/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\nimport { AXM_POSITION_ASSIGNMENT_STATUS } from '../../../contracts';\n\nexport interface AXMAssignPositionAssignmentInput {\n __context__?: {\n data?: Record<string, unknown>;\n };\n data?: Record<string, unknown>;\n employeeId?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXMAssignPositionAssignmentCommand implements AXPCommand<AXMAssignPositionAssignmentInput, unknown> {\n private readonly commandService = inject(AXPCommandService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly entitySelector = inject(AXPEntityDataSelectorService);\n private readonly translationService = inject(AXTranslationService);\n\n private readonly positionAssignmentSource = RootConfig.entities.positionAssignment.source;\n private readonly positionAssignmentEntityInfo = {\n module: RootConfig.module.name,\n name: RootConfig.entities.positionAssignment.name,\n title: RootConfig.entities.positionAssignment.title,\n };\n\n async execute(input: AXMAssignPositionAssignmentInput): Promise<AXPExecuteCommandResult<unknown>> {\n const payload = {\n ...((input?.__context__?.data ?? input?.data ?? {}) as Record<string, unknown>),\n };\n const rawEmployeeId = (input?.employeeId ?? payload['employeeId']) as string | undefined;\n const employeeId = rawEmployeeId && rawEmployeeId.trim().length > 0 ? rawEmployeeId : await this.selectEmployeeId();\n if (!employeeId) {\n return { success: false };\n }\n payload['employeeId'] = employeeId;\n payload['statusId'] = this.resolveStatusId(payload['startDate'], payload['endDate']);\n\n return (\n await this.commandService.execute('Entity:Create', {\n __context__: {\n entity: this.positionAssignmentSource,\n entityInfo: this.positionAssignmentEntityInfo,\n data: payload,\n options: {\n process: {\n redirect: false,\n },\n },\n },\n })\n ) ?? { success: false };\n }\n\n private async selectEmployeeId(): Promise<string | undefined> {\n const employeeEntity = await this.entityRegistry.resolve(RootConfig.module.name, RootConfig.entities.employee.name);\n if (!employeeEntity) {\n return undefined;\n }\n\n const title = await this.translationService.translateAsync(\n '@human-capital-management:organization-chart.node-actions.select-employee',\n );\n const result = await this.entitySelector.open({\n entity: employeeEntity,\n title,\n allowMultiple: false,\n columns: ['person.fullName', 'employeeCode'],\n });\n\n const selected = result?.items?.[0];\n const selectedId = selected?.['id'] ?? selected?.['_id'];\n return typeof selectedId === 'string' && selectedId.trim().length > 0 ? selectedId : undefined;\n }\n\n private resolveStatusId(startDate: unknown, endDate: unknown): string {\n const nowTime = Date.now();\n const startTime = this.parseTime(startDate);\n const endTime = this.parseTime(endDate);\n if (endTime !== undefined && endTime <= nowTime) {\n return AXM_POSITION_ASSIGNMENT_STATUS.expired;\n }\n if (startTime !== undefined && startTime > nowTime) {\n return AXM_POSITION_ASSIGNMENT_STATUS.scheduled;\n }\n return AXM_POSITION_ASSIGNMENT_STATUS.active;\n }\n\n private parseTime(value: unknown): number | undefined {\n if (!value) {\n return undefined;\n }\n const dateValue = value instanceof Date ? value : new Date(String(value));\n const time = dateValue.getTime();\n return Number.isFinite(time) ? time : undefined;\n }\n}\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-human-capital-management-assign-position-assignment.command-ZzWBeTv1.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/organization-chart/commands/assign-position-assignment.command.ts"],"sourcesContent":["import { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { AXPCommand, AXPCommandService } from '@acorex/platform/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\nimport { AXM_POSITION_ASSIGNMENT_STATUS } from '../../../contracts';\n\nexport interface AXMAssignPositionAssignmentInput {\n __context__?: {\n data?: Record<string, unknown>;\n };\n data?: Record<string, unknown>;\n employeeId?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXMAssignPositionAssignmentCommand implements AXPCommand<AXMAssignPositionAssignmentInput, unknown> {\n private readonly commandService = inject(AXPCommandService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly entitySelector = inject(AXPEntityDataSelectorService);\n private readonly translationService = inject(AXTranslationService);\n\n private readonly positionAssignmentSource = RootConfig.entities.positionAssignment.source;\n private readonly positionAssignmentEntityInfo = {\n module: RootConfig.module.name,\n name: RootConfig.entities.positionAssignment.name,\n title: RootConfig.entities.positionAssignment.title,\n };\n\n async execute(input: AXMAssignPositionAssignmentInput): Promise<AXPExecuteCommandResult<unknown>> {\n const payload = {\n ...((input?.__context__?.data ?? input?.data ?? {}) as Record<string, unknown>),\n };\n const rawEmployeeId = (input?.employeeId ?? payload['employeeId']) as string | undefined;\n const employeeId = rawEmployeeId && rawEmployeeId.trim().length > 0 ? rawEmployeeId : await this.selectEmployeeId();\n if (!employeeId) {\n return { success: false };\n }\n payload['employeeId'] = employeeId;\n payload['statusId'] = this.resolveStatusId(payload['startDate'], payload['endDate']);\n\n return (\n await this.commandService.execute('Entity:Create', {\n __context__: {\n entity: this.positionAssignmentSource,\n entityInfo: this.positionAssignmentEntityInfo,\n data: payload,\n options: {\n process: {\n redirect: false,\n },\n },\n },\n })\n ) ?? { success: false };\n }\n\n private async selectEmployeeId(): Promise<string | undefined> {\n const employeeEntity = await this.entityRegistry.resolve(RootConfig.module.name, RootConfig.entities.employee.name);\n if (!employeeEntity) {\n return undefined;\n }\n\n const title = await this.translationService.translateAsync(\n '@human-capital-management:organization-chart.node-actions.select-employee',\n );\n const result = await this.entitySelector.open({\n entity: employeeEntity,\n title,\n allowMultiple: false,\n columns: ['person.fullName', 'employeeCode'],\n });\n\n const selected = result?.items?.[0];\n const selectedId = selected?.['id'] ?? selected?.['_id'];\n return typeof selectedId === 'string' && selectedId.trim().length > 0 ? selectedId : undefined;\n }\n\n private resolveStatusId(startDate: unknown, endDate: unknown): string {\n const nowTime = Date.now();\n const startTime = this.parseTime(startDate);\n const endTime = this.parseTime(endDate);\n if (endTime !== undefined && endTime <= nowTime) {\n return AXM_POSITION_ASSIGNMENT_STATUS.expired;\n }\n if (startTime !== undefined && startTime > nowTime) {\n return AXM_POSITION_ASSIGNMENT_STATUS.scheduled;\n }\n return AXM_POSITION_ASSIGNMENT_STATUS.active;\n }\n\n private parseTime(value: unknown): number | undefined {\n if (!value) {\n return undefined;\n }\n const dateValue = value instanceof Date ? value : new Date(String(value));\n const time = dateValue.getTime();\n return Number.isFinite(time) ? time : undefined;\n }\n}\n\n"],"names":[],"mappings":";;;;;;;MAiBa,kCAAkC,CAAA;AAD/C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAC3D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACrD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEjD,IAAA,CAAA,wBAAwB,GAAG,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM;AACxE,QAAA,IAAA,CAAA,4BAA4B,GAAG;AAC9C,YAAA,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC9B,YAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI;AACjD,YAAA,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK;SACpD;AAwEF,IAAA;IAtEC,MAAM,OAAO,CAAC,KAAuC,EAAA;AACnD,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,IAAK,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,EAAE,CAA6B;SAChF;AACD,QAAA,MAAM,aAAa,IAAI,KAAK,EAAE,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAAuB;QACxF,MAAM,UAAU,GAAG,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;QACnH,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;AACA,QAAA,OAAO,CAAC,YAAY,CAAC,GAAG,UAAU;AAClC,QAAA,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEpF,OAAO,CACL,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE;AACjD,YAAA,WAAW,EAAE;gBACX,MAAM,EAAE,IAAI,CAAC,wBAAwB;gBACrC,UAAU,EAAE,IAAI,CAAC,4BAA4B;AAC7C,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,OAAO,EAAE;AACP,oBAAA,OAAO,EAAE;AACP,wBAAA,QAAQ,EAAE,KAAK;AAChB,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,KACC,EAAE,OAAO,EAAE,KAAK,EAAE;IACzB;AAEQ,IAAA,MAAM,gBAAgB,GAAA;QAC5B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnH,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,SAAS;QAClB;QAEA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CACxD,2EAA2E,CAC5E;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAC5C,YAAA,MAAM,EAAE,cAAc;YACtB,KAAK;AACL,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;AAC7C,SAAA,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC;AACnC,QAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACxD,OAAO,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,SAAS;IAChG;IAEQ,eAAe,CAAC,SAAkB,EAAE,OAAgB,EAAA;AAC1D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,OAAO,EAAE;YAC/C,OAAO,8BAA8B,CAAC,OAAO;QAC/C;QACA,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,OAAO,EAAE;YAClD,OAAO,8BAA8B,CAAC,SAAS;QACjD;QACA,OAAO,8BAA8B,CAAC,MAAM;IAC9C;AAEQ,IAAA,SAAS,CAAC,KAAc,EAAA;QAC9B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,SAAS;QAClB;QACA,MAAM,SAAS,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzE,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE;AAChC,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS;IACjD;8GAlFW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlC,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,kCAAkC,cADrB,MAAM,EAAA,CAAA,CAAA;;2FACnB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -2,7 +2,7 @@ import { AXPSystemStatuses } from '@acorex/platform/contracts';
2
2
  import { AXPEntityService } from '@acorex/platform/layout/entity';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
- import { R as RootConfig } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
5
+ import { R as RootConfig } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
6
6
 
7
7
  //#endregion
8
8
  /**
@@ -56,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
56
56
  }] });
57
57
 
58
58
  export { CancelLeaveRequestCommand };
59
- //# sourceMappingURL=acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs.map
59
+ //# sourceMappingURL=acorex-modules-human-capital-management-cancel-leave-request.command-Bd3RvlNm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/leave-request/commands/cancel-leave-request.command.ts"],"sourcesContent":["import { AXPSystemStatuses } from '@acorex/platform/contracts';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '../../../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): Promise<AXPExecuteCommandResult<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 {\n success: true,\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":";;;;;;AAeA;AAEA;;;AAGG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA0C1D,IAAA;;;IApCC,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;AACL,gBAAA,OAAO,EAAE,IAAI;aACd;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;8GA1CW,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;;;;;"}
1
+ {"version":3,"file":"acorex-modules-human-capital-management-cancel-leave-request.command-Bd3RvlNm.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/leave-request/commands/cancel-leave-request.command.ts"],"sourcesContent":["import { AXPSystemStatuses } from '@acorex/platform/contracts';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '../../../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): Promise<AXPExecuteCommandResult<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 {\n success: true,\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":";;;;;;AAeA;AAEA;;;AAGG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA0C1D,IAAA;;;IApCC,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;AACL,gBAAA,OAAO,EAAE,IAAI;aACd;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;8GA1CW,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;;;;;"}
@@ -7,7 +7,7 @@ import { AXPEntityService } from '@acorex/platform/layout/entity';
7
7
  import * as i0 from '@angular/core';
8
8
  import { inject, Injectable } from '@angular/core';
9
9
  import { trim, isNil, isEmpty, cloneDeep, defaultTo, isArray, isString, isObject } from 'lodash-es';
10
- import { b as AXMHcmProfileContextService } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
10
+ import { b as AXMHcmProfileContextService } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
11
11
  import { AXPUserProfileIdentityService } from '@acorex/modules/auth';
12
12
  import { RootConfig } from '@acorex/modules/security-management';
13
13
 
@@ -239,4 +239,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
239
239
  }] });
240
240
 
241
241
  export { AXMHcmEditPersonalInfoCommand };
242
- //# sourceMappingURL=acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs.map
242
+ //# sourceMappingURL=acorex-modules-human-capital-management-edit-personal-info.command-Drbi1WMd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/profile-page/sync-user-from-person.service.ts","../../../../libs/modules/human-capital-management/src/lib/features/profile-page/commands/edit-personal-info.command.ts"],"sourcesContent":["import { AXPUserProfileIdentityService } from '@acorex/modules/auth';\nimport {\n RootConfig as SecurityManagementRootConfig,\n AXMSecurityManagementUsersEntityModel,\n} from '@acorex/modules/security-management';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { trim } from 'lodash-es';\n\n//#region ---- Sync payload ----\n\nexport interface AXMHcmSyncUserFromPersonInput {\n firstName: string;\n lastName: string;\n image?: 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 */\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 ...(person.image !== undefined ? { avatar: person.image } : {}),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetsList } from '@acorex/platform/contracts';\nimport { RootConfig as PersonCoreRootConfig, AXMPersonCorePersonEntityModel } from '@acorex/modules/person-core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { cloneDeep, defaultTo, isArray, isEmpty, isNil, isObject, isString, trim } from 'lodash-es';\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(): Promise<AXPExecuteCommandResult<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<AXPExecuteCommandResult<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 image: person.image,\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 };\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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"}
1
+ {"version":3,"file":"acorex-modules-human-capital-management-edit-personal-info.command-Drbi1WMd.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/profile-page/sync-user-from-person.service.ts","../../../../libs/modules/human-capital-management/src/lib/features/profile-page/commands/edit-personal-info.command.ts"],"sourcesContent":["import { AXPUserProfileIdentityService } from '@acorex/modules/auth';\nimport {\n RootConfig as SecurityManagementRootConfig,\n AXMSecurityManagementUsersEntityModel,\n} from '@acorex/modules/security-management';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { trim } from 'lodash-es';\n\n//#region ---- Sync payload ----\n\nexport interface AXMHcmSyncUserFromPersonInput {\n firstName: string;\n lastName: string;\n image?: 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 */\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 ...(person.image !== undefined ? { avatar: person.image } : {}),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetsList } from '@acorex/platform/contracts';\nimport { RootConfig as PersonCoreRootConfig, AXMPersonCorePersonEntityModel } from '@acorex/modules/person-core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { cloneDeep, defaultTo, isArray, isEmpty, isNil, isObject, isString, trim } from 'lodash-es';\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(): Promise<AXPExecuteCommandResult<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<AXPExecuteCommandResult<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 image: person.image,\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 };\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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"}
@@ -5,7 +5,7 @@ import { AXPEntityService } from '@acorex/platform/layout/entity';
5
5
  import * as i0 from '@angular/core';
6
6
  import { inject, Injectable } from '@angular/core';
7
7
  import { isNil, defaultTo, isEmpty, trim } from 'lodash-es';
8
- import { b as AXMHcmProfileContextService, R as RootConfig } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
8
+ import { b as AXMHcmProfileContextService, R as RootConfig } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
9
9
 
10
10
  //#region ---- Edit signature command ----
11
11
  /** Opens the shared signature editor for the current employee record. */
@@ -72,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
72
72
  }] });
73
73
 
74
74
  export { AXMHcmEditSignatureCommand };
75
- //# sourceMappingURL=acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs.map
75
+ //# sourceMappingURL=acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/profile-page/commands/edit-signature.command.ts"],"sourcesContent":["import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPSignatureEditorService } from '@acorex/platform/layout/components';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, isEmpty, isNil, trim } from 'lodash-es';\n\nimport { RootConfig } from '../../../contracts';\nimport { AXMHumanCapitalManagementEmployeeEntityModel } from '../../../entities/employee/employee.types';\nimport { AXMHcmProfileContextService } from '../profile-context.service';\n\n//#region ---- Edit signature command ----\n\n/** Opens the shared signature editor for the current employee record. */\n@Injectable({ providedIn: 'root' })\nexport class AXMHcmEditSignatureCommand implements AXPCommand {\n //#region ---- Services & Dependencies ----\n\n private readonly signatureEditorService = inject(AXPSignatureEditorService);\n private readonly entityService = inject(AXPEntityService);\n private readonly profileContextService = inject(AXMHcmProfileContextService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(): Promise<AXPExecuteCommandResult<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-signature.messages.no-employee',\n ),\n },\n };\n }\n\n const employeeData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.employee.name)\n .data<string, AXMHumanCapitalManagementEmployeeEntityModel>();\n\n const employee = await employeeData.byKey(profileContext.employeeId);\n if (isNil(employee)) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync(\n '@human-capital-management:profile-page.commands.edit-signature.messages.employee-not-found',\n ),\n },\n };\n }\n\n const existingSignature = defaultTo(employee.signature, '');\n const submitActionKey = isEmpty(existingSignature)\n ? '@general:actions.save.title'\n : '@general:actions.update.title';\n\n const dialogTitle = await this.translateService.translateAsync(\n '@human-capital-management:profile-page.commands.edit-signature.dialog.title',\n );\n\n const result = await this.signatureEditorService.open({\n title: dialogTitle,\n value: existingSignature,\n submitActionKey,\n });\n\n if (result.action === 'cancel') {\n return { success: false };\n }\n\n const signature = trim(defaultTo(result.value, ''));\n await employeeData.update(profileContext.employeeId, { signature });\n\n const successTitle = await this.translateService.translateAsync(\n isEmpty(signature)\n ? '@human-capital-management:profile-page.commands.edit-signature.messages.removed'\n : '@human-capital-management:profile-page.commands.edit-signature.messages.success',\n );\n this.toastService.show({ color: 'success', title: successTitle });\n return { success: true };\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/profile-page/commands/edit-signature.command.ts"],"sourcesContent":["import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPSignatureEditorService } from '@acorex/platform/layout/components';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, isEmpty, isNil, trim } from 'lodash-es';\n\nimport { RootConfig } from '../../../contracts';\nimport { AXMHumanCapitalManagementEmployeeEntityModel } from '../../../entities/employee/employee.types';\nimport { AXMHcmProfileContextService } from '../profile-context.service';\n\n//#region ---- Edit signature command ----\n\n/** Opens the shared signature editor for the current employee record. */\n@Injectable({ providedIn: 'root' })\nexport class AXMHcmEditSignatureCommand implements AXPCommand {\n //#region ---- Services & Dependencies ----\n\n private readonly signatureEditorService = inject(AXPSignatureEditorService);\n private readonly entityService = inject(AXPEntityService);\n private readonly profileContextService = inject(AXMHcmProfileContextService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(): Promise<AXPExecuteCommandResult<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-signature.messages.no-employee',\n ),\n },\n };\n }\n\n const employeeData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.employee.name)\n .data<string, AXMHumanCapitalManagementEmployeeEntityModel>();\n\n const employee = await employeeData.byKey(profileContext.employeeId);\n if (isNil(employee)) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync(\n '@human-capital-management:profile-page.commands.edit-signature.messages.employee-not-found',\n ),\n },\n };\n }\n\n const existingSignature = defaultTo(employee.signature, '');\n const submitActionKey = isEmpty(existingSignature)\n ? '@general:actions.save.title'\n : '@general:actions.update.title';\n\n const dialogTitle = await this.translateService.translateAsync(\n '@human-capital-management:profile-page.commands.edit-signature.dialog.title',\n );\n\n const result = await this.signatureEditorService.open({\n title: dialogTitle,\n value: existingSignature,\n submitActionKey,\n });\n\n if (result.action === 'cancel') {\n return { success: false };\n }\n\n const signature = trim(defaultTo(result.value, ''));\n await employeeData.update(profileContext.employeeId, { signature });\n\n const successTitle = await this.translateService.translateAsync(\n isEmpty(signature)\n ? '@human-capital-management:profile-page.commands.edit-signature.messages.removed'\n : '@human-capital-management:profile-page.commands.edit-signature.messages.success',\n );\n this.toastService.show({ color: 'success', title: successTitle });\n return { success: true };\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { AXPSystemStatuses } from '@acorex/platform/contracts';
2
2
  import { AXPEntityService } from '@acorex/platform/layout/entity';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable } from '@angular/core';
5
- import { R as RootConfig } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
5
+ import { R as RootConfig } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
6
6
 
7
7
  //#endregion
8
8
  /**
@@ -59,4 +59,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
59
59
  }] });
60
60
 
61
61
  export { RejectLeaveRequestCommand };
62
- //# sourceMappingURL=acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs.map
62
+ //# sourceMappingURL=acorex-modules-human-capital-management-reject-leave-request.command-BC-1Kixd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/leave-request/commands/reject-leave-request.command.ts"],"sourcesContent":["import { AXPSystemStatuses } from '@acorex/platform/contracts';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\n\n//#region ---- Types ----\n\nexport interface RejectLeaveRequestInput {\n id: string;\n reason?: string;\n note?: string;\n}\n\n//#endregion\n\n/**\n * Reject Leave Request Command\n * Updates the leave request status to Rejected\n */\n@Injectable({ providedIn: 'root' })\nexport class RejectLeaveRequestCommand implements AXPCommand<RejectLeaveRequestInput, void> {\n //#region ---- Services ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: RejectLeaveRequestInput): Promise<AXPExecuteCommandResult<void>> {\n try {\n console.log('[RejectLeaveRequestCommand] Executing with input:', input);\n\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 Rejected\n const updateData: any = {\n statusId: AXPSystemStatuses.Rejected.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 console.log('[RejectLeaveRequestCommand] Updating entity with:', updateData);\n\n await dataAccessor.update(input.id, updateData);\n\n console.log('[RejectLeaveRequestCommand] Update successful');\n\n return {\n success: true,\n };\n } catch (error: any) {\n console.error('[RejectLeaveRequestCommand] Error:', error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to reject leave request',\n },\n };\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAeA;AAEA;;;AAGG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAgD1D,IAAA;;;IA1CC,MAAM,OAAO,CAAC,KAA8B,EAAA;AAC1C,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,KAAK,CAAC;AAEvE,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,QAAQ,CAAC,IAAI;aAC1C;;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;AAEA,YAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,UAAU,CAAC;YAE5E,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC;AAE/C,YAAA,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC;YAE5D,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;aACd;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;8GAhDW,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;;;;;"}
1
+ {"version":3,"file":"acorex-modules-human-capital-management-reject-leave-request.command-BC-1Kixd.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/leave-request/commands/reject-leave-request.command.ts"],"sourcesContent":["import { AXPSystemStatuses } from '@acorex/platform/contracts';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\n\n//#region ---- Types ----\n\nexport interface RejectLeaveRequestInput {\n id: string;\n reason?: string;\n note?: string;\n}\n\n//#endregion\n\n/**\n * Reject Leave Request Command\n * Updates the leave request status to Rejected\n */\n@Injectable({ providedIn: 'root' })\nexport class RejectLeaveRequestCommand implements AXPCommand<RejectLeaveRequestInput, void> {\n //#region ---- Services ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: RejectLeaveRequestInput): Promise<AXPExecuteCommandResult<void>> {\n try {\n console.log('[RejectLeaveRequestCommand] Executing with input:', input);\n\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 Rejected\n const updateData: any = {\n statusId: AXPSystemStatuses.Rejected.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 console.log('[RejectLeaveRequestCommand] Updating entity with:', updateData);\n\n await dataAccessor.update(input.id, updateData);\n\n console.log('[RejectLeaveRequestCommand] Update successful');\n\n return {\n success: true,\n };\n } catch (error: any) {\n console.error('[RejectLeaveRequestCommand] Error:', error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to reject leave request',\n },\n };\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAeA;AAEA;;;AAGG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAgD1D,IAAA;;;IA1CC,MAAM,OAAO,CAAC,KAA8B,EAAA;AAC1C,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,KAAK,CAAC;AAEvE,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,QAAQ,CAAC,IAAI;aAC1C;;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;AAEA,YAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,UAAU,CAAC;YAE5E,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC;AAE/C,YAAA,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC;YAE5D,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;aACd;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;8GAhDW,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;;;;;"}
@@ -3,7 +3,7 @@ import { AXTranslationService } from '@acorex/core/translation';
3
3
  import { AXPEntityService } from '@acorex/platform/layout/entity';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, Injectable } from '@angular/core';
6
- import { A as AXM_POSITION_ASSIGNMENT_STATUS, R as RootConfig, a as AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
6
+ import { A as AXM_POSITION_ASSIGNMENT_STATUS, R as RootConfig, a as AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
7
7
 
8
8
  class AXMRevokePositionAssignmentByIdCommand {
9
9
  constructor() {
@@ -105,4 +105,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
105
105
  }] });
106
106
 
107
107
  export { AXMRevokePositionAssignmentByIdCommand };
108
- //# sourceMappingURL=acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs.map
108
+ //# sourceMappingURL=acorex-modules-human-capital-management-revoke-position-assignment.command-Caylq9Rv.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/organization-chart/commands/revoke-position-assignment.command.ts"],"sourcesContent":["import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\nimport {\n AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS,\n AXM_POSITION_ASSIGNMENT_STATUS,\n} from '../../../contracts';\n\nexport interface AXMRevokePositionAssignmentByIdInput {\n __context__?: {\n data?: unknown;\n };\n data?: unknown;\n id?: unknown;\n positionId?: string;\n employeeId?: string;\n businessUnitId?: string;\n /** When true, do not show the revoke confirmation (caller already confirmed). */\n skipConfirmation?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXMRevokePositionAssignmentByIdCommand\n implements AXPCommand<AXMRevokePositionAssignmentByIdInput, { revokedCount: number }>\n{\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityService = inject(AXPEntityService);\n\n async execute(\n input: AXMRevokePositionAssignmentByIdInput,\n ): Promise<AXPExecuteCommandResult<{ revokedCount: number }>> {\n let ids = this.extractIds(input);\n if (!ids.length && input.positionId && input.employeeId) {\n ids = await this.findOverlappingLifecycleAssignmentIds(\n input.positionId,\n input.employeeId,\n input.businessUnitId,\n );\n }\n if (!ids.length) {\n if (input.skipConfirmation) {\n return { success: true, data: { revokedCount: 0 } };\n }\n return { success: false };\n }\n\n if (!input.skipConfirmation) {\n const confirmed = await this.confirmRevoke();\n if (!confirmed) {\n return { success: false };\n }\n }\n\n const payload: Record<string, unknown> = {\n endDate: new Date().toISOString(),\n statusId: AXM_POSITION_ASSIGNMENT_STATUS.revoked,\n };\n const data = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.positionAssignment.name)\n .data();\n for (const id of ids) {\n await data.update(id, payload as never);\n }\n\n return { success: true, data: { revokedCount: ids.length } };\n }\n\n private async confirmRevoke(): Promise<boolean> {\n const title = await this.translationService.translateAsync(\n '@human-capital-management:position-assignments.entities.position-assignment.actions.revoke.confirm.title',\n );\n const message = await this.translationService.translateAsync(\n '@human-capital-management:position-assignments.entities.position-assignment.actions.revoke.confirm.message',\n );\n const result = await this.dialogService.confirm(title, message, 'danger', 'horizontal', false, 'cancel');\n return result.result === true;\n }\n\n private extractIds(input: AXMRevokePositionAssignmentByIdInput): string[] {\n const raw = input?.__context__?.data ?? input?.data ?? input?.id ?? input;\n const values = Array.isArray(raw) ? raw : [raw];\n return values\n .map((value) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object') {\n const id = (value as { id?: unknown })['id'];\n return typeof id === 'string' ? id : '';\n }\n return '';\n })\n .filter((id) => id.trim().length > 0);\n }\n\n /**\n * Resolves assignment rows that still participate in overlap checks (active + scheduled).\n * Revoking only `active` left future-dated `scheduled` rows and blocked new assignments.\n */\n private async findOverlappingLifecycleAssignmentIds(\n positionId: string,\n employeeId: string,\n businessUnitId?: string,\n ): Promise<string[]> {\n const filters: AXDataSourceFilterOption[] = [\n { field: 'positionId', operator: { type: 'equal' }, value: positionId },\n { field: 'employeeId', operator: { type: 'equal' }, value: employeeId },\n { field: 'statusId', operator: { type: 'in' }, value: [...AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS] },\n ];\n if (businessUnitId) {\n filters.push({ field: 'businessUnitId', operator: { type: 'equal' }, value: businessUnitId });\n }\n\n const result = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.positionAssignment.name)\n .data()\n .query({\n skip: 0,\n take: 50,\n sort: [{ field: 'startDate', dir: 'desc' }],\n filter: { logic: 'and', filters },\n });\n\n const items = (result.items ?? []) as Array<{ id?: string }>;\n const seen = new Set<string>();\n const ids: string[] = [];\n for (const item of items) {\n const id = typeof item.id === 'string' && item.id.trim().length > 0 ? item.id.trim() : '';\n if (id && !seen.has(id)) {\n seen.add(id);\n ids.push(id);\n }\n }\n return ids;\n }\n}\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-human-capital-management-revoke-position-assignment.command-Caylq9Rv.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/organization-chart/commands/revoke-position-assignment.command.ts"],"sourcesContent":["import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\nimport {\n AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS,\n AXM_POSITION_ASSIGNMENT_STATUS,\n} from '../../../contracts';\n\nexport interface AXMRevokePositionAssignmentByIdInput {\n __context__?: {\n data?: unknown;\n };\n data?: unknown;\n id?: unknown;\n positionId?: string;\n employeeId?: string;\n businessUnitId?: string;\n /** When true, do not show the revoke confirmation (caller already confirmed). */\n skipConfirmation?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXMRevokePositionAssignmentByIdCommand\n implements AXPCommand<AXMRevokePositionAssignmentByIdInput, { revokedCount: number }>\n{\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityService = inject(AXPEntityService);\n\n async execute(\n input: AXMRevokePositionAssignmentByIdInput,\n ): Promise<AXPExecuteCommandResult<{ revokedCount: number }>> {\n let ids = this.extractIds(input);\n if (!ids.length && input.positionId && input.employeeId) {\n ids = await this.findOverlappingLifecycleAssignmentIds(\n input.positionId,\n input.employeeId,\n input.businessUnitId,\n );\n }\n if (!ids.length) {\n if (input.skipConfirmation) {\n return { success: true, data: { revokedCount: 0 } };\n }\n return { success: false };\n }\n\n if (!input.skipConfirmation) {\n const confirmed = await this.confirmRevoke();\n if (!confirmed) {\n return { success: false };\n }\n }\n\n const payload: Record<string, unknown> = {\n endDate: new Date().toISOString(),\n statusId: AXM_POSITION_ASSIGNMENT_STATUS.revoked,\n };\n const data = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.positionAssignment.name)\n .data();\n for (const id of ids) {\n await data.update(id, payload as never);\n }\n\n return { success: true, data: { revokedCount: ids.length } };\n }\n\n private async confirmRevoke(): Promise<boolean> {\n const title = await this.translationService.translateAsync(\n '@human-capital-management:position-assignments.entities.position-assignment.actions.revoke.confirm.title',\n );\n const message = await this.translationService.translateAsync(\n '@human-capital-management:position-assignments.entities.position-assignment.actions.revoke.confirm.message',\n );\n const result = await this.dialogService.confirm(title, message, 'danger', 'horizontal', false, 'cancel');\n return result.result === true;\n }\n\n private extractIds(input: AXMRevokePositionAssignmentByIdInput): string[] {\n const raw = input?.__context__?.data ?? input?.data ?? input?.id ?? input;\n const values = Array.isArray(raw) ? raw : [raw];\n return values\n .map((value) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object') {\n const id = (value as { id?: unknown })['id'];\n return typeof id === 'string' ? id : '';\n }\n return '';\n })\n .filter((id) => id.trim().length > 0);\n }\n\n /**\n * Resolves assignment rows that still participate in overlap checks (active + scheduled).\n * Revoking only `active` left future-dated `scheduled` rows and blocked new assignments.\n */\n private async findOverlappingLifecycleAssignmentIds(\n positionId: string,\n employeeId: string,\n businessUnitId?: string,\n ): Promise<string[]> {\n const filters: AXDataSourceFilterOption[] = [\n { field: 'positionId', operator: { type: 'equal' }, value: positionId },\n { field: 'employeeId', operator: { type: 'equal' }, value: employeeId },\n { field: 'statusId', operator: { type: 'in' }, value: [...AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS] },\n ];\n if (businessUnitId) {\n filters.push({ field: 'businessUnitId', operator: { type: 'equal' }, value: businessUnitId });\n }\n\n const result = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.positionAssignment.name)\n .data()\n .query({\n skip: 0,\n take: 50,\n sort: [{ field: 'startDate', dir: 'desc' }],\n filter: { logic: 'and', filters },\n });\n\n const items = (result.items ?? []) as Array<{ id?: string }>;\n const seen = new Set<string>();\n const ids: string[] = [];\n for (const item of items) {\n const id = typeof item.id === 'string' && item.id.trim().length > 0 ? item.id.trim() : '';\n if (id && !seen.has(id)) {\n seen.add(id);\n ids.push(id);\n }\n }\n return ids;\n }\n}\n\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { AXPEntityService, AXPEntityStorageService, getRecordWorkflowInstanceId
6
6
  import { AXPWorkflowManager, AXP_WORKFLOW_ENGINE } from '@acorex/platform/workflow';
7
7
  import * as i0 from '@angular/core';
8
8
  import { inject, Injectable } from '@angular/core';
9
- import { R as RootConfig, d as AXMLeaveRequestOpenStatusIds } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
9
+ import { R as RootConfig, d as AXMLeaveRequestOpenStatusIds } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
10
10
 
11
11
  //#region ---- Imports ----
12
12
  //#endregion
@@ -239,4 +239,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
239
239
  }] });
240
240
 
241
241
  export { StartLeaveRequestFlowCommand };
242
- //# sourceMappingURL=acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs.map
242
+ //# sourceMappingURL=acorex-modules-human-capital-management-start-leave-request-flow.command-BsEwA1VM.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/leave-request/commands/start-leave-request-flow.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXMultiLanguageString, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPSystemStatusType } from '@acorex/platform/contracts';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport {\n AXPEntityService,\n AXPEntityStorageService,\n getRecordWorkflowInstanceId,\n} from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport {\n AXP_WORKFLOW_ENGINE,\n AXPWorkflowEngine,\n AXPWorkflowManager,\n} from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\nimport { AXMLeaveRequestOpenStatusIds } from '../../../contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface StartLeaveRequestFlowInput {\n __context__?: {\n options?: StartLeaveRequestFlowOptions;\n };\n workflowId?: string;\n employeeId?: string;\n employeeDisplayName?: string;\n leaveTypeId?: string;\n leaveTypeTitle?: AXMultiLanguageString | string;\n}\n\nexport interface StartLeaveRequestFlowOptions {\n workflowId: string;\n input: {\n employeeId?: string;\n employeeDisplayName?: string;\n leaveTypeId: string;\n leaveTypeTitle?: AXMultiLanguageString | string;\n };\n}\n\ninterface OpenLeaveRequestRow {\n id: string;\n workflowInfo?: { instanceId?: string | null; correlationId?: string | null };\n leaveType?: { title?: AXMultiLanguageString | string };\n}\n\n//#endregion\n\n/**\n * Starts the leave request workflow after ensuring at most one pending request per employee and leave type.\n */\n@Injectable({ providedIn: 'root' })\nexport class StartLeaveRequestFlowCommand implements AXPCommand<StartLeaveRequestFlowInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly entityService = inject(AXPEntityService);\n private readonly entityStorageService = inject(AXPEntityStorageService);\n private readonly workflowManager = inject(AXPWorkflowManager);\n private readonly workflowEngine = inject(AXP_WORKFLOW_ENGINE, { optional: true });\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: StartLeaveRequestFlowInput): Promise<AXPExecuteCommandResult<void>> {\n const options = (input?.__context__?.options ?? input) as StartLeaveRequestFlowOptions;\n const flowInput = options.input;\n const workflowId = options.workflowId?.trim();\n const leaveTypeId = flowInput?.leaveTypeId?.trim();\n const employeeId = this.resolveFlowText(flowInput?.employeeId);\n const employeeDisplayName = this.resolveFlowText(flowInput?.employeeDisplayName);\n const leaveTypeTitleForWorkflow = this.coerceLeaveTypeTitleForWorkflow(flowInput?.leaveTypeTitle);\n const leaveTypeTitleDisplay = this.resolveFlowText(flowInput?.leaveTypeTitle);\n\n if (!workflowId || !leaveTypeId) {\n return { success: false, message: { text: 'Missing workflow or leave type context.' } };\n }\n\n try {\n const openRequests = employeeId\n ? await this.findOpenLeaveRequests(employeeId, leaveTypeId)\n : [];\n const orphanInstanceIds = employeeId\n ? await this.findOrphanRunningWorkflowInstanceIds(\n employeeId,\n leaveTypeId,\n workflowId,\n openRequests,\n )\n : [];\n\n if (openRequests.length > 0 || orphanInstanceIds.length > 0) {\n const confirmed = await this.confirmReplace(leaveTypeTitleDisplay);\n if (!confirmed) {\n return { success: false };\n }\n await this.closeOpenRuns(openRequests, orphanInstanceIds);\n }\n\n const correlationId = employeeId\n ? this.buildCorrelationId(employeeId, leaveTypeId, workflowId)\n : undefined;\n\n const startResult = await this.workflowManager.start(workflowId, {\n leaveTypeId,\n ...(leaveTypeTitleForWorkflow != null ? { leaveTypeTitle: leaveTypeTitleForWorkflow } : {}),\n ...(employeeId ? { employeeId, employeeDisplayName } : {}),\n ...(employeeId\n ? {\n refId: employeeId,\n refType: `${RootConfig.module.name}.Employee`,\n correlationId,\n }\n : {}),\n });\n\n if (!startResult.success) {\n this.toastService.show({\n color: 'danger',\n title: 'Workflow Execution Failed',\n content: startResult.error ?? 'Unknown error',\n closeButton: true,\n timeOut: 5000,\n });\n return { success: false, message: { text: startResult.error ?? 'Unknown error' } };\n }\n\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error('[StartLeaveRequestFlowCommand]', error);\n this.toastService.show({\n color: 'danger',\n title: 'Workflow Execution Error',\n content: message,\n closeButton: true,\n timeOut: 5000,\n });\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ---- Open-run detection ----\n\n private async findOpenLeaveRequests(\n employeeId: string,\n leaveTypeId: string,\n ): Promise<OpenLeaveRequestRow[]> {\n const page = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.leaveRequest.name)\n .data()\n .query({\n skip: 0,\n take: 10,\n filter: {\n logic: 'and',\n filters: [\n { field: 'employeeId', operator: { type: 'equal' }, value: employeeId },\n { field: 'leaveTypeId', operator: { type: 'equal' }, value: leaveTypeId },\n {\n field: 'statusId',\n operator: { type: 'in' },\n value: [...AXMLeaveRequestOpenStatusIds],\n },\n ],\n },\n });\n\n return (page.items ?? []) as OpenLeaveRequestRow[];\n }\n\n private async findOrphanRunningWorkflowInstanceIds(\n employeeId: string,\n leaveTypeId: string,\n workflowId: string,\n openRequests: OpenLeaveRequestRow[],\n ): Promise<string[]> {\n const linkedInstanceIds = new Set(\n openRequests\n .map((row) => getRecordWorkflowInstanceId(row))\n .filter((id): id is string => !!id),\n );\n\n try {\n const page = await this.entityStorageService.query('WorkflowManagement.WorkflowInstance', {\n skip: 0,\n take: 50,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'definitionId',\n operator: { type: 'equal' },\n value: workflowId,\n },\n { field: 'status', operator: { type: 'equal' }, value: 'Running' },\n ],\n },\n });\n\n const items = (page.items ?? []) as Array<{\n id?: string;\n workflowInstance?: { workflowState?: { input?: Record<string, unknown> } };\n }>;\n\n return items\n .filter((row) => {\n const id = row.id?.trim();\n if (!id || linkedInstanceIds.has(id)) {\n return false;\n }\n const runInput = row.workflowInstance?.workflowState?.input ?? {};\n return runInput['employeeId'] === employeeId && runInput['leaveTypeId'] === leaveTypeId;\n })\n .map((row) => row.id as string);\n } catch {\n return [];\n }\n }\n\n //#endregion\n\n //#region ---- Close and replace ----\n\n private async confirmReplace(leaveTypeTitle: string | undefined): Promise<boolean> {\n const title = await this.translationService.translateAsync(\n '@human-capital-management:leave-requests.messages.replace-open.confirm.title',\n );\n const message = await this.translationService.translateAsync(\n '@human-capital-management:leave-requests.messages.replace-open.confirm.message',\n {\n params: {\n leaveTypeTitle: String(leaveTypeTitle ?? '').trim() || '—',\n },\n },\n );\n const result = await this.dialogService.confirm(title, message, 'warning', 'horizontal', false, 'cancel');\n return result.result === true;\n }\n\n private async closeOpenRuns(\n openRequests: OpenLeaveRequestRow[],\n orphanInstanceIds: string[],\n ): Promise<void> {\n const data = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.leaveRequest.name)\n .data();\n\n const supersedeNote = 'Closed to start a new leave request run.';\n\n for (const request of openRequests) {\n await data.update(request.id, {\n statusId: AXPSystemStatusType.Cancelled,\n reason: supersedeNote,\n } as never);\n\n const instanceId = getRecordWorkflowInstanceId(request);\n if (instanceId) {\n await this.cancelWorkflowInstance(instanceId);\n }\n }\n\n for (const instanceId of orphanInstanceIds) {\n await this.cancelWorkflowInstance(instanceId);\n }\n }\n\n private async cancelWorkflowInstance(instanceId: string): Promise<void> {\n const engine = this.workflowEngine as AXPWorkflowEngine | null;\n if (engine?.cancelInstance) {\n await engine.cancelInstance(instanceId, 'superseded');\n return;\n }\n\n const now = new Date().toISOString();\n try {\n await this.entityStorageService.updateOne('WorkflowManagement.WorkflowInstance', instanceId, {\n status: 'Finished',\n subStatus: 'Cancelled',\n finishedAt: now,\n updatedAt: now,\n });\n } catch (error: unknown) {\n console.warn('[StartLeaveRequestFlowCommand] Failed to cancel workflow instance:', instanceId, error);\n }\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private resolveFlowText(value: unknown): string {\n if (value == null || value === false) {\n return '';\n }\n if (typeof value === 'string') {\n return value.trim();\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value).trim();\n }\n return resolveMultiLanguageString(value as never, this.translationService.getActiveLang()).trim();\n }\n\n /** Preserves multi-language leave type titles on the workflow instance for locale-aware task labels. */\n private coerceLeaveTypeTitleForWorkflow(\n value: AXMultiLanguageString | string | undefined,\n ): AXMultiLanguageString | string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'object') {\n return value;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n private buildCorrelationId(employeeId: string, leaveTypeId: string, workflowId: string): string {\n return `${RootConfig.module.name}.Employee:${employeeId}:${leaveTypeId}:${workflowId}`;\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-human-capital-management-start-leave-request-flow.command-BsEwA1VM.mjs","sources":["../../../../libs/modules/human-capital-management/src/lib/features/leave-request/commands/start-leave-request-flow.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXMultiLanguageString, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPSystemStatusType } from '@acorex/platform/contracts';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport {\n AXPEntityService,\n AXPEntityStorageService,\n getRecordWorkflowInstanceId,\n} from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport {\n AXP_WORKFLOW_ENGINE,\n AXPWorkflowEngine,\n AXPWorkflowManager,\n} from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../contracts';\nimport { AXMLeaveRequestOpenStatusIds } from '../../../contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface StartLeaveRequestFlowInput {\n __context__?: {\n options?: StartLeaveRequestFlowOptions;\n };\n workflowId?: string;\n employeeId?: string;\n employeeDisplayName?: string;\n leaveTypeId?: string;\n leaveTypeTitle?: AXMultiLanguageString | string;\n}\n\nexport interface StartLeaveRequestFlowOptions {\n workflowId: string;\n input: {\n employeeId?: string;\n employeeDisplayName?: string;\n leaveTypeId: string;\n leaveTypeTitle?: AXMultiLanguageString | string;\n };\n}\n\ninterface OpenLeaveRequestRow {\n id: string;\n workflowInfo?: { instanceId?: string | null; correlationId?: string | null };\n leaveType?: { title?: AXMultiLanguageString | string };\n}\n\n//#endregion\n\n/**\n * Starts the leave request workflow after ensuring at most one pending request per employee and leave type.\n */\n@Injectable({ providedIn: 'root' })\nexport class StartLeaveRequestFlowCommand implements AXPCommand<StartLeaveRequestFlowInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly entityService = inject(AXPEntityService);\n private readonly entityStorageService = inject(AXPEntityStorageService);\n private readonly workflowManager = inject(AXPWorkflowManager);\n private readonly workflowEngine = inject(AXP_WORKFLOW_ENGINE, { optional: true });\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: StartLeaveRequestFlowInput): Promise<AXPExecuteCommandResult<void>> {\n const options = (input?.__context__?.options ?? input) as StartLeaveRequestFlowOptions;\n const flowInput = options.input;\n const workflowId = options.workflowId?.trim();\n const leaveTypeId = flowInput?.leaveTypeId?.trim();\n const employeeId = this.resolveFlowText(flowInput?.employeeId);\n const employeeDisplayName = this.resolveFlowText(flowInput?.employeeDisplayName);\n const leaveTypeTitleForWorkflow = this.coerceLeaveTypeTitleForWorkflow(flowInput?.leaveTypeTitle);\n const leaveTypeTitleDisplay = this.resolveFlowText(flowInput?.leaveTypeTitle);\n\n if (!workflowId || !leaveTypeId) {\n return { success: false, message: { text: 'Missing workflow or leave type context.' } };\n }\n\n try {\n const openRequests = employeeId\n ? await this.findOpenLeaveRequests(employeeId, leaveTypeId)\n : [];\n const orphanInstanceIds = employeeId\n ? await this.findOrphanRunningWorkflowInstanceIds(\n employeeId,\n leaveTypeId,\n workflowId,\n openRequests,\n )\n : [];\n\n if (openRequests.length > 0 || orphanInstanceIds.length > 0) {\n const confirmed = await this.confirmReplace(leaveTypeTitleDisplay);\n if (!confirmed) {\n return { success: false };\n }\n await this.closeOpenRuns(openRequests, orphanInstanceIds);\n }\n\n const correlationId = employeeId\n ? this.buildCorrelationId(employeeId, leaveTypeId, workflowId)\n : undefined;\n\n const startResult = await this.workflowManager.start(workflowId, {\n leaveTypeId,\n ...(leaveTypeTitleForWorkflow != null ? { leaveTypeTitle: leaveTypeTitleForWorkflow } : {}),\n ...(employeeId ? { employeeId, employeeDisplayName } : {}),\n ...(employeeId\n ? {\n refId: employeeId,\n refType: `${RootConfig.module.name}.Employee`,\n correlationId,\n }\n : {}),\n });\n\n if (!startResult.success) {\n this.toastService.show({\n color: 'danger',\n title: 'Workflow Execution Failed',\n content: startResult.error ?? 'Unknown error',\n closeButton: true,\n timeOut: 5000,\n });\n return { success: false, message: { text: startResult.error ?? 'Unknown error' } };\n }\n\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error('[StartLeaveRequestFlowCommand]', error);\n this.toastService.show({\n color: 'danger',\n title: 'Workflow Execution Error',\n content: message,\n closeButton: true,\n timeOut: 5000,\n });\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ---- Open-run detection ----\n\n private async findOpenLeaveRequests(\n employeeId: string,\n leaveTypeId: string,\n ): Promise<OpenLeaveRequestRow[]> {\n const page = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.leaveRequest.name)\n .data()\n .query({\n skip: 0,\n take: 10,\n filter: {\n logic: 'and',\n filters: [\n { field: 'employeeId', operator: { type: 'equal' }, value: employeeId },\n { field: 'leaveTypeId', operator: { type: 'equal' }, value: leaveTypeId },\n {\n field: 'statusId',\n operator: { type: 'in' },\n value: [...AXMLeaveRequestOpenStatusIds],\n },\n ],\n },\n });\n\n return (page.items ?? []) as OpenLeaveRequestRow[];\n }\n\n private async findOrphanRunningWorkflowInstanceIds(\n employeeId: string,\n leaveTypeId: string,\n workflowId: string,\n openRequests: OpenLeaveRequestRow[],\n ): Promise<string[]> {\n const linkedInstanceIds = new Set(\n openRequests\n .map((row) => getRecordWorkflowInstanceId(row))\n .filter((id): id is string => !!id),\n );\n\n try {\n const page = await this.entityStorageService.query('WorkflowManagement.WorkflowInstance', {\n skip: 0,\n take: 50,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'definitionId',\n operator: { type: 'equal' },\n value: workflowId,\n },\n { field: 'status', operator: { type: 'equal' }, value: 'Running' },\n ],\n },\n });\n\n const items = (page.items ?? []) as Array<{\n id?: string;\n workflowInstance?: { workflowState?: { input?: Record<string, unknown> } };\n }>;\n\n return items\n .filter((row) => {\n const id = row.id?.trim();\n if (!id || linkedInstanceIds.has(id)) {\n return false;\n }\n const runInput = row.workflowInstance?.workflowState?.input ?? {};\n return runInput['employeeId'] === employeeId && runInput['leaveTypeId'] === leaveTypeId;\n })\n .map((row) => row.id as string);\n } catch {\n return [];\n }\n }\n\n //#endregion\n\n //#region ---- Close and replace ----\n\n private async confirmReplace(leaveTypeTitle: string | undefined): Promise<boolean> {\n const title = await this.translationService.translateAsync(\n '@human-capital-management:leave-requests.messages.replace-open.confirm.title',\n );\n const message = await this.translationService.translateAsync(\n '@human-capital-management:leave-requests.messages.replace-open.confirm.message',\n {\n params: {\n leaveTypeTitle: String(leaveTypeTitle ?? '').trim() || '—',\n },\n },\n );\n const result = await this.dialogService.confirm(title, message, 'warning', 'horizontal', false, 'cancel');\n return result.result === true;\n }\n\n private async closeOpenRuns(\n openRequests: OpenLeaveRequestRow[],\n orphanInstanceIds: string[],\n ): Promise<void> {\n const data = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.leaveRequest.name)\n .data();\n\n const supersedeNote = 'Closed to start a new leave request run.';\n\n for (const request of openRequests) {\n await data.update(request.id, {\n statusId: AXPSystemStatusType.Cancelled,\n reason: supersedeNote,\n } as never);\n\n const instanceId = getRecordWorkflowInstanceId(request);\n if (instanceId) {\n await this.cancelWorkflowInstance(instanceId);\n }\n }\n\n for (const instanceId of orphanInstanceIds) {\n await this.cancelWorkflowInstance(instanceId);\n }\n }\n\n private async cancelWorkflowInstance(instanceId: string): Promise<void> {\n const engine = this.workflowEngine as AXPWorkflowEngine | null;\n if (engine?.cancelInstance) {\n await engine.cancelInstance(instanceId, 'superseded');\n return;\n }\n\n const now = new Date().toISOString();\n try {\n await this.entityStorageService.updateOne('WorkflowManagement.WorkflowInstance', instanceId, {\n status: 'Finished',\n subStatus: 'Cancelled',\n finishedAt: now,\n updatedAt: now,\n });\n } catch (error: unknown) {\n console.warn('[StartLeaveRequestFlowCommand] Failed to cancel workflow instance:', instanceId, error);\n }\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private resolveFlowText(value: unknown): string {\n if (value == null || value === false) {\n return '';\n }\n if (typeof value === 'string') {\n return value.trim();\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value).trim();\n }\n return resolveMultiLanguageString(value as never, this.translationService.getActiveLang()).trim();\n }\n\n /** Preserves multi-language leave type titles on the workflow instance for locale-aware task labels. */\n private coerceLeaveTypeTitleForWorkflow(\n value: AXMultiLanguageString | string | undefined,\n ): AXMultiLanguageString | string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'object') {\n return value;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n private buildCorrelationId(employeeId: string, leaveTypeId: string, workflowId: string): string {\n return `${RootConfig.module.name}.Employee:${employeeId}:${leaveTypeId}:${workflowId}`;\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { AXPEntityService, AXPEntityStorageService, getRecordWorkflowInstanceId
6
6
  import { AXPWorkflowManager, AXP_WORKFLOW_ENGINE } from '@acorex/platform/workflow';
7
7
  import * as i0 from '@angular/core';
8
8
  import { inject, Injectable } from '@angular/core';
9
- import { R as RootConfig, c as AXMLifecycleEventOpenStatusIds } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs';
9
+ import { R as RootConfig, c as AXMLifecycleEventOpenStatusIds } from './acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs';
10
10
 
11
11
  //#region ---- Imports ----
12
12
  //#endregion
@@ -241,4 +241,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
241
241
  }] });
242
242
 
243
243
  export { StartLifecycleEventFlowCommand };
244
- //# sourceMappingURL=acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs.map
244
+ //# sourceMappingURL=acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B8xK2iTn.mjs.map