@open-mercato/core 0.7.1-develop.7178.1.ab93fbaf4e → 0.7.1-develop.7180.1.9717fbbb43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +2 -2
- package/dist/generated/entities/staff_time_entry/index.js +14 -0
- package/dist/generated/entities/staff_time_entry/index.js.map +2 -2
- package/dist/generated/entities/staff_time_entry_tag/index.js +15 -0
- package/dist/generated/entities/staff_time_entry_tag/index.js.map +7 -0
- package/dist/generated/entities/staff_time_project/index.js +16 -0
- package/dist/generated/entities/staff_time_project/index.js.map +2 -2
- package/dist/generated/entities/staff_time_report/index.js +57 -0
- package/dist/generated/entities/staff_time_report/index.js.map +7 -0
- package/dist/generated/entities/staff_time_report_entry/index.js +27 -0
- package/dist/generated/entities/staff_time_report_entry/index.js.map +7 -0
- package/dist/generated/entities/staff_time_report_event/index.js +21 -0
- package/dist/generated/entities/staff_time_report_event/index.js.map +7 -0
- package/dist/generated/entities/staff_time_report_project/index.js +15 -0
- package/dist/generated/entities/staff_time_report_project/index.js.map +7 -0
- package/dist/generated/entities/staff_time_tag/index.js +21 -0
- package/dist/generated/entities/staff_time_tag/index.js.map +7 -0
- package/dist/generated/entities/staff_time_task/index.js +37 -0
- package/dist/generated/entities/staff_time_task/index.js.map +7 -0
- package/dist/generated/entities/staff_time_task_comment/index.js +21 -0
- package/dist/generated/entities/staff_time_task_comment/index.js.map +7 -0
- package/dist/generated/entities/staff_time_task_status/index.js +29 -0
- package/dist/generated/entities/staff_time_task_status/index.js.map +7 -0
- package/dist/generated/entities/staff_time_task_tag/index.js +15 -0
- package/dist/generated/entities/staff_time_task_tag/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +11 -1
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +149 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/timesheetFixtures.js +7 -0
- package/dist/helpers/integration/timesheetFixtures.js.map +2 -2
- package/dist/modules/auth/cli.js +16 -0
- package/dist/modules/auth/cli.js.map +2 -2
- package/dist/modules/auth/lib/backendChrome.js +1 -0
- package/dist/modules/auth/lib/backendChrome.js.map +2 -2
- package/dist/modules/customer_accounts/lib/customerRoleAcls.js +44 -0
- package/dist/modules/customer_accounts/lib/customerRoleAcls.js.map +7 -0
- package/dist/modules/customer_accounts/setup.js +1 -28
- package/dist/modules/customer_accounts/setup.js.map +2 -2
- package/dist/modules/data_sync/api/options.js +2 -0
- package/dist/modules/data_sync/api/options.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +39 -17
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/lib/start-controls.js +42 -0
- package/dist/modules/data_sync/lib/start-controls.js.map +7 -0
- package/dist/modules/staff/acl.js +9 -1
- package/dist/modules/staff/acl.js.map +2 -2
- package/dist/modules/staff/ai-agents.js +142 -0
- package/dist/modules/staff/ai-agents.js.map +7 -0
- package/dist/modules/staff/ai-tools/time-tracking-pack.js +348 -0
- package/dist/modules/staff/ai-tools/time-tracking-pack.js.map +7 -0
- package/dist/modules/staff/ai-tools/types.js +54 -0
- package/dist/modules/staff/ai-tools/types.js.map +7 -0
- package/dist/modules/staff/ai-tools.js +8 -0
- package/dist/modules/staff/ai-tools.js.map +7 -0
- package/dist/modules/staff/analytics.js +84 -1
- package/dist/modules/staff/analytics.js.map +2 -2
- package/dist/modules/staff/api/guards.js +37 -3
- package/dist/modules/staff/api/guards.js.map +2 -2
- package/dist/modules/staff/api/leave-requests/accept/route.js +1 -3
- package/dist/modules/staff/api/leave-requests/accept/route.js.map +2 -2
- package/dist/modules/staff/api/leave-requests/reject/route.js +1 -3
- package/dist/modules/staff/api/leave-requests/reject/route.js.map +2 -2
- package/dist/modules/staff/api/portal/time-reports/[id]/route.js +131 -0
- package/dist/modules/staff/api/portal/time-reports/[id]/route.js.map +7 -0
- package/dist/modules/staff/api/portal/time-reports/route.js +179 -0
- package/dist/modules/staff/api/portal/time-reports/route.js.map +7 -0
- package/dist/modules/staff/api/team-members/self/route.js +1 -3
- package/dist/modules/staff/api/team-members/self/route.js.map +2 -2
- package/dist/modules/staff/api/team-members/tags/assign/route.js +1 -3
- package/dist/modules/staff/api/team-members/tags/assign/route.js.map +2 -2
- package/dist/modules/staff/api/team-members/tags/unassign/route.js +1 -3
- package/dist/modules/staff/api/team-members/tags/unassign/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.js +174 -0
- package/dist/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.js.map +7 -0
- package/dist/modules/staff/api/timesheets/access-requests/route.js +226 -0
- package/dist/modules/staff/api/timesheets/access-requests/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/my-projects/[projectId]/route.js +15 -8
- package/dist/modules/staff/api/timesheets/my-projects/[projectId]/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/my-projects/route.js +13 -1
- package/dist/modules/staff/api/timesheets/my-projects/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/my-work/myWorkAggregate.js +42 -0
- package/dist/modules/staff/api/timesheets/my-work/myWorkAggregate.js.map +7 -0
- package/dist/modules/staff/api/timesheets/my-work/route.js +383 -0
- package/dist/modules/staff/api/timesheets/my-work/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/projects/kpis/route.js +14 -2
- package/dist/modules/staff/api/timesheets/projects/kpis/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/reports/[id]/close/route.js +168 -0
- package/dist/modules/staff/api/timesheets/reports/[id]/close/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/reports/[id]/export/route.js +246 -0
- package/dist/modules/staff/api/timesheets/reports/[id]/export/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/reports/[id]/sheet/route.js +183 -0
- package/dist/modules/staff/api/timesheets/reports/[id]/sheet/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/reports/[id]/unlock/route.js +164 -0
- package/dist/modules/staff/api/timesheets/reports/[id]/unlock/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/reports/preview/route.js +360 -0
- package/dist/modules/staff/api/timesheets/reports/preview/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/reports/route.js +316 -0
- package/dist/modules/staff/api/timesheets/reports/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/reports/shared.js +63 -0
- package/dist/modules/staff/api/timesheets/reports/shared.js.map +7 -0
- package/dist/modules/staff/api/timesheets/settings/reapply-rounding/route.js +164 -0
- package/dist/modules/staff/api/timesheets/settings/reapply-rounding/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/settings/rounding-impact/route.js +168 -0
- package/dist/modules/staff/api/timesheets/settings/rounding-impact/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/settings/route.js +199 -0
- package/dist/modules/staff/api/timesheets/settings/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tags/access.js +76 -0
- package/dist/modules/staff/api/timesheets/tags/access.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tags/entry-assignments/route.js +235 -0
- package/dist/modules/staff/api/timesheets/tags/entry-assignments/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tags/route.js +160 -0
- package/dist/modules/staff/api/timesheets/tags/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tags/task-assignments/route.js +233 -0
- package/dist/modules/staff/api/timesheets/tags/task-assignments/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/task-statuses/route.js +188 -0
- package/dist/modules/staff/api/timesheets/task-statuses/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js +399 -0
- package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tasks/[id]/status/route.js +210 -0
- package/dist/modules/staff/api/timesheets/tasks/[id]/status/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tasks/route.js +333 -0
- package/dist/modules/staff/api/timesheets/tasks/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.js +228 -0
- package/dist/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.js +29 -10
- package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/route.js +31 -18
- package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.js +21 -7
- package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.js +27 -7
- package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/bulk/route.js +215 -32
- package/dist/modules/staff/api/timesheets/time-entries/bulk/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/copy-day/route.js +378 -0
- package/dist/modules/staff/api/timesheets/time-entries/copy-day/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/time-entries/overlaps/route.js +340 -0
- package/dist/modules/staff/api/timesheets/time-entries/overlaps/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/time-entries/route.js +238 -26
- package/dist/modules/staff/api/timesheets/time-entries/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/start-timer/route.js +23 -8
- package/dist/modules/staff/api/timesheets/time-entries/start-timer/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.js +209 -0
- package/dist/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js +59 -2
- package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-projects/route.js +264 -22
- package/dist/modules/staff/api/timesheets/time-projects/route.js.map +2 -2
- package/dist/modules/staff/backend/staff/time-tracking/board/page.js +110 -0
- package/dist/modules/staff/backend/staff/time-tracking/board/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/board/page.meta.js +18 -0
- package/dist/modules/staff/backend/staff/time-tracking/board/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/entries/page.js +981 -0
- package/dist/modules/staff/backend/staff/time-tracking/entries/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/entries/page.meta.js +18 -0
- package/dist/modules/staff/backend/staff/time-tracking/entries/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/page.js +583 -0
- package/dist/modules/staff/backend/staff/time-tracking/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/page.meta.js +15 -0
- package/dist/modules/staff/backend/staff/time-tracking/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.js +65 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.js +16 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js +229 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.js +16 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js +1014 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.js +16 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.js +97 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.meta.js +16 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/page.js +1040 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/page.meta.js +19 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js +353 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.js +457 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.js +16 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.js +697 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.meta.js +16 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/page.js +174 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/page.meta.js +18 -0
- package/dist/modules/staff/backend/staff/time-tracking/reports/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/settings/page.js +546 -0
- package/dist/modules/staff/backend/staff/time-tracking/settings/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/settings/page.meta.js +18 -0
- package/dist/modules/staff/backend/staff/time-tracking/settings/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/timesheet/GridView.js +710 -0
- package/dist/modules/staff/backend/staff/time-tracking/timesheet/GridView.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.js +646 -0
- package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.meta.js +18 -0
- package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.meta.js.map +7 -0
- package/dist/modules/staff/backend/staff/timesheets/page.js +4 -793
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.meta.js +2 -7
- package/dist/modules/staff/backend/staff/timesheets/page.meta.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.js +5 -136
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.js +1 -7
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js +5 -445
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js.map +3 -3
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.js +1 -7
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/create/page.js +4 -76
- package/dist/modules/staff/backend/staff/timesheets/projects/create/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/create/page.meta.js +1 -7
- package/dist/modules/staff/backend/staff/timesheets/projects/create/page.meta.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +4 -613
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.meta.js +2 -17
- package/dist/modules/staff/backend/staff/timesheets/projects/page.meta.js.map +2 -2
- package/dist/modules/staff/ce.js +40 -0
- package/dist/modules/staff/ce.js.map +2 -2
- package/dist/modules/staff/cli.js +166 -1
- package/dist/modules/staff/cli.js.map +2 -2
- package/dist/modules/staff/commands/index.js +5 -0
- package/dist/modules/staff/commands/index.js.map +2 -2
- package/dist/modules/staff/commands/timesheets-entries.js +569 -21
- package/dist/modules/staff/commands/timesheets-entries.js.map +3 -3
- package/dist/modules/staff/commands/timesheets-projects.js +450 -7
- package/dist/modules/staff/commands/timesheets-projects.js.map +2 -2
- package/dist/modules/staff/commands/timesheets-reports.js +1036 -0
- package/dist/modules/staff/commands/timesheets-reports.js.map +7 -0
- package/dist/modules/staff/commands/timesheets-tags.js +1015 -0
- package/dist/modules/staff/commands/timesheets-tags.js.map +7 -0
- package/dist/modules/staff/commands/timesheets-task-comments.js +438 -0
- package/dist/modules/staff/commands/timesheets-task-comments.js.map +7 -0
- package/dist/modules/staff/commands/timesheets-task-statuses.js +723 -0
- package/dist/modules/staff/commands/timesheets-task-statuses.js.map +7 -0
- package/dist/modules/staff/commands/timesheets-tasks.js +834 -0
- package/dist/modules/staff/commands/timesheets-tasks.js.map +7 -0
- package/dist/modules/staff/data/enrichers.js +426 -12
- package/dist/modules/staff/data/enrichers.js.map +2 -2
- package/dist/modules/staff/data/entities.js +552 -3
- package/dist/modules/staff/data/entities.js.map +2 -2
- package/dist/modules/staff/data/extensions.js +41 -0
- package/dist/modules/staff/data/extensions.js.map +7 -0
- package/dist/modules/staff/data/validators.js +254 -9
- package/dist/modules/staff/data/validators.js.map +2 -2
- package/dist/modules/staff/di.js +42 -1
- package/dist/modules/staff/di.js.map +2 -2
- package/dist/modules/staff/events.js +84 -6
- package/dist/modules/staff/events.js.map +2 -2
- package/dist/modules/staff/events.payloads.js +158 -0
- package/dist/modules/staff/events.payloads.js.map +7 -0
- package/dist/modules/staff/extension-points.js +261 -0
- package/dist/modules/staff/extension-points.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.js +138 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.js +12 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.js +133 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.js +19 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.js.map +7 -0
- package/dist/modules/staff/lib/crud.js +11 -1
- package/dist/modules/staff/lib/crud.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking/access.js +92 -0
- package/dist/modules/staff/lib/time-tracking/access.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/billability.js +39 -0
- package/dist/modules/staff/lib/time-tracking/billability.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/capacity.js +68 -0
- package/dist/modules/staff/lib/time-tracking/capacity.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/componentContracts.js +15 -0
- package/dist/modules/staff/lib/time-tracking/componentContracts.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/cost.js +82 -0
- package/dist/modules/staff/lib/time-tracking/cost.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/duration.js +55 -0
- package/dist/modules/staff/lib/time-tracking/duration.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/featureAccess.js +41 -0
- package/dist/modules/staff/lib/time-tracking/featureAccess.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/interval.js +72 -0
- package/dist/modules/staff/lib/time-tracking/interval.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/migrateProjectCodes.js +88 -0
- package/dist/modules/staff/lib/time-tracking/migrateProjectCodes.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/moneyVisibility.js +10 -0
- package/dist/modules/staff/lib/time-tracking/moneyVisibility.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/overlap.js +87 -0
- package/dist/modules/staff/lib/time-tracking/overlap.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/portalRecipients.js +27 -0
- package/dist/modules/staff/lib/time-tracking/portalRecipients.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/portalReports.js +16 -0
- package/dist/modules/staff/lib/time-tracking/portalReports.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/projectCode.js +135 -0
- package/dist/modules/staff/lib/time-tracking/projectCode.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/reapplyRounding.js +187 -0
- package/dist/modules/staff/lib/time-tracking/reapplyRounding.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/recalculationRunner.js +80 -0
- package/dist/modules/staff/lib/time-tracking/recalculationRunner.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/recalculations.js +56 -0
- package/dist/modules/staff/lib/time-tracking/recalculations.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/registries/invoke.js +63 -0
- package/dist/modules/staff/lib/time-tracking/registries/invoke.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/registries/registry.js +62 -0
- package/dist/modules/staff/lib/time-tracking/registries/registry.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/registries/scope.js +21 -0
- package/dist/modules/staff/lib/time-tracking/registries/scope.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/rollup.js +34 -0
- package/dist/modules/staff/lib/time-tracking/rollup.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/rounding.js +66 -0
- package/dist/modules/staff/lib/time-tracking/rounding.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/roundingImpact.js +39 -0
- package/dist/modules/staff/lib/time-tracking/roundingImpact.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/settingKeys.js +214 -0
- package/dist/modules/staff/lib/time-tracking/settingKeys.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/settings.js +87 -0
- package/dist/modules/staff/lib/time-tracking/settings.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/sqlInClause.js +9 -0
- package/dist/modules/staff/lib/time-tracking/sqlInClause.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/timeEntrySources.js +48 -0
- package/dist/modules/staff/lib/time-tracking/timeEntrySources.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js +283 -0
- package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/CustomerPicker.js +324 -0
- package/dist/modules/staff/lib/time-tracking-ui/CustomerPicker.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/DurationInput.js +121 -0
- package/dist/modules/staff/lib/time-tracking-ui/DurationInput.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/EntryDetailsFields.js +188 -0
- package/dist/modules/staff/lib/time-tracking-ui/EntryDetailsFields.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/EntryFilterBar.js +89 -0
- package/dist/modules/staff/lib/time-tracking-ui/EntryFilterBar.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js +855 -0
- package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js +360 -0
- package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/KanbanColumn.js +259 -0
- package/dist/modules/staff/lib/time-tracking-ui/KanbanColumn.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/NewTaskDialog.js +238 -0
- package/dist/modules/staff/lib/time-tracking-ui/NewTaskDialog.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/NoProjectAccess.js +130 -0
- package/dist/modules/staff/lib/time-tracking-ui/NoProjectAccess.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/PeriodSelector.js +98 -0
- package/dist/modules/staff/lib/time-tracking-ui/PeriodSelector.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/PhasePlaceholder.js +27 -0
- package/dist/modules/staff/lib/time-tracking-ui/PhasePlaceholder.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/ProjectCodeField.js +166 -0
- package/dist/modules/staff/lib/time-tracking-ui/ProjectCodeField.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.js +295 -0
- package/dist/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js +212 -0
- package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.js +729 -0
- package/dist/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/ReportSheet.js +217 -0
- package/dist/modules/staff/lib/time-tracking-ui/ReportSheet.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TagPicker.js +158 -0
- package/dist/modules/staff/lib/time-tracking-ui/TagPicker.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js +224 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js +93 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js +1196 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskListView.js +176 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskListView.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskPicker.js +307 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskPicker.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskQuickLog.js +284 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskQuickLog.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.js +73 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDialog.js +1499 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDialog.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.js +95 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimesheetCalendar.js +188 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimesheetCalendar.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.js +61 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.js +45 -0
- package/dist/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js +176 -0
- package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js +82 -0
- package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/boardSummary.js +5 -0
- package/dist/modules/staff/lib/time-tracking-ui/boardSummary.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js +152 -0
- package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/projectTeamAssignment.js +92 -0
- package/dist/modules/staff/lib/time-tracking-ui/projectTeamAssignment.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js +111 -0
- package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/timeEntryDialogState.js +243 -0
- package/dist/modules/staff/lib/time-tracking-ui/timeEntryDialogState.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/timeEntryListData.js +151 -0
- package/dist/modules/staff/lib/time-tracking-ui/timeEntryListData.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js +105 -0
- package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/timesheetData.js +132 -0
- package/dist/modules/staff/lib/time-tracking-ui/timesheetData.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/timesheetPeriod.js +205 -0
- package/dist/modules/staff/lib/time-tracking-ui/timesheetPeriod.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/timesheetTargets.js +53 -0
- package/dist/modules/staff/lib/time-tracking-ui/timesheetTargets.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/useBoardFilters.js +77 -0
- package/dist/modules/staff/lib/time-tracking-ui/useBoardFilters.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.js +151 -0
- package/dist/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.js.map +7 -0
- package/dist/modules/staff/lib/timeTrackingSeeds.js +809 -0
- package/dist/modules/staff/lib/timeTrackingSeeds.js.map +7 -0
- package/dist/modules/staff/lib/timesheets/timeEntryCacheInvalidation.js +2 -3
- package/dist/modules/staff/lib/timesheets/timeEntryCacheInvalidation.js.map +2 -2
- package/dist/modules/staff/lib/timesheets/timeEntryDecoration.js +152 -0
- package/dist/modules/staff/lib/timesheets/timeEntryDecoration.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-projects/budgetBurn.js +36 -0
- package/dist/modules/staff/lib/timesheets-projects/budgetBurn.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-projects/budgetThreshold.js +66 -0
- package/dist/modules/staff/lib/timesheets-projects/budgetThreshold.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-projects/budgetThresholdState.js +78 -0
- package/dist/modules/staff/lib/timesheets-projects/budgetThresholdState.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-projects/computeProjectFinancials.js +81 -0
- package/dist/modules/staff/lib/timesheets-projects/computeProjectFinancials.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-projects/reportSelection.js +44 -0
- package/dist/modules/staff/lib/timesheets-projects/reportSelection.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.js +169 -0
- package/dist/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.js +22 -0
- package/dist/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-projects-ui/ProjectCard.js +51 -1
- package/dist/modules/staff/lib/timesheets-projects-ui/ProjectCard.js.map +2 -2
- package/dist/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.js +70 -0
- package/dist/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/buildReportSheet.js +63 -0
- package/dist/modules/staff/lib/timesheets-reports/buildReportSheet.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/loadReportData.js +170 -0
- package/dist/modules/staff/lib/timesheets-reports/loadReportData.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/pdf.js +205 -0
- package/dist/modules/staff/lib/timesheets-reports/pdf.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportApprovalPolicies.js +68 -0
- package/dist/modules/staff/lib/timesheets-reports/reportApprovalPolicies.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportConfigData.js +135 -0
- package/dist/modules/staff/lib/timesheets-reports/reportConfigData.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportConfigState.js +48 -0
- package/dist/modules/staff/lib/timesheets-reports/reportConfigState.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportExport.js +262 -0
- package/dist/modules/staff/lib/timesheets-reports/reportExport.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportExportFormats.js +34 -0
- package/dist/modules/staff/lib/timesheets-reports/reportExportFormats.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportGroupings.js +79 -0
- package/dist/modules/staff/lib/timesheets-reports/reportGroupings.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportLabels.js +11 -0
- package/dist/modules/staff/lib/timesheets-reports/reportLabels.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportReference.js +83 -0
- package/dist/modules/staff/lib/timesheets-reports/reportReference.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportRows.js +42 -0
- package/dist/modules/staff/lib/timesheets-reports/reportRows.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportSheetData.js +107 -0
- package/dist/modules/staff/lib/timesheets-reports/reportSheetData.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/reportTotals.js +289 -0
- package/dist/modules/staff/lib/timesheets-reports/reportTotals.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-reports/xlsx.js +145 -0
- package/dist/modules/staff/lib/timesheets-reports/xlsx.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-tasks/computeTaskRollups.js +116 -0
- package/dist/modules/staff/lib/timesheets-tasks/computeTaskRollups.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.js +50 -0
- package/dist/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-tasks/seedProjectStatuses.js +27 -0
- package/dist/modules/staff/lib/timesheets-tasks/seedProjectStatuses.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-tasks/statusPositions.js +65 -0
- package/dist/modules/staff/lib/timesheets-tasks/statusPositions.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-tasks/statusSlug.js +31 -0
- package/dist/modules/staff/lib/timesheets-tasks/statusSlug.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-tasks/taskHierarchy.js +31 -0
- package/dist/modules/staff/lib/timesheets-tasks/taskHierarchy.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-tasks/taskHoursTotals.js +17 -0
- package/dist/modules/staff/lib/timesheets-tasks/taskHoursTotals.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-tasks/taskReference.js +51 -0
- package/dist/modules/staff/lib/timesheets-tasks/taskReference.js.map +7 -0
- package/dist/modules/staff/lib/timesheets-ui/CreateProjectDialog.js +11 -4
- package/dist/modules/staff/lib/timesheets-ui/CreateProjectDialog.js.map +2 -2
- package/dist/modules/staff/lib/timesheets-ui/ListView.js +369 -111
- package/dist/modules/staff/lib/timesheets-ui/ListView.js.map +2 -2
- package/dist/modules/staff/lib/timesheets-ui/TimerBar.js +47 -2
- package/dist/modules/staff/lib/timesheets-ui/TimerBar.js.map +2 -2
- package/dist/modules/staff/migrations/Migration20260813073131_staff.js +79 -0
- package/dist/modules/staff/migrations/Migration20260813073131_staff.js.map +7 -0
- package/dist/modules/staff/migrations/Migration20260824143357_staff.js +15 -0
- package/dist/modules/staff/migrations/Migration20260824143357_staff.js.map +7 -0
- package/dist/modules/staff/notifications.client.js +16 -0
- package/dist/modules/staff/notifications.client.js.map +7 -0
- package/dist/modules/staff/notifications.handlers.js +80 -0
- package/dist/modules/staff/notifications.handlers.js.map +7 -0
- package/dist/modules/staff/notifications.js +168 -0
- package/dist/modules/staff/notifications.js.map +2 -2
- package/dist/modules/staff/search.js +159 -1
- package/dist/modules/staff/search.js.map +2 -2
- package/dist/modules/staff/setup.js +20 -1
- package/dist/modules/staff/setup.js.map +2 -2
- package/dist/modules/staff/subscribers/time-project-access-requested-notification.js +68 -0
- package/dist/modules/staff/subscribers/time-project-access-requested-notification.js.map +7 -0
- package/dist/modules/staff/subscribers/time-project-budget-threshold-notification.js +149 -0
- package/dist/modules/staff/subscribers/time-project-budget-threshold-notification.js.map +7 -0
- package/dist/modules/staff/subscribers/time-report-approved-notification.js +78 -0
- package/dist/modules/staff/subscribers/time-report-approved-notification.js.map +7 -0
- package/dist/modules/staff/subscribers/time-report-portal-broadcast.js +78 -0
- package/dist/modules/staff/subscribers/time-report-portal-broadcast.js.map +7 -0
- package/dist/modules/staff/translations.js +4 -1
- package/dist/modules/staff/translations.js.map +2 -2
- package/dist/modules/staff/widgets/components.js +7 -0
- package/dist/modules/staff/widgets/components.js.map +7 -0
- package/dist/modules/staff/widgets/injection/timer-sidebar-indicator/widget.js +5 -4
- package/dist/modules/staff/widgets/injection/timer-sidebar-indicator/widget.js.map +2 -2
- package/dist/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.js +135 -0
- package/dist/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.js.map +7 -0
- package/dist/modules/staff/widgets/notifications/index.js +5 -0
- package/dist/modules/staff/widgets/notifications/index.js.map +7 -0
- package/dist/modules/staff/workers/timesheets-reapply-rounding.js +43 -0
- package/dist/modules/staff/workers/timesheets-reapply-rounding.js.map +7 -0
- package/generated/entities/staff_time_entry/index.ts +7 -0
- package/generated/entities/staff_time_entry_tag/index.ts +6 -0
- package/generated/entities/staff_time_project/index.ts +8 -0
- package/generated/entities/staff_time_report/index.ts +27 -0
- package/generated/entities/staff_time_report_entry/index.ts +12 -0
- package/generated/entities/staff_time_report_event/index.ts +9 -0
- package/generated/entities/staff_time_report_project/index.ts +6 -0
- package/generated/entities/staff_time_tag/index.ts +9 -0
- package/generated/entities/staff_time_task/index.ts +17 -0
- package/generated/entities/staff_time_task_comment/index.ts +9 -0
- package/generated/entities/staff_time_task_status/index.ts +13 -0
- package/generated/entities/staff_time_task_tag/index.ts +6 -0
- package/generated/entities.ids.generated.ts +11 -1
- package/generated/entity-fields-registry.ts +149 -0
- package/package.json +7 -7
- package/src/helpers/integration/timesheetFixtures.ts +31 -1
- package/src/modules/auth/README.md +1 -1
- package/src/modules/auth/cli.ts +35 -1
- package/src/modules/auth/i18n/de.json +7 -0
- package/src/modules/auth/i18n/en.json +7 -0
- package/src/modules/auth/i18n/es.json +7 -0
- package/src/modules/auth/i18n/ko.json +7 -0
- package/src/modules/auth/i18n/pl.json +7 -0
- package/src/modules/auth/lib/backendChrome.tsx +1 -0
- package/src/modules/customer_accounts/lib/customerRoleAcls.ts +79 -0
- package/src/modules/customer_accounts/setup.ts +1 -45
- package/src/modules/data_sync/AGENTS.md +34 -0
- package/src/modules/data_sync/api/options.ts +2 -0
- package/src/modules/data_sync/backend/data-sync/page.tsx +82 -33
- package/src/modules/data_sync/i18n/de.json +1 -0
- package/src/modules/data_sync/i18n/en.json +1 -0
- package/src/modules/data_sync/i18n/es.json +1 -0
- package/src/modules/data_sync/i18n/ko.json +1 -0
- package/src/modules/data_sync/i18n/pl.json +1 -0
- package/src/modules/data_sync/lib/adapter.ts +45 -0
- package/src/modules/data_sync/lib/start-controls.ts +89 -0
- package/src/modules/staff/AGENTS.md +769 -1
- package/src/modules/staff/acl.ts +9 -0
- package/src/modules/staff/ai-agents.ts +189 -0
- package/src/modules/staff/ai-tools/time-tracking-pack.ts +494 -0
- package/src/modules/staff/ai-tools/types.ts +82 -0
- package/src/modules/staff/ai-tools.ts +13 -0
- package/src/modules/staff/analytics.ts +113 -0
- package/src/modules/staff/api/guards.ts +85 -3
- package/src/modules/staff/api/leave-requests/accept/route.ts +0 -2
- package/src/modules/staff/api/leave-requests/reject/route.ts +0 -2
- package/src/modules/staff/api/portal/time-reports/[id]/route.ts +182 -0
- package/src/modules/staff/api/portal/time-reports/route.ts +270 -0
- package/src/modules/staff/api/team-members/self/route.ts +0 -2
- package/src/modules/staff/api/team-members/tags/assign/route.ts +0 -2
- package/src/modules/staff/api/team-members/tags/unassign/route.ts +0 -2
- package/src/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.ts +292 -0
- package/src/modules/staff/api/timesheets/access-requests/route.ts +299 -0
- package/src/modules/staff/api/timesheets/my-projects/[projectId]/route.ts +15 -7
- package/src/modules/staff/api/timesheets/my-projects/route.ts +14 -1
- package/src/modules/staff/api/timesheets/my-work/myWorkAggregate.ts +90 -0
- package/src/modules/staff/api/timesheets/my-work/route.ts +475 -0
- package/src/modules/staff/api/timesheets/projects/kpis/route.ts +15 -2
- package/src/modules/staff/api/timesheets/reports/[id]/close/route.ts +203 -0
- package/src/modules/staff/api/timesheets/reports/[id]/export/route.ts +315 -0
- package/src/modules/staff/api/timesheets/reports/[id]/sheet/route.ts +220 -0
- package/src/modules/staff/api/timesheets/reports/[id]/unlock/route.ts +208 -0
- package/src/modules/staff/api/timesheets/reports/preview/route.ts +449 -0
- package/src/modules/staff/api/timesheets/reports/route.ts +386 -0
- package/src/modules/staff/api/timesheets/reports/shared.ts +121 -0
- package/src/modules/staff/api/timesheets/settings/reapply-rounding/route.ts +205 -0
- package/src/modules/staff/api/timesheets/settings/rounding-impact/route.ts +226 -0
- package/src/modules/staff/api/timesheets/settings/route.ts +242 -0
- package/src/modules/staff/api/timesheets/tags/access.ts +134 -0
- package/src/modules/staff/api/timesheets/tags/entry-assignments/route.ts +290 -0
- package/src/modules/staff/api/timesheets/tags/route.ts +177 -0
- package/src/modules/staff/api/timesheets/tags/task-assignments/route.ts +294 -0
- package/src/modules/staff/api/timesheets/task-statuses/route.ts +232 -0
- package/src/modules/staff/api/timesheets/tasks/[id]/comments/route.ts +532 -0
- package/src/modules/staff/api/timesheets/tasks/[id]/status/route.ts +271 -0
- package/src/modules/staff/api/timesheets/tasks/route.ts +443 -0
- package/src/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.ts +306 -0
- package/src/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.ts +32 -10
- package/src/modules/staff/api/timesheets/time-entries/[id]/segments/route.ts +32 -17
- package/src/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.ts +27 -6
- package/src/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.ts +36 -6
- package/src/modules/staff/api/timesheets/time-entries/bulk/route.ts +331 -34
- package/src/modules/staff/api/timesheets/time-entries/copy-day/route.ts +533 -0
- package/src/modules/staff/api/timesheets/time-entries/overlaps/route.ts +457 -0
- package/src/modules/staff/api/timesheets/time-entries/route.ts +378 -24
- package/src/modules/staff/api/timesheets/time-entries/start-timer/route.ts +31 -9
- package/src/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.ts +246 -0
- package/src/modules/staff/api/timesheets/time-projects/[id]/employees/route.ts +62 -2
- package/src/modules/staff/api/timesheets/time-projects/route.ts +397 -22
- package/src/modules/staff/backend/staff/time-tracking/board/page.meta.ts +14 -0
- package/src/modules/staff/backend/staff/time-tracking/board/page.tsx +151 -0
- package/src/modules/staff/backend/staff/time-tracking/entries/page.meta.ts +14 -0
- package/src/modules/staff/backend/staff/time-tracking/entries/page.tsx +1229 -0
- package/src/modules/staff/backend/staff/time-tracking/page.meta.ts +11 -0
- package/src/modules/staff/backend/staff/time-tracking/page.tsx +823 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.ts +12 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.tsx +81 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.ts +12 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.tsx +275 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.ts +12 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/[id]/page.tsx +1420 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/create/page.meta.ts +12 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/create/page.tsx +109 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/page.meta.ts +15 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/page.tsx +1254 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.ts +466 -0
- package/src/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.ts +12 -0
- package/src/modules/staff/backend/staff/time-tracking/reports/[id]/page.tsx +632 -0
- package/src/modules/staff/backend/staff/time-tracking/reports/create/page.meta.ts +12 -0
- package/src/modules/staff/backend/staff/time-tracking/reports/create/page.tsx +867 -0
- package/src/modules/staff/backend/staff/time-tracking/reports/page.meta.ts +14 -0
- package/src/modules/staff/backend/staff/time-tracking/reports/page.tsx +246 -0
- package/src/modules/staff/backend/staff/time-tracking/settings/page.meta.ts +14 -0
- package/src/modules/staff/backend/staff/time-tracking/settings/page.tsx +701 -0
- package/src/modules/staff/backend/staff/time-tracking/timesheet/GridView.tsx +953 -0
- package/src/modules/staff/backend/staff/time-tracking/timesheet/page.meta.ts +14 -0
- package/src/modules/staff/backend/staff/time-tracking/timesheet/page.tsx +800 -0
- package/src/modules/staff/backend/staff/timesheets/page.meta.ts +6 -6
- package/src/modules/staff/backend/staff/timesheets/page.tsx +12 -1010
- package/src/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.ts +0 -6
- package/src/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.tsx +4 -158
- package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.ts +0 -6
- package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.tsx +4 -609
- package/src/modules/staff/backend/staff/timesheets/projects/create/page.meta.ts +0 -6
- package/src/modules/staff/backend/staff/timesheets/projects/create/page.tsx +3 -89
- package/src/modules/staff/backend/staff/timesheets/projects/page.meta.ts +2 -19
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +3 -778
- package/src/modules/staff/ce.ts +63 -0
- package/src/modules/staff/cli.ts +207 -1
- package/src/modules/staff/commands/index.ts +5 -0
- package/src/modules/staff/commands/timesheets-entries.ts +1006 -28
- package/src/modules/staff/commands/timesheets-projects.ts +593 -7
- package/src/modules/staff/commands/timesheets-reports.ts +1329 -0
- package/src/modules/staff/commands/timesheets-tags.ts +1315 -0
- package/src/modules/staff/commands/timesheets-task-comments.ts +583 -0
- package/src/modules/staff/commands/timesheets-task-statuses.ts +889 -0
- package/src/modules/staff/commands/timesheets-tasks.ts +1121 -0
- package/src/modules/staff/data/enrichers.ts +675 -10
- package/src/modules/staff/data/entities.ts +494 -2
- package/src/modules/staff/data/extensions.ts +68 -0
- package/src/modules/staff/data/validators.ts +348 -3
- package/src/modules/staff/di.ts +96 -0
- package/src/modules/staff/events.payloads.ts +268 -0
- package/src/modules/staff/events.ts +87 -5
- package/src/modules/staff/extension-points.ts +308 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.ts +10 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.tsx +225 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.ts +17 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/page.tsx +182 -0
- package/src/modules/staff/i18n/de.json +899 -0
- package/src/modules/staff/i18n/en.json +899 -0
- package/src/modules/staff/i18n/es.json +899 -0
- package/src/modules/staff/i18n/ko.json +899 -0
- package/src/modules/staff/i18n/pl.json +899 -0
- package/src/modules/staff/lib/crud.ts +14 -3
- package/src/modules/staff/lib/time-tracking/access.ts +155 -0
- package/src/modules/staff/lib/time-tracking/billability.ts +68 -0
- package/src/modules/staff/lib/time-tracking/capacity.ts +124 -0
- package/src/modules/staff/lib/time-tracking/componentContracts.ts +26 -0
- package/src/modules/staff/lib/time-tracking/cost.ts +144 -0
- package/src/modules/staff/lib/time-tracking/duration.ts +68 -0
- package/src/modules/staff/lib/time-tracking/featureAccess.ts +115 -0
- package/src/modules/staff/lib/time-tracking/interval.ts +90 -0
- package/src/modules/staff/lib/time-tracking/migrateProjectCodes.ts +161 -0
- package/src/modules/staff/lib/time-tracking/moneyVisibility.ts +37 -0
- package/src/modules/staff/lib/time-tracking/overlap.ts +159 -0
- package/src/modules/staff/lib/time-tracking/portalRecipients.ts +76 -0
- package/src/modules/staff/lib/time-tracking/portalReports.ts +31 -0
- package/src/modules/staff/lib/time-tracking/projectCode.ts +221 -0
- package/src/modules/staff/lib/time-tracking/reapplyRounding.ts +313 -0
- package/src/modules/staff/lib/time-tracking/recalculationRunner.ts +118 -0
- package/src/modules/staff/lib/time-tracking/recalculations.ts +135 -0
- package/src/modules/staff/lib/time-tracking/registries/invoke.ts +122 -0
- package/src/modules/staff/lib/time-tracking/registries/registry.ts +124 -0
- package/src/modules/staff/lib/time-tracking/registries/scope.ts +56 -0
- package/src/modules/staff/lib/time-tracking/rollup.ts +59 -0
- package/src/modules/staff/lib/time-tracking/rounding.ts +126 -0
- package/src/modules/staff/lib/time-tracking/roundingImpact.ts +75 -0
- package/src/modules/staff/lib/time-tracking/settingKeys.ts +274 -0
- package/src/modules/staff/lib/time-tracking/settings.ts +168 -0
- package/src/modules/staff/lib/time-tracking/sqlInClause.ts +22 -0
- package/src/modules/staff/lib/time-tracking/timeEntrySources.ts +85 -0
- package/src/modules/staff/lib/time-tracking-ui/BoardFilterChips.tsx +360 -0
- package/src/modules/staff/lib/time-tracking-ui/CustomerPicker.tsx +427 -0
- package/src/modules/staff/lib/time-tracking-ui/DurationInput.tsx +192 -0
- package/src/modules/staff/lib/time-tracking-ui/EntryDetailsFields.tsx +224 -0
- package/src/modules/staff/lib/time-tracking-ui/EntryFilterBar.tsx +144 -0
- package/src/modules/staff/lib/time-tracking-ui/KanbanBoard.tsx +1065 -0
- package/src/modules/staff/lib/time-tracking-ui/KanbanCard.tsx +435 -0
- package/src/modules/staff/lib/time-tracking-ui/KanbanColumn.tsx +316 -0
- package/src/modules/staff/lib/time-tracking-ui/NewTaskDialog.tsx +291 -0
- package/src/modules/staff/lib/time-tracking-ui/NoProjectAccess.tsx +162 -0
- package/src/modules/staff/lib/time-tracking-ui/PeriodSelector.tsx +149 -0
- package/src/modules/staff/lib/time-tracking-ui/PhasePlaceholder.tsx +31 -0
- package/src/modules/staff/lib/time-tracking-ui/ProjectCodeField.tsx +230 -0
- package/src/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.tsx +432 -0
- package/src/modules/staff/lib/time-tracking-ui/ProjectFormSections.tsx +323 -0
- package/src/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.tsx +930 -0
- package/src/modules/staff/lib/time-tracking-ui/ReportSheet.tsx +357 -0
- package/src/modules/staff/lib/time-tracking-ui/TagPicker.tsx +195 -0
- package/src/modules/staff/lib/time-tracking-ui/TaskBoardScreen.tsx +243 -0
- package/src/modules/staff/lib/time-tracking-ui/TaskCommentThread.tsx +137 -0
- package/src/modules/staff/lib/time-tracking-ui/TaskDrawer.tsx +1405 -0
- package/src/modules/staff/lib/time-tracking-ui/TaskListView.tsx +260 -0
- package/src/modules/staff/lib/time-tracking-ui/TaskPicker.tsx +435 -0
- package/src/modules/staff/lib/time-tracking-ui/TaskQuickLog.tsx +296 -0
- package/src/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.tsx +97 -0
- package/src/modules/staff/lib/time-tracking-ui/TimeEntryDialog.tsx +1929 -0
- package/src/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.tsx +126 -0
- package/src/modules/staff/lib/time-tracking-ui/TimesheetCalendar.tsx +265 -0
- package/src/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.tsx +78 -0
- package/src/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.tsx +70 -0
- package/src/modules/staff/lib/time-tracking-ui/boardDirectory.ts +231 -0
- package/src/modules/staff/lib/time-tracking-ui/boardFilters.ts +128 -0
- package/src/modules/staff/lib/time-tracking-ui/boardSummary.ts +20 -0
- package/src/modules/staff/lib/time-tracking-ui/kanbanBoardData.ts +228 -0
- package/src/modules/staff/lib/time-tracking-ui/projectTeamAssignment.ts +143 -0
- package/src/modules/staff/lib/time-tracking-ui/taskDrawerData.ts +194 -0
- package/src/modules/staff/lib/time-tracking-ui/timeEntryDialogState.ts +400 -0
- package/src/modules/staff/lib/time-tracking-ui/timeEntryListData.ts +271 -0
- package/src/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.ts +168 -0
- package/src/modules/staff/lib/time-tracking-ui/timesheetData.ts +225 -0
- package/src/modules/staff/lib/time-tracking-ui/timesheetPeriod.ts +278 -0
- package/src/modules/staff/lib/time-tracking-ui/timesheetTargets.ts +93 -0
- package/src/modules/staff/lib/time-tracking-ui/useBoardFilters.ts +107 -0
- package/src/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.ts +245 -0
- package/src/modules/staff/lib/timeTrackingSeeds.ts +1037 -0
- package/src/modules/staff/lib/timesheets/timeEntryCacheInvalidation.ts +11 -10
- package/src/modules/staff/lib/timesheets/timeEntryDecoration.ts +256 -0
- package/src/modules/staff/lib/timesheets-projects/budgetBurn.ts +60 -0
- package/src/modules/staff/lib/timesheets-projects/budgetThreshold.ts +135 -0
- package/src/modules/staff/lib/timesheets-projects/budgetThresholdState.ts +137 -0
- package/src/modules/staff/lib/timesheets-projects/computeProjectFinancials.ts +142 -0
- package/src/modules/staff/lib/timesheets-projects/reportSelection.ts +82 -0
- package/src/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.tsx +237 -0
- package/src/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.tsx +33 -0
- package/src/modules/staff/lib/timesheets-projects-ui/ProjectCard.tsx +56 -1
- package/src/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.tsx +90 -0
- package/src/modules/staff/lib/timesheets-reports/buildReportSheet.ts +125 -0
- package/src/modules/staff/lib/timesheets-reports/loadReportData.ts +251 -0
- package/src/modules/staff/lib/timesheets-reports/pdf.ts +263 -0
- package/src/modules/staff/lib/timesheets-reports/reportApprovalPolicies.ts +137 -0
- package/src/modules/staff/lib/timesheets-reports/reportConfigData.ts +247 -0
- package/src/modules/staff/lib/timesheets-reports/reportConfigState.ts +89 -0
- package/src/modules/staff/lib/timesheets-reports/reportExport.ts +373 -0
- package/src/modules/staff/lib/timesheets-reports/reportExportFormats.ts +71 -0
- package/src/modules/staff/lib/timesheets-reports/reportGroupings.ts +153 -0
- package/src/modules/staff/lib/timesheets-reports/reportLabels.ts +23 -0
- package/src/modules/staff/lib/timesheets-reports/reportReference.ts +146 -0
- package/src/modules/staff/lib/timesheets-reports/reportRows.ts +89 -0
- package/src/modules/staff/lib/timesheets-reports/reportSheetData.ts +196 -0
- package/src/modules/staff/lib/timesheets-reports/reportTotals.ts +544 -0
- package/src/modules/staff/lib/timesheets-reports/xlsx.ts +207 -0
- package/src/modules/staff/lib/timesheets-tasks/computeTaskRollups.ts +238 -0
- package/src/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.ts +90 -0
- package/src/modules/staff/lib/timesheets-tasks/seedProjectStatuses.ts +43 -0
- package/src/modules/staff/lib/timesheets-tasks/statusPositions.ts +132 -0
- package/src/modules/staff/lib/timesheets-tasks/statusSlug.ts +43 -0
- package/src/modules/staff/lib/timesheets-tasks/taskHierarchy.ts +99 -0
- package/src/modules/staff/lib/timesheets-tasks/taskHoursTotals.ts +42 -0
- package/src/modules/staff/lib/timesheets-tasks/taskReference.ts +108 -0
- package/src/modules/staff/lib/timesheets-ui/CreateProjectDialog.tsx +18 -4
- package/src/modules/staff/lib/timesheets-ui/ListView.tsx +504 -149
- package/src/modules/staff/lib/timesheets-ui/TimerBar.tsx +50 -2
- package/src/modules/staff/migrations/.snapshot-open-mercato.json +3244 -228
- package/src/modules/staff/migrations/Migration20260813073131_staff.ts +94 -0
- package/src/modules/staff/migrations/Migration20260824143357_staff.ts +17 -0
- package/src/modules/staff/notifications.client.ts +16 -0
- package/src/modules/staff/notifications.handlers.ts +88 -0
- package/src/modules/staff/notifications.ts +163 -0
- package/src/modules/staff/search.ts +191 -1
- package/src/modules/staff/setup.ts +22 -0
- package/src/modules/staff/subscribers/time-project-access-requested-notification.ts +95 -0
- package/src/modules/staff/subscribers/time-project-budget-threshold-notification.ts +226 -0
- package/src/modules/staff/subscribers/time-report-approved-notification.ts +116 -0
- package/src/modules/staff/subscribers/time-report-portal-broadcast.ts +120 -0
- package/src/modules/staff/translations.ts +17 -0
- package/src/modules/staff/widgets/components.ts +34 -0
- package/src/modules/staff/widgets/injection/timer-sidebar-indicator/widget.tsx +6 -5
- package/src/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.tsx +138 -0
- package/src/modules/staff/widgets/notifications/index.ts +1 -0
- package/src/modules/staff/workers/timesheets-reapply-rounding.ts +59 -0
- package/dist/modules/staff/backend/staff/timesheets/projects/projectFormConfig.js +0 -123
- package/dist/modules/staff/backend/staff/timesheets/projects/projectFormConfig.js.map +0 -7
- package/src/modules/staff/backend/staff/timesheets/projects/projectFormConfig.ts +0 -138
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod'
|
|
2
2
|
import { PROJECT_COLOR_KEYS } from '../lib/timesheets-ui/colors'
|
|
3
|
+
import { hasTimeEntrySource, timeEntrySourceIds } from '../lib/time-tracking/timeEntrySources'
|
|
4
|
+
import { hasReportGrouping, reportGroupingIds } from '../lib/timesheets-reports/reportGroupings'
|
|
5
|
+
import {
|
|
6
|
+
buildTimeTrackingSettingsSchema,
|
|
7
|
+
timeTrackingRoundingDirectionSchema,
|
|
8
|
+
timeTrackingRoundingUnitMinutesSchema,
|
|
9
|
+
} from '../lib/time-tracking/settingKeys'
|
|
3
10
|
|
|
4
11
|
const projectColorSchema = z
|
|
5
12
|
.string()
|
|
@@ -259,11 +266,60 @@ export type StaffTeamMemberSelfCreateInput = z.infer<typeof staffTeamMemberSelfC
|
|
|
259
266
|
|
|
260
267
|
// --- Timesheets validators (Phase 1) ---
|
|
261
268
|
|
|
262
|
-
|
|
269
|
+
/**
|
|
270
|
+
* EP-37: validated against the time-entry source registry rather than a literal
|
|
271
|
+
* enum, so a contributed source is accepted on write the moment its module is
|
|
272
|
+
* enabled. `superRefine` rather than `z.enum(...)` because the accepted set is
|
|
273
|
+
* only known at call time.
|
|
274
|
+
*/
|
|
275
|
+
const timeEntrySourceSchema = z
|
|
276
|
+
.string()
|
|
277
|
+
.superRefine((value, ctx) => {
|
|
278
|
+
if (hasTimeEntrySource(value)) return
|
|
279
|
+
ctx.addIssue({
|
|
280
|
+
code: z.ZodIssueCode.custom,
|
|
281
|
+
message: `[internal] unknown time entry source: ${value}`,
|
|
282
|
+
params: { accepted: timeEntrySourceIds() },
|
|
283
|
+
})
|
|
284
|
+
})
|
|
263
285
|
const timeProjectStatusSchema = z.enum(['active', 'on_hold', 'completed'])
|
|
264
286
|
const timeProjectMemberStatusSchema = z.enum(['active', 'inactive'])
|
|
265
287
|
const timeEntrySegmentTypeSchema = z.enum(['work', 'break'])
|
|
266
288
|
const projectCodeSchema = z.string().min(1).max(50).regex(/^[a-zA-Z0-9-]+$/)
|
|
289
|
+
const moneyAmountSchema = z.number().min(0).max(99_999_999)
|
|
290
|
+
const timeProjectBudgetKindSchema = z.enum(['none', 'hours', 'amount'])
|
|
291
|
+
|
|
292
|
+
// Upper-cased at the boundary so every writer stores canonical ISO 4217. The report
|
|
293
|
+
// single-currency assertion compares codes case-sensitively, so `pln` and `PLN` would
|
|
294
|
+
// otherwise read as two currencies and wrongly block a customer report.
|
|
295
|
+
const currencyCodeSchema = z.string().trim().length(3).transform((value) => value.toUpperCase())
|
|
296
|
+
|
|
297
|
+
// numeric(14,4): ten integer digits, four decimals, never negative.
|
|
298
|
+
const numericAmountPattern = /^\d{1,10}(?:\.\d{1,4})?$/
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* `numeric(14,4)` columns are surfaced by MikroORM as strings, and the project
|
|
302
|
+
* form posts a typed decimal string, so the canonical representation for a stored
|
|
303
|
+
* amount is a STRING end to end — a JSON number would push a 14-significant-digit
|
|
304
|
+
* amount through a float on the way in. Plain numbers stay accepted for API
|
|
305
|
+
* callers and are normalized to the same decimal string. (Entry-level money keeps
|
|
306
|
+
* `moneyAmountSchema` above: `rate_override_amount` is consumed by the cost
|
|
307
|
+
* calculator as a number, not written straight onto a numeric column.)
|
|
308
|
+
*/
|
|
309
|
+
const numericAmountSchema = z
|
|
310
|
+
.union([z.number(), z.string()])
|
|
311
|
+
.transform((value, ctx) => {
|
|
312
|
+
const raw = typeof value === 'number' ? String(value) : value.trim().replace(',', '.')
|
|
313
|
+
if (raw.length === 0) return null
|
|
314
|
+
if (!numericAmountPattern.test(raw)) {
|
|
315
|
+
ctx.addIssue({
|
|
316
|
+
code: z.ZodIssueCode.custom,
|
|
317
|
+
message: 'Expected a non-negative amount with at most 10 digits and 4 decimals.',
|
|
318
|
+
})
|
|
319
|
+
return z.NEVER
|
|
320
|
+
}
|
|
321
|
+
return raw
|
|
322
|
+
})
|
|
267
323
|
|
|
268
324
|
export const staffTimeEntryCreateSchema = z.object({
|
|
269
325
|
...scopedCreateFields,
|
|
@@ -278,33 +334,76 @@ export const staffTimeEntryCreateSchema = z.object({
|
|
|
278
334
|
orderId: z.string().uuid().optional().nullable(),
|
|
279
335
|
notes: z.string().max(2000).optional().nullable(),
|
|
280
336
|
source: timeEntrySourceSchema.optional().default('manual'),
|
|
337
|
+
taskId: z.string().uuid().optional().nullable(),
|
|
338
|
+
description: z.string().max(2000).optional().nullable(),
|
|
339
|
+
isBillable: z.boolean().optional(),
|
|
340
|
+
tagIds: z.array(z.string().uuid()).max(50).optional(),
|
|
341
|
+
rateOverrideAmount: moneyAmountSchema.optional().nullable(),
|
|
281
342
|
})
|
|
282
343
|
|
|
344
|
+
/**
|
|
345
|
+
* `startedAt` / `endedAt` mirror the create schema key for key: without them zod
|
|
346
|
+
* strips the two clocks the entry form sends on every save, so correcting a start
|
|
347
|
+
* or an end reported success and changed nothing. Nullable because clearing a
|
|
348
|
+
* clock is a real edit, optional because omitting one must leave it alone — the
|
|
349
|
+
* update command reads `undefined` as "not part of this write" and `null` as
|
|
350
|
+
* "clear it". US-D3 keeps the three time fields consistent in the command, not
|
|
351
|
+
* here: a request may legitimately carry all three and let the clocks win.
|
|
352
|
+
*/
|
|
283
353
|
export const staffTimeEntryUpdateSchema = z.object({
|
|
284
354
|
...scopedUpdateFields,
|
|
285
355
|
date: z.coerce.date().optional(),
|
|
286
356
|
durationMinutes: z.number().int().min(0).max(1440).optional(),
|
|
357
|
+
startedAt: z.coerce.date().optional().nullable(),
|
|
358
|
+
endedAt: z.coerce.date().optional().nullable(),
|
|
287
359
|
timeProjectId: z.string().uuid().optional().nullable(),
|
|
288
360
|
customerId: z.string().uuid().optional().nullable(),
|
|
289
361
|
dealId: z.string().uuid().optional().nullable(),
|
|
290
362
|
orderId: z.string().uuid().optional().nullable(),
|
|
291
363
|
notes: z.string().max(2000).optional().nullable(),
|
|
364
|
+
taskId: z.string().uuid().optional().nullable(),
|
|
365
|
+
description: z.string().max(2000).optional().nullable(),
|
|
366
|
+
isBillable: z.boolean().optional(),
|
|
367
|
+
tagIds: z.array(z.string().uuid()).max(50).optional(),
|
|
368
|
+
rateOverrideAmount: moneyAmountSchema.optional().nullable(),
|
|
292
369
|
})
|
|
293
370
|
|
|
371
|
+
/**
|
|
372
|
+
* `taskId` is what makes starting a timer from a board card or the task drawer a
|
|
373
|
+
* single write. Without it the surface has to start a project-level timer and
|
|
374
|
+
* then PATCH the task onto it, and a failure between the two leaves a running
|
|
375
|
+
* timer filed against the wrong thing.
|
|
376
|
+
*/
|
|
294
377
|
export const staffTimeEntryStartTimerSchema = z.object({
|
|
295
378
|
...scopedCreateFields,
|
|
296
379
|
staffMemberId: z.string().uuid(),
|
|
297
380
|
date: z.coerce.date(),
|
|
298
381
|
timeProjectId: z.string().uuid().optional().nullable(),
|
|
382
|
+
taskId: z.string().uuid().optional().nullable(),
|
|
299
383
|
notes: z.string().max(2000).optional().nullable(),
|
|
300
384
|
})
|
|
301
385
|
|
|
302
386
|
export const staffTimeEntryBulkItemSchema = z.object({
|
|
303
387
|
id: z.string().uuid().optional().nullable(),
|
|
304
388
|
date: z.coerce.date(),
|
|
305
|
-
|
|
389
|
+
// Optional only because a task carries its project: a row naming a `taskId`
|
|
390
|
+
// inherits the project from it, exactly as the single-entry path does. The
|
|
391
|
+
// route refuses a row that names neither with `staff.timesheets.errors.projectRequired`,
|
|
392
|
+
// so every stored row still lands on a project — the (project, date) cell the
|
|
393
|
+
// lock gate addresses is never blank.
|
|
394
|
+
timeProjectId: z.string().uuid().optional().nullable(),
|
|
306
395
|
durationMinutes: z.number().int().min(0).max(1440),
|
|
307
396
|
notes: z.string().max(2000).optional().nullable(),
|
|
397
|
+
taskId: z.string().uuid().optional().nullable(),
|
|
398
|
+
description: z.string().max(2000).optional().nullable(),
|
|
399
|
+
isBillable: z.boolean().optional(),
|
|
400
|
+
// Accepted by the schema and REFUSED by the route with 422: assigning tags
|
|
401
|
+
// means dispatching the tag commands, which fork their own EntityManager and
|
|
402
|
+
// cannot participate in this route's per-row transaction. Kept in the schema
|
|
403
|
+
// so the refusal is explicit — dropping the key would let zod strip it and
|
|
404
|
+
// restore the silent no-op.
|
|
405
|
+
tagIds: z.array(z.string().uuid()).max(50).optional(),
|
|
406
|
+
rateOverrideAmount: moneyAmountSchema.optional().nullable(),
|
|
308
407
|
})
|
|
309
408
|
|
|
310
409
|
export const staffTimeEntryBulkSaveSchema = z.object({
|
|
@@ -329,7 +428,11 @@ export const staffTimeEntrySegmentUpdateSchema = z.object({
|
|
|
329
428
|
export const staffTimeProjectCreateSchema = z.object({
|
|
330
429
|
...scopedCreateFields,
|
|
331
430
|
name: z.string().min(1).max(255),
|
|
332
|
-
|
|
431
|
+
// D-9 / US-B1: time is organised per customer, so a new project always names one.
|
|
432
|
+
// Rows created before this change keep their null customer and stay editable
|
|
433
|
+
// (see the update schema below), which is why only create is constrained.
|
|
434
|
+
customerId: z.string().uuid(),
|
|
435
|
+
customerSnapshot: z.record(z.string(), z.unknown()).optional().nullable(),
|
|
333
436
|
code: projectCodeSchema,
|
|
334
437
|
description: z.string().max(2000).optional().nullable(),
|
|
335
438
|
projectType: z.string().max(100).optional().nullable(),
|
|
@@ -338,12 +441,28 @@ export const staffTimeProjectCreateSchema = z.object({
|
|
|
338
441
|
ownerUserId: z.string().uuid().optional().nullable(),
|
|
339
442
|
costCenter: z.string().max(100).optional().nullable(),
|
|
340
443
|
startDate: z.coerce.date().optional().nullable(),
|
|
444
|
+
hourlyRate: numericAmountSchema.optional().nullable(),
|
|
445
|
+
// D-3: the currency may be chosen once, at creation. Every later change goes
|
|
446
|
+
// through `POST .../change-currency`, which carries the non-conversion
|
|
447
|
+
// acknowledgement and refuses while entries sit frozen in a closed report.
|
|
448
|
+
currencyCode: currencyCodeSchema.optional().nullable(),
|
|
449
|
+
billableByDefault: z.boolean().optional(),
|
|
450
|
+
budgetKind: timeProjectBudgetKindSchema.optional().default('none'),
|
|
451
|
+
budgetValue: numericAmountSchema.optional().nullable(),
|
|
452
|
+
budgetWarnAtPercent: z.number().int().min(1).max(100).optional(),
|
|
341
453
|
})
|
|
342
454
|
|
|
455
|
+
/**
|
|
456
|
+
* Deliberately has NO `currencyCode`: D-3 routes every post-creation currency
|
|
457
|
+
* change through the dedicated change-currency action, so a plain PUT that
|
|
458
|
+
* carries the key has it stripped here rather than relabelling the project
|
|
459
|
+
* behind the acknowledgement and the locked-entry check.
|
|
460
|
+
*/
|
|
343
461
|
export const staffTimeProjectUpdateSchema = z.object({
|
|
344
462
|
...scopedUpdateFields,
|
|
345
463
|
name: z.string().min(1).max(255).optional(),
|
|
346
464
|
customerId: z.string().uuid().optional().nullable(),
|
|
465
|
+
customerSnapshot: z.record(z.string(), z.unknown()).optional().nullable(),
|
|
347
466
|
code: projectCodeSchema.optional(),
|
|
348
467
|
description: z.string().max(2000).optional().nullable(),
|
|
349
468
|
projectType: z.string().max(100).optional().nullable(),
|
|
@@ -352,6 +471,11 @@ export const staffTimeProjectUpdateSchema = z.object({
|
|
|
352
471
|
ownerUserId: z.string().uuid().optional().nullable(),
|
|
353
472
|
costCenter: z.string().max(100).optional().nullable(),
|
|
354
473
|
startDate: z.coerce.date().optional().nullable(),
|
|
474
|
+
hourlyRate: numericAmountSchema.optional().nullable(),
|
|
475
|
+
billableByDefault: z.boolean().optional(),
|
|
476
|
+
budgetKind: timeProjectBudgetKindSchema.optional(),
|
|
477
|
+
budgetValue: numericAmountSchema.optional().nullable(),
|
|
478
|
+
budgetWarnAtPercent: z.number().int().min(1).max(100).optional(),
|
|
355
479
|
})
|
|
356
480
|
|
|
357
481
|
export const staffTimeProjectMemberAssignSchema = z.object({
|
|
@@ -386,3 +510,224 @@ export type StaffTimeProjectUpdateInput = z.infer<typeof staffTimeProjectUpdateS
|
|
|
386
510
|
export type StaffTimeProjectMemberAssignInput = z.infer<typeof staffTimeProjectMemberAssignSchema>
|
|
387
511
|
export type StaffTimeProjectMemberUpdateInput = z.infer<typeof staffTimeProjectMemberUpdateSchema>
|
|
388
512
|
export type StaffMyProjectVisibilityUpdateInput = z.infer<typeof staffMyProjectVisibilityUpdateSchema>
|
|
513
|
+
|
|
514
|
+
// --- Time tracking consulting suite validators (tasks, tags, reports, settings) ---
|
|
515
|
+
|
|
516
|
+
const timeSlugSchema = z.string().trim().min(1).max(60).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/)
|
|
517
|
+
const timeReportPeriodKindSchema = z.enum(['week', 'month', 'year', 'custom'])
|
|
518
|
+
/** EP-36: validated against the report grouping registry, not a literal enum. */
|
|
519
|
+
const timeReportGroupingSchema = z
|
|
520
|
+
.string()
|
|
521
|
+
.superRefine((value, ctx) => {
|
|
522
|
+
if (hasReportGrouping(value)) return
|
|
523
|
+
ctx.addIssue({
|
|
524
|
+
code: z.ZodIssueCode.custom,
|
|
525
|
+
message: `[internal] unknown report grouping: ${value}`,
|
|
526
|
+
params: { accepted: reportGroupingIds() },
|
|
527
|
+
})
|
|
528
|
+
})
|
|
529
|
+
const timeReportNonbillableModeSchema = z.enum(['separate', 'exclude'])
|
|
530
|
+
const timeRoundingDirectionSchema = timeTrackingRoundingDirectionSchema
|
|
531
|
+
const timeRoundingUnitMinutesSchema = timeTrackingRoundingUnitMinutesSchema
|
|
532
|
+
const positionSchema = z.number().int().min(0).max(1_000_000)
|
|
533
|
+
|
|
534
|
+
export const staffTimeTaskStatusCreateSchema = z.object({
|
|
535
|
+
...scopedCreateFields,
|
|
536
|
+
timeProjectId: z.string().uuid(),
|
|
537
|
+
name: z.string().trim().min(1).max(100),
|
|
538
|
+
slug: timeSlugSchema.optional(),
|
|
539
|
+
color: projectColorSchema.optional().nullable(),
|
|
540
|
+
position: positionSchema.optional(),
|
|
541
|
+
isDefault: z.boolean().optional(),
|
|
542
|
+
isDone: z.boolean().optional(),
|
|
543
|
+
})
|
|
544
|
+
|
|
545
|
+
export const staffTimeTaskStatusUpdateSchema = z.object({
|
|
546
|
+
...scopedUpdateFields,
|
|
547
|
+
name: z.string().trim().min(1).max(100).optional(),
|
|
548
|
+
color: projectColorSchema.optional().nullable(),
|
|
549
|
+
position: positionSchema.optional(),
|
|
550
|
+
isDefault: z.boolean().optional(),
|
|
551
|
+
isDone: z.boolean().optional(),
|
|
552
|
+
})
|
|
553
|
+
|
|
554
|
+
export const staffTimeTaskStatusReorderSchema = z.object({
|
|
555
|
+
statuses: z
|
|
556
|
+
.array(
|
|
557
|
+
z.object({
|
|
558
|
+
id: z.string().uuid(),
|
|
559
|
+
position: positionSchema,
|
|
560
|
+
}),
|
|
561
|
+
)
|
|
562
|
+
.min(1)
|
|
563
|
+
.max(100),
|
|
564
|
+
})
|
|
565
|
+
|
|
566
|
+
export const staffTimeTaskCreateSchema = z.object({
|
|
567
|
+
...scopedCreateFields,
|
|
568
|
+
timeProjectId: z.string().uuid(),
|
|
569
|
+
parentTaskId: z.string().uuid().optional().nullable(),
|
|
570
|
+
taskStatusId: z.string().uuid().optional().nullable(),
|
|
571
|
+
title: z.string().trim().min(1).max(255),
|
|
572
|
+
description: z.string().max(8000).optional().nullable(),
|
|
573
|
+
assigneeStaffMemberId: z.string().uuid().optional().nullable(),
|
|
574
|
+
position: positionSchema.optional(),
|
|
575
|
+
tagIds: z.array(z.string().uuid()).max(50).optional(),
|
|
576
|
+
})
|
|
577
|
+
|
|
578
|
+
export const staffTimeTaskUpdateSchema = z.object({
|
|
579
|
+
...scopedUpdateFields,
|
|
580
|
+
parentTaskId: z.string().uuid().optional().nullable(),
|
|
581
|
+
taskStatusId: z.string().uuid().optional(),
|
|
582
|
+
title: z.string().trim().min(1).max(255).optional(),
|
|
583
|
+
description: z.string().max(8000).optional().nullable(),
|
|
584
|
+
assigneeStaffMemberId: z.string().uuid().optional().nullable(),
|
|
585
|
+
position: positionSchema.optional(),
|
|
586
|
+
tagIds: z.array(z.string().uuid()).max(50).optional(),
|
|
587
|
+
})
|
|
588
|
+
|
|
589
|
+
export const staffTimeTaskStatusChangeSchema = z.object({
|
|
590
|
+
taskStatusId: z.string().uuid(),
|
|
591
|
+
position: positionSchema.optional(),
|
|
592
|
+
})
|
|
593
|
+
|
|
594
|
+
export const staffTimeTaskCommentCreateSchema = z.object({
|
|
595
|
+
...scopedCreateFields,
|
|
596
|
+
taskId: z.string().uuid(),
|
|
597
|
+
body: z.string().trim().min(1).max(5000),
|
|
598
|
+
authorUserId: z.string().uuid().optional().nullable(),
|
|
599
|
+
})
|
|
600
|
+
|
|
601
|
+
export const staffTimeTaskCommentUpdateSchema = z.object({
|
|
602
|
+
...scopedUpdateFields,
|
|
603
|
+
body: z.string().trim().min(1).max(5000),
|
|
604
|
+
})
|
|
605
|
+
|
|
606
|
+
export const staffTimeTagCreateSchema = z.object({
|
|
607
|
+
...scopedCreateFields,
|
|
608
|
+
slug: timeSlugSchema,
|
|
609
|
+
label: z.string().trim().min(1).max(100),
|
|
610
|
+
color: projectColorSchema.optional().nullable(),
|
|
611
|
+
})
|
|
612
|
+
|
|
613
|
+
export const staffTimeTaskTagAssignmentSchema = z.object({
|
|
614
|
+
...scopedCreateFields,
|
|
615
|
+
taskId: z.string().uuid(),
|
|
616
|
+
tagIds: z.array(z.string().uuid()).max(50),
|
|
617
|
+
})
|
|
618
|
+
|
|
619
|
+
export const staffTimeEntryTagAssignmentSchema = z.object({
|
|
620
|
+
...scopedCreateFields,
|
|
621
|
+
timeEntryId: z.string().uuid(),
|
|
622
|
+
tagIds: z.array(z.string().uuid()).max(50),
|
|
623
|
+
})
|
|
624
|
+
|
|
625
|
+
const validateStaffTimeReportPeriod = (
|
|
626
|
+
value: { periodFrom?: Date; periodTo?: Date },
|
|
627
|
+
ctx: z.RefinementCtx,
|
|
628
|
+
) => {
|
|
629
|
+
if (!value.periodFrom || !value.periodTo) return
|
|
630
|
+
if (value.periodTo < value.periodFrom) {
|
|
631
|
+
ctx.addIssue({
|
|
632
|
+
code: z.ZodIssueCode.custom,
|
|
633
|
+
message: 'Period end must be after period start.',
|
|
634
|
+
path: ['periodTo'],
|
|
635
|
+
})
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
export const staffTimeReportCreateSchema = z
|
|
640
|
+
.object({
|
|
641
|
+
...scopedCreateFields,
|
|
642
|
+
customerId: z.string().uuid(),
|
|
643
|
+
title: z.string().trim().min(1).max(255),
|
|
644
|
+
periodKind: timeReportPeriodKindSchema,
|
|
645
|
+
periodFrom: z.coerce.date(),
|
|
646
|
+
periodTo: z.coerce.date(),
|
|
647
|
+
grouping: timeReportGroupingSchema.optional().default('project_task'),
|
|
648
|
+
nonbillableMode: timeReportNonbillableModeSchema.optional().default('separate'),
|
|
649
|
+
includeAlreadyReported: z.boolean().optional().default(false),
|
|
650
|
+
showRates: z.boolean().optional().default(true),
|
|
651
|
+
timeProjectIds: z.array(z.string().uuid()).min(1).max(100),
|
|
652
|
+
})
|
|
653
|
+
.superRefine(validateStaffTimeReportPeriod)
|
|
654
|
+
|
|
655
|
+
export const staffTimeReportUpdateSchema = z
|
|
656
|
+
.object({
|
|
657
|
+
...scopedUpdateFields,
|
|
658
|
+
customerId: z.string().uuid().optional(),
|
|
659
|
+
title: z.string().trim().min(1).max(255).optional(),
|
|
660
|
+
periodKind: timeReportPeriodKindSchema.optional(),
|
|
661
|
+
periodFrom: z.coerce.date().optional(),
|
|
662
|
+
periodTo: z.coerce.date().optional(),
|
|
663
|
+
grouping: timeReportGroupingSchema.optional(),
|
|
664
|
+
nonbillableMode: timeReportNonbillableModeSchema.optional(),
|
|
665
|
+
includeAlreadyReported: z.boolean().optional(),
|
|
666
|
+
showRates: z.boolean().optional(),
|
|
667
|
+
timeProjectIds: z.array(z.string().uuid()).min(1).max(100).optional(),
|
|
668
|
+
})
|
|
669
|
+
.superRefine(validateStaffTimeReportPeriod)
|
|
670
|
+
|
|
671
|
+
export const staffTimeReportPreviewSchema = z
|
|
672
|
+
.object({
|
|
673
|
+
customerId: z.string().uuid().optional().nullable(),
|
|
674
|
+
periodKind: timeReportPeriodKindSchema.optional().default('custom'),
|
|
675
|
+
periodFrom: z.coerce.date(),
|
|
676
|
+
periodTo: z.coerce.date(),
|
|
677
|
+
grouping: timeReportGroupingSchema.optional().default('project_task'),
|
|
678
|
+
nonbillableMode: timeReportNonbillableModeSchema.optional().default('separate'),
|
|
679
|
+
includeAlreadyReported: z.boolean().optional().default(false),
|
|
680
|
+
showRates: z.boolean().optional().default(true),
|
|
681
|
+
timeProjectIds: z.array(z.string().uuid()).min(1).max(100),
|
|
682
|
+
})
|
|
683
|
+
.superRefine(validateStaffTimeReportPeriod)
|
|
684
|
+
|
|
685
|
+
export const staffTimeReportCloseSchema = z.object({
|
|
686
|
+
id: z.string().uuid(),
|
|
687
|
+
})
|
|
688
|
+
|
|
689
|
+
export const staffTimeReportUnlockSchema = z.object({
|
|
690
|
+
id: z.string().uuid(),
|
|
691
|
+
reason: z.string().trim().min(1).max(2000),
|
|
692
|
+
})
|
|
693
|
+
|
|
694
|
+
export const staffTimeProjectChangeCurrencySchema = z.object({
|
|
695
|
+
currencyCode: currencyCodeSchema,
|
|
696
|
+
acknowledged: z.literal(true),
|
|
697
|
+
})
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* EP-42 — built from the setting-key registry rather than a literal, so a module can
|
|
701
|
+
* contribute a key without patching this file. With no contribution the shape is the
|
|
702
|
+
* eight built-in keys in their five groups, exactly as it was.
|
|
703
|
+
*
|
|
704
|
+
* This constant is evaluated once at module load. A key registered later still
|
|
705
|
+
* validates on the wire because the settings route parses with
|
|
706
|
+
* `buildTimeTrackingSettingsSchema()` per request and publishes it through an
|
|
707
|
+
* OpenAPI getter.
|
|
708
|
+
*/
|
|
709
|
+
export const staffTimeTrackingSettingsSchema = buildTimeTrackingSettingsSchema()
|
|
710
|
+
|
|
711
|
+
export type StaffTimeReportPeriodKind = z.infer<typeof timeReportPeriodKindSchema>
|
|
712
|
+
export type StaffTimeReportGrouping = z.infer<typeof timeReportGroupingSchema>
|
|
713
|
+
export type StaffTimeReportNonbillableMode = z.infer<typeof timeReportNonbillableModeSchema>
|
|
714
|
+
export type StaffTimeRoundingDirection = z.infer<typeof timeRoundingDirectionSchema>
|
|
715
|
+
export type StaffTimeRoundingUnitMinutes = z.infer<typeof timeRoundingUnitMinutesSchema>
|
|
716
|
+
export type StaffTimeTaskStatusCreateInput = z.infer<typeof staffTimeTaskStatusCreateSchema>
|
|
717
|
+
export type StaffTimeTaskStatusUpdateInput = z.infer<typeof staffTimeTaskStatusUpdateSchema>
|
|
718
|
+
export type StaffTimeTaskStatusReorderInput = z.infer<typeof staffTimeTaskStatusReorderSchema>
|
|
719
|
+
export type StaffTimeTaskCreateInput = z.infer<typeof staffTimeTaskCreateSchema>
|
|
720
|
+
export type StaffTimeTaskUpdateInput = z.infer<typeof staffTimeTaskUpdateSchema>
|
|
721
|
+
export type StaffTimeTaskStatusChangeInput = z.infer<typeof staffTimeTaskStatusChangeSchema>
|
|
722
|
+
export type StaffTimeTaskCommentCreateInput = z.infer<typeof staffTimeTaskCommentCreateSchema>
|
|
723
|
+
export type StaffTimeTaskCommentUpdateInput = z.infer<typeof staffTimeTaskCommentUpdateSchema>
|
|
724
|
+
export type StaffTimeTagCreateInput = z.infer<typeof staffTimeTagCreateSchema>
|
|
725
|
+
export type StaffTimeTaskTagAssignmentInput = z.infer<typeof staffTimeTaskTagAssignmentSchema>
|
|
726
|
+
export type StaffTimeEntryTagAssignmentInput = z.infer<typeof staffTimeEntryTagAssignmentSchema>
|
|
727
|
+
export type StaffTimeReportCreateInput = z.infer<typeof staffTimeReportCreateSchema>
|
|
728
|
+
export type StaffTimeReportUpdateInput = z.infer<typeof staffTimeReportUpdateSchema>
|
|
729
|
+
export type StaffTimeReportPreviewInput = z.infer<typeof staffTimeReportPreviewSchema>
|
|
730
|
+
export type StaffTimeReportCloseInput = z.infer<typeof staffTimeReportCloseSchema>
|
|
731
|
+
export type StaffTimeReportUnlockInput = z.infer<typeof staffTimeReportUnlockSchema>
|
|
732
|
+
export type StaffTimeProjectChangeCurrencyInput = z.infer<typeof staffTimeProjectChangeCurrencySchema>
|
|
733
|
+
export type StaffTimeTrackingSettingsInput = z.infer<typeof staffTimeTrackingSettingsSchema>
|
package/src/modules/staff/di.ts
CHANGED
|
@@ -5,6 +5,42 @@ import {
|
|
|
5
5
|
type AvailabilityAccessContext,
|
|
6
6
|
type AvailabilityWriteAccess,
|
|
7
7
|
} from './lib/availabilityAccess'
|
|
8
|
+
import {
|
|
9
|
+
resolveProjectAccess,
|
|
10
|
+
type ProjectAccess,
|
|
11
|
+
type ProjectAccessContext,
|
|
12
|
+
} from './lib/time-tracking/access'
|
|
13
|
+
import {
|
|
14
|
+
resolveTimeRoundingStrategy,
|
|
15
|
+
roundMinutes,
|
|
16
|
+
type RoundingSettings,
|
|
17
|
+
type TimeRoundingStrategy,
|
|
18
|
+
} from './lib/time-tracking/rounding'
|
|
19
|
+
import {
|
|
20
|
+
resolveTimeRate,
|
|
21
|
+
type TimeRateContext,
|
|
22
|
+
} from './lib/time-tracking/cost'
|
|
23
|
+
import {
|
|
24
|
+
resolveBillability,
|
|
25
|
+
type BillabilityContext,
|
|
26
|
+
} from './lib/time-tracking/billability'
|
|
27
|
+
import {
|
|
28
|
+
resolveTimesheetCapacity,
|
|
29
|
+
type CapacityContext,
|
|
30
|
+
type CapacityDateRange,
|
|
31
|
+
type CapacityResult,
|
|
32
|
+
} from './lib/time-tracking/capacity'
|
|
33
|
+
import {
|
|
34
|
+
evaluateOverlapPolicies,
|
|
35
|
+
type Overlap,
|
|
36
|
+
type OverlapDecision,
|
|
37
|
+
type OverlapPolicyContext,
|
|
38
|
+
} from './lib/time-tracking/overlap'
|
|
39
|
+
import {
|
|
40
|
+
deriveProjectCode,
|
|
41
|
+
type ProjectCodeContext,
|
|
42
|
+
} from './lib/time-tracking/projectCode'
|
|
43
|
+
import type { ScopedResolverContext } from './lib/time-tracking/registries/scope'
|
|
8
44
|
|
|
9
45
|
export type AvailabilityAccessResolver = {
|
|
10
46
|
resolveAvailabilityWriteAccess(
|
|
@@ -12,9 +48,69 @@ export type AvailabilityAccessResolver = {
|
|
|
12
48
|
): Promise<AvailabilityWriteAccess>
|
|
13
49
|
}
|
|
14
50
|
|
|
51
|
+
export type TimeTrackingAccessResolver = {
|
|
52
|
+
resolveProjectAccess(ctx: ProjectAccessContext): Promise<ProjectAccess>
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* EP-32…EP-41 keep their registries in plain module scope so the browser bundle
|
|
57
|
+
* can reach them (four of the strategies back client previews that cannot
|
|
58
|
+
* resolve DI). These DI keys are the SERVER entry point to the same registries:
|
|
59
|
+
* they exist so an app can replace a resolver wholesale through `entry.overrides`
|
|
60
|
+
* DI without patching the module, and so server code follows the "never `new` a
|
|
61
|
+
* resolver" rule. Resolving one and calling the module function are equivalent.
|
|
62
|
+
*/
|
|
63
|
+
export type TimeRoundingResolver = {
|
|
64
|
+
resolveStrategy(ctx?: ScopedResolverContext | null): TimeRoundingStrategy
|
|
65
|
+
roundMinutes(raw: number, settings: RoundingSettings, ctx?: ScopedResolverContext | null): number
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export type TimeRateResolverService = {
|
|
69
|
+
resolveRate(ctx: TimeRateContext): number | null
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export type BillabilityResolverService = {
|
|
73
|
+
resolveBillability(ctx: BillabilityContext): boolean
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export type TimeCapacityResolver = {
|
|
77
|
+
resolveCapacity(
|
|
78
|
+
staffMemberId: string | null,
|
|
79
|
+
dateRange: CapacityDateRange,
|
|
80
|
+
ctx: CapacityContext,
|
|
81
|
+
): CapacityResult
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export type OverlapPolicyResolver = {
|
|
85
|
+
evaluate(spans: readonly Overlap[], ctx: OverlapPolicyContext): OverlapDecision
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export type ProjectCodeResolver = {
|
|
89
|
+
generate(name: string, taken: Set<string>, ctx?: ProjectCodeContext | null): string
|
|
90
|
+
}
|
|
91
|
+
|
|
15
92
|
export function register(container: AppContainer) {
|
|
16
93
|
const resolver: AvailabilityAccessResolver = { resolveAvailabilityWriteAccess }
|
|
94
|
+
const timeTrackingResolver: TimeTrackingAccessResolver = { resolveProjectAccess }
|
|
95
|
+
const timeRoundingResolver: TimeRoundingResolver = {
|
|
96
|
+
resolveStrategy: resolveTimeRoundingStrategy,
|
|
97
|
+
roundMinutes,
|
|
98
|
+
}
|
|
99
|
+
const timeRateResolver: TimeRateResolverService = { resolveRate: resolveTimeRate }
|
|
100
|
+
const timeBillabilityResolver: BillabilityResolverService = { resolveBillability }
|
|
101
|
+
const timeCapacityResolver: TimeCapacityResolver = { resolveCapacity: resolveTimesheetCapacity }
|
|
102
|
+
const timeOverlapPolicyResolver: OverlapPolicyResolver = { evaluate: evaluateOverlapPolicies }
|
|
103
|
+
const timeProjectCodeResolver: ProjectCodeResolver = {
|
|
104
|
+
generate: (name, taken, ctx) => deriveProjectCode(name, taken, ctx ?? undefined),
|
|
105
|
+
}
|
|
17
106
|
container.register({
|
|
18
107
|
availabilityAccessResolver: asValue(resolver),
|
|
108
|
+
timeTrackingAccessResolver: asValue(timeTrackingResolver),
|
|
109
|
+
timeRoundingResolver: asValue(timeRoundingResolver),
|
|
110
|
+
timeRateResolver: asValue(timeRateResolver),
|
|
111
|
+
timeBillabilityResolver: asValue(timeBillabilityResolver),
|
|
112
|
+
timeCapacityResolver: asValue(timeCapacityResolver),
|
|
113
|
+
timeOverlapPolicyResolver: asValue(timeOverlapPolicyResolver),
|
|
114
|
+
timeProjectCodeResolver: asValue(timeProjectCodeResolver),
|
|
19
115
|
})
|
|
20
116
|
}
|