@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
|
@@ -119,12 +119,37 @@
|
|
|
119
119
|
"staff.audit.teams.create": "Create team",
|
|
120
120
|
"staff.audit.teams.delete": "Delete team",
|
|
121
121
|
"staff.audit.teams.update": "Update team",
|
|
122
|
+
"staff.audit.timesheets.reports.close": "Close and lock report",
|
|
123
|
+
"staff.audit.timesheets.reports.create": "Create report",
|
|
124
|
+
"staff.audit.timesheets.reports.delete": "Delete report",
|
|
125
|
+
"staff.audit.timesheets.reports.unlock": "Unlock report entries",
|
|
126
|
+
"staff.audit.timesheets.reports.update": "Update report",
|
|
127
|
+
"staff.audit.timesheets.tags.assign_entry": "Assign time entry tags",
|
|
128
|
+
"staff.audit.timesheets.tags.assign_task": "Assign task tags",
|
|
129
|
+
"staff.audit.timesheets.tags.create": "Create tag",
|
|
130
|
+
"staff.audit.timesheets.tags.delete": "Delete tag",
|
|
131
|
+
"staff.audit.timesheets.tags.unassign_entry": "Unassign time entry tags",
|
|
132
|
+
"staff.audit.timesheets.tags.unassign_task": "Unassign task tags",
|
|
133
|
+
"staff.audit.timesheets.tags.update": "Update tag",
|
|
134
|
+
"staff.audit.timesheets.task_comments.create": "Create task comment",
|
|
135
|
+
"staff.audit.timesheets.task_comments.delete": "Delete task comment",
|
|
136
|
+
"staff.audit.timesheets.task_comments.update": "Update task comment",
|
|
137
|
+
"staff.audit.timesheets.task_statuses.create": "Create task status",
|
|
138
|
+
"staff.audit.timesheets.task_statuses.delete": "Delete task status",
|
|
139
|
+
"staff.audit.timesheets.task_statuses.reorder": "Reorder task statuses",
|
|
140
|
+
"staff.audit.timesheets.task_statuses.update": "Update task status",
|
|
141
|
+
"staff.audit.timesheets.tasks.create": "Create task",
|
|
142
|
+
"staff.audit.timesheets.tasks.delete": "Delete task",
|
|
143
|
+
"staff.audit.timesheets.tasks.statusChange": "Move task",
|
|
144
|
+
"staff.audit.timesheets.tasks.update": "Update task",
|
|
122
145
|
"staff.audit.timesheets.time_entries.create": "Create time entry",
|
|
123
146
|
"staff.audit.timesheets.time_entries.delete": "Delete time entry",
|
|
124
147
|
"staff.audit.timesheets.time_entries.startTimer": "Start timer",
|
|
125
148
|
"staff.audit.timesheets.time_entries.update": "Update time entry",
|
|
126
149
|
"staff.audit.timesheets.time_project_members.assign": "Assign time project member",
|
|
127
150
|
"staff.audit.timesheets.time_project_members.unassign": "Unassign time project member",
|
|
151
|
+
"staff.audit.timesheets.time_project_members.update": "Update time project member",
|
|
152
|
+
"staff.audit.timesheets.time_projects.change_currency": "Change time project currency",
|
|
128
153
|
"staff.audit.timesheets.time_projects.create": "Create time project",
|
|
129
154
|
"staff.audit.timesheets.time_projects.delete": "Delete time project",
|
|
130
155
|
"staff.audit.timesheets.time_projects.update": "Update time project",
|
|
@@ -212,7 +237,13 @@
|
|
|
212
237
|
"staff.availabilityRuleSets.tabs.availability": "Availability",
|
|
213
238
|
"staff.availabilityRuleSets.tabs.details": "Details",
|
|
214
239
|
"staff.availabilityRuleSets.tabs.label": "Schedule sections",
|
|
240
|
+
"staff.errors.customerAccountNotLinked": "This portal account is not linked to a customer.",
|
|
241
|
+
"staff.errors.forbidden": "Forbidden",
|
|
242
|
+
"staff.errors.internal": "Internal server error",
|
|
243
|
+
"staff.errors.invalidInput": "Invalid request",
|
|
244
|
+
"staff.errors.invalid_request": "Invalid request",
|
|
215
245
|
"staff.errors.missingScope": "Missing tenant or organization scope.",
|
|
246
|
+
"staff.errors.notFound": "Not found",
|
|
216
247
|
"staff.errors.unauthorized": "Unauthorized",
|
|
217
248
|
"staff.leaveRequests.actions.accept": "Approve",
|
|
218
249
|
"staff.leaveRequests.actions.add": "New request",
|
|
@@ -309,6 +340,45 @@
|
|
|
309
340
|
"staff.notifications.leaveRequest.pending.title": "Leave Request Pending",
|
|
310
341
|
"staff.notifications.leaveRequest.rejected.body": "Your leave request from {startDate} to {endDate} has been rejected{reason, select, other { - {reason}}}",
|
|
311
342
|
"staff.notifications.leaveRequest.rejected.title": "Leave Request Rejected",
|
|
343
|
+
"staff.notifications.timeEntryTimer.runningLong.body": "A timer has been running for a long time. Stop it if the work is finished.",
|
|
344
|
+
"staff.notifications.timeEntryTimer.runningLong.title": "Timer still running",
|
|
345
|
+
"staff.notifications.timeProjectAccess.actions.openTeam": "Open project team",
|
|
346
|
+
"staff.notifications.timeProjectAccess.renderer.generalRequest": "No project selected",
|
|
347
|
+
"staff.notifications.timeProjectAccess.renderer.project": "Project",
|
|
348
|
+
"staff.notifications.timeProjectAccess.requested.body": "{requesterName} is asking for time tracking project access.",
|
|
349
|
+
"staff.notifications.timeProjectAccess.requested.title": "Project access requested",
|
|
350
|
+
"staff.notifications.timeProjectBudget.actions.openProject": "Open project",
|
|
351
|
+
"staff.notifications.timeProjectBudget.thresholdReached.body": "{projectName} has reached {percent}% of its budget (alert set at {thresholdPercent}%).",
|
|
352
|
+
"staff.notifications.timeProjectBudget.thresholdReached.title": "Project budget threshold reached",
|
|
353
|
+
"staff.notifications.timeReport.actions.openReport": "Open report",
|
|
354
|
+
"staff.notifications.timeReport.actions.reviewReport": "Review report",
|
|
355
|
+
"staff.notifications.timeReport.approved.body": "Report {reference} ({title}) has been closed.",
|
|
356
|
+
"staff.notifications.timeReport.approved.title": "Time report closed",
|
|
357
|
+
"staff.notifications.timeReport.readyForApproval.body": "Report {reference} is waiting for your approval.",
|
|
358
|
+
"staff.notifications.timeReport.readyForApproval.title": "Time report ready for approval",
|
|
359
|
+
"staff.notifications.timesheet.actions.openTimesheet": "Open timesheet",
|
|
360
|
+
"staff.notifications.timesheet.periodIncomplete.body": "Some working days between {periodFrom} and {periodTo} have no logged time.",
|
|
361
|
+
"staff.notifications.timesheet.periodIncomplete.title": "Timesheet period incomplete",
|
|
362
|
+
"staff.portal.timeReports.backToList": "All time reports",
|
|
363
|
+
"staff.portal.timeReports.billableHours": "Billable hours",
|
|
364
|
+
"staff.portal.timeReports.detailTitle": "Time report",
|
|
365
|
+
"staff.portal.timeReports.emptyDescription": "A report appears here once the period it covers has been closed.",
|
|
366
|
+
"staff.portal.timeReports.emptyTitle": "No time reports yet",
|
|
367
|
+
"staff.portal.timeReports.listDescription": "Hours delivered on your projects, as reported at the close of each period.",
|
|
368
|
+
"staff.portal.timeReports.listTitle": "Time reports",
|
|
369
|
+
"staff.portal.timeReports.loadFailed": "Could not load your time reports.",
|
|
370
|
+
"staff.portal.timeReports.nav": "Time reports",
|
|
371
|
+
"staff.portal.timeReports.next": "Next",
|
|
372
|
+
"staff.portal.timeReports.nonBillableHours": "Non-billable hours",
|
|
373
|
+
"staff.portal.timeReports.notFoundDescription": "This report either does not exist or is not part of your account.",
|
|
374
|
+
"staff.portal.timeReports.notFoundTitle": "Report not available",
|
|
375
|
+
"staff.portal.timeReports.pageLabel": "Page",
|
|
376
|
+
"staff.portal.timeReports.previous": "Previous",
|
|
377
|
+
"staff.portal.timeReports.projectColumn": "Project",
|
|
378
|
+
"staff.portal.timeReports.projectUnassigned": "Unassigned",
|
|
379
|
+
"staff.portal.timeReports.projectsEmpty": "No project breakdown is available for this period.",
|
|
380
|
+
"staff.portal.timeReports.projectsTitle": "By project",
|
|
381
|
+
"staff.portal.timeReports.totalsTitle": "Totals",
|
|
312
382
|
"staff.resourceTypes.actions.add": "Add resource type",
|
|
313
383
|
"staff.resourceTypes.actions.delete": "Delete",
|
|
314
384
|
"staff.resourceTypes.actions.deleteConfirm": "Delete resource type \"{{name}}\"?",
|
|
@@ -426,7 +496,11 @@
|
|
|
426
496
|
"staff.search.badge.team": "Team",
|
|
427
497
|
"staff.search.badge.teamMember": "Team member",
|
|
428
498
|
"staff.search.badge.teamRole": "Team role",
|
|
499
|
+
"staff.search.badge.timeEntry": "Time entry",
|
|
429
500
|
"staff.search.badge.timeProject": "Project",
|
|
501
|
+
"staff.search.badge.timeReport": "Report",
|
|
502
|
+
"staff.search.badge.timeTag": "Tag",
|
|
503
|
+
"staff.search.badge.timeTask": "Task",
|
|
430
504
|
"staff.search.service.maxAttendees": "Max {{count}}",
|
|
431
505
|
"staff.search.status.active": "Active",
|
|
432
506
|
"staff.search.status.inactive": "Inactive",
|
|
@@ -936,10 +1010,784 @@
|
|
|
936
1010
|
"staff.teams.tabs.details": "Details",
|
|
937
1011
|
"staff.teams.tabs.label": "Team sections",
|
|
938
1012
|
"staff.teams.tabs.members": "Team members",
|
|
1013
|
+
"staff.time_tracking.access.denied.back": "Back to “My work”",
|
|
1014
|
+
"staff.time_tracking.access.denied.description": "Project access is granted one project at a time by a Team Leader. If you had access before, it may have been revoked — your earlier time entries stay saved.",
|
|
1015
|
+
"staff.time_tracking.access.denied.request": "Request access",
|
|
1016
|
+
"staff.time_tracking.access.denied.title": "You do not have access to this project",
|
|
1017
|
+
"staff.time_tracking.access.empty.description": "A Team Leader grants project access. Once you are added to a project it shows up here right away — no need to log in again.",
|
|
1018
|
+
"staff.time_tracking.access.empty.request": "Ask a Team Leader for access",
|
|
1019
|
+
"staff.time_tracking.access.empty.title": "You have no projects assigned yet",
|
|
1020
|
+
"staff.time_tracking.access.request.error": "Could not send the access request.",
|
|
1021
|
+
"staff.time_tracking.access.request.sent": "Request sent",
|
|
1022
|
+
"staff.time_tracking.access.request.success": "Your request has been sent to the Team Leaders.",
|
|
1023
|
+
"staff.time_tracking.board.addStatus.cta": "Add status",
|
|
1024
|
+
"staff.time_tracking.board.addStatus.error": "Could not add the column.",
|
|
1025
|
+
"staff.time_tracking.board.addStatus.placeholder": "Column name",
|
|
1026
|
+
"staff.time_tracking.board.backToProject": "Back to project",
|
|
1027
|
+
"staff.time_tracking.board.card.addTime": "Add time",
|
|
1028
|
+
"staff.time_tracking.board.card.addTimeAria": "Add time to {title}",
|
|
1029
|
+
"staff.time_tracking.board.card.aria": "Task: {title}",
|
|
1030
|
+
"staff.time_tracking.board.card.assignee": "Assigned to {name}",
|
|
1031
|
+
"staff.time_tracking.board.card.moveTo.aria": "Move {title} to another column",
|
|
1032
|
+
"staff.time_tracking.board.card.moveTo.cta": "Move",
|
|
1033
|
+
"staff.time_tracking.board.card.moveTo.menu": "Move {title} to",
|
|
1034
|
+
"staff.time_tracking.board.card.startTimer": "Start",
|
|
1035
|
+
"staff.time_tracking.board.card.startTimerAria": "Start a timer for {title}",
|
|
1036
|
+
"staff.time_tracking.board.card.stopTimer": "Stop",
|
|
1037
|
+
"staff.time_tracking.board.card.stopTimerAria": "Stop the timer for {title}",
|
|
1038
|
+
"staff.time_tracking.board.card.subtasks": "{done}/{total} subtasks",
|
|
1039
|
+
"staff.time_tracking.board.card.timerRunning": "timer",
|
|
1040
|
+
"staff.time_tracking.board.card.unassigned": "Unassigned",
|
|
1041
|
+
"staff.time_tracking.board.dnd.dragCancel": "Moving the task {task} was cancelled.",
|
|
1042
|
+
"staff.time_tracking.board.dnd.dragEnd": "The task {task} was dropped into the column {column}.",
|
|
1043
|
+
"staff.time_tracking.board.dnd.dragEndOutside": "The task {task} was dropped outside the columns.",
|
|
1044
|
+
"staff.time_tracking.board.dnd.dragOver": "The task {task} is over the column {column}.",
|
|
1045
|
+
"staff.time_tracking.board.dnd.dragOverNothing": "The task {task} is not over a column.",
|
|
1046
|
+
"staff.time_tracking.board.dnd.dragStart": "Picked up the task {task}.",
|
|
1047
|
+
"staff.time_tracking.board.dnd.instructions": "Drag a card with the pointer to move it between columns. With the keyboard, press Enter on a card to open it, or use the Move button in the card actions to choose a target column.",
|
|
1048
|
+
"staff.time_tracking.board.empty.description": "A Team Leader configures the board columns for each project.",
|
|
1049
|
+
"staff.time_tracking.board.empty.title": "This project has no columns yet",
|
|
1050
|
+
"staff.time_tracking.board.filters.add": "Add filter",
|
|
1051
|
+
"staff.time_tracking.board.filters.assignedToMe": "Assigned to me",
|
|
1052
|
+
"staff.time_tracking.board.filters.assignee": "Assignee",
|
|
1053
|
+
"staff.time_tracking.board.filters.clear": "Clear filters",
|
|
1054
|
+
"staff.time_tracking.board.filters.cta": "Filters",
|
|
1055
|
+
"staff.time_tracking.board.filters.noOptions": "Nothing to filter by yet.",
|
|
1056
|
+
"staff.time_tracking.board.filters.remove": "Remove filter: {label}",
|
|
1057
|
+
"staff.time_tracking.board.filters.status": "Status",
|
|
1058
|
+
"staff.time_tracking.board.filters.tag": "Tag",
|
|
1059
|
+
"staff.time_tracking.board.list.caption": "Tasks",
|
|
1060
|
+
"staff.time_tracking.board.list.columns.assignee": "Assignee",
|
|
1061
|
+
"staff.time_tracking.board.list.columns.hours": "Logged",
|
|
1062
|
+
"staff.time_tracking.board.list.columns.reference": "Ref.",
|
|
1063
|
+
"staff.time_tracking.board.list.columns.status": "Status",
|
|
1064
|
+
"staff.time_tracking.board.list.columns.tags": "Tags",
|
|
1065
|
+
"staff.time_tracking.board.list.columns.title": "Task",
|
|
1066
|
+
"staff.time_tracking.board.list.empty.description": "Remove a filter chip to widen the view.",
|
|
1067
|
+
"staff.time_tracking.board.list.empty.title": "No tasks match these filters",
|
|
1068
|
+
"staff.time_tracking.board.loadError": "Could not load the board.",
|
|
1069
|
+
"staff.time_tracking.board.loadMore": "Show more ({remaining})",
|
|
1070
|
+
"staff.time_tracking.board.loading": "Loading the board…",
|
|
1071
|
+
"staff.time_tracking.board.move.error": "Could not move the task.",
|
|
1072
|
+
"staff.time_tracking.board.move.retry": "Retry",
|
|
1073
|
+
"staff.time_tracking.board.move.rolledBack": "The task was moved back — the change was not saved.",
|
|
1074
|
+
"staff.time_tracking.board.newTask.cancel": "Cancel",
|
|
1075
|
+
"staff.time_tracking.board.newTask.cta": "New task",
|
|
1076
|
+
"staff.time_tracking.board.newTask.error": "Could not create the task.",
|
|
1077
|
+
"staff.time_tracking.board.newTask.status": "Status",
|
|
1078
|
+
"staff.time_tracking.board.newTask.submit": "Create task",
|
|
1079
|
+
"staff.time_tracking.board.newTask.title": "New task",
|
|
1080
|
+
"staff.time_tracking.board.newTask.titleLabel": "Task title",
|
|
1081
|
+
"staff.time_tracking.board.noProject.description": "The board needs a project. Ask a Team Leader for access to one.",
|
|
1082
|
+
"staff.time_tracking.board.noProject.title": "No project to show",
|
|
1083
|
+
"staff.time_tracking.board.projectPicker": "Project",
|
|
1084
|
+
"staff.time_tracking.board.projectsLoadError": "Could not load your projects.",
|
|
1085
|
+
"staff.time_tracking.board.quickAdd.cta": "Quickly add a task",
|
|
1086
|
+
"staff.time_tracking.board.quickAdd.error": "Could not create the task.",
|
|
1087
|
+
"staff.time_tracking.board.quickAdd.label": "Quickly add a task",
|
|
1088
|
+
"staff.time_tracking.board.quickAdd.placeholder": "Task title",
|
|
1089
|
+
"staff.time_tracking.board.reload": "Try again",
|
|
1090
|
+
"staff.time_tracking.board.summary.logged": "{hours} logged",
|
|
1091
|
+
"staff.time_tracking.board.summary.tasks": "{count} tasks",
|
|
1092
|
+
"staff.time_tracking.board.timer.linkWarning": "The timer is running but is not linked to this task yet.",
|
|
1093
|
+
"staff.time_tracking.board.timer.startError": "Could not start the timer.",
|
|
1094
|
+
"staff.time_tracking.board.timer.stopError": "Could not stop the timer.",
|
|
1095
|
+
"staff.time_tracking.board.view.board": "Board",
|
|
1096
|
+
"staff.time_tracking.board.view.label": "View",
|
|
1097
|
+
"staff.time_tracking.board.view.list": "List",
|
|
1098
|
+
"staff.time_tracking.duration.hint": "Understands 1h 40m, 1.5h, 90m, 1:40.",
|
|
1099
|
+
"staff.time_tracking.duration.invalid": "I don't understand that format. Try 1h 40m, 1.5h, 90m or 1:40.",
|
|
1100
|
+
"staff.time_tracking.duration.placeholder": "1h 30m",
|
|
1101
|
+
"staff.time_tracking.entries.actions.add": "Add entry",
|
|
1102
|
+
"staff.time_tracking.entries.actions.copyDay": "Copy yesterday",
|
|
1103
|
+
"staff.time_tracking.entries.actions.delete": "Delete",
|
|
1104
|
+
"staff.time_tracking.entries.actions.duplicate": "Duplicate",
|
|
1105
|
+
"staff.time_tracking.entries.actions.refresh": "Refresh",
|
|
1106
|
+
"staff.time_tracking.entries.actions.showReport": "Show the report",
|
|
1107
|
+
"staff.time_tracking.entries.badges.locked": "locked",
|
|
1108
|
+
"staff.time_tracking.entries.badges.nonBillable": "non-billable",
|
|
1109
|
+
"staff.time_tracking.entries.badges.rateOverride": "{amount}/h",
|
|
1110
|
+
"staff.time_tracking.entries.columns.clock": "Hours",
|
|
1111
|
+
"staff.time_tracking.entries.columns.cost": "Cost",
|
|
1112
|
+
"staff.time_tracking.entries.columns.date": "Date",
|
|
1113
|
+
"staff.time_tracking.entries.columns.duration": "Time",
|
|
1114
|
+
"staff.time_tracking.entries.columns.project": "Project",
|
|
1115
|
+
"staff.time_tracking.entries.columns.task": "Task / description",
|
|
1116
|
+
"staff.time_tracking.entries.copyDay.confirmDuplicates": "Add copies anyway",
|
|
1117
|
+
"staff.time_tracking.entries.copyDay.conflict": "Today already has {count} entries. Add yesterday’s copies on top of them?",
|
|
1118
|
+
"staff.time_tracking.entries.copyDay.nothing": "Yesterday has no entries to copy.",
|
|
1119
|
+
"staff.time_tracking.entries.copyDay.skipped": "{count} entries were skipped because they are locked.",
|
|
1120
|
+
"staff.time_tracking.entries.copyDay.success": "{count} entries copied as drafts — review them.",
|
|
1121
|
+
"staff.time_tracking.entries.empty": "No time entries in this period.",
|
|
1122
|
+
"staff.time_tracking.entries.errors.copyDay": "Could not copy the day.",
|
|
1123
|
+
"staff.time_tracking.entries.errors.delete": "Could not delete the time entry.",
|
|
1124
|
+
"staff.time_tracking.entries.errors.duplicate": "Could not duplicate the time entry.",
|
|
1125
|
+
"staff.time_tracking.entries.errors.entriesLocked": "Some of these time entries are locked in a closed report and cannot be changed. Unlock the report first.",
|
|
1126
|
+
"staff.time_tracking.entries.errors.entryLocked": "This time entry is locked in a closed report and cannot be changed. Unlock the report first.",
|
|
1127
|
+
"staff.time_tracking.entries.errors.load": "Could not load the time entries.",
|
|
1128
|
+
"staff.time_tracking.entries.errors.save": "Could not save the time entry.",
|
|
1129
|
+
"staff.time_tracking.entries.filters.billable": "Billable",
|
|
1130
|
+
"staff.time_tracking.entries.filters.billableNo": "Non-billable only",
|
|
1131
|
+
"staff.time_tracking.entries.filters.billableYes": "Billable only",
|
|
1132
|
+
"staff.time_tracking.entries.filters.clearAll": "Clear all",
|
|
1133
|
+
"staff.time_tracking.entries.filters.customer": "Customer",
|
|
1134
|
+
"staff.time_tracking.entries.filters.entry": "Entry",
|
|
1135
|
+
"staff.time_tracking.entries.filters.entrySelection": "{count} entries",
|
|
1136
|
+
"staff.time_tracking.entries.filters.locked": "Report status",
|
|
1137
|
+
"staff.time_tracking.entries.filters.lockedNo": "Not yet reported",
|
|
1138
|
+
"staff.time_tracking.entries.filters.lockedYes": "Locked in a report",
|
|
1139
|
+
"staff.time_tracking.entries.filters.period": "Period",
|
|
1140
|
+
"staff.time_tracking.entries.filters.person": "Person",
|
|
1141
|
+
"staff.time_tracking.entries.filters.project": "Project",
|
|
1142
|
+
"staff.time_tracking.entries.filters.remove": "Remove filter {name}",
|
|
1143
|
+
"staff.time_tracking.entries.filters.tag": "Tag",
|
|
1144
|
+
"staff.time_tracking.entries.filters.task": "Task",
|
|
1145
|
+
"staff.time_tracking.entries.filters.text": "Description contains",
|
|
1146
|
+
"staff.time_tracking.entries.messages.deleted": "Deleted “{name}” ({duration}). Use Undo to restore it.",
|
|
1147
|
+
"staff.time_tracking.entries.messages.duplicated": "Entry duplicated.",
|
|
1148
|
+
"staff.time_tracking.entries.presets.mineWeek": "Mine, this week",
|
|
1149
|
+
"staff.time_tracking.entries.presets.nonBillable": "Non-billable",
|
|
1150
|
+
"staff.time_tracking.entries.presets.thisMonth": "This month",
|
|
1151
|
+
"staff.time_tracking.entries.presets.unbilled": "Unbilled",
|
|
1152
|
+
"staff.time_tracking.entries.readOnlyNotice": "You can view these entries but not change them.",
|
|
1153
|
+
"staff.time_tracking.entries.source.kiosk": "Kiosk",
|
|
1154
|
+
"staff.time_tracking.entries.source.manual": "Manual",
|
|
1155
|
+
"staff.time_tracking.entries.source.mobile": "Mobile",
|
|
1156
|
+
"staff.time_tracking.entries.source.timer": "Timer",
|
|
1157
|
+
"staff.time_tracking.entries.summary.count": "Total ({visible} of {total} entries)",
|
|
1158
|
+
"staff.time_tracking.entries.summary.multiCurrencyHint": "These entries are billed in more than one currency, so they are shown separately instead of added up.",
|
|
1159
|
+
"staff.time_tracking.entries.table.durationAria": "Entry duration",
|
|
1160
|
+
"staff.time_tracking.entries.table.noTask": "No task",
|
|
1161
|
+
"staff.time_tracking.entries.table.selectAll": "Select all entries",
|
|
1162
|
+
"staff.time_tracking.entries.table.selectRow": "Select entry",
|
|
1163
|
+
"staff.time_tracking.entries.title": "Time entries",
|
|
1164
|
+
"staff.time_tracking.entryDialog.addTag": "Add tag",
|
|
1165
|
+
"staff.time_tracking.entryDialog.billable": "Billable",
|
|
1166
|
+
"staff.time_tracking.entryDialog.billableHint": "On by default for this project.",
|
|
1167
|
+
"staff.time_tracking.entryDialog.cancel": "Cancel",
|
|
1168
|
+
"staff.time_tracking.entryDialog.close": "Close",
|
|
1169
|
+
"staff.time_tracking.entryDialog.computed": "computed",
|
|
1170
|
+
"staff.time_tracking.entryDialog.cost": "Cost",
|
|
1171
|
+
"staff.time_tracking.entryDialog.costHint": "{raw} rounded to {rounded} × {rate}",
|
|
1172
|
+
"staff.time_tracking.entryDialog.createTag": "Create \"{name}\"",
|
|
1173
|
+
"staff.time_tracking.entryDialog.creator": "Entry author: {name} — assigned automatically and not editable.",
|
|
1174
|
+
"staff.time_tracking.entryDialog.creatorUnknown": "The entry author is assigned automatically and is not editable.",
|
|
1175
|
+
"staff.time_tracking.entryDialog.date": "Date",
|
|
1176
|
+
"staff.time_tracking.entryDialog.description": "Description",
|
|
1177
|
+
"staff.time_tracking.entryDialog.discard.cancel": "Keep editing",
|
|
1178
|
+
"staff.time_tracking.entryDialog.discard.confirm": "Discard",
|
|
1179
|
+
"staff.time_tracking.entryDialog.discard.text": "It has not been saved yet, so closing now loses what you entered.",
|
|
1180
|
+
"staff.time_tracking.entryDialog.discard.title": "Discard this time entry?",
|
|
1181
|
+
"staff.time_tracking.entryDialog.duration": "Duration",
|
|
1182
|
+
"staff.time_tracking.entryDialog.end": "End",
|
|
1183
|
+
"staff.time_tracking.entryDialog.endHint": "Change this field and the duration recalculates itself.",
|
|
1184
|
+
"staff.time_tracking.entryDialog.errors.createTag": "Could not create the tag.",
|
|
1185
|
+
"staff.time_tracking.entryDialog.errors.durationRequired": "Enter how long the work took.",
|
|
1186
|
+
"staff.time_tracking.entryDialog.errors.load": "Could not load the time entry.",
|
|
1187
|
+
"staff.time_tracking.entryDialog.errors.noStaffMember": "Your account is not linked to a staff member, so time cannot be logged.",
|
|
1188
|
+
"staff.time_tracking.entryDialog.errors.notFound": "Time entry not found or not accessible.",
|
|
1189
|
+
"staff.time_tracking.entryDialog.errors.save": "Could not save the time entry.",
|
|
1190
|
+
"staff.time_tracking.entryDialog.errors.taskRequired": "Pick the task this time belongs to.",
|
|
1191
|
+
"staff.time_tracking.entryDialog.loading": "Loading the time entry…",
|
|
1192
|
+
"staff.time_tracking.entryDialog.locked.badge": "Locked",
|
|
1193
|
+
"staff.time_tracking.entryDialog.locked.notice": "This entry is closed in a report, so it can no longer be edited.",
|
|
1194
|
+
"staff.time_tracking.entryDialog.locked.showReport": "Show the report",
|
|
1195
|
+
"staff.time_tracking.entryDialog.midnight": "This entry ends the next day, {date}.",
|
|
1196
|
+
"staff.time_tracking.entryDialog.moneyHidden": "Rates and cost are hidden — your permissions do not cover money on time entries.",
|
|
1197
|
+
"staff.time_tracking.entryDialog.noTags": "No matching tag",
|
|
1198
|
+
"staff.time_tracking.entryDialog.overlap.body": "{start} – {end} · „{task}” · {project} ({duration}). Overlapping is allowed — if it is intentional, just save.",
|
|
1199
|
+
"staff.time_tracking.entryDialog.overlap.noProject": "no project",
|
|
1200
|
+
"staff.time_tracking.entryDialog.overlap.noTask": "no task",
|
|
1201
|
+
"staff.time_tracking.entryDialog.overlap.show": "Show that entry",
|
|
1202
|
+
"staff.time_tracking.entryDialog.overlap.snap": "Snap start to {time}",
|
|
1203
|
+
"staff.time_tracking.entryDialog.overlap.title": "This time overlaps another entry",
|
|
1204
|
+
"staff.time_tracking.entryDialog.rate": "Rate",
|
|
1205
|
+
"staff.time_tracking.entryDialog.rateHint": "Defaults to {amount} (the project rate).",
|
|
1206
|
+
"staff.time_tracking.entryDialog.rateOverride": "Custom rate for this entry",
|
|
1207
|
+
"staff.time_tracking.entryDialog.rateOverrideHint": "Overrides the project rate here only.",
|
|
1208
|
+
"staff.time_tracking.entryDialog.ratePerHour": "{amount}/h",
|
|
1209
|
+
"staff.time_tracking.entryDialog.removeTag": "Remove tag {label}",
|
|
1210
|
+
"staff.time_tracking.entryDialog.save": "Save",
|
|
1211
|
+
"staff.time_tracking.entryDialog.saveAndNew": "Save and add another",
|
|
1212
|
+
"staff.time_tracking.entryDialog.saved": "Time entry saved.",
|
|
1213
|
+
"staff.time_tracking.entryDialog.shortcutCancel": "cancel",
|
|
1214
|
+
"staff.time_tracking.entryDialog.shortcutSave": "save",
|
|
1215
|
+
"staff.time_tracking.entryDialog.shortcutSaveAgain": "save and add another",
|
|
1216
|
+
"staff.time_tracking.entryDialog.start": "Start",
|
|
1217
|
+
"staff.time_tracking.entryDialog.tags": "Tags",
|
|
1218
|
+
"staff.time_tracking.entryDialog.task": "Task",
|
|
1219
|
+
"staff.time_tracking.entryDialog.taskHint": "The project and the customer follow from the task — you do not pick them separately.",
|
|
1220
|
+
"staff.time_tracking.entryDialog.taskPlaceholder": "Pick a task",
|
|
1221
|
+
"staff.time_tracking.entryDialog.titleCreate": "New time entry",
|
|
1222
|
+
"staff.time_tracking.entryDialog.titleEdit": "Time entry",
|
|
1223
|
+
"staff.time_tracking.myWork.copyDay.done": "Copied {count} entries from yesterday.",
|
|
1224
|
+
"staff.time_tracking.myWork.errors.load": "Failed to load your work summary.",
|
|
1225
|
+
"staff.time_tracking.myWork.errors.retry": "Try again",
|
|
1226
|
+
"staff.time_tracking.myWork.kpi.month": "This month",
|
|
1227
|
+
"staff.time_tracking.myWork.kpi.nonBillable": "Non-billable",
|
|
1228
|
+
"staff.time_tracking.myWork.kpi.ofTarget": "of {target}",
|
|
1229
|
+
"staff.time_tracking.myWork.kpi.shareOfMonth": "{percent}% of the month",
|
|
1230
|
+
"staff.time_tracking.myWork.kpi.targetGap": "target {target} — {gap} to go",
|
|
1231
|
+
"staff.time_tracking.myWork.kpi.today": "Today",
|
|
1232
|
+
"staff.time_tracking.myWork.kpi.week": "This week",
|
|
1233
|
+
"staff.time_tracking.myWork.kpi.workingDays": "{days} working days",
|
|
1234
|
+
"staff.time_tracking.myWork.projects.budget": "{percent}% of budget ({value})",
|
|
1235
|
+
"staff.time_tracking.myWork.projects.budgetHours": "{hours} h",
|
|
1236
|
+
"staff.time_tracking.myWork.projects.empty": "No projects assigned yet.",
|
|
1237
|
+
"staff.time_tracking.myWork.projects.rate": "{rate}/h",
|
|
1238
|
+
"staff.time_tracking.myWork.projects.title": "My projects",
|
|
1239
|
+
"staff.time_tracking.myWork.quickEntry.duration": "Duration",
|
|
1240
|
+
"staff.time_tracking.myWork.quickEntry.save": "Save",
|
|
1241
|
+
"staff.time_tracking.myWork.quickEntry.target": "Project or task",
|
|
1242
|
+
"staff.time_tracking.myWork.recentTasks.empty": "No tasks logged against yet.",
|
|
1243
|
+
"staff.time_tracking.myWork.recentTasks.title": "Recent tasks",
|
|
1244
|
+
"staff.time_tracking.myWork.today.allEntries": "All entries",
|
|
1245
|
+
"staff.time_tracking.myWork.today.copyYesterday": "Copy yesterday",
|
|
1246
|
+
"staff.time_tracking.myWork.today.empty": "Nothing logged today yet.",
|
|
1247
|
+
"staff.time_tracking.myWork.today.title": "Today’s entries",
|
|
1248
|
+
"staff.time_tracking.myWork.today.total": "Total today",
|
|
1249
|
+
"staff.time_tracking.nav.entries": "Time entries",
|
|
1250
|
+
"staff.time_tracking.nav.group": "Time tracking",
|
|
1251
|
+
"staff.time_tracking.nav.my_work": "My work",
|
|
1252
|
+
"staff.time_tracking.nav.projects": "Projects",
|
|
1253
|
+
"staff.time_tracking.nav.reports": "Reports",
|
|
1254
|
+
"staff.time_tracking.nav.settings": "Settings",
|
|
1255
|
+
"staff.time_tracking.nav.tasks": "Tasks",
|
|
1256
|
+
"staff.time_tracking.nav.timesheet": "Timesheet",
|
|
1257
|
+
"staff.time_tracking.placeholder.description": "This screen is part of the time tracking rollout and is not available yet.",
|
|
1258
|
+
"staff.time_tracking.placeholder.title": "Coming in a later phase",
|
|
1259
|
+
"staff.time_tracking.projects.actions.assignCustomer": "Assign a customer",
|
|
1260
|
+
"staff.time_tracking.projects.assignMembers.confirm": "Assign",
|
|
1261
|
+
"staff.time_tracking.projects.assignMembers.description": "Selected projects: {count}.",
|
|
1262
|
+
"staff.time_tracking.projects.assignMembers.error": "Failed to assign members.",
|
|
1263
|
+
"staff.time_tracking.projects.assignMembers.loadError": "Could not load team members. Check your connection and try again.",
|
|
1264
|
+
"staff.time_tracking.projects.assignMembers.progressName": "Assign members to projects",
|
|
1265
|
+
"staff.time_tracking.projects.assignMembers.success": "Members assigned to {count} projects.",
|
|
1266
|
+
"staff.time_tracking.projects.assignMembers.title": "Assign members",
|
|
1267
|
+
"staff.time_tracking.projects.budget.amountUnit": "amount",
|
|
1268
|
+
"staff.time_tracking.projects.budget.ariaLabel": "Budget usage",
|
|
1269
|
+
"staff.time_tracking.projects.budget.enable": "Track the limit",
|
|
1270
|
+
"staff.time_tracking.projects.budget.enableHint": "Warns at {{percent}}% and 100% of the limit.",
|
|
1271
|
+
"staff.time_tracking.projects.budget.hoursUnit": "h",
|
|
1272
|
+
"staff.time_tracking.projects.budget.hoursValue": "{value} h",
|
|
1273
|
+
"staff.time_tracking.projects.budget.kind": "Limit type",
|
|
1274
|
+
"staff.time_tracking.projects.budget.kindAmount": "Amount",
|
|
1275
|
+
"staff.time_tracking.projects.budget.kindHours": "Hours",
|
|
1276
|
+
"staff.time_tracking.projects.budget.none": "no budget",
|
|
1277
|
+
"staff.time_tracking.projects.budget.usage": "{percent}% of {value}",
|
|
1278
|
+
"staff.time_tracking.projects.budget.value": "Limit",
|
|
1279
|
+
"staff.time_tracking.projects.budget.warnAt": "Warn at",
|
|
1280
|
+
"staff.time_tracking.projects.bulk.assignMembers": "Assign members",
|
|
1281
|
+
"staff.time_tracking.projects.bulk.clear": "Clear",
|
|
1282
|
+
"staff.time_tracking.projects.bulk.report": "Report from selected",
|
|
1283
|
+
"staff.time_tracking.projects.bulk.reportBlocked.missingCustomer": "These projects have no customer yet: {projects}.",
|
|
1284
|
+
"staff.time_tracking.projects.bulk.reportBlocked.multipleCurrencies": "A report always covers one currency. Selected: {currencies}.",
|
|
1285
|
+
"staff.time_tracking.projects.bulk.reportBlocked.multipleCustomers": "A report always covers one customer. Selected: {customers}.",
|
|
1286
|
+
"staff.time_tracking.projects.bulk.selectedCount": "{count} selected",
|
|
1287
|
+
"staff.time_tracking.projects.code.autoHint": "Derived from the project name; it prefixes every task reference.",
|
|
1288
|
+
"staff.time_tracking.projects.code.done": "Done",
|
|
1289
|
+
"staff.time_tracking.projects.code.duplicate": "This code is already used by another project.",
|
|
1290
|
+
"staff.time_tracking.projects.code.edit": "Edit code",
|
|
1291
|
+
"staff.time_tracking.projects.code.empty": "—",
|
|
1292
|
+
"staff.time_tracking.projects.code.manualHint": "Set manually — it no longer follows the name.",
|
|
1293
|
+
"staff.time_tracking.projects.code.reset": "Use the derived code",
|
|
1294
|
+
"staff.time_tracking.projects.columns.budget": "Budget",
|
|
1295
|
+
"staff.time_tracking.projects.columns.cost": "Cost",
|
|
1296
|
+
"staff.time_tracking.projects.columns.customer": "Customer",
|
|
1297
|
+
"staff.time_tracking.projects.columns.hours": "Hours",
|
|
1298
|
+
"staff.time_tracking.projects.columns.rate": "Rate",
|
|
1299
|
+
"staff.time_tracking.projects.currency.acknowledge": "I understand historical amounts are not converted.",
|
|
1300
|
+
"staff.time_tracking.projects.currency.change": "Change currency",
|
|
1301
|
+
"staff.time_tracking.projects.currency.changeError": "Failed to change the project currency.",
|
|
1302
|
+
"staff.time_tracking.projects.currency.changeTitle": "Change currency",
|
|
1303
|
+
"staff.time_tracking.projects.currency.changed": "Project currency changed.",
|
|
1304
|
+
"staff.time_tracking.projects.currency.confirm": "Change currency",
|
|
1305
|
+
"staff.time_tracking.projects.currency.emptyBody": "No time is logged on this project yet, so the change only sets the currency — no amount is relabelled.",
|
|
1306
|
+
"staff.time_tracking.projects.currency.emptyTitle": "Nothing to relabel yet",
|
|
1307
|
+
"staff.time_tracking.projects.currency.hint": "The currency is fixed for the project and drives all cost reporting.",
|
|
1308
|
+
"staff.time_tracking.projects.currency.label": "Currency",
|
|
1309
|
+
"staff.time_tracking.projects.currency.lockedBody": "{{count}} entries are frozen in closed reports: {{reports}}. Unlock them first.",
|
|
1310
|
+
"staff.time_tracking.projects.currency.lockedHint": "The currency is fixed for the project and drives all cost reporting. It is read-only because {{count}} entries have already been logged.",
|
|
1311
|
+
"staff.time_tracking.projects.currency.lockedTitle": "Locked hours block this change",
|
|
1312
|
+
"staff.time_tracking.projects.currency.placeholder": "Select a currency",
|
|
1313
|
+
"staff.time_tracking.projects.currency.postCreateHint": "The currency is fixed for the project and drives all cost reporting. After creation it changes only through this action, so the change is always recorded.",
|
|
1314
|
+
"staff.time_tracking.projects.currency.unset": "Not set",
|
|
1315
|
+
"staff.time_tracking.projects.currency.warnBody": "The {{count}} entries already logged keep their numeric value and are simply read in the new currency.",
|
|
1316
|
+
"staff.time_tracking.projects.currency.warnTitle": "Amounts are relabelled, not converted",
|
|
1317
|
+
"staff.time_tracking.projects.customer.kind.company": "Company",
|
|
1318
|
+
"staff.time_tracking.projects.customer.kind.person": "Sole trader",
|
|
1319
|
+
"staff.time_tracking.projects.customer.new.company": "Company",
|
|
1320
|
+
"staff.time_tracking.projects.customer.new.email": "Email",
|
|
1321
|
+
"staff.time_tracking.projects.customer.new.error": "Failed to create the customer.",
|
|
1322
|
+
"staff.time_tracking.projects.customer.new.firstName": "First name",
|
|
1323
|
+
"staff.time_tracking.projects.customer.new.kind": "Customer type",
|
|
1324
|
+
"staff.time_tracking.projects.customer.new.lastName": "Last name",
|
|
1325
|
+
"staff.time_tracking.projects.customer.new.name": "Name",
|
|
1326
|
+
"staff.time_tracking.projects.customer.new.nameRequired": "A name is required.",
|
|
1327
|
+
"staff.time_tracking.projects.customer.new.person": "Sole trader",
|
|
1328
|
+
"staff.time_tracking.projects.customer.new.submit": "Create customer",
|
|
1329
|
+
"staff.time_tracking.projects.customer.new.title": "New customer",
|
|
1330
|
+
"staff.time_tracking.projects.customer.new.trigger": "New customer",
|
|
1331
|
+
"staff.time_tracking.projects.customer.placeholder": "Search customers…",
|
|
1332
|
+
"staff.time_tracking.projects.errors.required": "Fill in the required fields.",
|
|
1333
|
+
"staff.time_tracking.projects.form.actions.cancel": "Cancel",
|
|
1334
|
+
"staff.time_tracking.projects.form.billableByDefault": "Billable by default",
|
|
1335
|
+
"staff.time_tracking.projects.form.billableByDefaultHint": "New entries in this project start as billable.",
|
|
1336
|
+
"staff.time_tracking.projects.form.code": "Project code",
|
|
1337
|
+
"staff.time_tracking.projects.form.createTitle": "New project",
|
|
1338
|
+
"staff.time_tracking.projects.form.currency": "Currency",
|
|
1339
|
+
"staff.time_tracking.projects.form.customer": "Customer",
|
|
1340
|
+
"staff.time_tracking.projects.form.customerHint": "Time is organised per customer — a project cannot be saved without one.",
|
|
1341
|
+
"staff.time_tracking.projects.form.description": "Description",
|
|
1342
|
+
"staff.time_tracking.projects.form.descriptionPlaceholder": "Scope of work, what was agreed with the customer…",
|
|
1343
|
+
"staff.time_tracking.projects.form.editTitle": "Edit project",
|
|
1344
|
+
"staff.time_tracking.projects.form.groupBasics": "Basics",
|
|
1345
|
+
"staff.time_tracking.projects.form.groupBilling": "Billing",
|
|
1346
|
+
"staff.time_tracking.projects.form.groupBillingHint": "You can leave this empty and fill it in before the first report.",
|
|
1347
|
+
"staff.time_tracking.projects.form.groupBudget": "Budget",
|
|
1348
|
+
"staff.time_tracking.projects.form.groupStatus": "Status",
|
|
1349
|
+
"staff.time_tracking.projects.form.groupTeam": "Team",
|
|
1350
|
+
"staff.time_tracking.projects.form.hourlyRate": "Hourly rate",
|
|
1351
|
+
"staff.time_tracking.projects.form.name": "Project name",
|
|
1352
|
+
"staff.time_tracking.projects.form.namePlaceholder": "e.g. Nordvik — service portal",
|
|
1353
|
+
"staff.time_tracking.projects.form.perHour": "/ h",
|
|
1354
|
+
"staff.time_tracking.projects.form.status": "Status",
|
|
1355
|
+
"staff.time_tracking.projects.rounding.body": "Currently: {{summary}}. The change applies to every project — set it in the module settings.",
|
|
1356
|
+
"staff.time_tracking.projects.rounding.bodyUnknown": "The change applies to every project — set it in the module settings.",
|
|
1357
|
+
"staff.time_tracking.projects.rounding.nearest": "to the nearest {{unit}} min",
|
|
1358
|
+
"staff.time_tracking.projects.rounding.none": "no rounding",
|
|
1359
|
+
"staff.time_tracking.projects.rounding.title": "Rounding is global",
|
|
1360
|
+
"staff.time_tracking.projects.rounding.up": "up to {{unit}} min",
|
|
1361
|
+
"staff.time_tracking.projects.selection.selectAll": "Select all projects on this page",
|
|
1362
|
+
"staff.time_tracking.projects.selection.selectRow": "Select project",
|
|
1363
|
+
"staff.time_tracking.projects.team.afterCreate": "You can assign people once the project is saved.",
|
|
1364
|
+
"staff.time_tracking.projects.team.drawer.assigned": "Assigned ({count})",
|
|
1365
|
+
"staff.time_tracking.projects.team.drawer.badges.adding": "being added",
|
|
1366
|
+
"staff.time_tracking.projects.team.drawer.badges.always": "always",
|
|
1367
|
+
"staff.time_tracking.projects.team.drawer.badges.expired": "expired {date}",
|
|
1368
|
+
"staff.time_tracking.projects.team.drawer.badges.removing": "being removed",
|
|
1369
|
+
"staff.time_tracking.projects.team.drawer.badges.scheduled": "from {date}",
|
|
1370
|
+
"staff.time_tracking.projects.team.drawer.cancel": "Cancel",
|
|
1371
|
+
"staff.time_tracking.projects.team.drawer.close": "Close",
|
|
1372
|
+
"staff.time_tracking.projects.team.drawer.directoryTruncated": "Showing the first {count} people — use the search box to find the rest.",
|
|
1373
|
+
"staff.time_tracking.projects.team.drawer.discard.cancel": "Keep editing",
|
|
1374
|
+
"staff.time_tracking.projects.team.drawer.discard.confirm": "Discard",
|
|
1375
|
+
"staff.time_tracking.projects.team.drawer.discard.text": "Nothing has been saved yet, so closing now loses every change in this drawer.",
|
|
1376
|
+
"staff.time_tracking.projects.team.drawer.discard.title": "Discard the team changes?",
|
|
1377
|
+
"staff.time_tracking.projects.team.drawer.footer.changes.few": "{count} changes to save",
|
|
1378
|
+
"staff.time_tracking.projects.team.drawer.footer.changes.many": "{count} changes to save",
|
|
1379
|
+
"staff.time_tracking.projects.team.drawer.footer.changes.one": "1 change to save",
|
|
1380
|
+
"staff.time_tracking.projects.team.drawer.footer.noChanges": "No changes",
|
|
1381
|
+
"staff.time_tracking.projects.team.drawer.hintFromRole": "{role} · access from role",
|
|
1382
|
+
"staff.time_tracking.projects.team.drawer.hintInProject": "{role} · {hours} in this project",
|
|
1383
|
+
"staff.time_tracking.projects.team.drawer.hintPerson": "{role} · {hours}",
|
|
1384
|
+
"staff.time_tracking.projects.team.drawer.hoursAtLeast": "at least {hours}",
|
|
1385
|
+
"staff.time_tracking.projects.team.drawer.info.immediate": "Access works immediately after saving — no re-login needed.",
|
|
1386
|
+
"staff.time_tracking.projects.team.drawer.info.keepsTime": "Revoking access does not delete logged time — the entries stay in the project and in reports.",
|
|
1387
|
+
"staff.time_tracking.projects.team.drawer.loadError": "Could not load the project team.",
|
|
1388
|
+
"staff.time_tracking.projects.team.drawer.loading": "Loading the team…",
|
|
1389
|
+
"staff.time_tracking.projects.team.drawer.lockedHint": "The Team Leader's access comes from the projects permission, not from an assignment, so it cannot be changed here.",
|
|
1390
|
+
"staff.time_tracking.projects.team.drawer.others": "Everyone else in the organization",
|
|
1391
|
+
"staff.time_tracking.projects.team.drawer.othersEmpty": "No other people found.",
|
|
1392
|
+
"staff.time_tracking.projects.team.drawer.partialSaveError": "{reason} Saving stopped part-way through, so the team shown below was reloaded from the server — check it and apply the remaining changes again.",
|
|
1393
|
+
"staff.time_tracking.projects.team.drawer.removeConfirm.text": "{name} has {hours} in this project — revoke access?",
|
|
1394
|
+
"staff.time_tracking.projects.team.drawer.removeConfirm.textUnknown": "{name} may have time logged in this project — revoke access?",
|
|
1395
|
+
"staff.time_tracking.projects.team.drawer.removeConfirm.title": "Revoke access?",
|
|
1396
|
+
"staff.time_tracking.projects.team.drawer.roleLeader": "Team Leader",
|
|
1397
|
+
"staff.time_tracking.projects.team.drawer.roleMember": "Team Member",
|
|
1398
|
+
"staff.time_tracking.projects.team.drawer.save": "Save",
|
|
1399
|
+
"staff.time_tracking.projects.team.drawer.saveError": "Could not save the project team.",
|
|
1400
|
+
"staff.time_tracking.projects.team.drawer.saved": "Project team updated.",
|
|
1401
|
+
"staff.time_tracking.projects.team.drawer.saving": "Saving…",
|
|
1402
|
+
"staff.time_tracking.projects.team.drawer.search": "Search for a person…",
|
|
1403
|
+
"staff.time_tracking.projects.team.drawer.selectPerson": "Assign {name}",
|
|
1404
|
+
"staff.time_tracking.projects.team.drawer.title": "Project team",
|
|
1405
|
+
"staff.time_tracking.projects.team.drawer.window.clear": "Clear",
|
|
1406
|
+
"staff.time_tracking.projects.team.drawer.window.expiredHint": "The assignment expired — this person no longer has access to the project.",
|
|
1407
|
+
"staff.time_tracking.projects.team.drawer.window.label": "Assignment end",
|
|
1408
|
+
"staff.time_tracking.projects.team.drawer.window.range": "from {start} · until {end}",
|
|
1409
|
+
"staff.time_tracking.projects.team.drawer.window.startOnly": "from {start}",
|
|
1410
|
+
"staff.time_tracking.projects.team.empty": "Nobody is assigned yet.",
|
|
1411
|
+
"staff.time_tracking.projects.team.hint": "Without an assignment only the Team Leader can see the project.",
|
|
1412
|
+
"staff.time_tracking.projects.team.manage": "Manage team",
|
|
1413
|
+
"staff.time_tracking.projects.validation.budgetFormat": "Enter the limit as a number.",
|
|
1414
|
+
"staff.time_tracking.projects.validation.codeFormat": "Use letters, digits and dashes only.",
|
|
1415
|
+
"staff.time_tracking.projects.validation.codeRequired": "A project code is required.",
|
|
1416
|
+
"staff.time_tracking.projects.validation.color": "Pick a colour from the palette.",
|
|
1417
|
+
"staff.time_tracking.projects.validation.customerRequired": "A customer is required.",
|
|
1418
|
+
"staff.time_tracking.projects.validation.nameRequired": "A project name is required.",
|
|
1419
|
+
"staff.time_tracking.projects.validation.rateFormat": "Enter the rate as a number.",
|
|
1420
|
+
"staff.time_tracking.recalculate.jobName": "Recalculate time tracking",
|
|
1421
|
+
"staff.time_tracking.reports.alreadyReported.body": "They are excluded from this report so the same hour is not billed twice. Including them adds {hours} at the values frozen when those reports were closed.",
|
|
1422
|
+
"staff.time_tracking.reports.alreadyReported.optIn": "Include them anyway, at their frozen values",
|
|
1423
|
+
"staff.time_tracking.reports.alreadyReported.title": "{count} entries are already in another report",
|
|
1424
|
+
"staff.time_tracking.reports.close.action": "Close & lock",
|
|
1425
|
+
"staff.time_tracking.reports.close.confirmBody": "The {count} entries it covers become read-only at their current values. New time can still be logged on the same tasks and will go into the next report.",
|
|
1426
|
+
"staff.time_tracking.reports.close.confirmTitle": "Close and lock this report?",
|
|
1427
|
+
"staff.time_tracking.reports.close.done": "Report closed. Its entries are locked.",
|
|
1428
|
+
"staff.time_tracking.reports.create.cancel": "Cancel",
|
|
1429
|
+
"staff.time_tracking.reports.create.created": "Report generated.",
|
|
1430
|
+
"staff.time_tracking.reports.create.customer": "Customer",
|
|
1431
|
+
"staff.time_tracking.reports.create.customerHint": "Report currency: {currency} — it comes from this customer projects.",
|
|
1432
|
+
"staff.time_tracking.reports.create.entriesInPeriod": "{count} entries in period",
|
|
1433
|
+
"staff.time_tracking.reports.create.from": "From",
|
|
1434
|
+
"staff.time_tracking.reports.create.grouping": "Grouping",
|
|
1435
|
+
"staff.time_tracking.reports.create.invalidPeriod": "The end date must not precede the start date.",
|
|
1436
|
+
"staff.time_tracking.reports.create.loadingProjects": "Loading projects…",
|
|
1437
|
+
"staff.time_tracking.reports.create.noProjects": "This customer has no time projects yet.",
|
|
1438
|
+
"staff.time_tracking.reports.create.nonbillable": "Non-billable time",
|
|
1439
|
+
"staff.time_tracking.reports.create.period": "Period",
|
|
1440
|
+
"staff.time_tracking.reports.create.pickCustomer": "Pick a customer to see their projects.",
|
|
1441
|
+
"staff.time_tracking.reports.create.presentation": "Presentation",
|
|
1442
|
+
"staff.time_tracking.reports.create.preset.month": "Month",
|
|
1443
|
+
"staff.time_tracking.reports.create.preset.week": "Week",
|
|
1444
|
+
"staff.time_tracking.reports.create.preset.year": "Year",
|
|
1445
|
+
"staff.time_tracking.reports.create.projects": "Customer projects",
|
|
1446
|
+
"staff.time_tracking.reports.create.projectsHint": "Tick the projects this report should cover.",
|
|
1447
|
+
"staff.time_tracking.reports.create.reportTitle": "Report title",
|
|
1448
|
+
"staff.time_tracking.reports.create.roundingNearest": "to the nearest",
|
|
1449
|
+
"staff.time_tracking.reports.create.roundingNotice": "Rounding: {rule} (global). Every amount above is rounded at the entry and then summed, so the printed lines add up to the total.",
|
|
1450
|
+
"staff.time_tracking.reports.create.roundingOff": "off",
|
|
1451
|
+
"staff.time_tracking.reports.create.roundingRule": "{minutes} min, {direction}",
|
|
1452
|
+
"staff.time_tracking.reports.create.roundingUp": "always up",
|
|
1453
|
+
"staff.time_tracking.reports.create.showRates": "Show hourly rates",
|
|
1454
|
+
"staff.time_tracking.reports.create.showRatesHint": "Turn off if the client should see amounts only.",
|
|
1455
|
+
"staff.time_tracking.reports.create.spansMonths": "This range covers more than one month — adjust the dates if you only want one of them.",
|
|
1456
|
+
"staff.time_tracking.reports.create.submit": "Generate preview",
|
|
1457
|
+
"staff.time_tracking.reports.create.subtitle": "A report always covers one customer.",
|
|
1458
|
+
"staff.time_tracking.reports.create.summary": "Range summary",
|
|
1459
|
+
"staff.time_tracking.reports.create.summaryBillable": "Billable time",
|
|
1460
|
+
"staff.time_tracking.reports.create.summaryEntries": "Entries",
|
|
1461
|
+
"staff.time_tracking.reports.create.summaryNonbillable": "Non-billable",
|
|
1462
|
+
"staff.time_tracking.reports.create.summaryProjects": "Projects",
|
|
1463
|
+
"staff.time_tracking.reports.create.summaryTotal": "To invoice",
|
|
1464
|
+
"staff.time_tracking.reports.create.title": "New report",
|
|
1465
|
+
"staff.time_tracking.reports.create.to": "To",
|
|
1466
|
+
"staff.time_tracking.reports.create.unknownCustomer": "Customer",
|
|
1467
|
+
"staff.time_tracking.reports.detail.excludedHint": "{count} entries in this period are already frozen in another report and are excluded here ({hours}).",
|
|
1468
|
+
"staff.time_tracking.reports.detail.loading": "Loading report…",
|
|
1469
|
+
"staff.time_tracking.reports.detail.title": "Report",
|
|
1470
|
+
"staff.time_tracking.reports.errors.closeFailed": "Could not close this report.",
|
|
1471
|
+
"staff.time_tracking.reports.errors.closed": "This report is closed. Unlock it before changing anything.",
|
|
1472
|
+
"staff.time_tracking.reports.errors.createFailed": "Could not create the report.",
|
|
1473
|
+
"staff.time_tracking.reports.errors.currencyConflict": "A report always covers one currency. Selected projects use {currencies}.",
|
|
1474
|
+
"staff.time_tracking.reports.errors.currencyConflictTitle": "Mixed currencies in this selection",
|
|
1475
|
+
"staff.time_tracking.reports.errors.customerMismatch": "A report always covers one customer. These projects belong to someone else: {projects}.",
|
|
1476
|
+
"staff.time_tracking.reports.errors.empty": "This report covers no time entries, so there is nothing to freeze. Adjust the period or the project selection first.",
|
|
1477
|
+
"staff.time_tracking.reports.errors.exportFailed": "Could not export this report.",
|
|
1478
|
+
"staff.time_tracking.reports.errors.idRequired": "Report id is required.",
|
|
1479
|
+
"staff.time_tracking.reports.errors.loadFailed": "Could not load this report.",
|
|
1480
|
+
"staff.time_tracking.reports.errors.notClosed": "This report is not closed, so there is nothing to unlock.",
|
|
1481
|
+
"staff.time_tracking.reports.errors.notFound": "Report not found or not accessible.",
|
|
1482
|
+
"staff.time_tracking.reports.errors.previewFailed": "Could not compute the report totals.",
|
|
1483
|
+
"staff.time_tracking.reports.errors.projectNotFound": "Some of the selected projects are not available.",
|
|
1484
|
+
"staff.time_tracking.reports.errors.projectsRequired": "Pick at least one project for this report.",
|
|
1485
|
+
"staff.time_tracking.reports.errors.reasonRequired": "An unlock reason is required.",
|
|
1486
|
+
"staff.time_tracking.reports.errors.referenceConflict": "Could not allocate a report number right now. Try again.",
|
|
1487
|
+
"staff.time_tracking.reports.errors.unlockFailed": "Could not unlock this report.",
|
|
1488
|
+
"staff.time_tracking.reports.errors.unsupportedFormat": "Supported export formats are pdf, csv and xlsx.",
|
|
1489
|
+
"staff.time_tracking.reports.export.billable": "Billable",
|
|
1490
|
+
"staff.time_tracking.reports.export.date": "Date",
|
|
1491
|
+
"staff.time_tracking.reports.export.description": "Description",
|
|
1492
|
+
"staff.time_tracking.reports.export.format.csv": "CSV",
|
|
1493
|
+
"staff.time_tracking.reports.export.format.pdf": "PDF",
|
|
1494
|
+
"staff.time_tracking.reports.export.format.xlsx": "Excel (XLSX)",
|
|
1495
|
+
"staff.time_tracking.reports.export.no": "No",
|
|
1496
|
+
"staff.time_tracking.reports.export.person": "Person",
|
|
1497
|
+
"staff.time_tracking.reports.export.project": "Project",
|
|
1498
|
+
"staff.time_tracking.reports.export.rawMinutes": "Raw minutes",
|
|
1499
|
+
"staff.time_tracking.reports.export.roundedMinutes": "Rounded minutes",
|
|
1500
|
+
"staff.time_tracking.reports.export.task": "Task",
|
|
1501
|
+
"staff.time_tracking.reports.export.yes": "Yes",
|
|
1502
|
+
"staff.time_tracking.reports.grouping.project_day": "Project → day",
|
|
1503
|
+
"staff.time_tracking.reports.grouping.project_person": "Project → person",
|
|
1504
|
+
"staff.time_tracking.reports.grouping.project_task": "Project → task",
|
|
1505
|
+
"staff.time_tracking.reports.history.closed": "Closed the report and locked its entries.",
|
|
1506
|
+
"staff.time_tracking.reports.history.exported": "Exported the report.",
|
|
1507
|
+
"staff.time_tracking.reports.history.title": "History",
|
|
1508
|
+
"staff.time_tracking.reports.history.unlocked": "Unlocked the report entries.",
|
|
1509
|
+
"staff.time_tracking.reports.list.amount": "Total",
|
|
1510
|
+
"staff.time_tracking.reports.list.create": "New report",
|
|
1511
|
+
"staff.time_tracking.reports.list.empty": "No reports yet. Generate one for a customer to see what is billable.",
|
|
1512
|
+
"staff.time_tracking.reports.list.hours": "Billable",
|
|
1513
|
+
"staff.time_tracking.reports.list.period": "Period",
|
|
1514
|
+
"staff.time_tracking.reports.list.readOnly": "You can view reports but not create them.",
|
|
1515
|
+
"staff.time_tracking.reports.list.reference": "Number",
|
|
1516
|
+
"staff.time_tracking.reports.list.status": "Status",
|
|
1517
|
+
"staff.time_tracking.reports.list.title": "Report",
|
|
1518
|
+
"staff.time_tracking.reports.locked.body": "Their time, rate and billable flag cannot change without unlocking. New time can still be logged on the same tasks — it goes into the next report.",
|
|
1519
|
+
"staff.time_tracking.reports.locked.tableCount": "{count} entries · {hours}",
|
|
1520
|
+
"staff.time_tracking.reports.locked.tableTitle": "Locked entries",
|
|
1521
|
+
"staff.time_tracking.reports.locked.title": "The entries in this report are read-only",
|
|
1522
|
+
"staff.time_tracking.reports.locked.truncated": "Showing the first {shown} of {total} entries — export the report for the full list.",
|
|
1523
|
+
"staff.time_tracking.reports.nonbillable.exclude": "Leave it out entirely",
|
|
1524
|
+
"staff.time_tracking.reports.nonbillable.separate": "Show separately, at no cost",
|
|
1525
|
+
"staff.time_tracking.reports.rounding.nearest": "to the nearest",
|
|
1526
|
+
"staff.time_tracking.reports.rounding.off": "no rounding",
|
|
1527
|
+
"staff.time_tracking.reports.rounding.rule": "rounding {minutes} min, {direction}",
|
|
1528
|
+
"staff.time_tracking.reports.rounding.up": "always up",
|
|
1529
|
+
"staff.time_tracking.reports.sheet.amount": "Amount",
|
|
1530
|
+
"staff.time_tracking.reports.sheet.collapse": "Hide subtasks",
|
|
1531
|
+
"staff.time_tracking.reports.sheet.empty": "No time was logged in this period for the selected projects.",
|
|
1532
|
+
"staff.time_tracking.reports.sheet.expand": "Show subtasks",
|
|
1533
|
+
"staff.time_tracking.reports.sheet.issuedBy": "Issued by",
|
|
1534
|
+
"staff.time_tracking.reports.sheet.lineLabel": "Line",
|
|
1535
|
+
"staff.time_tracking.reports.sheet.noPerson": "Unassigned",
|
|
1536
|
+
"staff.time_tracking.reports.sheet.noSubtasks": "No subtasks",
|
|
1537
|
+
"staff.time_tracking.reports.sheet.noTask": "No task",
|
|
1538
|
+
"staff.time_tracking.reports.sheet.nonbillable": "Non-billable time",
|
|
1539
|
+
"staff.time_tracking.reports.sheet.nonbillableHint": "Shown for information, outside the invoice",
|
|
1540
|
+
"staff.time_tracking.reports.sheet.overline": "Time and cost statement",
|
|
1541
|
+
"staff.time_tracking.reports.sheet.overrideBadge": "agreed rate",
|
|
1542
|
+
"staff.time_tracking.reports.sheet.period": "Period",
|
|
1543
|
+
"staff.time_tracking.reports.sheet.rate": "Rate",
|
|
1544
|
+
"staff.time_tracking.reports.sheet.reference": "Reference",
|
|
1545
|
+
"staff.time_tracking.reports.sheet.time": "Time",
|
|
1546
|
+
"staff.time_tracking.reports.sheet.total": "Total to invoice",
|
|
1547
|
+
"staff.time_tracking.reports.sheet.totalHint": "{billable} billable · {nonbillable} non-billable · {rounding}",
|
|
1548
|
+
"staff.time_tracking.reports.status.closed": "Closed",
|
|
1549
|
+
"staff.time_tracking.reports.status.draft": "Draft",
|
|
1550
|
+
"staff.time_tracking.reports.unlock.action": "Unlock entries",
|
|
1551
|
+
"staff.time_tracking.reports.unlock.cancel": "Cancel",
|
|
1552
|
+
"staff.time_tracking.reports.unlock.dialogTitle": "Unlock {count} entries?",
|
|
1553
|
+
"staff.time_tracking.reports.unlock.done": "Report unlocked. Its entries can be edited again.",
|
|
1554
|
+
"staff.time_tracking.reports.unlock.reason": "Reason for unlocking",
|
|
1555
|
+
"staff.time_tracking.reports.unlock.reasonHint": "The reason is recorded in the report history with your name and the date.",
|
|
1556
|
+
"staff.time_tracking.reports.unlock.reasonPlaceholder": "e.g. the client disputed 4h on the refactor — correction agreed on the 21st.",
|
|
1557
|
+
"staff.time_tracking.reports.unlock.sentBody": "A file was downloaded on {date}. Changes to unlocked entries will diverge from the copy the client holds.",
|
|
1558
|
+
"staff.time_tracking.reports.unlock.sentTitle": "This report has already been exported",
|
|
1559
|
+
"staff.time_tracking.rounding.strategy.unit": "Unit rounding",
|
|
1560
|
+
"staff.time_tracking.settings.access.daysUnit": "days",
|
|
1561
|
+
"staff.time_tracking.settings.access.graceDays": "Access grace period after an assignment ends",
|
|
1562
|
+
"staff.time_tracking.settings.access.graceDaysError": "Enter a whole number of days between 0 and 365.",
|
|
1563
|
+
"staff.time_tracking.settings.access.graceDaysHint": "A member keeps access to a project for this many days after their assignment end date, so the last week of work can still be logged and corrected. 0 ends access on the end date itself.",
|
|
1564
|
+
"staff.time_tracking.settings.access.title": "Project access",
|
|
1565
|
+
"staff.time_tracking.settings.actions.cancel": "Cancel",
|
|
1566
|
+
"staff.time_tracking.settings.actions.save": "Save",
|
|
1567
|
+
"staff.time_tracking.settings.defaults.billable": "New entries are billable",
|
|
1568
|
+
"staff.time_tracking.settings.defaults.billableHint": "A project can override this.",
|
|
1569
|
+
"staff.time_tracking.settings.defaults.chainStart": "Start = end of the previous entry",
|
|
1570
|
+
"staff.time_tracking.settings.defaults.chainStartHint": "A suggestion when adding another entry on the same day.",
|
|
1571
|
+
"staff.time_tracking.settings.defaults.title": "Entry defaults",
|
|
1572
|
+
"staff.time_tracking.settings.impact.body": "With the current {count} entries from the last {days} days, {rule} gives {rounded} ({delta} against raw time). Closed reports stay unchanged.",
|
|
1573
|
+
"staff.time_tracking.settings.impact.empty": "There are no unlocked entries in the last {days} days to project against.",
|
|
1574
|
+
"staff.time_tracking.settings.impact.error": "The impact preview is unavailable.",
|
|
1575
|
+
"staff.time_tracking.settings.impact.loading": "Calculating the impact…",
|
|
1576
|
+
"staff.time_tracking.settings.impact.locked": "{count} entries in the window are locked in closed reports and are excluded.",
|
|
1577
|
+
"staff.time_tracking.settings.impact.rule.nearest": "{unit} min to nearest",
|
|
1578
|
+
"staff.time_tracking.settings.impact.rule.none": "no rounding",
|
|
1579
|
+
"staff.time_tracking.settings.impact.rule.up": "{unit} min up",
|
|
1580
|
+
"staff.time_tracking.settings.impact.title": "Changing rounding affects amounts",
|
|
1581
|
+
"staff.time_tracking.settings.loadError": "Failed to load the settings.",
|
|
1582
|
+
"staff.time_tracking.settings.loading": "Loading settings…",
|
|
1583
|
+
"staff.time_tracking.settings.retro.confirmText": "Rounded time will be recomputed on existing entries using the saved rule. Entries locked in closed reports are never changed.",
|
|
1584
|
+
"staff.time_tracking.settings.retro.confirmTitle": "Reapply rounding to existing entries?",
|
|
1585
|
+
"staff.time_tracking.settings.retro.cta": "Reapply to existing entries",
|
|
1586
|
+
"staff.time_tracking.settings.retro.error": "Failed to start the recalculation.",
|
|
1587
|
+
"staff.time_tracking.settings.retro.hint": "Saving changes new entries only. Recalculating existing ones is a separate, explicit action — and it never changes entries locked in closed reports.",
|
|
1588
|
+
"staff.time_tracking.settings.retro.jobDescription": "Recomputing rounded time on existing entries. Locked entries are not changed.",
|
|
1589
|
+
"staff.time_tracking.settings.retro.jobName": "Reapply rounding to existing entries",
|
|
1590
|
+
"staff.time_tracking.settings.retro.nothing": "There is nothing to recalculate.",
|
|
1591
|
+
"staff.time_tracking.settings.retro.queued": "Recalculating rounded time on {count} entries. Progress is shown in the top bar.",
|
|
1592
|
+
"staff.time_tracking.settings.retro.saveFirst": "Save the rule first — the recalculation uses the saved rule, not the one on screen.",
|
|
1593
|
+
"staff.time_tracking.settings.retro.title": "Apply retroactively to existing entries",
|
|
1594
|
+
"staff.time_tracking.settings.retry": "Try again",
|
|
1595
|
+
"staff.time_tracking.settings.rounding.description": "Applies to all projects. The rounded value is the one cost is calculated from.",
|
|
1596
|
+
"staff.time_tracking.settings.rounding.direction": "Direction",
|
|
1597
|
+
"staff.time_tracking.settings.rounding.direction.nearest": "To nearest",
|
|
1598
|
+
"staff.time_tracking.settings.rounding.direction.up": "Up",
|
|
1599
|
+
"staff.time_tracking.settings.rounding.examples.title": "Examples at the current setting",
|
|
1600
|
+
"staff.time_tracking.settings.rounding.title": "Time rounding",
|
|
1601
|
+
"staff.time_tracking.settings.rounding.unit": "Unit",
|
|
1602
|
+
"staff.time_tracking.settings.rounding.unit.minutes": "{count} min",
|
|
1603
|
+
"staff.time_tracking.settings.rounding.unit.none": "None",
|
|
1604
|
+
"staff.time_tracking.settings.saveError": "Failed to save the settings.",
|
|
1605
|
+
"staff.time_tracking.settings.saved": "Settings saved.",
|
|
1606
|
+
"staff.time_tracking.settings.scope.body": "These rules are global — they cannot be set per customer or per project.",
|
|
1607
|
+
"staff.time_tracking.settings.scope.hint": "The rate and currency stay at project level, and a rate override stays at entry level.",
|
|
1608
|
+
"staff.time_tracking.settings.scope.title": "Settings scope",
|
|
1609
|
+
"staff.time_tracking.settings.subtitle": "Rules shared by all customers and projects",
|
|
1610
|
+
"staff.time_tracking.settings.targets.dailyHours": "Daily hours target",
|
|
1611
|
+
"staff.time_tracking.settings.targets.dailyHoursError": "Enter a number of hours between 0 and 24, or leave the field empty.",
|
|
1612
|
+
"staff.time_tracking.settings.targets.dailyHoursHint": "Scales the load bars in the timesheet. Leave empty to turn targets off.",
|
|
1613
|
+
"staff.time_tracking.settings.targets.hoursUnit": "h",
|
|
1614
|
+
"staff.time_tracking.settings.title": "Module settings",
|
|
1615
|
+
"staff.time_tracking.settings.warnings.overlap": "Warn about overlapping entries",
|
|
1616
|
+
"staff.time_tracking.settings.warnings.overlapHint": "A warning, not a block.",
|
|
1617
|
+
"staff.time_tracking.settings.warnings.runningTimer": "Remind about a running timer",
|
|
1618
|
+
"staff.time_tracking.settings.warnings.runningTimerHint": "An unobtrusive reminder when leaving the module and after 8 h of continuous running.",
|
|
1619
|
+
"staff.time_tracking.settings.warnings.title": "Warnings",
|
|
1620
|
+
"staff.time_tracking.tags.add": "Add tag",
|
|
1621
|
+
"staff.time_tracking.tags.deleted": "Tag deleted and removed from {count} places.",
|
|
1622
|
+
"staff.time_tracking.tags.empty": "No tags yet",
|
|
1623
|
+
"staff.time_tracking.tags.errors.entryLocked": "This time entry is locked in a closed report and its tags cannot be changed.",
|
|
1624
|
+
"staff.time_tracking.tags.errors.entryNotFound": "Time entry not found or not accessible.",
|
|
1625
|
+
"staff.time_tracking.tags.errors.idRequired": "Tag id is required.",
|
|
1626
|
+
"staff.time_tracking.tags.errors.notFound": "Tag not found or not accessible.",
|
|
1627
|
+
"staff.time_tracking.tags.errors.slugDuplicate": "A tag with this slug already exists.",
|
|
1628
|
+
"staff.time_tracking.tags.errors.taskNotFound": "Task not found or not accessible.",
|
|
1629
|
+
"staff.time_tracking.tags.errors.unknownIds": "Some tags do not exist in this organization.",
|
|
1630
|
+
"staff.time_tracking.tags.fields.color": "Colour",
|
|
1631
|
+
"staff.time_tracking.tags.fields.label": "Name",
|
|
1632
|
+
"staff.time_tracking.tags.fields.slug": "Slug",
|
|
1633
|
+
"staff.time_tracking.tags.placeholder": "Search tags",
|
|
1634
|
+
"staff.time_tracking.tags.remove": "Remove tag",
|
|
1635
|
+
"staff.time_tracking.tags.title": "Tags",
|
|
1636
|
+
"staff.time_tracking.taskComments.empty": "No comments yet.",
|
|
1637
|
+
"staff.time_tracking.taskComments.errors.idRequired": "Comment id is required.",
|
|
1638
|
+
"staff.time_tracking.taskComments.errors.notAuthor": "You can only edit or delete your own comments.",
|
|
1639
|
+
"staff.time_tracking.taskComments.errors.notFound": "Comment not found or not accessible.",
|
|
1640
|
+
"staff.time_tracking.taskComments.errors.taskIdRequired": "Task id is required.",
|
|
1641
|
+
"staff.time_tracking.taskComments.placeholder": "Write a comment…",
|
|
1642
|
+
"staff.time_tracking.taskComments.submit": "Comment",
|
|
1643
|
+
"staff.time_tracking.taskComments.submitHint": "⌘↵ sends",
|
|
1644
|
+
"staff.time_tracking.taskComments.title": "Comments",
|
|
1645
|
+
"staff.time_tracking.taskDrawer.autoSave": "Changes are saved automatically",
|
|
1646
|
+
"staff.time_tracking.taskDrawer.close": "Close",
|
|
1647
|
+
"staff.time_tracking.taskDrawer.comments.empty": "No comments yet.",
|
|
1648
|
+
"staff.time_tracking.taskDrawer.comments.error": "Could not post the comment.",
|
|
1649
|
+
"staff.time_tracking.taskDrawer.comments.hint": "posts",
|
|
1650
|
+
"staff.time_tracking.taskDrawer.comments.loadError": "Could not load the comments.",
|
|
1651
|
+
"staff.time_tracking.taskDrawer.comments.loading": "Loading the thread…",
|
|
1652
|
+
"staff.time_tracking.taskDrawer.comments.placeholder": "Write a comment…",
|
|
1653
|
+
"staff.time_tracking.taskDrawer.comments.submit": "Comment",
|
|
1654
|
+
"staff.time_tracking.taskDrawer.comments.title": "Comments ({count})",
|
|
1655
|
+
"staff.time_tracking.taskDrawer.comments.unknownAuthor": "Unknown author",
|
|
1656
|
+
"staff.time_tracking.taskDrawer.created": "created {date}",
|
|
1657
|
+
"staff.time_tracking.taskDrawer.entries.empty": "No time entries yet.",
|
|
1658
|
+
"staff.time_tracking.taskDrawer.entries.noDescription": "No description",
|
|
1659
|
+
"staff.time_tracking.taskDrawer.entries.showAll": "Show all",
|
|
1660
|
+
"staff.time_tracking.taskDrawer.entries.title": "Time entries ({count})",
|
|
1661
|
+
"staff.time_tracking.taskDrawer.loadError": "Could not load the task.",
|
|
1662
|
+
"staff.time_tracking.taskDrawer.loading": "Loading the task…",
|
|
1663
|
+
"staff.time_tracking.taskDrawer.logged.billable": "billable {hours}",
|
|
1664
|
+
"staff.time_tracking.taskDrawer.logged.cost": "cost {amount}",
|
|
1665
|
+
"staff.time_tracking.taskDrawer.logged.nonBillable": "non-billable {hours}",
|
|
1666
|
+
"staff.time_tracking.taskDrawer.logged.partialHint": "The split is counted from the most recent entries in this project.",
|
|
1667
|
+
"staff.time_tracking.taskDrawer.logged.split": "own {own} · subtasks {children}",
|
|
1668
|
+
"staff.time_tracking.taskDrawer.logged.title": "Logged time",
|
|
1669
|
+
"staff.time_tracking.taskDrawer.properties.addTag": "Add tag",
|
|
1670
|
+
"staff.time_tracking.taskDrawer.properties.assignee": "Assignee",
|
|
1671
|
+
"staff.time_tracking.taskDrawer.properties.removeTag": "Remove tag {label}",
|
|
1672
|
+
"staff.time_tracking.taskDrawer.properties.saveError": "Could not save the change.",
|
|
1673
|
+
"staff.time_tracking.taskDrawer.properties.status": "Status",
|
|
1674
|
+
"staff.time_tracking.taskDrawer.properties.tagError": "Could not save the tags.",
|
|
1675
|
+
"staff.time_tracking.taskDrawer.properties.tags": "Tags",
|
|
1676
|
+
"staff.time_tracking.taskDrawer.properties.tagsPending": "Tags already saved on this task appear here once the task list returns them.",
|
|
1677
|
+
"staff.time_tracking.taskDrawer.properties.title": "Properties",
|
|
1678
|
+
"staff.time_tracking.taskDrawer.properties.unassigned": "Unassigned",
|
|
1679
|
+
"staff.time_tracking.taskDrawer.quickLog.cta": "Log",
|
|
1680
|
+
"staff.time_tracking.taskDrawer.quickLog.descriptionPlaceholder": "What did the time go on?",
|
|
1681
|
+
"staff.time_tracking.taskDrawer.quickLog.details": "Details",
|
|
1682
|
+
"staff.time_tracking.taskDrawer.quickLog.error": "Could not save the time entry.",
|
|
1683
|
+
"staff.time_tracking.taskDrawer.quickLog.label": "Time to log",
|
|
1684
|
+
"staff.time_tracking.taskDrawer.quickLog.placeholder": "1h 40m",
|
|
1685
|
+
"staff.time_tracking.taskDrawer.quickLog.saved": "Time logged.",
|
|
1686
|
+
"staff.time_tracking.taskDrawer.subtasks.add": "Add subtask",
|
|
1687
|
+
"staff.time_tracking.taskDrawer.subtasks.addError": "Could not add the subtask.",
|
|
1688
|
+
"staff.time_tracking.taskDrawer.subtasks.count": "{done}/{total}",
|
|
1689
|
+
"staff.time_tracking.taskDrawer.subtasks.empty": "No subtasks yet.",
|
|
1690
|
+
"staff.time_tracking.taskDrawer.subtasks.noDoneColumn": "This project has no done column, so a subtask has no way to close.",
|
|
1691
|
+
"staff.time_tracking.taskDrawer.subtasks.placeholder": "Subtask title",
|
|
1692
|
+
"staff.time_tracking.taskDrawer.subtasks.title": "Subtasks",
|
|
1693
|
+
"staff.time_tracking.taskDrawer.subtasks.toggle": "Mark {title} as done",
|
|
1694
|
+
"staff.time_tracking.taskDrawer.subtasks.toggleError": "Could not change the subtask status.",
|
|
1695
|
+
"staff.time_tracking.taskDrawer.timer.start": "Start",
|
|
1696
|
+
"staff.time_tracking.taskDrawer.timer.stop": "Stop {elapsed}",
|
|
1697
|
+
"staff.time_tracking.taskDrawer.timer.switchText": "Only one timer can run at a time. Stop the other one and start it here?",
|
|
1698
|
+
"staff.time_tracking.taskDrawer.timer.switchTitle": "A timer is running on another task",
|
|
1699
|
+
"staff.time_tracking.taskPicker.change": "Change",
|
|
1700
|
+
"staff.time_tracking.taskPicker.count": "{shown} of {total}",
|
|
1701
|
+
"staff.time_tracking.taskPicker.empty": "Nothing matches {term}",
|
|
1702
|
+
"staff.time_tracking.taskPicker.keyClose": "close",
|
|
1703
|
+
"staff.time_tracking.taskPicker.keyMove": "move",
|
|
1704
|
+
"staff.time_tracking.taskPicker.keyPick": "pick",
|
|
1705
|
+
"staff.time_tracking.taskPicker.loading": "Loading tasks…",
|
|
1706
|
+
"staff.time_tracking.taskPicker.noProject": "No project",
|
|
1707
|
+
"staff.time_tracking.taskPicker.placeholder": "Pick a task",
|
|
1708
|
+
"staff.time_tracking.taskPicker.recent": "Recent",
|
|
1709
|
+
"staff.time_tracking.taskPicker.search": "Search tasks",
|
|
1710
|
+
"staff.time_tracking.taskPicker.searchScoped": "Search {project} tasks",
|
|
1711
|
+
"staff.time_tracking.taskStatuses.defaults.backlog": "Backlog",
|
|
1712
|
+
"staff.time_tracking.taskStatuses.defaults.done": "Done",
|
|
1713
|
+
"staff.time_tracking.taskStatuses.defaults.inProgress": "In progress",
|
|
1714
|
+
"staff.time_tracking.taskStatuses.defaults.inReview": "In review",
|
|
1715
|
+
"staff.time_tracking.taskStatuses.errors.defaultRequired": "A project needs one default column. Mark another column as the default instead.",
|
|
1716
|
+
"staff.time_tracking.taskStatuses.errors.doneRequired": "A project needs at least one done column. Mark another column as done first.",
|
|
1717
|
+
"staff.time_tracking.taskStatuses.errors.hasTasks": "This column still holds tasks. Move them to another column before removing it.",
|
|
1718
|
+
"staff.time_tracking.taskStatuses.errors.idRequired": "Task status id is required.",
|
|
1719
|
+
"staff.time_tracking.taskStatuses.errors.lastColumn": "A project needs at least one column. Add another column before removing this one.",
|
|
1720
|
+
"staff.time_tracking.taskStatuses.errors.notFound": "Task status not found or not accessible.",
|
|
1721
|
+
"staff.time_tracking.taskStatuses.errors.slugDuplicate": "A column with this slug already exists on this project.",
|
|
1722
|
+
"staff.time_tracking.taskStatuses.errors.unknownIds": "Some columns do not belong to this project.",
|
|
1723
|
+
"staff.time_tracking.tasks.errors.idRequired": "Task id is required.",
|
|
1724
|
+
"staff.time_tracking.tasks.errors.notFound": "Task not found or not accessible.",
|
|
1725
|
+
"staff.time_tracking.tasks.errors.parentNotFound": "Parent task not found or not accessible.",
|
|
1726
|
+
"staff.time_tracking.tasks.errors.parentProjectMismatch": "A subtask must stay in the same project as its parent.",
|
|
1727
|
+
"staff.time_tracking.tasks.errors.parentSelf": "A task cannot be its own subtask.",
|
|
1728
|
+
"staff.time_tracking.tasks.errors.projectMoveUnsupported": "A task cannot be moved to another project. Create it in the target project instead.",
|
|
1729
|
+
"staff.time_tracking.tasks.errors.referenceConflict": "Could not allocate a task number right now. Try again.",
|
|
1730
|
+
"staff.time_tracking.tasks.errors.statusMissing": "This project has no columns yet, so a task cannot be placed on its board.",
|
|
1731
|
+
"staff.time_tracking.tasks.errors.statusNotFound": "That column does not belong to this project.",
|
|
1732
|
+
"staff.time_tracking.tasks.errors.subtaskDepthExceeded": "Subtasks are one level deep. A subtask cannot have subtasks of its own.",
|
|
1733
|
+
"staff.time_tracking.timesheet.calendar.add": "+ add",
|
|
1734
|
+
"staff.time_tracking.timesheet.calendar.nonBillable": "Non-billable",
|
|
1735
|
+
"staff.time_tracking.timesheet.filters.allProjects": "All projects",
|
|
1736
|
+
"staff.time_tracking.timesheet.filters.me": "Me",
|
|
1737
|
+
"staff.time_tracking.timesheet.filters.person": "Person",
|
|
1738
|
+
"staff.time_tracking.timesheet.footer.billable": "Billable:",
|
|
1739
|
+
"staff.time_tracking.timesheet.footer.overTarget": "+{duration} over target",
|
|
1740
|
+
"staff.time_tracking.timesheet.footer.period": "Period:",
|
|
1741
|
+
"staff.time_tracking.timesheet.footer.target": "Target",
|
|
1742
|
+
"staff.time_tracking.timesheet.footer.targetWithDays": "Target ({days} d × {hours} h)",
|
|
1743
|
+
"staff.time_tracking.timesheet.footer.underTarget": "−{duration} to target",
|
|
1744
|
+
"staff.time_tracking.timesheet.grid.addTaskRow": "Add a task row",
|
|
1745
|
+
"staff.time_tracking.timesheet.grid.caption": "Timesheet grid: one row per project or task, one column per day of the period.",
|
|
1746
|
+
"staff.time_tracking.timesheet.grid.empty.title": "This grid has no rows yet",
|
|
1747
|
+
"staff.time_tracking.timesheet.grid.errors.locked": "Some of these cells belong to a closed report and cannot be changed. They are now marked as locked.",
|
|
1748
|
+
"staff.time_tracking.timesheet.grid.invalid": "Fix the highlighted cell before saving.",
|
|
1749
|
+
"staff.time_tracking.timesheet.grid.loading": "Loading the timesheet grid…",
|
|
1750
|
+
"staff.time_tracking.timesheet.grid.lockedCell": "Locked by a closed report",
|
|
1751
|
+
"staff.time_tracking.timesheet.grid.noRows": "Add a project row to start filling the grid.",
|
|
1752
|
+
"staff.time_tracking.timesheet.grid.rowMode.label": "Grid rows",
|
|
1753
|
+
"staff.time_tracking.timesheet.grid.rowMode.projects": "Projects",
|
|
1754
|
+
"staff.time_tracking.timesheet.grid.rowMode.tasks": "Projects + tasks",
|
|
1755
|
+
"staff.time_tracking.timesheet.grid.weekend": "Weekend day",
|
|
1756
|
+
"staff.time_tracking.timesheet.list.aboveTarget": "{duration} above target",
|
|
1757
|
+
"staff.time_tracking.timesheet.list.belowTarget": "{duration} below target",
|
|
1758
|
+
"staff.time_tracking.timesheet.list.duplicate": "Duplicate",
|
|
1759
|
+
"staff.time_tracking.timesheet.list.edit": "Edit",
|
|
1760
|
+
"staff.time_tracking.timesheet.list.empty": "No days in this period.",
|
|
1761
|
+
"staff.time_tracking.timesheet.list.locked": "locked",
|
|
1762
|
+
"staff.time_tracking.timesheet.list.noEntries": "Nothing logged on this day yet.",
|
|
1763
|
+
"staff.time_tracking.timesheet.list.noTask": "No task",
|
|
1764
|
+
"staff.time_tracking.timesheet.list.nonBillable": "non-billable",
|
|
1765
|
+
"staff.time_tracking.timesheet.list.quickAdd.duration": "Duration",
|
|
1766
|
+
"staff.time_tracking.timesheet.list.quickAdd.start": "Start time",
|
|
1767
|
+
"staff.time_tracking.timesheet.list.quickAdd.startPlaceholder": "13:30",
|
|
1768
|
+
"staff.time_tracking.timesheet.list.quickAdd.submit": "Add",
|
|
1769
|
+
"staff.time_tracking.timesheet.list.quickAdd.target": "Project or task",
|
|
1770
|
+
"staff.time_tracking.timesheet.period.label": "Period",
|
|
1771
|
+
"staff.time_tracking.timesheet.period.month": "Month",
|
|
1772
|
+
"staff.time_tracking.timesheet.period.next": "Next period",
|
|
1773
|
+
"staff.time_tracking.timesheet.period.previous": "Previous period",
|
|
1774
|
+
"staff.time_tracking.timesheet.period.quarter": "Quarter",
|
|
1775
|
+
"staff.time_tracking.timesheet.period.today": "Today",
|
|
1776
|
+
"staff.time_tracking.timesheet.period.week": "Week",
|
|
1777
|
+
"staff.time_tracking.timesheet.period.year": "Year",
|
|
1778
|
+
"staff.time_tracking.timesheet.truncated": "Showing the first {count} entries of this period — narrow the period or the filters to see the rest.",
|
|
1779
|
+
"staff.time_tracking.timesheet.view.calendar": "Calendar",
|
|
1780
|
+
"staff.time_tracking.timesheet.view.grid": "Grid",
|
|
1781
|
+
"staff.time_tracking.timesheet.view.label": "Timesheet view",
|
|
1782
|
+
"staff.time_tracking.timesheet.view.list": "List",
|
|
939
1783
|
"staff.timesheets.errors.bulkSave": "Failed to bulk save time entries.",
|
|
1784
|
+
"staff.timesheets.errors.bulkTagsUnsupported": "Tags cannot be changed from the timesheet grid. Open the time entry to edit its tags.",
|
|
1785
|
+
"staff.timesheets.errors.copyDaySameDate": "The source and target day must be different.",
|
|
1786
|
+
"staff.timesheets.errors.copyDayTargetNotEmpty": "The target day already has time entries. Review them first, or confirm to add these copies anyway.",
|
|
940
1787
|
"staff.timesheets.errors.entryNotFound": "Time entry not found, deleted, or not owned by you.",
|
|
941
1788
|
"staff.timesheets.errors.invalidBody": "Invalid request body.",
|
|
942
1789
|
"staff.timesheets.errors.invalidProjectId": "Invalid project id.",
|
|
1790
|
+
"staff.timesheets.errors.memberNotFound": "Time project member not found or not accessible.",
|
|
943
1791
|
"staff.timesheets.errors.memberRequired": "Time project member id is required.",
|
|
944
1792
|
"staff.timesheets.errors.missingEntryId": "Missing entry ID.",
|
|
945
1793
|
"staff.timesheets.errors.myProjects": "Failed to load your projects.",
|
|
@@ -948,10 +1796,13 @@
|
|
|
948
1796
|
"staff.timesheets.errors.notAssigned": "You are not assigned to this project.",
|
|
949
1797
|
"staff.timesheets.errors.notOwner": "You can only manage your own time entries.",
|
|
950
1798
|
"staff.timesheets.errors.projectCodeDuplicate": "A project with this code already exists.",
|
|
1799
|
+
"staff.timesheets.errors.projectCurrencyLocked": "This project has time entries frozen in a closed report. Unlock those reports before changing the currency.",
|
|
951
1800
|
"staff.timesheets.errors.projectNotFound": "Time project not found or not accessible.",
|
|
1801
|
+
"staff.timesheets.errors.projectRequired": "Time project id is required.",
|
|
952
1802
|
"staff.timesheets.errors.projectsKpis": "Failed to load project KPIs.",
|
|
953
1803
|
"staff.timesheets.errors.segmentCreate": "Failed to create time entry segment.",
|
|
954
1804
|
"staff.timesheets.errors.staffMemberNotFound": "Staff member not found or not accessible.",
|
|
1805
|
+
"staff.timesheets.errors.taskNotFound": "Task not found or not accessible.",
|
|
955
1806
|
"staff.timesheets.errors.timerAlreadyRunning": "Another timer is already running. Stop it before starting a new one.",
|
|
956
1807
|
"staff.timesheets.errors.timerAlreadyStarted": "Timer is already started for this entry.",
|
|
957
1808
|
"staff.timesheets.errors.timerStart": "Failed to start timer.",
|
|
@@ -1038,13 +1889,56 @@
|
|
|
1038
1889
|
"staff.timesheets.projects.actions.viewDetails": "View Details",
|
|
1039
1890
|
"staff.timesheets.projects.active_employees": "Active Employees",
|
|
1040
1891
|
"staff.timesheets.projects.add_employee": "Add Employee",
|
|
1892
|
+
"staff.timesheets.projects.detail.administration": "Administration",
|
|
1893
|
+
"staff.timesheets.projects.detail.autoColor": "Auto",
|
|
1894
|
+
"staff.timesheets.projects.detail.billableHours": "Billable hours",
|
|
1895
|
+
"staff.timesheets.projects.detail.budgetAmount": "{percent}% of {value}",
|
|
1896
|
+
"staff.timesheets.projects.detail.budgetBadge": "Budget {percent}%",
|
|
1897
|
+
"staff.timesheets.projects.detail.budgetHint": "Set one to track burn",
|
|
1898
|
+
"staff.timesheets.projects.detail.budgetHours": "{percent}% of {value} h",
|
|
1899
|
+
"staff.timesheets.projects.detail.budgetUsage": "Budget usage",
|
|
1900
|
+
"staff.timesheets.projects.detail.colDate": "Date",
|
|
1901
|
+
"staff.timesheets.projects.detail.colDescription": "Description",
|
|
1902
|
+
"staff.timesheets.projects.detail.colHours": "Hours",
|
|
1903
|
+
"staff.timesheets.projects.detail.colWho": "Person",
|
|
1904
|
+
"staff.timesheets.projects.detail.commercials": "Billing",
|
|
1905
|
+
"staff.timesheets.projects.detail.cost": "Cost to date",
|
|
1906
|
+
"staff.timesheets.projects.detail.costBasis": "{hours} × {rate}",
|
|
1907
|
+
"staff.timesheets.projects.detail.createdAt": "Created",
|
|
1908
|
+
"staff.timesheets.projects.detail.currencyLockedHint": "Locked because hours are already logged against this project.",
|
|
1909
|
+
"staff.timesheets.projects.detail.delivery": "Delivery",
|
|
1910
|
+
"staff.timesheets.projects.detail.details": "Details",
|
|
1911
|
+
"staff.timesheets.projects.detail.entryCount": "Time entries",
|
|
1912
|
+
"staff.timesheets.projects.detail.entryCountOne": "1 entry",
|
|
1913
|
+
"staff.timesheets.projects.detail.entryCountShort": "{count} entries",
|
|
1914
|
+
"staff.timesheets.projects.detail.loadingTasks": "Loading tasks…",
|
|
1915
|
+
"staff.timesheets.projects.detail.loadingTime": "Loading time entries…",
|
|
1916
|
+
"staff.timesheets.projects.detail.locked": "locked",
|
|
1917
|
+
"staff.timesheets.projects.detail.lockedEntries": "Locked in reports",
|
|
1918
|
+
"staff.timesheets.projects.detail.loggedHours": "Logged hours",
|
|
1919
|
+
"staff.timesheets.projects.detail.no": "No",
|
|
1920
|
+
"staff.timesheets.projects.detail.noBudget": "No budget",
|
|
1921
|
+
"staff.timesheets.projects.detail.noTasks": "No tasks yet",
|
|
1922
|
+
"staff.timesheets.projects.detail.noTime": "No time logged yet",
|
|
1923
|
+
"staff.timesheets.projects.detail.noTimeHint": "Hours logged against this project appear here.",
|
|
1924
|
+
"staff.timesheets.projects.detail.nonBillable": "{hours} non-billable",
|
|
1925
|
+
"staff.timesheets.projects.detail.nonBillableTag": "non-billable",
|
|
1926
|
+
"staff.timesheets.projects.detail.startedOn": "Started {date}",
|
|
1041
1927
|
"staff.timesheets.projects.detail.subtitle": "Project Settings",
|
|
1928
|
+
"staff.timesheets.projects.detail.tabTasks": "Tasks",
|
|
1929
|
+
"staff.timesheets.projects.detail.tabTeam": "Team",
|
|
1930
|
+
"staff.timesheets.projects.detail.tabTime": "Time",
|
|
1931
|
+
"staff.timesheets.projects.detail.tabs": "Project sections",
|
|
1932
|
+
"staff.timesheets.projects.detail.trendAria": "Hours per week, last 7 weeks",
|
|
1933
|
+
"staff.timesheets.projects.detail.updatedAt": "Last updated",
|
|
1934
|
+
"staff.timesheets.projects.detail.yes": "Yes",
|
|
1042
1935
|
"staff.timesheets.projects.employees.addError": "Failed to add employee.",
|
|
1043
1936
|
"staff.timesheets.projects.employees.added": "Employee added.",
|
|
1044
1937
|
"staff.timesheets.projects.employees.assignmentStartDate": "Assignment Start Date",
|
|
1045
1938
|
"staff.timesheets.projects.employees.department": "Department",
|
|
1046
1939
|
"staff.timesheets.projects.employees.empty": "No employees assigned yet.",
|
|
1047
1940
|
"staff.timesheets.projects.employees.endDate": "Assignment end",
|
|
1941
|
+
"staff.timesheets.projects.employees.loadError": "Could not load team members. Check your connection and try again.",
|
|
1048
1942
|
"staff.timesheets.projects.employees.loading": "Loading employees...",
|
|
1049
1943
|
"staff.timesheets.projects.employees.noResults": "No team members found",
|
|
1050
1944
|
"staff.timesheets.projects.employees.remove": "Remove",
|
|
@@ -1069,6 +1963,8 @@
|
|
|
1069
1963
|
"staff.timesheets.projects.form.actions.create": "Create",
|
|
1070
1964
|
"staff.timesheets.projects.form.actions.edit": "Edit Project",
|
|
1071
1965
|
"staff.timesheets.projects.form.actions.save": "Save",
|
|
1966
|
+
"staff.timesheets.projects.form.billableByDefault": "Billable by default",
|
|
1967
|
+
"staff.timesheets.projects.form.budget": "Budget",
|
|
1072
1968
|
"staff.timesheets.projects.form.code": "Code",
|
|
1073
1969
|
"staff.timesheets.projects.form.codePlaceholder": "PROJECT-001",
|
|
1074
1970
|
"staff.timesheets.projects.form.color": "Project color",
|
|
@@ -1076,11 +1972,14 @@
|
|
|
1076
1972
|
"staff.timesheets.projects.form.costCenter": "Cost center",
|
|
1077
1973
|
"staff.timesheets.projects.form.costCenterPlaceholder": "Cost center code",
|
|
1078
1974
|
"staff.timesheets.projects.form.createTitle": "Create project",
|
|
1975
|
+
"staff.timesheets.projects.form.currency": "Currency",
|
|
1976
|
+
"staff.timesheets.projects.form.customer": "Customer",
|
|
1079
1977
|
"staff.timesheets.projects.form.description": "Description",
|
|
1080
1978
|
"staff.timesheets.projects.form.descriptionPlaceholder": "Project description",
|
|
1081
1979
|
"staff.timesheets.projects.form.editTitle": "Edit project",
|
|
1082
1980
|
"staff.timesheets.projects.form.groupDetails": "Additional Information",
|
|
1083
1981
|
"staff.timesheets.projects.form.groupMain": "Project Details",
|
|
1982
|
+
"staff.timesheets.projects.form.hourlyRate": "Hourly rate",
|
|
1084
1983
|
"staff.timesheets.projects.form.name": "Name",
|
|
1085
1984
|
"staff.timesheets.projects.form.namePlaceholder": "Project name",
|
|
1086
1985
|
"staff.timesheets.projects.form.projectType": "Project type",
|