shutro-erp 0.3.3 → 0.3.5

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 (412) hide show
  1. package/dist/account_portal/.kosh/bindings.js +1 -1
  2. package/dist/account_portal/.kosh/schema.d.ts +181 -3
  3. package/dist/account_portal/module.d.ts +359 -6
  4. package/dist/accounting/.kosh/bindings.js +1 -1
  5. package/dist/accounting/.kosh/schema.d.ts +181 -3
  6. package/dist/accounting/index.js +214 -2
  7. package/dist/accounting/module.d.ts +217 -5
  8. package/dist/accounting/module.js +23 -2
  9. package/dist/calendar/.kosh/bindings.d.ts +22 -0
  10. package/dist/calendar/.kosh/bindings.js +15 -0
  11. package/dist/calendar/.kosh/schema.d.ts +795 -0
  12. package/dist/calendar/demo.d.ts +6 -0
  13. package/dist/calendar/demo.js +24 -0
  14. package/dist/calendar/index.d.ts +3 -0
  15. package/dist/calendar/index.js +291 -0
  16. package/dist/calendar/module.d.ts +1705 -0
  17. package/dist/calendar/module.js +180 -0
  18. package/dist/cli/init.js +48 -0
  19. package/dist/cli/templates.d.ts +1 -1
  20. package/dist/cli/templates.js +137 -0
  21. package/dist/contacts/.kosh/bindings.js +1 -1
  22. package/dist/contacts/.kosh/schema.d.ts +205 -3
  23. package/dist/contacts/demo.js +30 -1
  24. package/dist/contacts/index.d.ts +1 -1
  25. package/dist/contacts/index.js +155 -9
  26. package/dist/contacts/module.d.ts +338 -2
  27. package/dist/contacts/module.js +82 -5
  28. package/dist/crm/.kosh/bindings.d.ts +22 -0
  29. package/dist/crm/.kosh/bindings.js +15 -0
  30. package/dist/crm/.kosh/schema.d.ts +799 -0
  31. package/dist/crm/demo.d.ts +6 -0
  32. package/dist/crm/demo.js +45 -0
  33. package/dist/crm/index.d.ts +3 -0
  34. package/dist/crm/index.js +361 -0
  35. package/dist/crm/module.d.ts +1843 -0
  36. package/dist/crm/module.js +207 -0
  37. package/dist/event/.kosh/bindings.d.ts +22 -0
  38. package/dist/event/.kosh/bindings.js +15 -0
  39. package/dist/event/.kosh/schema.d.ts +843 -0
  40. package/dist/event/demo.d.ts +6 -0
  41. package/dist/event/demo.js +65 -0
  42. package/dist/event/index.d.ts +14 -0
  43. package/dist/event/index.js +333 -0
  44. package/dist/event/mails.d.ts +15 -0
  45. package/dist/event/mails.js +112 -0
  46. package/dist/event/module.d.ts +2800 -0
  47. package/dist/event/module.js +323 -0
  48. package/dist/event/web/CheckInBox.d.ts +9 -0
  49. package/dist/event/web/CheckInBox.js +87 -0
  50. package/dist/event/web/index.d.ts +11 -0
  51. package/dist/event/web/index.js +16 -0
  52. package/dist/event/web/messages.d.ts +2 -0
  53. package/dist/event/web/messages.js +23 -0
  54. package/dist/event_account/.kosh/bindings.d.ts +22 -0
  55. package/dist/event_account/.kosh/bindings.js +15 -0
  56. package/dist/event_account/.kosh/schema.d.ts +1639 -0
  57. package/dist/event_account/index.d.ts +3 -0
  58. package/dist/event_account/index.js +28 -0
  59. package/dist/event_account/module.d.ts +6968 -0
  60. package/dist/event_account/module.js +90 -0
  61. package/dist/hr/.kosh/bindings.d.ts +22 -0
  62. package/dist/hr/.kosh/bindings.js +15 -0
  63. package/dist/hr/.kosh/schema.d.ts +878 -0
  64. package/dist/hr/demo.d.ts +6 -0
  65. package/dist/hr/demo.js +60 -0
  66. package/dist/hr/index.d.ts +3 -0
  67. package/dist/hr/index.js +483 -0
  68. package/dist/hr/module.d.ts +2611 -0
  69. package/dist/hr/module.js +350 -0
  70. package/dist/integrations/index.js +12 -0
  71. package/dist/integrations/web/OAuthAppsPage.d.ts +9 -0
  72. package/dist/integrations/web/OAuthAppsPage.js +79 -0
  73. package/dist/integrations/web/index.d.ts +1 -0
  74. package/dist/integrations/web/index.js +3 -0
  75. package/dist/integrations/web/messages.js +58 -0
  76. package/dist/l10n_bd/.kosh/bindings.js +1 -1
  77. package/dist/l10n_bd/.kosh/schema.d.ts +181 -3
  78. package/dist/l10n_bd/module.d.ts +359 -6
  79. package/dist/l10n_in/.kosh/bindings.js +1 -1
  80. package/dist/l10n_in/.kosh/schema.d.ts +181 -3
  81. package/dist/l10n_in/module.d.ts +380 -7
  82. package/dist/maintenance/.kosh/bindings.d.ts +22 -0
  83. package/dist/maintenance/.kosh/bindings.js +15 -0
  84. package/dist/maintenance/.kosh/schema.d.ts +911 -0
  85. package/dist/maintenance/demo.d.ts +6 -0
  86. package/dist/maintenance/demo.js +60 -0
  87. package/dist/maintenance/index.d.ts +3 -0
  88. package/dist/maintenance/index.js +422 -0
  89. package/dist/maintenance/module.d.ts +3545 -0
  90. package/dist/maintenance/module.js +446 -0
  91. package/dist/maintenance_stock/.kosh/bindings.d.ts +22 -0
  92. package/dist/maintenance_stock/.kosh/bindings.js +15 -0
  93. package/dist/maintenance_stock/.kosh/schema.d.ts +1371 -0
  94. package/dist/maintenance_stock/index.d.ts +9 -0
  95. package/dist/maintenance_stock/index.js +52 -0
  96. package/dist/maintenance_stock/module.d.ts +6953 -0
  97. package/dist/maintenance_stock/module.js +192 -0
  98. package/dist/messaging/web/index.js +1 -1
  99. package/dist/modules-sdk/index.d.ts +1 -1
  100. package/dist/modules-sdk/manifest.d.ts +70 -0
  101. package/dist/modules-sdk/manifest.js +35 -1
  102. package/dist/mrp/.kosh/bindings.d.ts +22 -0
  103. package/dist/mrp/.kosh/bindings.js +15 -0
  104. package/dist/mrp/.kosh/schema.d.ts +1378 -0
  105. package/dist/mrp/demo.d.ts +7 -0
  106. package/dist/mrp/demo.js +42 -0
  107. package/dist/mrp/index.d.ts +3 -0
  108. package/dist/mrp/index.js +392 -0
  109. package/dist/mrp/module.d.ts +8608 -0
  110. package/dist/mrp/module.js +695 -0
  111. package/dist/mrp_account/.kosh/bindings.d.ts +22 -0
  112. package/dist/mrp_account/.kosh/bindings.js +15 -0
  113. package/dist/mrp_account/.kosh/schema.d.ts +2106 -0
  114. package/dist/mrp_account/index.d.ts +3 -0
  115. package/dist/mrp_account/index.js +22 -0
  116. package/dist/mrp_account/module.d.ts +20840 -0
  117. package/dist/mrp_account/module.js +123 -0
  118. package/dist/notify/web/index.js +1 -1
  119. package/dist/payment/.kosh/bindings.js +1 -1
  120. package/dist/payment/.kosh/schema.d.ts +181 -3
  121. package/dist/payment/module.d.ts +359 -6
  122. package/dist/portal/.kosh/bindings.js +1 -1
  123. package/dist/portal/.kosh/schema.d.ts +205 -3
  124. package/dist/portal/module.d.ts +166 -2
  125. package/dist/pos/.kosh/bindings.d.ts +22 -0
  126. package/dist/pos/.kosh/bindings.js +15 -0
  127. package/dist/pos/.kosh/schema.d.ts +1690 -0
  128. package/dist/pos/accounting.d.ts +10 -0
  129. package/dist/pos/accounting.js +149 -0
  130. package/dist/pos/demo.d.ts +6 -0
  131. package/dist/pos/demo.js +90 -0
  132. package/dist/pos/index.d.ts +9 -0
  133. package/dist/pos/index.js +349 -0
  134. package/dist/pos/module.d.ts +9636 -0
  135. package/dist/pos/module.js +423 -0
  136. package/dist/pos/routes.d.ts +39 -0
  137. package/dist/pos/routes.js +368 -0
  138. package/dist/pos/web/Register.d.ts +9 -0
  139. package/dist/pos/web/Register.js +252 -0
  140. package/dist/pos/web/index.d.ts +11 -0
  141. package/dist/pos/web/index.js +16 -0
  142. package/dist/pos/web/messages.d.ts +2 -0
  143. package/dist/pos/web/messages.js +87 -0
  144. package/dist/pos_stock/.kosh/bindings.d.ts +22 -0
  145. package/dist/pos_stock/.kosh/bindings.js +15 -0
  146. package/dist/pos_stock/.kosh/schema.d.ts +2015 -0
  147. package/dist/pos_stock/index.d.ts +9 -0
  148. package/dist/pos_stock/index.js +35 -0
  149. package/dist/pos_stock/module.d.ts +11935 -0
  150. package/dist/pos_stock/module.js +115 -0
  151. package/dist/product/.kosh/bindings.js +1 -1
  152. package/dist/product/.kosh/schema.d.ts +178 -1
  153. package/dist/product/index.js +81 -4
  154. package/dist/product/module.d.ts +43 -1
  155. package/dist/product/module.js +9 -2
  156. package/dist/project/.kosh/bindings.js +1 -1
  157. package/dist/project/.kosh/schema.d.ts +181 -3
  158. package/dist/project/index.js +147 -7
  159. package/dist/project/module.d.ts +210 -2
  160. package/dist/project/module.js +52 -5
  161. package/dist/project_portal/.kosh/bindings.js +1 -1
  162. package/dist/project_portal/.kosh/schema.d.ts +181 -3
  163. package/dist/project_portal/module.d.ts +353 -4
  164. package/dist/purchase/.kosh/bindings.js +1 -1
  165. package/dist/purchase/.kosh/schema.d.ts +181 -3
  166. package/dist/purchase/index.js +163 -3
  167. package/dist/purchase/module.d.ts +215 -3
  168. package/dist/purchase/module.js +21 -3
  169. package/dist/purchase_account/.kosh/bindings.js +1 -1
  170. package/dist/purchase_account/.kosh/schema.d.ts +182 -3
  171. package/dist/purchase_account/index.js +26 -1
  172. package/dist/purchase_account/module.d.ts +393 -7
  173. package/dist/purchase_portal/.kosh/bindings.js +1 -1
  174. package/dist/purchase_portal/.kosh/schema.d.ts +181 -3
  175. package/dist/purchase_portal/module.d.ts +366 -5
  176. package/dist/purchase_stock/.kosh/bindings.d.ts +22 -0
  177. package/dist/purchase_stock/.kosh/bindings.js +15 -0
  178. package/dist/purchase_stock/.kosh/schema.d.ts +1310 -0
  179. package/dist/purchase_stock/index.d.ts +7 -0
  180. package/dist/purchase_stock/index.js +91 -0
  181. package/dist/purchase_stock/module.d.ts +6763 -0
  182. package/dist/purchase_stock/module.js +144 -0
  183. package/dist/purchase_stock_account/.kosh/bindings.d.ts +22 -0
  184. package/dist/purchase_stock_account/.kosh/bindings.js +15 -0
  185. package/dist/purchase_stock_account/.kosh/schema.d.ts +1959 -0
  186. package/dist/purchase_stock_account/index.d.ts +3 -0
  187. package/dist/purchase_stock_account/index.js +24 -0
  188. package/dist/purchase_stock_account/module.d.ts +35366 -0
  189. package/dist/purchase_stock_account/module.js +162 -0
  190. package/dist/recruitment/.kosh/bindings.d.ts +22 -0
  191. package/dist/recruitment/.kosh/bindings.js +15 -0
  192. package/dist/recruitment/.kosh/schema.d.ts +990 -0
  193. package/dist/recruitment/demo.d.ts +6 -0
  194. package/dist/recruitment/demo.js +45 -0
  195. package/dist/recruitment/index.d.ts +3 -0
  196. package/dist/recruitment/index.js +385 -0
  197. package/dist/recruitment/module.d.ts +3247 -0
  198. package/dist/recruitment/module.js +193 -0
  199. package/dist/recruitment/web/HireButton.d.ts +9 -0
  200. package/dist/recruitment/web/HireButton.js +32 -0
  201. package/dist/recruitment/web/index.d.ts +11 -0
  202. package/dist/recruitment/web/index.js +16 -0
  203. package/dist/recruitment/web/messages.d.ts +2 -0
  204. package/dist/recruitment/web/messages.js +19 -0
  205. package/dist/reporting/documents.d.ts +5 -0
  206. package/dist/reporting/documents.js +28 -1
  207. package/dist/reporting/index.d.ts +1 -1
  208. package/dist/reporting/index.js +4 -2
  209. package/dist/reporting/models.js +9 -0
  210. package/dist/reporting/overviews.d.ts +16 -0
  211. package/dist/reporting/overviews.js +56 -0
  212. package/dist/reporting/routes-documents.js +1 -1
  213. package/dist/reporting/routes.js +138 -80
  214. package/dist/reporting/web/DashboardView.d.ts +11 -0
  215. package/dist/reporting/web/DashboardView.js +2 -2
  216. package/dist/reporting/web/DesignerView.js +5 -0
  217. package/dist/reporting/web/Overview.d.ts +9 -0
  218. package/dist/reporting/web/Overview.js +53 -0
  219. package/dist/reporting/web/index.d.ts +1 -0
  220. package/dist/reporting/web/index.js +4 -1
  221. package/dist/reporting/web/messages.js +9 -0
  222. package/dist/sale_account/.kosh/bindings.js +1 -1
  223. package/dist/sale_account/.kosh/schema.d.ts +186 -3
  224. package/dist/sale_account/index.js +22 -1
  225. package/dist/sale_account/module.d.ts +461 -7
  226. package/dist/sale_portal/.kosh/bindings.js +1 -1
  227. package/dist/sale_portal/.kosh/schema.d.ts +185 -3
  228. package/dist/sale_portal/module.d.ts +434 -5
  229. package/dist/sale_project/.kosh/bindings.js +1 -1
  230. package/dist/sale_project/.kosh/schema.d.ts +187 -3
  231. package/dist/sale_project/module.d.ts +476 -6
  232. package/dist/sale_stock/.kosh/bindings.d.ts +22 -0
  233. package/dist/sale_stock/.kosh/bindings.js +15 -0
  234. package/dist/sale_stock/.kosh/schema.d.ts +1228 -0
  235. package/dist/sale_stock/index.d.ts +7 -0
  236. package/dist/sale_stock/index.js +84 -0
  237. package/dist/sale_stock/module.d.ts +6791 -0
  238. package/dist/sale_stock/module.js +146 -0
  239. package/dist/sales/.kosh/bindings.js +1 -1
  240. package/dist/sales/.kosh/schema.d.ts +185 -3
  241. package/dist/sales/index.js +191 -4
  242. package/dist/sales/module.d.ts +355 -3
  243. package/dist/sales/module.js +78 -3
  244. package/dist/server/api/metadata.d.ts +5 -0
  245. package/dist/server/api/metadata.js +5 -0
  246. package/dist/server/api/rest.js +64 -1
  247. package/dist/server/api/views.js +1 -0
  248. package/dist/server/app-settings.d.ts +7 -0
  249. package/dist/server/app-settings.js +10 -0
  250. package/dist/server/auth/base.js +85 -0
  251. package/dist/server/auth/oauth.d.ts +21 -0
  252. package/dist/server/auth/oauth.js +579 -0
  253. package/dist/server/auth/service.d.ts +4 -0
  254. package/dist/server/auth/service.js +17 -0
  255. package/dist/server/identity.d.ts +2 -0
  256. package/dist/server/images.d.ts +12 -0
  257. package/dist/server/images.js +139 -0
  258. package/dist/server/index.d.ts +2 -0
  259. package/dist/server/index.js +2 -0
  260. package/dist/server/server.d.ts +4 -0
  261. package/dist/server/server.js +9 -1
  262. package/dist/settings/app-settings.d.ts +2 -0
  263. package/dist/settings/app-settings.js +518 -0
  264. package/dist/settings/company.js +3 -1
  265. package/dist/settings/index.d.ts +1 -0
  266. package/dist/settings/index.js +15 -0
  267. package/dist/settings/people.js +32 -6
  268. package/dist/settings/web/AppSettingsPage.d.ts +11 -0
  269. package/dist/settings/web/AppSettingsPage.js +210 -0
  270. package/dist/settings/web/CompaniesPage.js +2 -2
  271. package/dist/settings/web/CompanyPage.js +13 -2
  272. package/dist/settings/web/ConnectedAppsPage.d.ts +7 -0
  273. package/dist/settings/web/ConnectedAppsPage.js +33 -0
  274. package/dist/settings/web/OverviewPage.js +28 -4
  275. package/dist/settings/web/PeoplePage.js +23 -18
  276. package/dist/settings/web/ProfilePage.js +9 -7
  277. package/dist/settings/web/index.d.ts +2 -0
  278. package/dist/settings/web/index.js +8 -0
  279. package/dist/settings/web/messages.js +146 -2
  280. package/dist/stock/.kosh/bindings.d.ts +22 -0
  281. package/dist/stock/.kosh/bindings.js +15 -0
  282. package/dist/stock/.kosh/schema.d.ts +1147 -0
  283. package/dist/stock/demo.d.ts +7 -0
  284. package/dist/stock/demo.js +55 -0
  285. package/dist/stock/index.d.ts +3 -0
  286. package/dist/stock/index.js +674 -0
  287. package/dist/stock/module.d.ts +6330 -0
  288. package/dist/stock/module.js +1325 -0
  289. package/dist/stock/web/ScanBox.d.ts +8 -0
  290. package/dist/stock/web/ScanBox.js +90 -0
  291. package/dist/stock/web/index.d.ts +11 -0
  292. package/dist/stock/web/index.js +16 -0
  293. package/dist/stock/web/messages.d.ts +2 -0
  294. package/dist/stock/web/messages.js +25 -0
  295. package/dist/stock_account/.kosh/bindings.d.ts +22 -0
  296. package/dist/stock_account/.kosh/bindings.js +15 -0
  297. package/dist/stock_account/.kosh/schema.d.ts +1875 -0
  298. package/dist/stock_account/index.d.ts +3 -0
  299. package/dist/stock_account/index.js +130 -0
  300. package/dist/stock_account/module.d.ts +10655 -0
  301. package/dist/stock_account/module.js +339 -0
  302. package/dist/storage/attachments.d.ts +5 -0
  303. package/dist/storage/attachments.js +12 -1
  304. package/dist/storage/models.js +3 -0
  305. package/dist/storage/routes.js +13 -2
  306. package/dist/todo/.kosh/bindings.d.ts +22 -0
  307. package/dist/todo/.kosh/bindings.js +15 -0
  308. package/dist/todo/.kosh/schema.d.ts +732 -0
  309. package/dist/todo/demo.d.ts +6 -0
  310. package/dist/todo/demo.js +35 -0
  311. package/dist/todo/index.d.ts +3 -0
  312. package/dist/todo/index.js +187 -0
  313. package/dist/todo/module.d.ts +1180 -0
  314. package/dist/todo/module.js +130 -0
  315. package/dist/trade_finance/.kosh/bindings.d.ts +22 -0
  316. package/dist/trade_finance/.kosh/bindings.js +15 -0
  317. package/dist/trade_finance/.kosh/schema.d.ts +884 -0
  318. package/dist/trade_finance/demo.d.ts +6 -0
  319. package/dist/trade_finance/demo.js +63 -0
  320. package/dist/trade_finance/index.d.ts +3 -0
  321. package/dist/trade_finance/index.js +413 -0
  322. package/dist/trade_finance/module.d.ts +3779 -0
  323. package/dist/trade_finance/module.js +505 -0
  324. package/dist/trade_finance_account/.kosh/bindings.d.ts +22 -0
  325. package/dist/trade_finance_account/.kosh/bindings.js +15 -0
  326. package/dist/trade_finance_account/.kosh/schema.d.ts +1711 -0
  327. package/dist/trade_finance_account/index.d.ts +3 -0
  328. package/dist/trade_finance_account/index.js +92 -0
  329. package/dist/trade_finance_account/module.d.ts +7928 -0
  330. package/dist/trade_finance_account/module.js +244 -0
  331. package/dist/trade_finance_purchase/.kosh/bindings.d.ts +22 -0
  332. package/dist/trade_finance_purchase/.kosh/bindings.js +15 -0
  333. package/dist/trade_finance_purchase/.kosh/schema.d.ts +1153 -0
  334. package/dist/trade_finance_purchase/index.d.ts +8 -0
  335. package/dist/trade_finance_purchase/index.js +50 -0
  336. package/dist/trade_finance_purchase/module.d.ts +4252 -0
  337. package/dist/trade_finance_purchase/module.js +44 -0
  338. package/dist/trade_finance_sale/.kosh/bindings.d.ts +22 -0
  339. package/dist/trade_finance_sale/.kosh/bindings.js +15 -0
  340. package/dist/trade_finance_sale/.kosh/schema.d.ts +1071 -0
  341. package/dist/trade_finance_sale/index.d.ts +8 -0
  342. package/dist/trade_finance_sale/index.js +50 -0
  343. package/dist/trade_finance_sale/module.d.ts +4280 -0
  344. package/dist/trade_finance_sale/module.js +44 -0
  345. package/dist/ui/api.d.ts +6 -1
  346. package/dist/ui/api.js +2 -1
  347. package/dist/ui/app.js +51 -17
  348. package/dist/ui/components/AppIcon.js +33 -1
  349. package/dist/ui/components/Avatar.d.ts +21 -0
  350. package/dist/ui/components/Avatar.js +71 -0
  351. package/dist/ui/components/primitives.d.ts +2 -0
  352. package/dist/ui/components/primitives.js +7 -1
  353. package/dist/ui/i18n/messages.d.ts +53 -0
  354. package/dist/ui/i18n/messages.js +98 -0
  355. package/dist/ui/index.d.ts +2 -0
  356. package/dist/ui/index.js +2 -0
  357. package/dist/ui/offline/queue.d.ts +5 -1
  358. package/dist/ui/offline/queue.js +2 -0
  359. package/dist/ui/registry.d.ts +12 -1
  360. package/dist/ui/registry.js +10 -1
  361. package/dist/ui/search/ViewTabs.d.ts +14 -0
  362. package/dist/ui/search/ViewTabs.js +42 -0
  363. package/dist/ui/shell/Consent.d.ts +5 -0
  364. package/dist/ui/shell/Consent.js +35 -0
  365. package/dist/ui/shell/Home.js +136 -16
  366. package/dist/ui/shell/Sidebar.js +15 -22
  367. package/dist/ui/views/FormView.js +98 -17
  368. package/dist/ui/views/KanbanView.d.ts +2 -0
  369. package/dist/ui/views/KanbanView.js +32 -3
  370. package/dist/ui/views/ListView.js +155 -31
  371. package/dist/ui/views/StatsRow.d.ts +14 -0
  372. package/dist/ui/views/StatsRow.js +88 -0
  373. package/dist/ui/views/widgets.d.ts +2 -1
  374. package/dist/ui/views/widgets.js +194 -1
  375. package/dist/views/builders.d.ts +19 -2
  376. package/dist/views/builders.js +21 -1
  377. package/dist/views/condition.d.ts +6 -0
  378. package/dist/views/condition.js +20 -0
  379. package/dist/views/documents.d.ts +8 -0
  380. package/dist/views/extend.d.ts +2 -2
  381. package/dist/views/extend.js +11 -1
  382. package/dist/views/index.d.ts +2 -2
  383. package/dist/views/index.js +2 -2
  384. package/dist/views/types.d.ts +52 -5
  385. package/dist/views/validate.js +39 -1
  386. package/dist/website/.kosh/bindings.d.ts +22 -0
  387. package/dist/website/.kosh/bindings.js +15 -0
  388. package/dist/website/.kosh/schema.d.ts +881 -0
  389. package/dist/website/demo.d.ts +6 -0
  390. package/dist/website/demo.js +115 -0
  391. package/dist/website/index.d.ts +9 -0
  392. package/dist/website/index.js +250 -0
  393. package/dist/website/module.d.ts +2987 -0
  394. package/dist/website/module.js +281 -0
  395. package/dist/website/render.d.ts +45 -0
  396. package/dist/website/render.js +102 -0
  397. package/dist/website/routes.d.ts +12 -0
  398. package/dist/website/routes.js +246 -0
  399. package/dist/website/web/PagePreview.d.ts +7 -0
  400. package/dist/website/web/PagePreview.js +33 -0
  401. package/dist/website/web/index.d.ts +11 -0
  402. package/dist/website/web/index.js +16 -0
  403. package/dist/website/web/messages.d.ts +2 -0
  404. package/dist/website/web/messages.js +15 -0
  405. package/dist/website_crm/.kosh/bindings.d.ts +22 -0
  406. package/dist/website_crm/.kosh/bindings.js +15 -0
  407. package/dist/website_crm/.kosh/schema.d.ts +966 -0
  408. package/dist/website_crm/index.d.ts +3 -0
  409. package/dist/website_crm/index.js +39 -0
  410. package/dist/website_crm/module.d.ts +2955 -0
  411. package/dist/website_crm/module.js +44 -0
  412. package/package.json +118 -1
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Production's demo data (RFC 0008 §5.8): an assembly work centre and a bill of materials for an LED fixture
3
+ * (an LED panel and copper cable, 20 minutes of assembly), and an order for 5 fixtures checked — its components
4
+ * listed with what is short and what it costs.
5
+ */
6
+ import type { DemoContext } from '../modules-sdk/index.js';
7
+ export declare function mrpDemo(ctx: DemoContext): Promise<string>;
@@ -0,0 +1,42 @@
1
+ import { idByName } from '../modules-sdk/index.js';
2
+ const DINA = { login: 'dina', name: 'Dina Rahman', groups: ['mrp.manager'] };
3
+ export async function mrpDemo(ctx) {
4
+ await ctx.as(DINA, async (raw) => {
5
+ const env = raw;
6
+ const id = (model, name) => idByName(env, model, name);
7
+ const units = await id('uom.uom', 'Units');
8
+ const fixture = (await env
9
+ .model('product.product')
10
+ .create([{ name: 'LED fixture', uom: units, listPrice: '4500', standardPrice: '0' }])).ids[0];
11
+ if (fixture === undefined)
12
+ return;
13
+ const assembly = (await env.model('mrp.workcenter').create([{ name: 'Assembly', costPerHour: '600' }])).ids[0];
14
+ if (assembly === undefined)
15
+ return;
16
+ const bom = (await env.model('mrp.bom').create([
17
+ {
18
+ product: fixture,
19
+ quantity: '1',
20
+ version: 'v1',
21
+ lines: {
22
+ create: [
23
+ { product: await id('product.product', 'LED panel 40 W'), quantity: '1', uom: units },
24
+ {
25
+ product: await id('product.product', 'Copper cable 2.5 mm²'),
26
+ quantity: '3',
27
+ uom: await id('uom.uom', 'm'),
28
+ },
29
+ ],
30
+ },
31
+ operations: {
32
+ create: [{ name: 'Assemble and test', workcenter: assembly, minutes: '20' }],
33
+ },
34
+ },
35
+ ])).ids[0];
36
+ const order = await env
37
+ .model('mrp.production')
38
+ .create([{ product: fixture, quantity: '5', bom: bom ?? null, date: ctx.date(3) }]);
39
+ await order.check();
40
+ });
41
+ return 'Production: a bill of materials and an order for 5 LED fixtures, checked.';
42
+ }
@@ -0,0 +1,3 @@
1
+ import { defineModule } from '../modules-sdk/index.js';
2
+ export { MrpBom, MrpBomByproduct, MrpBomLine, MrpBomOperation, MrpProduction, MrpProductionComponent, MrpWorkcenter, MrpWorkorder, mrpShutro, ScrapProduction, schedule, validBom, } from './module.js';
3
+ export declare const mrp: ReturnType<typeof defineModule>;
@@ -0,0 +1,392 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * `shutro-erp/mrp` (RFC 0021): the **Production** app. Bills of materials with versions and effective dates, work
4
+ * centres, and production orders that show what is short and what they cost before they start, moving stock through
5
+ * Stockroom (components to Production, the product back into stock). Their work orders are scheduled at the work
6
+ * centres and shown on a Gantt.
7
+ *
8
+ * - `GET /api/v1/production/capacity?from=YYYY-MM-DD&to=YYYY-MM-DD` each centre's planned hours and load, by day
9
+ */
10
+ import { contacts } from '../contacts/index.js';
11
+ import { messaging } from '../messaging/index.js';
12
+ import { defineModule } from '../modules-sdk/index.js';
13
+ import { product } from '../product/index.js';
14
+ import { reporting } from '../reporting/index.js';
15
+ import { HttpProblem } from '../server/index.js';
16
+ import { stock } from '../stock/index.js';
17
+ import { action, form, gantt, kanban, list, search } from '../views/index.js';
18
+ import { mrpDemo } from './demo.js';
19
+ import { DAY_STARTS_AT, MrpBom, MrpBomLine, MrpProduction, MrpProductionComponent, MrpWorkcenter, MrpWorkorder, mrpShutro, } from './module.js';
20
+ export { MrpBom, MrpBomByproduct, MrpBomLine, MrpBomOperation, MrpProduction, MrpProductionComponent, MrpWorkcenter, MrpWorkorder, mrpShutro, ScrapProduction, schedule, validBom, } from './module.js';
21
+ /** Each work centre's planned hours by day (the overlap of its work orders with the day) against its hours. */
22
+ function registerCapacityRoutes({ app }) {
23
+ app.get('/api/v1/production/capacity', async (request) => {
24
+ const q = request.query;
25
+ const valid = (v) => typeof v === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(v);
26
+ if (!valid(q.from) || !valid(q.to) || String(q.from) > String(q.to))
27
+ throw new HttpProblem(400, 'invalid-period', 'Invalid period', 'from and to as YYYY-MM-DD, from first.');
28
+ const days = [];
29
+ for (let d = new Date(`${String(q.from)}T00:00:00`);; d = new Date(d.getTime() + 86_400_000)) {
30
+ const pad = (n) => String(n).padStart(2, '0');
31
+ const day = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
32
+ if (day > String(q.to) || days.length > 92)
33
+ break;
34
+ days.push(day);
35
+ }
36
+ return request.env(async (raw) => {
37
+ const env = raw;
38
+ const centres = await (await env.model('mrp.workcenter').search({})).load([
39
+ 'name',
40
+ 'hoursPerDay',
41
+ ]);
42
+ const orders = await (await env.model('mrp.workorder').search({ where: { state: { in: ['ready', 'progress'] } } })).load({ workcenter: true });
43
+ return {
44
+ days,
45
+ workcenters: [...centres].map((c) => ({
46
+ id: c.id,
47
+ name: c.name,
48
+ hoursPerDay: c.hoursPerDay.toString(),
49
+ days: days.map((day) => {
50
+ // The centre's working window that day: the work planned outside it (the night) does not count.
51
+ const from = new Date(`${day}T${String(DAY_STARTS_AT).padStart(2, '0')}:00:00`).getTime();
52
+ const to = from + Number(c.hoursPerDay) * 3_600_000;
53
+ let ms = 0;
54
+ for (const w of orders) {
55
+ if (w.workcenter.id !== c.id ||
56
+ !(w.plannedStart instanceof Date) ||
57
+ !(w.plannedStop instanceof Date))
58
+ continue;
59
+ ms += Math.max(0, Math.min(to, w.plannedStop.getTime()) - Math.max(from, w.plannedStart.getTime()));
60
+ }
61
+ const hours = ms / 3_600_000;
62
+ const capacity = Number(c.hoursPerDay);
63
+ return {
64
+ day,
65
+ plannedHours: hours.toFixed(2),
66
+ load: capacity > 0 ? Math.round((hours / capacity) * 100) : 0,
67
+ };
68
+ }),
69
+ })),
70
+ };
71
+ });
72
+ });
73
+ }
74
+ export const mrp = defineModule({
75
+ shutro: mrpShutro,
76
+ kosh: '^0.1.0',
77
+ hooks: { demo: mrpDemo },
78
+ depends: [product, stock, contacts, messaging, reporting],
79
+ app: {
80
+ code: 'production',
81
+ label: 'Production',
82
+ icon: 'production',
83
+ sequence: 13,
84
+ category: 'Operations',
85
+ summary: 'Bills of materials with versions, orders that show what is short and what they cost',
86
+ },
87
+ routes: (context) => registerCapacityRoutes(context),
88
+ accessLevels: {
89
+ user: { label: 'User (production orders)', groups: ['mrp.user'] },
90
+ manager: {
91
+ label: 'Manager (bills of materials, work centres, everything)',
92
+ groups: ['mrp.manager'],
93
+ implies: ['user'],
94
+ },
95
+ },
96
+ // The Overview (RFC 0022 step 2).
97
+ overview: {
98
+ cards: [
99
+ {
100
+ id: 'confirmed',
101
+ title: 'Orders confirmed',
102
+ kind: 'kpi',
103
+ model: 'mrp.production',
104
+ measure: 'count',
105
+ filter: { state: 'confirmed' },
106
+ w: 3,
107
+ },
108
+ {
109
+ id: 'done_month',
110
+ title: 'Made this month',
111
+ kind: 'kpi',
112
+ model: 'mrp.production',
113
+ measure: 'count',
114
+ filter: { state: 'done' },
115
+ comparison: { field: 'createdAt', mode: 'previous' },
116
+ w: 3,
117
+ },
118
+ {
119
+ id: 'work_in_progress',
120
+ title: 'Work orders in progress',
121
+ kind: 'kpi',
122
+ model: 'mrp.workorder',
123
+ measure: 'count',
124
+ filter: { state: 'progress' },
125
+ w: 3,
126
+ },
127
+ {
128
+ id: 'workcenters',
129
+ title: 'Work centres',
130
+ kind: 'kpi',
131
+ model: 'mrp.workcenter',
132
+ measure: 'count',
133
+ w: 3,
134
+ },
135
+ {
136
+ id: 'by_state',
137
+ title: 'Orders by state',
138
+ kind: 'chart',
139
+ model: 'mrp.production',
140
+ measure: 'count',
141
+ groupBy: 'state',
142
+ chart: 'bar',
143
+ w: 6,
144
+ },
145
+ {
146
+ id: 'made_by_product',
147
+ title: 'Made, by product',
148
+ kind: 'pivot',
149
+ model: 'mrp.production',
150
+ measure: 'sum:quantity',
151
+ groupBy: 'product',
152
+ filter: { state: 'done' },
153
+ w: 6,
154
+ },
155
+ {
156
+ id: 'load_by_workcenter',
157
+ title: 'Work waiting by work centre',
158
+ kind: 'pivot',
159
+ model: 'mrp.workorder',
160
+ measure: 'count',
161
+ groupBy: 'workcenter',
162
+ filter: { state: { in: ['ready', 'progress'] } },
163
+ w: 6,
164
+ },
165
+ {
166
+ id: 'biggest_open',
167
+ title: 'Biggest open orders',
168
+ kind: 'list',
169
+ model: 'mrp.production',
170
+ measure: 'sum:quantity',
171
+ filter: { state: 'confirmed' },
172
+ w: 6,
173
+ },
174
+ ],
175
+ },
176
+ actions: {
177
+ 'production.action_orders': action(MrpProduction, {
178
+ label: 'Production orders',
179
+ views: ['list', 'kanban', 'form'],
180
+ defaultFilters: ['open'],
181
+ }),
182
+ 'production.action_workorders': action(MrpWorkorder, {
183
+ label: 'Work orders',
184
+ views: ['gantt', 'list', 'form'],
185
+ defaultFilters: ['open'],
186
+ }),
187
+ 'production.action_boms': action(MrpBom, {
188
+ label: 'Bills of materials',
189
+ views: ['list', 'form'],
190
+ }),
191
+ 'production.action_workcenters': action(MrpWorkcenter, {
192
+ label: 'Work centres',
193
+ views: ['list', 'form'],
194
+ }),
195
+ },
196
+ menus: [
197
+ { id: 'production.root', label: 'Production', app: 'production' },
198
+ {
199
+ id: 'production.orders',
200
+ parent: 'production.root',
201
+ label: 'Production orders',
202
+ action: 'production.action_orders',
203
+ sequence: 1,
204
+ },
205
+ {
206
+ id: 'production.workorders',
207
+ parent: 'production.root',
208
+ label: 'Work orders',
209
+ action: 'production.action_workorders',
210
+ sequence: 2,
211
+ },
212
+ {
213
+ id: 'production.boms',
214
+ parent: 'production.root',
215
+ label: 'Bills of materials',
216
+ action: 'production.action_boms',
217
+ sequence: 2,
218
+ },
219
+ {
220
+ id: 'production.configuration',
221
+ parent: 'production.root',
222
+ label: 'Configuration',
223
+ sequence: 9,
224
+ },
225
+ {
226
+ id: 'production.workcenters',
227
+ parent: 'production.configuration',
228
+ label: 'Work centres',
229
+ action: 'production.action_workcenters',
230
+ sequence: 1,
231
+ },
232
+ ],
233
+ views: {
234
+ 'mrp.production.list': list(MrpProduction, {
235
+ columns: [
236
+ 'name',
237
+ 'product',
238
+ 'quantity',
239
+ 'date',
240
+ { field: 'totalCost', sum: true },
241
+ { field: 'status', widget: 'badge' },
242
+ ],
243
+ }),
244
+ 'mrp.production.kanban': kanban(MrpProduction, {
245
+ groupBy: 'status',
246
+ card: { title: 'name', subtitle: 'product', footer: ['quantity', 'date'] },
247
+ }),
248
+ 'mrp.production.form': form(MrpProduction, (k) => ({
249
+ header: {
250
+ statusbar: 'state',
251
+ buttons: [
252
+ k.button('check', { label: 'Check components' }),
253
+ k.button('confirm', { primary: true, label: 'Confirm' }),
254
+ k.button('reserve', { label: 'Check availability' }),
255
+ k.button('produce', {
256
+ primary: true,
257
+ label: 'Produce',
258
+ confirm: 'Produce? The components are consumed and the product enters stock.',
259
+ }),
260
+ k.button('cancel', { label: 'Cancel' }),
261
+ k.button('redraft', { label: 'Back to draft' }),
262
+ ],
263
+ },
264
+ sheet: [
265
+ k.group('main', ['product', 'quantity', 'bom', 'date', 'warehouse']),
266
+ k.group('cost', ['materialCost', 'operationCost', 'totalCost', 'unitCost', 'status'], {
267
+ label: 'Cost',
268
+ }),
269
+ k.lines('components', [
270
+ { field: 'product', id: 'component_product' },
271
+ { field: 'required', id: 'component_required' },
272
+ { field: 'available', id: 'component_available' },
273
+ { field: 'short', id: 'component_short' },
274
+ { field: 'cost', id: 'component_cost' },
275
+ ]),
276
+ k.lines('scraps', [
277
+ { field: 'product', id: 'scrap_product' },
278
+ { field: 'quantity', id: 'scrap_quantity' },
279
+ { field: 'reason', id: 'scrap_reason' },
280
+ { field: 'state', id: 'scrap_state' },
281
+ ]),
282
+ k.lines('workorders', [
283
+ { field: 'name', id: 'workorder_name' },
284
+ { field: 'workcenter', id: 'workorder_workcenter' },
285
+ { field: 'plannedStart', id: 'workorder_start' },
286
+ { field: 'plannedStop', id: 'workorder_stop' },
287
+ { field: 'state', id: 'workorder_state' },
288
+ ]),
289
+ k.group('transfers', ['consumption', 'output']),
290
+ k.group('about', ['note'], { columns: 1 }),
291
+ ],
292
+ chatter: true,
293
+ })),
294
+ 'mrp.workorder.gantt': gantt(MrpWorkorder, {
295
+ dateStart: 'plannedStart',
296
+ dateStop: 'plannedStop',
297
+ title: 'name',
298
+ groupBy: 'workcenter',
299
+ scale: 'day',
300
+ }),
301
+ 'mrp.workorder.list': list(MrpWorkorder, {
302
+ columns: [
303
+ 'production',
304
+ 'name',
305
+ 'workcenter',
306
+ 'plannedStart',
307
+ 'plannedStop',
308
+ 'plannedMinutes',
309
+ 'actualMinutes',
310
+ { field: 'state', widget: 'badge' },
311
+ ],
312
+ }),
313
+ 'mrp.workorder.form': form(MrpWorkorder, (k) => ({
314
+ header: {
315
+ statusbar: 'state',
316
+ buttons: [
317
+ k.button('start', { primary: true, label: 'Start' }),
318
+ k.button('finish', { primary: true, label: 'Finish' }),
319
+ ],
320
+ },
321
+ sheet: [
322
+ k.group('main', ['production', 'name', 'workcenter']),
323
+ k.group('plan', ['plannedStart', 'plannedStop', 'plannedMinutes']),
324
+ k.group('actual', ['startedAt', 'finishedAt', 'actualMinutes']),
325
+ ],
326
+ })),
327
+ 'mrp.bom.list': list(MrpBom, {
328
+ columns: ['product', 'version', 'quantity', 'validFrom', 'validTo'],
329
+ }),
330
+ 'mrp.bom.form': form(MrpBom, (k) => ({
331
+ header: { buttons: [] },
332
+ sheet: [
333
+ k.group('main', ['product', 'quantity', 'version', 'validFrom', 'validTo']),
334
+ k.lines('lines', [
335
+ { field: 'product', id: 'bom_line_product' },
336
+ { field: 'quantity', id: 'bom_line_quantity' },
337
+ { field: 'uom', id: 'bom_line_uom' },
338
+ ]),
339
+ k.lines('operations', [
340
+ { field: 'name', id: 'bom_operation_name' },
341
+ { field: 'workcenter', id: 'bom_operation_workcenter' },
342
+ { field: 'minutes', id: 'bom_operation_minutes' },
343
+ ]),
344
+ k.lines('byproducts', [
345
+ { field: 'product', id: 'bom_byproduct_product' },
346
+ { field: 'quantity', id: 'bom_byproduct_quantity' },
347
+ { field: 'uom', id: 'bom_byproduct_uom' },
348
+ { field: 'costShare', id: 'bom_byproduct_share' },
349
+ ]),
350
+ k.group('about', ['note'], { columns: 1 }),
351
+ ],
352
+ chatter: true,
353
+ })),
354
+ 'mrp.workcenter.list': list(MrpWorkcenter, {
355
+ columns: ['name', 'code', 'hoursPerDay', 'costPerHour'],
356
+ }),
357
+ 'mrp.workcenter.form': form(MrpWorkcenter, (k) => ({
358
+ header: { buttons: [] },
359
+ sheet: [
360
+ k.group('main', ['name', 'code', 'hoursPerDay', 'costPerHour']),
361
+ k.group('about', ['note'], { columns: 1 }),
362
+ ],
363
+ })),
364
+ 'mrp.bom.line.list': list(MrpBomLine, { columns: ['bom', 'product', 'quantity', 'uom'] }),
365
+ 'mrp.production.component.list': list(MrpProductionComponent, {
366
+ columns: ['production', 'product', 'required', 'available', 'short'],
367
+ }),
368
+ },
369
+ search: {
370
+ 'mrp.production': search(MrpProduction, {
371
+ fields: ['name', 'product.name'],
372
+ filters: {
373
+ open: { label: 'To do', domain: { state: { in: ['draft', 'confirmed'] } }, group: 'state' },
374
+ waiting: { label: 'Short', domain: { status: 'waiting' }, group: 'state' },
375
+ ready: { label: 'Ready', domain: { status: 'ready' }, group: 'state' },
376
+ done: { label: 'Done', domain: { state: 'done' }, group: 'state' },
377
+ },
378
+ groupBy: ['product', 'status', 'date'],
379
+ }),
380
+ 'mrp.bom': search(MrpBom, { fields: ['product.name', 'version'], groupBy: ['product'] }),
381
+ 'mrp.workcenter': search(MrpWorkcenter, { fields: ['name', 'code'] }),
382
+ 'mrp.workorder': search(MrpWorkorder, {
383
+ fields: ['name', 'production.name', 'workcenter.name'],
384
+ filters: {
385
+ open: { label: 'To do', domain: { state: { in: ['ready', 'progress'] } } },
386
+ },
387
+ groupBy: ['workcenter', 'production'],
388
+ }),
389
+ 'mrp.bom.line': search(MrpBomLine, { fields: ['product.name'] }),
390
+ 'mrp.production.component': search(MrpProductionComponent, { fields: ['product.name'] }),
391
+ },
392
+ });