@hed-hog/operations 0.0.330 → 0.0.332
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/README.md +5 -5
- package/dist/controllers/operations-collaborators.controller.d.ts +58 -213
- package/dist/controllers/operations-collaborators.controller.d.ts.map +1 -1
- package/dist/controllers/operations-collaborators.controller.js +100 -0
- package/dist/controllers/operations-collaborators.controller.js.map +1 -1
- package/dist/controllers/operations-contracts.controller.d.ts +6 -6
- package/dist/controllers/operations-projects.controller.d.ts +25 -0
- package/dist/controllers/operations-projects.controller.d.ts.map +1 -1
- package/dist/controllers/operations-projects.controller.js +48 -0
- package/dist/controllers/operations-projects.controller.js.map +1 -1
- package/dist/controllers/operations-reports.controller.d.ts +1 -1
- package/dist/controllers/operations-tasks.controller.d.ts +34 -9
- package/dist/controllers/operations-tasks.controller.d.ts.map +1 -1
- package/dist/controllers/operations-tasks.controller.js +43 -32
- package/dist/controllers/operations-tasks.controller.js.map +1 -1
- package/dist/controllers/operations-timesheets.controller.d.ts +9 -9
- package/dist/dashboard/components/DashboardLayout.d.ts +30 -0
- package/dist/dashboard/components/DashboardLayout.d.ts.map +1 -0
- package/dist/dashboard/components/DashboardLayout.js +87 -0
- package/dist/dashboard/components/DashboardLayout.js.map +1 -0
- package/dist/dashboard/components/widget-registry.d.ts +23 -0
- package/dist/dashboard/components/widget-registry.d.ts.map +1 -0
- package/dist/dashboard/components/widget-registry.js +245 -0
- package/dist/dashboard/components/widget-registry.js.map +1 -0
- package/dist/dashboard/hooks/useDashboardData.d.ts +20 -0
- package/dist/dashboard/hooks/useDashboardData.d.ts.map +1 -0
- package/dist/dashboard/hooks/useDashboardData.js +24 -0
- package/dist/dashboard/hooks/useDashboardData.js.map +1 -0
- package/dist/dashboard/types/widgets.types.d.ts +233 -0
- package/dist/dashboard/types/widgets.types.d.ts.map +1 -0
- package/dist/dashboard/types/widgets.types.js +6 -0
- package/dist/dashboard/types/widgets.types.js.map +1 -0
- package/dist/dashboard/widgets/CapacityDistribution.d.ts +23 -0
- package/dist/dashboard/widgets/CapacityDistribution.d.ts.map +1 -0
- package/dist/dashboard/widgets/CapacityDistribution.js +11 -0
- package/dist/dashboard/widgets/CapacityDistribution.js.map +1 -0
- package/dist/dashboard/widgets/EffortByProject.d.ts +22 -0
- package/dist/dashboard/widgets/EffortByProject.d.ts.map +1 -0
- package/dist/dashboard/widgets/EffortByProject.js +11 -0
- package/dist/dashboard/widgets/EffortByProject.js.map +1 -0
- package/dist/dashboard/widgets/HeadcountByArea.d.ts +24 -0
- package/dist/dashboard/widgets/HeadcountByArea.d.ts.map +1 -0
- package/dist/dashboard/widgets/HeadcountByArea.js +11 -0
- package/dist/dashboard/widgets/HeadcountByArea.js.map +1 -0
- package/dist/dashboard/widgets/ManagedProjectsStatus.d.ts +18 -0
- package/dist/dashboard/widgets/ManagedProjectsStatus.d.ts.map +1 -0
- package/dist/dashboard/widgets/ManagedProjectsStatus.js +12 -0
- package/dist/dashboard/widgets/ManagedProjectsStatus.js.map +1 -0
- package/dist/dashboard/widgets/MyHoursPeriodKpi.d.ts +22 -0
- package/dist/dashboard/widgets/MyHoursPeriodKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/MyHoursPeriodKpi.js +12 -0
- package/dist/dashboard/widgets/MyHoursPeriodKpi.js.map +1 -0
- package/dist/dashboard/widgets/MyOpenRequestsKpi.d.ts +19 -0
- package/dist/dashboard/widgets/MyOpenRequestsKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/MyOpenRequestsKpi.js +17 -0
- package/dist/dashboard/widgets/MyOpenRequestsKpi.js.map +1 -0
- package/dist/dashboard/widgets/MyPendingRequestsList.d.ts +23 -0
- package/dist/dashboard/widgets/MyPendingRequestsList.d.ts.map +1 -0
- package/dist/dashboard/widgets/MyPendingRequestsList.js +14 -0
- package/dist/dashboard/widgets/MyPendingRequestsList.js.map +1 -0
- package/dist/dashboard/widgets/MyProjectAllocationsKpi.d.ts +22 -0
- package/dist/dashboard/widgets/MyProjectAllocationsKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/MyProjectAllocationsKpi.js +11 -0
- package/dist/dashboard/widgets/MyProjectAllocationsKpi.js.map +1 -0
- package/dist/dashboard/widgets/MyQuickActions.d.ts +23 -0
- package/dist/dashboard/widgets/MyQuickActions.d.ts.map +1 -0
- package/dist/dashboard/widgets/MyQuickActions.js +18 -0
- package/dist/dashboard/widgets/MyQuickActions.js.map +1 -0
- package/dist/dashboard/widgets/MyRelevantDeadlines.d.ts +23 -0
- package/dist/dashboard/widgets/MyRelevantDeadlines.d.ts.map +1 -0
- package/dist/dashboard/widgets/MyRelevantDeadlines.js +22 -0
- package/dist/dashboard/widgets/MyRelevantDeadlines.js.map +1 -0
- package/dist/dashboard/widgets/MyTimesheetStatusKpi.d.ts +17 -0
- package/dist/dashboard/widgets/MyTimesheetStatusKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/MyTimesheetStatusKpi.js +11 -0
- package/dist/dashboard/widgets/MyTimesheetStatusKpi.js.map +1 -0
- package/dist/dashboard/widgets/MyWeeklyJourney.d.ts +21 -0
- package/dist/dashboard/widgets/MyWeeklyJourney.d.ts.map +1 -0
- package/dist/dashboard/widgets/MyWeeklyJourney.js +19 -0
- package/dist/dashboard/widgets/MyWeeklyJourney.js.map +1 -0
- package/dist/dashboard/widgets/PortfolioCostsKpi.d.ts +19 -0
- package/dist/dashboard/widgets/PortfolioCostsKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/PortfolioCostsKpi.js +12 -0
- package/dist/dashboard/widgets/PortfolioCostsKpi.js.map +1 -0
- package/dist/dashboard/widgets/PortfolioEffortKpi.d.ts +18 -0
- package/dist/dashboard/widgets/PortfolioEffortKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/PortfolioEffortKpi.js +8 -0
- package/dist/dashboard/widgets/PortfolioEffortKpi.js.map +1 -0
- package/dist/dashboard/widgets/PortfolioProjectsKpi.d.ts +22 -0
- package/dist/dashboard/widgets/PortfolioProjectsKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/PortfolioProjectsKpi.js +56 -0
- package/dist/dashboard/widgets/PortfolioProjectsKpi.js.map +1 -0
- package/dist/dashboard/widgets/PortfolioRiskKpi.d.ts +19 -0
- package/dist/dashboard/widgets/PortfolioRiskKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/PortfolioRiskKpi.js +11 -0
- package/dist/dashboard/widgets/PortfolioRiskKpi.js.map +1 -0
- package/dist/dashboard/widgets/ProjectStatusOverview.d.ts +19 -0
- package/dist/dashboard/widgets/ProjectStatusOverview.d.ts.map +1 -0
- package/dist/dashboard/widgets/ProjectStatusOverview.js +18 -0
- package/dist/dashboard/widgets/ProjectStatusOverview.js.map +1 -0
- package/dist/dashboard/widgets/StrategicDeadlines.d.ts +24 -0
- package/dist/dashboard/widgets/StrategicDeadlines.d.ts.map +1 -0
- package/dist/dashboard/widgets/StrategicDeadlines.js +22 -0
- package/dist/dashboard/widgets/StrategicDeadlines.js.map +1 -0
- package/dist/dashboard/widgets/TeamApprovalQueue.d.ts +24 -0
- package/dist/dashboard/widgets/TeamApprovalQueue.d.ts.map +1 -0
- package/dist/dashboard/widgets/TeamApprovalQueue.js +12 -0
- package/dist/dashboard/widgets/TeamApprovalQueue.js.map +1 -0
- package/dist/dashboard/widgets/TeamCapacityKpi.d.ts +18 -0
- package/dist/dashboard/widgets/TeamCapacityKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/TeamCapacityKpi.js +19 -0
- package/dist/dashboard/widgets/TeamCapacityKpi.js.map +1 -0
- package/dist/dashboard/widgets/TeamHeadcountKpi.d.ts +22 -0
- package/dist/dashboard/widgets/TeamHeadcountKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/TeamHeadcountKpi.js +56 -0
- package/dist/dashboard/widgets/TeamHeadcountKpi.js.map +1 -0
- package/dist/dashboard/widgets/TeamHoursKpi.d.ts +19 -0
- package/dist/dashboard/widgets/TeamHoursKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/TeamHoursKpi.js +13 -0
- package/dist/dashboard/widgets/TeamHoursKpi.js.map +1 -0
- package/dist/dashboard/widgets/TeamPendingApprovalsKpi.d.ts +20 -0
- package/dist/dashboard/widgets/TeamPendingApprovalsKpi.d.ts.map +1 -0
- package/dist/dashboard/widgets/TeamPendingApprovalsKpi.js +11 -0
- package/dist/dashboard/widgets/TeamPendingApprovalsKpi.js.map +1 -0
- package/dist/dashboard/widgets/TeamUtilizationOverview.d.ts +18 -0
- package/dist/dashboard/widgets/TeamUtilizationOverview.d.ts.map +1 -0
- package/dist/dashboard/widgets/TeamUtilizationOverview.js +17 -0
- package/dist/dashboard/widgets/TeamUtilizationOverview.js.map +1 -0
- package/dist/dashboard/widgets/TeamWorkloadAlerts.d.ts +24 -0
- package/dist/dashboard/widgets/TeamWorkloadAlerts.d.ts.map +1 -0
- package/dist/dashboard/widgets/TeamWorkloadAlerts.js +19 -0
- package/dist/dashboard/widgets/TeamWorkloadAlerts.js.map +1 -0
- package/dist/dashboard/widgets/index.d.ts +24 -0
- package/dist/dashboard/widgets/index.d.ts.map +1 -0
- package/dist/dashboard/widgets/index.js +54 -0
- package/dist/dashboard/widgets/index.js.map +1 -0
- package/dist/dto/create-collaborator-invoice.dto.d.ts +11 -0
- package/dist/dto/create-collaborator-invoice.dto.d.ts.map +1 -0
- package/dist/dto/create-collaborator-invoice.dto.js +55 -0
- package/dist/dto/create-collaborator-invoice.dto.js.map +1 -0
- package/dist/dto/create-collaborator-payment.dto.d.ts +10 -0
- package/dist/dto/create-collaborator-payment.dto.d.ts.map +1 -0
- package/dist/dto/create-collaborator-payment.dto.js +50 -0
- package/dist/dto/create-collaborator-payment.dto.js.map +1 -0
- package/dist/dto/create-collaborator.dto.d.ts +0 -1
- package/dist/dto/create-collaborator.dto.d.ts.map +1 -1
- package/dist/dto/create-collaborator.dto.js +0 -6
- package/dist/dto/create-collaborator.dto.js.map +1 -1
- package/dist/dto/list-collaborator-invoice.dto.d.ts +4 -0
- package/dist/dto/list-collaborator-invoice.dto.d.ts.map +1 -0
- package/dist/dto/list-collaborator-invoice.dto.js +8 -0
- package/dist/dto/list-collaborator-invoice.dto.js.map +1 -0
- package/dist/dto/list-collaborator-payment.dto.d.ts +4 -0
- package/dist/dto/list-collaborator-payment.dto.d.ts.map +1 -0
- package/dist/dto/list-collaborator-payment.dto.js +8 -0
- package/dist/dto/list-collaborator-payment.dto.js.map +1 -0
- package/dist/dto/update-collaborator-invoice.dto.d.ts +6 -0
- package/dist/dto/update-collaborator-invoice.dto.d.ts.map +1 -0
- package/dist/dto/update-collaborator-invoice.dto.js +9 -0
- package/dist/dto/update-collaborator-invoice.dto.js.map +1 -0
- package/dist/dto/update-collaborator-payment.dto.d.ts +6 -0
- package/dist/dto/update-collaborator-payment.dto.d.ts.map +1 -0
- package/dist/dto/update-collaborator-payment.dto.js +9 -0
- package/dist/dto/update-collaborator-payment.dto.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/operations.controller.d.ts +42 -0
- package/dist/operations.controller.d.ts.map +1 -1
- package/dist/operations.service.d.ts +258 -268
- package/dist/operations.service.d.ts.map +1 -1
- package/dist/operations.service.js +2381 -1341
- package/dist/operations.service.js.map +1 -1
- package/dist/operations.service.spec.js +345 -174
- package/dist/operations.service.spec.js.map +1 -1
- package/hedhog/data/dashboard_component.yaml +66 -0
- package/hedhog/data/dashboard_item.yaml +25 -25
- package/hedhog/data/menu.yaml +27 -8
- package/hedhog/data/route.yaml +133 -0
- package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +78 -102
- package/hedhog/frontend/app/_components/collaborator-invoices-tab.tsx.ejs +443 -0
- package/hedhog/frontend/app/_components/collaborator-payment-history-tab.tsx.ejs +429 -0
- package/hedhog/frontend/app/_components/collaborator-picker.tsx.ejs +158 -0
- package/hedhog/frontend/app/_components/my-project-summary-screen.tsx.ejs +247 -50
- package/hedhog/frontend/app/_components/project-assignments-tab.tsx.ejs +643 -450
- package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +992 -431
- package/hedhog/frontend/app/_components/project-file-attachments.tsx.ejs +371 -0
- package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +558 -386
- package/hedhog/frontend/app/_components/task-detail-sheet.tsx.ejs +383 -157
- package/hedhog/frontend/app/_components/task-file-attachments.tsx.ejs +4 -1
- package/hedhog/frontend/app/_components/task-form-fields.tsx.ejs +406 -0
- package/hedhog/frontend/app/_components/task-form-sheet.tsx.ejs +629 -784
- package/hedhog/frontend/app/_components/task-info-display.tsx.ejs +137 -0
- package/hedhog/frontend/app/_components/timesheet-entry-create-sheet.tsx.ejs +306 -0
- package/hedhog/frontend/app/_lib/api.ts.ejs +155 -0
- package/hedhog/frontend/app/_lib/types.ts.ejs +62 -0
- package/hedhog/frontend/app/_lib/utils/format.ts.ejs +0 -2
- package/hedhog/frontend/app/_lib/utils/task-ui.ts.ejs +61 -0
- package/hedhog/frontend/app/approvals/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/collaborator-types/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/collaborators/page.tsx.ejs +59 -8
- package/hedhog/frontend/app/contracts/page.tsx.ejs +29 -8
- package/hedhog/frontend/app/dashboard/widgets/CapacityDistribution.tsx.ejs +84 -0
- package/hedhog/frontend/app/dashboard/widgets/EffortByProject.tsx.ejs +85 -0
- package/hedhog/frontend/app/dashboard/widgets/HeadcountByArea.tsx.ejs +101 -0
- package/hedhog/frontend/app/dashboard/widgets/ManagedProjectsStatus.tsx.ejs +113 -0
- package/hedhog/frontend/app/dashboard/widgets/MyHoursPeriodKpi.tsx.ejs +87 -0
- package/hedhog/frontend/app/dashboard/widgets/MyOpenRequestsKpi.tsx.ejs +97 -0
- package/hedhog/frontend/app/dashboard/widgets/MyPendingRequestsList.tsx.ejs +99 -0
- package/hedhog/frontend/app/dashboard/widgets/MyProjectAllocationsKpi.tsx.ejs +78 -0
- package/hedhog/frontend/app/dashboard/widgets/MyQuickActions.tsx.ejs +130 -0
- package/hedhog/frontend/app/dashboard/widgets/MyRelevantDeadlines.tsx.ejs +144 -0
- package/hedhog/frontend/app/dashboard/widgets/MyTimesheetStatusKpi.tsx.ejs +78 -0
- package/hedhog/frontend/app/dashboard/widgets/MyWeeklyJourney.tsx.ejs +99 -0
- package/hedhog/frontend/app/dashboard/widgets/PortfolioCostsKpi.tsx.ejs +112 -0
- package/hedhog/frontend/app/dashboard/widgets/PortfolioEffortKpi.tsx.ejs +93 -0
- package/hedhog/frontend/app/dashboard/widgets/PortfolioProjectsKpi.tsx.ejs +96 -0
- package/hedhog/frontend/app/dashboard/widgets/PortfolioRiskKpi.tsx.ejs +115 -0
- package/hedhog/frontend/app/dashboard/widgets/ProjectStatusOverview.tsx.ejs +120 -0
- package/hedhog/frontend/app/dashboard/widgets/StrategicDeadlines.tsx.ejs +146 -0
- package/hedhog/frontend/app/dashboard/widgets/TeamApprovalQueue.tsx.ejs +108 -0
- package/hedhog/frontend/app/dashboard/widgets/TeamCapacityKpi.tsx.ejs +97 -0
- package/hedhog/frontend/app/dashboard/widgets/TeamHeadcountKpi.tsx.ejs +100 -0
- package/hedhog/frontend/app/dashboard/widgets/TeamHoursKpi.tsx.ejs +104 -0
- package/hedhog/frontend/app/dashboard/widgets/TeamPendingApprovalsKpi.tsx.ejs +110 -0
- package/hedhog/frontend/app/dashboard/widgets/TeamUtilizationOverview.tsx.ejs +115 -0
- package/hedhog/frontend/app/dashboard/widgets/TeamWorkloadAlerts.tsx.ejs +117 -0
- package/hedhog/frontend/app/dashboard/widgets/index.ts.ejs +26 -0
- package/hedhog/frontend/app/departments/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/my-projects/page.tsx.ejs +30 -12
- package/hedhog/frontend/app/my-tasks/page.tsx.ejs +286 -125
- package/hedhog/frontend/app/project-cost-categories/page.tsx.ejs +58 -52
- package/hedhog/frontend/app/project-cost-types/page.tsx.ejs +58 -51
- package/hedhog/frontend/app/projects/page.tsx.ejs +415 -33
- package/hedhog/frontend/app/schedule-adjustments/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/tasks-gantt/page.tsx.ejs +953 -0
- package/hedhog/frontend/app/time-off/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/timesheets/page.tsx.ejs +10 -4
- package/hedhog/frontend/messages/en.json +332 -46
- package/hedhog/frontend/messages/operations/en.json +61 -52
- package/hedhog/frontend/messages/operations/pt.json +59 -43
- package/hedhog/frontend/messages/pt.json +332 -46
- package/hedhog/frontend/widgets/capacity-distribution.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/effort-by-project.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/headcount-by-area.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/index.ts.ejs +25 -0
- package/hedhog/frontend/widgets/managed-projects-status.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/my-hours-period-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/my-open-requests-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/my-pending-requests-list.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/my-project-allocations-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/my-quick-actions.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/my-relevant-deadlines.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/my-timesheet-status-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/my-weekly-journey.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/portfolio-costs-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/portfolio-effort-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/portfolio-projects-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/portfolio-risk-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/project-status-overview.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/shared-operations-widget.tsx.ejs +170 -0
- package/hedhog/frontend/widgets/strategic-deadlines.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/team-approval-queue.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/team-capacity-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/team-headcount-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/team-hours-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/team-pending-approvals-kpi.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/team-utilization-overview.tsx.ejs +17 -0
- package/hedhog/frontend/widgets/team-workload-alerts.tsx.ejs +17 -0
- package/hedhog/table/operations_collaborator.yaml +8 -13
- package/hedhog/table/operations_collaborator_invoice.yaml +35 -0
- package/hedhog/table/operations_collaborator_payment.yaml +32 -0
- package/hedhog/table/operations_project.yaml +1 -1
- package/hedhog/table/operations_project_file.yaml +23 -0
- package/hedhog/table/operations_task.yaml +76 -69
- package/hedhog/table/operations_task_activity.yaml +51 -0
- package/package.json +6 -5
- package/src/controllers/operations-collaborators.controller.ts +117 -8
- package/src/controllers/operations-projects.controller.ts +41 -8
- package/src/controllers/operations-tasks.controller.ts +156 -166
- package/src/dashboard/README.md +214 -0
- package/src/dashboard/components/DashboardLayout.tsx +131 -0
- package/src/dashboard/components/widget-registry.ts +255 -0
- package/src/dashboard/hooks/useDashboardData.ts +29 -0
- package/src/dashboard/types/widgets.types.ts +237 -0
- package/src/dashboard/widgets/CapacityDistribution.tsx +56 -0
- package/src/dashboard/widgets/EffortByProject.tsx +51 -0
- package/src/dashboard/widgets/HeadcountByArea.tsx +57 -0
- package/src/dashboard/widgets/ManagedProjectsStatus.tsx +53 -0
- package/src/dashboard/widgets/MyHoursPeriodKpi.tsx +87 -0
- package/src/dashboard/widgets/MyOpenRequestsKpi.tsx +51 -0
- package/src/dashboard/widgets/MyPendingRequestsList.tsx +63 -0
- package/src/dashboard/widgets/MyProjectAllocationsKpi.tsx +57 -0
- package/src/dashboard/widgets/MyQuickActions.tsx +62 -0
- package/src/dashboard/widgets/MyRelevantDeadlines.tsx +84 -0
- package/src/dashboard/widgets/MyTimesheetStatusKpi.tsx +65 -0
- package/src/dashboard/widgets/MyWeeklyJourney.tsx +57 -0
- package/src/dashboard/widgets/PortfolioCostsKpi.tsx +48 -0
- package/src/dashboard/widgets/PortfolioEffortKpi.tsx +41 -0
- package/src/dashboard/widgets/PortfolioRiskKpi.tsx +50 -0
- package/src/dashboard/widgets/ProjectStatusOverview.tsx +52 -0
- package/src/dashboard/widgets/StrategicDeadlines.tsx +93 -0
- package/src/dashboard/widgets/TeamApprovalQueue.tsx +70 -0
- package/src/dashboard/widgets/TeamCapacityKpi.tsx +50 -0
- package/src/dashboard/widgets/TeamHoursKpi.tsx +51 -0
- package/src/dashboard/widgets/TeamPendingApprovalsKpi.tsx +53 -0
- package/src/dashboard/widgets/TeamUtilizationOverview.tsx +62 -0
- package/src/dashboard/widgets/TeamWorkloadAlerts.tsx +81 -0
- package/src/dashboard/widgets/index.ts +26 -0
- package/src/dto/create-collaborator-invoice.dto.ts +39 -0
- package/src/dto/create-collaborator-payment.dto.ts +35 -0
- package/src/dto/create-collaborator.dto.ts +4 -11
- package/src/dto/list-collaborator-invoice.dto.ts +3 -0
- package/src/dto/list-collaborator-payment.dto.ts +3 -0
- package/src/dto/update-collaborator-invoice.dto.ts +6 -0
- package/src/dto/update-collaborator-payment.dto.ts +6 -0
- package/src/index.ts +3 -0
- package/src/operations.service.spec.ts +988 -764
- package/src/operations.service.ts +4689 -2624
|
@@ -43,6 +43,7 @@ import { OperationsHeader } from '../_components/operations-header';
|
|
|
43
43
|
import { StatusBadge } from '../_components/status-badge';
|
|
44
44
|
import { fetchOperations, mutateOperations } from '../_lib/api';
|
|
45
45
|
import { useOperationsAccess } from '../_lib/hooks/use-operations-access';
|
|
46
|
+
import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
|
|
46
47
|
import type {
|
|
47
48
|
OperationsTimeOffRequest,
|
|
48
49
|
PaginatedResponse,
|
|
@@ -106,7 +107,11 @@ export default function OperationsTimeOffPage() {
|
|
|
106
107
|
const [search, setSearch] = useState('');
|
|
107
108
|
const [statusFilter, setStatusFilter] = useState('all');
|
|
108
109
|
const [page, setPage] = useState(1);
|
|
109
|
-
const [pageSize, setPageSize] =
|
|
110
|
+
const [pageSize, setPageSize] = usePersistedPageSize({
|
|
111
|
+
storageKey: 'pagination:operations-time-off:pageSize',
|
|
112
|
+
defaultValue: 12,
|
|
113
|
+
allowedValues: [12, 24, 48],
|
|
114
|
+
});
|
|
110
115
|
const [viewMode, setViewMode] = useState<'table' | 'cards'>(() => {
|
|
111
116
|
if (typeof window === 'undefined') return 'table';
|
|
112
117
|
const saved = window.localStorage.getItem('operations-time-off-view-mode');
|
|
@@ -80,6 +80,7 @@ import {
|
|
|
80
80
|
mutateOperations,
|
|
81
81
|
} from '../_lib/api';
|
|
82
82
|
import { useOperationsAccess } from '../_lib/hooks/use-operations-access';
|
|
83
|
+
import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
|
|
83
84
|
import type {
|
|
84
85
|
OperationsCollaborator,
|
|
85
86
|
OperationsProjectOption,
|
|
@@ -242,7 +243,11 @@ export default function OperationsTimesheetsPage() {
|
|
|
242
243
|
() => new Date().getMonth() + 1
|
|
243
244
|
);
|
|
244
245
|
const [page, setPage] = useState(1);
|
|
245
|
-
const [pageSize, setPageSize] =
|
|
246
|
+
const [pageSize, setPageSize] = usePersistedPageSize({
|
|
247
|
+
storageKey: 'pagination:operations-timesheets:pageSize',
|
|
248
|
+
defaultValue: 12,
|
|
249
|
+
allowedValues: [12, 24, 48],
|
|
250
|
+
});
|
|
246
251
|
const [viewMode, setViewMode] = useState<'table' | 'cards' | 'calendar'>(
|
|
247
252
|
() => {
|
|
248
253
|
if (typeof window === 'undefined') return 'table';
|
|
@@ -733,8 +738,7 @@ export default function OperationsTimesheetsPage() {
|
|
|
733
738
|
status: entry.status ?? 'submitted',
|
|
734
739
|
projectId: entry.projectId,
|
|
735
740
|
projectAssignmentId: entry.projectAssignmentId ?? 0,
|
|
736
|
-
projectName:
|
|
737
|
-
entry.projectName || commonT('labels.unassigned'),
|
|
741
|
+
projectName: entry.projectName || commonT('labels.unassigned'),
|
|
738
742
|
},
|
|
739
743
|
]
|
|
740
744
|
: []
|
|
@@ -1188,7 +1192,9 @@ export default function OperationsTimesheetsPage() {
|
|
|
1188
1192
|
{canSubmitTimesheet(timesheet) ? (
|
|
1189
1193
|
<Button
|
|
1190
1194
|
size="icon"
|
|
1191
|
-
onClick={() =>
|
|
1195
|
+
onClick={() =>
|
|
1196
|
+
void submitTimesheet(timesheet.id)
|
|
1197
|
+
}
|
|
1192
1198
|
>
|
|
1193
1199
|
<Send className="size-4" />
|
|
1194
1200
|
</Button>
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"approve": "Approve",
|
|
17
17
|
"reject": "Reject",
|
|
18
18
|
"submit": "Submit",
|
|
19
|
+
"logHours": "Log hours",
|
|
19
20
|
"cancel": "Cancel",
|
|
20
21
|
"loadMore": "Load more",
|
|
21
22
|
"clearSelection": "Clear selection",
|
|
@@ -24,7 +25,8 @@
|
|
|
24
25
|
"manageTemplates": "Manage templates",
|
|
25
26
|
"useTemplate": "Use template",
|
|
26
27
|
"showValues": "Show values",
|
|
27
|
-
"hideValues": "Hide values"
|
|
28
|
+
"hideValues": "Hide values",
|
|
29
|
+
"editPersonCrm": "Edit person record (CRM)"
|
|
28
30
|
},
|
|
29
31
|
"filters": {
|
|
30
32
|
"allStatuses": "All statuses",
|
|
@@ -32,6 +34,19 @@
|
|
|
32
34
|
"dateFrom": "From",
|
|
33
35
|
"dateTo": "To"
|
|
34
36
|
},
|
|
37
|
+
"taskStatus": {
|
|
38
|
+
"todo": "Backlog",
|
|
39
|
+
"doing": "In Progress",
|
|
40
|
+
"review": "Review",
|
|
41
|
+
"done": "Done"
|
|
42
|
+
},
|
|
43
|
+
"priority": {
|
|
44
|
+
"low": "Low",
|
|
45
|
+
"medium": "Medium",
|
|
46
|
+
"high": "High"
|
|
47
|
+
},
|
|
48
|
+
"overdueLabel": "Overdue:",
|
|
49
|
+
"responsible": "Responsible",
|
|
35
50
|
"labels": {
|
|
36
51
|
"notAvailable": "Not available",
|
|
37
52
|
"notAssigned": "Not assigned",
|
|
@@ -210,7 +225,6 @@
|
|
|
210
225
|
"description": "Create or update the workforce profile used across projects, contracts, and approvals."
|
|
211
226
|
},
|
|
212
227
|
"form": {
|
|
213
|
-
"userId": "User ID",
|
|
214
228
|
"code": "Code",
|
|
215
229
|
"displayName": "Display name",
|
|
216
230
|
"department": "Department",
|
|
@@ -220,12 +234,16 @@
|
|
|
220
234
|
"notes": "Notes"
|
|
221
235
|
},
|
|
222
236
|
"messages": {
|
|
223
|
-
"userRequired": "A user ID is required for new collaborators.",
|
|
224
237
|
"requiredFields": "Code and display name are required.",
|
|
225
238
|
"saveSuccess": "Collaborator saved successfully.",
|
|
226
239
|
"saveError": "Unable to save the collaborator.",
|
|
227
240
|
"statusSuccess": "Collaborator status updated successfully.",
|
|
228
241
|
"statusError": "Unable to update collaborator status."
|
|
242
|
+
},
|
|
243
|
+
"columns": {
|
|
244
|
+
"linkedUser": "User",
|
|
245
|
+
"linkedUserYes": "Linked",
|
|
246
|
+
"linkedUserNo": "No user"
|
|
229
247
|
}
|
|
230
248
|
},
|
|
231
249
|
"DepartmentsPage": {
|
|
@@ -288,7 +306,11 @@
|
|
|
288
306
|
"projects": "Projects",
|
|
289
307
|
"tasks": "Tasks",
|
|
290
308
|
"timesheets": "Timesheets",
|
|
291
|
-
"salary": "Compensation"
|
|
309
|
+
"salary": "Compensation",
|
|
310
|
+
"paymentHistory": "Payment History",
|
|
311
|
+
"paymentHistoryEmpty": "No payment records found for this collaborator.",
|
|
312
|
+
"invoices": "Invoices",
|
|
313
|
+
"invoicesEmpty": "No invoices have been submitted by this collaborator yet."
|
|
292
314
|
},
|
|
293
315
|
"sections": {
|
|
294
316
|
"basicInfo": "Basic info",
|
|
@@ -312,9 +334,6 @@
|
|
|
312
334
|
"person": "Person",
|
|
313
335
|
"personEntityLabel": "person",
|
|
314
336
|
"personDescription": "Select an existing person or register a new one without leaving this screen.",
|
|
315
|
-
"userId": "System user",
|
|
316
|
-
"userIdOptional": "System user (optional)",
|
|
317
|
-
"userIdDescription": "Link the platform account this collaborator will use for sign-in, timesheets, and self-service actions.",
|
|
318
337
|
"code": "Code",
|
|
319
338
|
"displayName": "Display name",
|
|
320
339
|
"department": "Department",
|
|
@@ -326,6 +345,7 @@
|
|
|
326
345
|
"collaboratorType": "Relationship type",
|
|
327
346
|
"collaboratorTypeDescription": "Select the nature of the relationship with the company. Role and equity participation stay separate.",
|
|
328
347
|
"weeklyCapacityHours": "Weekly workload",
|
|
348
|
+
"hourlyRate": "Hourly rate",
|
|
329
349
|
"compensationAmount": "Compensation amount",
|
|
330
350
|
"contract": "Contract",
|
|
331
351
|
"contractPlaceholder": "Search or select a contract…",
|
|
@@ -343,10 +363,6 @@
|
|
|
343
363
|
"breakMinutesDescription": "The last numeric field defines the daily break in minutes. Example: 60 = a 1-hour lunch break.",
|
|
344
364
|
"autoGenerateContractDraft": "Generate contract draft automatically",
|
|
345
365
|
"autoGenerateContractDraftDescription": "Creates a related draft contract classified from the relationship type and linked to the hiring origin.",
|
|
346
|
-
"createUserDescription": "Enter the new system user's credentials. The account will be created immediately and linked to this collaborator.",
|
|
347
|
-
"createUserName": "Full name",
|
|
348
|
-
"createUserEmail": "Email",
|
|
349
|
-
"createUserPassword": "Password",
|
|
350
366
|
"compensationEffectiveDate": "Effective date",
|
|
351
367
|
"compensationNotes": "Compensation notes"
|
|
352
368
|
},
|
|
@@ -391,21 +407,15 @@
|
|
|
391
407
|
"equityNotes": "Notes about quotas, shares, term, or powers",
|
|
392
408
|
"levelLabel": "Select a level",
|
|
393
409
|
"supervisor": "Search a collaborator",
|
|
394
|
-
"userIdOptional": "Select a system user",
|
|
395
|
-
"createUserName": "Full name",
|
|
396
|
-
"createUserEmail": "user@example.com",
|
|
397
|
-
"createUserPassword": "Strong password",
|
|
398
410
|
"compensationNotes": "Notes about the compensation change"
|
|
399
411
|
},
|
|
400
412
|
"actions": {
|
|
401
|
-
"createUser": "Create system user",
|
|
402
413
|
"editPersonCrm": "Edit person record (CRM)"
|
|
403
414
|
},
|
|
404
415
|
"states": {
|
|
405
416
|
"loadingCollaboratorTypes": "Loading relationship types..."
|
|
406
417
|
},
|
|
407
418
|
"messages": {
|
|
408
|
-
"userRequired": "The user binding can be completed after the initial collaborator setup.",
|
|
409
419
|
"personRequired": "Select or create a person for the collaborator.",
|
|
410
420
|
"collaboratorTypeRequired": "Select a relationship type.",
|
|
411
421
|
"requiredFields": "The collaborator code is required.",
|
|
@@ -413,8 +423,48 @@
|
|
|
413
423
|
"createError": "Unable to create the collaborator.",
|
|
414
424
|
"updateSuccess": "Collaborator updated successfully.",
|
|
415
425
|
"updateError": "Unable to update the collaborator.",
|
|
416
|
-
"
|
|
417
|
-
"
|
|
426
|
+
"saveSuccess": "Saved successfully.",
|
|
427
|
+
"saveError": "Unable to save. Please try again.",
|
|
428
|
+
"deleteSuccess": "Deleted successfully.",
|
|
429
|
+
"deleteError": "Unable to delete. Please try again."
|
|
430
|
+
},
|
|
431
|
+
"paymentHistory": {
|
|
432
|
+
"add": "Add payment",
|
|
433
|
+
"editTitle": "Edit payment",
|
|
434
|
+
"deleteConfirm": "Are you sure you want to delete this payment?",
|
|
435
|
+
"amount": "Amount",
|
|
436
|
+
"paymentDate": "Payment date",
|
|
437
|
+
"referenceMonth": "Reference month",
|
|
438
|
+
"paymentMethod": "Payment method",
|
|
439
|
+
"notes": "Notes",
|
|
440
|
+
"methodBankTransfer": "Bank transfer",
|
|
441
|
+
"methodPix": "Pix",
|
|
442
|
+
"methodCheck": "Check",
|
|
443
|
+
"methodOther": "Other"
|
|
444
|
+
},
|
|
445
|
+
"invoices": {
|
|
446
|
+
"add": "Add invoice",
|
|
447
|
+
"editTitle": "Edit invoice",
|
|
448
|
+
"deleteConfirm": "Are you sure you want to delete this invoice?",
|
|
449
|
+
"invoiceNumber": "Invoice number",
|
|
450
|
+
"amount": "Amount",
|
|
451
|
+
"issueDate": "Issue date",
|
|
452
|
+
"dueDate": "Due date",
|
|
453
|
+
"status": "Status",
|
|
454
|
+
"description": "Description",
|
|
455
|
+
"statusPending": "Pending",
|
|
456
|
+
"statusPaid": "Paid",
|
|
457
|
+
"statusCancelled": "Cancelled",
|
|
458
|
+
"statusOverdue": "Overdue"
|
|
459
|
+
},
|
|
460
|
+
"projectAllocation": {
|
|
461
|
+
"total": "Total allocation",
|
|
462
|
+
"idle": "Idle capacity",
|
|
463
|
+
"overloaded": "Overloaded",
|
|
464
|
+
"distributeEqually": "Distribute equally",
|
|
465
|
+
"autoRebalance": "Auto-rebalance",
|
|
466
|
+
"autoRebalanceDescription": "Automatically adjust other projects when editing allocation",
|
|
467
|
+
"distributing": "Distributing..."
|
|
418
468
|
},
|
|
419
469
|
"chart": {
|
|
420
470
|
"salaryHistory": "Salary history",
|
|
@@ -531,14 +581,25 @@
|
|
|
531
581
|
"totalDescription": "All delivery projects visible to your access scope.",
|
|
532
582
|
"active": "Active",
|
|
533
583
|
"activeDescription": "Open for timesheet entries and ongoing team work.",
|
|
534
|
-
"
|
|
535
|
-
"
|
|
584
|
+
"completed": "Completed",
|
|
585
|
+
"completedDescription": "Projects that finished their delivery lifecycle.",
|
|
536
586
|
"upcomingDeliveries": "With deadline",
|
|
537
587
|
"upcomingDeliveriesDescription": "Projects that have an end date defined."
|
|
538
588
|
},
|
|
539
589
|
"viewMode": "View mode",
|
|
540
590
|
"viewModeTable": "Table",
|
|
541
591
|
"viewModeCards": "Cards",
|
|
592
|
+
"viewModeBoard": "Board",
|
|
593
|
+
"board": {
|
|
594
|
+
"directorOnly": "Project movement on the board is available only for directors.",
|
|
595
|
+
"emptyColumn": "No projects in this column.",
|
|
596
|
+
"columns": {
|
|
597
|
+
"planning": "Planning",
|
|
598
|
+
"active": "Active",
|
|
599
|
+
"paused": "Paused",
|
|
600
|
+
"completed": "Completed"
|
|
601
|
+
}
|
|
602
|
+
},
|
|
542
603
|
"actions": {
|
|
543
604
|
"archive": "Archive"
|
|
544
605
|
},
|
|
@@ -573,8 +634,8 @@
|
|
|
573
634
|
"totalDescription": "Projects you have an active allocation in.",
|
|
574
635
|
"active": "Active",
|
|
575
636
|
"activeDescription": "Projects open for timesheet entries.",
|
|
576
|
-
"
|
|
577
|
-
"
|
|
637
|
+
"completed": "Completed",
|
|
638
|
+
"completedDescription": "Projects completed in your scope.",
|
|
578
639
|
"upcomingDeliveries": "With deadline",
|
|
579
640
|
"upcomingDeliveriesDescription": "Projects that have an end date defined."
|
|
580
641
|
},
|
|
@@ -631,6 +692,47 @@
|
|
|
631
692
|
"done": "Done"
|
|
632
693
|
}
|
|
633
694
|
},
|
|
695
|
+
"TasksGanttPage": {
|
|
696
|
+
"title": "Tasks Gantt",
|
|
697
|
+
"description": "Track tasks from every active project on a single timeline.",
|
|
698
|
+
"breadcrumb": "Tasks Gantt",
|
|
699
|
+
"searchPlaceholder": "Search task, project, or assignee...",
|
|
700
|
+
"viewDescription": "Tasks from active projects grouped by project.",
|
|
701
|
+
"loading": "Building Gantt view...",
|
|
702
|
+
"emptyDescription": "No tasks were found for active projects with the current filters.",
|
|
703
|
+
"loadErrorDescription": "We couldn't load the schedule right now. Refresh to try again.",
|
|
704
|
+
"noAccessDescription": "The consolidated Gantt view is available only to supervisors and directors.",
|
|
705
|
+
"actions": {
|
|
706
|
+
"openProject": "Open project"
|
|
707
|
+
},
|
|
708
|
+
"filters": {
|
|
709
|
+
"allProjects": "All projects",
|
|
710
|
+
"allStatuses": "All statuses",
|
|
711
|
+
"clearDateRange": "Clear date range"
|
|
712
|
+
},
|
|
713
|
+
"cards": {
|
|
714
|
+
"activeProjects": "Active projects",
|
|
715
|
+
"activeProjectsDescription": "Active projects with tasks on the schedule.",
|
|
716
|
+
"tasks": "Scheduled tasks",
|
|
717
|
+
"tasksDescription": "Items shown with the current filters.",
|
|
718
|
+
"doing": "In progress",
|
|
719
|
+
"doingDescription": "Tasks currently being executed.",
|
|
720
|
+
"overdue": "Overdue",
|
|
721
|
+
"overdueDescription": "Open tasks with an expired due date."
|
|
722
|
+
},
|
|
723
|
+
"labels": {
|
|
724
|
+
"projectTask": "Project and task",
|
|
725
|
+
"range": "{from} through {to}",
|
|
726
|
+
"tasksCount": "{count} task(s)"
|
|
727
|
+
},
|
|
728
|
+
"legend": {
|
|
729
|
+
"todo": "To do",
|
|
730
|
+
"doing": "In progress",
|
|
731
|
+
"review": "In review",
|
|
732
|
+
"done": "Done",
|
|
733
|
+
"overdue": "Overdue"
|
|
734
|
+
}
|
|
735
|
+
},
|
|
634
736
|
"ProjectFormPage": {
|
|
635
737
|
"newTitle": "New Project",
|
|
636
738
|
"editTitle": "Edit Project",
|
|
@@ -649,6 +751,8 @@
|
|
|
649
751
|
"teamDescription": "{count} collaborators selected for the initial team. You can refine assignments after saving.",
|
|
650
752
|
"financials": "Financial and contract basis",
|
|
651
753
|
"financialsDescription": "Financial, billing, and contract settings can be completed after the project is saved.",
|
|
754
|
+
"files": "Attached files",
|
|
755
|
+
"filesDescription": "Upload one or more files to keep project documents and attachments centralized.",
|
|
652
756
|
"contract": "Contract generation settings",
|
|
653
757
|
"contractDescription": "Link an existing contract or configure draft generation after the initial project save.",
|
|
654
758
|
"nextSteps": "Continue after saving",
|
|
@@ -718,7 +822,6 @@
|
|
|
718
822
|
"statuses": {
|
|
719
823
|
"planning": "Planning",
|
|
720
824
|
"active": "Active",
|
|
721
|
-
"at_risk": "At risk",
|
|
722
825
|
"paused": "Paused",
|
|
723
826
|
"completed": "Completed",
|
|
724
827
|
"archived": "Archived"
|
|
@@ -816,24 +919,6 @@
|
|
|
816
919
|
"warning": "Attention",
|
|
817
920
|
"danger": "Critical"
|
|
818
921
|
},
|
|
819
|
-
"sections": {
|
|
820
|
-
"overview": "Overview",
|
|
821
|
-
"contract": "Related contract",
|
|
822
|
-
"team": "Assigned collaborators",
|
|
823
|
-
"teamDescription": "Initial and ongoing staffing linked to this project.",
|
|
824
|
-
"indicators": "Operational indicators",
|
|
825
|
-
"indicatorsDescription": "Current project staffing and delivery metrics.",
|
|
826
|
-
"costs": "Project Costs",
|
|
827
|
-
"costsDescription": "Manage planned, confirmed, and cancelled costs associated with this project."
|
|
828
|
-
},
|
|
829
|
-
"indicators": {
|
|
830
|
-
"activeAssignments": "Active assignments",
|
|
831
|
-
"completedAssignments": "Completed assignments",
|
|
832
|
-
"averageAllocation": "Average allocation",
|
|
833
|
-
"totalWeeklyHours": "Total weekly hours"
|
|
834
|
-
},
|
|
835
|
-
"noContract": "No related contract is linked to this project yet.",
|
|
836
|
-
"noAssignments": "No collaborators are assigned to this project yet.",
|
|
837
922
|
"sections": {
|
|
838
923
|
"overview": "Overview",
|
|
839
924
|
"contract": "Related contract",
|
|
@@ -852,8 +937,18 @@
|
|
|
852
937
|
"archivedTasks": "Archived tasks",
|
|
853
938
|
"archivedTasksDescription": "Review archived project tasks, open details, restore them, or delete them permanently.",
|
|
854
939
|
"costs": "Project Costs",
|
|
855
|
-
"costsDescription": "Manage planned, confirmed, and cancelled costs associated with this project."
|
|
940
|
+
"costsDescription": "Manage planned, confirmed, and cancelled costs associated with this project.",
|
|
941
|
+
"files": "Project Files",
|
|
942
|
+
"filesDescription": "Manage files and documents attached to this project."
|
|
856
943
|
},
|
|
944
|
+
"indicators": {
|
|
945
|
+
"activeAssignments": "Active assignments",
|
|
946
|
+
"completedAssignments": "Completed assignments",
|
|
947
|
+
"averageAllocation": "Average allocation",
|
|
948
|
+
"totalWeeklyHours": "Total weekly hours"
|
|
949
|
+
},
|
|
950
|
+
"noContract": "No related contract is linked to this project yet.",
|
|
951
|
+
"noAssignments": "No collaborators are assigned to this project yet.",
|
|
857
952
|
"tabs": {
|
|
858
953
|
"tasks": "Tasks",
|
|
859
954
|
"overview": "Overview",
|
|
@@ -861,8 +956,14 @@
|
|
|
861
956
|
"team": "Team",
|
|
862
957
|
"timeline": "Timeline",
|
|
863
958
|
"archive": "Archive",
|
|
864
|
-
"costs": "Costs"
|
|
959
|
+
"costs": "Costs",
|
|
960
|
+
"files": "Files"
|
|
865
961
|
},
|
|
962
|
+
"deleteProjectButton": "Delete project",
|
|
963
|
+
"deleteConfirmTitle": "Permanently delete project",
|
|
964
|
+
"deleteConfirmDescription": "This action is irreversible. The project and all its data will be permanently removed.",
|
|
965
|
+
"deleteConfirmLabel": "Type the project name to confirm",
|
|
966
|
+
"deleteConfirmButton": "Delete permanently",
|
|
866
967
|
"charts": {
|
|
867
968
|
"projectProgress": "Progress",
|
|
868
969
|
"burnup": "Burnup / progress",
|
|
@@ -937,6 +1038,12 @@
|
|
|
937
1038
|
"usedHours": "Used hours",
|
|
938
1039
|
"availability": "Availability",
|
|
939
1040
|
"overloadWarning": "{value}% above recommended capacity.",
|
|
1041
|
+
"addCollaborator": "Add collaborator",
|
|
1042
|
+
"addTitle": "Add collaborator",
|
|
1043
|
+
"editTitle": "Edit allocation",
|
|
1044
|
+
"formDescription": "Configure the collaborator's allocation data for this project.",
|
|
1045
|
+
"removeTitle": "Remove collaborator",
|
|
1046
|
+
"removeDescription": "Are you sure you want to remove this collaborator from the project?",
|
|
940
1047
|
"status": {
|
|
941
1048
|
"available": "Available",
|
|
942
1049
|
"high": "High load",
|
|
@@ -957,14 +1064,18 @@
|
|
|
957
1064
|
"descriptionPlaceholder": "Optional description",
|
|
958
1065
|
"priorityLabel": "Priority",
|
|
959
1066
|
"columnLabel": "Column",
|
|
1067
|
+
"assigneeLabel": "Assignee",
|
|
960
1068
|
"deadlineLabel": "Deadline",
|
|
961
1069
|
"estimateLabel": "Estimate (h)",
|
|
962
1070
|
"tagsLabel": "Tags",
|
|
963
|
-
"tagsPlaceholder": "
|
|
1071
|
+
"tagsPlaceholder": "Type and press Enter to add...",
|
|
964
1072
|
"attachmentsLabel": "Attachments",
|
|
965
1073
|
"saving": "Saving...",
|
|
966
1074
|
"tabInfo": "Info",
|
|
967
|
-
"tabComments": "Comments"
|
|
1075
|
+
"tabComments": "Comments",
|
|
1076
|
+
"tabActivities": "Activities",
|
|
1077
|
+
"tabFiles": "Files",
|
|
1078
|
+
"doingTimeLabel": "Time in progress"
|
|
968
1079
|
},
|
|
969
1080
|
"dialogs": {
|
|
970
1081
|
"archiveTitle": "Archive task",
|
|
@@ -987,6 +1098,21 @@
|
|
|
987
1098
|
"editComment": "Unable to update the comment.",
|
|
988
1099
|
"deleteComment": "Unable to delete the comment."
|
|
989
1100
|
}
|
|
1101
|
+
},
|
|
1102
|
+
"activitiesSection": {
|
|
1103
|
+
"title": "Activities",
|
|
1104
|
+
"noActivities": "No activities recorded yet.",
|
|
1105
|
+
"defaultUser": "Unknown user",
|
|
1106
|
+
"statusChanged": "Moved from {from} to {to}.",
|
|
1107
|
+
"fallbackAction": "Recorded an activity on this task.",
|
|
1108
|
+
"kpis": {
|
|
1109
|
+
"activities": "Activities",
|
|
1110
|
+
"activitiesDescription": "Recorded events",
|
|
1111
|
+
"collaborators": "Collaborators",
|
|
1112
|
+
"collaboratorsDescription": "People who interacted",
|
|
1113
|
+
"executionTime": "Execution",
|
|
1114
|
+
"executionTimeDescription": "Total accumulated time"
|
|
1115
|
+
}
|
|
990
1116
|
}
|
|
991
1117
|
},
|
|
992
1118
|
"ContractsPage": {
|
|
@@ -1452,6 +1578,7 @@
|
|
|
1452
1578
|
"searchPlaceholder": "Search collaborator, project, task, approver, or notes...",
|
|
1453
1579
|
"emptyDescription": "No timesheets match the current filters.",
|
|
1454
1580
|
"sheet": {
|
|
1581
|
+
"title": "Quick entry",
|
|
1455
1582
|
"createTitle": "Quick entry",
|
|
1456
1583
|
"editTitle": "Edit entry",
|
|
1457
1584
|
"description": "Choose the project, task, date, and duration to log work with minimal friction.",
|
|
@@ -2160,6 +2287,20 @@
|
|
|
2160
2287
|
"removeFile": "Remove file"
|
|
2161
2288
|
}
|
|
2162
2289
|
},
|
|
2290
|
+
"ProjectFileAttachments": {
|
|
2291
|
+
"uploadError": "Upload error",
|
|
2292
|
+
"error": "Error",
|
|
2293
|
+
"empty": "No attached files",
|
|
2294
|
+
"dropzone": {
|
|
2295
|
+
"ariaLabel": "Click or drop files to attach",
|
|
2296
|
+
"dragging": "Drop files here",
|
|
2297
|
+
"idle": "Click or drag files to attach"
|
|
2298
|
+
},
|
|
2299
|
+
"actions": {
|
|
2300
|
+
"openInNewTab": "Open in a new tab",
|
|
2301
|
+
"removeFile": "Remove file"
|
|
2302
|
+
}
|
|
2303
|
+
},
|
|
2163
2304
|
"ReportsCollaboratorsPage": {
|
|
2164
2305
|
"title": "Collaborators Report",
|
|
2165
2306
|
"description": "Executive dashboard with costs, profit, current capacity, and planning for the next 12 months.",
|
|
@@ -2332,5 +2473,150 @@
|
|
|
2332
2473
|
"recommendation": "Recommendation"
|
|
2333
2474
|
}
|
|
2334
2475
|
}
|
|
2476
|
+
},
|
|
2477
|
+
"MyOpenRequestsKpi": {
|
|
2478
|
+
"alert": "Attention",
|
|
2479
|
+
"openRequests": "Open requests",
|
|
2480
|
+
"requests": {
|
|
2481
|
+
"vacation": "Vacation",
|
|
2482
|
+
"scheduleAdjust": "Schedule Adjustment",
|
|
2483
|
+
"expenses": "Expenses",
|
|
2484
|
+
"others": "Others"
|
|
2485
|
+
}
|
|
2486
|
+
},
|
|
2487
|
+
"MyQuickActions": {
|
|
2488
|
+
"timesheetLabel": "Log Timesheet",
|
|
2489
|
+
"requestLabel": "New Request",
|
|
2490
|
+
"vacationLabel": "Request Vacation",
|
|
2491
|
+
"expenseLabel": "Log Expense",
|
|
2492
|
+
"tipsTitle": "💡 Useful tips:",
|
|
2493
|
+
"tips": {
|
|
2494
|
+
"timesheet": "✓ Complete your timesheet every week",
|
|
2495
|
+
"vacation": "✓ Request vacation in advance",
|
|
2496
|
+
"expense": "✓ Log expenses on time"
|
|
2497
|
+
}
|
|
2498
|
+
},
|
|
2499
|
+
"ProjectStatusOverview": {
|
|
2500
|
+
"totalProjects": "Total Projects",
|
|
2501
|
+
"statuses": {
|
|
2502
|
+
"planning": "Planning",
|
|
2503
|
+
"inProgress": "In Progress",
|
|
2504
|
+
"review": "In Review",
|
|
2505
|
+
"completed": "Completed",
|
|
2506
|
+
"onHold": "On Hold"
|
|
2507
|
+
}
|
|
2508
|
+
},
|
|
2509
|
+
"TeamUtilizationOverview": {
|
|
2510
|
+
"totalCollaborators": "Total Collaborators",
|
|
2511
|
+
"overUtilizedAlert": "{count} collaborator(s) over-utilized",
|
|
2512
|
+
"rebalanceRecommendation": "Consider rebalancing projects",
|
|
2513
|
+
"categories": {
|
|
2514
|
+
"overUtilized": "Over-utilized",
|
|
2515
|
+
"wellUtilized": "Well utilized",
|
|
2516
|
+
"underUtilized": "Under-utilized",
|
|
2517
|
+
"idle": "Inactive"
|
|
2518
|
+
}
|
|
2519
|
+
},
|
|
2520
|
+
"CapacityDistribution": {
|
|
2521
|
+
"empty": "No areas with capacity",
|
|
2522
|
+
"total": "Total Capacity"
|
|
2523
|
+
},
|
|
2524
|
+
"EffortByProject": {
|
|
2525
|
+
"empty": "No projects with effort",
|
|
2526
|
+
"total": "Total Effort"
|
|
2527
|
+
},
|
|
2528
|
+
"HeadcountByArea": {
|
|
2529
|
+
"empty": "No areas with collaborators",
|
|
2530
|
+
"totalCollaborators": "Total Collaborators"
|
|
2531
|
+
},
|
|
2532
|
+
"ManagedProjectsStatus": {
|
|
2533
|
+
"title": "Project Health",
|
|
2534
|
+
"onSchedule": "On Schedule",
|
|
2535
|
+
"atRisk": "At Risk",
|
|
2536
|
+
"delayed": "Delayed",
|
|
2537
|
+
"done": "Done",
|
|
2538
|
+
"distribution": "Distribution",
|
|
2539
|
+
"supervision": "projects under supervision"
|
|
2540
|
+
},
|
|
2541
|
+
"MyProjectAllocationsKpi": {
|
|
2542
|
+
"activeProjects": "Active projects",
|
|
2543
|
+
"capacity": "Capacity"
|
|
2544
|
+
},
|
|
2545
|
+
"MyRelevantDeadlines": {
|
|
2546
|
+
"empty": "No critical deadlines",
|
|
2547
|
+
"overdue": "Overdue"
|
|
2548
|
+
},
|
|
2549
|
+
"PortfolioCostsKpi": {
|
|
2550
|
+
"label": "Total Costs",
|
|
2551
|
+
"trend": "Trend",
|
|
2552
|
+
"decreasing": "Decreasing",
|
|
2553
|
+
"increasing": "Increasing",
|
|
2554
|
+
"stable": "Stable",
|
|
2555
|
+
"budgetUtilization": "Budget Utilization",
|
|
2556
|
+
"spent": "${value}k spent",
|
|
2557
|
+
"budgeted": "${value}k budgeted",
|
|
2558
|
+
"savings": "Savings"
|
|
2559
|
+
},
|
|
2560
|
+
"PortfolioEffortKpi": {
|
|
2561
|
+
"label": "Total Effort",
|
|
2562
|
+
"available": "Available",
|
|
2563
|
+
"utilizationRate": "Utilization Rate",
|
|
2564
|
+
"allocated": "Allocated",
|
|
2565
|
+
"highDemand": "⚠️ Portfolio with high demand",
|
|
2566
|
+
"balanced": "✓ Balanced utilization",
|
|
2567
|
+
"availableCapacity": "📊 Available capacity"
|
|
2568
|
+
},
|
|
2569
|
+
"PortfolioRiskKpi": {
|
|
2570
|
+
"label": "Identified Risks",
|
|
2571
|
+
"trendLabel": "Trend:",
|
|
2572
|
+
"increasing": "📈 Increasing",
|
|
2573
|
+
"decreasing": "📉 Decreasing",
|
|
2574
|
+
"stable": "➡️ Stable",
|
|
2575
|
+
"critical": "🔴 Critical",
|
|
2576
|
+
"high": "🟠 High",
|
|
2577
|
+
"medium": "🟡 Medium",
|
|
2578
|
+
"urgentAttention": "⚠️ Requires immediate attention"
|
|
2579
|
+
},
|
|
2580
|
+
"StrategicDeadlines": {
|
|
2581
|
+
"empty": "No critical deadlines"
|
|
2582
|
+
},
|
|
2583
|
+
"TeamApprovalQueue": {
|
|
2584
|
+
"typeLabels": {
|
|
2585
|
+
"timesheet": "Timesheet",
|
|
2586
|
+
"expense": "Expense",
|
|
2587
|
+
"vacation": "Vacation",
|
|
2588
|
+
"schedule": "Schedule"
|
|
2589
|
+
},
|
|
2590
|
+
"empty": "Approval queue is empty"
|
|
2591
|
+
},
|
|
2592
|
+
"TeamCapacityKpi": {
|
|
2593
|
+
"available": "Available",
|
|
2594
|
+
"critical": "Critical",
|
|
2595
|
+
"high": "High",
|
|
2596
|
+
"great": "Great",
|
|
2597
|
+
"normal": "Normal",
|
|
2598
|
+
"utilization": "Utilization",
|
|
2599
|
+
"allocated": "{hours}h allocated",
|
|
2600
|
+
"total": "{hours}h total",
|
|
2601
|
+
"status": "Status"
|
|
2602
|
+
},
|
|
2603
|
+
"TeamHoursKpi": {
|
|
2604
|
+
"averagePerPerson": "Avg/Person",
|
|
2605
|
+
"goalVariation": "Goal Variation",
|
|
2606
|
+
"registeredHours": "Registered Hours",
|
|
2607
|
+
"registered": "{hours}h logged",
|
|
2608
|
+
"goal": "{hours}h goal",
|
|
2609
|
+
"collaborators": "Collaborators"
|
|
2610
|
+
},
|
|
2611
|
+
"TeamPendingApprovalsKpi": {
|
|
2612
|
+
"label": "Awaiting Approval",
|
|
2613
|
+
"requests": "Requests",
|
|
2614
|
+
"urgent": "Urgent:",
|
|
2615
|
+
"avgTime": "Average time:",
|
|
2616
|
+
"days": "{count} days"
|
|
2617
|
+
},
|
|
2618
|
+
"TeamWorkloadAlerts": {
|
|
2619
|
+
"empty": "No critical alerts",
|
|
2620
|
+
"lastUpdated": "Last updated: 5 min ago"
|
|
2335
2621
|
}
|
|
2336
2622
|
}
|