@hed-hog/operations 0.0.330 → 0.0.331

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/README.md +5 -5
  2. package/dist/controllers/operations-collaborators.controller.d.ts +7 -216
  3. package/dist/controllers/operations-collaborators.controller.d.ts.map +1 -1
  4. package/dist/controllers/operations-contracts.controller.d.ts +6 -6
  5. package/dist/controllers/operations-projects.controller.d.ts +25 -0
  6. package/dist/controllers/operations-projects.controller.d.ts.map +1 -1
  7. package/dist/controllers/operations-projects.controller.js +48 -0
  8. package/dist/controllers/operations-projects.controller.js.map +1 -1
  9. package/dist/controllers/operations-reports.controller.d.ts +1 -1
  10. package/dist/controllers/operations-tasks.controller.d.ts +34 -9
  11. package/dist/controllers/operations-tasks.controller.d.ts.map +1 -1
  12. package/dist/controllers/operations-tasks.controller.js +43 -32
  13. package/dist/controllers/operations-tasks.controller.js.map +1 -1
  14. package/dist/controllers/operations-timesheets.controller.d.ts +9 -9
  15. package/dist/dashboard/components/DashboardLayout.d.ts +30 -0
  16. package/dist/dashboard/components/DashboardLayout.d.ts.map +1 -0
  17. package/dist/dashboard/components/DashboardLayout.js +87 -0
  18. package/dist/dashboard/components/DashboardLayout.js.map +1 -0
  19. package/dist/dashboard/components/widget-registry.d.ts +23 -0
  20. package/dist/dashboard/components/widget-registry.d.ts.map +1 -0
  21. package/dist/dashboard/components/widget-registry.js +245 -0
  22. package/dist/dashboard/components/widget-registry.js.map +1 -0
  23. package/dist/dashboard/hooks/useDashboardData.d.ts +20 -0
  24. package/dist/dashboard/hooks/useDashboardData.d.ts.map +1 -0
  25. package/dist/dashboard/hooks/useDashboardData.js +24 -0
  26. package/dist/dashboard/hooks/useDashboardData.js.map +1 -0
  27. package/dist/dashboard/types/widgets.types.d.ts +233 -0
  28. package/dist/dashboard/types/widgets.types.d.ts.map +1 -0
  29. package/dist/dashboard/types/widgets.types.js +6 -0
  30. package/dist/dashboard/types/widgets.types.js.map +1 -0
  31. package/dist/dashboard/widgets/CapacityDistribution.d.ts +23 -0
  32. package/dist/dashboard/widgets/CapacityDistribution.d.ts.map +1 -0
  33. package/dist/dashboard/widgets/CapacityDistribution.js +11 -0
  34. package/dist/dashboard/widgets/CapacityDistribution.js.map +1 -0
  35. package/dist/dashboard/widgets/EffortByProject.d.ts +22 -0
  36. package/dist/dashboard/widgets/EffortByProject.d.ts.map +1 -0
  37. package/dist/dashboard/widgets/EffortByProject.js +11 -0
  38. package/dist/dashboard/widgets/EffortByProject.js.map +1 -0
  39. package/dist/dashboard/widgets/HeadcountByArea.d.ts +24 -0
  40. package/dist/dashboard/widgets/HeadcountByArea.d.ts.map +1 -0
  41. package/dist/dashboard/widgets/HeadcountByArea.js +11 -0
  42. package/dist/dashboard/widgets/HeadcountByArea.js.map +1 -0
  43. package/dist/dashboard/widgets/ManagedProjectsStatus.d.ts +18 -0
  44. package/dist/dashboard/widgets/ManagedProjectsStatus.d.ts.map +1 -0
  45. package/dist/dashboard/widgets/ManagedProjectsStatus.js +12 -0
  46. package/dist/dashboard/widgets/ManagedProjectsStatus.js.map +1 -0
  47. package/dist/dashboard/widgets/MyHoursPeriodKpi.d.ts +22 -0
  48. package/dist/dashboard/widgets/MyHoursPeriodKpi.d.ts.map +1 -0
  49. package/dist/dashboard/widgets/MyHoursPeriodKpi.js +12 -0
  50. package/dist/dashboard/widgets/MyHoursPeriodKpi.js.map +1 -0
  51. package/dist/dashboard/widgets/MyOpenRequestsKpi.d.ts +19 -0
  52. package/dist/dashboard/widgets/MyOpenRequestsKpi.d.ts.map +1 -0
  53. package/dist/dashboard/widgets/MyOpenRequestsKpi.js +17 -0
  54. package/dist/dashboard/widgets/MyOpenRequestsKpi.js.map +1 -0
  55. package/dist/dashboard/widgets/MyPendingRequestsList.d.ts +23 -0
  56. package/dist/dashboard/widgets/MyPendingRequestsList.d.ts.map +1 -0
  57. package/dist/dashboard/widgets/MyPendingRequestsList.js +14 -0
  58. package/dist/dashboard/widgets/MyPendingRequestsList.js.map +1 -0
  59. package/dist/dashboard/widgets/MyProjectAllocationsKpi.d.ts +22 -0
  60. package/dist/dashboard/widgets/MyProjectAllocationsKpi.d.ts.map +1 -0
  61. package/dist/dashboard/widgets/MyProjectAllocationsKpi.js +11 -0
  62. package/dist/dashboard/widgets/MyProjectAllocationsKpi.js.map +1 -0
  63. package/dist/dashboard/widgets/MyQuickActions.d.ts +23 -0
  64. package/dist/dashboard/widgets/MyQuickActions.d.ts.map +1 -0
  65. package/dist/dashboard/widgets/MyQuickActions.js +18 -0
  66. package/dist/dashboard/widgets/MyQuickActions.js.map +1 -0
  67. package/dist/dashboard/widgets/MyRelevantDeadlines.d.ts +23 -0
  68. package/dist/dashboard/widgets/MyRelevantDeadlines.d.ts.map +1 -0
  69. package/dist/dashboard/widgets/MyRelevantDeadlines.js +22 -0
  70. package/dist/dashboard/widgets/MyRelevantDeadlines.js.map +1 -0
  71. package/dist/dashboard/widgets/MyTimesheetStatusKpi.d.ts +17 -0
  72. package/dist/dashboard/widgets/MyTimesheetStatusKpi.d.ts.map +1 -0
  73. package/dist/dashboard/widgets/MyTimesheetStatusKpi.js +11 -0
  74. package/dist/dashboard/widgets/MyTimesheetStatusKpi.js.map +1 -0
  75. package/dist/dashboard/widgets/MyWeeklyJourney.d.ts +21 -0
  76. package/dist/dashboard/widgets/MyWeeklyJourney.d.ts.map +1 -0
  77. package/dist/dashboard/widgets/MyWeeklyJourney.js +19 -0
  78. package/dist/dashboard/widgets/MyWeeklyJourney.js.map +1 -0
  79. package/dist/dashboard/widgets/PortfolioCostsKpi.d.ts +19 -0
  80. package/dist/dashboard/widgets/PortfolioCostsKpi.d.ts.map +1 -0
  81. package/dist/dashboard/widgets/PortfolioCostsKpi.js +12 -0
  82. package/dist/dashboard/widgets/PortfolioCostsKpi.js.map +1 -0
  83. package/dist/dashboard/widgets/PortfolioEffortKpi.d.ts +18 -0
  84. package/dist/dashboard/widgets/PortfolioEffortKpi.d.ts.map +1 -0
  85. package/dist/dashboard/widgets/PortfolioEffortKpi.js +8 -0
  86. package/dist/dashboard/widgets/PortfolioEffortKpi.js.map +1 -0
  87. package/dist/dashboard/widgets/PortfolioProjectsKpi.d.ts +22 -0
  88. package/dist/dashboard/widgets/PortfolioProjectsKpi.d.ts.map +1 -0
  89. package/dist/dashboard/widgets/PortfolioProjectsKpi.js +56 -0
  90. package/dist/dashboard/widgets/PortfolioProjectsKpi.js.map +1 -0
  91. package/dist/dashboard/widgets/PortfolioRiskKpi.d.ts +19 -0
  92. package/dist/dashboard/widgets/PortfolioRiskKpi.d.ts.map +1 -0
  93. package/dist/dashboard/widgets/PortfolioRiskKpi.js +11 -0
  94. package/dist/dashboard/widgets/PortfolioRiskKpi.js.map +1 -0
  95. package/dist/dashboard/widgets/ProjectStatusOverview.d.ts +19 -0
  96. package/dist/dashboard/widgets/ProjectStatusOverview.d.ts.map +1 -0
  97. package/dist/dashboard/widgets/ProjectStatusOverview.js +18 -0
  98. package/dist/dashboard/widgets/ProjectStatusOverview.js.map +1 -0
  99. package/dist/dashboard/widgets/StrategicDeadlines.d.ts +24 -0
  100. package/dist/dashboard/widgets/StrategicDeadlines.d.ts.map +1 -0
  101. package/dist/dashboard/widgets/StrategicDeadlines.js +22 -0
  102. package/dist/dashboard/widgets/StrategicDeadlines.js.map +1 -0
  103. package/dist/dashboard/widgets/TeamApprovalQueue.d.ts +24 -0
  104. package/dist/dashboard/widgets/TeamApprovalQueue.d.ts.map +1 -0
  105. package/dist/dashboard/widgets/TeamApprovalQueue.js +12 -0
  106. package/dist/dashboard/widgets/TeamApprovalQueue.js.map +1 -0
  107. package/dist/dashboard/widgets/TeamCapacityKpi.d.ts +18 -0
  108. package/dist/dashboard/widgets/TeamCapacityKpi.d.ts.map +1 -0
  109. package/dist/dashboard/widgets/TeamCapacityKpi.js +19 -0
  110. package/dist/dashboard/widgets/TeamCapacityKpi.js.map +1 -0
  111. package/dist/dashboard/widgets/TeamHeadcountKpi.d.ts +22 -0
  112. package/dist/dashboard/widgets/TeamHeadcountKpi.d.ts.map +1 -0
  113. package/dist/dashboard/widgets/TeamHeadcountKpi.js +56 -0
  114. package/dist/dashboard/widgets/TeamHeadcountKpi.js.map +1 -0
  115. package/dist/dashboard/widgets/TeamHoursKpi.d.ts +19 -0
  116. package/dist/dashboard/widgets/TeamHoursKpi.d.ts.map +1 -0
  117. package/dist/dashboard/widgets/TeamHoursKpi.js +13 -0
  118. package/dist/dashboard/widgets/TeamHoursKpi.js.map +1 -0
  119. package/dist/dashboard/widgets/TeamPendingApprovalsKpi.d.ts +20 -0
  120. package/dist/dashboard/widgets/TeamPendingApprovalsKpi.d.ts.map +1 -0
  121. package/dist/dashboard/widgets/TeamPendingApprovalsKpi.js +11 -0
  122. package/dist/dashboard/widgets/TeamPendingApprovalsKpi.js.map +1 -0
  123. package/dist/dashboard/widgets/TeamUtilizationOverview.d.ts +18 -0
  124. package/dist/dashboard/widgets/TeamUtilizationOverview.d.ts.map +1 -0
  125. package/dist/dashboard/widgets/TeamUtilizationOverview.js +17 -0
  126. package/dist/dashboard/widgets/TeamUtilizationOverview.js.map +1 -0
  127. package/dist/dashboard/widgets/TeamWorkloadAlerts.d.ts +24 -0
  128. package/dist/dashboard/widgets/TeamWorkloadAlerts.d.ts.map +1 -0
  129. package/dist/dashboard/widgets/TeamWorkloadAlerts.js +19 -0
  130. package/dist/dashboard/widgets/TeamWorkloadAlerts.js.map +1 -0
  131. package/dist/dashboard/widgets/index.d.ts +24 -0
  132. package/dist/dashboard/widgets/index.d.ts.map +1 -0
  133. package/dist/dashboard/widgets/index.js +54 -0
  134. package/dist/dashboard/widgets/index.js.map +1 -0
  135. package/dist/dto/create-collaborator.dto.d.ts +0 -1
  136. package/dist/dto/create-collaborator.dto.d.ts.map +1 -1
  137. package/dist/dto/create-collaborator.dto.js +0 -6
  138. package/dist/dto/create-collaborator.dto.js.map +1 -1
  139. package/dist/index.d.ts +2 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +2 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/operations.controller.d.ts +42 -0
  144. package/dist/operations.controller.d.ts.map +1 -1
  145. package/dist/operations.service.d.ts +182 -268
  146. package/dist/operations.service.d.ts.map +1 -1
  147. package/dist/operations.service.js +2147 -1337
  148. package/dist/operations.service.js.map +1 -1
  149. package/dist/operations.service.spec.js +345 -174
  150. package/dist/operations.service.spec.js.map +1 -1
  151. package/hedhog/data/dashboard_component.yaml +66 -0
  152. package/hedhog/data/dashboard_item.yaml +25 -25
  153. package/hedhog/data/route.yaml +61 -0
  154. package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +39 -99
  155. package/hedhog/frontend/app/_components/collaborator-picker.tsx.ejs +158 -0
  156. package/hedhog/frontend/app/_components/my-project-summary-screen.tsx.ejs +314 -116
  157. package/hedhog/frontend/app/_components/project-assignments-tab.tsx.ejs +434 -449
  158. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +289 -412
  159. package/hedhog/frontend/app/_components/project-file-attachments.tsx.ejs +371 -0
  160. package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +426 -374
  161. package/hedhog/frontend/app/_components/task-detail-sheet.tsx.ejs +803 -581
  162. package/hedhog/frontend/app/_components/task-file-attachments.tsx.ejs +4 -1
  163. package/hedhog/frontend/app/_components/task-form-fields.tsx.ejs +406 -0
  164. package/hedhog/frontend/app/_components/task-form-sheet.tsx.ejs +629 -784
  165. package/hedhog/frontend/app/_components/task-info-display.tsx.ejs +137 -0
  166. package/hedhog/frontend/app/_components/timesheet-entry-create-sheet.tsx.ejs +306 -0
  167. package/hedhog/frontend/app/_lib/api.ts.ejs +480 -476
  168. package/hedhog/frontend/app/_lib/types.ts.ejs +66 -5
  169. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +0 -2
  170. package/hedhog/frontend/app/_lib/utils/task-ui.ts.ejs +43 -0
  171. package/hedhog/frontend/app/approvals/page.tsx.ejs +6 -1
  172. package/hedhog/frontend/app/collaborator-types/page.tsx.ejs +6 -1
  173. package/hedhog/frontend/app/collaborators/page.tsx.ejs +59 -8
  174. package/hedhog/frontend/app/contracts/page.tsx.ejs +29 -8
  175. package/hedhog/frontend/app/dashboard/widgets/CapacityDistribution.tsx.ejs +84 -0
  176. package/hedhog/frontend/app/dashboard/widgets/EffortByProject.tsx.ejs +85 -0
  177. package/hedhog/frontend/app/dashboard/widgets/HeadcountByArea.tsx.ejs +101 -0
  178. package/hedhog/frontend/app/dashboard/widgets/ManagedProjectsStatus.tsx.ejs +113 -0
  179. package/hedhog/frontend/app/dashboard/widgets/MyHoursPeriodKpi.tsx.ejs +87 -0
  180. package/hedhog/frontend/app/dashboard/widgets/MyOpenRequestsKpi.tsx.ejs +97 -0
  181. package/hedhog/frontend/app/dashboard/widgets/MyPendingRequestsList.tsx.ejs +99 -0
  182. package/hedhog/frontend/app/dashboard/widgets/MyProjectAllocationsKpi.tsx.ejs +78 -0
  183. package/hedhog/frontend/app/dashboard/widgets/MyQuickActions.tsx.ejs +130 -0
  184. package/hedhog/frontend/app/dashboard/widgets/MyRelevantDeadlines.tsx.ejs +144 -0
  185. package/hedhog/frontend/app/dashboard/widgets/MyTimesheetStatusKpi.tsx.ejs +78 -0
  186. package/hedhog/frontend/app/dashboard/widgets/MyWeeklyJourney.tsx.ejs +99 -0
  187. package/hedhog/frontend/app/dashboard/widgets/PortfolioCostsKpi.tsx.ejs +112 -0
  188. package/hedhog/frontend/app/dashboard/widgets/PortfolioEffortKpi.tsx.ejs +93 -0
  189. package/hedhog/frontend/app/dashboard/widgets/PortfolioProjectsKpi.tsx.ejs +96 -0
  190. package/hedhog/frontend/app/dashboard/widgets/PortfolioRiskKpi.tsx.ejs +115 -0
  191. package/hedhog/frontend/app/dashboard/widgets/ProjectStatusOverview.tsx.ejs +120 -0
  192. package/hedhog/frontend/app/dashboard/widgets/StrategicDeadlines.tsx.ejs +146 -0
  193. package/hedhog/frontend/app/dashboard/widgets/TeamApprovalQueue.tsx.ejs +108 -0
  194. package/hedhog/frontend/app/dashboard/widgets/TeamCapacityKpi.tsx.ejs +97 -0
  195. package/hedhog/frontend/app/dashboard/widgets/TeamHeadcountKpi.tsx.ejs +100 -0
  196. package/hedhog/frontend/app/dashboard/widgets/TeamHoursKpi.tsx.ejs +104 -0
  197. package/hedhog/frontend/app/dashboard/widgets/TeamPendingApprovalsKpi.tsx.ejs +110 -0
  198. package/hedhog/frontend/app/dashboard/widgets/TeamUtilizationOverview.tsx.ejs +115 -0
  199. package/hedhog/frontend/app/dashboard/widgets/TeamWorkloadAlerts.tsx.ejs +117 -0
  200. package/hedhog/frontend/app/dashboard/widgets/index.ts.ejs +26 -0
  201. package/hedhog/frontend/app/departments/page.tsx.ejs +6 -1
  202. package/hedhog/frontend/app/my-projects/page.tsx.ejs +14 -10
  203. package/hedhog/frontend/app/my-tasks/page.tsx.ejs +328 -105
  204. package/hedhog/frontend/app/project-cost-categories/page.tsx.ejs +58 -52
  205. package/hedhog/frontend/app/project-cost-types/page.tsx.ejs +58 -51
  206. package/hedhog/frontend/app/projects/page.tsx.ejs +376 -30
  207. package/hedhog/frontend/app/schedule-adjustments/page.tsx.ejs +6 -1
  208. package/hedhog/frontend/app/time-off/page.tsx.ejs +6 -1
  209. package/hedhog/frontend/app/timesheets/page.tsx.ejs +10 -4
  210. package/hedhog/frontend/messages/en.json +238 -46
  211. package/hedhog/frontend/messages/operations/en.json +61 -52
  212. package/hedhog/frontend/messages/operations/pt.json +59 -43
  213. package/hedhog/frontend/messages/pt.json +238 -46
  214. package/hedhog/frontend/widgets/capacity-distribution.tsx.ejs +17 -0
  215. package/hedhog/frontend/widgets/effort-by-project.tsx.ejs +17 -0
  216. package/hedhog/frontend/widgets/headcount-by-area.tsx.ejs +17 -0
  217. package/hedhog/frontend/widgets/index.ts.ejs +25 -0
  218. package/hedhog/frontend/widgets/managed-projects-status.tsx.ejs +17 -0
  219. package/hedhog/frontend/widgets/my-hours-period-kpi.tsx.ejs +17 -0
  220. package/hedhog/frontend/widgets/my-open-requests-kpi.tsx.ejs +17 -0
  221. package/hedhog/frontend/widgets/my-pending-requests-list.tsx.ejs +17 -0
  222. package/hedhog/frontend/widgets/my-project-allocations-kpi.tsx.ejs +17 -0
  223. package/hedhog/frontend/widgets/my-quick-actions.tsx.ejs +17 -0
  224. package/hedhog/frontend/widgets/my-relevant-deadlines.tsx.ejs +17 -0
  225. package/hedhog/frontend/widgets/my-timesheet-status-kpi.tsx.ejs +17 -0
  226. package/hedhog/frontend/widgets/my-weekly-journey.tsx.ejs +17 -0
  227. package/hedhog/frontend/widgets/portfolio-costs-kpi.tsx.ejs +17 -0
  228. package/hedhog/frontend/widgets/portfolio-effort-kpi.tsx.ejs +17 -0
  229. package/hedhog/frontend/widgets/portfolio-projects-kpi.tsx.ejs +17 -0
  230. package/hedhog/frontend/widgets/portfolio-risk-kpi.tsx.ejs +17 -0
  231. package/hedhog/frontend/widgets/project-status-overview.tsx.ejs +17 -0
  232. package/hedhog/frontend/widgets/shared-operations-widget.tsx.ejs +170 -0
  233. package/hedhog/frontend/widgets/strategic-deadlines.tsx.ejs +17 -0
  234. package/hedhog/frontend/widgets/team-approval-queue.tsx.ejs +17 -0
  235. package/hedhog/frontend/widgets/team-capacity-kpi.tsx.ejs +17 -0
  236. package/hedhog/frontend/widgets/team-headcount-kpi.tsx.ejs +17 -0
  237. package/hedhog/frontend/widgets/team-hours-kpi.tsx.ejs +17 -0
  238. package/hedhog/frontend/widgets/team-pending-approvals-kpi.tsx.ejs +17 -0
  239. package/hedhog/frontend/widgets/team-utilization-overview.tsx.ejs +17 -0
  240. package/hedhog/frontend/widgets/team-workload-alerts.tsx.ejs +17 -0
  241. package/hedhog/table/operations_collaborator.yaml +8 -13
  242. package/hedhog/table/operations_project.yaml +1 -1
  243. package/hedhog/table/operations_project_file.yaml +23 -0
  244. package/hedhog/table/operations_task.yaml +76 -69
  245. package/hedhog/table/operations_task_activity.yaml +51 -0
  246. package/package.json +6 -5
  247. package/src/controllers/operations-projects.controller.ts +41 -8
  248. package/src/controllers/operations-tasks.controller.ts +156 -166
  249. package/src/dashboard/README.md +214 -0
  250. package/src/dashboard/components/DashboardLayout.tsx +131 -0
  251. package/src/dashboard/components/widget-registry.ts +255 -0
  252. package/src/dashboard/hooks/useDashboardData.ts +29 -0
  253. package/src/dashboard/types/widgets.types.ts +237 -0
  254. package/src/dashboard/widgets/CapacityDistribution.tsx +56 -0
  255. package/src/dashboard/widgets/EffortByProject.tsx +51 -0
  256. package/src/dashboard/widgets/HeadcountByArea.tsx +57 -0
  257. package/src/dashboard/widgets/ManagedProjectsStatus.tsx +53 -0
  258. package/src/dashboard/widgets/MyHoursPeriodKpi.tsx +87 -0
  259. package/src/dashboard/widgets/MyOpenRequestsKpi.tsx +51 -0
  260. package/src/dashboard/widgets/MyPendingRequestsList.tsx +63 -0
  261. package/src/dashboard/widgets/MyProjectAllocationsKpi.tsx +57 -0
  262. package/src/dashboard/widgets/MyQuickActions.tsx +62 -0
  263. package/src/dashboard/widgets/MyRelevantDeadlines.tsx +84 -0
  264. package/src/dashboard/widgets/MyTimesheetStatusKpi.tsx +65 -0
  265. package/src/dashboard/widgets/MyWeeklyJourney.tsx +57 -0
  266. package/src/dashboard/widgets/PortfolioCostsKpi.tsx +48 -0
  267. package/src/dashboard/widgets/PortfolioEffortKpi.tsx +41 -0
  268. package/src/dashboard/widgets/PortfolioRiskKpi.tsx +50 -0
  269. package/src/dashboard/widgets/ProjectStatusOverview.tsx +52 -0
  270. package/src/dashboard/widgets/StrategicDeadlines.tsx +93 -0
  271. package/src/dashboard/widgets/TeamApprovalQueue.tsx +70 -0
  272. package/src/dashboard/widgets/TeamCapacityKpi.tsx +50 -0
  273. package/src/dashboard/widgets/TeamHoursKpi.tsx +51 -0
  274. package/src/dashboard/widgets/TeamPendingApprovalsKpi.tsx +53 -0
  275. package/src/dashboard/widgets/TeamUtilizationOverview.tsx +62 -0
  276. package/src/dashboard/widgets/TeamWorkloadAlerts.tsx +81 -0
  277. package/src/dashboard/widgets/index.ts +26 -0
  278. package/src/dto/create-collaborator.dto.ts +4 -11
  279. package/src/index.ts +3 -0
  280. package/src/operations.service.spec.ts +988 -764
  281. package/src/operations.service.ts +4277 -2535
@@ -16,6 +16,7 @@
16
16
  "approve": "Aprovar",
17
17
  "reject": "Rejeitar",
18
18
  "submit": "Enviar",
19
+ "logHours": "Lançar horas",
19
20
  "cancel": "Cancelar",
20
21
  "loadMore": "Carregar mais",
21
22
  "clearSelection": "Limpar seleção",
@@ -24,7 +25,8 @@
24
25
  "manageTemplates": "Gerenciar templates",
25
26
  "useTemplate": "Usar template",
26
27
  "showValues": "Exibir valores",
27
- "hideValues": "Ocultar valores"
28
+ "hideValues": "Ocultar valores",
29
+ "editPersonCrm": "Editar cadastro de pessoa (CRM)"
28
30
  },
29
31
  "filters": {
30
32
  "allStatuses": "Todos os status",
@@ -32,6 +34,19 @@
32
34
  "dateFrom": "De",
33
35
  "dateTo": "Até"
34
36
  },
37
+ "taskStatus": {
38
+ "todo": "Backlog",
39
+ "doing": "Em execução",
40
+ "review": "Revisão",
41
+ "done": "Concluído"
42
+ },
43
+ "priority": {
44
+ "low": "Baixa",
45
+ "medium": "Média",
46
+ "high": "Alta"
47
+ },
48
+ "overdueLabel": "Prazo vencido:",
49
+ "responsible": "Responsável",
35
50
  "labels": {
36
51
  "notAvailable": "Não informado",
37
52
  "notAssigned": "Não atribuído",
@@ -208,7 +223,6 @@
208
223
  "description": "Crie ou atualize o perfil de workforce usado em projetos, contratos e aprovações."
209
224
  },
210
225
  "form": {
211
- "userId": "ID do usuário",
212
226
  "code": "Código",
213
227
  "displayName": "Nome exibido",
214
228
  "department": "Departamento",
@@ -218,12 +232,16 @@
218
232
  "notes": "Observações"
219
233
  },
220
234
  "messages": {
221
- "userRequired": "Um ID de usuário é obrigatório para novos colaboradores.",
222
235
  "requiredFields": "Código e nome exibido são obrigatórios.",
223
236
  "saveSuccess": "Colaborador salvo com sucesso.",
224
237
  "saveError": "Não foi possível salvar o colaborador.",
225
238
  "statusSuccess": "Status do colaborador atualizado com sucesso.",
226
239
  "statusError": "Não foi possível atualizar o status do colaborador."
240
+ },
241
+ "columns": {
242
+ "linkedUser": "Usuário",
243
+ "linkedUserYes": "Vinculado",
244
+ "linkedUserNo": "Sem usuário"
227
245
  }
228
246
  },
229
247
  "DepartmentsPage": {
@@ -310,9 +328,6 @@
310
328
  "person": "Pessoa",
311
329
  "personEntityLabel": "pessoa",
312
330
  "personDescription": "Selecione uma pessoa existente ou cadastre uma nova sem sair desta tela.",
313
- "userId": "Usuário do sistema",
314
- "userIdOptional": "Usuário do sistema (opcional)",
315
- "userIdDescription": "Vincule a conta da plataforma que este colaborador vai usar para login, apontamentos e ações de autosserviço.",
316
331
  "code": "Código",
317
332
  "displayName": "Nome exibido",
318
333
  "department": "Departamento",
@@ -341,10 +356,6 @@
341
356
  "breakMinutesDescription": "O último campo numérico define o intervalo/pausa diária em minutos. Ex.: 60 = 1 hora de almoço.",
342
357
  "autoGenerateContractDraft": "Gerar contrato rascunho automaticamente",
343
358
  "autoGenerateContractDraftDescription": "Cria um contrato rascunho relacionado, classificado pelo tipo de colaborador e vinculado à origem de contratação.",
344
- "createUserDescription": "Informe as credenciais do novo usuário do sistema. A conta será criada imediatamente e vinculada a este colaborador.",
345
- "createUserName": "Nome completo",
346
- "createUserEmail": "E-mail",
347
- "createUserPassword": "Senha",
348
359
  "compensationEffectiveDate": "Data de vigência",
349
360
  "compensationNotes": "Observações da remuneração"
350
361
  },
@@ -389,30 +400,22 @@
389
400
  "equityNotes": "Observações sobre cotas, ações, prazo ou poderes",
390
401
  "levelLabel": "Selecione um nível",
391
402
  "supervisor": "Busque um colaborador",
392
- "userIdOptional": "Selecione um usuário do sistema",
393
- "createUserName": "Nome completo",
394
- "createUserEmail": "usuario@exemplo.com",
395
- "createUserPassword": "Senha forte",
396
403
  "compensationNotes": "Observações sobre a alteração de remuneração"
397
404
  },
398
405
  "actions": {
399
- "createUser": "Criar usuário do sistema",
400
406
  "editPersonCrm": "Editar cadastro de pessoa (CRM)"
401
407
  },
402
408
  "states": {
403
409
  "loadingCollaboratorTypes": "Carregando tipos de colaborador..."
404
410
  },
405
411
  "messages": {
406
- "userRequired": "O vínculo com usuário pode ser feito depois do cadastro inicial.",
407
412
  "personRequired": "Selecione ou cadastre uma pessoa para o colaborador.",
408
413
  "collaboratorTypeRequired": "Selecione um tipo de colaborador.",
409
414
  "requiredFields": "O código do colaborador é obrigatório.",
410
415
  "createSuccess": "Colaborador criado com sucesso.",
411
416
  "createError": "Não foi possível criar o colaborador.",
412
417
  "updateSuccess": "Colaborador atualizado com sucesso.",
413
- "updateError": "Não foi possível atualizar o colaborador.",
414
- "createUserSuccess": "Usuário criado e vinculado com sucesso.",
415
- "createUserError": "Não foi possível criar o usuário do sistema."
418
+ "updateError": "Não foi possível atualizar o colaborador."
416
419
  },
417
420
  "chart": {
418
421
  "salaryHistory": "Histórico de salário",
@@ -529,14 +532,25 @@
529
532
  "totalDescription": "Todos os projetos de entrega visíveis para o seu escopo de acesso.",
530
533
  "active": "Ativos",
531
534
  "activeDescription": "Abertos para lançamentos de timesheet e trabalho da equipe.",
532
- "atRisk": "Em risco",
533
- "atRiskDescription": "Sinalizados por problemas de entrega, equipe ou orçamento.",
535
+ "completed": "Concluídos",
536
+ "completedDescription": "Projetos finalizados no ciclo de entrega.",
534
537
  "upcomingDeliveries": "Com prazo",
535
538
  "upcomingDeliveriesDescription": "Projetos com data de entrega definida."
536
539
  },
537
540
  "viewMode": "Visualização",
538
541
  "viewModeTable": "Tabela",
539
542
  "viewModeCards": "Cards",
543
+ "viewModeBoard": "Board",
544
+ "board": {
545
+ "directorOnly": "A movimentação de projetos no board é permitida apenas para diretores.",
546
+ "emptyColumn": "Sem projetos nesta coluna.",
547
+ "columns": {
548
+ "planning": "Planejamento",
549
+ "active": "Ativo",
550
+ "paused": "Pausado",
551
+ "completed": "Concluído"
552
+ }
553
+ },
540
554
  "actions": {
541
555
  "archive": "Arquivar"
542
556
  },
@@ -571,8 +585,8 @@
571
585
  "totalDescription": "Projetos em que você tem alocação.",
572
586
  "active": "Ativos",
573
587
  "activeDescription": "Projetos abertos para lançamentos de timesheet.",
574
- "atRisk": "Em risco",
575
- "atRiskDescription": "Projetos sinalizados com problemas.",
588
+ "completed": "Concluídos",
589
+ "completedDescription": "Projetos finalizados do seu escopo.",
576
590
  "upcomingDeliveries": "Com prazo",
577
591
  "upcomingDeliveriesDescription": "Projetos com data de entrega definida."
578
592
  },
@@ -647,6 +661,8 @@
647
661
  "teamDescription": "{count} colaboradores selecionados para a equipe inicial. Você pode refinar as alocações depois de salvar.",
648
662
  "financials": "Base financeira e contratual",
649
663
  "financialsDescription": "Dados financeiros, faturamento e contrato podem ser preenchidos depois que o projeto for salvo.",
664
+ "files": "Arquivos anexados",
665
+ "filesDescription": "Envie um ou vários arquivos para manter documentos e anexos do projeto centralizados.",
650
666
  "contract": "Configurações do contrato",
651
667
  "contractDescription": "Vincule um contrato existente ou configure a geração de rascunho após o primeiro salvamento do projeto.",
652
668
  "nextSteps": "Continue após salvar",
@@ -716,7 +732,6 @@
716
732
  "statuses": {
717
733
  "planning": "Planejamento",
718
734
  "active": "Ativo",
719
- "at_risk": "Em risco",
720
735
  "paused": "Pausado",
721
736
  "completed": "Concluído",
722
737
  "archived": "Arquivado"
@@ -814,24 +829,6 @@
814
829
  "warning": "Atenção",
815
830
  "danger": "Crítico"
816
831
  },
817
- "sections": {
818
- "overview": "Visão geral",
819
- "contract": "Contrato relacionado",
820
- "team": "Colaboradores vinculados",
821
- "teamDescription": "Equipe inicial e alocações em andamento associadas ao projeto.",
822
- "indicators": "Indicadores operacionais",
823
- "indicatorsDescription": "Métricas atuais de equipe e entrega do projeto.",
824
- "costs": "Custos do Projeto",
825
- "costsDescription": "Gerencie custos planejados, confirmados e cancelados associados a este projeto."
826
- },
827
- "indicators": {
828
- "activeAssignments": "Atribuições ativas",
829
- "completedAssignments": "Atribuições concluídas",
830
- "averageAllocation": "Alocação média",
831
- "totalWeeklyHours": "Total de horas semanais"
832
- },
833
- "noContract": "Ainda não existe contrato relacionado a este projeto.",
834
- "noAssignments": "Ainda não existem colaboradores vinculados a este projeto.",
835
832
  "sections": {
836
833
  "overview": "Visão geral",
837
834
  "contract": "Contrato relacionado",
@@ -850,8 +847,18 @@
850
847
  "archivedTasks": "Tarefas arquivadas",
851
848
  "archivedTasksDescription": "Consulte tarefas arquivadas do projeto, veja detalhes, desarquive ou exclua definitivamente.",
852
849
  "costs": "Custos do Projeto",
853
- "costsDescription": "Gerencie custos planejados, confirmados e cancelados associados a este projeto."
850
+ "costsDescription": "Gerencie custos planejados, confirmados e cancelados associados a este projeto.",
851
+ "files": "Arquivos do Projeto",
852
+ "filesDescription": "Gerencie arquivos e documentos anexados a este projeto."
853
+ },
854
+ "indicators": {
855
+ "activeAssignments": "Atribuições ativas",
856
+ "completedAssignments": "Atribuições concluídas",
857
+ "averageAllocation": "Alocação média",
858
+ "totalWeeklyHours": "Total de horas semanais"
854
859
  },
860
+ "noContract": "Ainda não existe contrato relacionado a este projeto.",
861
+ "noAssignments": "Ainda não existem colaboradores vinculados a este projeto.",
855
862
  "tabs": {
856
863
  "tasks": "Tarefas",
857
864
  "overview": "Visão geral",
@@ -859,8 +866,14 @@
859
866
  "team": "Equipe",
860
867
  "timeline": "Timeline",
861
868
  "archive": "Arquivadas",
862
- "costs": "Custos"
869
+ "costs": "Custos",
870
+ "files": "Arquivos"
863
871
  },
872
+ "deleteProjectButton": "Excluir projeto",
873
+ "deleteConfirmTitle": "Excluir projeto permanentemente",
874
+ "deleteConfirmDescription": "Esta ação é irreversível. O projeto e todos os seus dados serão removidos permanentemente.",
875
+ "deleteConfirmLabel": "Digite o nome do projeto para confirmar",
876
+ "deleteConfirmButton": "Excluir permanentemente",
864
877
  "charts": {
865
878
  "projectProgress": "Progresso",
866
879
  "burnup": "Burnup / progresso",
@@ -955,14 +968,18 @@
955
968
  "descriptionPlaceholder": "Descrição opcional",
956
969
  "priorityLabel": "Prioridade",
957
970
  "columnLabel": "Coluna",
971
+ "assigneeLabel": "Responsável",
958
972
  "deadlineLabel": "Prazo",
959
973
  "estimateLabel": "Estimativa (h)",
960
974
  "tagsLabel": "Etiquetas",
961
- "tagsPlaceholder": "planejamento, cliente, design (separadas por vírgula)",
975
+ "tagsPlaceholder": "Digite e pressione Enter para adicionar...",
962
976
  "attachmentsLabel": "Anexos",
963
977
  "saving": "Salvando...",
964
978
  "tabInfo": "Informações",
965
- "tabComments": "Comentários"
979
+ "tabComments": "Comentários",
980
+ "tabActivities": "Atividades",
981
+ "tabFiles": "Arquivos",
982
+ "doingTimeLabel": "Tempo em execução"
966
983
  },
967
984
  "dialogs": {
968
985
  "archiveTitle": "Arquivar tarefa",
@@ -985,6 +1002,21 @@
985
1002
  "editComment": "Não foi possível atualizar o comentário.",
986
1003
  "deleteComment": "Não foi possível excluir o comentário."
987
1004
  }
1005
+ },
1006
+ "activitiesSection": {
1007
+ "title": "Atividades",
1008
+ "noActivities": "Nenhuma atividade registrada ainda.",
1009
+ "defaultUser": "Usuário desconhecido",
1010
+ "statusChanged": "Moveu de {from} para {to}.",
1011
+ "fallbackAction": "Registrou uma atividade nesta tarefa.",
1012
+ "kpis": {
1013
+ "activities": "Atividades",
1014
+ "activitiesDescription": "Eventos registrados",
1015
+ "collaborators": "Colaboradores",
1016
+ "collaboratorsDescription": "Pessoas que interagiram",
1017
+ "executionTime": "Execução",
1018
+ "executionTimeDescription": "Tempo total acumulado"
1019
+ }
988
1020
  }
989
1021
  },
990
1022
  "ContractsPage": {
@@ -1450,6 +1482,7 @@
1450
1482
  "searchPlaceholder": "Buscar colaborador, projeto, tarefa, aprovador ou observações...",
1451
1483
  "emptyDescription": "Nenhuma timesheet corresponde aos filtros atuais.",
1452
1484
  "sheet": {
1485
+ "title": "Lançamento rápido",
1453
1486
  "createTitle": "Lançamento rápido",
1454
1487
  "editTitle": "Editar lançamento",
1455
1488
  "description": "Escolha projeto, tarefa, data e duração para registrar o trabalho com o mínimo de atrito.",
@@ -2167,6 +2200,20 @@
2167
2200
  "removeFile": "Remover arquivo"
2168
2201
  }
2169
2202
  },
2203
+ "ProjectFileAttachments": {
2204
+ "uploadError": "Erro no upload",
2205
+ "error": "Erro",
2206
+ "empty": "Nenhum arquivo anexado",
2207
+ "dropzone": {
2208
+ "ariaLabel": "Clique ou solte arquivos para anexar",
2209
+ "dragging": "Solte os arquivos aqui",
2210
+ "idle": "Clique ou arraste arquivos para anexar"
2211
+ },
2212
+ "actions": {
2213
+ "openInNewTab": "Abrir em nova aba",
2214
+ "removeFile": "Remover arquivo"
2215
+ }
2216
+ },
2170
2217
  "ReportsCollaboratorsPage": {
2171
2218
  "title": "Relatório de Colaboradores",
2172
2219
  "description": "Dashboard executivo com custo, lucro, capacidade atual e planejamento dos próximos 12 meses.",
@@ -2339,5 +2386,150 @@
2339
2386
  "recommendation": "Recomendação"
2340
2387
  }
2341
2388
  }
2389
+ },
2390
+ "MyOpenRequestsKpi": {
2391
+ "alert": "Atenção",
2392
+ "openRequests": "Solicitações abertas",
2393
+ "requests": {
2394
+ "vacation": "Férias",
2395
+ "scheduleAdjust": "Ajuste Jornada",
2396
+ "expenses": "Despesas",
2397
+ "others": "Outros"
2398
+ }
2399
+ },
2400
+ "MyQuickActions": {
2401
+ "timesheetLabel": "Registrar Timesheet",
2402
+ "requestLabel": "Nova Solicitação",
2403
+ "vacationLabel": "Solicitar Férias",
2404
+ "expenseLabel": "Lançar Despesa",
2405
+ "tipsTitle": "💡 Dicas úteis:",
2406
+ "tips": {
2407
+ "timesheet": "✓ Complete seu timesheet toda semana",
2408
+ "vacation": "✓ Solicite férias com antecedência",
2409
+ "expense": "✓ Registre despesas no prazo"
2410
+ }
2411
+ },
2412
+ "ProjectStatusOverview": {
2413
+ "totalProjects": "Total de Projetos",
2414
+ "statuses": {
2415
+ "planning": "Planejamento",
2416
+ "inProgress": "Em Progresso",
2417
+ "review": "Em Revisão",
2418
+ "completed": "Concluído",
2419
+ "onHold": "Suspenso"
2420
+ }
2421
+ },
2422
+ "TeamUtilizationOverview": {
2423
+ "totalCollaborators": "Total de Colaboradores",
2424
+ "overUtilizedAlert": "{count} colaborador(es) sobre-utilizado(s)",
2425
+ "rebalanceRecommendation": "Considere rebalanceamento de projetos",
2426
+ "categories": {
2427
+ "overUtilized": "Sobre-utilizado",
2428
+ "wellUtilized": "Bem utilizado",
2429
+ "underUtilized": "Sub-utilizado",
2430
+ "idle": "Inativo"
2431
+ }
2432
+ },
2433
+ "CapacityDistribution": {
2434
+ "empty": "Nenhuma área com capacidade",
2435
+ "total": "Capacidade Total"
2436
+ },
2437
+ "EffortByProject": {
2438
+ "empty": "Nenhum projeto com esforço",
2439
+ "total": "Esforço Total"
2440
+ },
2441
+ "HeadcountByArea": {
2442
+ "empty": "Nenhuma área com colaboradores",
2443
+ "totalCollaborators": "Total de Colaboradores"
2444
+ },
2445
+ "ManagedProjectsStatus": {
2446
+ "title": "Saúde dos Projetos",
2447
+ "onSchedule": "No Prazo",
2448
+ "atRisk": "Em Risco",
2449
+ "delayed": "Atrasado",
2450
+ "done": "Concluído",
2451
+ "distribution": "Distribuição",
2452
+ "supervision": "projetos sob supervisão"
2453
+ },
2454
+ "MyProjectAllocationsKpi": {
2455
+ "activeProjects": "Projetos ativos",
2456
+ "capacity": "Capacidade"
2457
+ },
2458
+ "MyRelevantDeadlines": {
2459
+ "empty": "Nenhum prazo crítico",
2460
+ "overdue": "Vencido"
2461
+ },
2462
+ "PortfolioCostsKpi": {
2463
+ "label": "Custos Totais",
2464
+ "trend": "Tendência",
2465
+ "decreasing": "Reduzindo",
2466
+ "increasing": "Aumentando",
2467
+ "stable": "Estável",
2468
+ "budgetUtilization": "Utilização do Orçamento",
2469
+ "spent": "R$ {value}k gasto",
2470
+ "budgeted": "R$ {value}k orçado",
2471
+ "savings": "Economias"
2472
+ },
2473
+ "PortfolioEffortKpi": {
2474
+ "label": "Esforço Total",
2475
+ "available": "Disponível",
2476
+ "utilizationRate": "Taxa de Utilização",
2477
+ "allocated": "Alocado",
2478
+ "highDemand": "⚠️ Portfólio com alta demanda",
2479
+ "balanced": "✓ Utilização equilibrada",
2480
+ "availableCapacity": "📊 Capacidade disponível"
2481
+ },
2482
+ "PortfolioRiskKpi": {
2483
+ "label": "Riscos Identificados",
2484
+ "trendLabel": "Tendência:",
2485
+ "increasing": "📈 Aumentando",
2486
+ "decreasing": "📉 Reduzindo",
2487
+ "stable": "➡️ Estável",
2488
+ "critical": "🔴 Crítico",
2489
+ "high": "🟠 Alto",
2490
+ "medium": "🟡 Médio",
2491
+ "urgentAttention": "⚠️ Requer atenção imediata"
2492
+ },
2493
+ "StrategicDeadlines": {
2494
+ "empty": "Nenhum prazo crítico"
2495
+ },
2496
+ "TeamApprovalQueue": {
2497
+ "typeLabels": {
2498
+ "timesheet": "Timesheet",
2499
+ "expense": "Despesa",
2500
+ "vacation": "Férias",
2501
+ "schedule": "Ajuste"
2502
+ },
2503
+ "empty": "Fila de aprovações vazia"
2504
+ },
2505
+ "TeamCapacityKpi": {
2506
+ "available": "Disponível",
2507
+ "critical": "Crítica",
2508
+ "high": "Alta",
2509
+ "great": "Ótima",
2510
+ "normal": "Normal",
2511
+ "utilization": "Utilização",
2512
+ "allocated": "{hours}h alocado",
2513
+ "total": "{hours}h total",
2514
+ "status": "Status"
2515
+ },
2516
+ "TeamHoursKpi": {
2517
+ "averagePerPerson": "Média/Pessoa",
2518
+ "goalVariation": "Variação da Meta",
2519
+ "registeredHours": "Horas Registradas",
2520
+ "registered": "{hours}h registrado",
2521
+ "goal": "{hours}h meta",
2522
+ "collaborators": "Colaboradores"
2523
+ },
2524
+ "TeamPendingApprovalsKpi": {
2525
+ "label": "Aguardando Aprovação",
2526
+ "requests": "Solicitações",
2527
+ "urgent": "Urgentes:",
2528
+ "avgTime": "Tempo médio:",
2529
+ "days": "{count} dias"
2530
+ },
2531
+ "TeamWorkloadAlerts": {
2532
+ "empty": "Nenhum alerta crítico",
2533
+ "lastUpdated": "Última atualização: há 5 min"
2342
2534
  }
2343
2535
  }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='capacity-distribution' />;
17
+ }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='effort-by-project' />;
17
+ }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='headcount-by-area' />;
17
+ }
@@ -0,0 +1,25 @@
1
+ export { default as MyHoursPeriodKpi } from './operations.my-hours-period-kpi';
2
+ export { default as MyTimesheetStatusKpi } from './operations.my-timesheet-status-kpi';
3
+ export { default as MyProjectAllocationsKpi } from './operations.my-project-allocations-kpi';
4
+ export { default as MyOpenRequestsKpi } from './operations.my-open-requests-kpi';
5
+ export { default as MyWeeklyJourney } from './operations.my-weekly-journey';
6
+ export { default as MyRelevantDeadlines } from './operations.my-relevant-deadlines';
7
+ export { default as MyPendingRequestsList } from './operations.my-pending-requests-list';
8
+ export { default as MyQuickActions } from './operations.my-quick-actions';
9
+ export { default as TeamHeadcountKpi } from './operations.team-headcount-kpi';
10
+ export { default as TeamPendingApprovalsKpi } from './operations.team-pending-approvals-kpi';
11
+ export { default as TeamHoursKpi } from './operations.team-hours-kpi';
12
+ export { default as TeamCapacityKpi } from './operations.team-capacity-kpi';
13
+ export { default as TeamUtilizationOverview } from './operations.team-utilization-overview';
14
+ export { default as TeamWorkloadAlerts } from './operations.team-workload-alerts';
15
+ export { default as ManagedProjectsStatus } from './operations.managed-projects-status';
16
+ export { default as TeamApprovalQueue } from './operations.team-approval-queue';
17
+ export { default as PortfolioProjectsKpi } from './operations.portfolio-projects-kpi';
18
+ export { default as PortfolioCostsKpi } from './operations.portfolio-costs-kpi';
19
+ export { default as PortfolioEffortKpi } from './operations.portfolio-effort-kpi';
20
+ export { default as PortfolioRiskKpi } from './operations.portfolio-risk-kpi';
21
+ export { default as ProjectStatusOverview } from './operations.project-status-overview';
22
+ export { default as EffortByProject } from './operations.effort-by-project';
23
+ export { default as CapacityDistribution } from './operations.capacity-distribution';
24
+ export { default as HeadcountByArea } from './operations.headcount-by-area';
25
+ export { default as StrategicDeadlines } from './operations.strategic-deadlines';
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='managed-projects-status' />;
17
+ }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='my-hours-period-kpi' />;
17
+ }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='my-open-requests-kpi' />;
17
+ }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='my-pending-requests-list' />;
17
+ }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='my-project-allocations-kpi' />;
17
+ }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='my-quick-actions' />;
17
+ }
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import SharedOperationsWidget from './operations.shared-operations-widget';
4
+
5
+ interface WidgetLayoutLike {
6
+ name?: string;
7
+ slug?: string;
8
+ }
9
+
10
+ interface OperationsWidgetProps {
11
+ widget?: WidgetLayoutLike;
12
+ onRemove?: () => void;
13
+ }
14
+
15
+ export default function OperationsWidget(props: OperationsWidgetProps) {
16
+ return <SharedOperationsWidget {...props} slug='my-relevant-deadlines' />;
17
+ }