shutro-erp 0.3.5 → 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 (384) 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 +123 -4
  27. package/dist/account_portal/module.d.ts +146 -0
  28. package/dist/accounting/.kosh/bindings.js +1 -1
  29. package/dist/accounting/.kosh/schema.d.ts +123 -4
  30. package/dist/accounting/index.d.ts +1 -1
  31. package/dist/accounting/index.js +131 -3
  32. package/dist/accounting/module.d.ts +296 -0
  33. package/dist/accounting/module.js +32 -1
  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/cli/init.js +32 -0
  79. package/dist/cli/templates.d.ts +1 -1
  80. package/dist/cli/templates.js +89 -0
  81. package/dist/contacts/module.js +13 -2
  82. package/dist/crm/.kosh/bindings.js +1 -1
  83. package/dist/crm/.kosh/schema.d.ts +2 -1
  84. package/dist/crm/module.d.ts +2 -0
  85. package/dist/crm/module.js +2 -1
  86. package/dist/documents/.kosh/bindings.d.ts +22 -0
  87. package/dist/documents/.kosh/bindings.js +15 -0
  88. package/dist/documents/.kosh/schema.d.ts +862 -0
  89. package/dist/documents/demo.d.ts +6 -0
  90. package/dist/documents/demo.js +22 -0
  91. package/dist/documents/documents.d.ts +98 -0
  92. package/dist/documents/documents.js +318 -0
  93. package/dist/documents/index.d.ts +30 -0
  94. package/dist/documents/index.js +442 -0
  95. package/dist/documents/module.d.ts +2781 -0
  96. package/dist/documents/module.js +214 -0
  97. package/dist/documents/web/Versions.d.ts +7 -0
  98. package/dist/documents/web/Versions.js +45 -0
  99. package/dist/documents/web/index.d.ts +11 -0
  100. package/dist/documents/web/index.js +16 -0
  101. package/dist/documents/web/messages.d.ts +2 -0
  102. package/dist/documents/web/messages.js +21 -0
  103. package/dist/event_account/.kosh/bindings.js +1 -1
  104. package/dist/event_account/.kosh/schema.d.ts +123 -4
  105. package/dist/event_account/module.d.ts +146 -0
  106. package/dist/expense/.kosh/bindings.d.ts +22 -0
  107. package/dist/expense/.kosh/bindings.js +15 -0
  108. package/dist/expense/.kosh/schema.d.ts +1299 -0
  109. package/dist/expense/demo.d.ts +7 -0
  110. package/dist/expense/demo.js +69 -0
  111. package/dist/expense/index.d.ts +3 -0
  112. package/dist/expense/index.js +495 -0
  113. package/dist/expense/module.d.ts +4747 -0
  114. package/dist/expense/module.js +647 -0
  115. package/dist/expense_account/.kosh/bindings.d.ts +22 -0
  116. package/dist/expense_account/.kosh/bindings.js +15 -0
  117. package/dist/expense_account/.kosh/schema.d.ts +1936 -0
  118. package/dist/expense_account/index.d.ts +3 -0
  119. package/dist/expense_account/index.js +74 -0
  120. package/dist/expense_account/module.d.ts +9153 -0
  121. package/dist/expense_account/module.js +318 -0
  122. package/dist/helpdesk/.kosh/bindings.d.ts +22 -0
  123. package/dist/helpdesk/.kosh/bindings.js +15 -0
  124. package/dist/helpdesk/.kosh/schema.d.ts +885 -0
  125. package/dist/helpdesk/demo.d.ts +7 -0
  126. package/dist/helpdesk/demo.js +65 -0
  127. package/dist/helpdesk/hours.d.ts +17 -0
  128. package/dist/helpdesk/hours.js +94 -0
  129. package/dist/helpdesk/index.d.ts +10 -0
  130. package/dist/helpdesk/index.js +461 -0
  131. package/dist/helpdesk/module.d.ts +2940 -0
  132. package/dist/helpdesk/module.js +326 -0
  133. package/dist/helpdesk/routes.d.ts +12 -0
  134. package/dist/helpdesk/routes.js +132 -0
  135. package/dist/helpdesk/sla.d.ts +37 -0
  136. package/dist/helpdesk/sla.js +226 -0
  137. package/dist/hr/index.d.ts +1 -1
  138. package/dist/hr/index.js +1 -1
  139. package/dist/l10n_bd/.kosh/bindings.js +1 -1
  140. package/dist/l10n_bd/.kosh/schema.d.ts +123 -4
  141. package/dist/l10n_bd/module.d.ts +146 -0
  142. package/dist/l10n_bd_payroll/.kosh/bindings.d.ts +22 -0
  143. package/dist/l10n_bd_payroll/.kosh/bindings.js +15 -0
  144. package/dist/l10n_bd_payroll/.kosh/schema.d.ts +2312 -0
  145. package/dist/l10n_bd_payroll/data.d.ts +47 -0
  146. package/dist/l10n_bd_payroll/data.js +347 -0
  147. package/dist/l10n_bd_payroll/index.d.ts +4 -0
  148. package/dist/l10n_bd_payroll/index.js +24 -0
  149. package/dist/l10n_bd_payroll/module.d.ts +12932 -0
  150. package/dist/l10n_bd_payroll/module.js +86 -0
  151. package/dist/l10n_in/.kosh/bindings.js +1 -1
  152. package/dist/l10n_in/.kosh/schema.d.ts +123 -4
  153. package/dist/l10n_in/module.d.ts +147 -0
  154. package/dist/mail/inbound/handle.js +6 -1
  155. package/dist/maintenance_stock/.kosh/bindings.js +1 -1
  156. package/dist/maintenance_stock/.kosh/schema.d.ts +77 -2
  157. package/dist/maintenance_stock/module.d.ts +788 -66
  158. package/dist/modules-sdk/index.d.ts +1 -1
  159. package/dist/modules-sdk/manifest.d.ts +39 -2
  160. package/dist/mrp/.kosh/bindings.js +1 -1
  161. package/dist/mrp/.kosh/schema.d.ts +77 -2
  162. package/dist/mrp/index.d.ts +1 -1
  163. package/dist/mrp/index.js +2 -1
  164. package/dist/mrp/module.d.ts +781 -54
  165. package/dist/mrp/module.js +64 -2
  166. package/dist/mrp_account/.kosh/bindings.js +1 -1
  167. package/dist/mrp_account/.kosh/schema.d.ts +198 -5
  168. package/dist/mrp_account/module.d.ts +4852 -2541
  169. package/dist/payment/.kosh/bindings.js +1 -1
  170. package/dist/payment/.kosh/schema.d.ts +125 -5
  171. package/dist/payment/index.d.ts +41 -0
  172. package/dist/payment/index.js +131 -74
  173. package/dist/payment/module.d.ts +210 -6
  174. package/dist/payment/module.js +19 -3
  175. package/dist/payment/settle.js +10 -1
  176. package/dist/payroll/.kosh/bindings.d.ts +22 -0
  177. package/dist/payroll/.kosh/bindings.js +15 -0
  178. package/dist/payroll/.kosh/schema.d.ts +1390 -0
  179. package/dist/payroll/compute.d.ts +35 -0
  180. package/dist/payroll/compute.js +398 -0
  181. package/dist/payroll/demo.d.ts +55 -0
  182. package/dist/payroll/demo.js +121 -0
  183. package/dist/payroll/formula.d.ts +62 -0
  184. package/dist/payroll/formula.js +320 -0
  185. package/dist/payroll/index.d.ts +230 -0
  186. package/dist/payroll/index.js +713 -0
  187. package/dist/payroll/module.d.ts +9390 -0
  188. package/dist/payroll/module.js +606 -0
  189. package/dist/payroll/routes.d.ts +10 -0
  190. package/dist/payroll/routes.js +112 -0
  191. package/dist/payroll_account/.kosh/bindings.d.ts +22 -0
  192. package/dist/payroll_account/.kosh/bindings.js +15 -0
  193. package/dist/payroll_account/.kosh/schema.d.ts +2308 -0
  194. package/dist/payroll_account/index.d.ts +3 -0
  195. package/dist/payroll_account/index.js +40 -0
  196. package/dist/payroll_account/module.d.ts +12396 -0
  197. package/dist/payroll_account/module.js +256 -0
  198. package/dist/permissions/approvals.d.ts +131 -9
  199. package/dist/permissions/approvals.js +662 -57
  200. package/dist/permissions/index.d.ts +1 -1
  201. package/dist/permissions/index.js +2 -2
  202. package/dist/permissions/models.js +191 -12
  203. package/dist/permissions/routes.d.ts +6 -1
  204. package/dist/permissions/routes.js +37 -4
  205. package/dist/permissions/web/ApprovalPanel.d.ts +5 -4
  206. package/dist/permissions/web/ApprovalPanel.js +39 -13
  207. package/dist/permissions/web/index.d.ts +6 -4
  208. package/dist/permissions/web/index.js +13 -4
  209. package/dist/permissions/web/messages.d.ts +2 -0
  210. package/dist/permissions/web/messages.js +43 -0
  211. package/dist/portal/index.js +1 -1
  212. package/dist/pos/.kosh/bindings.js +1 -1
  213. package/dist/pos/.kosh/schema.d.ts +123 -4
  214. package/dist/pos/index.js +4 -0
  215. package/dist/pos/module.d.ts +147 -0
  216. package/dist/pos_stock/.kosh/bindings.js +1 -1
  217. package/dist/pos_stock/.kosh/schema.d.ts +198 -5
  218. package/dist/pos_stock/module.d.ts +914 -46
  219. package/dist/product/.kosh/bindings.js +1 -1
  220. package/dist/product/.kosh/schema.d.ts +2 -1
  221. package/dist/product/index.js +13 -0
  222. package/dist/product/module.d.ts +2 -0
  223. package/dist/product/module.js +2 -1
  224. package/dist/project/.kosh/bindings.js +1 -1
  225. package/dist/project/.kosh/schema.d.ts +672 -1
  226. package/dist/project/index.d.ts +3 -1
  227. package/dist/project/index.js +901 -14
  228. package/dist/project/module.d.ts +9892 -390
  229. package/dist/project/module.js +1530 -13
  230. package/dist/project/routes.d.ts +44 -0
  231. package/dist/project/routes.js +314 -0
  232. package/dist/project/schedule.d.ts +72 -0
  233. package/dist/project/schedule.js +192 -0
  234. package/dist/project/web/Refresh.d.ts +8 -0
  235. package/dist/project/web/Refresh.js +29 -0
  236. package/dist/project/web/Schedule.d.ts +9 -0
  237. package/dist/project/web/Schedule.js +93 -0
  238. package/dist/project/web/Structure.d.ts +8 -0
  239. package/dist/project/web/Structure.js +86 -0
  240. package/dist/project/web/Workload.d.ts +8 -0
  241. package/dist/project/web/Workload.js +43 -0
  242. package/dist/project/web/index.d.ts +14 -0
  243. package/dist/project/web/index.js +25 -0
  244. package/dist/project/web/messages.d.ts +2 -0
  245. package/dist/project/web/messages.js +85 -0
  246. package/dist/project_account/.kosh/bindings.d.ts +22 -0
  247. package/dist/project_account/.kosh/bindings.js +15 -0
  248. package/dist/project_account/.kosh/schema.d.ts +2241 -0
  249. package/dist/project_account/index.d.ts +3 -0
  250. package/dist/project_account/index.js +27 -0
  251. package/dist/project_account/module.d.ts +11539 -0
  252. package/dist/project_account/module.js +76 -0
  253. package/dist/project_portal/.kosh/bindings.js +1 -1
  254. package/dist/project_portal/.kosh/schema.d.ts +672 -1
  255. package/dist/project_portal/module.d.ts +4798 -129
  256. package/dist/project_purchase/.kosh/bindings.d.ts +22 -0
  257. package/dist/project_purchase/.kosh/bindings.js +15 -0
  258. package/dist/project_purchase/.kosh/schema.d.ts +2320 -0
  259. package/dist/project_purchase/index.d.ts +9 -0
  260. package/dist/project_purchase/index.js +22 -0
  261. package/dist/project_purchase/module.d.ts +25147 -0
  262. package/dist/project_purchase/module.js +56 -0
  263. package/dist/purchase/.kosh/bindings.js +1 -1
  264. package/dist/purchase/.kosh/schema.d.ts +97 -4
  265. package/dist/purchase/module.d.ts +13 -2
  266. package/dist/purchase/module.js +10 -1
  267. package/dist/purchase_account/.kosh/bindings.js +1 -1
  268. package/dist/purchase_account/.kosh/schema.d.ts +126 -6
  269. package/dist/purchase_account/index.js +1 -0
  270. package/dist/purchase_account/module.d.ts +176 -1
  271. package/dist/purchase_account/module.js +13 -2
  272. package/dist/purchase_portal/.kosh/bindings.js +1 -1
  273. package/dist/purchase_portal/.kosh/schema.d.ts +97 -4
  274. package/dist/purchase_portal/module.d.ts +6 -1
  275. package/dist/purchase_stock/.kosh/bindings.js +1 -1
  276. package/dist/purchase_stock/.kosh/schema.d.ts +174 -5
  277. package/dist/purchase_stock/index.d.ts +1 -1
  278. package/dist/purchase_stock/index.js +9 -2
  279. package/dist/purchase_stock/module.d.ts +840 -68
  280. package/dist/purchase_stock/module.js +242 -6
  281. package/dist/purchase_stock_account/.kosh/bindings.js +1 -1
  282. package/dist/purchase_stock_account/.kosh/schema.d.ts +203 -7
  283. package/dist/purchase_stock_account/module.d.ts +8163 -5514
  284. package/dist/purchase_stock_account/module.js +11 -5
  285. package/dist/recruitment/.kosh/bindings.js +1 -1
  286. package/dist/recruitment/.kosh/schema.d.ts +2 -1
  287. package/dist/recruitment/module.d.ts +2 -0
  288. package/dist/recruitment/module.js +2 -1
  289. package/dist/sale_account/.kosh/bindings.js +1 -1
  290. package/dist/sale_account/.kosh/schema.d.ts +123 -4
  291. package/dist/sale_account/module.d.ts +147 -0
  292. package/dist/sale_portal/.kosh/bindings.js +1 -1
  293. package/dist/sale_portal/.kosh/schema.d.ts +2 -1
  294. package/dist/sale_portal/module.d.ts +1 -0
  295. package/dist/sale_project/.kosh/bindings.js +1 -1
  296. package/dist/sale_project/.kosh/schema.d.ts +673 -1
  297. package/dist/sale_project/module.d.ts +4800 -129
  298. package/dist/sale_project/module.js +17 -1
  299. package/dist/sale_stock/.kosh/bindings.js +1 -1
  300. package/dist/sale_stock/.kosh/schema.d.ts +77 -2
  301. package/dist/sale_stock/module.d.ts +789 -66
  302. package/dist/sales/.kosh/bindings.js +1 -1
  303. package/dist/sales/.kosh/schema.d.ts +2 -1
  304. package/dist/sales/index.js +4 -0
  305. package/dist/sales/module.d.ts +1 -0
  306. package/dist/sign/.kosh/bindings.d.ts +22 -0
  307. package/dist/sign/.kosh/bindings.js +15 -0
  308. package/dist/sign/.kosh/schema.d.ts +990 -0
  309. package/dist/sign/index.d.ts +14 -0
  310. package/dist/sign/index.js +350 -0
  311. package/dist/sign/module.d.ts +4478 -0
  312. package/dist/sign/module.js +158 -0
  313. package/dist/sign/sign.d.ts +82 -0
  314. package/dist/sign/sign.js +474 -0
  315. package/dist/stock/.kosh/bindings.js +1 -1
  316. package/dist/stock/.kosh/schema.d.ts +77 -2
  317. package/dist/stock/demo.d.ts +2 -1
  318. package/dist/stock/demo.js +28 -1
  319. package/dist/stock/index.d.ts +2 -1
  320. package/dist/stock/index.js +233 -4
  321. package/dist/stock/module.d.ts +2363 -837
  322. package/dist/stock/module.js +569 -14
  323. package/dist/stock/replenish.d.ts +38 -0
  324. package/dist/stock/replenish.js +176 -0
  325. package/dist/stock/web/Replenishment.d.ts +8 -0
  326. package/dist/stock/web/Replenishment.js +84 -0
  327. package/dist/stock/web/index.d.ts +4 -2
  328. package/dist/stock/web/index.js +6 -2
  329. package/dist/stock/web/messages.js +52 -0
  330. package/dist/stock_account/.kosh/bindings.js +1 -1
  331. package/dist/stock_account/.kosh/schema.d.ts +198 -5
  332. package/dist/stock_account/index.js +10 -0
  333. package/dist/stock_account/module.d.ts +969 -101
  334. package/dist/trade_finance/index.js +2 -0
  335. package/dist/trade_finance/module.js +2 -0
  336. package/dist/trade_finance_account/.kosh/bindings.js +1 -1
  337. package/dist/trade_finance_account/.kosh/schema.d.ts +123 -4
  338. package/dist/trade_finance_account/index.js +1 -0
  339. package/dist/trade_finance_account/module.d.ts +146 -0
  340. package/dist/trade_finance_account/module.js +1 -0
  341. package/dist/trade_finance_purchase/.kosh/bindings.js +1 -1
  342. package/dist/trade_finance_purchase/.kosh/schema.d.ts +97 -4
  343. package/dist/trade_finance_purchase/module.d.ts +6 -1
  344. package/dist/trade_finance_sale/.kosh/bindings.js +1 -1
  345. package/dist/trade_finance_sale/.kosh/schema.d.ts +2 -1
  346. package/dist/trade_finance_sale/module.d.ts +1 -0
  347. package/dist/ui/app.js +24 -12
  348. package/dist/ui/components/AppIcon.js +8 -1
  349. package/dist/ui/i18n/messages.d.ts +4 -0
  350. package/dist/ui/i18n/messages.js +8 -0
  351. package/dist/ui/views/FormView.js +4 -2
  352. package/dist/ui/views/KanbanView.js +9 -1
  353. package/dist/ui/views/ListView.js +4 -2
  354. package/dist/ui/views/widgets.js +7 -1
  355. package/dist/website/index.js +1 -0
  356. package/dist/website/module.js +1 -0
  357. package/dist/website_crm/.kosh/bindings.js +1 -1
  358. package/dist/website_crm/.kosh/schema.d.ts +2 -1
  359. package/dist/website_crm/module.d.ts +1 -0
  360. package/dist/website_sale/.kosh/bindings.d.ts +22 -0
  361. package/dist/website_sale/.kosh/bindings.js +15 -0
  362. package/dist/website_sale/.kosh/schema.d.ts +2284 -0
  363. package/dist/website_sale/couriers.d.ts +50 -0
  364. package/dist/website_sale/couriers.js +59 -0
  365. package/dist/website_sale/demo.d.ts +7 -0
  366. package/dist/website_sale/demo.js +90 -0
  367. package/dist/website_sale/growth.d.ts +31 -0
  368. package/dist/website_sale/growth.js +163 -0
  369. package/dist/website_sale/index.d.ts +49 -0
  370. package/dist/website_sale/index.js +538 -0
  371. package/dist/website_sale/module.d.ts +22027 -0
  372. package/dist/website_sale/module.js +397 -0
  373. package/dist/website_sale/shipments.d.ts +16 -0
  374. package/dist/website_sale/shipments.js +113 -0
  375. package/dist/website_sale/shop.d.ts +81 -0
  376. package/dist/website_sale/shop.js +649 -0
  377. package/dist/website_sale_stock/.kosh/bindings.d.ts +22 -0
  378. package/dist/website_sale_stock/.kosh/bindings.js +15 -0
  379. package/dist/website_sale_stock/.kosh/schema.d.ts +2681 -0
  380. package/dist/website_sale_stock/index.d.ts +9 -0
  381. package/dist/website_sale_stock/index.js +20 -0
  382. package/dist/website_sale_stock/module.d.ts +24998 -0
  383. package/dist/website_sale_stock/module.js +28 -0
  384. package/package.json +83 -2
@@ -0,0 +1,167 @@
1
+ /**
2
+ * The data layer of budgets (RFC 0024 §2.5): a budget for a period, approved by an Accounting manager, with lines by
3
+ * cost centre and / or account — the planned amount, and a control: none, **warn** (a purchase order beyond it needs
4
+ * an Accounting manager's approval as well) or **block** (refused). Each line's **actual** (posted lines) and
5
+ * **committed** amount (confirmed purchase orders not billed yet) are refreshed by `budget.ts`; the purchase order
6
+ * carries whether it goes beyond a budget and why.
7
+ */
8
+ import { accountingShutro } from '../accounting/index.js';
9
+ import { purchaseAccountShutro } from '../purchase_account/index.js';
10
+ import { orm } from '../server/orm.js';
11
+ import { compute, defineModel, defineModule, extendModel, f, records, } from './.kosh/bindings.js';
12
+ const READ = ['read'];
13
+ const ALL = ['read', 'write', 'create', 'unlink', 'export', 'import'];
14
+ const ZERO = orm.toDecimal(0);
15
+ export const Budget = defineModel('account.budget', {
16
+ label: 'Budget',
17
+ recName: 'name',
18
+ order: ['dateFrom desc', 'id desc'],
19
+ companyScoped: { required: true },
20
+ tracking: ['state', 'dateFrom', 'dateTo'],
21
+ access: { 'account.user': READ, 'account.manager': ALL },
22
+ fields: {
23
+ name: f.char({ required: true }),
24
+ dateFrom: f.date({ required: true, label: 'From' }),
25
+ dateTo: f.date({ required: true, label: 'To' }),
26
+ lines: f.one2many('account.budget.line', 'budget'),
27
+ planned: f.decimal({
28
+ scale: 2,
29
+ label: 'Planned',
30
+ help: 'The lines’ planned amounts together.',
31
+ ...compute('account.budget', 'planned', ['lines.planned'], (budgets) => {
32
+ for (const b of budgets)
33
+ b.planned = [...b.lines].reduce((s, l) => s.plus(l.planned), ZERO);
34
+ }),
35
+ store: true,
36
+ }),
37
+ state: f.state({
38
+ states: { draft: 'Draft', approved: 'Approved', closed: 'Closed' },
39
+ initial: 'draft',
40
+ help: 'Approved budgets are compared with the books and checked when purchase orders are submitted.',
41
+ transitions: {
42
+ approve: {
43
+ from: ['draft'],
44
+ to: 'approved',
45
+ requires: 'account.budget',
46
+ after: records('account.budget', async (budgets) => {
47
+ const env = budgets.env;
48
+ await env.flush();
49
+ const { refreshBudgets } = await import('./budget.js');
50
+ await env.asSuperuser({ reason: 'budget figures' }, (su) => refreshBudgets(su, budgets.ids));
51
+ for (const id of budgets.ids)
52
+ await env.emit('account.budget.approved', { id });
53
+ }),
54
+ },
55
+ close: { from: ['approved'], to: 'closed', requires: 'account.budget' },
56
+ redraft: { from: ['approved'], to: 'draft', requires: 'account.budget' },
57
+ },
58
+ }),
59
+ },
60
+ sqlConstraints: {
61
+ ordered: {
62
+ check: orm.sql `date_to >= date_from`,
63
+ message: 'A budget ends on or after it starts.',
64
+ },
65
+ },
66
+ });
67
+ export const BudgetLine = defineModel('account.budget.line', {
68
+ label: 'Budget line',
69
+ order: ['id asc'],
70
+ access: { 'account.user': READ, 'account.manager': ALL },
71
+ fields: {
72
+ budget: f.many2one('account.budget', { required: true, ondelete: 'cascade' }),
73
+ name: f.char({ required: true, label: 'What for' }),
74
+ analytic: f.many2one('account.analytic', {
75
+ ondelete: 'restrict',
76
+ label: 'Cost centre',
77
+ help: 'Empty: every cost centre.',
78
+ }),
79
+ account: f.many2one('account.account', {
80
+ ondelete: 'restrict',
81
+ help: 'Empty: every expense account. Purchase orders commit against lines without an account or on the purchases account.',
82
+ }),
83
+ planned: f.decimal({ scale: 2, required: true, default: '0' }),
84
+ control: f.selection({ none: 'Report only', warn: 'Warn: a further approval', block: 'Block' }, {
85
+ required: true,
86
+ default: 'warn',
87
+ help: 'What a purchase order that would go beyond what is left does: needs an Accounting manager’s approval, or is refused.',
88
+ }),
89
+ actual: f.decimal({
90
+ scale: 2,
91
+ required: true,
92
+ default: '0',
93
+ label: 'Actual',
94
+ help: 'Posted in the period.',
95
+ }),
96
+ committed: f.decimal({
97
+ scale: 2,
98
+ required: true,
99
+ default: '0',
100
+ label: 'Committed',
101
+ help: 'Confirmed purchase orders of the period not billed yet (untaxed).',
102
+ }),
103
+ available: f.decimal({
104
+ scale: 2,
105
+ label: 'Left',
106
+ help: 'Planned less actual and committed.',
107
+ ...compute('account.budget.line', 'available', ['planned', 'actual', 'committed'], (lines) => {
108
+ for (const l of lines)
109
+ l.available = l.planned.minus(l.actual).minus(l.committed);
110
+ }),
111
+ store: true,
112
+ }),
113
+ used: f.decimal({
114
+ scale: 2,
115
+ label: 'Used (%)',
116
+ help: 'Actual and committed against the planned amount.',
117
+ ...compute('account.budget.line', 'used', ['planned', 'actual', 'committed'], (lines) => {
118
+ for (const l of lines)
119
+ l.used = l.planned.isZero()
120
+ ? ZERO
121
+ : l.actual.plus(l.committed).div(l.planned).times(100).toDecimalPlaces(2);
122
+ }),
123
+ store: true,
124
+ }),
125
+ },
126
+ sqlConstraints: {
127
+ planned: { check: orm.sql `planned >= 0`, message: 'A planned amount is not negative.' },
128
+ },
129
+ });
130
+ /** Whether a purchase order goes beyond a budget, and which. */
131
+ export const PurchaseBudget = extendModel('purchase.order', {
132
+ fields: {
133
+ overBudget: f.boolean({
134
+ default: false,
135
+ label: 'Beyond a budget',
136
+ help: 'Set when the order is submitted: an Accounting manager approves it as well.',
137
+ }),
138
+ budgetNote: f.text({ label: 'Budget check' }),
139
+ },
140
+ overrides: {
141
+ // Before the approvals: the order checked against the approved budgets of its date.
142
+ submitting: async function (next) {
143
+ await next();
144
+ const orders = this;
145
+ const env = orders.env;
146
+ const { checkOrders } = await import('./budget.js');
147
+ await env.asSuperuser({ reason: 'budget check' }, (su) => checkOrders(su, orders.ids));
148
+ },
149
+ },
150
+ });
151
+ export const accountBudgetShutro = defineModule({
152
+ name: 'account_budget',
153
+ version: '0.1.0',
154
+ depends: [accountingShutro, purchaseAccountShutro],
155
+ groups: [
156
+ orm.defineGroup({ code: 'account_budget.user', label: 'Budgets', implies: ['account.user'] }),
157
+ ],
158
+ permissions: [
159
+ orm.definePermission({
160
+ code: 'account.budget',
161
+ label: 'Approve and close budgets',
162
+ groups: ['account.manager'],
163
+ }),
164
+ ],
165
+ models: [Budget, BudgetLine],
166
+ extensions: [PurchaseBudget],
167
+ });
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 388d1170be87e116
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 639c64f40f2fb53e
2
2
  // Bindings of module `account_portal`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,10 +1,11 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 388d1170be87e116
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 639c64f40f2fb53e
2
2
  // Schema view of module `account_portal` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
5
5
  /** Model name → model type (RFC 0002 §7.7). */
6
6
  export interface SchemaView {
7
7
  readonly 'account.account': AccountAccount;
8
+ readonly 'account.analytic': AccountAnalytic;
8
9
  readonly 'account.fiscal.year': AccountFiscalYear;
9
10
  readonly 'account.full.reconcile': AccountFullReconcile;
10
11
  readonly 'account.journal': AccountJournal;
@@ -18,9 +19,12 @@ export interface SchemaView {
18
19
  readonly 'account.tax': AccountTax;
19
20
  readonly 'account.tax.component': AccountTaxComponent;
20
21
  readonly 'account.withholding': AccountWithholding;
22
+ readonly 'approval.delegation': ApprovalDelegation;
21
23
  readonly 'approval.level': ApprovalLevel;
24
+ readonly 'approval.link': ApprovalLink;
22
25
  readonly 'approval.policy': ApprovalPolicy;
23
26
  readonly 'approval.request': ApprovalRequest;
27
+ readonly 'approval.vote': ApprovalVote;
24
28
  readonly 'audit.event': AuditEvent;
25
29
  readonly 'auth.api_key': AuthApiKey;
26
30
  readonly 'auth.credential': AuthCredential;
@@ -89,6 +93,30 @@ export interface AccountAccount {
89
93
  export interface AccountAccountMethods extends F.Methods<typeof import('../../accounting/index.js').accountingShutro, 'account.account'> {
90
94
  }
91
95
 
96
+ /** `account.analytic` (owner: accounting). */
97
+ export interface AccountAnalytic {
98
+ readonly name: 'account.analytic';
99
+ readonly fields: {
100
+ readonly id: F.Id<'account.analytic'>;
101
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
102
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
103
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
104
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
105
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
106
+ readonly active: F.Bool<{ readonly required: true; readonly default: true }>;
107
+ readonly company: F.Many2one<'res.company', { readonly required: true; readonly default: true }>;
108
+ readonly code: F.Char;
109
+ readonly name: F.Char<{ readonly required: true; readonly translate: true }>;
110
+ readonly parent: F.Many2one<'account.analytic'>;
111
+ readonly note: F.Text;
112
+ };
113
+ readonly methods: AccountAnalyticMethods;
114
+ }
115
+
116
+ /** Methods of `account.analytic`: declared ones and transitions. */
117
+ export interface AccountAnalyticMethods extends F.Methods<typeof import('../../accounting/index.js').accountingShutro, 'account.analytic'> {
118
+ }
119
+
92
120
  /** `account.fiscal.year` (owner: accounting). */
93
121
  export interface AccountFiscalYear {
94
122
  readonly name: 'account.fiscal.year';
@@ -244,6 +272,7 @@ export interface AccountMoveLine {
244
272
  readonly lineKind: F.Selection<'entry' | 'product' | 'tax' | 'counterpart', { readonly required: true; readonly default: true }>;
245
273
  readonly invoice: F.Many2one<'account.move', { readonly readonly: true; readonly compute: true; readonly store: true }>;
246
274
  readonly product: F.Many2one<'product.product'>;
275
+ readonly analytic: F.Many2one<'account.analytic'>;
247
276
  readonly quantity: F.Decimal<{ readonly default: true }>;
248
277
  readonly priceUnit: F.Decimal<{ readonly default: true }>;
249
278
  readonly discount: F.Decimal<{ readonly default: true }>;
@@ -485,6 +514,29 @@ export interface AccountWithholding {
485
514
  export interface AccountWithholdingMethods extends F.Methods<typeof import('../../accounting/index.js').accountingShutro, 'account.withholding'> {
486
515
  }
487
516
 
517
+ /** `approval.delegation` (owner: permissions). */
518
+ export interface ApprovalDelegation {
519
+ readonly name: 'approval.delegation';
520
+ readonly fields: {
521
+ readonly id: F.Id<'approval.delegation'>;
522
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
523
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
524
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
525
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
526
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
527
+ readonly user: F.Many2one<'res.users', { readonly required: true; readonly default: true }>;
528
+ readonly delegate: F.Many2one<'res.users', { readonly required: true }>;
529
+ readonly dateFrom: F.DateOnly<{ readonly required: true }>;
530
+ readonly dateTo: F.DateOnly<{ readonly required: true }>;
531
+ readonly note: F.Char;
532
+ };
533
+ readonly methods: ApprovalDelegationMethods;
534
+ }
535
+
536
+ /** Methods of `approval.delegation`: declared ones and transitions. */
537
+ export interface ApprovalDelegationMethods extends F.Methods<typeof import('../../permissions/index.js').permissionsShutro, 'approval.delegation'> {
538
+ }
539
+
488
540
  /** `approval.level` (owner: permissions). */
489
541
  export interface ApprovalLevel {
490
542
  readonly name: 'approval.level';
@@ -499,7 +551,14 @@ export interface ApprovalLevel {
499
551
  readonly sequence: F.Integer<{ readonly default: true }>;
500
552
  readonly name: F.Char<{ readonly required: true }>;
501
553
  readonly condition: F.Json;
502
- readonly approverRole: F.Char<{ readonly required: true }>;
554
+ readonly approverKind: F.Selection<'role' | 'users' | 'manager' | 'field', { readonly required: true; readonly default: true }>;
555
+ readonly approverRole: F.Char;
556
+ readonly approverUsers: F.Many2many<'res.users', { readonly required: true }>;
557
+ readonly approverField: F.Char;
558
+ readonly quorum: F.Selection<'any' | 'all' | 'count', { readonly required: true; readonly default: true }>;
559
+ readonly quorumCount: F.Integer;
560
+ readonly deadlineHours: F.Integer;
561
+ readonly escalateRole: F.Char;
503
562
  };
504
563
  readonly methods: ApprovalLevelMethods;
505
564
  }
@@ -508,6 +567,29 @@ export interface ApprovalLevel {
508
567
  export interface ApprovalLevelMethods extends F.Methods<typeof import('../../permissions/index.js').permissionsShutro, 'approval.level'> {
509
568
  }
510
569
 
570
+ /** `approval.link` (owner: permissions). */
571
+ export interface ApprovalLink {
572
+ readonly name: 'approval.link';
573
+ readonly fields: {
574
+ readonly id: F.Id<'approval.link'>;
575
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
576
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
577
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
578
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
579
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
580
+ readonly request: F.Many2one<'approval.request', { readonly required: true }>;
581
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
582
+ readonly tokenHash: F.Char<{ readonly required: true }>;
583
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
584
+ readonly usedAt: F.Datetime;
585
+ };
586
+ readonly methods: ApprovalLinkMethods;
587
+ }
588
+
589
+ /** Methods of `approval.link`: declared ones and transitions. */
590
+ export interface ApprovalLinkMethods extends F.Methods<typeof import('../../permissions/index.js').permissionsShutro, 'approval.link'> {
591
+ }
592
+
511
593
  /** `approval.policy` (owner: permissions). */
512
594
  export interface ApprovalPolicy {
513
595
  readonly name: 'approval.policy';
@@ -525,6 +607,9 @@ export interface ApprovalPolicy {
525
607
  readonly company: F.Many2one<'res.company'>;
526
608
  readonly onApproved: F.Char;
527
609
  readonly onRejected: F.Char;
610
+ readonly onSentBack: F.Char;
611
+ readonly onWithdrawn: F.Char;
612
+ readonly reasonRequired: F.Bool<{ readonly required: true; readonly default: true }>;
528
613
  readonly levels: F.One2many<'approval.level', { readonly required: true }>;
529
614
  };
530
615
  readonly methods: ApprovalPolicyMethods;
@@ -551,8 +636,16 @@ export interface ApprovalRequest {
551
636
  readonly targetModel: F.Char<{ readonly required: true }>;
552
637
  readonly targetId: F.Integer<{ readonly required: true }>;
553
638
  readonly company: F.Many2one<'res.company'>;
554
- readonly approverRole: F.Char<{ readonly required: true }>;
555
- readonly state: F.Selection<'pending' | 'approved' | 'rejected' | 'cancelled', { readonly required: true; readonly default: true }>;
639
+ readonly approverRole: F.Char;
640
+ readonly approvers: F.Many2many<'res.users', { readonly required: true }>;
641
+ readonly required: F.Integer<{ readonly required: true; readonly default: true }>;
642
+ readonly round: F.Integer<{ readonly required: true; readonly default: true }>;
643
+ readonly votes: F.One2many<'approval.vote', { readonly required: true }>;
644
+ readonly dueAt: F.Datetime;
645
+ readonly remindedAt: F.Datetime;
646
+ readonly escalatedTo: F.Char;
647
+ readonly escalatedAt: F.Datetime;
648
+ readonly state: F.Selection<'pending' | 'approved' | 'rejected' | 'sent_back' | 'cancelled', { readonly required: true; readonly default: true }>;
556
649
  readonly requestedBy: F.Many2one<'res.users'>;
557
650
  readonly decidedBy: F.Many2one<'res.users'>;
558
651
  readonly decidedAt: F.Datetime;
@@ -565,6 +658,31 @@ export interface ApprovalRequest {
565
658
  export interface ApprovalRequestMethods extends F.Methods<typeof import('../../permissions/index.js').permissionsShutro, 'approval.request'> {
566
659
  }
567
660
 
661
+ /** `approval.vote` (owner: permissions). */
662
+ export interface ApprovalVote {
663
+ readonly name: 'approval.vote';
664
+ readonly fields: {
665
+ readonly id: F.Id<'approval.vote'>;
666
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
667
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
668
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
669
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
670
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
671
+ readonly request: F.Many2one<'approval.request', { readonly required: true }>;
672
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
673
+ readonly decision: F.Selection<'approve' | 'reject' | 'send_back', { readonly required: true }>;
674
+ readonly comment: F.Text;
675
+ readonly at: F.Datetime<{ readonly required: true }>;
676
+ readonly onBehalfOf: F.Many2one<'res.users'>;
677
+ readonly ip: F.Char;
678
+ };
679
+ readonly methods: ApprovalVoteMethods;
680
+ }
681
+
682
+ /** Methods of `approval.vote`: declared ones and transitions. */
683
+ export interface ApprovalVoteMethods extends F.Methods<typeof import('../../permissions/index.js').permissionsShutro, 'approval.vote'> {
684
+ }
685
+
568
686
  /** `audit.event` (owner: base). */
569
687
  export interface AuditEvent {
570
688
  readonly name: 'audit.event';
@@ -1160,6 +1278,7 @@ export interface ProductCategory {
1160
1278
  readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
1161
1279
  readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
1162
1280
  readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
1281
+ readonly active: F.Bool<{ readonly required: true; readonly default: true }>;
1163
1282
  readonly name: F.Char<{ readonly required: true; readonly translate: true }>;
1164
1283
  readonly parent: F.Many2one<'product.category'>;
1165
1284
  };
@@ -512,6 +512,131 @@ export declare const accountPortalShutro: import("shutro").Module<readonly [], r
512
512
  readonly hasDefault: false;
513
513
  readonly readonly: false;
514
514
  }>;
515
+ }>>, import("shutro").Model<"account.analytic", {
516
+ readonly id: import("shutro").IdField<"account.analytic">;
517
+ readonly createdAt: import("shutro").ScalarField<'datetime', Date, Date, {
518
+ required: true;
519
+ readonly: true;
520
+ computed: false;
521
+ inverse: false;
522
+ hasDefault: false;
523
+ sequence: false;
524
+ }>;
525
+ readonly updatedAt: import("shutro").ScalarField<'datetime', Date, Date, {
526
+ required: true;
527
+ readonly: true;
528
+ computed: false;
529
+ inverse: false;
530
+ hasDefault: false;
531
+ sequence: false;
532
+ }>;
533
+ readonly createdBy: import("shutro").Many2oneField<'res.users', {
534
+ required: false;
535
+ readonly: true;
536
+ computed: false;
537
+ inverse: false;
538
+ hasDefault: false;
539
+ sequence: false;
540
+ }>;
541
+ readonly updatedBy: import("shutro").Many2oneField<'res.users', {
542
+ required: false;
543
+ readonly: true;
544
+ computed: false;
545
+ inverse: false;
546
+ hasDefault: false;
547
+ sequence: false;
548
+ }>;
549
+ readonly displayName: import("shutro").CharField<{
550
+ required: true;
551
+ readonly: true;
552
+ computed: true;
553
+ inverse: false;
554
+ hasDefault: false;
555
+ sequence: false;
556
+ }>;
557
+ readonly active: import("shutro").ActiveField;
558
+ readonly company: import("shutro").CompanyField<true>;
559
+ readonly code: import("shutro").CharField<{
560
+ readonly required: false;
561
+ readonly computed: false;
562
+ readonly inverse: false;
563
+ readonly sequence: false;
564
+ readonly computeName: undefined;
565
+ readonly store: true;
566
+ readonly hasDefault: false;
567
+ readonly readonly: false;
568
+ }, string>;
569
+ readonly name: import("shutro").CharField<{
570
+ readonly required: true;
571
+ readonly computed: false;
572
+ readonly inverse: false;
573
+ readonly sequence: false;
574
+ readonly computeName: undefined;
575
+ readonly store: true;
576
+ readonly hasDefault: false;
577
+ readonly readonly: false;
578
+ }, string | Readonly<Record<string, string>>>;
579
+ readonly parent: import("shutro").Many2oneField<"account.analytic", {
580
+ readonly required: false;
581
+ readonly computed: false;
582
+ readonly inverse: false;
583
+ readonly sequence: false;
584
+ readonly computeName: undefined;
585
+ readonly store: true;
586
+ readonly hasDefault: false;
587
+ readonly readonly: false;
588
+ }>;
589
+ readonly note: import("shutro").ScalarField<"text", string, string, {
590
+ readonly required: false;
591
+ readonly computed: false;
592
+ readonly inverse: false;
593
+ readonly sequence: false;
594
+ readonly computeName: undefined;
595
+ readonly store: true;
596
+ readonly hasDefault: false;
597
+ readonly readonly: false;
598
+ }>;
599
+ }, {} & import("shutro").TransitionMethods<{
600
+ readonly code: import("shutro").CharField<{
601
+ readonly required: false;
602
+ readonly computed: false;
603
+ readonly inverse: false;
604
+ readonly sequence: false;
605
+ readonly computeName: undefined;
606
+ readonly store: true;
607
+ readonly hasDefault: false;
608
+ readonly readonly: false;
609
+ }, string>;
610
+ readonly name: import("shutro").CharField<{
611
+ readonly required: true;
612
+ readonly computed: false;
613
+ readonly inverse: false;
614
+ readonly sequence: false;
615
+ readonly computeName: undefined;
616
+ readonly store: true;
617
+ readonly hasDefault: false;
618
+ readonly readonly: false;
619
+ }, string | Readonly<Record<string, string>>>;
620
+ readonly parent: import("shutro").Many2oneField<"account.analytic", {
621
+ readonly required: false;
622
+ readonly computed: false;
623
+ readonly inverse: false;
624
+ readonly sequence: false;
625
+ readonly computeName: undefined;
626
+ readonly store: true;
627
+ readonly hasDefault: false;
628
+ readonly readonly: false;
629
+ }>;
630
+ readonly note: import("shutro").ScalarField<"text", string, string, {
631
+ readonly required: false;
632
+ readonly computed: false;
633
+ readonly inverse: false;
634
+ readonly sequence: false;
635
+ readonly computeName: undefined;
636
+ readonly store: true;
637
+ readonly hasDefault: false;
638
+ readonly readonly: false;
639
+ }>;
515
640
  }>>, import("shutro").Model<"account.account", {
516
641
  readonly id: import("shutro").IdField<"account.account">;
517
642
  readonly createdAt: import("shutro").ScalarField<'datetime', Date, Date, {
@@ -2204,6 +2329,16 @@ export declare const accountPortalShutro: import("shutro").Module<readonly [], r
2204
2329
  readonly hasDefault: false;
2205
2330
  readonly readonly: false;
2206
2331
  }>;
2332
+ readonly analytic: import("shutro").Many2oneField<"account.analytic", {
2333
+ readonly required: false;
2334
+ readonly computed: false;
2335
+ readonly inverse: false;
2336
+ readonly sequence: false;
2337
+ readonly computeName: undefined;
2338
+ readonly store: true;
2339
+ readonly hasDefault: false;
2340
+ readonly readonly: false;
2341
+ }>;
2207
2342
  readonly quantity: import("shutro").DecimalField<{
2208
2343
  readonly required: false;
2209
2344
  readonly computed: false;
@@ -2555,6 +2690,16 @@ export declare const accountPortalShutro: import("shutro").Module<readonly [], r
2555
2690
  readonly hasDefault: false;
2556
2691
  readonly readonly: false;
2557
2692
  }>;
2693
+ readonly analytic: import("shutro").Many2oneField<"account.analytic", {
2694
+ readonly required: false;
2695
+ readonly computed: false;
2696
+ readonly inverse: false;
2697
+ readonly sequence: false;
2698
+ readonly computeName: undefined;
2699
+ readonly store: true;
2700
+ readonly hasDefault: false;
2701
+ readonly readonly: false;
2702
+ }>;
2558
2703
  readonly quantity: import("shutro").DecimalField<{
2559
2704
  readonly required: false;
2560
2705
  readonly computed: false;
@@ -4480,6 +4625,7 @@ export declare const accountPortalShutro: import("shutro").Module<readonly [], r
4480
4625
  hasDefault: false;
4481
4626
  sequence: false;
4482
4627
  }>;
4628
+ readonly active: import("shutro").ActiveField;
4483
4629
  readonly name: import("shutro").CharField<{
4484
4630
  readonly required: true;
4485
4631
  readonly computed: false;
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: ed4aa028c6a6d3e3
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: b53d4dea93e9a0bf
2
2
  // Bindings of module `accounting`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';