@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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/modules/staff/backend/staff/time-tracking/timesheet/page.tsx"],
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\n/**\n * Screens 11 and 12 \u2014 the timesheet (T5.1, T5.5).\n *\n * One period, one set of filters, three ways of looking at it:\n *\n * * **Calendar** (screen 11) \u2014 a month at a time, for spotting gaps.\n * * **List** (screen 12) \u2014 day by day, for closing out a week.\n * * **Grid** (kept) \u2014 project \u00D7 day cells, for typing a week in one pass.\n *\n * The page owns the period, the filters and the data; the three views are pure\n * renderers over the same day buckets, so a number can never differ between them.\n *\n * Two access rules are enforced here rather than left to a component:\n *\n * * A Team Member's person picker contains exactly one option \u2014 themselves\n * (screen 11 note 5, US-E2). The list of other people is built from project\n * membership previews, which the projects enricher only returns to a holder of\n * `staff.timesheets.projects.manage`, so a TM cannot even name a colleague.\n * * **Somebody else's timesheet is read-only.** Every write path in this module\n * resolves the caller's own staff member \u2014 the bulk endpoint included \u2014 so a\n * Team Leader looking at a colleague's week gets the numbers without an\n * editing affordance that could not work anyway.\n */\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter, useSearchParams } from 'next/navigation'\nimport { Plus } from 'lucide-react'\nimport { Page, PageBody } from '@open-mercato/ui/backend/Page'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { LoadingMessage } from '@open-mercato/ui/backend/detail'\nimport { flash } from '@open-mercato/ui/backend/FlashMessages'\nimport { apiCallOrThrow, readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\nimport { createCrud } from '@open-mercato/ui/backend/utils/crud'\nimport { useGuardedMutation } from '@open-mercato/ui/backend/injection/useGuardedMutation'\nimport { useBackendChrome } from '@open-mercato/ui/backend/BackendChromeProvider'\nimport { useConfirmDialog } from '@open-mercato/ui/backend/confirm-dialog'\nimport { useOrganizationScopeVersion } from '@open-mercato/shared/lib/frontend/useOrganizationScope'\nimport { hasFeature } from '@open-mercato/shared/security/features'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\nimport { TimerBar } from '../../../../lib/timesheets-ui/TimerBar'\nimport { CreateProjectDialog } from '../../../../lib/timesheets-ui/CreateProjectDialog'\nimport { ListView } from '../../../../lib/timesheets-ui/ListView'\nimport { TimeEntryDialog } from '../../../../lib/time-tracking-ui/TimeEntryDialog'\nimport { PeriodSelector, TimesheetFilterSelect } from '../../../../lib/time-tracking-ui/PeriodSelector'\nimport { TimesheetViewSwitch } from '../../../../lib/time-tracking-ui/TimesheetViewSwitch'\nimport { TimesheetCalendar } from '../../../../lib/time-tracking-ui/TimesheetCalendar'\nimport { TimesheetPeriodFooter } from '../../../../lib/time-tracking-ui/TimesheetPeriodFooter'\nimport { InjectionSpot } from '@open-mercato/ui/backend/injection/InjectionSpot'\nimport { extensionPoints } from '@open-mercato/core/modules/staff/extension-points'\nimport {\n ALL_OPTION_VALUE,\n resolveEffectiveView,\n usePersistedFilterValue,\n usePersistedPeriodKind,\n usePersistedView,\n viewsForPeriod,\n type TimesheetView,\n} from '../../../../lib/time-tracking-ui/useTimesheetPreferences'\nimport {\n buildTimesheetDays,\n indexDaysByDate,\n pickDefaultExpandedDay,\n resolveLoadScaleMinutes,\n summarizeTimesheet,\n toTimesheetEntry,\n type TimesheetEntry,\n} from '../../../../lib/time-tracking-ui/timesheetData'\nimport {\n eachDayIso,\n resolvePeriodRange,\n startOfMonthIso,\n todayIso,\n type TimesheetDateRange,\n type TimesheetPeriodKind,\n} from '../../../../lib/time-tracking-ui/timesheetPeriod'\nimport {\n buildLogTargets,\n parseTargetKey,\n type TimesheetProjectRef,\n type TimesheetTaskRef,\n} from '../../../../lib/time-tracking-ui/timesheetTargets'\nimport {\n combineDateAndClock,\n readRowItems,\n toProjectOption,\n toTaskOption,\n} from '../../../../lib/time-tracking-ui/timeEntryDialogState'\nimport { deriveInterval } from '../../../../lib/time-tracking/interval'\nimport { GridView, type GridRowMode } from './GridView'\n\nconst logger = createLogger('staff').child({ component: 'time-tracking/timesheet' })\n\nconst PAGE_SIZE = 100\nconst MAX_ENTRY_PAGES = 5\nconst RATES_MANAGE_FEATURE = 'staff.timesheets.projects.manage'\nconst MANAGE_OWN_FEATURE = 'staff.timesheets.manage_own'\nconst ENTRIES_API_PATH = 'staff/timesheets/time-entries'\nconst MUTATION_CONTEXT_ID = 'staff.time_tracking.timesheet'\n\ntype MemberPreview = { id: string; name: string }\n\ntype LoadedData = {\n staffMemberId: string | null\n staffMemberMissing: boolean\n visibleProjectIds: string[]\n assignedProjectIds: string[]\n projects: TimesheetProjectRef[]\n tasks: TimesheetTaskRef[]\n entries: TimesheetEntry[]\n people: MemberPreview[]\n dailyHours: number | null\n truncated: boolean\n}\n\nconst EMPTY_DATA: LoadedData = {\n staffMemberId: null,\n staffMemberMissing: false,\n visibleProjectIds: [],\n assignedProjectIds: [],\n projects: [],\n tasks: [],\n entries: [],\n people: [],\n dailyHours: null,\n truncated: false,\n}\n\nfunction readMemberPreviews(row: Record<string, unknown>): MemberPreview[] {\n const staffBag = row._staff\n if (!staffBag || typeof staffBag !== 'object') return []\n const members = (staffBag as { members?: unknown }).members\n if (!Array.isArray(members)) return []\n return members\n .map((member) => {\n if (!member || typeof member !== 'object') return null\n const id = (member as { id?: unknown }).id\n const name = (member as { name?: unknown }).name\n if (typeof id !== 'string' || typeof name !== 'string') return null\n return { id, name }\n })\n .filter((member): member is MemberPreview => member !== null)\n}\n\nasync function loadEntryPages(params: URLSearchParams): Promise<{ rows: Record<string, unknown>[]; truncated: boolean }> {\n const rows: Record<string, unknown>[] = []\n let truncated = false\n for (let page = 1; page <= MAX_ENTRY_PAGES; page += 1) {\n params.set('page', String(page))\n const payload = await readApiResultOrThrow<{ items?: Record<string, unknown>[]; totalPages?: number }>(\n `/api/${ENTRIES_API_PATH}?${params.toString()}`,\n undefined,\n { fallback: { items: [], totalPages: 1 } },\n )\n const items = Array.isArray(payload.items) ? payload.items : []\n rows.push(...items)\n const totalPages = typeof payload.totalPages === 'number' ? payload.totalPages : 1\n if (page >= totalPages) return { rows, truncated }\n if (page === MAX_ENTRY_PAGES) truncated = true\n }\n return { rows, truncated }\n}\n\nexport default function TimesheetPage() {\n const t = useT()\n const router = useRouter()\n const searchParams = useSearchParams()\n const scopeVersion = useOrganizationScopeVersion()\n const { payload } = useBackendChrome()\n const { confirm, ConfirmDialogElement } = useConfirmDialog()\n const canManageProjects = hasFeature(payload?.grantedFeatures, RATES_MANAGE_FEATURE)\n const canManageOwn = hasFeature(payload?.grantedFeatures, MANAGE_OWN_FEATURE)\n\n const [data, setData] = React.useState<LoadedData>(EMPTY_DATA)\n /**\n * `?period=` and `?view=` are the documented deep-link contract for screens 11\n * and 12, so the query string outranks the remembered preference: a link a\n * colleague pasted must open on the period and the view it names.\n *\n * The preference is scoped to the staff member the page has resolved, so two\n * people signing in from the same browser stop sharing one set of filters.\n */\n const periodParam = searchParams?.get('period') ?? null\n const viewParam = searchParams?.get('view') ?? null\n const userKey = data.staffMemberId\n\n const [periodKind, setPeriodKind] = usePersistedPeriodKind({ userKey, urlOverride: periodParam })\n const [anchorDate, setAnchorDate] = React.useState<string>(() => todayIso())\n const [storedView, setView] = usePersistedView(periodKind, { userKey, urlOverride: viewParam })\n const view = resolveEffectiveView(periodKind, storedView)\n const [projectFilter, setProjectFilter] = usePersistedFilterValue('project', { userKey })\n const [storedPersonFilter, setPersonFilter] = usePersistedFilterValue('person', { userKey })\n /**\n * A remembered colleague is only honoured while the caller may still look at\n * one. Losing the Team Leader feature must not leave the timesheet pinned to\n * somebody else's week (and quietly asking the API for it).\n */\n const personFilter = canManageProjects ? storedPersonFilter : ALL_OPTION_VALUE\n const [rowMode, setRowMode] = React.useState<GridRowMode>('projects')\n const [expandedDate, setExpandedDate] = React.useState<string | null>(null)\n const [expandedTouched, setExpandedTouched] = React.useState(false)\n\n const [isInitialLoad, setIsInitialLoad] = React.useState(true)\n const [isRefreshing, setIsRefreshing] = React.useState(false)\n const [createDialogOpen, setCreateDialogOpen] = React.useState(false)\n const [entryDialog, setEntryDialog] = React.useState<{ open: boolean; entryId: string | null; date: string }>({\n open: false,\n entryId: null,\n date: todayIso(),\n })\n const hasLoadedOnceRef = React.useRef(false)\n\n const range: TimesheetDateRange = React.useMemo(\n () => resolvePeriodRange(periodKind, anchorDate),\n [anchorDate, periodKind],\n )\n\n /**\n * `router.replace` keeps the deep link truthful without pushing a history\n * entry per toggle \u2014 the same idiom the board and projects screens use.\n */\n const replaceSearchParam = React.useCallback(\n (name: string, value: string) => {\n const params = new URLSearchParams(searchParams?.toString() ?? '')\n params.set(name, value)\n router.replace(`?${params.toString()}`, { scroll: false })\n },\n [router, searchParams],\n )\n\n const handlePeriodKindChange = React.useCallback(\n (next: TimesheetPeriodKind) => {\n setPeriodKind(next)\n replaceSearchParam('period', next)\n },\n [replaceSearchParam, setPeriodKind],\n )\n\n const handleViewChange = React.useCallback(\n (next: TimesheetView) => {\n setView(next)\n replaceSearchParam('view', next)\n },\n [replaceSearchParam, setView],\n )\n\n const { runMutation, retryLastMutation } = useGuardedMutation<{\n formId: string\n resourceKind: string\n retryLastMutation: () => Promise<boolean>\n }>({\n contextId: MUTATION_CONTEXT_ID,\n blockedMessage: t('ui.forms.flash.saveBlocked', 'Save blocked by validation'),\n })\n\n const loadError = t('staff.timesheets.my.errors.load', 'Failed to load timesheets.')\n\n const loadData = React.useCallback(async () => {\n if (hasLoadedOnceRef.current) setIsRefreshing(true)\n try {\n const selfPayload = await readApiResultOrThrow<{ member?: { id: string } | null }>(\n '/api/staff/team-members/self',\n undefined,\n { errorMessage: loadError, fallback: { member: null } },\n )\n const myStaffMemberId = selfPayload.member?.id ?? null\n if (!myStaffMemberId) {\n setData({ ...EMPTY_DATA, staffMemberMissing: true })\n return\n }\n\n const targetStaffMemberId = personFilter !== ALL_OPTION_VALUE ? personFilter : myStaffMemberId\n\n const assignmentsPayload = await readApiResultOrThrow<{ items?: Record<string, unknown>[] }>(\n `/api/staff/timesheets/my-projects?pageSize=${PAGE_SIZE}`,\n undefined,\n { errorMessage: loadError, fallback: { items: [] } },\n )\n const assignments = Array.isArray(assignmentsPayload.items) ? assignmentsPayload.items : []\n const assignedProjectIds = assignments\n .map((item) => String(item.time_project_id ?? item.timeProjectId ?? ''))\n .filter((id) => id.length > 0)\n const visibleProjectIds = assignments\n .filter((item) => item.show_in_grid === true || item.showInGrid === true)\n .map((item) => String(item.time_project_id ?? item.timeProjectId ?? ''))\n .filter((id) => id.length > 0)\n\n const entryParams = new URLSearchParams({\n pageSize: String(PAGE_SIZE),\n from: range.from,\n to: range.to,\n staffMemberId: targetStaffMemberId,\n sortField: 'date',\n sortDir: 'asc',\n })\n if (projectFilter !== ALL_OPTION_VALUE) entryParams.set('projectId', projectFilter)\n const { rows: entryRows, truncated } = await loadEntryPages(entryParams)\n const entries = entryRows\n .map((row) => toTimesheetEntry(row))\n .filter((entry): entry is TimesheetEntry => entry !== null)\n\n const projectIds = Array.from(\n new Set([\n ...assignedProjectIds,\n ...entries.map((entry) => entry.timeProjectId ?? '').filter((id) => id.length > 0),\n ]),\n ).slice(0, PAGE_SIZE)\n const taskIds = Array.from(\n new Set(entries.map((entry) => entry.taskId ?? '').filter((id) => id.length > 0)),\n ).slice(0, PAGE_SIZE)\n\n const [projectsPayload, tasksPayload, entryTasksPayload, settingsPayload] = await Promise.all([\n projectIds.length > 0\n ? readApiResultOrThrow<Record<string, unknown>>(\n `/api/staff/timesheets/time-projects?ids=${projectIds.join(',')}&pageSize=${PAGE_SIZE}`,\n undefined,\n { allowNullResult: true },\n )\n : Promise.resolve({} as Record<string, unknown>),\n readApiResultOrThrow<Record<string, unknown>>(\n `/api/staff/timesheets/tasks?pageSize=${PAGE_SIZE}`,\n undefined,\n { allowNullResult: true },\n ).catch(() => ({}) as Record<string, unknown>),\n taskIds.length > 0\n ? readApiResultOrThrow<Record<string, unknown>>(\n `/api/staff/timesheets/tasks?ids=${taskIds.join(',')}&pageSize=${PAGE_SIZE}`,\n undefined,\n { allowNullResult: true },\n ).catch(() => ({}) as Record<string, unknown>)\n : Promise.resolve({} as Record<string, unknown>),\n readApiResultOrThrow<{ targets?: { dailyHours?: number | null } }>(\n '/api/staff/timesheets/settings',\n undefined,\n { fallback: { targets: { dailyHours: null } } },\n ).catch(() => ({ targets: { dailyHours: null } })),\n ])\n\n const projectRows = readRowItems(projectsPayload)\n const projects: TimesheetProjectRef[] = []\n const peopleById = new Map<string, MemberPreview>()\n for (const row of projectRows) {\n const option = toProjectOption(row)\n if (!option) continue\n projects.push({\n // The grid's first column has always shown the bare project name over\n // its code; the customer belongs to the projects screen, not here.\n id: option.id,\n name: option.name,\n code: typeof row.code === 'string' ? row.code : null,\n color: typeof row.color === 'string' ? row.color : null,\n })\n for (const member of readMemberPreviews(row)) peopleById.set(member.id, member)\n }\n\n const tasksById = new Map<string, TimesheetTaskRef>()\n for (const row of [...readRowItems(tasksPayload), ...readRowItems(entryTasksPayload)]) {\n const option = toTaskOption(row)\n if (!option || !option.timeProjectId) continue\n tasksById.set(option.id, { id: option.id, title: option.title, timeProjectId: option.timeProjectId })\n }\n\n const directory = {\n taskTitles: new Map(Array.from(tasksById.values()).map((task) => [task.id, task.title])),\n projectLabels: new Map(projects.map((project) => [project.id, project.name])),\n }\n const decoratedEntries = entryRows\n .map((row) => toTimesheetEntry(row, directory))\n .filter((entry): entry is TimesheetEntry => entry !== null)\n\n const dailyHours =\n typeof settingsPayload?.targets?.dailyHours === 'number' ? settingsPayload.targets.dailyHours : null\n\n setData({\n staffMemberId: myStaffMemberId,\n staffMemberMissing: false,\n visibleProjectIds,\n assignedProjectIds,\n projects,\n tasks: Array.from(tasksById.values()),\n entries: decoratedEntries,\n people: Array.from(peopleById.values()).sort((left, right) => left.name.localeCompare(right.name)),\n dailyHours,\n truncated,\n })\n } catch (error) {\n logger.error('staff.time_tracking.timesheet load failed', { err: error })\n flash(loadError, 'error')\n } finally {\n hasLoadedOnceRef.current = true\n setIsInitialLoad(false)\n setIsRefreshing(false)\n }\n }, [loadError, personFilter, projectFilter, range.from, range.to])\n\n React.useEffect(() => {\n void loadData()\n }, [loadData, scopeVersion])\n\n const viewingSelf = personFilter === ALL_OPTION_VALUE || personFilter === data.staffMemberId\n const readOnly = !viewingSelf\n\n const days = React.useMemo(() => buildTimesheetDays(range, data.entries), [data.entries, range])\n const dayIndex = React.useMemo(() => indexDaysByDate(days), [days])\n const summary = React.useMemo(() => summarizeTimesheet(days, range, data.dailyHours), [days, data.dailyHours, range])\n const timesheetInjectionContext = React.useMemo(\n () => ({\n staffMemberId: data.staffMemberId,\n periodKind,\n periodFrom: range.from,\n periodTo: range.to,\n view,\n readOnly,\n retryLastMutation,\n }),\n [data.staffMemberId, periodKind, range.from, range.to, readOnly, retryLastMutation, view],\n )\n const scaleMinutes = React.useMemo(\n () => resolveLoadScaleMinutes(days, data.dailyHours),\n [days, data.dailyHours],\n )\n const dailyTargetMinutes = data.dailyHours !== null ? Math.round(data.dailyHours * 60) : null\n\n // The expanded day follows the period until the user picks one themselves.\n const autoExpanded = React.useMemo(\n () => pickDefaultExpandedDay(days, data.dailyHours, todayIso()),\n [days, data.dailyHours],\n )\n React.useEffect(() => {\n setExpandedTouched(false)\n }, [range.from, range.to, personFilter, projectFilter])\n React.useEffect(() => {\n if (expandedTouched) return\n setExpandedDate(autoExpanded)\n }, [autoExpanded, expandedTouched])\n\n const gridProjects = React.useMemo(() => {\n const referenced = new Set(data.entries.map((entry) => entry.timeProjectId ?? ''))\n if (!viewingSelf) {\n return data.projects.filter((project) => referenced.has(project.id))\n }\n const visible = new Set(data.visibleProjectIds)\n // A project with time in this period always gets a row, pinned or not. The\n // footer counts those hours, so a grid that shows only pinned rows tells the\n // reader two different things at once \u2014 \"no rows\" above \"Period: 11:00\".\n return data.projects.filter((project) => visible.has(project.id) || referenced.has(project.id))\n }, [data.entries, data.projects, data.visibleProjectIds, viewingSelf])\n\n const assignedProjects = React.useMemo(() => {\n const assigned = new Set(data.assignedProjectIds)\n return data.projects.filter((project) => assigned.has(project.id))\n }, [data.assignedProjectIds, data.projects])\n\n const logTargets = React.useMemo(\n () => buildLogTargets(gridProjects, data.tasks),\n [data.tasks, gridProjects],\n )\n\n const projectOptions = React.useMemo(\n () => [\n { value: ALL_OPTION_VALUE, label: t('staff.time_tracking.timesheet.filters.allProjects', 'All projects') },\n ...data.projects.map((project) => ({ value: project.id, label: project.name })),\n ],\n [data.projects, t],\n )\n\n const personOptions = React.useMemo(() => {\n const mine = {\n value: ALL_OPTION_VALUE,\n label: t('staff.time_tracking.timesheet.filters.me', 'Me'),\n }\n if (!canManageProjects) return [mine]\n return [\n mine,\n ...data.people\n .filter((person) => person.id !== data.staffMemberId)\n .map((person) => ({ value: person.id, label: person.name })),\n ]\n }, [canManageProjects, data.people, data.staffMemberId, t])\n\n const monthAnchors = React.useMemo(() => {\n const anchors: string[] = []\n for (const day of eachDayIso(range)) {\n const monthStart = startOfMonthIso(day)\n if (anchors[anchors.length - 1] !== monthStart) anchors.push(monthStart)\n }\n return anchors\n }, [range])\n\n const openEntryDialog = React.useCallback((date: string, entryId: string | null) => {\n setEntryDialog({ open: true, entryId, date })\n }, [])\n\n const handleQuickAdd = React.useCallback(\n async (input: { date: string; targetKey: string; durationMinutes: number; startClock: string | null }) => {\n const target = parseTargetKey(input.targetKey)\n /**\n * A start with no end would store the shape a running timer has (T4.9), so\n * the end is derived from the start and the duration through the shared\n * 2-of-3 helper \u2014 including the midnight crossing, where the entry keeps\n * the day it started on (D-8) and its end lands on the next one.\n */\n const derived = input.startClock\n ? deriveInterval({ start: input.startClock, durationMinutes: input.durationMinutes })\n : null\n const body = {\n staffMemberId: data.staffMemberId,\n date: input.date,\n timeProjectId: target.timeProjectId,\n taskId: target.taskId,\n durationMinutes: input.durationMinutes,\n startedAt: input.startClock ? combineDateAndClock(input.date, input.startClock) : undefined,\n endedAt:\n derived?.end != null\n ? combineDateAndClock(input.date, derived.end, derived.crossesMidnight ? 1 : 0)\n : undefined,\n source: 'manual',\n }\n try {\n await runMutation({\n operation: () =>\n createCrud(ENTRIES_API_PATH, body, {\n errorMessage: t('staff.timesheets.my.errors.save', 'Failed to save timesheets.'),\n }),\n context: {\n formId: MUTATION_CONTEXT_ID,\n resourceKind: 'staff.timesheets.time_entry',\n retryLastMutation,\n },\n mutationPayload: body as unknown as Record<string, unknown>,\n })\n await loadData()\n } catch (error) {\n logger.error('staff.time_tracking.timesheet quick add failed', { err: error })\n flash(t('staff.timesheets.my.errors.save', 'Failed to save timesheets.'), 'error')\n }\n },\n [data.staffMemberId, loadData, retryLastMutation, runMutation, t],\n )\n\n const handleDuplicate = React.useCallback(\n async (entry: TimesheetEntry) => {\n try {\n await runMutation({\n operation: () =>\n createCrud(`${ENTRIES_API_PATH}/${entry.id}/duplicate`, {}, {\n errorMessage: t('staff.time_tracking.entries.errors.duplicate', 'Could not duplicate the time entry.'),\n }),\n context: {\n formId: MUTATION_CONTEXT_ID,\n resourceKind: 'staff.timesheets.time_entry',\n retryLastMutation,\n },\n mutationPayload: { id: entry.id },\n })\n await loadData()\n } catch (error) {\n logger.error('staff.time_tracking.timesheet duplicate failed', { err: error })\n flash(t('staff.time_tracking.entries.errors.duplicate', 'Could not duplicate the time entry.'), 'error')\n }\n },\n [loadData, retryLastMutation, runMutation, t],\n )\n\n const handleVisibilityToggle = React.useCallback(\n async (project: TimesheetProjectRef, showInGrid: boolean) => {\n // optimistic-lock-exempt: this PATCH toggles the caller's own `showInGrid`\n // flag on the membership junction \u2014 per-user state with no second editor.\n const body = { showInGrid }\n try {\n await runMutation({\n operation: () =>\n apiCallOrThrow(`/api/staff/timesheets/my-projects/${project.id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n }),\n context: {\n formId: MUTATION_CONTEXT_ID,\n resourceKind: 'staff.timesheets.time_project_member',\n retryLastMutation,\n },\n mutationPayload: body,\n })\n await loadData()\n } catch (error) {\n logger.error('staff.time_tracking.timesheet grid visibility failed', { err: error })\n flash(t('staff.timesheets.my.addRow.error', 'Could not add the project. Please try again.'), 'error')\n }\n },\n [loadData, retryLastMutation, runMutation, t],\n )\n\n const handleRemoveProject = React.useCallback(\n async (project: TimesheetProjectRef) => {\n const confirmed = await confirm({\n title: t('staff.timesheets.my.removeRow', 'Remove from grid'),\n text: t(\n 'staff.timesheets.my.removeRow.confirm',\n 'Remove {projectName} from your timesheet grid? You can re-add it anytime via \"+ Add row\".',\n ).replace('{projectName}', project.name),\n })\n if (!confirmed) return\n await handleVisibilityToggle(project, false)\n },\n [confirm, handleVisibilityToggle, t],\n )\n\n if (isInitialLoad) {\n return (\n <Page>\n <PageBody>\n <LoadingMessage label={t('staff.timesheets.my.loading', 'Loading timesheets...')} />\n </PageBody>\n </Page>\n )\n }\n\n if (data.staffMemberMissing) {\n return (\n <Page>\n <PageBody>\n <div className=\"py-12 text-center\">\n <p className=\"text-lg font-semibold mb-2\">\n {t('staff.timesheets.my.noProfile.title', 'Set up your profile to start tracking time')}\n </p>\n <p className=\"text-sm text-muted-foreground mb-6\">\n {t('staff.timesheets.my.noProfile', 'You need a Team Member profile to track time.')}\n </p>\n <Button asChild>\n <Link href=\"/backend/staff/profile/create\">\n {t('staff.timesheets.my.createProfile', 'Create My Profile')}\n </Link>\n </Button>\n </div>\n </PageBody>\n </Page>\n )\n }\n\n return (\n <Page>\n <PageBody>\n <TimerBar\n projects={assignedProjects.map((project) => ({\n id: project.id,\n name: project.name,\n code: project.code,\n color: project.color,\n }))}\n staffMemberId={data.staffMemberId}\n onTimerStopped={() => {\n void loadData()\n }}\n />\n\n <div className=\"rounded-lg border bg-card\">\n <div className=\"flex flex-col gap-3 border-b p-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <PeriodSelector\n periodKind={periodKind}\n anchorDate={anchorDate}\n onPeriodKindChange={handlePeriodKindChange}\n onAnchorDateChange={setAnchorDate}\n />\n {canManageOwn && viewingSelf ? (\n <Button type=\"button\" onClick={() => openEntryDialog(todayIso(), null)}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n {t('staff.time_tracking.entries.actions.add', 'Add entry')}\n </Button>\n ) : null}\n </div>\n <div className=\"flex flex-wrap items-center gap-3\">\n <TimesheetFilterSelect\n value={projectFilter}\n options={projectOptions}\n onChange={setProjectFilter}\n ariaLabel={t('staff.time_tracking.entries.filters.project', 'Project')}\n className=\"w-56\"\n />\n <TimesheetFilterSelect\n value={personFilter}\n options={personOptions}\n onChange={setPersonFilter}\n ariaLabel={t('staff.time_tracking.timesheet.filters.person', 'Person')}\n className=\"w-44\"\n disabled={personOptions.length <= 1}\n />\n <TimesheetViewSwitch\n view={view}\n views={viewsForPeriod(periodKind)}\n onViewChange={handleViewChange}\n />\n <InjectionSpot\n spotId={extensionPoints.hosts.timesheetToolbar.spotId}\n context={timesheetInjectionContext}\n data={summary}\n />\n </div>\n </div>\n\n <div className={isRefreshing ? 'p-4 opacity-50 transition-opacity' : 'p-4 transition-opacity'}>\n {data.truncated ? (\n <p className=\"mb-3 text-xs text-muted-foreground\">\n {t(\n 'staff.time_tracking.timesheet.truncated',\n 'Showing the first {count} entries of this period \u2014 narrow the period or the filters to see the rest.',\n { count: String(MAX_ENTRY_PAGES * PAGE_SIZE) },\n )}\n </p>\n ) : null}\n\n {view === 'calendar' ? (\n <TimesheetCalendar\n monthAnchors={monthAnchors}\n days={dayIndex}\n scaleMinutes={scaleMinutes}\n todayDate={todayIso()}\n showMonthHeadings={monthAnchors.length > 1}\n onAddEntry={(date) => {\n if (!canManageOwn || readOnly) return\n openEntryDialog(date, null)\n }}\n onSelectEntry={(entry) => openEntryDialog(entry.date, entry.id)}\n />\n ) : null}\n\n {view === 'list' ? (\n <ListView\n days={days}\n scaleMinutes={scaleMinutes}\n dailyTargetMinutes={dailyTargetMinutes}\n expandedDate={expandedDate}\n onExpandedDateChange={(date) => {\n setExpandedTouched(true)\n setExpandedDate(date)\n }}\n targets={logTargets}\n showAuthor={!viewingSelf}\n authorNames={new Map(data.people.map((person) => [person.id, person.name]))}\n canManage={canManageOwn && !readOnly}\n onQuickAdd={handleQuickAdd}\n onEditEntry={(entry) => openEntryDialog(entry.date, entry.id)}\n onDuplicateEntry={(entry) => {\n void handleDuplicate(entry)\n }}\n />\n ) : null}\n\n {view === 'grid' ? (\n <GridView\n days={eachDayIso(range)}\n projects={gridProjects}\n allAssignedProjects={assignedProjects}\n tasks={data.tasks}\n entries={data.entries}\n staffMemberId={data.staffMemberId}\n canManage={canManageOwn}\n canManageProjects={canManageProjects}\n readOnly={readOnly}\n rowMode={rowMode}\n onRowModeChange={setRowMode}\n onAddProject={(project) => handleVisibilityToggle(project, true)}\n onRemoveProject={handleRemoveProject}\n onCreateProject={() => setCreateDialogOpen(true)}\n onSaved={loadData}\n />\n ) : null}\n </div>\n\n <TimesheetPeriodFooter summary={summary} dailyHours={data.dailyHours} />\n </div>\n </PageBody>\n\n {ConfirmDialogElement}\n\n <CreateProjectDialog\n open={createDialogOpen}\n onOpenChange={setCreateDialogOpen}\n onProjectCreated={() => {\n setCreateDialogOpen(false)\n void loadData()\n }}\n />\n\n <TimeEntryDialog\n open={entryDialog.open}\n onOpenChange={(open) => setEntryDialog((current) => ({ ...current, open }))}\n entryId={entryDialog.entryId}\n defaults={{ date: entryDialog.date }}\n onSaved={() => {\n void loadData()\n }}\n />\n </Page>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const metadata = {
|
|
2
|
+
requireAuth: true,
|
|
3
|
+
requireFeatures: ["staff.timesheets.view"],
|
|
4
|
+
pageTitle: "Timesheet",
|
|
5
|
+
pageTitleKey: "staff.time_tracking.nav.timesheet",
|
|
6
|
+
pageGroup: "Time tracking",
|
|
7
|
+
pageGroupKey: "staff.time_tracking.nav.group",
|
|
8
|
+
pageOrder: 50,
|
|
9
|
+
icon: "calendar",
|
|
10
|
+
breadcrumb: [
|
|
11
|
+
{ label: "Time tracking", labelKey: "staff.time_tracking.nav.group", href: "/backend/staff/time-tracking" },
|
|
12
|
+
{ label: "Timesheet", labelKey: "staff.time_tracking.nav.timesheet" }
|
|
13
|
+
]
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
metadata
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=page.meta.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/modules/staff/backend/staff/time-tracking/timesheet/page.meta.ts"],
|
|
4
|
+
"sourcesContent": ["export const metadata = {\n requireAuth: true,\n requireFeatures: ['staff.timesheets.view'],\n pageTitle: 'Timesheet',\n pageTitleKey: 'staff.time_tracking.nav.timesheet',\n pageGroup: 'Time tracking',\n pageGroupKey: 'staff.time_tracking.nav.group',\n pageOrder: 50,\n icon: 'calendar',\n breadcrumb: [\n { label: 'Time tracking', labelKey: 'staff.time_tracking.nav.group', href: '/backend/staff/time-tracking' },\n { label: 'Timesheet', labelKey: 'staff.time_tracking.nav.timesheet' },\n ],\n}\n"],
|
|
5
|
+
"mappings": "AAAO,MAAM,WAAW;AAAA,EACtB,aAAa;AAAA,EACb,iBAAiB,CAAC,uBAAuB;AAAA,EACzC,WAAW;AAAA,EACX,cAAc;AAAA,EACd,WAAW;AAAA,EACX,cAAc;AAAA,EACd,WAAW;AAAA,EACX,MAAM;AAAA,EACN,YAAY;AAAA,IACV,EAAE,OAAO,iBAAiB,UAAU,iCAAiC,MAAM,+BAA+B;AAAA,IAC1G,EAAE,OAAO,aAAa,UAAU,oCAAoC;AAAA,EACtE;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|