shutro-erp 0.3.4 → 0.3.6

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 (618) hide show
  1. package/dist/account_asset/.kosh/bindings.d.ts +22 -0
  2. package/dist/account_asset/.kosh/bindings.js +15 -0
  3. package/dist/account_asset/.kosh/schema.d.ts +1755 -0
  4. package/dist/account_asset/board.d.ts +61 -0
  5. package/dist/account_asset/board.js +86 -0
  6. package/dist/account_asset/books.d.ts +42 -0
  7. package/dist/account_asset/books.js +398 -0
  8. package/dist/account_asset/demo.d.ts +7 -0
  9. package/dist/account_asset/demo.js +72 -0
  10. package/dist/account_asset/index.d.ts +9 -0
  11. package/dist/account_asset/index.js +335 -0
  12. package/dist/account_asset/module.d.ts +7622 -0
  13. package/dist/account_asset/module.js +230 -0
  14. package/dist/account_budget/.kosh/bindings.d.ts +22 -0
  15. package/dist/account_budget/.kosh/bindings.js +15 -0
  16. package/dist/account_budget/.kosh/schema.d.ts +1767 -0
  17. package/dist/account_budget/budget.d.ts +5 -0
  18. package/dist/account_budget/budget.js +142 -0
  19. package/dist/account_budget/demo.d.ts +6 -0
  20. package/dist/account_budget/demo.js +30 -0
  21. package/dist/account_budget/index.d.ts +4 -0
  22. package/dist/account_budget/index.js +223 -0
  23. package/dist/account_budget/module.d.ts +13863 -0
  24. package/dist/account_budget/module.js +167 -0
  25. package/dist/account_portal/.kosh/bindings.js +1 -1
  26. package/dist/account_portal/.kosh/schema.d.ts +176 -6
  27. package/dist/account_portal/module.d.ts +505 -6
  28. package/dist/accounting/.kosh/bindings.js +1 -1
  29. package/dist/accounting/.kosh/schema.d.ts +176 -6
  30. package/dist/accounting/index.d.ts +1 -1
  31. package/dist/accounting/index.js +344 -4
  32. package/dist/accounting/module.d.ts +513 -5
  33. package/dist/accounting/module.js +55 -3
  34. package/dist/approvals/.kosh/bindings.d.ts +22 -0
  35. package/dist/approvals/.kosh/bindings.js +15 -0
  36. package/dist/approvals/.kosh/schema.d.ts +611 -0
  37. package/dist/approvals/index.d.ts +18 -0
  38. package/dist/approvals/index.js +302 -0
  39. package/dist/approvals/mails.d.ts +25 -0
  40. package/dist/approvals/mails.js +82 -0
  41. package/dist/approvals/module.d.ts +1 -0
  42. package/dist/approvals/module.js +12 -0
  43. package/dist/approvals/web/History.d.ts +4 -0
  44. package/dist/approvals/web/History.js +13 -0
  45. package/dist/approvals/web/Inbox.d.ts +9 -0
  46. package/dist/approvals/web/Inbox.js +114 -0
  47. package/dist/approvals/web/Mine.d.ts +7 -0
  48. package/dist/approvals/web/Mine.js +27 -0
  49. package/dist/approvals/web/index.d.ts +13 -0
  50. package/dist/approvals/web/index.js +22 -0
  51. package/dist/approvals/web/messages.d.ts +2 -0
  52. package/dist/approvals/web/messages.js +119 -0
  53. package/dist/approvals/web/shared.d.ts +59 -0
  54. package/dist/approvals/web/shared.js +46 -0
  55. package/dist/attendance/.kosh/bindings.d.ts +22 -0
  56. package/dist/attendance/.kosh/bindings.js +15 -0
  57. package/dist/attendance/.kosh/schema.d.ts +1048 -0
  58. package/dist/attendance/days.d.ts +96 -0
  59. package/dist/attendance/days.js +430 -0
  60. package/dist/attendance/demo.d.ts +7 -0
  61. package/dist/attendance/demo.js +58 -0
  62. package/dist/attendance/index.d.ts +4 -0
  63. package/dist/attendance/index.js +513 -0
  64. package/dist/attendance/module.d.ts +3969 -0
  65. package/dist/attendance/module.js +412 -0
  66. package/dist/attendance/routes.d.ts +16 -0
  67. package/dist/attendance/routes.js +266 -0
  68. package/dist/attendance/web/Check.d.ts +8 -0
  69. package/dist/attendance/web/Check.js +40 -0
  70. package/dist/attendance/web/Kiosk.d.ts +8 -0
  71. package/dist/attendance/web/Kiosk.js +62 -0
  72. package/dist/attendance/web/PinButton.d.ts +7 -0
  73. package/dist/attendance/web/PinButton.js +29 -0
  74. package/dist/attendance/web/index.d.ts +13 -0
  75. package/dist/attendance/web/index.js +22 -0
  76. package/dist/attendance/web/messages.d.ts +2 -0
  77. package/dist/attendance/web/messages.js +61 -0
  78. package/dist/calendar/.kosh/bindings.d.ts +22 -0
  79. package/dist/calendar/.kosh/bindings.js +15 -0
  80. package/dist/calendar/.kosh/schema.d.ts +795 -0
  81. package/dist/calendar/demo.d.ts +6 -0
  82. package/dist/calendar/demo.js +24 -0
  83. package/dist/calendar/index.d.ts +3 -0
  84. package/dist/calendar/index.js +291 -0
  85. package/dist/calendar/module.d.ts +1705 -0
  86. package/dist/calendar/module.js +180 -0
  87. package/dist/cli/init.js +80 -0
  88. package/dist/cli/templates.d.ts +1 -1
  89. package/dist/cli/templates.js +226 -0
  90. package/dist/contacts/.kosh/bindings.js +1 -1
  91. package/dist/contacts/.kosh/schema.d.ts +78 -3
  92. package/dist/contacts/demo.js +30 -1
  93. package/dist/contacts/index.d.ts +1 -1
  94. package/dist/contacts/index.js +155 -9
  95. package/dist/contacts/module.d.ts +338 -2
  96. package/dist/contacts/module.js +93 -5
  97. package/dist/crm/.kosh/bindings.d.ts +22 -0
  98. package/dist/crm/.kosh/bindings.js +15 -0
  99. package/dist/crm/.kosh/schema.d.ts +800 -0
  100. package/dist/crm/demo.d.ts +6 -0
  101. package/dist/crm/demo.js +45 -0
  102. package/dist/crm/index.d.ts +3 -0
  103. package/dist/crm/index.js +361 -0
  104. package/dist/crm/module.d.ts +1845 -0
  105. package/dist/crm/module.js +208 -0
  106. package/dist/documents/.kosh/bindings.d.ts +22 -0
  107. package/dist/documents/.kosh/bindings.js +15 -0
  108. package/dist/documents/.kosh/schema.d.ts +862 -0
  109. package/dist/documents/demo.d.ts +6 -0
  110. package/dist/documents/demo.js +22 -0
  111. package/dist/documents/documents.d.ts +98 -0
  112. package/dist/documents/documents.js +318 -0
  113. package/dist/documents/index.d.ts +30 -0
  114. package/dist/documents/index.js +442 -0
  115. package/dist/documents/module.d.ts +2781 -0
  116. package/dist/documents/module.js +214 -0
  117. package/dist/documents/web/Versions.d.ts +7 -0
  118. package/dist/documents/web/Versions.js +45 -0
  119. package/dist/documents/web/index.d.ts +11 -0
  120. package/dist/documents/web/index.js +16 -0
  121. package/dist/documents/web/messages.d.ts +2 -0
  122. package/dist/documents/web/messages.js +21 -0
  123. package/dist/event/.kosh/bindings.d.ts +22 -0
  124. package/dist/event/.kosh/bindings.js +15 -0
  125. package/dist/event/.kosh/schema.d.ts +843 -0
  126. package/dist/event/demo.d.ts +6 -0
  127. package/dist/event/demo.js +65 -0
  128. package/dist/event/index.d.ts +14 -0
  129. package/dist/event/index.js +333 -0
  130. package/dist/event/mails.d.ts +15 -0
  131. package/dist/event/mails.js +112 -0
  132. package/dist/event/module.d.ts +2800 -0
  133. package/dist/event/module.js +323 -0
  134. package/dist/event/web/CheckInBox.d.ts +9 -0
  135. package/dist/event/web/CheckInBox.js +87 -0
  136. package/dist/event/web/index.d.ts +11 -0
  137. package/dist/event/web/index.js +16 -0
  138. package/dist/event/web/messages.d.ts +2 -0
  139. package/dist/event/web/messages.js +23 -0
  140. package/dist/event_account/.kosh/bindings.d.ts +22 -0
  141. package/dist/event_account/.kosh/bindings.js +15 -0
  142. package/dist/event_account/.kosh/schema.d.ts +1758 -0
  143. package/dist/event_account/index.d.ts +3 -0
  144. package/dist/event_account/index.js +28 -0
  145. package/dist/event_account/module.d.ts +7114 -0
  146. package/dist/event_account/module.js +90 -0
  147. package/dist/expense/.kosh/bindings.d.ts +22 -0
  148. package/dist/expense/.kosh/bindings.js +15 -0
  149. package/dist/expense/.kosh/schema.d.ts +1299 -0
  150. package/dist/expense/demo.d.ts +7 -0
  151. package/dist/expense/demo.js +69 -0
  152. package/dist/expense/index.d.ts +3 -0
  153. package/dist/expense/index.js +495 -0
  154. package/dist/expense/module.d.ts +4747 -0
  155. package/dist/expense/module.js +647 -0
  156. package/dist/expense_account/.kosh/bindings.d.ts +22 -0
  157. package/dist/expense_account/.kosh/bindings.js +15 -0
  158. package/dist/expense_account/.kosh/schema.d.ts +1936 -0
  159. package/dist/expense_account/index.d.ts +3 -0
  160. package/dist/expense_account/index.js +74 -0
  161. package/dist/expense_account/module.d.ts +9153 -0
  162. package/dist/expense_account/module.js +318 -0
  163. package/dist/helpdesk/.kosh/bindings.d.ts +22 -0
  164. package/dist/helpdesk/.kosh/bindings.js +15 -0
  165. package/dist/helpdesk/.kosh/schema.d.ts +885 -0
  166. package/dist/helpdesk/demo.d.ts +7 -0
  167. package/dist/helpdesk/demo.js +65 -0
  168. package/dist/helpdesk/hours.d.ts +17 -0
  169. package/dist/helpdesk/hours.js +94 -0
  170. package/dist/helpdesk/index.d.ts +10 -0
  171. package/dist/helpdesk/index.js +461 -0
  172. package/dist/helpdesk/module.d.ts +2940 -0
  173. package/dist/helpdesk/module.js +326 -0
  174. package/dist/helpdesk/routes.d.ts +12 -0
  175. package/dist/helpdesk/routes.js +132 -0
  176. package/dist/helpdesk/sla.d.ts +37 -0
  177. package/dist/helpdesk/sla.js +226 -0
  178. package/dist/hr/.kosh/bindings.d.ts +22 -0
  179. package/dist/hr/.kosh/bindings.js +15 -0
  180. package/dist/hr/.kosh/schema.d.ts +878 -0
  181. package/dist/hr/demo.d.ts +6 -0
  182. package/dist/hr/demo.js +60 -0
  183. package/dist/hr/index.d.ts +3 -0
  184. package/dist/hr/index.js +483 -0
  185. package/dist/hr/module.d.ts +2611 -0
  186. package/dist/hr/module.js +350 -0
  187. package/dist/l10n_bd/.kosh/bindings.js +1 -1
  188. package/dist/l10n_bd/.kosh/schema.d.ts +176 -6
  189. package/dist/l10n_bd/module.d.ts +505 -6
  190. package/dist/l10n_bd_payroll/.kosh/bindings.d.ts +22 -0
  191. package/dist/l10n_bd_payroll/.kosh/bindings.js +15 -0
  192. package/dist/l10n_bd_payroll/.kosh/schema.d.ts +2312 -0
  193. package/dist/l10n_bd_payroll/data.d.ts +47 -0
  194. package/dist/l10n_bd_payroll/data.js +347 -0
  195. package/dist/l10n_bd_payroll/index.d.ts +4 -0
  196. package/dist/l10n_bd_payroll/index.js +24 -0
  197. package/dist/l10n_bd_payroll/module.d.ts +12932 -0
  198. package/dist/l10n_bd_payroll/module.js +86 -0
  199. package/dist/l10n_in/.kosh/bindings.js +1 -1
  200. package/dist/l10n_in/.kosh/schema.d.ts +176 -6
  201. package/dist/l10n_in/module.d.ts +527 -7
  202. package/dist/mail/inbound/handle.js +6 -1
  203. package/dist/maintenance/.kosh/bindings.d.ts +22 -0
  204. package/dist/maintenance/.kosh/bindings.js +15 -0
  205. package/dist/maintenance/.kosh/schema.d.ts +911 -0
  206. package/dist/maintenance/demo.d.ts +6 -0
  207. package/dist/maintenance/demo.js +60 -0
  208. package/dist/maintenance/index.d.ts +3 -0
  209. package/dist/maintenance/index.js +422 -0
  210. package/dist/maintenance/module.d.ts +3545 -0
  211. package/dist/maintenance/module.js +446 -0
  212. package/dist/maintenance_stock/.kosh/bindings.d.ts +22 -0
  213. package/dist/maintenance_stock/.kosh/bindings.js +15 -0
  214. package/dist/maintenance_stock/.kosh/schema.d.ts +1446 -0
  215. package/dist/maintenance_stock/index.d.ts +9 -0
  216. package/dist/maintenance_stock/index.js +52 -0
  217. package/dist/maintenance_stock/module.d.ts +7675 -0
  218. package/dist/maintenance_stock/module.js +192 -0
  219. package/dist/modules-sdk/index.d.ts +1 -1
  220. package/dist/modules-sdk/manifest.d.ts +109 -2
  221. package/dist/modules-sdk/manifest.js +35 -1
  222. package/dist/mrp/.kosh/bindings.d.ts +22 -0
  223. package/dist/mrp/.kosh/bindings.js +15 -0
  224. package/dist/mrp/.kosh/schema.d.ts +1453 -0
  225. package/dist/mrp/demo.d.ts +7 -0
  226. package/dist/mrp/demo.js +42 -0
  227. package/dist/mrp/index.d.ts +3 -0
  228. package/dist/mrp/index.js +393 -0
  229. package/dist/mrp/module.d.ts +9335 -0
  230. package/dist/mrp/module.js +757 -0
  231. package/dist/mrp_account/.kosh/bindings.d.ts +22 -0
  232. package/dist/mrp_account/.kosh/bindings.js +15 -0
  233. package/dist/mrp_account/.kosh/schema.d.ts +2299 -0
  234. package/dist/mrp_account/index.d.ts +3 -0
  235. package/dist/mrp_account/index.js +22 -0
  236. package/dist/mrp_account/module.d.ts +23151 -0
  237. package/dist/mrp_account/module.js +123 -0
  238. package/dist/payment/.kosh/bindings.js +1 -1
  239. package/dist/payment/.kosh/schema.d.ts +178 -7
  240. package/dist/payment/index.d.ts +41 -0
  241. package/dist/payment/index.js +131 -74
  242. package/dist/payment/module.d.ts +569 -12
  243. package/dist/payment/module.js +19 -3
  244. package/dist/payment/settle.js +10 -1
  245. package/dist/payroll/.kosh/bindings.d.ts +22 -0
  246. package/dist/payroll/.kosh/bindings.js +15 -0
  247. package/dist/payroll/.kosh/schema.d.ts +1390 -0
  248. package/dist/payroll/compute.d.ts +35 -0
  249. package/dist/payroll/compute.js +398 -0
  250. package/dist/payroll/demo.d.ts +55 -0
  251. package/dist/payroll/demo.js +121 -0
  252. package/dist/payroll/formula.d.ts +62 -0
  253. package/dist/payroll/formula.js +320 -0
  254. package/dist/payroll/index.d.ts +230 -0
  255. package/dist/payroll/index.js +713 -0
  256. package/dist/payroll/module.d.ts +9390 -0
  257. package/dist/payroll/module.js +606 -0
  258. package/dist/payroll/routes.d.ts +10 -0
  259. package/dist/payroll/routes.js +112 -0
  260. package/dist/payroll_account/.kosh/bindings.d.ts +22 -0
  261. package/dist/payroll_account/.kosh/bindings.js +15 -0
  262. package/dist/payroll_account/.kosh/schema.d.ts +2308 -0
  263. package/dist/payroll_account/index.d.ts +3 -0
  264. package/dist/payroll_account/index.js +40 -0
  265. package/dist/payroll_account/module.d.ts +12396 -0
  266. package/dist/payroll_account/module.js +256 -0
  267. package/dist/permissions/approvals.d.ts +131 -9
  268. package/dist/permissions/approvals.js +662 -57
  269. package/dist/permissions/index.d.ts +1 -1
  270. package/dist/permissions/index.js +2 -2
  271. package/dist/permissions/models.js +191 -12
  272. package/dist/permissions/routes.d.ts +6 -1
  273. package/dist/permissions/routes.js +37 -4
  274. package/dist/permissions/web/ApprovalPanel.d.ts +5 -4
  275. package/dist/permissions/web/ApprovalPanel.js +39 -13
  276. package/dist/permissions/web/index.d.ts +6 -4
  277. package/dist/permissions/web/index.js +13 -4
  278. package/dist/permissions/web/messages.d.ts +2 -0
  279. package/dist/permissions/web/messages.js +43 -0
  280. package/dist/portal/.kosh/bindings.js +1 -1
  281. package/dist/portal/.kosh/schema.d.ts +78 -3
  282. package/dist/portal/index.js +1 -1
  283. package/dist/portal/module.d.ts +166 -2
  284. package/dist/pos/.kosh/bindings.d.ts +22 -0
  285. package/dist/pos/.kosh/bindings.js +15 -0
  286. package/dist/pos/.kosh/schema.d.ts +1809 -0
  287. package/dist/pos/accounting.d.ts +10 -0
  288. package/dist/pos/accounting.js +149 -0
  289. package/dist/pos/demo.d.ts +6 -0
  290. package/dist/pos/demo.js +90 -0
  291. package/dist/pos/index.d.ts +9 -0
  292. package/dist/pos/index.js +353 -0
  293. package/dist/pos/module.d.ts +9783 -0
  294. package/dist/pos/module.js +423 -0
  295. package/dist/pos/routes.d.ts +39 -0
  296. package/dist/pos/routes.js +368 -0
  297. package/dist/pos/web/Register.d.ts +9 -0
  298. package/dist/pos/web/Register.js +252 -0
  299. package/dist/pos/web/index.d.ts +11 -0
  300. package/dist/pos/web/index.js +16 -0
  301. package/dist/pos/web/messages.d.ts +2 -0
  302. package/dist/pos/web/messages.js +87 -0
  303. package/dist/pos_stock/.kosh/bindings.d.ts +22 -0
  304. package/dist/pos_stock/.kosh/bindings.js +15 -0
  305. package/dist/pos_stock/.kosh/schema.d.ts +2208 -0
  306. package/dist/pos_stock/index.d.ts +9 -0
  307. package/dist/pos_stock/index.js +35 -0
  308. package/dist/pos_stock/module.d.ts +12803 -0
  309. package/dist/pos_stock/module.js +115 -0
  310. package/dist/product/.kosh/bindings.js +1 -1
  311. package/dist/product/.kosh/schema.d.ts +52 -1
  312. package/dist/product/index.js +94 -4
  313. package/dist/product/module.d.ts +45 -1
  314. package/dist/product/module.js +11 -3
  315. package/dist/project/.kosh/bindings.js +1 -1
  316. package/dist/project/.kosh/schema.d.ts +725 -3
  317. package/dist/project/index.d.ts +3 -1
  318. package/dist/project/index.js +1045 -18
  319. package/dist/project/module.d.ts +10168 -458
  320. package/dist/project/module.js +1578 -14
  321. package/dist/project/routes.d.ts +44 -0
  322. package/dist/project/routes.js +314 -0
  323. package/dist/project/schedule.d.ts +72 -0
  324. package/dist/project/schedule.js +192 -0
  325. package/dist/project/web/Refresh.d.ts +8 -0
  326. package/dist/project/web/Refresh.js +29 -0
  327. package/dist/project/web/Schedule.d.ts +9 -0
  328. package/dist/project/web/Schedule.js +93 -0
  329. package/dist/project/web/Structure.d.ts +8 -0
  330. package/dist/project/web/Structure.js +86 -0
  331. package/dist/project/web/Workload.d.ts +8 -0
  332. package/dist/project/web/Workload.js +43 -0
  333. package/dist/project/web/index.d.ts +14 -0
  334. package/dist/project/web/index.js +25 -0
  335. package/dist/project/web/messages.d.ts +2 -0
  336. package/dist/project/web/messages.js +85 -0
  337. package/dist/project_account/.kosh/bindings.d.ts +22 -0
  338. package/dist/project_account/.kosh/bindings.js +15 -0
  339. package/dist/project_account/.kosh/schema.d.ts +2241 -0
  340. package/dist/project_account/index.d.ts +3 -0
  341. package/dist/project_account/index.js +27 -0
  342. package/dist/project_account/module.d.ts +11539 -0
  343. package/dist/project_account/module.js +76 -0
  344. package/dist/project_portal/.kosh/bindings.js +1 -1
  345. package/dist/project_portal/.kosh/schema.d.ts +725 -3
  346. package/dist/project_portal/module.d.ts +5137 -119
  347. package/dist/project_purchase/.kosh/bindings.d.ts +22 -0
  348. package/dist/project_purchase/.kosh/bindings.js +15 -0
  349. package/dist/project_purchase/.kosh/schema.d.ts +2320 -0
  350. package/dist/project_purchase/index.d.ts +9 -0
  351. package/dist/project_purchase/index.js +22 -0
  352. package/dist/project_purchase/module.d.ts +25147 -0
  353. package/dist/project_purchase/module.js +56 -0
  354. package/dist/purchase/.kosh/bindings.js +1 -1
  355. package/dist/purchase/.kosh/schema.d.ts +150 -6
  356. package/dist/purchase/index.js +163 -3
  357. package/dist/purchase/module.d.ts +228 -5
  358. package/dist/purchase/module.js +30 -3
  359. package/dist/purchase_account/.kosh/bindings.js +1 -1
  360. package/dist/purchase_account/.kosh/schema.d.ts +180 -8
  361. package/dist/purchase_account/index.js +27 -1
  362. package/dist/purchase_account/module.d.ts +591 -30
  363. package/dist/purchase_account/module.js +13 -2
  364. package/dist/purchase_portal/.kosh/bindings.js +1 -1
  365. package/dist/purchase_portal/.kosh/schema.d.ts +150 -6
  366. package/dist/purchase_portal/module.d.ts +372 -6
  367. package/dist/purchase_stock/.kosh/bindings.d.ts +22 -0
  368. package/dist/purchase_stock/.kosh/bindings.js +15 -0
  369. package/dist/purchase_stock/.kosh/schema.d.ts +1479 -0
  370. package/dist/purchase_stock/index.d.ts +7 -0
  371. package/dist/purchase_stock/index.js +98 -0
  372. package/dist/purchase_stock/module.d.ts +7535 -0
  373. package/dist/purchase_stock/module.js +380 -0
  374. package/dist/purchase_stock_account/.kosh/bindings.d.ts +22 -0
  375. package/dist/purchase_stock_account/.kosh/bindings.js +15 -0
  376. package/dist/purchase_stock_account/.kosh/schema.d.ts +2155 -0
  377. package/dist/purchase_stock_account/index.d.ts +3 -0
  378. package/dist/purchase_stock_account/index.js +24 -0
  379. package/dist/purchase_stock_account/module.d.ts +38015 -0
  380. package/dist/purchase_stock_account/module.js +168 -0
  381. package/dist/recruitment/.kosh/bindings.d.ts +22 -0
  382. package/dist/recruitment/.kosh/bindings.js +15 -0
  383. package/dist/recruitment/.kosh/schema.d.ts +991 -0
  384. package/dist/recruitment/demo.d.ts +6 -0
  385. package/dist/recruitment/demo.js +45 -0
  386. package/dist/recruitment/index.d.ts +3 -0
  387. package/dist/recruitment/index.js +385 -0
  388. package/dist/recruitment/module.d.ts +3249 -0
  389. package/dist/recruitment/module.js +194 -0
  390. package/dist/recruitment/web/HireButton.d.ts +9 -0
  391. package/dist/recruitment/web/HireButton.js +32 -0
  392. package/dist/recruitment/web/index.d.ts +11 -0
  393. package/dist/recruitment/web/index.js +16 -0
  394. package/dist/recruitment/web/messages.d.ts +2 -0
  395. package/dist/recruitment/web/messages.js +19 -0
  396. package/dist/reporting/documents.d.ts +5 -0
  397. package/dist/reporting/documents.js +28 -1
  398. package/dist/reporting/index.d.ts +1 -1
  399. package/dist/reporting/index.js +4 -2
  400. package/dist/reporting/models.js +9 -0
  401. package/dist/reporting/overviews.d.ts +16 -0
  402. package/dist/reporting/overviews.js +56 -0
  403. package/dist/reporting/routes-documents.js +1 -1
  404. package/dist/reporting/routes.js +138 -80
  405. package/dist/reporting/web/DashboardView.d.ts +11 -0
  406. package/dist/reporting/web/DashboardView.js +2 -2
  407. package/dist/reporting/web/DesignerView.js +5 -0
  408. package/dist/reporting/web/Overview.d.ts +9 -0
  409. package/dist/reporting/web/Overview.js +53 -0
  410. package/dist/reporting/web/index.d.ts +1 -0
  411. package/dist/reporting/web/index.js +4 -1
  412. package/dist/reporting/web/messages.js +9 -0
  413. package/dist/sale_account/.kosh/bindings.js +1 -1
  414. package/dist/sale_account/.kosh/schema.d.ts +181 -6
  415. package/dist/sale_account/index.js +22 -1
  416. package/dist/sale_account/module.d.ts +639 -38
  417. package/dist/sale_portal/.kosh/bindings.js +1 -1
  418. package/dist/sale_portal/.kosh/schema.d.ts +59 -3
  419. package/dist/sale_portal/module.d.ts +435 -5
  420. package/dist/sale_project/.kosh/bindings.js +1 -1
  421. package/dist/sale_project/.kosh/schema.d.ts +732 -3
  422. package/dist/sale_project/module.d.ts +5349 -208
  423. package/dist/sale_project/module.js +17 -1
  424. package/dist/sale_stock/.kosh/bindings.d.ts +22 -0
  425. package/dist/sale_stock/.kosh/bindings.js +15 -0
  426. package/dist/sale_stock/.kosh/schema.d.ts +1303 -0
  427. package/dist/sale_stock/index.d.ts +7 -0
  428. package/dist/sale_stock/index.js +84 -0
  429. package/dist/sale_stock/module.d.ts +7514 -0
  430. package/dist/sale_stock/module.js +146 -0
  431. package/dist/sales/.kosh/bindings.js +1 -1
  432. package/dist/sales/.kosh/schema.d.ts +59 -3
  433. package/dist/sales/index.js +195 -4
  434. package/dist/sales/module.d.ts +356 -3
  435. package/dist/sales/module.js +78 -3
  436. package/dist/server/api/metadata.d.ts +5 -0
  437. package/dist/server/api/metadata.js +5 -0
  438. package/dist/server/api/rest.js +64 -1
  439. package/dist/server/api/views.js +1 -0
  440. package/dist/server/app-settings.d.ts +7 -0
  441. package/dist/server/app-settings.js +10 -0
  442. package/dist/server/auth/base.js +9 -0
  443. package/dist/server/index.d.ts +1 -0
  444. package/dist/server/index.js +1 -0
  445. package/dist/settings/app-settings.d.ts +2 -0
  446. package/dist/settings/app-settings.js +518 -0
  447. package/dist/settings/index.d.ts +1 -0
  448. package/dist/settings/index.js +15 -0
  449. package/dist/settings/people.js +29 -5
  450. package/dist/settings/web/AppSettingsPage.d.ts +11 -0
  451. package/dist/settings/web/AppSettingsPage.js +210 -0
  452. package/dist/settings/web/OverviewPage.js +16 -3
  453. package/dist/settings/web/PeoplePage.js +20 -6
  454. package/dist/settings/web/index.d.ts +1 -0
  455. package/dist/settings/web/index.js +3 -0
  456. package/dist/settings/web/messages.js +118 -2
  457. package/dist/sign/.kosh/bindings.d.ts +22 -0
  458. package/dist/sign/.kosh/bindings.js +15 -0
  459. package/dist/sign/.kosh/schema.d.ts +990 -0
  460. package/dist/sign/index.d.ts +14 -0
  461. package/dist/sign/index.js +350 -0
  462. package/dist/sign/module.d.ts +4478 -0
  463. package/dist/sign/module.js +158 -0
  464. package/dist/sign/sign.d.ts +82 -0
  465. package/dist/sign/sign.js +474 -0
  466. package/dist/stock/.kosh/bindings.d.ts +22 -0
  467. package/dist/stock/.kosh/bindings.js +15 -0
  468. package/dist/stock/.kosh/schema.d.ts +1222 -0
  469. package/dist/stock/demo.d.ts +8 -0
  470. package/dist/stock/demo.js +82 -0
  471. package/dist/stock/index.d.ts +4 -0
  472. package/dist/stock/index.js +903 -0
  473. package/dist/stock/module.d.ts +7856 -0
  474. package/dist/stock/module.js +1880 -0
  475. package/dist/stock/replenish.d.ts +38 -0
  476. package/dist/stock/replenish.js +176 -0
  477. package/dist/stock/web/Replenishment.d.ts +8 -0
  478. package/dist/stock/web/Replenishment.js +84 -0
  479. package/dist/stock/web/ScanBox.d.ts +8 -0
  480. package/dist/stock/web/ScanBox.js +90 -0
  481. package/dist/stock/web/index.d.ts +13 -0
  482. package/dist/stock/web/index.js +20 -0
  483. package/dist/stock/web/messages.d.ts +2 -0
  484. package/dist/stock/web/messages.js +77 -0
  485. package/dist/stock_account/.kosh/bindings.d.ts +22 -0
  486. package/dist/stock_account/.kosh/bindings.js +15 -0
  487. package/dist/stock_account/.kosh/schema.d.ts +2068 -0
  488. package/dist/stock_account/index.d.ts +3 -0
  489. package/dist/stock_account/index.js +140 -0
  490. package/dist/stock_account/module.d.ts +11523 -0
  491. package/dist/stock_account/module.js +339 -0
  492. package/dist/storage/attachments.d.ts +5 -0
  493. package/dist/storage/attachments.js +12 -1
  494. package/dist/storage/models.js +3 -0
  495. package/dist/storage/routes.js +13 -2
  496. package/dist/todo/.kosh/bindings.d.ts +22 -0
  497. package/dist/todo/.kosh/bindings.js +15 -0
  498. package/dist/todo/.kosh/schema.d.ts +732 -0
  499. package/dist/todo/demo.d.ts +6 -0
  500. package/dist/todo/demo.js +35 -0
  501. package/dist/todo/index.d.ts +3 -0
  502. package/dist/todo/index.js +187 -0
  503. package/dist/todo/module.d.ts +1180 -0
  504. package/dist/todo/module.js +130 -0
  505. package/dist/trade_finance/.kosh/bindings.d.ts +22 -0
  506. package/dist/trade_finance/.kosh/bindings.js +15 -0
  507. package/dist/trade_finance/.kosh/schema.d.ts +884 -0
  508. package/dist/trade_finance/demo.d.ts +6 -0
  509. package/dist/trade_finance/demo.js +63 -0
  510. package/dist/trade_finance/index.d.ts +3 -0
  511. package/dist/trade_finance/index.js +415 -0
  512. package/dist/trade_finance/module.d.ts +3779 -0
  513. package/dist/trade_finance/module.js +507 -0
  514. package/dist/trade_finance_account/.kosh/bindings.d.ts +22 -0
  515. package/dist/trade_finance_account/.kosh/bindings.js +15 -0
  516. package/dist/trade_finance_account/.kosh/schema.d.ts +1830 -0
  517. package/dist/trade_finance_account/index.d.ts +3 -0
  518. package/dist/trade_finance_account/index.js +93 -0
  519. package/dist/trade_finance_account/module.d.ts +8074 -0
  520. package/dist/trade_finance_account/module.js +245 -0
  521. package/dist/trade_finance_purchase/.kosh/bindings.d.ts +22 -0
  522. package/dist/trade_finance_purchase/.kosh/bindings.js +15 -0
  523. package/dist/trade_finance_purchase/.kosh/schema.d.ts +1246 -0
  524. package/dist/trade_finance_purchase/index.d.ts +8 -0
  525. package/dist/trade_finance_purchase/index.js +50 -0
  526. package/dist/trade_finance_purchase/module.d.ts +4257 -0
  527. package/dist/trade_finance_purchase/module.js +44 -0
  528. package/dist/trade_finance_sale/.kosh/bindings.d.ts +22 -0
  529. package/dist/trade_finance_sale/.kosh/bindings.js +15 -0
  530. package/dist/trade_finance_sale/.kosh/schema.d.ts +1072 -0
  531. package/dist/trade_finance_sale/index.d.ts +8 -0
  532. package/dist/trade_finance_sale/index.js +50 -0
  533. package/dist/trade_finance_sale/module.d.ts +4281 -0
  534. package/dist/trade_finance_sale/module.js +44 -0
  535. package/dist/ui/api.d.ts +2 -1
  536. package/dist/ui/api.js +2 -1
  537. package/dist/ui/app.js +26 -13
  538. package/dist/ui/components/AppIcon.js +30 -1
  539. package/dist/ui/components/primitives.d.ts +2 -0
  540. package/dist/ui/components/primitives.js +7 -1
  541. package/dist/ui/i18n/messages.d.ts +27 -0
  542. package/dist/ui/i18n/messages.js +46 -0
  543. package/dist/ui/index.d.ts +1 -0
  544. package/dist/ui/index.js +1 -0
  545. package/dist/ui/offline/queue.d.ts +5 -1
  546. package/dist/ui/offline/queue.js +2 -0
  547. package/dist/ui/registry.d.ts +5 -0
  548. package/dist/ui/shell/Home.js +55 -4
  549. package/dist/ui/views/FormView.js +102 -19
  550. package/dist/ui/views/KanbanView.d.ts +2 -0
  551. package/dist/ui/views/KanbanView.js +40 -3
  552. package/dist/ui/views/ListView.js +110 -11
  553. package/dist/ui/views/StatsRow.d.ts +14 -0
  554. package/dist/ui/views/StatsRow.js +88 -0
  555. package/dist/ui/views/widgets.d.ts +2 -1
  556. package/dist/ui/views/widgets.js +200 -1
  557. package/dist/views/builders.d.ts +19 -2
  558. package/dist/views/builders.js +21 -1
  559. package/dist/views/condition.d.ts +6 -0
  560. package/dist/views/condition.js +20 -0
  561. package/dist/views/documents.d.ts +8 -0
  562. package/dist/views/extend.d.ts +2 -2
  563. package/dist/views/extend.js +11 -1
  564. package/dist/views/index.d.ts +2 -2
  565. package/dist/views/index.js +2 -2
  566. package/dist/views/types.d.ts +52 -5
  567. package/dist/views/validate.js +39 -1
  568. package/dist/website/.kosh/bindings.d.ts +22 -0
  569. package/dist/website/.kosh/bindings.js +15 -0
  570. package/dist/website/.kosh/schema.d.ts +881 -0
  571. package/dist/website/demo.d.ts +6 -0
  572. package/dist/website/demo.js +115 -0
  573. package/dist/website/index.d.ts +9 -0
  574. package/dist/website/index.js +251 -0
  575. package/dist/website/module.d.ts +2987 -0
  576. package/dist/website/module.js +282 -0
  577. package/dist/website/render.d.ts +45 -0
  578. package/dist/website/render.js +102 -0
  579. package/dist/website/routes.d.ts +12 -0
  580. package/dist/website/routes.js +246 -0
  581. package/dist/website/web/PagePreview.d.ts +7 -0
  582. package/dist/website/web/PagePreview.js +33 -0
  583. package/dist/website/web/index.d.ts +11 -0
  584. package/dist/website/web/index.js +16 -0
  585. package/dist/website/web/messages.d.ts +2 -0
  586. package/dist/website/web/messages.js +15 -0
  587. package/dist/website_crm/.kosh/bindings.d.ts +22 -0
  588. package/dist/website_crm/.kosh/bindings.js +15 -0
  589. package/dist/website_crm/.kosh/schema.d.ts +967 -0
  590. package/dist/website_crm/index.d.ts +3 -0
  591. package/dist/website_crm/index.js +39 -0
  592. package/dist/website_crm/module.d.ts +2956 -0
  593. package/dist/website_crm/module.js +44 -0
  594. package/dist/website_sale/.kosh/bindings.d.ts +22 -0
  595. package/dist/website_sale/.kosh/bindings.js +15 -0
  596. package/dist/website_sale/.kosh/schema.d.ts +2284 -0
  597. package/dist/website_sale/couriers.d.ts +50 -0
  598. package/dist/website_sale/couriers.js +59 -0
  599. package/dist/website_sale/demo.d.ts +7 -0
  600. package/dist/website_sale/demo.js +90 -0
  601. package/dist/website_sale/growth.d.ts +31 -0
  602. package/dist/website_sale/growth.js +163 -0
  603. package/dist/website_sale/index.d.ts +49 -0
  604. package/dist/website_sale/index.js +538 -0
  605. package/dist/website_sale/module.d.ts +22027 -0
  606. package/dist/website_sale/module.js +397 -0
  607. package/dist/website_sale/shipments.d.ts +16 -0
  608. package/dist/website_sale/shipments.js +113 -0
  609. package/dist/website_sale/shop.d.ts +81 -0
  610. package/dist/website_sale/shop.js +649 -0
  611. package/dist/website_sale_stock/.kosh/bindings.d.ts +22 -0
  612. package/dist/website_sale_stock/.kosh/bindings.js +15 -0
  613. package/dist/website_sale_stock/.kosh/schema.d.ts +2681 -0
  614. package/dist/website_sale_stock/index.d.ts +9 -0
  615. package/dist/website_sale_stock/index.js +20 -0
  616. package/dist/website_sale_stock/module.d.ts +24998 -0
  617. package/dist/website_sale_stock/module.js +28 -0
  618. package/package.json +200 -2
@@ -0,0 +1,93 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A project's schedule (RFC 0026 step 5), a node component of the project form: its tasks as bars over the weeks from
4
+ * the project's start to its end, the baseline as a thin bar beneath each, the critical path in red, arrows from each
5
+ * task to what waits for it, milestones as diamonds. "Move waiting tasks" puts tasks that start before what they wait
6
+ * for is finished after it, keeping their length (`POST /api/v1/projects/:id/schedule/apply`). Read as the user.
7
+ */
8
+ import { Alert, Button, useKosh } from '../../ui/index.js';
9
+ import { useMutation, useQuery } from '@tanstack/react-query';
10
+ import { useState } from 'react';
11
+ import { useTranslation } from 'react-i18next';
12
+ const DAY = 86_400_000;
13
+ const ROW = 32;
14
+ const LABEL = 200;
15
+ const dayOf = (iso) => Math.round(Date.parse(`${iso}T00:00:00Z`) / DAY);
16
+ export function Schedule({ api, record, version, reload, }) {
17
+ const { t } = useTranslation('project');
18
+ const { format } = useKosh();
19
+ const [error, setError] = useState(null);
20
+ const [moved, setMoved] = useState(null);
21
+ const id = typeof record?.id === 'number' ? record.id : null;
22
+ const data = useQuery({
23
+ queryKey: ['project.schedule', id, version],
24
+ enabled: id !== null,
25
+ queryFn: () => api.call('GET', `/api/v1/projects/${String(id)}/schedule`),
26
+ });
27
+ const apply = useMutation({
28
+ mutationFn: () => api.call('POST', `/api/v1/projects/${String(id)}/schedule/apply`, {}),
29
+ onSuccess: (r) => {
30
+ setError(null);
31
+ setMoved(r.moved.length);
32
+ void data.refetch();
33
+ reload();
34
+ },
35
+ onError: (e) => setError(e.message),
36
+ });
37
+ if (id === null)
38
+ return null;
39
+ if (data.isPending)
40
+ return _jsx("p", { className: "text-sm text-muted-foreground", children: t('schedule.loading') });
41
+ if (data.isError)
42
+ return _jsx(Alert, { tone: "danger", children: data.error.message });
43
+ const { tasks } = data.data;
44
+ if (tasks.length === 0)
45
+ return null;
46
+ // The span shown: the project's tasks, their baselines and their earliest dates.
47
+ const days = tasks.flatMap((r) => [r.start, r.end, r.baselineStart, r.baselineEnd, r.earlyStart, r.earlyFinish].flatMap((d) => d === null ? [] : [dayOf(d)]));
48
+ const first = Math.min(...days);
49
+ const last = Math.max(...days);
50
+ const span = Math.max(last - first + 1, 7);
51
+ const pct = (day) => ((day - first) / span) * 100;
52
+ const index = new Map(tasks.map((r, i) => [r.id, i]));
53
+ const barOf = (r) => {
54
+ const s = dayOf(r.start ?? r.earlyStart);
55
+ const e = dayOf(r.end ?? r.earlyFinish);
56
+ return { left: pct(s), width: Math.max(((e - s + 1) / span) * 100, 0.8) };
57
+ };
58
+ const late = tasks.filter((r) => r.start !== null && r.start < r.earlyStart && !r.done).length;
59
+ const critical = tasks.filter((r) => r.critical).length;
60
+ const weeks = [];
61
+ for (let d = first - ((first + 3) % 7); d <= last; d += 7)
62
+ weeks.push(d); // Mondays
63
+ return (_jsxs("section", { "aria-label": t('schedule.title'), className: "grid gap-2", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-sm font-semibold", children: t('schedule.title') }), _jsx("p", { className: "text-xs text-muted-foreground", children: t('schedule.summary', { critical, late, count: late }) })] }), _jsx(Button, { busy: apply.isPending, disabled: late === 0, onClick: () => apply.mutate(), children: t('schedule.apply') })] }), error === null ? null : _jsx(Alert, { tone: "danger", children: error }), moved === null ? null : (_jsx("p", { role: "status", className: "text-xs text-muted-foreground", children: t('schedule.moved', { count: moved }) })), _jsx("div", { className: "overflow-x-auto rounded-md border border-border", children: _jsxs("div", { className: "relative min-w-[720px]", style: { height: (tasks.length + 1) * ROW }, children: [_jsx("div", { className: "absolute inset-y-0 end-0", style: { insetInlineStart: LABEL }, children: weeks.map((w) => (_jsx("div", { className: "absolute inset-y-0 border-s border-border/60 ps-1 text-[10px] text-muted-foreground", style: { insetInlineStart: `${pct(w)}%` }, children: format.date(new Date(w * DAY).toISOString().slice(0, 10)) }, w))) }), _jsx("ul", { children: tasks.map((r, i) => {
64
+ const bar = barOf(r);
65
+ const base = r.baselineStart !== null && r.baselineEnd !== null
66
+ ? {
67
+ left: pct(dayOf(r.baselineStart)),
68
+ width: ((dayOf(r.baselineEnd) - dayOf(r.baselineStart) + 1) / span) * 100,
69
+ }
70
+ : null;
71
+ const label = t(r.critical ? 'schedule.barCritical' : 'schedule.bar', {
72
+ name: r.name,
73
+ start: format.date(r.start ?? r.earlyStart),
74
+ end: format.date(r.end ?? r.earlyFinish),
75
+ float: r.float,
76
+ });
77
+ return (_jsxs("li", { className: "absolute inset-x-0 flex items-center", style: { top: (i + 1) * ROW, height: ROW }, children: [_jsx("span", { className: "truncate px-2 text-xs", style: { width: LABEL }, title: r.name, children: r.name }), _jsxs("span", { className: "relative h-full flex-1", children: [base === null ? null : (_jsx("span", { "aria-hidden": "true", className: "absolute bottom-1 h-1 rounded bg-muted-foreground/40", style: { insetInlineStart: `${base.left}%`, width: `${base.width}%` } })), r.milestone ? (_jsx("span", { role: "img", "aria-label": label, className: `absolute top-2 size-3 rotate-45 ${r.critical ? 'bg-danger' : 'bg-primary'}`, style: { insetInlineStart: `${bar.left}%` } })) : (_jsx("span", { role: "img", "aria-label": label, className: `absolute top-1.5 h-4 overflow-hidden rounded ${r.critical ? 'bg-danger/80' : 'bg-primary/70'} ${r.done ? 'opacity-50' : ''}`, style: { insetInlineStart: `${bar.left}%`, width: `${bar.width}%` }, children: _jsx("span", { className: "block h-full bg-black/20", style: { width: `${Math.max(0, Math.min(100, r.progress))}%` } }) }))] })] }, r.id));
78
+ }) }), _jsx("svg", { "aria-hidden": "true", className: "pointer-events-none absolute inset-y-0 end-0 overflow-visible", style: { insetInlineStart: LABEL, width: `calc(100% - ${LABEL}px)` }, viewBox: "0 0 100 100", preserveAspectRatio: "none", children: tasks.flatMap((r) => r.predecessors.flatMap((p) => {
79
+ const from = tasks[index.get(p.id) ?? -1];
80
+ if (from === undefined)
81
+ return [];
82
+ const a = barOf(from);
83
+ const b = barOf(r);
84
+ const height = (tasks.length + 1) * ROW;
85
+ const y1 = (((index.get(p.id) ?? 0) + 1.5) * ROW * 100) / height;
86
+ const y2 = (((index.get(r.id) ?? 0) + 1.5) * ROW * 100) / height;
87
+ const x1 = a.left + a.width;
88
+ const x2 = b.left;
89
+ return [
90
+ _jsx("path", { d: `M ${x1} ${y1} H ${Math.max(x1, x2 - 0.6)} V ${y2} H ${x2}`, fill: "none", stroke: "currentColor", strokeWidth: 1, vectorEffect: "non-scaling-stroke", className: r.critical && from.critical ? 'text-danger' : 'text-muted-foreground' }, `${p.id}-${r.id}`),
91
+ ];
92
+ })) })] }) }), _jsx("p", { className: "text-xs text-muted-foreground", children: t('schedule.legend') })] }));
93
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A project's structure (RFC 0026 §3.2), a node component of the project form: its phases (nested), each phase's
3
+ * work packages, and the tasks in them, as a tree with progress bars — read through the API as the user, so the
4
+ * record rules decide what shows. Each row opens its record; tasks outside any phase are listed last.
5
+ */
6
+ import { type NodeComponentProps } from '../../ui/index.js';
7
+ import type { ReactElement } from 'react';
8
+ export declare function Structure({ api, record, version }: NodeComponentProps): ReactElement | null;
@@ -0,0 +1,86 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A project's structure (RFC 0026 §3.2), a node component of the project form: its phases (nested), each phase's
4
+ * work packages, and the tasks in them, as a tree with progress bars — read through the API as the user, so the
5
+ * record rules decide what shows. Each row opens its record; tasks outside any phase are listed last.
6
+ */
7
+ import { useKosh } from '../../ui/index.js';
8
+ import { useQuery } from '@tanstack/react-query';
9
+ import { useTranslation } from 'react-i18next';
10
+ const idOf = (value) => {
11
+ if (typeof value === 'number')
12
+ return value;
13
+ if (typeof value === 'object' && value !== null && typeof value['id'] === 'number')
14
+ return value['id'];
15
+ return null;
16
+ };
17
+ const percent = (value) => {
18
+ const n = typeof value === 'number' ? value : Number(value ?? 0);
19
+ return Number.isFinite(n) ? Math.max(0, Math.min(100, n)) : 0;
20
+ };
21
+ function Bar({ value, label }) {
22
+ const { format } = useKosh();
23
+ const n = percent(value);
24
+ return (_jsxs("span", { className: "inline-flex w-36 shrink-0 items-center gap-2", children: [_jsx("span", { role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": n, "aria-label": label, className: "h-1.5 flex-1 overflow-hidden rounded-full bg-muted", children: _jsx("span", { className: `block h-full rounded-full ${n >= 100 ? 'bg-success' : 'bg-primary'}`, style: { width: `${n}%` } }) }), _jsxs("span", { className: "w-10 text-end tabular-nums text-xs text-muted-foreground", children: [format.number(n), "%"] })] }));
25
+ }
26
+ function Item({ href, kind, name, progress, extra, children, }) {
27
+ const { t } = useTranslation('project');
28
+ return (_jsxs("li", { children: [_jsxs("div", { className: "flex items-center gap-3 rounded-md px-2 py-1.5 hover:bg-muted/60", children: [_jsx("span", { className: "w-24 shrink-0 text-xs uppercase tracking-wide text-muted-foreground", children: kind }), _jsx("a", { href: href, className: "min-w-0 flex-1 truncate text-sm font-medium hover:underline", children: name }), extra, _jsx(Bar, { value: progress, label: t('structure.progressOf', { name }) })] }), children === undefined ? null : (_jsx("ul", { className: "ms-6 border-s border-border ps-2", children: children }))] }));
29
+ }
30
+ export function Structure({ api, record, version }) {
31
+ const { t } = useTranslation('project');
32
+ const projectId = typeof record?.id === 'number' ? record.id : null;
33
+ const data = useQuery({
34
+ queryKey: ['project.structure', projectId, version],
35
+ enabled: projectId !== null,
36
+ queryFn: async () => {
37
+ const where = { project: projectId };
38
+ const [phases, packages, tasks] = await Promise.all([
39
+ api.list('project.phase', {
40
+ filter: where,
41
+ fields: ['id', 'name', 'parentPhase', 'progress', 'status'],
42
+ order: ['sequence asc', 'id asc'],
43
+ limit: 500,
44
+ }),
45
+ api.list('project.work.package', {
46
+ filter: where,
47
+ fields: ['id', 'name', 'phase', 'progress', 'status'],
48
+ order: ['sequence asc', 'id asc'],
49
+ limit: 500,
50
+ }),
51
+ api.list('project.task', {
52
+ filter: { project: projectId, parentTask: { isNull: true } },
53
+ fields: ['id', 'name', 'phase', 'workPackage', 'progress', 'milestone', 'blocked'],
54
+ limit: 1000,
55
+ }),
56
+ ]);
57
+ return { phases: phases.items, packages: packages.items, tasks: tasks.items };
58
+ },
59
+ });
60
+ if (projectId === null)
61
+ return null;
62
+ if (data.isPending)
63
+ return _jsx("p", { className: "text-sm text-muted-foreground", children: t('structure.loading') });
64
+ if (data.isError)
65
+ return _jsx("p", { className: "text-sm text-danger", children: data.error.message });
66
+ const { phases, packages, tasks } = data.data;
67
+ if (phases.length === 0 && packages.length === 0)
68
+ return _jsx("p", { className: "text-sm text-muted-foreground", children: t('structure.empty') });
69
+ const href = (action, id) => `/projects/a/projects.${action}/${String(id)}`;
70
+ const taskItem = (task) => (_jsx(Item, { href: href('action_tasks', task.id), kind: task['milestone'] === true ? t('structure.milestone') : t('structure.task'), name: String(task['name'] ?? ''), progress: task['progress'], extra: task['blocked'] === true ? (_jsx("span", { className: "rounded bg-warning/15 px-1.5 text-xs text-warning", children: t('structure.waiting') })) : undefined }, `t${String(task.id)}`));
71
+ const packageItem = (wp) => {
72
+ const inside = tasks.filter((x) => idOf(x['workPackage']) === wp.id);
73
+ return (_jsx(Item, { href: href('action_work_packages', wp.id), kind: t('structure.workPackage'), name: String(wp['name'] ?? ''), progress: wp['progress'], children: inside.length === 0 ? undefined : inside.map(taskItem) }, `w${String(wp.id)}`));
74
+ };
75
+ const phaseItem = (phase) => {
76
+ const subs = phases.filter((x) => idOf(x['parentPhase']) === phase.id);
77
+ const wps = packages.filter((x) => idOf(x['phase']) === phase.id);
78
+ const direct = tasks.filter((x) => idOf(x['phase']) === phase.id && idOf(x['workPackage']) === null);
79
+ const children = [...subs.map(phaseItem), ...wps.map(packageItem), ...direct.map(taskItem)];
80
+ return (_jsx(Item, { href: href('action_phases', phase.id), kind: t('structure.phase'), name: String(phase['name'] ?? ''), progress: phase['progress'], children: children.length === 0 ? undefined : children }, `p${String(phase.id)}`));
81
+ };
82
+ const top = phases.filter((x) => idOf(x['parentPhase']) === null);
83
+ const loosePackages = packages.filter((x) => idOf(x['phase']) === null);
84
+ const loose = tasks.filter((x) => idOf(x['phase']) === null && idOf(x['workPackage']) === null);
85
+ return (_jsxs("section", { "aria-label": t('structure.title'), className: "grid gap-2", children: [_jsx("h3", { className: "text-sm font-semibold", children: t('structure.title') }), _jsxs("ul", { className: "grid gap-0.5", children: [top.map(phaseItem), loosePackages.map(packageItem)] }), loose.length === 0 ? null : (_jsxs(_Fragment, { children: [_jsx("h4", { className: "mt-2 text-xs font-medium text-muted-foreground", children: t('structure.outside') }), _jsx("ul", { className: "grid gap-0.5", children: loose.map(taskItem) })] }))] }));
86
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Workload (RFC 0026 step 3): people × weeks, each cell the person's highest total allocation that week across their
3
+ * projects, tinted by how full it is — over 100 % in red, with the projects behind it in the cell's title. Projects
4
+ * managers see everyone; others see themselves (the server decides). Earlier and later move by the span shown.
5
+ */
6
+ import { type PageProps } from '../../ui/index.js';
7
+ import { type ReactElement } from 'react';
8
+ export declare function Workload({ api }: PageProps): ReactElement;
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Workload (RFC 0026 step 3): people × weeks, each cell the person's highest total allocation that week across their
4
+ * projects, tinted by how full it is — over 100 % in red, with the projects behind it in the cell's title. Projects
5
+ * managers see everyone; others see themselves (the server decides). Earlier and later move by the span shown.
6
+ */
7
+ import { Button, EmptyState, useKosh } from '../../ui/index.js';
8
+ import { useQuery } from '@tanstack/react-query';
9
+ import { useState } from 'react';
10
+ import { useTranslation } from 'react-i18next';
11
+ const WEEKS = 12;
12
+ const DAY = 86_400_000;
13
+ const today = () => new Date().toISOString().slice(0, 10);
14
+ const shift = (date, days) => new Date(Date.parse(`${date}T00:00:00Z`) + days * DAY).toISOString().slice(0, 10);
15
+ /** The cell's tint: empty, partly booked, full, over. */
16
+ function tone(percent) {
17
+ if (percent === 0)
18
+ return 'text-muted-foreground';
19
+ if (percent > 100)
20
+ return 'bg-danger/20 font-semibold text-danger';
21
+ if (percent >= 80)
22
+ return 'bg-primary/25';
23
+ return 'bg-primary/10';
24
+ }
25
+ export function Workload({ api }) {
26
+ const { t } = useTranslation('project');
27
+ const { format } = useKosh();
28
+ const [from, setFrom] = useState(today);
29
+ const data = useQuery({
30
+ queryKey: ['project.workload', from],
31
+ queryFn: () => api.call('GET', `/api/v1/projects/workload?from=${from}&weeks=${WEEKS}`),
32
+ });
33
+ const weeks = data.data?.weeks ?? [];
34
+ const people = data.data?.people ?? [];
35
+ const over = people.filter((p) => p.weeks.some((w) => w > 100)).length;
36
+ return (_jsxs("div", { className: "grid gap-4 p-4", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl font-semibold", children: t('workload.title') }), _jsx("p", { className: "text-sm text-muted-foreground", children: over === 0 ? t('workload.noneOver') : t('workload.over', { count: over }) })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { onClick: () => setFrom(shift(from, -7 * WEEKS)), children: t('workload.earlier') }), _jsx(Button, { onClick: () => setFrom(today()), children: t('workload.today') }), _jsx(Button, { onClick: () => setFrom(shift(from, 7 * WEEKS)), children: t('workload.later') })] })] }), data.isError ? (_jsx("p", { className: "text-sm text-danger", children: data.error.message })) : people.length === 0 ? (_jsx(EmptyState, { title: data.isLoading ? t('workload.loading') : t('workload.empty') })) : (_jsx("div", { className: "overflow-x-auto rounded-md border border-border", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("caption", { className: "sr-only", children: t('workload.caption') }), _jsx("thead", { className: "bg-muted", children: _jsxs("tr", { children: [_jsx("th", { scope: "col", className: "sticky start-0 bg-muted px-2 py-1 text-start", children: t('workload.person') }), weeks.map((w) => (_jsx("th", { scope: "col", className: "px-2 py-1 text-end font-normal tabular-nums", children: format.date(w) }, w)))] }) }), _jsx("tbody", { children: people.map((p) => (_jsxs("tr", { className: "border-t border-border", children: [_jsxs("th", { scope: "row", className: "sticky start-0 bg-background px-2 py-1 text-start", children: [_jsx("span", { className: "font-medium", children: p.name }), _jsx("span", { className: "block text-xs font-normal text-muted-foreground", children: p.projects
37
+ .map((x) => `${x.name} ${format.number(x.allocation)}%`)
38
+ .join(' · ') })] }), p.weeks.map((value, i) => (_jsx("td", { className: `px-2 py-1 text-end tabular-nums ${tone(value)}`, "aria-label": t('workload.cell', {
39
+ name: p.name,
40
+ week: format.date(weeks[i] ?? ''),
41
+ percent: format.number(value),
42
+ }), children: value === 0 ? '·' : `${format.number(value)}%` }, weeks[i])))] }, p.user))) })] }) }))] }));
43
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * The web contribution of `shutro-erp/project`: a project's structure as a tree and the workload of people across projects (RFC 0026).
4
+ */
5
+ import { type Registry } from '../../ui/index.js';
6
+ import type { i18n } from 'i18next';
7
+ import { messages } from './messages.js';
8
+ export { Refresh } from './Refresh.js';
9
+ export { Schedule } from './Schedule.js';
10
+ export { Structure } from './Structure.js';
11
+ export { Workload } from './Workload.js';
12
+ /** Registers the component (and the messages in `i18n`, when given). */
13
+ export declare function registerProjectWeb(registry: Registry, i18n?: i18n): Registry;
14
+ export { messages as projectMessages };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * The web contribution of `shutro-erp/project`: a project's structure as a tree and the workload of people across projects (RFC 0026).
4
+ */
5
+ import { addMessages } from '../../ui/index.js';
6
+ import { messages } from './messages.js';
7
+ import { Refresh } from './Refresh.js';
8
+ import { Schedule } from './Schedule.js';
9
+ import { Structure } from './Structure.js';
10
+ import { Workload } from './Workload.js';
11
+ export { Refresh } from './Refresh.js';
12
+ export { Schedule } from './Schedule.js';
13
+ export { Structure } from './Structure.js';
14
+ export { Workload } from './Workload.js';
15
+ /** Registers the component (and the messages in `i18n`, when given). */
16
+ export function registerProjectWeb(registry, i18n) {
17
+ registry.registerComponent('projects.Structure', Structure);
18
+ registry.registerComponent('projects.Refresh', Refresh);
19
+ registry.registerComponent('projects.Schedule', Schedule);
20
+ registry.registerPage('projects.Workload', Workload);
21
+ if (i18n !== undefined)
22
+ addMessages(i18n, 'project', messages);
23
+ return registry;
24
+ }
25
+ export { messages as projectMessages };
@@ -0,0 +1,2 @@
1
+ /** Messages of the Projects screens (namespace `project`), in English and Bangla. */
2
+ export declare const messages: Readonly<Record<string, object>>;
@@ -0,0 +1,85 @@
1
+ /** Messages of the Projects screens (namespace `project`), in English and Bangla. */
2
+ export const messages = {
3
+ en: {
4
+ schedule: {
5
+ title: 'Schedule',
6
+ loading: 'Loading the schedule…',
7
+ summary_one: '{{critical}} task(s) on the critical path; one starts before what it waits for is finished.',
8
+ summary_other: '{{critical}} task(s) on the critical path; {{late}} start before what they wait for is finished.',
9
+ apply: 'Move waiting tasks',
10
+ moved_one: 'One task moved later.',
11
+ moved_other: '{{count}} tasks moved later.',
12
+ bar: '{{name}}: {{start}} to {{end}}, {{float}} day(s) to spare',
13
+ barCritical: '{{name}}: {{start}} to {{end}}, on the critical path',
14
+ legend: 'Red: the critical path (no day to spare). The thin grey bar under a task is its baseline; the dark part of a bar is what is done.',
15
+ },
16
+ refresh: { button: 'Refresh the figures' },
17
+ workload: {
18
+ title: 'Workload',
19
+ caption: 'Each person’s allocation week by week across their projects',
20
+ person: 'Person',
21
+ loading: 'Loading the workload…',
22
+ empty: 'Nobody is in a project team in these weeks. Add members on a project’s Team.',
23
+ noneOver: 'Nobody is over-allocated in these weeks.',
24
+ over_one: 'One person is over-allocated in these weeks.',
25
+ over_other: '{{count}} people are over-allocated in these weeks.',
26
+ earlier: 'Earlier',
27
+ today: 'This week',
28
+ later: 'Later',
29
+ cell: '{{name}}, week of {{week}}: {{percent}}%',
30
+ },
31
+ structure: {
32
+ title: 'Structure',
33
+ loading: 'Loading the structure…',
34
+ empty: 'No phases or work packages yet. Add them below to see the plan as a tree.',
35
+ phase: 'Phase',
36
+ workPackage: 'Work package',
37
+ task: 'Task',
38
+ milestone: 'Milestone',
39
+ waiting: 'Waiting',
40
+ outside: 'Tasks outside any phase',
41
+ progressOf: 'Progress of {{name}}',
42
+ },
43
+ },
44
+ bn: {
45
+ schedule: {
46
+ title: 'সময়সূচি',
47
+ loading: 'সময়সূচি লোড হচ্ছে…',
48
+ summary_one: 'ক্রিটিক্যাল পথে {{critical}}টি কাজ; একটি কাজ যার জন্য অপেক্ষা করে তা শেষ হওয়ার আগেই শুরু হয়।',
49
+ summary_other: 'ক্রিটিক্যাল পথে {{critical}}টি কাজ; {{late}}টি কাজ যার জন্য অপেক্ষা করে তা শেষ হওয়ার আগেই শুরু হয়।',
50
+ apply: 'অপেক্ষমাণ কাজ সরান',
51
+ moved_one: 'একটি কাজ পিছিয়ে দেওয়া হয়েছে।',
52
+ moved_other: '{{count}}টি কাজ পিছিয়ে দেওয়া হয়েছে।',
53
+ bar: '{{name}}: {{start}} থেকে {{end}}, হাতে {{float}} দিন',
54
+ barCritical: '{{name}}: {{start}} থেকে {{end}}, ক্রিটিক্যাল পথে',
55
+ legend: 'লাল: ক্রিটিক্যাল পথ (হাতে কোনো দিন নেই)। কাজের নিচের সরু ধূসর দাগ তার বেসলাইন; বারের গাঢ় অংশ যা শেষ হয়েছে।',
56
+ },
57
+ refresh: { button: 'হিসাব হালনাগাদ করুন' },
58
+ workload: {
59
+ title: 'কাজের চাপ',
60
+ caption: 'প্রত্যেকের প্রকল্পগুলোতে সপ্তাহভিত্তিক বরাদ্দ',
61
+ person: 'ব্যক্তি',
62
+ loading: 'কাজের চাপ লোড হচ্ছে…',
63
+ empty: 'এই সপ্তাহগুলোতে কেউ কোনো প্রকল্প দলে নেই। প্রকল্পের দলে সদস্য যোগ করুন।',
64
+ noneOver: 'এই সপ্তাহগুলোতে কারও বরাদ্দ সীমা ছাড়ায়নি।',
65
+ over_one: 'এই সপ্তাহগুলোতে একজনের বরাদ্দ সীমা ছাড়িয়েছে।',
66
+ over_other: 'এই সপ্তাহগুলোতে {{count}} জনের বরাদ্দ সীমা ছাড়িয়েছে।',
67
+ earlier: 'আগে',
68
+ today: 'এই সপ্তাহ',
69
+ later: 'পরে',
70
+ cell: '{{name}}, {{week}}-এর সপ্তাহ: {{percent}}%',
71
+ },
72
+ structure: {
73
+ title: 'কাঠামো',
74
+ loading: 'কাঠামো লোড হচ্ছে…',
75
+ empty: 'এখনও কোনো ধাপ বা কাজের প্যাকেজ নেই। পরিকল্পনাটি গাছের মতো দেখতে নিচে যোগ করুন।',
76
+ phase: 'ধাপ',
77
+ workPackage: 'কাজের প্যাকেজ',
78
+ task: 'কাজ',
79
+ milestone: 'মাইলফলক',
80
+ waiting: 'অপেক্ষমাণ',
81
+ outside: 'কোনো ধাপের বাইরের কাজ',
82
+ progressOf: '{{name}}-এর অগ্রগতি',
83
+ },
84
+ },
85
+ };
@@ -0,0 +1,22 @@
1
+ export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
2
+ import { type DefinitionHelpers } from '../../server/orm.js';
3
+ import type { DefaultLoaded, Env as CoreEnv, RecordSet as CoreRecordSet, Shutro as CoreShutro } from '../../server/orm.js';
4
+ import type { SchemaView } from './schema.js';
5
+ export type { SchemaView };
6
+ /** Every model visible in this view. */
7
+ export type ModelName = keyof SchemaView & string;
8
+ /** `Env` typed to this view. */
9
+ export type Env = CoreEnv<SchemaView>;
10
+ /** `Shutro` typed to this view. */
11
+ export type Shutro = CoreShutro<SchemaView>;
12
+ /** A recordset of `M`, with the default loaded shape unless `L` is given. */
13
+ export type Records<M extends ModelName, L = DefaultLoaded<SchemaView, M>> = CoreRecordSet<SchemaView, M, L>;
14
+ export declare const compute: DefinitionHelpers<SchemaView>['compute'];
15
+ export declare const check: DefinitionHelpers<SchemaView>['check'];
16
+ export declare const onchange: DefinitionHelpers<SchemaView>['onchange'];
17
+ export declare const records: DefinitionHelpers<SchemaView>['records'];
18
+ export declare const method: DefinitionHelpers<SchemaView>['method'];
19
+ /** Module data (RFC 0017): records, overrides of dependencies' records, and references, typed like creates. */
20
+ export declare const record: DefinitionHelpers<SchemaView>['record'];
21
+ export declare const override: DefinitionHelpers<SchemaView>['override'];
22
+ export declare const ref: DefinitionHelpers<SchemaView>['ref'];
@@ -0,0 +1,15 @@
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 10e55beb4eefea56
2
+ // Bindings of module `project_account`: import the definition API from here to get types scoped to what it can see.
3
+ export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
+ import { definitions } from '../../server/orm.js';
5
+ /** Definition callbacks typed against this module's view: no casts in computes, checks, onchange, methods. */
6
+ const helpers = definitions();
7
+ export const compute = helpers.compute;
8
+ export const check = helpers.check;
9
+ export const onchange = helpers.onchange;
10
+ export const records = helpers.records;
11
+ export const method = helpers.method;
12
+ /** Module data (RFC 0017): records, overrides of dependencies' records, and references, typed like creates. */
13
+ export const record = helpers.record;
14
+ export const override = helpers.override;
15
+ export const ref = helpers.ref;