@acorex-platform/module-timesheet-management-client 0.0.33 → 0.0.38

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 (35) hide show
  1. package/fesm2022/acorex-platform-module-timesheet-management-client-admin-adjust-timesheet-period.command-8lA7h4rI.mjs.map +1 -1
  2. package/fesm2022/acorex-platform-module-timesheet-management-client-approval-inbox.query-Wyz_jjxb.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-module-timesheet-management-client-approve-timesheet-period.command-DlAeGANo.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-module-timesheet-management-client-compare-attendance-vs-timesheet.query-ZZym5nSx.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entities-time-entry.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entities-timesheet-correction.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entities-timesheet-period.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entities-timesheet-policy.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entities-work-item.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entity-catalog-acorex-platform-module-timesheet-management-client-contracts-entity-catalog-BbB3MCCl.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entity-catalog-time-entry.entity-CAs7zUnV.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entity-catalog-timesheet-correction.entity--wZeCM5Q.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entity-catalog-timesheet-period.entity-BOyfB4YA.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entity-catalog-timesheet-policy.entity-CqqN7Xty.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts-entity-catalog-work-item.entity-DilF7u50.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-module-timesheet-management-client-contracts.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-module-timesheet-management-client-create-time-entry.command-DS2EVLym.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-module-timesheet-management-client-delete-time-entry.command-5_ItHpnx.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-module-timesheet-management-client-local-entities.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-module-timesheet-management-client-lock-timesheet-period.command-D7V7SWUK.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-module-timesheet-management-client-my-timesheet-grid.query-DlDY3tdF.mjs.map +1 -1
  22. package/fesm2022/acorex-platform-module-timesheet-management-client-reject-timesheet-period.command-CONxKPNm.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-module-timesheet-management-client-reopen-timesheet-period.command-DRr_c67L.mjs.map +1 -1
  24. package/fesm2022/acorex-platform-module-timesheet-management-client-report-billable-summary.query-BeLk4Of7.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-module-timesheet-management-client-report-hours-by-project.query-Sp8cLnTC.mjs.map +1 -1
  26. package/fesm2022/acorex-platform-module-timesheet-management-client-report-hours-by-work-item.query-C8RU9Uc0.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-module-timesheet-management-client-submit-timesheet-period.command-C2qlQVIC.mjs.map +1 -1
  28. package/fesm2022/acorex-platform-module-timesheet-management-client-team-timesheets.query-B0QpkVEI.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-module-timesheet-management-client-timesheet-validation.service-DMrJn3HU.mjs.map +1 -1
  30. package/fesm2022/acorex-platform-module-timesheet-management-client-update-time-entry.command-Do6s9OrI.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-module-timesheet-management-client-work-item-search.query-BA2kvF-S.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-module-timesheet-management-client-workforce-exception-report.query-0q-AITic.mjs.map +1 -1
  33. package/fesm2022/acorex-platform-module-timesheet-management-client.mjs +1 -1
  34. package/fesm2022/acorex-platform-module-timesheet-management-client.mjs.map +1 -1
  35. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-timesheet-management-client-submit-timesheet-period.command-C2qlQVIC.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/timesheet-period/commands/submit-timesheet-period.command.ts"],"sourcesContent":["\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult, AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPeriodEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport { AXMTimesheetValidationService } from '../timesheet-validation.service';\n\n//#region ---- Types ----\n\nexport interface SubmitTimesheetPeriodInput {\n id: string;\n}\n\n//#endregion\n\n/**\n * Submits a draft timesheet period for approval.\n */\n@Injectable({ providedIn: 'root' })\nexport class SubmitTimesheetPeriodCommand implements AXPCommand<SubmitTimesheetPeriodInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly validationService = inject(AXMTimesheetValidationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: SubmitTimesheetPeriodInput): AXPCommandExecuteResultPromise<void> {\n try {\n const dataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const period = await dataAccessor.byKey(input.id);\n if (!period) {\n return { success: false, message: { text: 'Timesheet period not found.' } };\n }\n\n this.validationService.assertCanSubmit(period);\n\n await dataAccessor.update(input.id, {\n statusId: AXPSystemStatusType.WaitingApproval,\n submittedAt: new Date().toISOString(),\n });\n\n return { success: true, kind: 'object', data: undefined };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to submit timesheet period.';\n console.error('[SubmitTimesheetPeriodCommand] Error:', error);\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;;AAiBA;AAEA;;AAEG;MAEU,4BAA4B,CAAA;AADzC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAiC3E,IAAA;;;IA3BC,MAAM,OAAO,CAAC,KAAiC,EAAA;AAC7C,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,iBAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI;AAC3E,iBAAA,IAAI,EAA4D;YAEnE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE;YAC7E;AAEA,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC;AAE9C,YAAA,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBAClC,QAAQ,EAAE,mBAAmB,CAAC,eAAe;AAC7C,gBAAA,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACtC,aAAA,CAAC;AAEF,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3D;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,oCAAoC;AAC7F,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;AAC7D,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;8GAlCW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,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,4BAA4B,cADf,MAAM,EAAA,CAAA,CAAA;;2FACnB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-platform-module-timesheet-management-client-submit-timesheet-period.command-C2qlQVIC.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/timesheet-period/commands/submit-timesheet-period.command.ts"],"sourcesContent":["\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult, AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPeriodEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport { AXMTimesheetValidationService } from '../timesheet-validation.service';\n\n//#region ---- Types ----\n\nexport interface SubmitTimesheetPeriodInput {\n id: string;\n}\n\n//#endregion\n\n/**\n * Submits a draft timesheet period for approval.\n */\n@Injectable({ providedIn: 'root' })\nexport class SubmitTimesheetPeriodCommand implements AXPCommand<SubmitTimesheetPeriodInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly validationService = inject(AXMTimesheetValidationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: SubmitTimesheetPeriodInput): AXPCommandExecuteResultPromise<void> {\n try {\n const dataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const period = await dataAccessor.byKey(input.id);\n if (!period) {\n return { success: false, message: { text: 'Timesheet period not found.' } };\n }\n\n this.validationService.assertCanSubmit(period);\n\n await dataAccessor.update(input.id, {\n statusId: AXPSystemStatusType.WaitingApproval,\n submittedAt: new Date().toISOString(),\n });\n\n return { success: true, kind: 'object', data: undefined };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to submit timesheet period.';\n console.error('[SubmitTimesheetPeriodCommand] Error:', error);\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;;AAiBA;AAEA;;AAEG;MAEU,4BAA4B,CAAA;AADzC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAiC3E,IAAA;;;IA3BC,MAAM,OAAO,CAAC,KAAiC,EAAA;AAC7C,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,iBAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI;AAC3E,iBAAA,IAAI,EAA4D;YAEnE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE;YAC7E;AAEA,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC;AAE9C,YAAA,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBAClC,QAAQ,EAAE,mBAAmB,CAAC,eAAe;AAC7C,gBAAA,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACtC,aAAA,CAAC;AAEF,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3D;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,oCAAoC;AAC7F,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;AAC7D,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;8GAlCW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,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,4BAA4B,cADf,MAAM,EAAA,CAAA,CAAA;;2FACnB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-timesheet-management-client-team-timesheets.query-B0QpkVEI.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/reporting/queries/team-timesheets.query.ts"],"sourcesContent":["import { AXPQuery, type AXPQueryFetchResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport {\n runtimeQueryFailure,\n runtimeQuerySuccessCollection,\n type AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPeriodEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- Types ----\n\nexport interface AXMTeamTimesheetsQueryInput {\n managerEmployeeId?: string;\n statusId?: string;\n skip?: number;\n take?: number;\n}\n\n//#endregion\n\n/**\n * Lists timesheet periods for direct reports or team members.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMTeamTimesheetsQuery\n implements AXPQuery<AXMTeamTimesheetsQueryInput, AXMTimesheetManagementTimesheetPeriodEntityModel>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Query Execution ----\n\n async fetch(\n input?: AXMTeamTimesheetsQueryInput | null,\n ): AXPQueryFetchResultPromise<AXMTimesheetManagementTimesheetPeriodEntityModel> {\n try {\n const opts = input ?? {};\n const periodAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const filters: AXDataSourceFilterOption[] = [];\n if (opts.statusId) {\n filters.push({ field: 'statusId', operator: { type: 'equal' }, value: opts.statusId });\n }\n\n const result = await periodAccessor.query({\n skip: opts.skip ?? 0,\n take: opts.take ?? 50,\n sort: [{ field: 'startDate', dir: 'desc' }],\n ...(filters.length\n ? { filter: { logic: 'and', filters } }\n : {}),\n });\n\n return runtimeQuerySuccessCollection({ items: result.items, total: result.total });\n } catch (error) {\n return runtimeQueryFailure(\n error instanceof Error ? error.message : 'Failed to load team timesheets.',\n );\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAsBA;AAEA;;AAEG;MAEU,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAsC1D,IAAA;;;IAhCC,MAAM,KAAK,CACT,KAA0C,EAAA;AAE1C,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;AACxB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AACzB,iBAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI;AAC3E,iBAAA,IAAI,EAA4D;YAEnE,MAAM,OAAO,GAA+B,EAAE;AAC9C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxF;AAEA,YAAA,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC;AACxC,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;AACpB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;gBAC3C,IAAI,OAAO,CAAC;sBACR,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;sBACnC,EAAE,CAAC;AACR,aAAA,CAAC;AAEF,YAAA,OAAO,6BAA6B,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QACpF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,mBAAmB,CACxB,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,iCAAiC,CAC3E;QACH;IACF;8GAxCW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,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,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-platform-module-timesheet-management-client-team-timesheets.query-B0QpkVEI.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/reporting/queries/team-timesheets.query.ts"],"sourcesContent":["import { AXPQuery, type AXPQueryFetchResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport {\n runtimeQueryFailure,\n runtimeQuerySuccessCollection,\n type AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPeriodEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- Types ----\n\nexport interface AXMTeamTimesheetsQueryInput {\n managerEmployeeId?: string;\n statusId?: string;\n skip?: number;\n take?: number;\n}\n\n//#endregion\n\n/**\n * Lists timesheet periods for direct reports or team members.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMTeamTimesheetsQuery\n implements AXPQuery<AXMTeamTimesheetsQueryInput, AXMTimesheetManagementTimesheetPeriodEntityModel>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Query Execution ----\n\n async fetch(\n input?: AXMTeamTimesheetsQueryInput | null,\n ): AXPQueryFetchResultPromise<AXMTimesheetManagementTimesheetPeriodEntityModel> {\n try {\n const opts = input ?? {};\n const periodAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const filters: AXDataSourceFilterOption[] = [];\n if (opts.statusId) {\n filters.push({ field: 'statusId', operator: { type: 'equal' }, value: opts.statusId });\n }\n\n const result = await periodAccessor.query({\n skip: opts.skip ?? 0,\n take: opts.take ?? 50,\n sort: [{ field: 'startDate', dir: 'desc' }],\n ...(filters.length\n ? { filter: { logic: 'and', filters } }\n : {}),\n });\n\n return runtimeQuerySuccessCollection({ items: result.items, total: result.total });\n } catch (error) {\n return runtimeQueryFailure(\n error instanceof Error ? error.message : 'Failed to load team timesheets.',\n );\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAsBA;AAEA;;AAEG;MAEU,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAsC1D,IAAA;;;IAhCC,MAAM,KAAK,CACT,KAA0C,EAAA;AAE1C,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;AACxB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AACzB,iBAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI;AAC3E,iBAAA,IAAI,EAA4D;YAEnE,MAAM,OAAO,GAA+B,EAAE;AAC9C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxF;AAEA,YAAA,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC;AACxC,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;AACpB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;gBAC3C,IAAI,OAAO,CAAC;sBACR,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;sBACnC,EAAE,CAAC;AACR,aAAA,CAAC;AAEF,YAAA,OAAO,6BAA6B,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QACpF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,mBAAmB,CACxB,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,iCAAiC,CAC3E;QACH;IACF;8GAxCW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,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,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-timesheet-management-client-timesheet-validation.service-DMrJn3HU.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/timesheet-period/timesheet-validation.service.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get, isEmpty, isNil } from 'lodash';\nimport {\n AXMTimesheetPeriodLockedStatusIds,\n AXMTimesheetPeriodOpenStatusIds,\n RootConfig,\n} from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimeEntryEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type {\n AXMTimesheetManagementTimesheetPeriodEntityModel,\n AXMTimesheetPeriodType,\n} from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPolicyEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMTimesheetValidationIssue {\n code: string;\n message: string;\n field?: string;\n}\n\nexport interface AXMTimesheetValidationResult {\n valid: boolean;\n issues: AXMTimesheetValidationIssue[];\n}\n\nexport interface AXMTimesheetGetOrCreateDraftPeriodInput {\n employeeId: string;\n periodType: AXMTimesheetPeriodType;\n startDate: string;\n endDate: string;\n timezone: string;\n}\n\n//#endregion\n\n//#region ---- Timesheet Validation Service ----\n\n/**\n * Domain validation service for timesheet period and time entry business rules.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMTimesheetValidationService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Entry Validation ----\n\n /**\n * Validates that a time entry date falls within policy and period constraints.\n */\n validateEntryDates(\n entry: Pick<AXMTimesheetManagementTimeEntryEntityModel, 'entryDate' | 'startedAt' | 'endedAt'>,\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'startDate' | 'endDate'>,\n policy?: Pick<AXMTimesheetManagementTimesheetPolicyEntityModel, 'allowFutureDates'>,\n ): AXMTimesheetValidationResult {\n const issues: AXMTimesheetValidationIssue[] = [];\n const entryDate = entry.entryDate?.slice(0, 10);\n const periodStart = period.startDate?.slice(0, 10);\n const periodEnd = period.endDate?.slice(0, 10);\n\n if (entryDate && periodStart && entryDate < periodStart) {\n issues.push({\n code: 'entry-before-period',\n field: 'entryDate',\n message: 'Entry date is before the period start date.',\n });\n }\n\n if (entryDate && periodEnd && entryDate > periodEnd) {\n issues.push({\n code: 'entry-after-period',\n field: 'entryDate',\n message: 'Entry date is after the period end date.',\n });\n }\n\n if (!defaultTo(policy?.allowFutureDates, false)) {\n const today = new Date().toISOString().slice(0, 10);\n if (entryDate && entryDate > today) {\n issues.push({\n code: 'future-entry-date',\n field: 'entryDate',\n message: 'Future entry dates are not allowed by the active policy.',\n });\n }\n }\n\n if (entry.startedAt && entry.endedAt) {\n const started = Date.parse(entry.startedAt);\n const ended = Date.parse(entry.endedAt);\n if (!Number.isNaN(started) && !Number.isNaN(ended) && ended < started) {\n issues.push({\n code: 'ended-before-started',\n field: 'endedAt',\n message: 'End time must be after start time.',\n });\n }\n }\n\n return { valid: isEmpty(issues), issues };\n }\n\n /**\n * Validates that a time entry does not overlap existing entries for the same employee.\n */\n validateNoOverlap(\n entry: Pick<AXMTimesheetManagementTimeEntryEntityModel, 'id' | 'employeeId' | 'startedAt' | 'endedAt'>,\n existingEntries: Array<Pick<AXMTimesheetManagementTimeEntryEntityModel, 'id' | 'employeeId' | 'startedAt' | 'endedAt'>>,\n policy?: Pick<AXMTimesheetManagementTimesheetPolicyEntityModel, 'overlapPolicy'>,\n ): AXMTimesheetValidationResult {\n const issues: AXMTimesheetValidationIssue[] = [];\n const overlapPolicy = defaultTo(policy?.overlapPolicy, 'reject');\n\n if (!entry.startedAt || !entry.endedAt) {\n return { valid: true, issues };\n }\n\n const start = Date.parse(entry.startedAt);\n const end = Date.parse(entry.endedAt);\n if (Number.isNaN(start) || Number.isNaN(end)) {\n return { valid: true, issues };\n }\n\n const overlapping = existingEntries.filter((candidate) => {\n if (candidate.id === entry.id || candidate.employeeId !== entry.employeeId) {\n return false;\n }\n if (!candidate.startedAt || !candidate.endedAt) {\n return false;\n }\n const candidateStart = Date.parse(candidate.startedAt);\n const candidateEnd = Date.parse(candidate.endedAt);\n if (Number.isNaN(candidateStart) || Number.isNaN(candidateEnd)) {\n return false;\n }\n return start < candidateEnd && end > candidateStart;\n });\n\n if (!isEmpty(overlapping)) {\n issues.push({\n code: overlapPolicy === 'warn' ? 'entry-overlap-warning' : 'entry-overlap',\n field: 'startedAt',\n message:\n overlapPolicy === 'warn'\n ? 'This entry overlaps another entry for the same employee.'\n : 'Overlapping time entries are not allowed.',\n });\n }\n\n return {\n valid: overlapPolicy === 'warn' ? true : isEmpty(issues),\n issues,\n };\n }\n\n //#endregion\n\n //#region ---- Period Validation ----\n\n /**\n * Validates that a timesheet period can still be edited.\n */\n validatePeriodEditable(\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>,\n ): AXMTimesheetValidationResult {\n const statusId = period.statusId;\n const isLocked = (AXMTimesheetPeriodLockedStatusIds as readonly string[]).includes(statusId);\n\n if (isLocked) {\n return {\n valid: false,\n issues: [\n {\n code: 'period-locked',\n field: 'statusId',\n message: 'This timesheet period is locked and cannot be edited.',\n },\n ],\n };\n }\n\n return { valid: true, issues: [] };\n }\n\n /**\n * Validates that a period is complete enough for submission.\n */\n validateSubmissionCompleteness(\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId' | 'totalSeconds'>,\n entries: Array<Pick<AXMTimesheetManagementTimeEntryEntityModel, 'description'>>,\n policy?: Pick<AXMTimesheetManagementTimesheetPolicyEntityModel, 'requireDescription'>,\n ): AXMTimesheetValidationResult {\n const issues: AXMTimesheetValidationIssue[] = [];\n\n if (period.statusId !== AXPSystemStatusType.Draft) {\n issues.push({\n code: 'period-not-draft',\n field: 'statusId',\n message: 'Only draft periods can be submitted.',\n });\n }\n\n if (isEmpty(entries)) {\n issues.push({\n code: 'no-entries',\n message: 'At least one time entry is required before submission.',\n });\n }\n\n if (defaultTo(policy?.requireDescription, false)) {\n const missingDescription = entries.some((entry) => isEmpty(get(entry, 'description')));\n if (missingDescription) {\n issues.push({\n code: 'missing-description',\n field: 'description',\n message: 'All time entries must include a description before submission.',\n });\n }\n }\n\n const totalSeconds = defaultTo(period.totalSeconds, 0);\n if (totalSeconds <= 0 && !isEmpty(entries)) {\n issues.push({\n code: 'zero-total',\n field: 'totalSeconds',\n message: 'Submitted periods must have a positive total duration.',\n });\n }\n\n return { valid: isEmpty(issues), issues };\n }\n\n //#endregion\n\n //#region ---- Assertion Helpers ----\n\n assertPeriodAllowsTimeEntryEdits(\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>,\n ): void {\n const result = this.validatePeriodEditable(period);\n if (!result.valid) {\n throw new Error(result.issues[0]?.message ?? 'This timesheet period cannot be edited.');\n }\n }\n\n assertCanSubmit(\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId' | 'totalSeconds'>,\n entries: Array<Pick<AXMTimesheetManagementTimeEntryEntityModel, 'description'>> = [],\n policy?: Pick<AXMTimesheetManagementTimesheetPolicyEntityModel, 'requireDescription'>,\n ): void {\n const result = this.validateSubmissionCompleteness(period, entries, policy);\n if (!result.valid) {\n throw new Error(result.issues[0]?.message ?? 'Timesheet period cannot be submitted.');\n }\n }\n\n assertCanApprove(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n if (period.statusId !== AXPSystemStatusType.WaitingApproval) {\n throw new Error('Only submitted periods can be approved.');\n }\n }\n\n assertCanReject(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n if (period.statusId !== AXPSystemStatusType.WaitingApproval) {\n throw new Error('Only submitted periods can be rejected.');\n }\n }\n\n assertCanReopen(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n if (period.statusId !== AXPSystemStatusType.Rejected) {\n throw new Error('Only rejected periods can be reopened.');\n }\n }\n\n assertCanLock(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n if (period.statusId !== AXPSystemStatusType.Approved) {\n throw new Error('Only approved periods can be locked.');\n }\n }\n\n assertCanAdminAdjust(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n const isLocked = (AXMTimesheetPeriodLockedStatusIds as readonly string[]).includes(period.statusId);\n if (!isLocked && period.statusId !== AXPSystemStatusType.Approved) {\n throw new Error('Only approved or locked periods can be adjusted by an administrator.');\n }\n }\n\n //#endregion\n\n //#region ---- Period Resolution ----\n\n /**\n * Finds an existing open draft period or creates a new draft period for the employee.\n */\n async getOrCreateDraftPeriod(\n input: AXMTimesheetGetOrCreateDraftPeriodInput,\n ): Promise<AXMTimesheetManagementTimesheetPeriodEntityModel> {\n const periodAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const existing = await periodAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [\n { field: 'employeeId', operator: { type: 'equal' }, value: input.employeeId },\n { field: 'periodType', operator: { type: 'equal' }, value: input.periodType },\n { field: 'startDate', operator: { type: 'equal' }, value: input.startDate },\n { field: 'endDate', operator: { type: 'equal' }, value: input.endDate },\n {\n field: 'statusId',\n operator: { type: 'in' },\n value: [...AXMTimesheetPeriodOpenStatusIds],\n },\n ],\n },\n });\n\n const match = get(existing, 'items[0]') as AXMTimesheetManagementTimesheetPeriodEntityModel | undefined;\n if (!isNil(match)) {\n return match;\n }\n\n const createdId = await periodAccessor.create({\n employeeId: input.employeeId,\n periodType: input.periodType,\n startDate: input.startDate,\n endDate: input.endDate,\n timezone: input.timezone,\n statusId: AXPSystemStatusType.Draft,\n totalSeconds: 0,\n });\n\n const created = await periodAccessor.byKey(createdId);\n if (isNil(created)) {\n throw new Error('Failed to load the newly created draft timesheet period.');\n }\n\n return created;\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-timesheet-management-client-timesheet-validation.service-DMrJn3HU.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/timesheet-period/timesheet-validation.service.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get, isEmpty, isNil } from 'lodash';\nimport {\n AXMTimesheetPeriodLockedStatusIds,\n AXMTimesheetPeriodOpenStatusIds,\n RootConfig,\n} from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimeEntryEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type {\n AXMTimesheetManagementTimesheetPeriodEntityModel,\n AXMTimesheetPeriodType,\n} from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPolicyEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMTimesheetValidationIssue {\n code: string;\n message: string;\n field?: string;\n}\n\nexport interface AXMTimesheetValidationResult {\n valid: boolean;\n issues: AXMTimesheetValidationIssue[];\n}\n\nexport interface AXMTimesheetGetOrCreateDraftPeriodInput {\n employeeId: string;\n periodType: AXMTimesheetPeriodType;\n startDate: string;\n endDate: string;\n timezone: string;\n}\n\n//#endregion\n\n//#region ---- Timesheet Validation Service ----\n\n/**\n * Domain validation service for timesheet period and time entry business rules.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMTimesheetValidationService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Entry Validation ----\n\n /**\n * Validates that a time entry date falls within policy and period constraints.\n */\n validateEntryDates(\n entry: Pick<AXMTimesheetManagementTimeEntryEntityModel, 'entryDate' | 'startedAt' | 'endedAt'>,\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'startDate' | 'endDate'>,\n policy?: Pick<AXMTimesheetManagementTimesheetPolicyEntityModel, 'allowFutureDates'>,\n ): AXMTimesheetValidationResult {\n const issues: AXMTimesheetValidationIssue[] = [];\n const entryDate = entry.entryDate?.slice(0, 10);\n const periodStart = period.startDate?.slice(0, 10);\n const periodEnd = period.endDate?.slice(0, 10);\n\n if (entryDate && periodStart && entryDate < periodStart) {\n issues.push({\n code: 'entry-before-period',\n field: 'entryDate',\n message: 'Entry date is before the period start date.',\n });\n }\n\n if (entryDate && periodEnd && entryDate > periodEnd) {\n issues.push({\n code: 'entry-after-period',\n field: 'entryDate',\n message: 'Entry date is after the period end date.',\n });\n }\n\n if (!defaultTo(policy?.allowFutureDates, false)) {\n const today = new Date().toISOString().slice(0, 10);\n if (entryDate && entryDate > today) {\n issues.push({\n code: 'future-entry-date',\n field: 'entryDate',\n message: 'Future entry dates are not allowed by the active policy.',\n });\n }\n }\n\n if (entry.startedAt && entry.endedAt) {\n const started = Date.parse(entry.startedAt);\n const ended = Date.parse(entry.endedAt);\n if (!Number.isNaN(started) && !Number.isNaN(ended) && ended < started) {\n issues.push({\n code: 'ended-before-started',\n field: 'endedAt',\n message: 'End time must be after start time.',\n });\n }\n }\n\n return { valid: isEmpty(issues), issues };\n }\n\n /**\n * Validates that a time entry does not overlap existing entries for the same employee.\n */\n validateNoOverlap(\n entry: Pick<AXMTimesheetManagementTimeEntryEntityModel, 'id' | 'employeeId' | 'startedAt' | 'endedAt'>,\n existingEntries: Array<Pick<AXMTimesheetManagementTimeEntryEntityModel, 'id' | 'employeeId' | 'startedAt' | 'endedAt'>>,\n policy?: Pick<AXMTimesheetManagementTimesheetPolicyEntityModel, 'overlapPolicy'>,\n ): AXMTimesheetValidationResult {\n const issues: AXMTimesheetValidationIssue[] = [];\n const overlapPolicy = defaultTo(policy?.overlapPolicy, 'reject');\n\n if (!entry.startedAt || !entry.endedAt) {\n return { valid: true, issues };\n }\n\n const start = Date.parse(entry.startedAt);\n const end = Date.parse(entry.endedAt);\n if (Number.isNaN(start) || Number.isNaN(end)) {\n return { valid: true, issues };\n }\n\n const overlapping = existingEntries.filter((candidate) => {\n if (candidate.id === entry.id || candidate.employeeId !== entry.employeeId) {\n return false;\n }\n if (!candidate.startedAt || !candidate.endedAt) {\n return false;\n }\n const candidateStart = Date.parse(candidate.startedAt);\n const candidateEnd = Date.parse(candidate.endedAt);\n if (Number.isNaN(candidateStart) || Number.isNaN(candidateEnd)) {\n return false;\n }\n return start < candidateEnd && end > candidateStart;\n });\n\n if (!isEmpty(overlapping)) {\n issues.push({\n code: overlapPolicy === 'warn' ? 'entry-overlap-warning' : 'entry-overlap',\n field: 'startedAt',\n message:\n overlapPolicy === 'warn'\n ? 'This entry overlaps another entry for the same employee.'\n : 'Overlapping time entries are not allowed.',\n });\n }\n\n return {\n valid: overlapPolicy === 'warn' ? true : isEmpty(issues),\n issues,\n };\n }\n\n //#endregion\n\n //#region ---- Period Validation ----\n\n /**\n * Validates that a timesheet period can still be edited.\n */\n validatePeriodEditable(\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>,\n ): AXMTimesheetValidationResult {\n const statusId = period.statusId;\n const isLocked = (AXMTimesheetPeriodLockedStatusIds as readonly string[]).includes(statusId);\n\n if (isLocked) {\n return {\n valid: false,\n issues: [\n {\n code: 'period-locked',\n field: 'statusId',\n message: 'This timesheet period is locked and cannot be edited.',\n },\n ],\n };\n }\n\n return { valid: true, issues: [] };\n }\n\n /**\n * Validates that a period is complete enough for submission.\n */\n validateSubmissionCompleteness(\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId' | 'totalSeconds'>,\n entries: Array<Pick<AXMTimesheetManagementTimeEntryEntityModel, 'description'>>,\n policy?: Pick<AXMTimesheetManagementTimesheetPolicyEntityModel, 'requireDescription'>,\n ): AXMTimesheetValidationResult {\n const issues: AXMTimesheetValidationIssue[] = [];\n\n if (period.statusId !== AXPSystemStatusType.Draft) {\n issues.push({\n code: 'period-not-draft',\n field: 'statusId',\n message: 'Only draft periods can be submitted.',\n });\n }\n\n if (isEmpty(entries)) {\n issues.push({\n code: 'no-entries',\n message: 'At least one time entry is required before submission.',\n });\n }\n\n if (defaultTo(policy?.requireDescription, false)) {\n const missingDescription = entries.some((entry) => isEmpty(get(entry, 'description')));\n if (missingDescription) {\n issues.push({\n code: 'missing-description',\n field: 'description',\n message: 'All time entries must include a description before submission.',\n });\n }\n }\n\n const totalSeconds = defaultTo(period.totalSeconds, 0);\n if (totalSeconds <= 0 && !isEmpty(entries)) {\n issues.push({\n code: 'zero-total',\n field: 'totalSeconds',\n message: 'Submitted periods must have a positive total duration.',\n });\n }\n\n return { valid: isEmpty(issues), issues };\n }\n\n //#endregion\n\n //#region ---- Assertion Helpers ----\n\n assertPeriodAllowsTimeEntryEdits(\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>,\n ): void {\n const result = this.validatePeriodEditable(period);\n if (!result.valid) {\n throw new Error(result.issues[0]?.message ?? 'This timesheet period cannot be edited.');\n }\n }\n\n assertCanSubmit(\n period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId' | 'totalSeconds'>,\n entries: Array<Pick<AXMTimesheetManagementTimeEntryEntityModel, 'description'>> = [],\n policy?: Pick<AXMTimesheetManagementTimesheetPolicyEntityModel, 'requireDescription'>,\n ): void {\n const result = this.validateSubmissionCompleteness(period, entries, policy);\n if (!result.valid) {\n throw new Error(result.issues[0]?.message ?? 'Timesheet period cannot be submitted.');\n }\n }\n\n assertCanApprove(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n if (period.statusId !== AXPSystemStatusType.WaitingApproval) {\n throw new Error('Only submitted periods can be approved.');\n }\n }\n\n assertCanReject(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n if (period.statusId !== AXPSystemStatusType.WaitingApproval) {\n throw new Error('Only submitted periods can be rejected.');\n }\n }\n\n assertCanReopen(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n if (period.statusId !== AXPSystemStatusType.Rejected) {\n throw new Error('Only rejected periods can be reopened.');\n }\n }\n\n assertCanLock(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n if (period.statusId !== AXPSystemStatusType.Approved) {\n throw new Error('Only approved periods can be locked.');\n }\n }\n\n assertCanAdminAdjust(period: Pick<AXMTimesheetManagementTimesheetPeriodEntityModel, 'statusId'>): void {\n const isLocked = (AXMTimesheetPeriodLockedStatusIds as readonly string[]).includes(period.statusId);\n if (!isLocked && period.statusId !== AXPSystemStatusType.Approved) {\n throw new Error('Only approved or locked periods can be adjusted by an administrator.');\n }\n }\n\n //#endregion\n\n //#region ---- Period Resolution ----\n\n /**\n * Finds an existing open draft period or creates a new draft period for the employee.\n */\n async getOrCreateDraftPeriod(\n input: AXMTimesheetGetOrCreateDraftPeriodInput,\n ): Promise<AXMTimesheetManagementTimesheetPeriodEntityModel> {\n const periodAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const existing = await periodAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [\n { field: 'employeeId', operator: { type: 'equal' }, value: input.employeeId },\n { field: 'periodType', operator: { type: 'equal' }, value: input.periodType },\n { field: 'startDate', operator: { type: 'equal' }, value: input.startDate },\n { field: 'endDate', operator: { type: 'equal' }, value: input.endDate },\n {\n field: 'statusId',\n operator: { type: 'in' },\n value: [...AXMTimesheetPeriodOpenStatusIds],\n },\n ],\n },\n });\n\n const match = get(existing, 'items[0]') as AXMTimesheetManagementTimesheetPeriodEntityModel | undefined;\n if (!isNil(match)) {\n return match;\n }\n\n const createdId = await periodAccessor.create({\n employeeId: input.employeeId,\n periodType: input.periodType,\n startDate: input.startDate,\n endDate: input.endDate,\n timezone: input.timezone,\n statusId: AXPSystemStatusType.Draft,\n totalSeconds: 0,\n });\n\n const created = await periodAccessor.byKey(createdId);\n if (isNil(created)) {\n throw new Error('Failed to load the newly created draft timesheet period.');\n }\n\n return created;\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-timesheet-management-client-update-time-entry.command-Do6s9OrI.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/time-entry/commands/update-time-entry.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimeEntryEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPeriodEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport { AXMTimesheetValidationService } from '../../timesheet-period/timesheet-validation.service';\n\n//#region ---- Types ----\n\nexport interface UpdateTimeEntryInput {\n id: string;\n data: Partial<Omit<AXMTimesheetManagementTimeEntryEntityModel, 'id'>>;\n}\n\n//#endregion\n\n/**\n * Updates a time entry after validating the parent timesheet period is editable.\n */\n@Injectable({ providedIn: 'root' })\nexport class UpdateTimeEntryCommand implements AXPCommand<UpdateTimeEntryInput, AXMTimesheetManagementTimeEntryEntityModel> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly validationService = inject(AXMTimesheetValidationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(\n input: UpdateTimeEntryInput,\n ): AXPCommandExecuteResultPromise<AXMTimesheetManagementTimeEntryEntityModel> {\n try {\n const dataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timeEntry.name)\n .data<string, AXMTimesheetManagementTimeEntryEntityModel>();\n\n const existing = await dataAccessor.byKey(input.id);\n if (!existing) {\n return { success: false, message: { text: 'Time entry not found.' } };\n }\n\n const periodId = input.data.periodId ?? existing.periodId;\n await this.assertPeriodEditable(periodId);\n\n const updated = await dataAccessor.update(input.id, input.data);\n return { success: true, kind: 'object', data: updated };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to update time entry.';\n console.error('[UpdateTimeEntryCommand] Error:', error);\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ---- Private helpers ----\n\n private async assertPeriodEditable(periodId: string): Promise<void> {\n const periodAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const period = await periodAccessor.byKey(periodId);\n if (!period) {\n throw new Error('Timesheet period not found.');\n }\n this.validationService.assertPeriodAllowsTimeEntryEdits(period);\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAiBA;AAEA;;AAEG;MAEU,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAgD3E,IAAA;;;IA1CC,MAAM,OAAO,CACX,KAA2B,EAAA;AAE3B,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,iBAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI;AACrE,iBAAA,IAAI,EAAsD;YAE7D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE;YACvE;YAEA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;AACzD,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAEzC,YAAA,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/D,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;QACzD;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,8BAA8B;AACvF,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;;;IAMQ,MAAM,oBAAoB,CAAC,QAAgB,EAAA;AACjD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AACzB,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI;AAC3E,aAAA,IAAI,EAA4D;QAEnE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;QAChD;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,MAAM,CAAC;IACjE;8GAjDW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,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,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-platform-module-timesheet-management-client-update-time-entry.command-Do6s9OrI.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/time-entry/commands/update-time-entry.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimeEntryEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPeriodEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport { AXMTimesheetValidationService } from '../../timesheet-period/timesheet-validation.service';\n\n//#region ---- Types ----\n\nexport interface UpdateTimeEntryInput {\n id: string;\n data: Partial<Omit<AXMTimesheetManagementTimeEntryEntityModel, 'id'>>;\n}\n\n//#endregion\n\n/**\n * Updates a time entry after validating the parent timesheet period is editable.\n */\n@Injectable({ providedIn: 'root' })\nexport class UpdateTimeEntryCommand implements AXPCommand<UpdateTimeEntryInput, AXMTimesheetManagementTimeEntryEntityModel> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly validationService = inject(AXMTimesheetValidationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(\n input: UpdateTimeEntryInput,\n ): AXPCommandExecuteResultPromise<AXMTimesheetManagementTimeEntryEntityModel> {\n try {\n const dataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timeEntry.name)\n .data<string, AXMTimesheetManagementTimeEntryEntityModel>();\n\n const existing = await dataAccessor.byKey(input.id);\n if (!existing) {\n return { success: false, message: { text: 'Time entry not found.' } };\n }\n\n const periodId = input.data.periodId ?? existing.periodId;\n await this.assertPeriodEditable(periodId);\n\n const updated = await dataAccessor.update(input.id, input.data);\n return { success: true, kind: 'object', data: updated };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to update time entry.';\n console.error('[UpdateTimeEntryCommand] Error:', error);\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ---- Private helpers ----\n\n private async assertPeriodEditable(periodId: string): Promise<void> {\n const periodAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const period = await periodAccessor.byKey(periodId);\n if (!period) {\n throw new Error('Timesheet period not found.');\n }\n this.validationService.assertPeriodAllowsTimeEntryEdits(period);\n }\n\n //#endregion\n}\n"],"names":[],"mappings":";;;;;;AAiBA;AAEA;;AAEG;MAEU,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAgD3E,IAAA;;;IA1CC,MAAM,OAAO,CACX,KAA2B,EAAA;AAE3B,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,iBAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI;AACrE,iBAAA,IAAI,EAAsD;YAE7D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE;YACvE;YAEA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;AACzD,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAEzC,YAAA,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/D,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;QACzD;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,8BAA8B;AACvF,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;;;IAMQ,MAAM,oBAAoB,CAAC,QAAgB,EAAA;AACjD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AACzB,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI;AAC3E,aAAA,IAAI,EAA4D;QAEnE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;QAChD;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,MAAM,CAAC;IACjE;8GAjDW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,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,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-timesheet-management-client-work-item-search.query-BA2kvF-S.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/reporting/queries/work-item-search.query.ts"],"sourcesContent":["import { AXPQuery, type AXPQueryFetchResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport {\n runtimeQueryFailure,\n runtimeQuerySuccessCollection,\n type AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { isEmpty } from 'lodash';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementWorkItemEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- Types ----\n\nexport interface AXMWorkItemSearchQueryInput {\n searchText?: string;\n employeeId?: string;\n isActive?: boolean;\n skip?: number;\n take?: number;\n}\n\nexport interface AXMWorkItemSearchQueryItem {\n id: string;\n code: string;\n title: string;\n sourceType: string;\n isBillableDefault: boolean;\n}\n\n//#endregion\n\n/**\n * Searches work items for timesheet entry pickers.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMWorkItemSearchQuery\n implements AXPQuery<AXMWorkItemSearchQueryInput, AXMWorkItemSearchQueryItem>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Query Execution ----\n\n async fetch(\n input?: AXMWorkItemSearchQueryInput | null,\n ): AXPQueryFetchResultPromise<AXMWorkItemSearchQueryItem> {\n try {\n const opts = input ?? {};\n const workItemAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workItem.name)\n .data<string, AXMTimesheetManagementWorkItemEntityModel>();\n\n const filters: AXDataSourceFilterOption[] = [];\n if (opts.employeeId) {\n filters.push({ field: 'employeeId', operator: { type: 'equal' }, value: opts.employeeId });\n }\n if (opts.isActive != null) {\n filters.push({ field: 'isActive', operator: { type: 'equal' }, value: opts.isActive });\n }\n if (!isEmpty(opts.searchText?.trim())) {\n filters.push({\n field: 'code',\n operator: { type: 'contains' },\n value: opts.searchText!.trim(),\n });\n }\n\n const result = await workItemAccessor.query({\n skip: opts.skip ?? 0,\n take: opts.take ?? 25,\n sort: [{ field: 'code', dir: 'asc' }],\n ...(filters.length ? { filter: { logic: 'and', filters } } : {}),\n });\n\n const items = result.items.map((row) => ({\n id: row.id,\n code: row.code,\n title: resolveMultiLanguageString(row.title, 'en-US'),\n sourceType: row.sourceType,\n isBillableDefault: row.isBillableDefault,\n }));\n\n return runtimeQuerySuccessCollection({ items, total: result.total });\n } catch (error) {\n return runtimeQueryFailure(\n error instanceof Error ? error.message : 'Failed to search work items.',\n );\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-timesheet-management-client-work-item-search.query-BA2kvF-S.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/reporting/queries/work-item-search.query.ts"],"sourcesContent":["import { AXPQuery, type AXPQueryFetchResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport {\n runtimeQueryFailure,\n runtimeQuerySuccessCollection,\n type AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { isEmpty } from 'lodash';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementWorkItemEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- Types ----\n\nexport interface AXMWorkItemSearchQueryInput {\n searchText?: string;\n employeeId?: string;\n isActive?: boolean;\n skip?: number;\n take?: number;\n}\n\nexport interface AXMWorkItemSearchQueryItem {\n id: string;\n code: string;\n title: string;\n sourceType: string;\n isBillableDefault: boolean;\n}\n\n//#endregion\n\n/**\n * Searches work items for timesheet entry pickers.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMWorkItemSearchQuery\n implements AXPQuery<AXMWorkItemSearchQueryInput, AXMWorkItemSearchQueryItem>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Query Execution ----\n\n async fetch(\n input?: AXMWorkItemSearchQueryInput | null,\n ): AXPQueryFetchResultPromise<AXMWorkItemSearchQueryItem> {\n try {\n const opts = input ?? {};\n const workItemAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workItem.name)\n .data<string, AXMTimesheetManagementWorkItemEntityModel>();\n\n const filters: AXDataSourceFilterOption[] = [];\n if (opts.employeeId) {\n filters.push({ field: 'employeeId', operator: { type: 'equal' }, value: opts.employeeId });\n }\n if (opts.isActive != null) {\n filters.push({ field: 'isActive', operator: { type: 'equal' }, value: opts.isActive });\n }\n if (!isEmpty(opts.searchText?.trim())) {\n filters.push({\n field: 'code',\n operator: { type: 'contains' },\n value: opts.searchText!.trim(),\n });\n }\n\n const result = await workItemAccessor.query({\n skip: opts.skip ?? 0,\n take: opts.take ?? 25,\n sort: [{ field: 'code', dir: 'asc' }],\n ...(filters.length ? { filter: { logic: 'and', filters } } : {}),\n });\n\n const items = result.items.map((row) => ({\n id: row.id,\n code: row.code,\n title: resolveMultiLanguageString(row.title, 'en-US'),\n sourceType: row.sourceType,\n isBillableDefault: row.isBillableDefault,\n }));\n\n return runtimeQuerySuccessCollection({ items, total: result.total });\n } catch (error) {\n return runtimeQueryFailure(\n error instanceof Error ? error.message : 'Failed to search work items.',\n );\n }\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-timesheet-management-client-workforce-exception-report.query-0q-AITic.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/reporting/queries/workforce-exception-report.query.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPQuery, type AXPQueryFetchResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n runtimeQueryFailure,\n runtimeQueryPayloadData,\n runtimeQuerySuccessObject,\n type AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMCompareAttendanceVsTimesheetQuery } from './compare-attendance-vs-timesheet.query';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMWorkforceExceptionReportQueryInput {\n employeeId: string;\n fromDate: string;\n toDate: string;\n varianceThresholdSeconds?: number;\n}\n\nexport interface AXMWorkforceExceptionReportQueryResult {\n exceptions: {\n date: string;\n attendanceWorkedSeconds: number;\n timesheetLoggedSeconds: number;\n varianceSeconds: number;\n }[];\n}\n\n//#endregion\n\n//#region ---- Query ----\n\n/**\n * Returns only dates where attendance vs timesheet variance exceeds the threshold.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMWorkforceExceptionReportQuery\n implements AXPQuery<AXMWorkforceExceptionReportQueryInput, AXMWorkforceExceptionReportQueryResult>\n{\n private readonly compareQuery = inject(AXMCompareAttendanceVsTimesheetQuery);\n\n async fetch(\n input: AXMWorkforceExceptionReportQueryInput,\n ): AXPQueryFetchResultPromise<AXMWorkforceExceptionReportQueryResult> {\n const result = await this.compareQuery.fetch(input);\n const payload = runtimeQueryPayloadData(result);\n if (!payload) {\n return runtimeQueryFailure(result.message ?? 'Failed to load workforce exception report.');\n }\n\n const exceptions = payload.rows\n .filter((row) => row.exceedsThreshold)\n .map((row) => ({\n date: row.date,\n attendanceWorkedSeconds: row.attendanceWorkedSeconds,\n timesheetLoggedSeconds: row.timesheetLoggedSeconds,\n varianceSeconds: row.varianceSeconds,\n }));\n\n return runtimeQuerySuccessObject({ exceptions });\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;AAgCA;AAEA;AAEA;;AAEG;MAEU,gCAAgC,CAAA;AAD7C,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,oCAAoC,CAAC;AAsB7E,IAAA;IApBC,MAAM,KAAK,CACT,KAA4C,EAAA;QAE5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AACnD,QAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,mBAAmB,CAAC,MAAM,CAAC,OAAO,IAAI,4CAA4C,CAAC;QAC5F;AAEA,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC;aACxB,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,gBAAgB;AACpC,aAAA,GAAG,CAAC,CAAC,GAAG,MAAM;YACb,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,uBAAuB,EAAE,GAAG,CAAC,uBAAuB;YACpD,sBAAsB,EAAE,GAAG,CAAC,sBAAsB;YAClD,eAAe,EAAE,GAAG,CAAC,eAAe;AACrC,SAAA,CAAC,CAAC;AAEL,QAAA,OAAO,yBAAyB,CAAC,EAAE,UAAU,EAAE,CAAC;IAClD;8GAxBW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhC,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,gCAAgC,cADnB,MAAM,EAAA,CAAA,CAAA;;2FACnB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAD5C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-platform-module-timesheet-management-client-workforce-exception-report.query-0q-AITic.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/reporting/queries/workforce-exception-report.query.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPQuery, type AXPQueryFetchResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n runtimeQueryFailure,\n runtimeQueryPayloadData,\n runtimeQuerySuccessObject,\n type AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMCompareAttendanceVsTimesheetQuery } from './compare-attendance-vs-timesheet.query';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMWorkforceExceptionReportQueryInput {\n employeeId: string;\n fromDate: string;\n toDate: string;\n varianceThresholdSeconds?: number;\n}\n\nexport interface AXMWorkforceExceptionReportQueryResult {\n exceptions: {\n date: string;\n attendanceWorkedSeconds: number;\n timesheetLoggedSeconds: number;\n varianceSeconds: number;\n }[];\n}\n\n//#endregion\n\n//#region ---- Query ----\n\n/**\n * Returns only dates where attendance vs timesheet variance exceeds the threshold.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMWorkforceExceptionReportQuery\n implements AXPQuery<AXMWorkforceExceptionReportQueryInput, AXMWorkforceExceptionReportQueryResult>\n{\n private readonly compareQuery = inject(AXMCompareAttendanceVsTimesheetQuery);\n\n async fetch(\n input: AXMWorkforceExceptionReportQueryInput,\n ): AXPQueryFetchResultPromise<AXMWorkforceExceptionReportQueryResult> {\n const result = await this.compareQuery.fetch(input);\n const payload = runtimeQueryPayloadData(result);\n if (!payload) {\n return runtimeQueryFailure(result.message ?? 'Failed to load workforce exception report.');\n }\n\n const exceptions = payload.rows\n .filter((row) => row.exceedsThreshold)\n .map((row) => ({\n date: row.date,\n attendanceWorkedSeconds: row.attendanceWorkedSeconds,\n timesheetLoggedSeconds: row.timesheetLoggedSeconds,\n varianceSeconds: row.varianceSeconds,\n }));\n\n return runtimeQuerySuccessObject({ exceptions });\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;AAgCA;AAEA;AAEA;;AAEG;MAEU,gCAAgC,CAAA;AAD7C,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,oCAAoC,CAAC;AAsB7E,IAAA;IApBC,MAAM,KAAK,CACT,KAA4C,EAAA;QAE5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AACnD,QAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,mBAAmB,CAAC,MAAM,CAAC,OAAO,IAAI,4CAA4C,CAAC;QAC5F;AAEA,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC;aACxB,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,gBAAgB;AACpC,aAAA,GAAG,CAAC,CAAC,GAAG,MAAM;YACb,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,uBAAuB,EAAE,GAAG,CAAC,uBAAuB;YACpD,sBAAsB,EAAE,GAAG,CAAC,sBAAsB;YAClD,eAAe,EAAE,GAAG,CAAC,eAAe;AACrC,SAAA,CAAC,CAAC;AAEL,QAAA,OAAO,yBAAyB,CAAC,EAAE,UAAU,EAAE,CAAC;IAClD;8GAxBW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhC,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,gCAAgC,cADnB,MAAM,EAAA,CAAA,CAAA;;2FACnB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAD5C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -194,7 +194,7 @@ class AXMMyTimesheetPageComponent extends AXPPageLayoutBaseComponent {
194
194
  </div>
195
195
  </axp-page-content>
196
196
  </axp-page-layout>
197
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
197
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
198
198
  }
199
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMMyTimesheetPageComponent, decorators: [{
200
200
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-timesheet-management-client.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/my-timesheet/my-timesheet-page.component.ts","../../../../libs/modules/timesheet-management/client/src/lib/features/my-timesheet/my-timesheet-page.component.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/features/my-timesheet/my-timesheet-page.routes.ts","../../../../libs/modules/timesheet-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/features/timesheet-correction/timesheet-correction-status.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/features/timesheet-period/timesheet-period-status.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/manifest.ts","../../../../libs/modules/timesheet-management/client/src/lib/menu.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/timesheet-management.module.ts","../../../../libs/modules/timesheet-management/client/src/acorex-platform-module-timesheet-management-client.ts"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport { AXPThemeLayoutBlockComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n} from '@acorex-platform/framework-client/layout/views';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { groupBy, sumBy } from 'lodash';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimeEntryEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPeriodEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-my-timesheet-page',\n imports: [\n CommonModule,\n AsyncPipe,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n ],\n template: `\n <axp-page-layout>\n <axp-page-content>\n <div class=\"flex flex-col gap-4 p-4\">\n @if (loading()) {\n <ax-loading />\n } @else if (!period()) {\n <p class=\"text-sm text-muted\">\n {{ '@timesheet-management:pages.my-timesheet.empty-period' | translate | async }}\n </p>\n } @else {\n <div class=\"flex flex-wrap items-center justify-between gap-4\">\n <div>\n <p class=\"text-sm font-medium\">\n {{ period()?.startDate }} – {{ period()?.endDate }}\n </p>\n <p class=\"text-xs text-muted\">\n {{ '@timesheet-management:timesheet-periods.entities.timesheet-period.fields.status' | translate | async }}:\n {{ period()?.statusId }}\n </p>\n </div>\n <div class=\"flex items-center gap-3\">\n <p class=\"text-sm\">{{ formatHours(totalSeconds()) }}</p>\n @if (canSubmit()) {\n <ax-button color=\"primary\" (onClick)=\"submitCurrentPeriod()\">\n {{ '@timesheet-management:timesheet-periods.transitions.submit' | translate | async }}\n </ax-button>\n }\n </div>\n </div>\n\n <div class=\"overflow-x-auto rounded border border-surface\">\n <table class=\"w-full text-sm\">\n <thead>\n <tr class=\"border-b border-surface bg-lighter-surface\">\n <th class=\"p-2 text-left\">{{ '@general:terms.date' | translate | async }}</th>\n <th class=\"p-2 text-right\">{{ '@timesheet-management:time-entries.entities.time-entry.fields.duration' | translate | async }}</th>\n <th class=\"p-2 text-left\">{{ '@timesheet-management:work-items.entities.work-item.title' | translate | async }}</th>\n </tr>\n </thead>\n <tbody>\n @for (day of days(); track day.date) {\n <tr class=\"border-b border-lighter-surface\">\n <td class=\"p-2\">{{ day.date }}</td>\n <td class=\"p-2 text-right\">{{ formatHours(day.totalSeconds) }}</td>\n <td class=\"p-2\">{{ day.entries.length }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </axp-page-content>\n </axp-page-layout>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMyTimesheetPageComponent,\n },\n ],\n host: { class: 'axm-my-timesheet-page block w-full' },\n})\nexport class AXMMyTimesheetPageComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly loading = signal(false);\n protected readonly period = signal<AXMTimesheetManagementTimesheetPeriodEntityModel | null>(null);\n protected readonly days = signal<{ date: string; totalSeconds: number; entries: AXMTimesheetManagementTimeEntryEntityModel[] }[]>([]);\n protected readonly totalSeconds = signal(0);\n\n protected readonly canSubmit = computed(\n () => this.period()?.statusId === AXPSystemStatusType.Draft,\n );\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n await this.loadGrid();\n }\n\n //#endregion\n\n //#region ---- Page metadata ----\n\n override getPageTitle(): string {\n return RootConfig.pages.myTimesheet.title;\n }\n\n //#endregion\n\n //#region ---- UI handlers ----\n\n protected formatHours(totalSeconds: number): string {\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n return `${hours}h ${minutes}m`;\n }\n\n //#endregion\n\n //#region ---- Data loading ----\n\n private async loadGrid(): Promise<void> {\n const employeeId = this.sessionService.user?.id;\n if (!employeeId) {\n return;\n }\n\n this.loading.set(true);\n try {\n const periodAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const periods = await periodAccessor.query({\n skip: 0,\n take: 1,\n sort: [{ field: 'startDate', dir: 'desc' }],\n filter: {\n field: 'employeeId',\n operator: { type: 'equal' },\n value: employeeId,\n },\n });\n\n const currentPeriod = periods.items[0] ?? null;\n this.period.set(currentPeriod);\n\n if (!currentPeriod) {\n this.days.set([]);\n this.totalSeconds.set(0);\n this.recompute();\n return;\n }\n\n const entryAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timeEntry.name)\n .data<string, AXMTimesheetManagementTimeEntryEntityModel>();\n\n const entriesResult = await entryAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [\n { field: 'employeeId', operator: { type: 'equal' }, value: employeeId },\n { field: 'periodId', operator: { type: 'equal' }, value: currentPeriod.id },\n ],\n },\n });\n\n const grouped = groupBy(entriesResult.items, (row) => row.entryDate);\n const days = Object.keys(grouped)\n .sort()\n .map((date) => ({\n date,\n totalSeconds: sumBy(grouped[date], (row) => row.durationSeconds ?? 0),\n entries: grouped[date],\n }));\n\n this.days.set(days);\n this.totalSeconds.set(sumBy(entriesResult.items, (row) => row.durationSeconds ?? 0));\n this.recompute();\n } finally {\n this.loading.set(false);\n }\n }\n\n /** Submits the current period via the registered command. */\n protected async submitCurrentPeriod(): Promise<void> {\n const id = this.period()?.id;\n if (!id) {\n return;\n }\n\n const result = await this.commandService.execute('TimesheetManagement.TimesheetPeriod:Submit', { id });\n if (result?.success) {\n await this.loadGrid();\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\n\n//#region ---- Page component key ----\n\nexport const MY_TIMESHEET_PAGE_COMPONENT_KEY = 'timesheet-management-my-timesheet-page';\n\n//#endregion\n\n//#region ---- My Timesheet Page Component Provider ----\n\n@Injectable()\nexport class AXMMyTimesheetPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: MY_TIMESHEET_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./my-timesheet-page.component').then((m) => m.AXMMyTimesheetPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { AXP_PROTECTED_ROUTE_GUARDS } from '@acorex-platform/framework-client/common';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { Routes } from '@angular/router';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- My Timesheet Routes ----\n\nexport const myTimesheetPageRoutes: Routes = [\n {\n path: `:app/${RootConfig.module.route}/${RootConfig.pages.myTimesheet.path}`,\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./my-timesheet-page.component').then((m) => m.AXMMyTimesheetPageComponent),\n data: { reuse: true },\n },\n ],\n },\n];\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { AXMTimesheetManagementFeatureKeys } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\nexport class AXMTimesheetManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n context.addFeature(AXMTimesheetManagementFeatureKeys.TimesheetEntry, {\n title: '@timesheet-management:features.timesheet-entry.title',\n description: '@timesheet-management:features.timesheet-entry.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n context.addFeature(AXMTimesheetManagementFeatureKeys.TimesheetApproval, {\n title: '@timesheet-management:features.timesheet-approval.title',\n description: '@timesheet-management:features.timesheet-approval.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n context.addFeature(AXMTimesheetManagementFeatureKeys.TimesheetReporting, {\n title: '@timesheet-management:features.timesheet-reporting.title',\n description: '@timesheet-management:features.timesheet-reporting.description',\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Timesheet Correction Status Provider ----\n\nexport class AXMTimesheetCorrectionStatusProvider extends AXPStatusProvider {\n readonly key = 'timesheet-management.status.timesheet-correction';\n\n readonly defaultStatus = AXPSystemStatusType.WaitingApproval;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.WaitingApproval, {\n title: '@timesheet-management:timesheet-corrections.states.waiting-approval',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Approved, {\n title: '@timesheet-management:timesheet-corrections.states.approved',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@timesheet-management:timesheet-corrections.states.rejected',\n generateView: true,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXPSystemStatusType.WaitingApproval,\n to: AXPSystemStatusType.Approved,\n title: '@general:statuses.transitions.approve',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.WaitingApproval,\n to: AXPSystemStatusType.Rejected,\n title: '@general:statuses.transitions.reject',\n requiresApproval: true,\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\nimport { AXMTimesheetPeriodLockedStatusId } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#endregion\n\n//#region ---- Timesheet Period Status Provider ----\n\n/**\n * Timesheet period status provider defining Draft, WaitingApproval, Approved, Rejected, and locked states.\n * Used by the status plugin to manage period submission, approval, rejection, reopen, and lock transitions.\n */\nexport class AXMTimesheetPeriodStatusProvider extends AXPStatusProvider {\n readonly key = 'timesheet-management.status.timesheet-period';\n\n readonly defaultStatus = AXPSystemStatusType.Draft;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.Draft, {\n title: '@timesheet-management:timesheet-periods.states.draft',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.WaitingApproval, {\n title: '@timesheet-management:timesheet-periods.states.waiting-approval',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Approved, {\n title: '@timesheet-management:timesheet-periods.states.approved',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@timesheet-management:timesheet-periods.states.rejected',\n generateView: true,\n }),\n {\n name: AXMTimesheetPeriodLockedStatusId,\n title: '@timesheet-management:timesheet-periods.states.locked',\n color: 'neutral',\n icon: 'fa-light fa-lock',\n generateView: true,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXPSystemStatusType.Draft,\n to: AXPSystemStatusType.WaitingApproval,\n title: '@timesheet-management:timesheet-periods.transitions.submit',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.WaitingApproval,\n to: AXPSystemStatusType.Approved,\n title: '@timesheet-management:timesheet-periods.transitions.approve',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.WaitingApproval,\n to: AXPSystemStatusType.Rejected,\n title: '@timesheet-management:timesheet-periods.transitions.reject',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.Rejected,\n to: AXPSystemStatusType.Draft,\n title: '@timesheet-management:timesheet-periods.transitions.reopen',\n },\n {\n from: AXPSystemStatusType.Approved,\n to: AXPSystemStatusType.Draft,\n title: '@timesheet-management:timesheet-periods.transitions.reopen',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.Approved,\n to: AXMTimesheetPeriodLockedStatusId,\n title: '@timesheet-management:timesheet-periods.transitions.lock',\n requiresApproval: true,\n },\n ];\n}\n\n//#endregion\n","import { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\n\nexport const TimesheetManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'domain',\n domain: 'human-capital',\n required: false,\n};\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPCommonMenuKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n RootConfig,\n AXPProjectsWorkPermissionKeys\n} from '@acorex-platform/module-timesheet-management-client/contracts';\nimport { AXMTimesheetManagementFeatureKeys } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport { AXMTimesheetManagementMenuKeys } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- Menu Provider ----\n\nexport class AXMTimesheetManagementMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n const keys = AXPProjectsWorkPermissionKeys;\n const app = this.sessionService.application?.name ?? ':app';\n\n const organizationMenu = context.find(AXPCommonMenuKeys.Organization);\n if (!organizationMenu.exists) {\n context.addItems([\n {\n name: AXPCommonMenuKeys.Organization,\n priority: 9000,\n text: '@organization-management:module.menus.root.title',\n type: 'menu',\n icon: 'fa-light fa-sitemap',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Organization).addItems([\n {\n name: AXMTimesheetManagementMenuKeys.MyTimesheet,\n text: RootConfig.pages.myTimesheet.title,\n path: `${app}/${RootConfig.module.route}/${RootConfig.pages.myTimesheet.path}`,\n priority: 25,\n icon: RootConfig.pages.myTimesheet.icon,\n policy: {\n permissions: [keys.MaintainTimesheets],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetEntry],\n },\n },\n {\n name: AXMTimesheetManagementMenuKeys.PeriodHistory,\n text: RootConfig.entities.timesheetPeriod.titlePlural,\n path: this.entityService.createPath(module.name, RootConfig.entities.timesheetPeriod.name),\n priority: 26,\n icon: RootConfig.entities.timesheetPeriod.icon,\n policy: {\n permissions: [keys.MaintainTimesheets],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetEntry],\n },\n },\n {\n name: AXMTimesheetManagementMenuKeys.ApprovalInbox,\n text: RootConfig.pages.approvalInbox.title,\n path: `${app}/${RootConfig.module.route}/${RootConfig.pages.approvalInbox.path}`,\n priority: 27,\n icon: RootConfig.pages.approvalInbox.icon,\n policy: {\n permissions: [keys.ManageTimesheetActions],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetApproval],\n },\n },\n {\n name: AXMTimesheetManagementMenuKeys.TeamTimesheets,\n text: RootConfig.pages.teamTimesheets.title,\n path: `${app}/${RootConfig.module.route}/${RootConfig.pages.teamTimesheets.path}`,\n priority: 28,\n icon: RootConfig.pages.teamTimesheets.icon,\n policy: {\n permissions: [keys.ManageTimesheetActions],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetApproval],\n },\n },\n {\n name: AXMTimesheetManagementMenuKeys.WorkItems,\n text: RootConfig.entities.workItem.titlePlural,\n path: this.entityService.createPath(module.name, RootConfig.entities.workItem.name),\n priority: 29,\n icon: RootConfig.entities.workItem.icon,\n policy: {\n permissions: [keys.MaintainTimesheets],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetEntry],\n },\n },\n ]);\n\n const orgConfigMenu = context.find(AXPCommonMenuKeys.OrganizationConfig);\n if (!orgConfigMenu.exists) {\n context.find(AXPCommonMenuKeys.Configuration).addItems([\n {\n name: AXPCommonMenuKeys.OrganizationConfig,\n priority: 8600,\n text: '@organization-management:module.menus.configuration.title',\n icon: module.icon,\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.OrganizationConfig).addItems([\n {\n name: AXMTimesheetManagementMenuKeys.Policies,\n text: RootConfig.entities.timesheetPolicy.titlePlural,\n path: this.entityService.createPath(module.name, RootConfig.entities.timesheetPolicy.name),\n priority: 23,\n icon: RootConfig.entities.timesheetPolicy.icon,\n policy: {\n permissions: [keys.Setup],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetEntry],\n },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPProjectsWorkPermissionKeys\n} from '@acorex-platform/module-timesheet-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers timesheet capabilities into the shared Projects & Work group.\n */\n@Injectable()\nexport class AXMTimesheetManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPProjectsWorkPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:projects-work.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ProjectsWork.Root, `${G}.projects-work.title`, `${G}.projects-work.description`, { order: 60 });\n\n context\n .addGroup(\n groups.ProjectsWork.TimeTracking,\n `${G}.projects-work-time-tracking.title`,\n `${G}.projects-work-time-tracking.description`,\n { parent: groups.ProjectsWork.Root, order: 30 },\n )\n .addPermission(\n keys.MaintainTimesheets,\n `${P}.maintain-timesheets.title`,\n `${P}.maintain-timesheets.description`,\n )\n .endPermission()\n .addPermission(\n keys.ManageTimesheetActions,\n `${P}.manage-timesheet-actions.title`,\n `${P}.manage-timesheet-actions.description`,\n )\n .endPermission()\n .addPermission(\n keys.ViewTimesheetReports,\n `${P}.view-timesheet-reports.title`,\n `${P}.view-timesheet-reports.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXP_MENU_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex-platform/framework-client/common';\nimport { AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRuntimeModule, provideCommandSetups, provideQuerySetups } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport { AXMTimesheetManagementCommandKeys } from '@acorex-platform/module-timesheet-management-client/contracts';\n\nimport { AXMTimesheetManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMMyTimesheetPageComponentProvider } from './features/my-timesheet/my-timesheet-page.component.provider';\nimport { myTimesheetPageRoutes } from './features/my-timesheet/my-timesheet-page.routes';\nimport { AXMTimesheetCorrectionStatusProvider } from './features/timesheet-correction/timesheet-correction-status.provider';\nimport { AXMTimesheetPeriodStatusProvider } from './features/timesheet-period/timesheet-period-status.provider';\nimport { TimesheetManagementManifest } from './manifest';\nimport { AXMTimesheetManagementMenuProvider } from './menu.provider';\nimport { AXMTimesheetManagementPermissionDefinitionProvider } from './permission-definition.provider';\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [CommonModule, AXPRuntimeModule],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: () => [...myTimesheetPageRoutes],\n },\n {\n provide: AXP_PAGE_COMPONENT_PROVIDER,\n useClass: AXMMyTimesheetPageComponentProvider,\n multi: true,\n },\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: TimesheetManagementManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMTimesheetManagementPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMTimesheetManagementMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXMTimesheetManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMTimesheetPeriodStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMTimesheetCorrectionStatusProvider,\n multi: true,\n },\n provideCommandSetups([\n // {\n // key: AXMTimesheetManagementCommandKeys.WorkItemResolveFromJira,\n // command: () =>\n // import('./features/work-item/commands/resolve-work-item-from-jira-issue.command').then(\n // (c) => c.ResolveWorkItemFromJiraIssueCommand,\n // ),\n // },\n {\n key: AXMTimesheetManagementCommandKeys.TimeEntryCreate,\n command: () =>\n import('./features/time-entry/commands/create-time-entry.command').then((c) => c.CreateTimeEntryCommand),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimeEntryUpdate,\n command: () =>\n import('./features/time-entry/commands/update-time-entry.command').then((c) => c.UpdateTimeEntryCommand),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimeEntryDelete,\n command: () =>\n import('./features/time-entry/commands/delete-time-entry.command').then((c) => c.DeleteTimeEntryCommand),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodSubmit,\n command: () =>\n import('./features/timesheet-period/commands/submit-timesheet-period.command').then(\n (c) => c.SubmitTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodApprove,\n command: () =>\n import('./features/timesheet-period/commands/approve-timesheet-period.command').then(\n (c) => c.ApproveTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodReject,\n command: () =>\n import('./features/timesheet-period/commands/reject-timesheet-period.command').then(\n (c) => c.RejectTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodReopen,\n command: () =>\n import('./features/timesheet-period/commands/reopen-timesheet-period.command').then(\n (c) => c.ReopenTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodLock,\n command: () =>\n import('./features/timesheet-period/commands/lock-timesheet-period.command').then(\n (c) => c.LockTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodAdminAdjust,\n command: () =>\n import('./features/timesheet-period/commands/admin-adjust-timesheet-period.command').then(\n (c) => c.AdminAdjustTimesheetPeriodCommand,\n ),\n },\n ]),\n provideQuerySetups([\n {\n key: 'TimesheetManagement:MyTimesheetGrid',\n loader: () =>\n import('./features/reporting/queries/my-timesheet-grid.query').then((c) => c.AXMMyTimesheetGridQuery),\n },\n {\n key: 'TimesheetManagement:TeamTimesheets',\n loader: () =>\n import('./features/reporting/queries/team-timesheets.query').then((c) => c.AXMTeamTimesheetsQuery),\n },\n {\n key: 'TimesheetManagement:ApprovalInbox',\n loader: () => import('./features/reporting/queries/approval-inbox.query').then((c) => c.AXMApprovalInboxQuery),\n },\n {\n key: 'TimesheetManagement:ReportHoursByProject',\n loader: () =>\n import('./features/reporting/queries/report-hours-by-project.query').then(\n (c) => c.AXMReportHoursByProjectQuery,\n ),\n },\n {\n key: 'TimesheetManagement:ReportHoursByWorkItem',\n loader: () =>\n import('./features/reporting/queries/report-hours-by-work-item.query').then(\n (c) => c.AXMReportHoursByWorkItemQuery,\n ),\n },\n {\n key: 'TimesheetManagement:ReportBillableSummary',\n loader: () =>\n import('./features/reporting/queries/report-billable-summary.query').then(\n (c) => c.AXMReportBillableSummaryQuery,\n ),\n },\n {\n key: 'TimesheetManagement:WorkItemSearch',\n loader: () =>\n import('./features/reporting/queries/work-item-search.query').then((c) => c.AXMWorkItemSearchQuery),\n },\n {\n key: 'Workforce:CompareAttendanceVsTimesheet',\n loader: () =>\n import('./features/reporting/queries/compare-attendance-vs-timesheet.query').then(\n (c) => c.AXMCompareAttendanceVsTimesheetQuery,\n ),\n },\n {\n key: 'Workforce:ExceptionReport',\n loader: () =>\n import('./features/reporting/queries/workforce-exception-report.query').then(\n (c) => c.AXMWorkforceExceptionReportQuery,\n ),\n },\n ]),\n ],\n})\nexport class AXMTimesheetManagementModule {}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-timesheet-management-client.mjs","sources":["../../../../libs/modules/timesheet-management/client/src/lib/features/my-timesheet/my-timesheet-page.component.ts","../../../../libs/modules/timesheet-management/client/src/lib/features/my-timesheet/my-timesheet-page.component.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/features/my-timesheet/my-timesheet-page.routes.ts","../../../../libs/modules/timesheet-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/features/timesheet-correction/timesheet-correction-status.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/features/timesheet-period/timesheet-period-status.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/manifest.ts","../../../../libs/modules/timesheet-management/client/src/lib/menu.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/timesheet-management/client/src/lib/timesheet-management.module.ts","../../../../libs/modules/timesheet-management/client/src/acorex-platform-module-timesheet-management-client.ts"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport { AXPThemeLayoutBlockComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n} from '@acorex-platform/framework-client/layout/views';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { groupBy, sumBy } from 'lodash';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimeEntryEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport type { AXMTimesheetManagementTimesheetPeriodEntityModel } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-my-timesheet-page',\n imports: [\n CommonModule,\n AsyncPipe,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n ],\n template: `\n <axp-page-layout>\n <axp-page-content>\n <div class=\"flex flex-col gap-4 p-4\">\n @if (loading()) {\n <ax-loading />\n } @else if (!period()) {\n <p class=\"text-sm text-muted\">\n {{ '@timesheet-management:pages.my-timesheet.empty-period' | translate | async }}\n </p>\n } @else {\n <div class=\"flex flex-wrap items-center justify-between gap-4\">\n <div>\n <p class=\"text-sm font-medium\">\n {{ period()?.startDate }} – {{ period()?.endDate }}\n </p>\n <p class=\"text-xs text-muted\">\n {{ '@timesheet-management:timesheet-periods.entities.timesheet-period.fields.status' | translate | async }}:\n {{ period()?.statusId }}\n </p>\n </div>\n <div class=\"flex items-center gap-3\">\n <p class=\"text-sm\">{{ formatHours(totalSeconds()) }}</p>\n @if (canSubmit()) {\n <ax-button color=\"primary\" (onClick)=\"submitCurrentPeriod()\">\n {{ '@timesheet-management:timesheet-periods.transitions.submit' | translate | async }}\n </ax-button>\n }\n </div>\n </div>\n\n <div class=\"overflow-x-auto rounded border border-surface\">\n <table class=\"w-full text-sm\">\n <thead>\n <tr class=\"border-b border-surface bg-lighter-surface\">\n <th class=\"p-2 text-left\">{{ '@general:terms.date' | translate | async }}</th>\n <th class=\"p-2 text-right\">{{ '@timesheet-management:time-entries.entities.time-entry.fields.duration' | translate | async }}</th>\n <th class=\"p-2 text-left\">{{ '@timesheet-management:work-items.entities.work-item.title' | translate | async }}</th>\n </tr>\n </thead>\n <tbody>\n @for (day of days(); track day.date) {\n <tr class=\"border-b border-lighter-surface\">\n <td class=\"p-2\">{{ day.date }}</td>\n <td class=\"p-2 text-right\">{{ formatHours(day.totalSeconds) }}</td>\n <td class=\"p-2\">{{ day.entries.length }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </axp-page-content>\n </axp-page-layout>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMyTimesheetPageComponent,\n },\n ],\n host: { class: 'axm-my-timesheet-page block w-full' },\n})\nexport class AXMMyTimesheetPageComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly loading = signal(false);\n protected readonly period = signal<AXMTimesheetManagementTimesheetPeriodEntityModel | null>(null);\n protected readonly days = signal<{ date: string; totalSeconds: number; entries: AXMTimesheetManagementTimeEntryEntityModel[] }[]>([]);\n protected readonly totalSeconds = signal(0);\n\n protected readonly canSubmit = computed(\n () => this.period()?.statusId === AXPSystemStatusType.Draft,\n );\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n await this.loadGrid();\n }\n\n //#endregion\n\n //#region ---- Page metadata ----\n\n override getPageTitle(): string {\n return RootConfig.pages.myTimesheet.title;\n }\n\n //#endregion\n\n //#region ---- UI handlers ----\n\n protected formatHours(totalSeconds: number): string {\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n return `${hours}h ${minutes}m`;\n }\n\n //#endregion\n\n //#region ---- Data loading ----\n\n private async loadGrid(): Promise<void> {\n const employeeId = this.sessionService.user?.id;\n if (!employeeId) {\n return;\n }\n\n this.loading.set(true);\n try {\n const periodAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timesheetPeriod.name)\n .data<string, AXMTimesheetManagementTimesheetPeriodEntityModel>();\n\n const periods = await periodAccessor.query({\n skip: 0,\n take: 1,\n sort: [{ field: 'startDate', dir: 'desc' }],\n filter: {\n field: 'employeeId',\n operator: { type: 'equal' },\n value: employeeId,\n },\n });\n\n const currentPeriod = periods.items[0] ?? null;\n this.period.set(currentPeriod);\n\n if (!currentPeriod) {\n this.days.set([]);\n this.totalSeconds.set(0);\n this.recompute();\n return;\n }\n\n const entryAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.timeEntry.name)\n .data<string, AXMTimesheetManagementTimeEntryEntityModel>();\n\n const entriesResult = await entryAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [\n { field: 'employeeId', operator: { type: 'equal' }, value: employeeId },\n { field: 'periodId', operator: { type: 'equal' }, value: currentPeriod.id },\n ],\n },\n });\n\n const grouped = groupBy(entriesResult.items, (row) => row.entryDate);\n const days = Object.keys(grouped)\n .sort()\n .map((date) => ({\n date,\n totalSeconds: sumBy(grouped[date], (row) => row.durationSeconds ?? 0),\n entries: grouped[date],\n }));\n\n this.days.set(days);\n this.totalSeconds.set(sumBy(entriesResult.items, (row) => row.durationSeconds ?? 0));\n this.recompute();\n } finally {\n this.loading.set(false);\n }\n }\n\n /** Submits the current period via the registered command. */\n protected async submitCurrentPeriod(): Promise<void> {\n const id = this.period()?.id;\n if (!id) {\n return;\n }\n\n const result = await this.commandService.execute('TimesheetManagement.TimesheetPeriod:Submit', { id });\n if (result?.success) {\n await this.loadGrid();\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\n\n//#region ---- Page component key ----\n\nexport const MY_TIMESHEET_PAGE_COMPONENT_KEY = 'timesheet-management-my-timesheet-page';\n\n//#endregion\n\n//#region ---- My Timesheet Page Component Provider ----\n\n@Injectable()\nexport class AXMMyTimesheetPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: MY_TIMESHEET_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./my-timesheet-page.component').then((m) => m.AXMMyTimesheetPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { AXP_PROTECTED_ROUTE_GUARDS } from '@acorex-platform/framework-client/common';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { Routes } from '@angular/router';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- My Timesheet Routes ----\n\nexport const myTimesheetPageRoutes: Routes = [\n {\n path: `:app/${RootConfig.module.route}/${RootConfig.pages.myTimesheet.path}`,\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./my-timesheet-page.component').then((m) => m.AXMMyTimesheetPageComponent),\n data: { reuse: true },\n },\n ],\n },\n];\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { AXMTimesheetManagementFeatureKeys } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\nexport class AXMTimesheetManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n context.addFeature(AXMTimesheetManagementFeatureKeys.TimesheetEntry, {\n title: '@timesheet-management:features.timesheet-entry.title',\n description: '@timesheet-management:features.timesheet-entry.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n context.addFeature(AXMTimesheetManagementFeatureKeys.TimesheetApproval, {\n title: '@timesheet-management:features.timesheet-approval.title',\n description: '@timesheet-management:features.timesheet-approval.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n context.addFeature(AXMTimesheetManagementFeatureKeys.TimesheetReporting, {\n title: '@timesheet-management:features.timesheet-reporting.title',\n description: '@timesheet-management:features.timesheet-reporting.description',\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Timesheet Correction Status Provider ----\n\nexport class AXMTimesheetCorrectionStatusProvider extends AXPStatusProvider {\n readonly key = 'timesheet-management.status.timesheet-correction';\n\n readonly defaultStatus = AXPSystemStatusType.WaitingApproval;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.WaitingApproval, {\n title: '@timesheet-management:timesheet-corrections.states.waiting-approval',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Approved, {\n title: '@timesheet-management:timesheet-corrections.states.approved',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@timesheet-management:timesheet-corrections.states.rejected',\n generateView: true,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXPSystemStatusType.WaitingApproval,\n to: AXPSystemStatusType.Approved,\n title: '@general:statuses.transitions.approve',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.WaitingApproval,\n to: AXPSystemStatusType.Rejected,\n title: '@general:statuses.transitions.reject',\n requiresApproval: true,\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\nimport { AXMTimesheetPeriodLockedStatusId } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#endregion\n\n//#region ---- Timesheet Period Status Provider ----\n\n/**\n * Timesheet period status provider defining Draft, WaitingApproval, Approved, Rejected, and locked states.\n * Used by the status plugin to manage period submission, approval, rejection, reopen, and lock transitions.\n */\nexport class AXMTimesheetPeriodStatusProvider extends AXPStatusProvider {\n readonly key = 'timesheet-management.status.timesheet-period';\n\n readonly defaultStatus = AXPSystemStatusType.Draft;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.Draft, {\n title: '@timesheet-management:timesheet-periods.states.draft',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.WaitingApproval, {\n title: '@timesheet-management:timesheet-periods.states.waiting-approval',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Approved, {\n title: '@timesheet-management:timesheet-periods.states.approved',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@timesheet-management:timesheet-periods.states.rejected',\n generateView: true,\n }),\n {\n name: AXMTimesheetPeriodLockedStatusId,\n title: '@timesheet-management:timesheet-periods.states.locked',\n color: 'neutral',\n icon: 'fa-light fa-lock',\n generateView: true,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXPSystemStatusType.Draft,\n to: AXPSystemStatusType.WaitingApproval,\n title: '@timesheet-management:timesheet-periods.transitions.submit',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.WaitingApproval,\n to: AXPSystemStatusType.Approved,\n title: '@timesheet-management:timesheet-periods.transitions.approve',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.WaitingApproval,\n to: AXPSystemStatusType.Rejected,\n title: '@timesheet-management:timesheet-periods.transitions.reject',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.Rejected,\n to: AXPSystemStatusType.Draft,\n title: '@timesheet-management:timesheet-periods.transitions.reopen',\n },\n {\n from: AXPSystemStatusType.Approved,\n to: AXPSystemStatusType.Draft,\n title: '@timesheet-management:timesheet-periods.transitions.reopen',\n requiresApproval: true,\n },\n {\n from: AXPSystemStatusType.Approved,\n to: AXMTimesheetPeriodLockedStatusId,\n title: '@timesheet-management:timesheet-periods.transitions.lock',\n requiresApproval: true,\n },\n ];\n}\n\n//#endregion\n","import { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-timesheet-management-client/contracts';\n\nexport const TimesheetManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'domain',\n domain: 'human-capital',\n required: false,\n};\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPCommonMenuKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n RootConfig,\n AXPProjectsWorkPermissionKeys\n} from '@acorex-platform/module-timesheet-management-client/contracts';\nimport { AXMTimesheetManagementFeatureKeys } from '@acorex-platform/module-timesheet-management-client/contracts';\nimport { AXMTimesheetManagementMenuKeys } from '@acorex-platform/module-timesheet-management-client/contracts';\n\n//#region ---- Menu Provider ----\n\nexport class AXMTimesheetManagementMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n const keys = AXPProjectsWorkPermissionKeys;\n const app = this.sessionService.application?.name ?? ':app';\n\n const organizationMenu = context.find(AXPCommonMenuKeys.Organization);\n if (!organizationMenu.exists) {\n context.addItems([\n {\n name: AXPCommonMenuKeys.Organization,\n priority: 9000,\n text: '@organization-management:module.menus.root.title',\n type: 'menu',\n icon: 'fa-light fa-sitemap',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Organization).addItems([\n {\n name: AXMTimesheetManagementMenuKeys.MyTimesheet,\n text: RootConfig.pages.myTimesheet.title,\n path: `${app}/${RootConfig.module.route}/${RootConfig.pages.myTimesheet.path}`,\n priority: 25,\n icon: RootConfig.pages.myTimesheet.icon,\n policy: {\n permissions: [keys.MaintainTimesheets],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetEntry],\n },\n },\n {\n name: AXMTimesheetManagementMenuKeys.PeriodHistory,\n text: RootConfig.entities.timesheetPeriod.titlePlural,\n path: this.entityService.createPath(module.name, RootConfig.entities.timesheetPeriod.name),\n priority: 26,\n icon: RootConfig.entities.timesheetPeriod.icon,\n policy: {\n permissions: [keys.MaintainTimesheets],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetEntry],\n },\n },\n {\n name: AXMTimesheetManagementMenuKeys.ApprovalInbox,\n text: RootConfig.pages.approvalInbox.title,\n path: `${app}/${RootConfig.module.route}/${RootConfig.pages.approvalInbox.path}`,\n priority: 27,\n icon: RootConfig.pages.approvalInbox.icon,\n policy: {\n permissions: [keys.ManageTimesheetActions],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetApproval],\n },\n },\n {\n name: AXMTimesheetManagementMenuKeys.TeamTimesheets,\n text: RootConfig.pages.teamTimesheets.title,\n path: `${app}/${RootConfig.module.route}/${RootConfig.pages.teamTimesheets.path}`,\n priority: 28,\n icon: RootConfig.pages.teamTimesheets.icon,\n policy: {\n permissions: [keys.ManageTimesheetActions],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetApproval],\n },\n },\n {\n name: AXMTimesheetManagementMenuKeys.WorkItems,\n text: RootConfig.entities.workItem.titlePlural,\n path: this.entityService.createPath(module.name, RootConfig.entities.workItem.name),\n priority: 29,\n icon: RootConfig.entities.workItem.icon,\n policy: {\n permissions: [keys.MaintainTimesheets],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetEntry],\n },\n },\n ]);\n\n const orgConfigMenu = context.find(AXPCommonMenuKeys.OrganizationConfig);\n if (!orgConfigMenu.exists) {\n context.find(AXPCommonMenuKeys.Configuration).addItems([\n {\n name: AXPCommonMenuKeys.OrganizationConfig,\n priority: 8600,\n text: '@organization-management:module.menus.configuration.title',\n icon: module.icon,\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.OrganizationConfig).addItems([\n {\n name: AXMTimesheetManagementMenuKeys.Policies,\n text: RootConfig.entities.timesheetPolicy.titlePlural,\n path: this.entityService.createPath(module.name, RootConfig.entities.timesheetPolicy.name),\n priority: 23,\n icon: RootConfig.entities.timesheetPolicy.icon,\n policy: {\n permissions: [keys.Setup],\n features: [AXMTimesheetManagementFeatureKeys.TimesheetEntry],\n },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPProjectsWorkPermissionKeys\n} from '@acorex-platform/module-timesheet-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers timesheet capabilities into the shared Projects & Work group.\n */\n@Injectable()\nexport class AXMTimesheetManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPProjectsWorkPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:projects-work.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ProjectsWork.Root, `${G}.projects-work.title`, `${G}.projects-work.description`, { order: 60 });\n\n context\n .addGroup(\n groups.ProjectsWork.TimeTracking,\n `${G}.projects-work-time-tracking.title`,\n `${G}.projects-work-time-tracking.description`,\n { parent: groups.ProjectsWork.Root, order: 30 },\n )\n .addPermission(\n keys.MaintainTimesheets,\n `${P}.maintain-timesheets.title`,\n `${P}.maintain-timesheets.description`,\n )\n .endPermission()\n .addPermission(\n keys.ManageTimesheetActions,\n `${P}.manage-timesheet-actions.title`,\n `${P}.manage-timesheet-actions.description`,\n )\n .endPermission()\n .addPermission(\n keys.ViewTimesheetReports,\n `${P}.view-timesheet-reports.title`,\n `${P}.view-timesheet-reports.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXP_MENU_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex-platform/framework-client/common';\nimport { AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRuntimeModule, provideCommandSetups, provideQuerySetups } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport { AXMTimesheetManagementCommandKeys } from '@acorex-platform/module-timesheet-management-client/contracts';\n\nimport { AXMTimesheetManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMMyTimesheetPageComponentProvider } from './features/my-timesheet/my-timesheet-page.component.provider';\nimport { myTimesheetPageRoutes } from './features/my-timesheet/my-timesheet-page.routes';\nimport { AXMTimesheetCorrectionStatusProvider } from './features/timesheet-correction/timesheet-correction-status.provider';\nimport { AXMTimesheetPeriodStatusProvider } from './features/timesheet-period/timesheet-period-status.provider';\nimport { TimesheetManagementManifest } from './manifest';\nimport { AXMTimesheetManagementMenuProvider } from './menu.provider';\nimport { AXMTimesheetManagementPermissionDefinitionProvider } from './permission-definition.provider';\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [CommonModule, AXPRuntimeModule],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: () => [...myTimesheetPageRoutes],\n },\n {\n provide: AXP_PAGE_COMPONENT_PROVIDER,\n useClass: AXMMyTimesheetPageComponentProvider,\n multi: true,\n },\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: TimesheetManagementManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMTimesheetManagementPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMTimesheetManagementMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXMTimesheetManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMTimesheetPeriodStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMTimesheetCorrectionStatusProvider,\n multi: true,\n },\n provideCommandSetups([\n // {\n // key: AXMTimesheetManagementCommandKeys.WorkItemResolveFromJira,\n // command: () =>\n // import('./features/work-item/commands/resolve-work-item-from-jira-issue.command').then(\n // (c) => c.ResolveWorkItemFromJiraIssueCommand,\n // ),\n // },\n {\n key: AXMTimesheetManagementCommandKeys.TimeEntryCreate,\n command: () =>\n import('./features/time-entry/commands/create-time-entry.command').then((c) => c.CreateTimeEntryCommand),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimeEntryUpdate,\n command: () =>\n import('./features/time-entry/commands/update-time-entry.command').then((c) => c.UpdateTimeEntryCommand),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimeEntryDelete,\n command: () =>\n import('./features/time-entry/commands/delete-time-entry.command').then((c) => c.DeleteTimeEntryCommand),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodSubmit,\n command: () =>\n import('./features/timesheet-period/commands/submit-timesheet-period.command').then(\n (c) => c.SubmitTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodApprove,\n command: () =>\n import('./features/timesheet-period/commands/approve-timesheet-period.command').then(\n (c) => c.ApproveTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodReject,\n command: () =>\n import('./features/timesheet-period/commands/reject-timesheet-period.command').then(\n (c) => c.RejectTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodReopen,\n command: () =>\n import('./features/timesheet-period/commands/reopen-timesheet-period.command').then(\n (c) => c.ReopenTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodLock,\n command: () =>\n import('./features/timesheet-period/commands/lock-timesheet-period.command').then(\n (c) => c.LockTimesheetPeriodCommand,\n ),\n },\n {\n key: AXMTimesheetManagementCommandKeys.TimesheetPeriodAdminAdjust,\n command: () =>\n import('./features/timesheet-period/commands/admin-adjust-timesheet-period.command').then(\n (c) => c.AdminAdjustTimesheetPeriodCommand,\n ),\n },\n ]),\n provideQuerySetups([\n {\n key: 'TimesheetManagement:MyTimesheetGrid',\n loader: () =>\n import('./features/reporting/queries/my-timesheet-grid.query').then((c) => c.AXMMyTimesheetGridQuery),\n },\n {\n key: 'TimesheetManagement:TeamTimesheets',\n loader: () =>\n import('./features/reporting/queries/team-timesheets.query').then((c) => c.AXMTeamTimesheetsQuery),\n },\n {\n key: 'TimesheetManagement:ApprovalInbox',\n loader: () => import('./features/reporting/queries/approval-inbox.query').then((c) => c.AXMApprovalInboxQuery),\n },\n {\n key: 'TimesheetManagement:ReportHoursByProject',\n loader: () =>\n import('./features/reporting/queries/report-hours-by-project.query').then(\n (c) => c.AXMReportHoursByProjectQuery,\n ),\n },\n {\n key: 'TimesheetManagement:ReportHoursByWorkItem',\n loader: () =>\n import('./features/reporting/queries/report-hours-by-work-item.query').then(\n (c) => c.AXMReportHoursByWorkItemQuery,\n ),\n },\n {\n key: 'TimesheetManagement:ReportBillableSummary',\n loader: () =>\n import('./features/reporting/queries/report-billable-summary.query').then(\n (c) => c.AXMReportBillableSummaryQuery,\n ),\n },\n {\n key: 'TimesheetManagement:WorkItemSearch',\n loader: () =>\n import('./features/reporting/queries/work-item-search.query').then((c) => c.AXMWorkItemSearchQuery),\n },\n {\n key: 'Workforce:CompareAttendanceVsTimesheet',\n loader: () =>\n import('./features/reporting/queries/compare-attendance-vs-timesheet.query').then(\n (c) => c.AXMCompareAttendanceVsTimesheetQuery,\n ),\n },\n {\n key: 'Workforce:ExceptionReport',\n loader: () =>\n import('./features/reporting/queries/workforce-exception-report.query').then(\n (c) => c.AXMWorkforceExceptionReportQuery,\n ),\n },\n ]),\n ],\n})\nexport class AXMTimesheetManagementModule {}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex-platform/module-timesheet-management-client",
3
- "version": "0.0.33",
3
+ "version": "0.0.38",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0 || ^22.0.0",