@hed-hog/operations 0.0.329 → 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 (290) 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 +30 -5
  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 +178 -264
  146. package/dist/operations.service.d.ts.map +1 -1
  147. package/dist/operations.service.js +2170 -1340
  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_component_role.yaml +8 -8
  153. package/hedhog/data/dashboard_item.yaml +25 -25
  154. package/hedhog/data/dashboard_role.yaml +1 -1
  155. package/hedhog/data/menu.yaml +6 -16
  156. package/hedhog/data/role.yaml +1 -1
  157. package/hedhog/data/route.yaml +116 -55
  158. package/hedhog/frontend/app/_components/async-options-combobox.tsx.ejs +15 -9
  159. package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +39 -99
  160. package/hedhog/frontend/app/_components/collaborator-picker.tsx.ejs +158 -0
  161. package/hedhog/frontend/app/_components/my-project-summary-screen.tsx.ejs +314 -116
  162. package/hedhog/frontend/app/_components/project-assignments-tab.tsx.ejs +434 -449
  163. package/hedhog/frontend/app/_components/project-costs-section.tsx.ejs +51 -81
  164. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +328 -423
  165. package/hedhog/frontend/app/_components/project-file-attachments.tsx.ejs +371 -0
  166. package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +446 -377
  167. package/hedhog/frontend/app/_components/task-detail-sheet.tsx.ejs +803 -581
  168. package/hedhog/frontend/app/_components/task-file-attachments.tsx.ejs +14 -9
  169. package/hedhog/frontend/app/_components/task-form-fields.tsx.ejs +406 -0
  170. package/hedhog/frontend/app/_components/task-form-sheet.tsx.ejs +629 -784
  171. package/hedhog/frontend/app/_components/task-info-display.tsx.ejs +137 -0
  172. package/hedhog/frontend/app/_components/timesheet-entry-create-sheet.tsx.ejs +306 -0
  173. package/hedhog/frontend/app/_lib/api.ts.ejs +480 -476
  174. package/hedhog/frontend/app/_lib/hooks/use-values-visibility.ts.ejs +61 -0
  175. package/hedhog/frontend/app/_lib/types.ts.ejs +66 -5
  176. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +0 -2
  177. package/hedhog/frontend/app/_lib/utils/task-ui.ts.ejs +43 -0
  178. package/hedhog/frontend/app/approvals/page.tsx.ejs +11 -2
  179. package/hedhog/frontend/app/collaborator-types/page.tsx.ejs +6 -1
  180. package/hedhog/frontend/app/collaborators/page.tsx.ejs +127 -42
  181. package/hedhog/frontend/app/contracts/page.tsx.ejs +29 -8
  182. package/hedhog/frontend/app/dashboard/widgets/CapacityDistribution.tsx.ejs +84 -0
  183. package/hedhog/frontend/app/dashboard/widgets/EffortByProject.tsx.ejs +85 -0
  184. package/hedhog/frontend/app/dashboard/widgets/HeadcountByArea.tsx.ejs +101 -0
  185. package/hedhog/frontend/app/dashboard/widgets/ManagedProjectsStatus.tsx.ejs +113 -0
  186. package/hedhog/frontend/app/dashboard/widgets/MyHoursPeriodKpi.tsx.ejs +87 -0
  187. package/hedhog/frontend/app/dashboard/widgets/MyOpenRequestsKpi.tsx.ejs +97 -0
  188. package/hedhog/frontend/app/dashboard/widgets/MyPendingRequestsList.tsx.ejs +99 -0
  189. package/hedhog/frontend/app/dashboard/widgets/MyProjectAllocationsKpi.tsx.ejs +78 -0
  190. package/hedhog/frontend/app/dashboard/widgets/MyQuickActions.tsx.ejs +130 -0
  191. package/hedhog/frontend/app/dashboard/widgets/MyRelevantDeadlines.tsx.ejs +144 -0
  192. package/hedhog/frontend/app/dashboard/widgets/MyTimesheetStatusKpi.tsx.ejs +78 -0
  193. package/hedhog/frontend/app/dashboard/widgets/MyWeeklyJourney.tsx.ejs +99 -0
  194. package/hedhog/frontend/app/dashboard/widgets/PortfolioCostsKpi.tsx.ejs +112 -0
  195. package/hedhog/frontend/app/dashboard/widgets/PortfolioEffortKpi.tsx.ejs +93 -0
  196. package/hedhog/frontend/app/dashboard/widgets/PortfolioProjectsKpi.tsx.ejs +96 -0
  197. package/hedhog/frontend/app/dashboard/widgets/PortfolioRiskKpi.tsx.ejs +115 -0
  198. package/hedhog/frontend/app/dashboard/widgets/ProjectStatusOverview.tsx.ejs +120 -0
  199. package/hedhog/frontend/app/dashboard/widgets/StrategicDeadlines.tsx.ejs +146 -0
  200. package/hedhog/frontend/app/dashboard/widgets/TeamApprovalQueue.tsx.ejs +108 -0
  201. package/hedhog/frontend/app/dashboard/widgets/TeamCapacityKpi.tsx.ejs +97 -0
  202. package/hedhog/frontend/app/dashboard/widgets/TeamHeadcountKpi.tsx.ejs +100 -0
  203. package/hedhog/frontend/app/dashboard/widgets/TeamHoursKpi.tsx.ejs +104 -0
  204. package/hedhog/frontend/app/dashboard/widgets/TeamPendingApprovalsKpi.tsx.ejs +110 -0
  205. package/hedhog/frontend/app/dashboard/widgets/TeamUtilizationOverview.tsx.ejs +115 -0
  206. package/hedhog/frontend/app/dashboard/widgets/TeamWorkloadAlerts.tsx.ejs +117 -0
  207. package/hedhog/frontend/app/dashboard/widgets/index.ts.ejs +26 -0
  208. package/hedhog/frontend/app/departments/page.tsx.ejs +6 -1
  209. package/hedhog/frontend/app/my-projects/page.tsx.ejs +59 -16
  210. package/hedhog/frontend/app/my-tasks/page.tsx.ejs +329 -106
  211. package/hedhog/frontend/app/project-cost-categories/page.tsx.ejs +58 -52
  212. package/hedhog/frontend/app/project-cost-types/page.tsx.ejs +58 -51
  213. package/hedhog/frontend/app/projects/page.tsx.ejs +436 -35
  214. package/hedhog/frontend/app/reports/collaborators/page.tsx.ejs +65 -52
  215. package/hedhog/frontend/app/reports/projects/page.tsx.ejs +80 -82
  216. package/hedhog/frontend/app/schedule-adjustments/page.tsx.ejs +13 -2
  217. package/hedhog/frontend/app/time-off/page.tsx.ejs +6 -1
  218. package/hedhog/frontend/app/timesheets/page.tsx.ejs +10 -4
  219. package/hedhog/frontend/messages/en.json +460 -61
  220. package/hedhog/frontend/messages/operations/en.json +61 -52
  221. package/hedhog/frontend/messages/operations/pt.json +59 -43
  222. package/hedhog/frontend/messages/pt.json +460 -61
  223. package/hedhog/frontend/widgets/capacity-distribution.tsx.ejs +17 -0
  224. package/hedhog/frontend/widgets/effort-by-project.tsx.ejs +17 -0
  225. package/hedhog/frontend/widgets/headcount-by-area.tsx.ejs +17 -0
  226. package/hedhog/frontend/widgets/index.ts.ejs +25 -0
  227. package/hedhog/frontend/widgets/managed-projects-status.tsx.ejs +17 -0
  228. package/hedhog/frontend/widgets/my-hours-period-kpi.tsx.ejs +17 -0
  229. package/hedhog/frontend/widgets/my-open-requests-kpi.tsx.ejs +17 -0
  230. package/hedhog/frontend/widgets/my-pending-requests-list.tsx.ejs +17 -0
  231. package/hedhog/frontend/widgets/my-project-allocations-kpi.tsx.ejs +17 -0
  232. package/hedhog/frontend/widgets/my-quick-actions.tsx.ejs +17 -0
  233. package/hedhog/frontend/widgets/my-relevant-deadlines.tsx.ejs +17 -0
  234. package/hedhog/frontend/widgets/my-timesheet-status-kpi.tsx.ejs +17 -0
  235. package/hedhog/frontend/widgets/my-weekly-journey.tsx.ejs +17 -0
  236. package/hedhog/frontend/widgets/portfolio-costs-kpi.tsx.ejs +17 -0
  237. package/hedhog/frontend/widgets/portfolio-effort-kpi.tsx.ejs +17 -0
  238. package/hedhog/frontend/widgets/portfolio-projects-kpi.tsx.ejs +17 -0
  239. package/hedhog/frontend/widgets/portfolio-risk-kpi.tsx.ejs +17 -0
  240. package/hedhog/frontend/widgets/project-status-overview.tsx.ejs +17 -0
  241. package/hedhog/frontend/widgets/shared-operations-widget.tsx.ejs +170 -0
  242. package/hedhog/frontend/widgets/strategic-deadlines.tsx.ejs +17 -0
  243. package/hedhog/frontend/widgets/team-approval-queue.tsx.ejs +17 -0
  244. package/hedhog/frontend/widgets/team-capacity-kpi.tsx.ejs +17 -0
  245. package/hedhog/frontend/widgets/team-headcount-kpi.tsx.ejs +17 -0
  246. package/hedhog/frontend/widgets/team-hours-kpi.tsx.ejs +17 -0
  247. package/hedhog/frontend/widgets/team-pending-approvals-kpi.tsx.ejs +17 -0
  248. package/hedhog/frontend/widgets/team-utilization-overview.tsx.ejs +17 -0
  249. package/hedhog/frontend/widgets/team-workload-alerts.tsx.ejs +17 -0
  250. package/hedhog/table/operations_collaborator.yaml +8 -13
  251. package/hedhog/table/operations_project.yaml +1 -1
  252. package/hedhog/table/operations_project_file.yaml +23 -0
  253. package/hedhog/table/operations_task.yaml +76 -69
  254. package/hedhog/table/operations_task_activity.yaml +51 -0
  255. package/package.json +7 -6
  256. package/src/controllers/operations-projects.controller.ts +41 -8
  257. package/src/controllers/operations-tasks.controller.ts +156 -166
  258. package/src/dashboard/README.md +214 -0
  259. package/src/dashboard/components/DashboardLayout.tsx +131 -0
  260. package/src/dashboard/components/widget-registry.ts +255 -0
  261. package/src/dashboard/hooks/useDashboardData.ts +29 -0
  262. package/src/dashboard/types/widgets.types.ts +237 -0
  263. package/src/dashboard/widgets/CapacityDistribution.tsx +56 -0
  264. package/src/dashboard/widgets/EffortByProject.tsx +51 -0
  265. package/src/dashboard/widgets/HeadcountByArea.tsx +57 -0
  266. package/src/dashboard/widgets/ManagedProjectsStatus.tsx +53 -0
  267. package/src/dashboard/widgets/MyHoursPeriodKpi.tsx +87 -0
  268. package/src/dashboard/widgets/MyOpenRequestsKpi.tsx +51 -0
  269. package/src/dashboard/widgets/MyPendingRequestsList.tsx +63 -0
  270. package/src/dashboard/widgets/MyProjectAllocationsKpi.tsx +57 -0
  271. package/src/dashboard/widgets/MyQuickActions.tsx +62 -0
  272. package/src/dashboard/widgets/MyRelevantDeadlines.tsx +84 -0
  273. package/src/dashboard/widgets/MyTimesheetStatusKpi.tsx +65 -0
  274. package/src/dashboard/widgets/MyWeeklyJourney.tsx +57 -0
  275. package/src/dashboard/widgets/PortfolioCostsKpi.tsx +48 -0
  276. package/src/dashboard/widgets/PortfolioEffortKpi.tsx +41 -0
  277. package/src/dashboard/widgets/PortfolioRiskKpi.tsx +50 -0
  278. package/src/dashboard/widgets/ProjectStatusOverview.tsx +52 -0
  279. package/src/dashboard/widgets/StrategicDeadlines.tsx +93 -0
  280. package/src/dashboard/widgets/TeamApprovalQueue.tsx +70 -0
  281. package/src/dashboard/widgets/TeamCapacityKpi.tsx +50 -0
  282. package/src/dashboard/widgets/TeamHoursKpi.tsx +51 -0
  283. package/src/dashboard/widgets/TeamPendingApprovalsKpi.tsx +53 -0
  284. package/src/dashboard/widgets/TeamUtilizationOverview.tsx +62 -0
  285. package/src/dashboard/widgets/TeamWorkloadAlerts.tsx +81 -0
  286. package/src/dashboard/widgets/index.ts +26 -0
  287. package/src/dto/create-collaborator.dto.ts +4 -11
  288. package/src/index.ts +3 -0
  289. package/src/operations.service.spec.ts +988 -764
  290. package/src/operations.service.ts +4300 -2538
@@ -1,11 +1,8 @@
1
- columns:
2
- - type: pk
3
- - name: user_id
4
- type: int
5
- isNullable: true
6
- - name: person_id
7
- type: fk
8
- isNullable: true
1
+ columns:
2
+ - type: pk
3
+ - name: person_id
4
+ type: fk
5
+ isNullable: true
9
6
  references:
10
7
  table: person
11
8
  column: id
@@ -86,11 +83,9 @@ columns:
86
83
  - type: created_at
87
84
  - type: updated_at
88
85
 
89
- indices:
90
- - columns: [user_id]
91
- isUnique: true
92
- - columns: [person_id]
93
- isUnique: true
86
+ indices:
87
+ - columns: [person_id]
88
+ isUnique: true
94
89
  - columns: [code]
95
90
  isUnique: true
96
91
  - columns: [collaborator_type_id]
@@ -39,7 +39,7 @@ columns:
39
39
  isNullable: true
40
40
  - name: status
41
41
  type: enum
42
- values: [planning, active, at_risk, paused, completed, archived]
42
+ values: [planning, active, paused, completed, archived]
43
43
  default: planning
44
44
  - name: progress_percent
45
45
  type: decimal
@@ -0,0 +1,23 @@
1
+ columns:
2
+ - type: pk
3
+ - name: operations_project_id
4
+ type: fk
5
+ references:
6
+ table: operations_project
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: file_id
11
+ type: fk
12
+ isNullable: true
13
+ references:
14
+ table: file
15
+ column: id
16
+ onDelete: SET NULL
17
+ onUpdate: CASCADE
18
+ - type: created_at
19
+ - type: updated_at
20
+
21
+ indices:
22
+ - columns: [operations_project_id]
23
+ - columns: [file_id]
@@ -1,69 +1,76 @@
1
- columns:
2
- - type: pk
3
- - name: project_id
4
- type: fk
5
- isNullable: true
6
- references:
7
- table: operations_project
8
- column: id
9
- onDelete: CASCADE
10
- onUpdate: CASCADE
11
- - name: project_assignment_id
12
- type: fk
13
- isNullable: true
14
- references:
15
- table: operations_project_assignment
16
- column: id
17
- onDelete: SET NULL
18
- onUpdate: CASCADE
19
- - name: assignee_collaborator_id
20
- type: fk
21
- isNullable: true
22
- references:
23
- table: operations_collaborator
24
- column: id
25
- onDelete: SET NULL
26
- onUpdate: CASCADE
27
- - name: name
28
- type: varchar
29
- length: 180
30
- - name: description
31
- type: text
32
- isNullable: true
33
- - name: priority
34
- type: enum
35
- values: [low, medium, high]
36
- default: medium
37
- - name: status
38
- type: enum
39
- values: [todo, doing, review, done]
40
- default: todo
41
- - name: due_date
42
- type: date
43
- isNullable: true
44
- - name: estimate_hours
45
- type: decimal
46
- precision: 6
47
- scale: 2
48
- isNullable: true
49
- - name: position
50
- type: int
51
- default: 0
52
- - name: tags
53
- type: text
54
- isNullable: true
55
- - name: deleted_at
56
- type: datetime
57
- isNullable: true
58
- - type: created_at
59
- - type: updated_at
60
-
61
- indices:
62
- - columns: [project_id]
63
- - columns: [project_assignment_id]
64
- - columns: [assignee_collaborator_id]
65
- - columns: [status]
66
- - columns: [priority]
67
- - columns: [due_date]
68
- - columns: [project_id, status]
69
- - columns: [deleted_at]
1
+ columns:
2
+ - type: pk
3
+ - name: project_id
4
+ type: fk
5
+ isNullable: true
6
+ references:
7
+ table: operations_project
8
+ column: id
9
+ onDelete: CASCADE
10
+ onUpdate: CASCADE
11
+ - name: project_assignment_id
12
+ type: fk
13
+ isNullable: true
14
+ references:
15
+ table: operations_project_assignment
16
+ column: id
17
+ onDelete: SET NULL
18
+ onUpdate: CASCADE
19
+ - name: assignee_collaborator_id
20
+ type: fk
21
+ isNullable: true
22
+ references:
23
+ table: operations_collaborator
24
+ column: id
25
+ onDelete: SET NULL
26
+ onUpdate: CASCADE
27
+ - name: name
28
+ type: varchar
29
+ length: 180
30
+ - name: description
31
+ type: text
32
+ isNullable: true
33
+ - name: priority
34
+ type: enum
35
+ values: [low, medium, high]
36
+ default: medium
37
+ - name: status
38
+ type: enum
39
+ values: [todo, doing, review, done]
40
+ default: todo
41
+ - name: due_date
42
+ type: date
43
+ isNullable: true
44
+ - name: estimate_hours
45
+ type: decimal
46
+ precision: 6
47
+ scale: 2
48
+ isNullable: true
49
+ - name: position
50
+ type: int
51
+ default: 0
52
+ - name: tags
53
+ type: text
54
+ isNullable: true
55
+ - name: doing_started_at
56
+ type: datetime
57
+ isNullable: true
58
+ - name: total_doing_minutes
59
+ type: int
60
+ default: 0
61
+ - name: deleted_at
62
+ type: datetime
63
+ isNullable: true
64
+ - type: created_at
65
+ - type: updated_at
66
+
67
+ indices:
68
+ - columns: [project_id]
69
+ - columns: [project_assignment_id]
70
+ - columns: [assignee_collaborator_id]
71
+ - columns: [status]
72
+ - columns: [priority]
73
+ - columns: [due_date]
74
+ - columns: [project_id, status]
75
+ - columns: [doing_started_at]
76
+ - columns: [deleted_at]
@@ -0,0 +1,51 @@
1
+ columns:
2
+ - type: pk
3
+ - name: task_id
4
+ type: fk
5
+ references:
6
+ table: operations_task
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: actor_collaborator_id
11
+ type: fk
12
+ isNullable: true
13
+ references:
14
+ table: operations_collaborator
15
+ column: id
16
+ onDelete: SET NULL
17
+ onUpdate: CASCADE
18
+ - name: action
19
+ type: enum
20
+ values:
21
+ [
22
+ status_changed,
23
+ task_created,
24
+ task_deleted,
25
+ task_restored,
26
+ assignee_changed,
27
+ priority_changed,
28
+ due_date_changed,
29
+ name_changed,
30
+ description_changed,
31
+ comment_added,
32
+ comment_updated,
33
+ comment_removed,
34
+ file_added,
35
+ file_removed,
36
+ ]
37
+ default: status_changed
38
+ - name: from_status
39
+ type: enum
40
+ values: [todo, doing, review, done]
41
+ isNullable: true
42
+ - name: to_status
43
+ type: enum
44
+ values: [todo, doing, review, done]
45
+ isNullable: true
46
+ - type: created_at
47
+
48
+ indices:
49
+ - columns: [task_id]
50
+ - columns: [actor_collaborator_id]
51
+ - columns: [created_at]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/operations",
3
- "version": "0.0.329",
3
+ "version": "0.0.331",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "dependencies": {
@@ -9,13 +9,14 @@
9
9
  "@nestjs/core": "^11",
10
10
  "@nestjs/jwt": "^11",
11
11
  "@nestjs/mapped-types": "*",
12
- "@hed-hog/api": "0.0.8",
13
- "@hed-hog/api-prisma": "0.0.6",
14
- "@hed-hog/api-pagination": "0.0.7",
12
+ "lucide-react": "^0.562.0",
15
13
  "@hed-hog/api-locale": "0.0.14",
16
- "@hed-hog/core": "0.0.329",
17
14
  "@hed-hog/api-types": "0.0.1",
18
- "@hed-hog/contact": "0.0.329"
15
+ "@hed-hog/api-pagination": "0.0.7",
16
+ "@hed-hog/api": "0.0.8",
17
+ "@hed-hog/api-prisma": "0.0.6",
18
+ "@hed-hog/contact": "0.0.331",
19
+ "@hed-hog/core": "0.0.331"
19
20
  },
20
21
  "exports": {
21
22
  ".": {
@@ -1,14 +1,18 @@
1
1
  import { Role, User } from '@hed-hog/api';
2
2
  import {
3
- Body,
4
- Controller,
5
- Get,
6
- Param,
7
- ParseIntPipe,
8
- Patch,
9
- Post,
10
- Query,
3
+ Body,
4
+ Controller,
5
+ Delete,
6
+ Get,
7
+ Param,
8
+ ParseIntPipe,
9
+ Patch,
10
+ Post,
11
+ Query,
12
+ UploadedFile,
13
+ UseInterceptors,
11
14
  } from '@nestjs/common';
15
+ import { FileInterceptor } from '@nestjs/platform-express';
12
16
  import { ListMyProjectsDto } from '../dto/list-my-projects.dto';
13
17
  import { ListOperationsProjectOptionsDto } from '../dto/list-project-options.dto';
14
18
  import { ListProjectsDto } from '../dto/list-projects.dto';
@@ -64,4 +68,33 @@ export class OperationsProjectsController {
64
68
  updateProject(@User() user, @Param('id', ParseIntPipe) id: number, @Body() data) {
65
69
  return this.operationsService.updateProject(Number(user?.id || 0), id, data);
66
70
  }
71
+
72
+ @Delete('projects/:id')
73
+ deleteProject(@User() user, @Param('id', ParseIntPipe) id: number) {
74
+ return this.operationsService.deleteProject(Number(user?.id || 0), id);
75
+ }
76
+
77
+ @Get('projects/:id/files')
78
+ listProjectFiles(@User() user, @Param('id', ParseIntPipe) id: number) {
79
+ return this.operationsService.listProjectFiles(Number(user?.id || 0), id);
80
+ }
81
+
82
+ @Post('projects/:id/files')
83
+ @UseInterceptors(FileInterceptor('file'))
84
+ addProjectFile(
85
+ @User() user,
86
+ @Param('id', ParseIntPipe) id: number,
87
+ @UploadedFile() file: MulterFile,
88
+ ) {
89
+ return this.operationsService.addProjectFile(Number(user?.id || 0), id, file);
90
+ }
91
+
92
+ @Delete('projects/:id/files/:fileRelationId')
93
+ removeProjectFile(
94
+ @User() user,
95
+ @Param('id', ParseIntPipe) id: number,
96
+ @Param('fileRelationId', ParseIntPipe) fileRelationId: number,
97
+ ) {
98
+ return this.operationsService.removeProjectFile(Number(user?.id || 0), id, fileRelationId);
99
+ }
67
100
  }
@@ -1,166 +1,156 @@
1
- import { Role, User } from '@hed-hog/api';
2
- import {
3
- Body,
4
- Controller,
5
- Delete,
6
- Get,
7
- Param,
8
- ParseIntPipe,
9
- Patch,
10
- Post,
11
- Query,
12
- UploadedFile,
13
- UseInterceptors,
14
- } from '@nestjs/common';
15
- import { FileInterceptor } from '@nestjs/platform-express';
16
- import { CreateOperationsTaskDto } from '../dto/create-task.dto';
17
- import { ListMyTasksDto } from '../dto/list-my-tasks.dto';
18
- import { ListOperationsTasksDto } from '../dto/list-tasks.dto';
19
- import { UpdateOperationsTaskDto } from '../dto/update-task.dto';
20
- import { OperationsService } from '../operations.service';
21
-
22
- @Role()
23
- @Controller('operations')
24
- export class OperationsTasksController {
25
- constructor(private readonly operationsService: OperationsService) {}
26
-
27
- @Get('tasks')
28
- listTasks(
29
- @User() user,
30
- @Query() paginationParams: ListOperationsTasksDto,
31
- ) {
32
- return this.operationsService.listTasks(
33
- Number(user?.id || 0),
34
- paginationParams,
35
- );
36
- }
37
-
38
- @Get('my-tasks')
39
- listMyTasks(
40
- @User() user,
41
- @Query() paginationParams: ListMyTasksDto,
42
- ) {
43
- return this.operationsService.listMyTasks(
44
- Number(user?.id || 0),
45
- paginationParams,
46
- );
47
- }
48
-
49
- @Get('projects/:id/tasks')
50
- listProjectBoardTasks(
51
- @User() user,
52
- @Param('id', ParseIntPipe) id: number,
53
- ) {
54
- return this.operationsService.listProjectBoardTasks(
55
- Number(user?.id || 0),
56
- id,
57
- );
58
- }
59
-
60
- @Post('tasks')
61
- createTask(@User() user, @Body() data: CreateOperationsTaskDto) {
62
- return this.operationsService.createTask(Number(user?.id || 0), data);
63
- }
64
-
65
- @Patch('tasks/:id')
66
- updateTask(
67
- @User() user,
68
- @Param('id', ParseIntPipe) id: number,
69
- @Body() data: UpdateOperationsTaskDto,
70
- ) {
71
- return this.operationsService.updateTask(Number(user?.id || 0), id, data);
72
- }
73
-
74
- @Delete('tasks/:id')
75
- removeTask(
76
- @User() user,
77
- @Param('id', ParseIntPipe) id: number,
78
- @Query('permanent') permanent?: string,
79
- ) {
80
- return this.operationsService.removeTask(
81
- Number(user?.id || 0),
82
- id,
83
- permanent === 'true'
84
- );
85
- }
86
-
87
- @Get('tasks/:id/files')
88
- listTaskFiles(
89
- @User() user,
90
- @Param('id', ParseIntPipe) id: number,
91
- ) {
92
- return this.operationsService.listTaskFiles(Number(user?.id || 0), id);
93
- }
94
-
95
- @Post('tasks/:id/files')
96
- @UseInterceptors(FileInterceptor('file'))
97
- addTaskFile(
98
- @User() user,
99
- @Param('id', ParseIntPipe) id: number,
100
- @UploadedFile() file: MulterFile,
101
- ) {
102
- return this.operationsService.addTaskFile(Number(user?.id || 0), id, file);
103
- }
104
-
105
- @Delete('tasks/:id/files/:fileRelationId')
106
- removeTaskFile(
107
- @User() user,
108
- @Param('id', ParseIntPipe) id: number,
109
- @Param('fileRelationId', ParseIntPipe) fileRelationId: number,
110
- ) {
111
- return this.operationsService.removeTaskFile(
112
- Number(user?.id || 0),
113
- id,
114
- fileRelationId
115
- );
116
- }
117
-
118
- @Get('tasks/:id/comments')
119
- listTaskComments(
120
- @User() user,
121
- @Param('id', ParseIntPipe) id: number,
122
- ) {
123
- return this.operationsService.listTaskComments(Number(user?.id || 0), id);
124
- }
125
-
126
- @Post('tasks/:id/comments')
127
- addTaskComment(
128
- @User() user,
129
- @Param('id', ParseIntPipe) id: number,
130
- @Body('content') content: string,
131
- ) {
132
- return this.operationsService.addTaskComment(
133
- Number(user?.id || 0),
134
- id,
135
- content
136
- );
137
- }
138
-
139
- @Patch('tasks/:taskId/comments/:commentId')
140
- updateTaskComment(
141
- @User() user,
142
- @Param('taskId', ParseIntPipe) taskId: number,
143
- @Param('commentId', ParseIntPipe) commentId: number,
144
- @Body('content') content: string,
145
- ) {
146
- return this.operationsService.updateTaskComment(
147
- Number(user?.id || 0),
148
- taskId,
149
- commentId,
150
- content
151
- );
152
- }
153
-
154
- @Delete('tasks/:taskId/comments/:commentId')
155
- removeTaskComment(
156
- @User() user,
157
- @Param('taskId', ParseIntPipe) taskId: number,
158
- @Param('commentId', ParseIntPipe) commentId: number,
159
- ) {
160
- return this.operationsService.removeTaskComment(
161
- Number(user?.id || 0),
162
- taskId,
163
- commentId
164
- );
165
- }
166
- }
1
+ import { Role, User } from "@hed-hog/api";
2
+ import {
3
+ Body,
4
+ Controller,
5
+ Delete,
6
+ Get,
7
+ Param,
8
+ ParseIntPipe,
9
+ Patch,
10
+ Post,
11
+ Query,
12
+ UploadedFile,
13
+ UseInterceptors,
14
+ } from "@nestjs/common";
15
+ import { FileInterceptor } from "@nestjs/platform-express";
16
+ import { CreateOperationsTaskDto } from "../dto/create-task.dto";
17
+ import { ListMyTasksDto } from "../dto/list-my-tasks.dto";
18
+ import { ListOperationsTasksDto } from "../dto/list-tasks.dto";
19
+ import { UpdateOperationsTaskDto } from "../dto/update-task.dto";
20
+ import { OperationsService } from "../operations.service";
21
+
22
+ @Role()
23
+ @Controller("operations")
24
+ export class OperationsTasksController {
25
+ constructor(private readonly operationsService: OperationsService) {}
26
+
27
+ @Get("tasks")
28
+ listTasks(@User() user, @Query() paginationParams: ListOperationsTasksDto) {
29
+ return this.operationsService.listTasks(
30
+ Number(user?.id || 0),
31
+ paginationParams,
32
+ );
33
+ }
34
+
35
+ @Get("my-tasks")
36
+ listMyTasks(@User() user, @Query() paginationParams: ListMyTasksDto) {
37
+ return this.operationsService.listMyTasks(
38
+ Number(user?.id || 0),
39
+ paginationParams,
40
+ );
41
+ }
42
+
43
+ @Get("projects/:id/tasks")
44
+ listProjectBoardTasks(@User() user, @Param("id", ParseIntPipe) id: number) {
45
+ return this.operationsService.listProjectBoardTasks(
46
+ Number(user?.id || 0),
47
+ id,
48
+ );
49
+ }
50
+
51
+ @Post("tasks")
52
+ createTask(@User() user, @Body() data: CreateOperationsTaskDto) {
53
+ return this.operationsService.createTask(Number(user?.id || 0), data);
54
+ }
55
+
56
+ @Patch("tasks/:id")
57
+ updateTask(
58
+ @User() user,
59
+ @Param("id", ParseIntPipe) id: number,
60
+ @Body() data: UpdateOperationsTaskDto,
61
+ ) {
62
+ return this.operationsService.updateTask(Number(user?.id || 0), id, data);
63
+ }
64
+
65
+ @Delete("tasks/:id")
66
+ removeTask(
67
+ @User() user,
68
+ @Param("id", ParseIntPipe) id: number,
69
+ @Query("permanent") permanent?: string,
70
+ ) {
71
+ return this.operationsService.removeTask(
72
+ Number(user?.id || 0),
73
+ id,
74
+ permanent === "true",
75
+ );
76
+ }
77
+
78
+ @Get("tasks/:id/files")
79
+ listTaskFiles(@User() user, @Param("id", ParseIntPipe) id: number) {
80
+ return this.operationsService.listTaskFiles(Number(user?.id || 0), id);
81
+ }
82
+
83
+ @Post("tasks/:id/files")
84
+ @UseInterceptors(FileInterceptor("file"))
85
+ addTaskFile(
86
+ @User() user,
87
+ @Param("id", ParseIntPipe) id: number,
88
+ @UploadedFile() file: MulterFile,
89
+ ) {
90
+ return this.operationsService.addTaskFile(Number(user?.id || 0), id, file);
91
+ }
92
+
93
+ @Delete("tasks/:id/files/:fileRelationId")
94
+ removeTaskFile(
95
+ @User() user,
96
+ @Param("id", ParseIntPipe) id: number,
97
+ @Param("fileRelationId", ParseIntPipe) fileRelationId: number,
98
+ ) {
99
+ return this.operationsService.removeTaskFile(
100
+ Number(user?.id || 0),
101
+ id,
102
+ fileRelationId,
103
+ );
104
+ }
105
+
106
+ @Get("tasks/:id/comments")
107
+ listTaskComments(@User() user, @Param("id", ParseIntPipe) id: number) {
108
+ return this.operationsService.listTaskComments(Number(user?.id || 0), id);
109
+ }
110
+
111
+ @Get("tasks/:id/activities")
112
+ listTaskActivities(@User() user, @Param("id", ParseIntPipe) id: number) {
113
+ return this.operationsService.listTaskActivities(Number(user?.id || 0), id);
114
+ }
115
+
116
+ @Post("tasks/:id/comments")
117
+ addTaskComment(
118
+ @User() user,
119
+ @Param("id", ParseIntPipe) id: number,
120
+ @Body("content") content: string,
121
+ ) {
122
+ return this.operationsService.addTaskComment(
123
+ Number(user?.id || 0),
124
+ id,
125
+ content,
126
+ );
127
+ }
128
+
129
+ @Patch("tasks/:taskId/comments/:commentId")
130
+ updateTaskComment(
131
+ @User() user,
132
+ @Param("taskId", ParseIntPipe) taskId: number,
133
+ @Param("commentId", ParseIntPipe) commentId: number,
134
+ @Body("content") content: string,
135
+ ) {
136
+ return this.operationsService.updateTaskComment(
137
+ Number(user?.id || 0),
138
+ taskId,
139
+ commentId,
140
+ content,
141
+ );
142
+ }
143
+
144
+ @Delete("tasks/:taskId/comments/:commentId")
145
+ removeTaskComment(
146
+ @User() user,
147
+ @Param("taskId", ParseIntPipe) taskId: number,
148
+ @Param("commentId", ParseIntPipe) commentId: number,
149
+ ) {
150
+ return this.operationsService.removeTaskComment(
151
+ Number(user?.id || 0),
152
+ taskId,
153
+ commentId,
154
+ );
155
+ }
156
+ }