@open-mercato/core 0.10.1-develop.7717.1.2befe9c634 → 0.10.1-develop.7721.1.b5c4a00a68

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 (384) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/dist/generated/entities/staff_support_routing_rule/index.js +21 -0
  3. package/dist/generated/entities/staff_support_routing_rule/index.js.map +7 -0
  4. package/dist/generated/entities/staff_support_ticket/index.js +37 -0
  5. package/dist/generated/entities/staff_support_ticket/index.js.map +7 -0
  6. package/dist/generated/entities/staff_time_project/index.js +2 -0
  7. package/dist/generated/entities/staff_time_project/index.js.map +2 -2
  8. package/dist/generated/entities/staff_time_project_member/index.js +2 -0
  9. package/dist/generated/entities/staff_time_project_member/index.js.map +2 -2
  10. package/dist/generated/entities/staff_time_task/index.js +4 -0
  11. package/dist/generated/entities/staff_time_task/index.js.map +2 -2
  12. package/dist/generated/entities/staff_time_task_comment/index.js +9 -1
  13. package/dist/generated/entities/staff_time_task_comment/index.js.map +2 -2
  14. package/dist/generated/entities.ids.generated.js +2 -0
  15. package/dist/generated/entities.ids.generated.js.map +2 -2
  16. package/dist/generated/entity-fields-registry.js +38 -0
  17. package/dist/generated/entity-fields-registry.js.map +2 -2
  18. package/dist/helpers/integration/auth.js +1 -0
  19. package/dist/helpers/integration/auth.js.map +2 -2
  20. package/dist/helpers/integration/communicationChannelsFixtures.js +20 -0
  21. package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
  22. package/dist/modules/catalog/api/bulk-delete/route.js +12 -2
  23. package/dist/modules/catalog/api/bulk-delete/route.js.map +2 -2
  24. package/dist/modules/communication_channels/api/post/test-seed/route.js +17 -3
  25. package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
  26. package/dist/modules/communication_channels/lib/test-seed.js +38 -5
  27. package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
  28. package/dist/modules/messages/commands/messages.js +2 -3
  29. package/dist/modules/messages/commands/messages.js.map +2 -2
  30. package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js +2 -2
  31. package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js.map +2 -2
  32. package/dist/modules/staff/api/portal/support-tickets/[id]/attachments/route.js +299 -0
  33. package/dist/modules/staff/api/portal/support-tickets/[id]/attachments/route.js.map +7 -0
  34. package/dist/modules/staff/api/portal/support-tickets/[id]/messages/route.js +91 -0
  35. package/dist/modules/staff/api/portal/support-tickets/[id]/messages/route.js.map +7 -0
  36. package/dist/modules/staff/api/portal/support-tickets/[id]/route.js +146 -0
  37. package/dist/modules/staff/api/portal/support-tickets/[id]/route.js.map +7 -0
  38. package/dist/modules/staff/api/portal/support-tickets/options/route.js +60 -0
  39. package/dist/modules/staff/api/portal/support-tickets/options/route.js.map +7 -0
  40. package/dist/modules/staff/api/portal/support-tickets/route.js +220 -0
  41. package/dist/modules/staff/api/portal/support-tickets/route.js.map +7 -0
  42. package/dist/modules/staff/api/timesheets/settings/route.js +7 -1
  43. package/dist/modules/staff/api/timesheets/settings/route.js.map +2 -2
  44. package/dist/modules/staff/api/timesheets/support-routing-rules/fallback-project/route.js +122 -0
  45. package/dist/modules/staff/api/timesheets/support-routing-rules/fallback-project/route.js.map +7 -0
  46. package/dist/modules/staff/api/timesheets/support-routing-rules/preview/route.js +180 -0
  47. package/dist/modules/staff/api/timesheets/support-routing-rules/preview/route.js.map +7 -0
  48. package/dist/modules/staff/api/timesheets/support-routing-rules/route.js +147 -0
  49. package/dist/modules/staff/api/timesheets/support-routing-rules/route.js.map +7 -0
  50. package/dist/modules/staff/api/timesheets/support-tickets/options/route.js +133 -0
  51. package/dist/modules/staff/api/timesheets/support-tickets/options/route.js.map +7 -0
  52. package/dist/modules/staff/api/timesheets/tasks/[id]/claim/route.js +33 -0
  53. package/dist/modules/staff/api/timesheets/tasks/[id]/claim/route.js.map +7 -0
  54. package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js +25 -7
  55. package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js.map +2 -2
  56. package/dist/modules/staff/api/timesheets/tasks/[id]/release/route.js +32 -0
  57. package/dist/modules/staff/api/timesheets/tasks/[id]/release/route.js.map +7 -0
  58. package/dist/modules/staff/api/timesheets/tasks/route.js +94 -47
  59. package/dist/modules/staff/api/timesheets/tasks/route.js.map +2 -2
  60. package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js +3 -0
  61. package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js.map +2 -2
  62. package/dist/modules/staff/api/timesheets/time-projects/route.js +3 -0
  63. package/dist/modules/staff/api/timesheets/time-projects/route.js.map +2 -2
  64. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js +1 -0
  65. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js.map +2 -2
  66. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js +54 -4
  67. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js.map +2 -2
  68. package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js +21 -5
  69. package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js.map +2 -2
  70. package/dist/modules/staff/backend/staff/time-tracking/settings/page.js +319 -254
  71. package/dist/modules/staff/backend/staff/time-tracking/settings/page.js.map +2 -2
  72. package/dist/modules/staff/backend/staff/time-tracking/support/page.js +363 -0
  73. package/dist/modules/staff/backend/staff/time-tracking/support/page.js.map +7 -0
  74. package/dist/modules/staff/backend/staff/time-tracking/support/page.meta.js +18 -0
  75. package/dist/modules/staff/backend/staff/time-tracking/support/page.meta.js.map +7 -0
  76. package/dist/modules/staff/cli.js +27 -0
  77. package/dist/modules/staff/cli.js.map +2 -2
  78. package/dist/modules/staff/commands/index.js +3 -0
  79. package/dist/modules/staff/commands/index.js.map +2 -2
  80. package/dist/modules/staff/commands/shared.js +10 -1
  81. package/dist/modules/staff/commands/shared.js.map +2 -2
  82. package/dist/modules/staff/commands/support-routing-rules.js +505 -0
  83. package/dist/modules/staff/commands/support-routing-rules.js.map +7 -0
  84. package/dist/modules/staff/commands/support-tickets.js +513 -0
  85. package/dist/modules/staff/commands/support-tickets.js.map +7 -0
  86. package/dist/modules/staff/commands/timesheets-projects.js +72 -14
  87. package/dist/modules/staff/commands/timesheets-projects.js.map +2 -2
  88. package/dist/modules/staff/commands/timesheets-task-assignment.js +270 -0
  89. package/dist/modules/staff/commands/timesheets-task-assignment.js.map +7 -0
  90. package/dist/modules/staff/commands/timesheets-task-comments.js +58 -12
  91. package/dist/modules/staff/commands/timesheets-task-comments.js.map +2 -2
  92. package/dist/modules/staff/commands/timesheets-tasks.js +91 -9
  93. package/dist/modules/staff/commands/timesheets-tasks.js.map +3 -3
  94. package/dist/modules/staff/data/enrichers.js +141 -0
  95. package/dist/modules/staff/data/enrichers.js.map +2 -2
  96. package/dist/modules/staff/data/entities.js +143 -2
  97. package/dist/modules/staff/data/entities.js.map +2 -2
  98. package/dist/modules/staff/data/extensions.js +8 -0
  99. package/dist/modules/staff/data/extensions.js.map +2 -2
  100. package/dist/modules/staff/data/validators.js +34 -5
  101. package/dist/modules/staff/data/validators.js.map +2 -2
  102. package/dist/modules/staff/encryption.js +6 -0
  103. package/dist/modules/staff/encryption.js.map +2 -2
  104. package/dist/modules/staff/events.js +25 -0
  105. package/dist/modules/staff/events.js.map +2 -2
  106. package/dist/modules/staff/events.payloads.js +54 -0
  107. package/dist/modules/staff/events.payloads.js.map +2 -2
  108. package/dist/modules/staff/extension-points.js +1 -0
  109. package/dist/modules/staff/extension-points.js.map +2 -2
  110. package/dist/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.js +468 -0
  111. package/dist/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.js.map +7 -0
  112. package/dist/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.meta.js +12 -0
  113. package/dist/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.meta.js.map +7 -0
  114. package/dist/modules/staff/frontend/[orgSlug]/portal/support/new/page.js +316 -0
  115. package/dist/modules/staff/frontend/[orgSlug]/portal/support/new/page.js.map +7 -0
  116. package/dist/modules/staff/frontend/[orgSlug]/portal/support/new/page.meta.js +12 -0
  117. package/dist/modules/staff/frontend/[orgSlug]/portal/support/new/page.meta.js.map +7 -0
  118. package/dist/modules/staff/frontend/[orgSlug]/portal/support/page.js +190 -0
  119. package/dist/modules/staff/frontend/[orgSlug]/portal/support/page.js.map +7 -0
  120. package/dist/modules/staff/frontend/[orgSlug]/portal/support/page.meta.js +19 -0
  121. package/dist/modules/staff/frontend/[orgSlug]/portal/support/page.meta.js.map +7 -0
  122. package/dist/modules/staff/index.js +1 -1
  123. package/dist/modules/staff/index.js.map +2 -2
  124. package/dist/modules/staff/lib/crud.js +2 -0
  125. package/dist/modules/staff/lib/crud.js.map +2 -2
  126. package/dist/modules/staff/lib/support/attachments.js +36 -0
  127. package/dist/modules/staff/lib/support/attachments.js.map +7 -0
  128. package/dist/modules/staff/lib/support/dictionaries.js +87 -0
  129. package/dist/modules/staff/lib/support/dictionaries.js.map +7 -0
  130. package/dist/modules/staff/lib/support/notifications.js +111 -0
  131. package/dist/modules/staff/lib/support/notifications.js.map +7 -0
  132. package/dist/modules/staff/lib/support/portalAttachments.js +100 -0
  133. package/dist/modules/staff/lib/support/portalAttachments.js.map +7 -0
  134. package/dist/modules/staff/lib/support/portalBroadcast.js +117 -0
  135. package/dist/modules/staff/lib/support/portalBroadcast.js.map +7 -0
  136. package/dist/modules/staff/lib/support/portalRoute.js +99 -0
  137. package/dist/modules/staff/lib/support/portalRoute.js.map +7 -0
  138. package/dist/modules/staff/lib/support/portalStatus.js +12 -0
  139. package/dist/modules/staff/lib/support/portalStatus.js.map +7 -0
  140. package/dist/modules/staff/lib/support/portalTickets.js +148 -0
  141. package/dist/modules/staff/lib/support/portalTickets.js.map +7 -0
  142. package/dist/modules/staff/lib/support/routing.js +81 -0
  143. package/dist/modules/staff/lib/support/routing.js.map +7 -0
  144. package/dist/modules/staff/lib/support/routingRuleDraft.js +25 -0
  145. package/dist/modules/staff/lib/support/routingRuleDraft.js.map +7 -0
  146. package/dist/modules/staff/lib/support/seedDefaults.js +114 -0
  147. package/dist/modules/staff/lib/support/seedDefaults.js.map +7 -0
  148. package/dist/modules/staff/lib/support/supportActivity.js +26 -0
  149. package/dist/modules/staff/lib/support/supportActivity.js.map +7 -0
  150. package/dist/modules/staff/lib/support-ui/PortalSupportNotLinked.js +23 -0
  151. package/dist/modules/staff/lib/support-ui/PortalSupportNotLinked.js.map +7 -0
  152. package/dist/modules/staff/lib/support-ui/portalAttachmentValidation.js +112 -0
  153. package/dist/modules/staff/lib/support-ui/portalAttachmentValidation.js.map +7 -0
  154. package/dist/modules/staff/lib/support-ui/portalPendingUploads.js +45 -0
  155. package/dist/modules/staff/lib/support-ui/portalPendingUploads.js.map +7 -0
  156. package/dist/modules/staff/lib/support-ui/portalSupport.js +51 -0
  157. package/dist/modules/staff/lib/support-ui/portalSupport.js.map +7 -0
  158. package/dist/modules/staff/lib/time-tracking/access.js +3 -39
  159. package/dist/modules/staff/lib/time-tracking/access.js.map +2 -2
  160. package/dist/modules/staff/lib/time-tracking/listProjectAccess.js +54 -0
  161. package/dist/modules/staff/lib/time-tracking/listProjectAccess.js.map +7 -0
  162. package/dist/modules/staff/lib/time-tracking/portalRecipients.js +92 -2
  163. package/dist/modules/staff/lib/time-tracking/portalRecipients.js.map +2 -2
  164. package/dist/modules/staff/lib/time-tracking/projectAssignment.js +112 -0
  165. package/dist/modules/staff/lib/time-tracking/projectAssignment.js.map +7 -0
  166. package/dist/modules/staff/lib/time-tracking/settingKeys.js +14 -0
  167. package/dist/modules/staff/lib/time-tracking/settingKeys.js.map +2 -2
  168. package/dist/modules/staff/lib/time-tracking/settings.js +28 -1
  169. package/dist/modules/staff/lib/time-tracking/settings.js.map +2 -2
  170. package/dist/modules/staff/lib/time-tracking/taskAssignmentRoute.js +143 -0
  171. package/dist/modules/staff/lib/time-tracking/taskAssignmentRoute.js.map +7 -0
  172. package/dist/modules/staff/lib/time-tracking/workRecipients.js +92 -0
  173. package/dist/modules/staff/lib/time-tracking/workRecipients.js.map +7 -0
  174. package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js +32 -3
  175. package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js.map +2 -2
  176. package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js +29 -0
  177. package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js.map +2 -2
  178. package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js +4 -0
  179. package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js.map +2 -2
  180. package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js +141 -1
  181. package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js.map +2 -2
  182. package/dist/modules/staff/lib/time-tracking-ui/SupportAttachmentsSection.js +153 -0
  183. package/dist/modules/staff/lib/time-tracking-ui/SupportAttachmentsSection.js.map +7 -0
  184. package/dist/modules/staff/lib/time-tracking-ui/SupportRequestPanel.js +67 -0
  185. package/dist/modules/staff/lib/time-tracking-ui/SupportRequestPanel.js.map +7 -0
  186. package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js +3 -1
  187. package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js.map +2 -2
  188. package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js +80 -17
  189. package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js.map +2 -2
  190. package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js +230 -41
  191. package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js.map +2 -2
  192. package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js +21 -1
  193. package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js.map +2 -2
  194. package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js +16 -4
  195. package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js.map +2 -2
  196. package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js +3 -1
  197. package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js.map +2 -2
  198. package/dist/modules/staff/lib/time-tracking-ui/projectDefaultAssignee.js +68 -0
  199. package/dist/modules/staff/lib/time-tracking-ui/projectDefaultAssignee.js.map +7 -0
  200. package/dist/modules/staff/lib/time-tracking-ui/settingsTabs.js +7 -0
  201. package/dist/modules/staff/lib/time-tracking-ui/settingsTabs.js.map +7 -0
  202. package/dist/modules/staff/lib/time-tracking-ui/supportTicketData.js +50 -0
  203. package/dist/modules/staff/lib/time-tracking-ui/supportTicketData.js.map +7 -0
  204. package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js +13 -1
  205. package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js.map +2 -2
  206. package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js +36 -2
  207. package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js.map +2 -2
  208. package/dist/modules/staff/migrations/Migration20261009180543_staff.js +42 -0
  209. package/dist/modules/staff/migrations/Migration20261009180543_staff.js.map +7 -0
  210. package/dist/modules/staff/notifications.js +92 -0
  211. package/dist/modules/staff/notifications.js.map +2 -2
  212. package/dist/modules/staff/setup.js +6 -2
  213. package/dist/modules/staff/setup.js.map +2 -2
  214. package/dist/modules/staff/subscribers/support-portal-comment-created.js +26 -0
  215. package/dist/modules/staff/subscribers/support-portal-comment-created.js.map +7 -0
  216. package/dist/modules/staff/subscribers/support-portal-comment-deleted.js +26 -0
  217. package/dist/modules/staff/subscribers/support-portal-comment-deleted.js.map +7 -0
  218. package/dist/modules/staff/subscribers/support-portal-comment-updated.js +26 -0
  219. package/dist/modules/staff/subscribers/support-portal-comment-updated.js.map +7 -0
  220. package/dist/modules/staff/subscribers/support-portal-status-column-updated.js +24 -0
  221. package/dist/modules/staff/subscribers/support-portal-status-column-updated.js.map +7 -0
  222. package/dist/modules/staff/subscribers/support-portal-task-status-changed.js +25 -0
  223. package/dist/modules/staff/subscribers/support-portal-task-status-changed.js.map +7 -0
  224. package/dist/modules/staff/subscribers/support-portal-task-updated.js +25 -0
  225. package/dist/modules/staff/subscribers/support-portal-task-updated.js.map +7 -0
  226. package/dist/modules/staff/subscribers/support-ticket-created-notification.js +25 -0
  227. package/dist/modules/staff/subscribers/support-ticket-created-notification.js.map +7 -0
  228. package/dist/modules/staff/subscribers/support-ticket-customer-replied-notification.js +25 -0
  229. package/dist/modules/staff/subscribers/support-ticket-customer-replied-notification.js.map +7 -0
  230. package/dist/modules/staff/subscribers/support-ticket-unnotified-clear.js +26 -0
  231. package/dist/modules/staff/subscribers/support-ticket-unnotified-clear.js.map +7 -0
  232. package/dist/modules/staff/subscribers/time-task-assignee-notification.js +83 -0
  233. package/dist/modules/staff/subscribers/time-task-assignee-notification.js.map +7 -0
  234. package/dist/modules/staff/widgets/injection/portal-support-tickets/widget.client.js +112 -0
  235. package/dist/modules/staff/widgets/injection/portal-support-tickets/widget.client.js.map +7 -0
  236. package/dist/modules/staff/widgets/injection/portal-support-tickets/widget.js +17 -0
  237. package/dist/modules/staff/widgets/injection/portal-support-tickets/widget.js.map +7 -0
  238. package/dist/modules/staff/widgets/injection/time-tracking-settings-support/widget.client.js +870 -0
  239. package/dist/modules/staff/widgets/injection/time-tracking-settings-support/widget.client.js.map +7 -0
  240. package/dist/modules/staff/widgets/injection/time-tracking-settings-support/widget.js +17 -0
  241. package/dist/modules/staff/widgets/injection/time-tracking-settings-support/widget.js.map +7 -0
  242. package/dist/modules/staff/widgets/injection-table.js +16 -1
  243. package/dist/modules/staff/widgets/injection-table.js.map +2 -2
  244. package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +4 -18
  245. package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
  246. package/dist/modules/wms/components/backend/WmsLotDetailPage.js +4 -18
  247. package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
  248. package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +4 -18
  249. package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
  250. package/dist/modules/wms/lib/inventoryCsvExport.js +19 -0
  251. package/dist/modules/wms/lib/inventoryCsvExport.js.map +7 -0
  252. package/generated/entities/staff_support_routing_rule/index.ts +9 -0
  253. package/generated/entities/staff_support_ticket/index.ts +17 -0
  254. package/generated/entities/staff_time_project/index.ts +1 -0
  255. package/generated/entities/staff_time_project_member/index.ts +1 -0
  256. package/generated/entities/staff_time_task/index.ts +2 -0
  257. package/generated/entities/staff_time_task_comment/index.ts +4 -0
  258. package/generated/entities.ids.generated.ts +2 -0
  259. package/generated/entity-fields-registry.ts +38 -0
  260. package/package.json +8 -8
  261. package/src/helpers/integration/auth.ts +1 -1
  262. package/src/helpers/integration/communicationChannelsFixtures.ts +60 -2
  263. package/src/modules/catalog/api/bulk-delete/route.ts +12 -2
  264. package/src/modules/communication_channels/api/post/test-seed/route.ts +29 -12
  265. package/src/modules/communication_channels/lib/test-seed.ts +49 -10
  266. package/src/modules/messages/commands/messages.ts +8 -10
  267. package/src/modules/portal/frontend/[orgSlug]/portal/dashboard/page.tsx +2 -2
  268. package/src/modules/staff/AGENTS.md +22 -6
  269. package/src/modules/staff/api/portal/support-tickets/[id]/attachments/route.ts +327 -0
  270. package/src/modules/staff/api/portal/support-tickets/[id]/messages/route.ts +94 -0
  271. package/src/modules/staff/api/portal/support-tickets/[id]/route.ts +160 -0
  272. package/src/modules/staff/api/portal/support-tickets/options/route.ts +60 -0
  273. package/src/modules/staff/api/portal/support-tickets/route.ts +253 -0
  274. package/src/modules/staff/api/timesheets/settings/route.ts +7 -1
  275. package/src/modules/staff/api/timesheets/support-routing-rules/fallback-project/route.ts +131 -0
  276. package/src/modules/staff/api/timesheets/support-routing-rules/preview/route.ts +248 -0
  277. package/src/modules/staff/api/timesheets/support-routing-rules/route.ts +150 -0
  278. package/src/modules/staff/api/timesheets/support-tickets/options/route.ts +181 -0
  279. package/src/modules/staff/api/timesheets/tasks/[id]/claim/route.ts +31 -0
  280. package/src/modules/staff/api/timesheets/tasks/[id]/comments/route.ts +25 -7
  281. package/src/modules/staff/api/timesheets/tasks/[id]/release/route.ts +30 -0
  282. package/src/modules/staff/api/timesheets/tasks/route.ts +119 -67
  283. package/src/modules/staff/api/timesheets/time-projects/[id]/employees/route.ts +3 -0
  284. package/src/modules/staff/api/timesheets/time-projects/route.ts +3 -0
  285. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.tsx +1 -0
  286. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/page.tsx +67 -2
  287. package/src/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.ts +22 -3
  288. package/src/modules/staff/backend/staff/time-tracking/settings/page.tsx +405 -308
  289. package/src/modules/staff/backend/staff/time-tracking/support/page.meta.ts +14 -0
  290. package/src/modules/staff/backend/staff/time-tracking/support/page.tsx +428 -0
  291. package/src/modules/staff/cli.ts +28 -0
  292. package/src/modules/staff/commands/index.ts +3 -0
  293. package/src/modules/staff/commands/shared.ts +22 -1
  294. package/src/modules/staff/commands/support-routing-rules.ts +595 -0
  295. package/src/modules/staff/commands/support-tickets.ts +580 -0
  296. package/src/modules/staff/commands/timesheets-projects.ts +84 -13
  297. package/src/modules/staff/commands/timesheets-task-assignment.ts +319 -0
  298. package/src/modules/staff/commands/timesheets-task-comments.ts +70 -15
  299. package/src/modules/staff/commands/timesheets-tasks.ts +106 -15
  300. package/src/modules/staff/data/enrichers.ts +203 -0
  301. package/src/modules/staff/data/entities.ts +133 -2
  302. package/src/modules/staff/data/extensions.ts +9 -1
  303. package/src/modules/staff/data/validators.ts +36 -0
  304. package/src/modules/staff/encryption.ts +6 -0
  305. package/src/modules/staff/events.payloads.ts +87 -1
  306. package/src/modules/staff/events.ts +26 -0
  307. package/src/modules/staff/extension-points.ts +1 -0
  308. package/src/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.meta.ts +10 -0
  309. package/src/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.tsx +553 -0
  310. package/src/modules/staff/frontend/[orgSlug]/portal/support/new/page.meta.ts +10 -0
  311. package/src/modules/staff/frontend/[orgSlug]/portal/support/new/page.tsx +346 -0
  312. package/src/modules/staff/frontend/[orgSlug]/portal/support/page.meta.ts +17 -0
  313. package/src/modules/staff/frontend/[orgSlug]/portal/support/page.tsx +253 -0
  314. package/src/modules/staff/i18n/de.json +291 -0
  315. package/src/modules/staff/i18n/en.json +291 -0
  316. package/src/modules/staff/i18n/es.json +291 -0
  317. package/src/modules/staff/i18n/ko.json +291 -0
  318. package/src/modules/staff/i18n/pl.json +291 -0
  319. package/src/modules/staff/index.ts +1 -1
  320. package/src/modules/staff/lib/crud.ts +2 -1
  321. package/src/modules/staff/lib/support/attachments.ts +43 -0
  322. package/src/modules/staff/lib/support/dictionaries.ts +120 -0
  323. package/src/modules/staff/lib/support/notifications.ts +138 -0
  324. package/src/modules/staff/lib/support/portalAttachments.ts +140 -0
  325. package/src/modules/staff/lib/support/portalBroadcast.ts +161 -0
  326. package/src/modules/staff/lib/support/portalRoute.ts +108 -0
  327. package/src/modules/staff/lib/support/portalStatus.ts +15 -0
  328. package/src/modules/staff/lib/support/portalTickets.ts +233 -0
  329. package/src/modules/staff/lib/support/routing.ts +117 -0
  330. package/src/modules/staff/lib/support/routingRuleDraft.ts +45 -0
  331. package/src/modules/staff/lib/support/seedDefaults.ts +151 -0
  332. package/src/modules/staff/lib/support/supportActivity.ts +39 -0
  333. package/src/modules/staff/lib/support-ui/PortalSupportNotLinked.tsx +20 -0
  334. package/src/modules/staff/lib/support-ui/portalAttachmentValidation.ts +125 -0
  335. package/src/modules/staff/lib/support-ui/portalPendingUploads.ts +49 -0
  336. package/src/modules/staff/lib/support-ui/portalSupport.ts +116 -0
  337. package/src/modules/staff/lib/time-tracking/access.ts +2 -62
  338. package/src/modules/staff/lib/time-tracking/listProjectAccess.ts +78 -0
  339. package/src/modules/staff/lib/time-tracking/portalRecipients.ts +173 -5
  340. package/src/modules/staff/lib/time-tracking/projectAssignment.ts +172 -0
  341. package/src/modules/staff/lib/time-tracking/settingKeys.ts +11 -0
  342. package/src/modules/staff/lib/time-tracking/settings.ts +46 -1
  343. package/src/modules/staff/lib/time-tracking/taskAssignmentRoute.ts +165 -0
  344. package/src/modules/staff/lib/time-tracking/workRecipients.ts +183 -0
  345. package/src/modules/staff/lib/time-tracking-ui/BoardFilterChips.tsx +36 -1
  346. package/src/modules/staff/lib/time-tracking-ui/KanbanBoard.tsx +30 -0
  347. package/src/modules/staff/lib/time-tracking-ui/KanbanCard.tsx +9 -0
  348. package/src/modules/staff/lib/time-tracking-ui/ProjectFormSections.tsx +185 -6
  349. package/src/modules/staff/lib/time-tracking-ui/SupportAttachmentsSection.tsx +188 -0
  350. package/src/modules/staff/lib/time-tracking-ui/SupportRequestPanel.tsx +102 -0
  351. package/src/modules/staff/lib/time-tracking-ui/TaskBoardScreen.tsx +2 -0
  352. package/src/modules/staff/lib/time-tracking-ui/TaskCommentThread.tsx +105 -22
  353. package/src/modules/staff/lib/time-tracking-ui/TaskDrawer.tsx +278 -43
  354. package/src/modules/staff/lib/time-tracking-ui/boardDirectory.ts +21 -0
  355. package/src/modules/staff/lib/time-tracking-ui/boardFilters.ts +16 -2
  356. package/src/modules/staff/lib/time-tracking-ui/kanbanBoardData.ts +4 -0
  357. package/src/modules/staff/lib/time-tracking-ui/projectDefaultAssignee.ts +117 -0
  358. package/src/modules/staff/lib/time-tracking-ui/settingsTabs.ts +17 -0
  359. package/src/modules/staff/lib/time-tracking-ui/supportTicketData.ts +71 -0
  360. package/src/modules/staff/lib/time-tracking-ui/taskDrawerData.ts +15 -0
  361. package/src/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.ts +48 -1
  362. package/src/modules/staff/migrations/.snapshot-open-mercato.json +714 -0
  363. package/src/modules/staff/migrations/Migration20261009180543_staff.ts +50 -0
  364. package/src/modules/staff/notifications.ts +92 -0
  365. package/src/modules/staff/setup.ts +6 -2
  366. package/src/modules/staff/subscribers/support-portal-comment-created.ts +35 -0
  367. package/src/modules/staff/subscribers/support-portal-comment-deleted.ts +35 -0
  368. package/src/modules/staff/subscribers/support-portal-comment-updated.ts +35 -0
  369. package/src/modules/staff/subscribers/support-portal-status-column-updated.ts +36 -0
  370. package/src/modules/staff/subscribers/support-portal-task-status-changed.ts +34 -0
  371. package/src/modules/staff/subscribers/support-portal-task-updated.ts +34 -0
  372. package/src/modules/staff/subscribers/support-ticket-created-notification.ts +27 -0
  373. package/src/modules/staff/subscribers/support-ticket-customer-replied-notification.ts +27 -0
  374. package/src/modules/staff/subscribers/support-ticket-unnotified-clear.ts +29 -0
  375. package/src/modules/staff/subscribers/time-task-assignee-notification.ts +102 -0
  376. package/src/modules/staff/widgets/injection/portal-support-tickets/widget.client.tsx +151 -0
  377. package/src/modules/staff/widgets/injection/portal-support-tickets/widget.ts +16 -0
  378. package/src/modules/staff/widgets/injection/time-tracking-settings-support/widget.client.tsx +1058 -0
  379. package/src/modules/staff/widgets/injection/time-tracking-settings-support/widget.ts +17 -0
  380. package/src/modules/staff/widgets/injection-table.ts +15 -0
  381. package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +4 -20
  382. package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +4 -20
  383. package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +4 -19
  384. package/src/modules/wms/lib/inventoryCsvExport.ts +18 -0
@@ -96,6 +96,12 @@
96
96
  "staff.audit.resources.create": "Create resource",
97
97
  "staff.audit.resources.delete": "Delete resource",
98
98
  "staff.audit.resources.update": "Update resource",
99
+ "staff.audit.support.routingRules.create": "Create support routing rule",
100
+ "staff.audit.support.routingRules.createFallbackProject": "Create support fallback project",
101
+ "staff.audit.support.routingRules.delete": "Delete support routing rule",
102
+ "staff.audit.support.routingRules.update": "Update support routing rule",
103
+ "staff.audit.support.tickets.create": "File support ticket",
104
+ "staff.audit.support.tickets.message": "Customer message on support ticket",
99
105
  "staff.audit.teamMemberActivities.create": "Create team member activity",
100
106
  "staff.audit.teamMemberActivities.delete": "Delete team member activity",
101
107
  "staff.audit.teamMemberActivities.update": "Update team member activity",
@@ -138,8 +144,10 @@
138
144
  "staff.audit.timesheets.task_statuses.delete": "Delete task status",
139
145
  "staff.audit.timesheets.task_statuses.reorder": "Reorder task statuses",
140
146
  "staff.audit.timesheets.task_statuses.update": "Update task status",
147
+ "staff.audit.timesheets.tasks.claim": "Claim task",
141
148
  "staff.audit.timesheets.tasks.create": "Create task",
142
149
  "staff.audit.timesheets.tasks.delete": "Delete task",
150
+ "staff.audit.timesheets.tasks.release": "Release task",
143
151
  "staff.audit.timesheets.tasks.statusChange": "Move task",
144
152
  "staff.audit.timesheets.tasks.update": "Update task",
145
153
  "staff.audit.timesheets.time_entries.create": "Create time entry",
@@ -343,6 +351,11 @@
343
351
  "staff.notifications.leaveRequest.pending.title": "Leave Request Pending",
344
352
  "staff.notifications.leaveRequest.rejected.body": "Your leave request from {startDate} to {endDate} has been rejected{reason, select, other { - {reason}}}",
345
353
  "staff.notifications.leaveRequest.rejected.title": "Leave Request Rejected",
354
+ "staff.notifications.supportTicket.actions.open": "Open ticket",
355
+ "staff.notifications.supportTicket.created.body": "{customer} filed \"{subject}\" ({category}) in {project}.",
356
+ "staff.notifications.supportTicket.created.title": "New support ticket {reference}",
357
+ "staff.notifications.supportTicket.customerReplied.body": "{customer} added a message to \"{subject}\".",
358
+ "staff.notifications.supportTicket.customerReplied.title": "Customer replied on {reference}",
346
359
  "staff.notifications.timeEntryTimer.runningLong.body": "A timer has been running for a long time. Stop it if the work is finished.",
347
360
  "staff.notifications.timeEntryTimer.runningLong.title": "Timer still running",
348
361
  "staff.notifications.timeProjectAccess.actions.openTeam": "Open project team",
@@ -359,9 +372,89 @@
359
372
  "staff.notifications.timeReport.approved.title": "Time report closed",
360
373
  "staff.notifications.timeReport.readyForApproval.body": "Report {reference} is waiting for your approval.",
361
374
  "staff.notifications.timeReport.readyForApproval.title": "Time report ready for approval",
375
+ "staff.notifications.timeTask.actions.open": "Open task",
376
+ "staff.notifications.timeTask.assigned.body": "\"{title}\" is now yours.",
377
+ "staff.notifications.timeTask.assigned.title": "You were assigned {reference}",
378
+ "staff.notifications.timeTask.released.body": "\"{title}\" can be claimed.",
379
+ "staff.notifications.timeTask.released.title": "Task {reference} is unassigned",
362
380
  "staff.notifications.timesheet.actions.openTimesheet": "Open timesheet",
363
381
  "staff.notifications.timesheet.periodIncomplete.body": "Some working days between {periodFrom} and {periodTo} have no logged time.",
364
382
  "staff.notifications.timesheet.periodIncomplete.title": "Timesheet period incomplete",
383
+ "staff.portal.support.attachments.add": "Add files",
384
+ "staff.portal.support.attachments.delete": "Delete file",
385
+ "staff.portal.support.attachments.deleteConfirm": "Delete {name}?",
386
+ "staff.portal.support.attachments.deleteFailed": "Could not delete the file.",
387
+ "staff.portal.support.attachments.empty": "No files yet.",
388
+ "staff.portal.support.attachments.failedHeading": "These files could not be uploaded.",
389
+ "staff.portal.support.attachments.reattach": "Please attach this file again.",
390
+ "staff.portal.support.attachments.remove": "Remove file",
391
+ "staff.portal.support.attachments.retry": "Retry",
392
+ "staff.portal.support.attachments.title": "Files",
393
+ "staff.portal.support.attachments.uploadFailed": "Could not upload {name}.",
394
+ "staff.portal.support.attachments.uploadFailedReason": "Could not upload {name}: {reason}",
395
+ "staff.portal.support.backToList": "All tickets",
396
+ "staff.portal.support.blocked": "This action is not available right now.",
397
+ "staff.portal.support.description": "Ask for help and follow the progress of your requests.",
398
+ "staff.portal.support.detail.colleague": "A colleague",
399
+ "staff.portal.support.detail.conversation": "Conversation",
400
+ "staff.portal.support.detail.loadFailed": "Could not load this ticket.",
401
+ "staff.portal.support.detail.notFoundDescription": "This ticket does not exist or is not yours.",
402
+ "staff.portal.support.detail.notFoundTitle": "Ticket not found",
403
+ "staff.portal.support.detail.rateLimited": "You have sent many messages recently. Please try again later.",
404
+ "staff.portal.support.detail.reopenHint": "Replying reopens this ticket.",
405
+ "staff.portal.support.detail.reopened": "Your message was sent and the ticket was reopened.",
406
+ "staff.portal.support.detail.replyFailed": "Could not send your message.",
407
+ "staff.portal.support.detail.replyLabel": "Your reply",
408
+ "staff.portal.support.detail.replyPlaceholder": "Write a reply",
409
+ "staff.portal.support.detail.replySent": "Your message was sent.",
410
+ "staff.portal.support.detail.send": "Send reply",
411
+ "staff.portal.support.detail.supportTeam": "Support team",
412
+ "staff.portal.support.detail.supportTeamNamed": "Support team · {name}",
413
+ "staff.portal.support.detail.title": "Support ticket",
414
+ "staff.portal.support.detail.you": "You",
415
+ "staff.portal.support.emptyDescription": "When you file a ticket, you can follow it here.",
416
+ "staff.portal.support.emptyTitle": "No support tickets yet",
417
+ "staff.portal.support.fileSize.bytes": "{size} B",
418
+ "staff.portal.support.fileSize.kilobytes": "{size} KB",
419
+ "staff.portal.support.fileSize.megabytes": "{size} MB",
420
+ "staff.portal.support.filter.all": "All statuses",
421
+ "staff.portal.support.filter.status": "Status",
422
+ "staff.portal.support.lastActivityAt": "Last activity: {date}",
423
+ "staff.portal.support.loadFailed": "Could not load your support tickets.",
424
+ "staff.portal.support.nav": "Support",
425
+ "staff.portal.support.new.cancel": "Cancel",
426
+ "staff.portal.support.new.category": "Category",
427
+ "staff.portal.support.new.categoryPlaceholder": "Choose a category",
428
+ "staff.portal.support.new.createFailed": "Could not file the ticket. Please try again.",
429
+ "staff.portal.support.new.created": "Ticket {reference} filed.",
430
+ "staff.portal.support.new.description": "Tell us what you need. Please do not include passwords or other secrets.",
431
+ "staff.portal.support.new.descriptionLabel": "Description",
432
+ "staff.portal.support.new.descriptionPlaceholder": "What happened, and what did you expect?",
433
+ "staff.portal.support.new.optionsLoadFailed": "Could not load the support form.",
434
+ "staff.portal.support.new.rateLimited": "You have filed many tickets recently. Please try again later.",
435
+ "staff.portal.support.new.subject": "Subject",
436
+ "staff.portal.support.new.subjectPlaceholder": "Short summary of the problem",
437
+ "staff.portal.support.new.submit": "File ticket",
438
+ "staff.portal.support.new.title": "New support ticket",
439
+ "staff.portal.support.newTicket": "New ticket",
440
+ "staff.portal.support.next": "Next",
441
+ "staff.portal.support.notLinked.description": "Your portal account is not linked to a company, so there are no tickets to show. Ask your account administrator to link it.",
442
+ "staff.portal.support.notLinked.title": "Support tickets are not available for your account",
443
+ "staff.portal.support.pageIndicator": "Page {page} / {total}",
444
+ "staff.portal.support.previous": "Previous",
445
+ "staff.portal.support.retry": "Try again",
446
+ "staff.portal.support.status.inProgress": "In progress",
447
+ "staff.portal.support.status.received": "Received",
448
+ "staff.portal.support.status.resolved": "Resolved",
449
+ "staff.portal.support.title": "Support",
450
+ "staff.portal.support.unavailableDescription": "Please contact us directly until support requests are enabled.",
451
+ "staff.portal.support.unavailableTitle": "Support requests are not available yet",
452
+ "staff.portal.support.widget.empty": "No open tickets.",
453
+ "staff.portal.support.widget.loading": "Loading your tickets…",
454
+ "staff.portal.support.widget.openCount": "Open tickets: {count}",
455
+ "staff.portal.support.widget.retry": "Try again",
456
+ "staff.portal.support.widget.title": "Support tickets",
457
+ "staff.portal.support.widget.viewAll": "View all",
365
458
  "staff.portal.timeReports.backToList": "All time reports",
366
459
  "staff.portal.timeReports.billableHours": "Billable hours",
367
460
  "staff.portal.timeReports.detailTitle": "Time report",
@@ -524,6 +617,148 @@
524
617
  "staff.services.table.name": "Name",
525
618
  "staff.services.table.search": "Search services...",
526
619
  "staff.services.table.tags": "Tags",
620
+ "staff.support.attachments.empty": "No files on this ticket.",
621
+ "staff.support.attachments.fromCustomer": "From customer",
622
+ "staff.support.attachments.internal": "Internal",
623
+ "staff.support.attachments.loadFailed": "Could not load the ticket files.",
624
+ "staff.support.attachments.loading": "Loading files…",
625
+ "staff.support.attachments.retry": "Try again",
626
+ "staff.support.attachments.shareWithCustomer": "Share with customer",
627
+ "staff.support.attachments.title": "Ticket files",
628
+ "staff.support.attachments.upload": "Upload",
629
+ "staff.support.attachments.uploadFailed": "Could not upload the file.",
630
+ "staff.support.attachments.visible": "Visible to customer",
631
+ "staff.support.errors.attachmentNotYours": "You can only delete files you uploaded.",
632
+ "staff.support.errors.attachmentsUnavailable": "File attachments are not available right now.",
633
+ "staff.support.errors.categoryNotFound": "This category does not exist in the support categories dictionary.",
634
+ "staff.support.errors.categoryRuleExists": "This category already has a routing rule.",
635
+ "staff.support.errors.categoryUnavailable": "Support requests in this category are not available right now.",
636
+ "staff.support.errors.fallbackProjectInUse": "The support project already has tasks, so creating it cannot be undone. Point the fallback rule at another project instead.",
637
+ "staff.support.errors.fallbackRuleExists": "This organization already has a fallback rule.",
638
+ "staff.support.errors.fallbackRuleRequired": "The fallback rule cannot be deleted or paused. Point it at another project instead.",
639
+ "staff.support.errors.fileRequired": "Choose a file before uploading.",
640
+ "staff.support.errors.projectHasNoDefaultStatus": "The selected project has no default task status, so tickets cannot be filed on its board.",
641
+ "staff.support.errors.projectNotFound": "The selected project does not exist in this organization.",
642
+ "staff.support.errors.referenceConflict": "Too many tickets were filed at once. Please submit again.",
643
+ "staff.support.errors.routingRuleNotFound": "Routing rule not found.",
644
+ "staff.support.errors.ticketNotFound": "Support ticket not found.",
645
+ "staff.support.fallbackProject.name": "Customer support",
646
+ "staff.support.settings.actions.cancel": "Cancel",
647
+ "staff.support.settings.actions.delete": "Delete",
648
+ "staff.support.settings.actions.edit": "Edit",
649
+ "staff.support.settings.actions.refresh": "Refresh",
650
+ "staff.support.settings.actions.retry": "Try again",
651
+ "staff.support.settings.actions.save": "Save",
652
+ "staff.support.settings.categories.add": "Add category",
653
+ "staff.support.settings.categories.appearance": "Appearance",
654
+ "staff.support.settings.categories.colorClear": "Clear color",
655
+ "staff.support.settings.categories.colorHelp": "Shown as the category badge color.",
656
+ "staff.support.settings.categories.colorLabel": "Color",
657
+ "staff.support.settings.categories.confirmDelete": "Delete category \"{value}\"?",
658
+ "staff.support.settings.categories.createTitle": "Add category",
659
+ "staff.support.settings.categories.deleted": "Category deleted.",
660
+ "staff.support.settings.categories.description": "Categories customers pick when they file a ticket in the portal.",
661
+ "staff.support.settings.categories.editTitle": "Edit category",
662
+ "staff.support.settings.categories.empty": "No categories yet.",
663
+ "staff.support.settings.categories.iconBrowse": "Browse icons",
664
+ "staff.support.settings.categories.iconClear": "Clear icon",
665
+ "staff.support.settings.categories.iconLabel": "Icon",
666
+ "staff.support.settings.categories.iconPlaceholder": "Icon name",
667
+ "staff.support.settings.categories.iconSearchEmpty": "No icons found.",
668
+ "staff.support.settings.categories.iconSearchPlaceholder": "Search icons",
669
+ "staff.support.settings.categories.iconSuggestions": "Suggestions",
670
+ "staff.support.settings.categories.inherited": "Inherited",
671
+ "staff.support.settings.categories.inheritedTooltip": "Defined by a parent organization.",
672
+ "staff.support.settings.categories.label": "Label",
673
+ "staff.support.settings.categories.missingDictionary": "The support categories dictionary has not been seeded for this organization yet.",
674
+ "staff.support.settings.categories.noAccess": "You do not have permission to view the support categories.",
675
+ "staff.support.settings.categories.previewEmpty": "No appearance",
676
+ "staff.support.settings.categories.saved": "Category saved.",
677
+ "staff.support.settings.categories.search": "Search categories",
678
+ "staff.support.settings.categories.title": "Categories",
679
+ "staff.support.settings.categories.value": "Value",
680
+ "staff.support.settings.description": "Configure support ticket categories, where each category is routed, and the ticket reference prefix.",
681
+ "staff.support.settings.errors.delete": "Failed to delete.",
682
+ "staff.support.settings.errors.load": "Failed to load support settings.",
683
+ "staff.support.settings.errors.save": "Failed to save.",
684
+ "staff.support.settings.errors.saveBlocked": "Save blocked by validation",
685
+ "staff.support.settings.prefix.description": "Customers see ticket references such as SUP-1042. The prefix applies to the whole tenant.",
686
+ "staff.support.settings.prefix.invalid": "Use 2–10 uppercase letters or digits, starting with a letter.",
687
+ "staff.support.settings.prefix.saved": "Reference prefix saved.",
688
+ "staff.support.settings.prefix.title": "Reference prefix",
689
+ "staff.support.settings.preview.empty": "No categories to route.",
690
+ "staff.support.settings.preview.title": "Where tickets go now",
691
+ "staff.support.settings.preview.unavailable": "Not available on portal",
692
+ "staff.support.settings.preview.via": "Routed by",
693
+ "staff.support.settings.preview.viaCategory": "Category rule",
694
+ "staff.support.settings.preview.viaFallback": "Fallback rule",
695
+ "staff.support.settings.referencePrefix": "Reference prefix",
696
+ "staff.support.settings.routing.active": "Active",
697
+ "staff.support.settings.routing.addRule": "Add rule",
698
+ "staff.support.settings.routing.addRuleTitle": "Add rule",
699
+ "staff.support.settings.routing.category": "Category",
700
+ "staff.support.settings.routing.confirmDelete": "Delete this rule? The category will use the fallback project.",
701
+ "staff.support.settings.routing.createFallback": "Create fallback project",
702
+ "staff.support.settings.routing.deleted": "Rule deleted.",
703
+ "staff.support.settings.routing.description": "Every category without a working rule goes to the fallback project. Add a rule to send a category to its own project.",
704
+ "staff.support.settings.routing.editRuleTitle": "Edit rule",
705
+ "staff.support.settings.routing.fallbackCreated": "Fallback project created.",
706
+ "staff.support.settings.routing.fallbackProject": "Fallback project",
707
+ "staff.support.settings.routing.fallbackUnusableDescription": "It is completed, deleted, or has no default status. Point the fallback rule at another project.",
708
+ "staff.support.settings.routing.fallbackUnusableTitle": "The fallback project cannot receive tickets",
709
+ "staff.support.settings.routing.fallingBack": "Falling back to {project}",
710
+ "staff.support.settings.routing.loading": "Loading routing…",
711
+ "staff.support.settings.routing.noFallbackDescription": "Customers cannot file tickets for categories without their own rule until a fallback project exists.",
712
+ "staff.support.settings.routing.noFallbackTitle": "No fallback project",
713
+ "staff.support.settings.routing.noOverrides": "No category rules. Every category goes to the fallback project.",
714
+ "staff.support.settings.routing.nobodyNotified": "No one in this project will be notified about tickets routed here: it has no active assigner, no usable default assignee and no owner. New tickets go to the organization's project managers instead.",
715
+ "staff.support.settings.routing.overrides": "Category rules",
716
+ "staff.support.settings.routing.problem.categoryMissing": "The category no longer exists.",
717
+ "staff.support.settings.routing.problem.paused": "The rule is paused.",
718
+ "staff.support.settings.routing.problem.projectUnusable": "The project is completed, deleted, or has no default status.",
719
+ "staff.support.settings.routing.project": "Project",
720
+ "staff.support.settings.routing.routing": "Routing",
721
+ "staff.support.settings.routing.saved": "Routing saved.",
722
+ "staff.support.settings.routing.searchProject": "Search projects",
723
+ "staff.support.settings.routing.selectCategory": "Select a category",
724
+ "staff.support.settings.routing.selectProject": "Select a project",
725
+ "staff.support.settings.routing.state": "State",
726
+ "staff.support.settings.routing.title": "Routing",
727
+ "staff.support.settings.routing.unnotifiedTickets.few": "{count} tickets were not notified to anyone.",
728
+ "staff.support.settings.routing.unnotifiedTickets.many": "{count} tickets were not notified to anyone.",
729
+ "staff.support.settings.routing.unnotifiedTickets.one": "{count} ticket was not notified to anyone.",
730
+ "staff.support.settings.routing.unnotifiedTickets.other": "{count} tickets were not notified to anyone.",
731
+ "staff.support.settings.routing.unnotifiedTicketsLink": "Open them in the Support Inbox",
732
+ "staff.support.settings.title": "Support",
733
+ "staff.support.tickets.columns.assignee": "Assignee",
734
+ "staff.support.tickets.columns.category": "Category",
735
+ "staff.support.tickets.columns.customer": "Customer",
736
+ "staff.support.tickets.columns.lastActivity": "Last activity",
737
+ "staff.support.tickets.columns.portalStatus": "Status",
738
+ "staff.support.tickets.columns.project": "Project",
739
+ "staff.support.tickets.columns.reference": "Ticket",
740
+ "staff.support.tickets.columns.subject": "Subject",
741
+ "staff.support.tickets.customerKind.company": "Company",
742
+ "staff.support.tickets.customerKind.person": "Person",
743
+ "staff.support.tickets.empty": "No support tickets match these filters.",
744
+ "staff.support.tickets.filters.assignee": "Assignee",
745
+ "staff.support.tickets.filters.category": "Category",
746
+ "staff.support.tickets.filters.customer": "Customer",
747
+ "staff.support.tickets.filters.customerPlaceholder": "Search customers",
748
+ "staff.support.tickets.filters.nobodyNotified": "Nobody notified",
749
+ "staff.support.tickets.filters.portalStatus": "Status the customer sees",
750
+ "staff.support.tickets.filters.project": "Project",
751
+ "staff.support.tickets.filters.projectPlaceholder": "Search projects",
752
+ "staff.support.tickets.loadError": "Could not load the support tickets.",
753
+ "staff.support.tickets.nobodyNotified": "Nobody notified",
754
+ "staff.support.tickets.optionsLoadError": "Could not load the filter options.",
755
+ "staff.support.tickets.refresh": "Refresh",
756
+ "staff.support.tickets.searchPlaceholder": "Search by ticket reference",
757
+ "staff.support.tickets.status.inProgress": "In progress",
758
+ "staff.support.tickets.status.received": "Received",
759
+ "staff.support.tickets.status.resolved": "Resolved",
760
+ "staff.support.tickets.title": "Support Inbox",
761
+ "staff.support.tickets.unassigned": "Unassigned",
527
762
  "staff.teamMembers.actions.add": "Add team member",
528
763
  "staff.teamMembers.actions.backToList": "Back to team members",
529
764
  "staff.teamMembers.actions.delete": "Delete",
@@ -1023,6 +1258,20 @@
1023
1258
  "staff.time_tracking.access.request.error": "Could not send the access request.",
1024
1259
  "staff.time_tracking.access.request.sent": "Request sent",
1025
1260
  "staff.time_tracking.access.request.success": "Your request has been sent to the Team Leaders.",
1261
+ "staff.time_tracking.assigners.badge": "Assigner",
1262
+ "staff.time_tracking.assigners.defaultAssignee": "Default assignee for portal tickets",
1263
+ "staff.time_tracking.assigners.defaultAssigneeAfterCreate": "Save the project and add members to choose a default assignee.",
1264
+ "staff.time_tracking.assigners.defaultAssigneeHelp": "New customer portal tickets routed to this project are assigned to this member. Tasks created on the board stay assigned to their creator.",
1265
+ "staff.time_tracking.assigners.defaultAssigneeInactive": "This member is no longer an active project member. New tickets will be left unassigned and the assigners notified.",
1266
+ "staff.time_tracking.assigners.defaultAssigneeLoadFailed": "Could not load the project members, so the default assignee cannot be checked right now.",
1267
+ "staff.time_tracking.assigners.defaultAssigneeNone": "No default assignee",
1268
+ "staff.time_tracking.assigners.defaultAssigneeRetry": "Retry",
1269
+ "staff.time_tracking.assigners.disabled": "Member is no longer an assigner.",
1270
+ "staff.time_tracking.assigners.enabled": "Member is now an assigner.",
1271
+ "staff.time_tracking.assigners.help": "Assigners are notified about new and released work and can claim unassigned tasks.",
1272
+ "staff.time_tracking.assigners.label": "Assigner",
1273
+ "staff.time_tracking.assigners.needsUser": "Only members with a user account can be assigners.",
1274
+ "staff.time_tracking.assigners.saveError": "Could not change the assigner setting.",
1026
1275
  "staff.time_tracking.board.addStatus.cta": "Add status",
1027
1276
  "staff.time_tracking.board.addStatus.error": "Could not add the column.",
1028
1277
  "staff.time_tracking.board.addStatus.placeholder": "Column name",
@@ -1031,6 +1280,7 @@
1031
1280
  "staff.time_tracking.board.card.addTimeAria": "Add time to {title}",
1032
1281
  "staff.time_tracking.board.card.aria": "Task: {title}",
1033
1282
  "staff.time_tracking.board.card.assignee": "Assigned to {name}",
1283
+ "staff.time_tracking.board.card.customerRequest": "Customer request",
1034
1284
  "staff.time_tracking.board.card.moveTo.aria": "Move {title} to another column",
1035
1285
  "staff.time_tracking.board.card.moveTo.cta": "Move",
1036
1286
  "staff.time_tracking.board.card.moveTo.menu": "Move {title} to",
@@ -1059,6 +1309,8 @@
1059
1309
  "staff.time_tracking.board.filters.remove": "Remove filter: {label}",
1060
1310
  "staff.time_tracking.board.filters.status": "Status",
1061
1311
  "staff.time_tracking.board.filters.tag": "Tag",
1312
+ "staff.time_tracking.board.filters.unassigned": "Unassigned",
1313
+ "staff.time_tracking.board.filters.unassignedWithCount": "Unassigned ({count})",
1062
1314
  "staff.time_tracking.board.list.caption": "Tasks",
1063
1315
  "staff.time_tracking.board.list.columns.assignee": "Assignee",
1064
1316
  "staff.time_tracking.board.list.columns.hours": "Logged",
@@ -1613,6 +1865,8 @@
1613
1865
  "staff.time_tracking.settings.scope.hint": "The rate and currency stay at project level, and a rate override stays at entry level.",
1614
1866
  "staff.time_tracking.settings.scope.title": "Settings scope",
1615
1867
  "staff.time_tracking.settings.subtitle": "Rules shared by all customers and projects",
1868
+ "staff.time_tracking.settings.tabs.general": "Time tracking",
1869
+ "staff.time_tracking.settings.tabs.label": "Settings sections",
1616
1870
  "staff.time_tracking.settings.targets.dailyHours": "Daily hours target",
1617
1871
  "staff.time_tracking.settings.targets.dailyHoursError": "Enter a number of hours between 0 and 24, or leave the field empty.",
1618
1872
  "staff.time_tracking.settings.targets.dailyHoursHint": "Scales the load bars in the timesheet. Leave empty to turn targets off.",
@@ -1640,15 +1894,32 @@
1640
1894
  "staff.time_tracking.tags.placeholder": "Search tags",
1641
1895
  "staff.time_tracking.tags.remove": "Remove tag",
1642
1896
  "staff.time_tracking.tags.title": "Tags",
1897
+ "staff.time_tracking.taskComments.addInternalNote": "Add internal note",
1643
1898
  "staff.time_tracking.taskComments.empty": "No comments yet.",
1899
+ "staff.time_tracking.taskComments.errors.customerImmutable": "Messages written by the customer cannot be edited or deleted.",
1644
1900
  "staff.time_tracking.taskComments.errors.idRequired": "Comment id is required.",
1645
1901
  "staff.time_tracking.taskComments.errors.notAuthor": "You can only edit or delete your own comments.",
1646
1902
  "staff.time_tracking.taskComments.errors.notFound": "Comment not found or not accessible.",
1647
1903
  "staff.time_tracking.taskComments.errors.taskIdRequired": "Task id is required.",
1904
+ "staff.time_tracking.taskComments.errors.visibilityPortalOnly": "Only customer support tickets can carry replies visible to the customer.",
1905
+ "staff.time_tracking.taskComments.fromCustomer": "Customer",
1906
+ "staff.time_tracking.taskComments.internalNote": "Internal note",
1907
+ "staff.time_tracking.taskComments.makeInternal": "Make internal",
1908
+ "staff.time_tracking.taskComments.makeInternalError": "Could not change the reply.",
1648
1909
  "staff.time_tracking.taskComments.placeholder": "Write a comment…",
1910
+ "staff.time_tracking.taskComments.replyToCustomer": "Reply to customer",
1911
+ "staff.time_tracking.taskComments.shortcutInternal": "adds an internal note",
1649
1912
  "staff.time_tracking.taskComments.submit": "Comment",
1650
1913
  "staff.time_tracking.taskComments.submitHint": "⌘↵ sends",
1914
+ "staff.time_tracking.taskComments.supportPlaceholder": "Write a reply or an internal note…",
1651
1915
  "staff.time_tracking.taskComments.title": "Comments",
1916
+ "staff.time_tracking.taskComments.visibleToCustomer": "Visible to customer",
1917
+ "staff.time_tracking.taskDrawer.assignment.claim": "Claim",
1918
+ "staff.time_tracking.taskDrawer.assignment.claimError": "Could not claim the task.",
1919
+ "staff.time_tracking.taskDrawer.assignment.claimed": "Task claimed.",
1920
+ "staff.time_tracking.taskDrawer.assignment.release": "Release",
1921
+ "staff.time_tracking.taskDrawer.assignment.releaseError": "Could not release the task.",
1922
+ "staff.time_tracking.taskDrawer.assignment.released": "Task released.",
1652
1923
  "staff.time_tracking.taskDrawer.autoSave": "Changes are saved automatically",
1653
1924
  "staff.time_tracking.taskDrawer.close": "Close",
1654
1925
  "staff.time_tracking.taskDrawer.comments.empty": "No comments yet.",
@@ -1660,6 +1931,7 @@
1660
1931
  "staff.time_tracking.taskDrawer.comments.submit": "Comment",
1661
1932
  "staff.time_tracking.taskDrawer.comments.title": "Comments ({count})",
1662
1933
  "staff.time_tracking.taskDrawer.comments.unknownAuthor": "Unknown author",
1934
+ "staff.time_tracking.taskDrawer.conflict": "Someone else changed this task. It now shows the latest version. Check it and try again.",
1663
1935
  "staff.time_tracking.taskDrawer.created": "created {date}",
1664
1936
  "staff.time_tracking.taskDrawer.entries.empty": "No time entries yet.",
1665
1937
  "staff.time_tracking.taskDrawer.entries.noDescription": "No description",
@@ -1699,6 +1971,18 @@
1699
1971
  "staff.time_tracking.taskDrawer.subtasks.title": "Subtasks",
1700
1972
  "staff.time_tracking.taskDrawer.subtasks.toggle": "Mark {title} as done",
1701
1973
  "staff.time_tracking.taskDrawer.subtasks.toggleError": "Could not change the subtask status.",
1974
+ "staff.time_tracking.taskDrawer.support.category": "Category",
1975
+ "staff.time_tracking.taskDrawer.support.customer": "Customer",
1976
+ "staff.time_tracking.taskDrawer.support.originalRequest": "Original request",
1977
+ "staff.time_tracking.taskDrawer.support.portalStatus": "Customer sees",
1978
+ "staff.time_tracking.taskDrawer.support.reference": "Ticket",
1979
+ "staff.time_tracking.taskDrawer.support.reporter": "Reported by",
1980
+ "staff.time_tracking.taskDrawer.support.routedVia": "Routed by",
1981
+ "staff.time_tracking.taskDrawer.support.routedViaCategory": "Category rule",
1982
+ "staff.time_tracking.taskDrawer.support.routedViaFallback": "Fallback project",
1983
+ "staff.time_tracking.taskDrawer.support.title": "Customer request",
1984
+ "staff.time_tracking.taskDrawer.support.titleHint": "The customer sees their original request, not the task title and description.",
1985
+ "staff.time_tracking.taskDrawer.support.unknown": "Unknown",
1702
1986
  "staff.time_tracking.taskDrawer.timer.start": "Start",
1703
1987
  "staff.time_tracking.taskDrawer.timer.stop": "Stop {elapsed}",
1704
1988
  "staff.time_tracking.taskDrawer.timer.switchText": "Only one timer can run at a time. Stop the other one and start it here?",
@@ -1787,10 +2071,12 @@
1787
2071
  "staff.time_tracking.timesheet.view.grid": "Grid",
1788
2072
  "staff.time_tracking.timesheet.view.label": "Timesheet view",
1789
2073
  "staff.time_tracking.timesheet.view.list": "List",
2074
+ "staff.timesheets.errors.assignerNeedsUser": "Only team members with a user account can be assigners, because they must log in and receive notifications.",
1790
2075
  "staff.timesheets.errors.bulkSave": "Failed to bulk save time entries.",
1791
2076
  "staff.timesheets.errors.bulkTagsUnsupported": "Tags cannot be changed from the timesheet grid. Open the time entry to edit its tags.",
1792
2077
  "staff.timesheets.errors.copyDaySameDate": "The source and target day must be different.",
1793
2078
  "staff.timesheets.errors.copyDayTargetNotEmpty": "The target day already has time entries. Review them first, or confirm to add these copies anyway.",
2079
+ "staff.timesheets.errors.defaultAssigneeNotMember": "The default assignee must be an active member of this project.",
1794
2080
  "staff.timesheets.errors.entryNotFound": "Time entry not found, deleted, or not owned by you.",
1795
2081
  "staff.timesheets.errors.invalidBody": "Invalid request body.",
1796
2082
  "staff.timesheets.errors.invalidProjectId": "Invalid project id.",
@@ -1801,6 +2087,8 @@
1801
2087
  "staff.timesheets.errors.noActiveSegment": "No active timer segment found for this entry.",
1802
2088
  "staff.timesheets.errors.noStaffMember": "No staff member linked to your account.",
1803
2089
  "staff.timesheets.errors.notAssigned": "You are not assigned to this project.",
2090
+ "staff.timesheets.errors.notAssignee": "Only the current assignee can release this task.",
2091
+ "staff.timesheets.errors.notAssigner": "Only active assigners of this project can claim tasks.",
1804
2092
  "staff.timesheets.errors.notOwner": "You can only manage your own time entries.",
1805
2093
  "staff.timesheets.errors.outsideAssignmentWindow": "This date is outside your assignment to this project.",
1806
2094
  "staff.timesheets.errors.projectCodeDuplicate": "A project with this code already exists.",
@@ -1810,6 +2098,9 @@
1810
2098
  "staff.timesheets.errors.projectsKpis": "Failed to load project KPIs.",
1811
2099
  "staff.timesheets.errors.segmentCreate": "Failed to create time entry segment.",
1812
2100
  "staff.timesheets.errors.staffMemberNotFound": "Staff member not found or not accessible.",
2101
+ "staff.timesheets.errors.taskAlreadyClaimed": "Someone else already took this task.",
2102
+ "staff.timesheets.errors.taskChanged": "The task changed while you were releasing it. Refresh and try again.",
2103
+ "staff.timesheets.errors.taskNotClaimable": "A finished task cannot be claimed.",
1813
2104
  "staff.timesheets.errors.taskNotFound": "Task not found or not accessible.",
1814
2105
  "staff.timesheets.errors.timerAlreadyRunning": "Another timer is already running. Stop it before starting a new one.",
1815
2106
  "staff.timesheets.errors.timerAlreadyStarted": "Timer is already started for this entry.",