shutro-erp 0.3.6 → 0.3.7

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 (623) hide show
  1. package/dist/account_asset/.kosh/bindings.js +1 -1
  2. package/dist/account_asset/.kosh/schema.d.ts +530 -8
  3. package/dist/account_asset/i18n/bn.d.ts +2 -0
  4. package/dist/account_asset/i18n/bn.js +97 -0
  5. package/dist/account_asset/index.js +2 -0
  6. package/dist/account_asset/module.d.ts +4899 -1445
  7. package/dist/account_budget/.kosh/bindings.js +1 -1
  8. package/dist/account_budget/.kosh/schema.d.ts +1130 -56
  9. package/dist/account_budget/i18n/bn.d.ts +2 -0
  10. package/dist/account_budget/i18n/bn.js +63 -0
  11. package/dist/account_budget/index.js +14 -0
  12. package/dist/account_budget/module.d.ts +17958 -4532
  13. package/dist/account_budget/module.js +15 -0
  14. package/dist/account_portal/.kosh/bindings.js +1 -1
  15. package/dist/account_portal/.kosh/schema.d.ts +530 -8
  16. package/dist/account_portal/i18n/bn.d.ts +2 -0
  17. package/dist/account_portal/i18n/bn.js +6 -0
  18. package/dist/account_portal/index.js +2 -0
  19. package/dist/account_portal/module.d.ts +5167 -1693
  20. package/dist/accounting/.kosh/bindings.js +1 -1
  21. package/dist/accounting/.kosh/schema.d.ts +530 -8
  22. package/dist/accounting/closing.js +1 -0
  23. package/dist/accounting/fiscal.d.ts +578 -0
  24. package/dist/accounting/fiscal.js +401 -0
  25. package/dist/accounting/followups.d.ts +618 -0
  26. package/dist/accounting/followups.js +420 -0
  27. package/dist/accounting/i18n/bn.d.ts +2 -0
  28. package/dist/accounting/i18n/bn.js +425 -0
  29. package/dist/accounting/index.d.ts +2 -0
  30. package/dist/accounting/index.js +649 -2
  31. package/dist/accounting/module.d.ts +4998 -1451
  32. package/dist/accounting/module.js +124 -18
  33. package/dist/accounting/statements.d.ts +878 -0
  34. package/dist/accounting/statements.js +728 -0
  35. package/dist/accounting/web/BankReconcilePage.d.ts +9 -0
  36. package/dist/accounting/web/BankReconcilePage.js +138 -0
  37. package/dist/accounting/web/FollowupsPage.d.ts +8 -0
  38. package/dist/accounting/web/FollowupsPage.js +54 -0
  39. package/dist/accounting/web/PostingPreview.d.ts +8 -0
  40. package/dist/accounting/web/PostingPreview.js +26 -0
  41. package/dist/accounting/web/index.d.ts +3 -0
  42. package/dist/accounting/web/index.js +9 -0
  43. package/dist/accounting/web/messages.js +140 -0
  44. package/dist/approvals/.kosh/bindings.js +1 -1
  45. package/dist/approvals/.kosh/schema.d.ts +272 -4
  46. package/dist/approvals/demo.d.ts +7 -0
  47. package/dist/approvals/demo.js +41 -0
  48. package/dist/approvals/i18n/bn.d.ts +2 -0
  49. package/dist/approvals/i18n/bn.js +133 -0
  50. package/dist/approvals/index.d.ts +19 -1
  51. package/dist/approvals/index.js +477 -7
  52. package/dist/approvals/mails.d.ts +7 -2
  53. package/dist/approvals/mails.js +8 -3
  54. package/dist/approvals/module.d.ts +2930 -1
  55. package/dist/approvals/module.js +468 -7
  56. package/dist/approvals/web/Config.d.ts +12 -0
  57. package/dist/approvals/web/Config.js +60 -0
  58. package/dist/approvals/web/Matrix.d.ts +9 -0
  59. package/dist/approvals/web/Matrix.js +26 -0
  60. package/dist/approvals/web/index.d.ts +3 -1
  61. package/dist/approvals/web/index.js +8 -1
  62. package/dist/approvals/web/messages.js +92 -0
  63. package/dist/approvals_purchase/.kosh/bindings.js +15 -0
  64. package/dist/approvals_purchase/.kosh/schema.d.ts +1997 -0
  65. package/dist/approvals_purchase/i18n/bn.d.ts +2 -0
  66. package/dist/approvals_purchase/i18n/bn.js +5 -0
  67. package/dist/approvals_purchase/index.d.ts +3 -0
  68. package/dist/approvals_purchase/index.js +47 -0
  69. package/dist/approvals_purchase/module.d.ts +12670 -0
  70. package/dist/approvals_purchase/module.js +84 -0
  71. package/dist/attendance/.kosh/bindings.js +1 -1
  72. package/dist/attendance/.kosh/schema.d.ts +59 -1
  73. package/dist/attendance/i18n/bn.d.ts +2 -0
  74. package/dist/attendance/i18n/bn.js +147 -0
  75. package/dist/attendance/index.js +3 -1
  76. package/dist/attendance/module.d.ts +452 -8
  77. package/dist/automation/engine.js +1 -1
  78. package/dist/calendar/.kosh/bindings.js +1 -1
  79. package/dist/calendar/.kosh/schema.d.ts +2 -1
  80. package/dist/calendar/i18n/bn.d.ts +2 -0
  81. package/dist/calendar/i18n/bn.js +80 -0
  82. package/dist/calendar/index.js +77 -0
  83. package/dist/calendar/module.d.ts +26 -0
  84. package/dist/calendar/module.js +14 -4
  85. package/dist/cli/apps.js +25 -5
  86. package/dist/cli/init.js +14 -4
  87. package/dist/cli/templates.d.ts +1 -1
  88. package/dist/cli/templates.js +34 -5
  89. package/dist/contacts/.kosh/bindings.js +1 -1
  90. package/dist/contacts/.kosh/schema.d.ts +2 -1
  91. package/dist/contacts/i18n/bn.d.ts +2 -0
  92. package/dist/contacts/i18n/bn.js +67 -0
  93. package/dist/contacts/index.js +3 -0
  94. package/dist/contacts/module.d.ts +42 -0
  95. package/dist/contacts/module.js +6 -1
  96. package/dist/crm/.kosh/bindings.js +1 -1
  97. package/dist/crm/.kosh/schema.d.ts +2 -1
  98. package/dist/crm/i18n/bn.d.ts +2 -0
  99. package/dist/crm/i18n/bn.js +80 -0
  100. package/dist/crm/index.js +22 -0
  101. package/dist/crm/module.d.ts +20 -0
  102. package/dist/crm/module.js +4 -2
  103. package/dist/documents/.kosh/bindings.js +1 -1
  104. package/dist/documents/.kosh/schema.d.ts +2 -1
  105. package/dist/documents/i18n/bn.d.ts +2 -0
  106. package/dist/documents/i18n/bn.js +83 -0
  107. package/dist/documents/index.js +128 -1
  108. package/dist/documents/module.d.ts +20 -0
  109. package/dist/documents/module.js +1 -0
  110. package/dist/event/.kosh/bindings.js +1 -1
  111. package/dist/event/.kosh/schema.d.ts +2 -1
  112. package/dist/event/i18n/bn.d.ts +2 -0
  113. package/dist/event/i18n/bn.js +101 -0
  114. package/dist/event/index.js +66 -0
  115. package/dist/event/module.d.ts +20 -0
  116. package/dist/event/module.js +8 -1
  117. package/dist/event_account/.kosh/bindings.js +1 -1
  118. package/dist/event_account/.kosh/schema.d.ts +530 -8
  119. package/dist/event_account/i18n/bn.d.ts +2 -0
  120. package/dist/event_account/i18n/bn.js +5 -0
  121. package/dist/event_account/index.js +2 -0
  122. package/dist/event_account/module.d.ts +4905 -1431
  123. package/dist/expense/.kosh/bindings.js +1 -1
  124. package/dist/expense/.kosh/schema.d.ts +323 -2
  125. package/dist/expense/i18n/bn.d.ts +2 -0
  126. package/dist/expense/i18n/bn.js +155 -0
  127. package/dist/expense/index.js +8 -1
  128. package/dist/expense/module.d.ts +2715 -694
  129. package/dist/expense/module.js +3 -1
  130. package/dist/expense_account/.kosh/bindings.js +1 -1
  131. package/dist/expense_account/.kosh/schema.d.ts +587 -8
  132. package/dist/expense_account/i18n/bn.d.ts +2 -0
  133. package/dist/expense_account/i18n/bn.js +15 -0
  134. package/dist/expense_account/index.js +2 -0
  135. package/dist/expense_account/module.d.ts +8094 -2619
  136. package/dist/helpdesk/.kosh/bindings.js +1 -1
  137. package/dist/helpdesk/.kosh/schema.d.ts +2 -1
  138. package/dist/helpdesk/i18n/bn.d.ts +2 -0
  139. package/dist/helpdesk/i18n/bn.js +127 -0
  140. package/dist/helpdesk/index.js +2 -0
  141. package/dist/helpdesk/module.d.ts +20 -0
  142. package/dist/hr/.kosh/bindings.js +1 -1
  143. package/dist/hr/.kosh/schema.d.ts +59 -1
  144. package/dist/hr/demo.js +11 -1
  145. package/dist/hr/i18n/bn.d.ts +2 -0
  146. package/dist/hr/i18n/bn.js +126 -0
  147. package/dist/hr/index.d.ts +1 -1
  148. package/dist/hr/index.js +158 -12
  149. package/dist/hr/module.d.ts +932 -59
  150. package/dist/hr/module.js +114 -17
  151. package/dist/{mrp → indent}/.kosh/bindings.js +2 -2
  152. package/dist/indent/.kosh/schema.d.ts +2084 -0
  153. package/dist/indent/demo.d.ts +7 -0
  154. package/dist/indent/demo.js +48 -0
  155. package/dist/indent/i18n/bn.d.ts +2 -0
  156. package/dist/indent/i18n/bn.js +143 -0
  157. package/dist/indent/index.d.ts +3 -0
  158. package/dist/indent/index.js +450 -0
  159. package/dist/{mrp → indent}/module.d.ts +7164 -3075
  160. package/dist/indent/module.js +792 -0
  161. package/dist/indent_purchase/.kosh/bindings.d.ts +22 -0
  162. package/dist/indent_purchase/.kosh/bindings.js +15 -0
  163. package/dist/indent_purchase/.kosh/schema.d.ts +2710 -0
  164. package/dist/indent_purchase/i18n/bn.d.ts +2 -0
  165. package/dist/indent_purchase/i18n/bn.js +13 -0
  166. package/dist/indent_purchase/index.d.ts +3 -0
  167. package/dist/indent_purchase/index.js +61 -0
  168. package/dist/indent_purchase/module.d.ts +27950 -0
  169. package/dist/indent_purchase/module.js +163 -0
  170. package/dist/l10n_bd/.kosh/bindings.js +1 -1
  171. package/dist/l10n_bd/.kosh/schema.d.ts +530 -8
  172. package/dist/l10n_bd/i18n/bn.d.ts +2 -0
  173. package/dist/l10n_bd/i18n/bn.js +69 -0
  174. package/dist/l10n_bd/index.js +2 -0
  175. package/dist/l10n_bd/module.d.ts +5167 -1693
  176. package/dist/l10n_bd_payroll/.kosh/bindings.js +1 -1
  177. package/dist/l10n_bd_payroll/.kosh/schema.d.ts +587 -8
  178. package/dist/l10n_bd_payroll/i18n/bn.d.ts +2 -0
  179. package/dist/l10n_bd_payroll/i18n/bn.js +4 -0
  180. package/dist/l10n_bd_payroll/index.js +2 -0
  181. package/dist/l10n_bd_payroll/module.d.ts +5910 -1548
  182. package/dist/l10n_bd_pos/.kosh/bindings.d.ts +22 -0
  183. package/dist/{mrp_account → l10n_bd_pos}/.kosh/bindings.js +2 -2
  184. package/dist/{mrp_account → l10n_bd_pos}/.kosh/schema.d.ts +693 -651
  185. package/dist/l10n_bd_pos/i18n/bn.d.ts +2 -0
  186. package/dist/l10n_bd_pos/i18n/bn.js +32 -0
  187. package/dist/l10n_bd_pos/index.d.ts +3 -0
  188. package/dist/l10n_bd_pos/index.js +111 -0
  189. package/dist/{mrp_account → l10n_bd_pos}/module.d.ts +7402 -7647
  190. package/dist/l10n_bd_pos/module.js +43 -0
  191. package/dist/l10n_in/.kosh/bindings.js +1 -1
  192. package/dist/l10n_in/.kosh/schema.d.ts +530 -8
  193. package/dist/l10n_in/i18n/bn.d.ts +2 -0
  194. package/dist/l10n_in/i18n/bn.js +95 -0
  195. package/dist/l10n_in/index.js +2 -0
  196. package/dist/l10n_in/module.d.ts +6703 -1652
  197. package/dist/l10n_in/module.js +25 -5
  198. package/dist/l10n_in/web/GstSettings.js +2 -2
  199. package/dist/mail/inbound/handle.js +2 -4
  200. package/dist/mail/inbound/models.js +5 -3
  201. package/dist/mail/index.d.ts +12 -1
  202. package/dist/mail/index.js +139 -2
  203. package/dist/mail/send.d.ts +56 -0
  204. package/dist/mail/send.js +394 -0
  205. package/dist/mail/web/SendButton.d.ts +9 -0
  206. package/dist/mail/web/SendButton.js +71 -0
  207. package/dist/mail/web/SendSelected.d.ts +8 -0
  208. package/dist/mail/web/SendSelected.js +33 -0
  209. package/dist/mail/web/index.d.ts +2 -0
  210. package/dist/mail/web/index.js +6 -0
  211. package/dist/mail/web/messages.js +36 -0
  212. package/dist/maintenance/.kosh/bindings.js +1 -1
  213. package/dist/maintenance/.kosh/schema.d.ts +2 -1
  214. package/dist/maintenance/i18n/bn.d.ts +2 -0
  215. package/dist/maintenance/i18n/bn.js +132 -0
  216. package/dist/maintenance/index.js +85 -0
  217. package/dist/maintenance/module.d.ts +25 -0
  218. package/dist/maintenance/module.js +27 -9
  219. package/dist/maintenance_stock/.kosh/bindings.js +1 -1
  220. package/dist/maintenance_stock/.kosh/schema.d.ts +298 -2
  221. package/dist/maintenance_stock/i18n/bn.d.ts +2 -0
  222. package/dist/maintenance_stock/i18n/bn.js +21 -0
  223. package/dist/maintenance_stock/index.js +2 -0
  224. package/dist/maintenance_stock/module.d.ts +5302 -1256
  225. package/dist/maintenance_stock/module.js +1 -0
  226. package/dist/modules-sdk/apps.d.ts +10 -0
  227. package/dist/modules-sdk/apps.js +32 -0
  228. package/dist/modules-sdk/index.d.ts +1 -1
  229. package/dist/modules-sdk/manifest.d.ts +68 -2
  230. package/dist/payment/.kosh/bindings.js +1 -1
  231. package/dist/payment/.kosh/schema.d.ts +530 -8
  232. package/dist/payment/i18n/bn.d.ts +2 -0
  233. package/dist/payment/i18n/bn.js +59 -0
  234. package/dist/payment/index.js +85 -0
  235. package/dist/payment/module.d.ts +5134 -1660
  236. package/dist/payment/module.js +17 -3
  237. package/dist/payment/settle.js +1 -0
  238. package/dist/payroll/.kosh/bindings.js +1 -1
  239. package/dist/payroll/.kosh/schema.d.ts +59 -1
  240. package/dist/payroll/i18n/bn.d.ts +2 -0
  241. package/dist/payroll/i18n/bn.js +206 -0
  242. package/dist/payroll/index.js +2 -0
  243. package/dist/payroll/module.d.ts +936 -48
  244. package/dist/payroll_account/.kosh/bindings.js +1 -1
  245. package/dist/payroll_account/.kosh/schema.d.ts +587 -8
  246. package/dist/payroll_account/i18n/bn.d.ts +2 -0
  247. package/dist/payroll_account/i18n/bn.js +10 -0
  248. package/dist/payroll_account/index.js +2 -0
  249. package/dist/payroll_account/module.d.ts +7534 -3192
  250. package/dist/permissions/approvals.d.ts +97 -4
  251. package/dist/permissions/approvals.js +780 -31
  252. package/dist/permissions/index.d.ts +1 -1
  253. package/dist/permissions/index.js +2 -2
  254. package/dist/permissions/models.js +177 -5
  255. package/dist/permissions/routes.d.ts +3 -0
  256. package/dist/permissions/routes.js +36 -2
  257. package/dist/permissions/web/ApprovalPanel.js +43 -5
  258. package/dist/permissions/web/messages.js +52 -0
  259. package/dist/portal/.kosh/bindings.js +1 -1
  260. package/dist/portal/.kosh/schema.d.ts +2 -1
  261. package/dist/portal/documents.d.ts +3 -0
  262. package/dist/portal/documents.js +21 -1
  263. package/dist/portal/i18n/bn.d.ts +2 -0
  264. package/dist/portal/i18n/bn.js +33 -0
  265. package/dist/portal/index.js +2 -0
  266. package/dist/portal/module.d.ts +20 -0
  267. package/dist/portal/routes-documents.js +76 -0
  268. package/dist/pos/.kosh/bindings.js +1 -1
  269. package/dist/pos/.kosh/schema.d.ts +531 -8
  270. package/dist/pos/i18n/bn.d.ts +2 -0
  271. package/dist/pos/i18n/bn.js +133 -0
  272. package/dist/pos/index.js +83 -1
  273. package/dist/pos/module.d.ts +6888 -1777
  274. package/dist/pos/module.js +49 -5
  275. package/dist/pos/routes.js +80 -7
  276. package/dist/pos/web/Register.js +2 -5
  277. package/dist/pos_stock/.kosh/bindings.js +1 -1
  278. package/dist/pos_stock/.kosh/schema.d.ts +626 -9
  279. package/dist/pos_stock/i18n/bn.d.ts +2 -0
  280. package/dist/pos_stock/i18n/bn.js +6 -0
  281. package/dist/pos_stock/index.js +2 -0
  282. package/dist/pos_stock/module.d.ts +10798 -3276
  283. package/dist/product/.kosh/bindings.js +1 -1
  284. package/dist/product/.kosh/schema.d.ts +202 -1
  285. package/dist/product/i18n/bn.d.ts +2 -0
  286. package/dist/product/i18n/bn.js +175 -0
  287. package/dist/product/index.d.ts +1 -0
  288. package/dist/product/index.js +288 -1
  289. package/dist/product/module.d.ts +1725 -0
  290. package/dist/product/module.js +66 -6
  291. package/dist/product/pricelist.d.ts +575 -0
  292. package/dist/product/pricelist.js +257 -0
  293. package/dist/product/variants.d.ts +908 -0
  294. package/dist/product/variants.js +251 -0
  295. package/dist/production/.kosh/bindings.d.ts +22 -0
  296. package/dist/production/.kosh/bindings.js +15 -0
  297. package/dist/production/.kosh/schema.d.ts +2345 -0
  298. package/dist/{mrp → production}/demo.d.ts +1 -1
  299. package/dist/{mrp → production}/demo.js +5 -5
  300. package/dist/production/depth.d.ts +790 -0
  301. package/dist/production/depth.js +262 -0
  302. package/dist/production/i18n/bn.d.ts +2 -0
  303. package/dist/production/i18n/bn.js +350 -0
  304. package/dist/production/index.d.ts +6 -0
  305. package/dist/production/index.js +1256 -0
  306. package/dist/production/module.d.ts +17327 -0
  307. package/dist/production/module.js +1333 -0
  308. package/dist/production/plan.d.ts +921 -0
  309. package/dist/production/plan.js +511 -0
  310. package/dist/production/schedule.d.ts +656 -0
  311. package/dist/production/schedule.js +309 -0
  312. package/dist/production_account/.kosh/bindings.d.ts +22 -0
  313. package/dist/production_account/.kosh/bindings.js +15 -0
  314. package/dist/production_account/.kosh/schema.d.ts +3496 -0
  315. package/dist/production_account/i18n/bn.d.ts +2 -0
  316. package/dist/production_account/i18n/bn.js +93 -0
  317. package/dist/production_account/index.d.ts +4 -0
  318. package/dist/production_account/index.js +246 -0
  319. package/dist/production_account/module.d.ts +1192 -0
  320. package/dist/{mrp_account → production_account}/module.js +72 -18
  321. package/dist/production_account/overhead.d.ts +1195 -0
  322. package/dist/production_account/overhead.js +554 -0
  323. package/dist/project/.kosh/bindings.js +1 -1
  324. package/dist/project/.kosh/schema.d.ts +65 -2
  325. package/dist/project/i18n/bn.d.ts +2 -0
  326. package/dist/project/i18n/bn.js +383 -0
  327. package/dist/project/index.js +123 -0
  328. package/dist/project/module.d.ts +20 -0
  329. package/dist/project/module.js +73 -14
  330. package/dist/project_account/.kosh/bindings.js +1 -1
  331. package/dist/project_account/.kosh/schema.d.ts +530 -8
  332. package/dist/project_account/i18n/bn.d.ts +2 -0
  333. package/dist/project_account/i18n/bn.js +6 -0
  334. package/dist/project_account/index.js +2 -0
  335. package/dist/project_account/module.d.ts +4926 -1452
  336. package/dist/project_portal/.kosh/bindings.js +1 -1
  337. package/dist/project_portal/.kosh/schema.d.ts +65 -2
  338. package/dist/project_portal/i18n/bn.d.ts +2 -0
  339. package/dist/project_portal/i18n/bn.js +6 -0
  340. package/dist/project_portal/index.js +2 -0
  341. package/dist/project_portal/module.d.ts +40 -0
  342. package/dist/project_purchase/.kosh/bindings.js +1 -1
  343. package/dist/project_purchase/.kosh/schema.d.ts +1126 -53
  344. package/dist/project_purchase/i18n/bn.d.ts +2 -0
  345. package/dist/project_purchase/i18n/bn.js +4 -0
  346. package/dist/project_purchase/index.js +2 -0
  347. package/dist/project_purchase/module.d.ts +17912 -4446
  348. package/dist/purchase/.kosh/bindings.js +1 -1
  349. package/dist/purchase/.kosh/schema.d.ts +813 -3
  350. package/dist/purchase/comparison.d.ts +993 -0
  351. package/dist/purchase/comparison.js +415 -0
  352. package/dist/purchase/extras.d.ts +1509 -0
  353. package/dist/purchase/extras.js +445 -0
  354. package/dist/purchase/i18n/bn.d.ts +2 -0
  355. package/dist/purchase/i18n/bn.js +413 -0
  356. package/dist/purchase/index.d.ts +5 -0
  357. package/dist/purchase/index.js +1280 -4
  358. package/dist/purchase/module.d.ts +7139 -398
  359. package/dist/purchase/module.js +295 -11
  360. package/dist/purchase/request.d.ts +696 -0
  361. package/dist/purchase/request.js +446 -0
  362. package/dist/purchase/tender.d.ts +1208 -0
  363. package/dist/purchase/tender.js +507 -0
  364. package/dist/purchase/vendorprice.d.ts +340 -0
  365. package/dist/purchase/vendorprice.js +153 -0
  366. package/dist/purchase_account/.kosh/bindings.js +1 -1
  367. package/dist/purchase_account/.kosh/schema.d.ts +1130 -57
  368. package/dist/purchase_account/i18n/bn.d.ts +2 -0
  369. package/dist/purchase_account/i18n/bn.js +22 -0
  370. package/dist/purchase_account/index.js +19 -0
  371. package/dist/purchase_account/module.d.ts +12276 -2247
  372. package/dist/purchase_account/module.js +241 -9
  373. package/dist/purchase_portal/.kosh/bindings.js +1 -1
  374. package/dist/purchase_portal/.kosh/schema.d.ts +813 -3
  375. package/dist/purchase_portal/i18n/bn.d.ts +2 -0
  376. package/dist/purchase_portal/i18n/bn.js +5 -0
  377. package/dist/purchase_portal/index.js +2 -0
  378. package/dist/purchase_portal/module.d.ts +6849 -353
  379. package/dist/purchase_stock/.kosh/bindings.js +1 -1
  380. package/dist/purchase_stock/.kosh/schema.d.ts +910 -4
  381. package/dist/purchase_stock/i18n/bn.d.ts +2 -0
  382. package/dist/purchase_stock/i18n/bn.js +19 -0
  383. package/dist/purchase_stock/index.d.ts +1 -1
  384. package/dist/purchase_stock/index.js +29 -0
  385. package/dist/purchase_stock/module.d.ts +12410 -1864
  386. package/dist/purchase_stock/module.js +81 -9
  387. package/dist/purchase_stock/scorecard.d.ts +22 -0
  388. package/dist/purchase_stock/scorecard.js +77 -0
  389. package/dist/purchase_stock/web/Scorecard.d.ts +7 -0
  390. package/dist/purchase_stock/web/Scorecard.js +22 -0
  391. package/dist/purchase_stock/web/index.d.ts +11 -0
  392. package/dist/purchase_stock/web/index.js +16 -0
  393. package/dist/purchase_stock/web/messages.d.ts +2 -0
  394. package/dist/purchase_stock/web/messages.js +27 -0
  395. package/dist/purchase_stock_account/.kosh/bindings.js +1 -1
  396. package/dist/purchase_stock_account/.kosh/schema.d.ts +1286 -58
  397. package/dist/purchase_stock_account/i18n/bn.d.ts +2 -0
  398. package/dist/purchase_stock_account/i18n/bn.js +8 -0
  399. package/dist/purchase_stock_account/index.js +18 -0
  400. package/dist/purchase_stock_account/module.d.ts +7 -37995
  401. package/dist/purchase_stock_account/module.js +24 -3
  402. package/dist/recruitment/.kosh/bindings.js +1 -1
  403. package/dist/recruitment/.kosh/schema.d.ts +59 -1
  404. package/dist/recruitment/i18n/bn.d.ts +2 -0
  405. package/dist/recruitment/i18n/bn.js +93 -0
  406. package/dist/recruitment/index.js +64 -0
  407. package/dist/recruitment/module.d.ts +458 -8
  408. package/dist/recruitment/module.js +11 -3
  409. package/dist/reporting/documents.d.ts +5 -0
  410. package/dist/reporting/documents.js +11 -1
  411. package/dist/reporting/index.d.ts +1 -1
  412. package/dist/reporting/index.js +1 -1
  413. package/dist/reporting/web/CalendarView.d.ts +18 -5
  414. package/dist/reporting/web/CalendarView.js +163 -29
  415. package/dist/reporting/web/messages.js +18 -0
  416. package/dist/sale_account/.kosh/bindings.js +1 -1
  417. package/dist/sale_account/.kosh/schema.d.ts +642 -16
  418. package/dist/sale_account/i18n/bn.d.ts +2 -0
  419. package/dist/sale_account/i18n/bn.js +48 -0
  420. package/dist/sale_account/index.d.ts +1 -1
  421. package/dist/sale_account/index.js +102 -4
  422. package/dist/sale_account/module.d.ts +8254 -2212
  423. package/dist/sale_account/module.js +535 -46
  424. package/dist/sale_crm/.kosh/bindings.d.ts +22 -0
  425. package/dist/sale_crm/.kosh/bindings.js +15 -0
  426. package/dist/{mrp → sale_crm}/.kosh/schema.d.ts +389 -567
  427. package/dist/sale_crm/i18n/bn.d.ts +2 -0
  428. package/dist/sale_crm/i18n/bn.js +9 -0
  429. package/dist/sale_crm/index.d.ts +7 -0
  430. package/dist/sale_crm/index.js +104 -0
  431. package/dist/sale_crm/module.d.ts +5609 -0
  432. package/dist/sale_crm/module.js +73 -0
  433. package/dist/sale_portal/.kosh/bindings.js +1 -1
  434. package/dist/sale_portal/.kosh/schema.d.ts +291 -4
  435. package/dist/sale_portal/i18n/bn.d.ts +2 -0
  436. package/dist/sale_portal/i18n/bn.js +7 -0
  437. package/dist/sale_portal/index.js +10 -0
  438. package/dist/sale_portal/module.d.ts +2564 -294
  439. package/dist/sale_project/.kosh/bindings.js +1 -1
  440. package/dist/sale_project/.kosh/schema.d.ts +354 -5
  441. package/dist/sale_project/i18n/bn.d.ts +2 -0
  442. package/dist/sale_project/i18n/bn.js +12 -0
  443. package/dist/sale_project/index.js +2 -0
  444. package/dist/sale_project/module.d.ts +6249 -2402
  445. package/dist/sale_stock/.kosh/bindings.js +1 -1
  446. package/dist/sale_stock/.kosh/schema.d.ts +387 -5
  447. package/dist/sale_stock/i18n/bn.d.ts +2 -0
  448. package/dist/sale_stock/i18n/bn.js +15 -0
  449. package/dist/sale_stock/index.js +2 -0
  450. package/dist/sale_stock/module.d.ts +8057 -1759
  451. package/dist/sale_stock/module.js +20 -3
  452. package/dist/sales/.kosh/bindings.js +1 -1
  453. package/dist/sales/.kosh/schema.d.ts +291 -4
  454. package/dist/sales/i18n/bn.d.ts +2 -0
  455. package/dist/sales/i18n/bn.js +128 -0
  456. package/dist/sales/index.js +120 -5
  457. package/dist/sales/module.d.ts +3567 -633
  458. package/dist/sales/module.js +306 -11
  459. package/dist/server/api/duplicate.d.ts +14 -0
  460. package/dist/server/api/duplicate.js +75 -0
  461. package/dist/server/api/explain.d.ts +70 -0
  462. package/dist/server/api/explain.js +111 -0
  463. package/dist/server/api/metadata.d.ts +2 -0
  464. package/dist/server/api/metadata.js +9 -0
  465. package/dist/server/api/openapi.js +15 -0
  466. package/dist/server/api/rest.d.ts +1 -0
  467. package/dist/server/api/rest.js +76 -12
  468. package/dist/server/api/views.js +1 -1
  469. package/dist/server/apps.d.ts +16 -1
  470. package/dist/server/apps.js +164 -2
  471. package/dist/server/auth/base.js +2 -0
  472. package/dist/server/auth/service.d.ts +8 -0
  473. package/dist/server/auth/service.js +19 -0
  474. package/dist/server/events.d.ts +13 -0
  475. package/dist/server/events.js +22 -0
  476. package/dist/server/i18n.d.ts +27 -0
  477. package/dist/server/i18n.js +143 -0
  478. package/dist/server/index.d.ts +2 -0
  479. package/dist/server/index.js +2 -0
  480. package/dist/server/server.js +6 -0
  481. package/dist/settings/company.d.ts +3 -1
  482. package/dist/settings/company.js +26 -5
  483. package/dist/settings/routes.d.ts +10 -0
  484. package/dist/settings/routes.js +19 -3
  485. package/dist/settings/web/AppsPage.d.ts +3 -2
  486. package/dist/settings/web/AppsPage.js +26 -8
  487. package/dist/settings/web/CompaniesPage.js +91 -6
  488. package/dist/settings/web/messages.js +64 -0
  489. package/dist/sign/.kosh/bindings.js +1 -1
  490. package/dist/sign/.kosh/schema.d.ts +2 -1
  491. package/dist/sign/i18n/bn.d.ts +2 -0
  492. package/dist/sign/i18n/bn.js +97 -0
  493. package/dist/sign/index.d.ts +15 -0
  494. package/dist/sign/index.js +129 -1
  495. package/dist/sign/module.d.ts +40 -0
  496. package/dist/sign/module.js +11 -2
  497. package/dist/stock/.kosh/bindings.js +1 -1
  498. package/dist/stock/.kosh/schema.d.ts +298 -2
  499. package/dist/stock/i18n/bn.d.ts +2 -0
  500. package/dist/stock/i18n/bn.js +311 -0
  501. package/dist/stock/index.d.ts +3 -1
  502. package/dist/stock/index.js +442 -3
  503. package/dist/stock/ledger.d.ts +78 -0
  504. package/dist/stock/ledger.js +582 -0
  505. package/dist/stock/module.d.ts +5280 -2044
  506. package/dist/stock/module.js +222 -23
  507. package/dist/stock/replenish.js +16 -1
  508. package/dist/stock/returns.d.ts +157 -0
  509. package/dist/stock/returns.js +163 -0
  510. package/dist/stock/web/Ledger.d.ts +9 -0
  511. package/dist/stock/web/Ledger.js +108 -0
  512. package/dist/stock/web/Operations.d.ts +8 -0
  513. package/dist/stock/web/Operations.js +33 -0
  514. package/dist/stock/web/ReturnButton.d.ts +7 -0
  515. package/dist/stock/web/ReturnButton.js +62 -0
  516. package/dist/stock/web/index.d.ts +3 -0
  517. package/dist/stock/web/index.js +9 -0
  518. package/dist/stock/web/messages.js +154 -0
  519. package/dist/stock_account/.kosh/bindings.js +1 -1
  520. package/dist/stock_account/.kosh/schema.d.ts +682 -9
  521. package/dist/stock_account/i18n/bn.d.ts +2 -0
  522. package/dist/stock_account/i18n/bn.js +73 -0
  523. package/dist/stock_account/index.d.ts +1 -0
  524. package/dist/stock_account/index.js +131 -3
  525. package/dist/stock_account/landed.d.ts +429 -0
  526. package/dist/stock_account/landed.js +335 -0
  527. package/dist/stock_account/module.d.ts +11247 -3363
  528. package/dist/stock_account/module.js +135 -6
  529. package/dist/stock_account/web/LandedPreview.d.ts +7 -0
  530. package/dist/stock_account/web/LandedPreview.js +23 -0
  531. package/dist/stock_account/web/index.d.ts +11 -0
  532. package/dist/stock_account/web/index.js +16 -0
  533. package/dist/stock_account/web/messages.d.ts +2 -0
  534. package/dist/stock_account/web/messages.js +27 -0
  535. package/dist/todo/i18n/bn.d.ts +2 -0
  536. package/dist/todo/i18n/bn.js +66 -0
  537. package/dist/todo/index.js +59 -0
  538. package/dist/todo/module.d.ts +5 -0
  539. package/dist/todo/module.js +5 -3
  540. package/dist/trade_finance/.kosh/bindings.js +1 -1
  541. package/dist/trade_finance/.kosh/schema.d.ts +2 -1
  542. package/dist/trade_finance/i18n/bn.d.ts +2 -0
  543. package/dist/trade_finance/i18n/bn.js +162 -0
  544. package/dist/trade_finance/index.js +93 -0
  545. package/dist/trade_finance/module.d.ts +26 -0
  546. package/dist/trade_finance/module.js +27 -8
  547. package/dist/trade_finance_account/.kosh/bindings.js +1 -1
  548. package/dist/trade_finance_account/.kosh/schema.d.ts +530 -8
  549. package/dist/trade_finance_account/i18n/bn.d.ts +2 -0
  550. package/dist/trade_finance_account/i18n/bn.js +27 -0
  551. package/dist/trade_finance_account/index.js +2 -0
  552. package/dist/trade_finance_account/module.d.ts +4906 -1432
  553. package/dist/trade_finance_account/module.js +1 -0
  554. package/dist/trade_finance_purchase/.kosh/bindings.js +1 -1
  555. package/dist/trade_finance_purchase/.kosh/schema.d.ts +813 -3
  556. package/dist/trade_finance_purchase/i18n/bn.d.ts +2 -0
  557. package/dist/trade_finance_purchase/i18n/bn.js +6 -0
  558. package/dist/trade_finance_purchase/index.js +2 -0
  559. package/dist/trade_finance_purchase/module.d.ts +6909 -413
  560. package/dist/trade_finance_sale/.kosh/bindings.js +1 -1
  561. package/dist/trade_finance_sale/.kosh/schema.d.ts +291 -4
  562. package/dist/trade_finance_sale/i18n/bn.d.ts +2 -0
  563. package/dist/trade_finance_sale/i18n/bn.js +6 -0
  564. package/dist/trade_finance_sale/index.js +2 -0
  565. package/dist/trade_finance_sale/module.d.ts +2601 -331
  566. package/dist/ui/api.d.ts +2 -0
  567. package/dist/ui/app.d.ts +9 -0
  568. package/dist/ui/app.js +24 -4
  569. package/dist/ui/components/AppIcon.js +2 -2
  570. package/dist/ui/components/Explain.d.ts +69 -0
  571. package/dist/ui/components/Explain.js +62 -0
  572. package/dist/ui/context.d.ts +8 -1
  573. package/dist/ui/context.js +34 -1
  574. package/dist/ui/i18n/messages.d.ts +36 -0
  575. package/dist/ui/i18n/messages.js +72 -0
  576. package/dist/ui/index.d.ts +2 -1
  577. package/dist/ui/index.js +1 -0
  578. package/dist/ui/registry.d.ts +14 -0
  579. package/dist/ui/registry.js +10 -0
  580. package/dist/ui/views/FormView.d.ts +6 -0
  581. package/dist/ui/views/FormView.js +47 -10
  582. package/dist/ui/views/ListView.d.ts +8 -0
  583. package/dist/ui/views/ListView.js +10 -3
  584. package/dist/ui/views/StatsRow.js +2 -1
  585. package/dist/views/extend.js +12 -0
  586. package/dist/views/types.d.ts +13 -2
  587. package/dist/views/validate.js +8 -1
  588. package/dist/website/.kosh/bindings.js +1 -1
  589. package/dist/website/.kosh/schema.d.ts +2 -1
  590. package/dist/website/i18n/bn.d.ts +2 -0
  591. package/dist/website/i18n/bn.js +113 -0
  592. package/dist/website/index.js +36 -0
  593. package/dist/website/module.d.ts +20 -0
  594. package/dist/website/module.js +29 -5
  595. package/dist/website_crm/.kosh/bindings.js +1 -1
  596. package/dist/website_crm/.kosh/schema.d.ts +2 -1
  597. package/dist/website_crm/i18n/bn.d.ts +2 -0
  598. package/dist/website_crm/i18n/bn.js +5 -0
  599. package/dist/website_crm/index.js +2 -0
  600. package/dist/website_crm/module.d.ts +40 -0
  601. package/dist/website_sale/.kosh/bindings.js +1 -1
  602. package/dist/website_sale/.kosh/schema.d.ts +642 -17
  603. package/dist/website_sale/i18n/bn.d.ts +2 -0
  604. package/dist/website_sale/i18n/bn.js +132 -0
  605. package/dist/website_sale/index.js +83 -1
  606. package/dist/website_sale/module.d.ts +18705 -5550
  607. package/dist/website_sale/module.js +32 -10
  608. package/dist/website_sale/shop.js +22 -9
  609. package/dist/website_sale_stock/.kosh/bindings.js +1 -1
  610. package/dist/website_sale_stock/.kosh/schema.d.ts +737 -18
  611. package/dist/website_sale_stock/i18n/bn.d.ts +2 -0
  612. package/dist/website_sale_stock/i18n/bn.js +4 -0
  613. package/dist/website_sale_stock/index.js +2 -0
  614. package/dist/website_sale_stock/module.d.ts +10 -24997
  615. package/dist/website_sale_stock/module.js +7 -3
  616. package/package.json +36 -8
  617. package/dist/mrp/index.d.ts +0 -3
  618. package/dist/mrp/index.js +0 -393
  619. package/dist/mrp/module.js +0 -757
  620. package/dist/mrp_account/index.d.ts +0 -3
  621. package/dist/mrp_account/index.js +0 -22
  622. /package/dist/{mrp → approvals_purchase}/.kosh/bindings.d.ts +0 -0
  623. /package/dist/{mrp_account → indent}/.kosh/bindings.d.ts +0 -0
@@ -10,9 +10,14 @@ import { approvalGuard, permissionsShutro, requestApprovals } from '../permissio
10
10
  import { computeTaxes, productShutro, taxRule } from '../product/index.js';
11
11
  import { orm } from '../server/orm.js';
12
12
  import { check, compute, defineModel, defineModule, extendModel, f, method, onchange, records, } from './.kosh/bindings.js';
13
+ import { PurchaseComparison, PurchaseComparisonLine, PurchaseTechnicalComparison, PurchaseTechnicalComparisonLine, } from './comparison.js';
14
+ import { agreementPriceFor, checkAgreement, PurchaseAgreement, PurchaseAgreementLine, PurchaseVendorRequest, PurchaseWorkAcceptance, PurchaseWorkAcceptanceLine, } from './extras.js';
15
+ import { PurchaseRequest, PurchaseRequestLine } from './request.js';
16
+ import { PurchaseTender, PurchaseTenderLine, PurchaseTenderResponse, PurchaseTenderResponseLine, } from './tender.js';
17
+ import { ProductVendorPrice, vendorPriceFor } from './vendorprice.js';
13
18
  /** A line's taxes through the engine (RFC 0016): its amount, its taxes in order. */
14
19
  function taxesOf(l) {
15
- return computeTaxes(l.quantity.times(l.priceUnit), l.quantity, [...l.taxes].map(taxRule));
20
+ return computeTaxes(l.quantity.times(l.priceUnit ?? orm.toDecimal('0')), l.quantity, [...l.taxes].map(taxRule));
16
21
  }
17
22
  const amounts = compute('purchase.order', ['amountUntaxed', 'amountTax', 'amountTotal'], ['lines.subtotal', 'lines.taxAmount'], (orders) => {
18
23
  for (const o of orders) {
@@ -62,11 +67,62 @@ export const PurchaseOrder = defineModel('purchase.order', {
62
67
  datePlanned: f.date({ label: 'Expected arrival' }),
63
68
  origin: f.char({ label: 'Source document' }),
64
69
  note: f.text({ label: 'Terms and conditions' }),
70
+ // The group's order header (RFC 0032 §3.4).
71
+ poType: f.selection({ general: 'General', service: 'Service', capital: 'Capital (asset)' }, {
72
+ required: true,
73
+ default: 'general',
74
+ label: 'PO type',
75
+ help: 'Goods in general, a service (accepted by work acceptance), or a capital purchase (an asset).',
76
+ }),
77
+ sourcing: f.selection({ local: 'Local', import: 'Import' }, {
78
+ required: true,
79
+ default: 'local',
80
+ help: 'Bought in the country, or imported (a letter of credit may follow with Trade Finance).',
81
+ }),
82
+ advancePercent: f.decimal({
83
+ scale: 2,
84
+ default: '0',
85
+ label: 'Advance (%)',
86
+ help: 'The share of the order paid before delivery, as agreed with the vendor.',
87
+ }),
88
+ agreement: f.many2one('purchase.agreement', {
89
+ ondelete: 'restrict',
90
+ help: 'The blanket order or contract this order draws on: its prices, within its quantities and dates.',
91
+ }),
92
+ acceptances: f.one2many('purchase.work.acceptance', 'order', { label: 'Work acceptances' }),
93
+ acceptanceCount: f.integer({
94
+ store: true,
95
+ label: 'Work acceptances',
96
+ help: 'Once an order has one, its service lines are billed up to what was accepted.',
97
+ ...compute('purchase.order', 'acceptanceCount', ['acceptances.state'], (orders) => {
98
+ for (const o of orders)
99
+ o.acceptanceCount = [...o.acceptances].filter((a) => a.state === 'accepted').length;
100
+ }),
101
+ }),
65
102
  lines: f.one2many('purchase.order.line', 'order'),
66
- amountUntaxed: f.monetary({ currency: 'currency', store: true, label: 'Untaxed', ...amounts }),
67
- amountTax: f.monetary({ currency: 'currency', store: true, label: 'Taxes', ...amounts }),
68
- amountTotal: f.monetary({ currency: 'currency', store: true, label: 'Total', ...amounts }),
103
+ amountUntaxed: f.monetary({
104
+ currency: 'currency',
105
+ store: true,
106
+ label: 'Untaxed',
107
+ help: 'The sum of the lines’ amounts before taxes.',
108
+ ...amounts,
109
+ }),
110
+ amountTax: f.monetary({
111
+ currency: 'currency',
112
+ store: true,
113
+ label: 'Taxes',
114
+ help: 'The sum of the taxes on the lines.',
115
+ ...amounts,
116
+ }),
117
+ amountTotal: f.monetary({
118
+ currency: 'currency',
119
+ store: true,
120
+ label: 'Total',
121
+ help: 'What the order costs with its taxes: the untaxed amount plus the taxes.',
122
+ ...amounts,
123
+ }),
69
124
  state: f.state({
125
+ help: 'A request for quotation until it is submitted; once approved it becomes a purchase order, which can then be locked or cancelled.',
70
126
  states: {
71
127
  draft: 'RFQ',
72
128
  sent: 'RFQ sent',
@@ -114,8 +170,43 @@ export const PurchaseOrder = defineModel('purchase.order', {
114
170
  }),
115
171
  },
116
172
  methods: {
117
- /** Before the approvals of a submission: nothing here; account_budget checks the budgets. */
118
- submitting: method('purchase.order', async () => undefined),
173
+ /** Before the approvals of a submission: the agreement's limits (RFC 0032 §3.4); account_budget adds its budgets. */
174
+ submitting: method('purchase.order', async function () {
175
+ const orders = this;
176
+ await checkAgreement(orders.env, orders.ids);
177
+ }),
178
+ /**
179
+ * The approvers each order names for an approval level where "the record decides" (RFC 0027 §2.1): the approvers
180
+ * of its lines' product categories (the nearest category up the tree that names some).
181
+ */
182
+ approvalUsers: method('purchase.order', async function (_key) {
183
+ const orders = this;
184
+ const out = new Map();
185
+ for (const order of await orders.env
186
+ .model('purchase.order')
187
+ .browse([...orders.ids])
188
+ .load({ lines: { product: { category: true } } })) {
189
+ const people = new Set();
190
+ for (const line of order.lines) {
191
+ let category = line.product?.category?.id;
192
+ for (let depth = 0; category !== undefined && depth < 10; depth += 1) {
193
+ const [c] = await orders.env
194
+ .model('product.category')
195
+ .browse([category])
196
+ .load({ approvalUsers: true, parent: true });
197
+ const users = (c?.approvalUsers ?? []);
198
+ if (users.length > 0) {
199
+ for (const u of users)
200
+ people.add(u.id);
201
+ break;
202
+ }
203
+ category = c?.parent?.id;
204
+ }
205
+ }
206
+ out.set(order.id, [...people]);
207
+ }
208
+ return out;
209
+ }),
119
210
  },
120
211
  onchange: {
121
212
  // The vendor's currency, else the company's; empty terms from the company's settings.
@@ -146,6 +237,52 @@ export const CompanyPurchase = extendModel('res.company', {
146
237
  purchaseTerms: f.text({ label: 'Default terms and conditions' }),
147
238
  },
148
239
  });
240
+ /** A purchase line's price and why (RFC 0030 §3.1): typed in, else the vendor's price, else the product's cost. */
241
+ async function purchaseLinePrice(l) {
242
+ if (l.manualPrice !== null)
243
+ return { price: l.manualPrice, reason: 'Typed in.', code: null };
244
+ if (l.product === null)
245
+ return { price: orm.toDecimal('0'), reason: null, code: null };
246
+ const env = l.env;
247
+ const date = String(l.order?.dateOrder ?? env.today()).slice(0, 10);
248
+ // An agreement the order draws on fixes the price (RFC 0032 §3.4).
249
+ const agreement = l.order?.agreement?.id ?? null;
250
+ if (agreement !== null) {
251
+ const fixed = await agreementPriceFor(env, agreement, l.product.id, date);
252
+ if (fixed !== null)
253
+ return { price: fixed.price, reason: `Agreement ${fixed.name}.`, code: null };
254
+ }
255
+ const vendor = l.order?.partner?.id ?? null;
256
+ const choice = vendor === null
257
+ ? null
258
+ : await vendorPriceFor(env, {
259
+ product: l.product.id,
260
+ quantity: l.quantity,
261
+ date,
262
+ vendor,
263
+ currency: l.order?.currency?.id ?? null,
264
+ });
265
+ if (choice !== null)
266
+ return { price: choice.price, reason: choice.explanation, code: choice.vendorCode };
267
+ const [product] = await env
268
+ .model('product.product')
269
+ .browse([l.product.id])
270
+ .load(['standardPrice']);
271
+ return {
272
+ price: product?.standardPrice ?? orm.toDecimal('0'),
273
+ reason: 'The product’s cost: this vendor has no price for it.',
274
+ code: null,
275
+ };
276
+ }
277
+ const PRICE_DEPENDS = [
278
+ 'product',
279
+ 'quantity',
280
+ 'manualPrice',
281
+ 'order.partner',
282
+ 'order.dateOrder',
283
+ 'order.currency',
284
+ 'order.agreement',
285
+ ];
149
286
  export const PurchaseOrderLine = defineModel('purchase.order.line', {
150
287
  label: 'Purchase line',
151
288
  access: {
@@ -158,12 +295,72 @@ export const PurchaseOrderLine = defineModel('purchase.order.line', {
158
295
  name: f.char({ required: true, label: 'Description' }),
159
296
  quantity: f.decimal({ scale: 3, required: true, default: '1' }),
160
297
  uom: f.many2one('uom.uom', { label: 'Unit' }),
161
- priceUnit: f.decimal({ scale: 2, required: true, default: '0', label: 'Unit price' }),
298
+ /**
299
+ * The unit price: the one typed in, else the vendor's price for the quantity and date (RFC 0030 §3.1), else the
300
+ * product's cost. Typing a price keeps it (`manualPrice`).
301
+ */
302
+ priceUnit: f.decimal({
303
+ scale: 2,
304
+ store: true,
305
+ label: 'Unit price',
306
+ help: 'The price typed in, else the vendor’s price for this quantity and date (see why on the line), else the product’s cost.',
307
+ ...compute('purchase.order.line', 'priceUnit', [...PRICE_DEPENDS], async (lines) => {
308
+ for (const l of lines)
309
+ l.priceUnit = (await purchaseLinePrice(l)).price;
310
+ }),
311
+ inverse: async (records) => {
312
+ const lines = records;
313
+ const env = records.env;
314
+ for (const l of lines)
315
+ await env
316
+ .model('purchase.order.line')
317
+ .browse([l.id])
318
+ .write({ manualPrice: l.priceUnit });
319
+ },
320
+ }),
321
+ /** The price typed in, kept when the product, the quantity or the vendor changes (empty: the vendor's price). */
322
+ manualPrice: f.decimal({ scale: 2, label: 'Price typed in' }),
323
+ /** Why the line has its price: the vendor price and its break, or "typed in". */
324
+ priceReason: f.char({
325
+ store: true,
326
+ label: 'Why this price',
327
+ ...compute('purchase.order.line', 'priceReason', [...PRICE_DEPENDS], async (lines) => {
328
+ for (const l of lines)
329
+ l.priceReason = (await purchaseLinePrice(l)).reason;
330
+ }),
331
+ }),
332
+ /** The vendor's own code for the product, from their price. */
333
+ vendorCode: f.char({
334
+ store: true,
335
+ label: 'Vendor’s code',
336
+ ...compute('purchase.order.line', 'vendorCode', [...PRICE_DEPENDS], async (lines) => {
337
+ for (const l of lines)
338
+ l.vendorCode = (await purchaseLinePrice(l)).code;
339
+ }),
340
+ }),
162
341
  /** The line's taxes, applied in order (RFC 0016). */
163
342
  taxes: f.many2many('account.tax'),
164
343
  /** Before 0.2.0, one tax per line: copied into `taxes` by the migration; dropped later. */
165
344
  tax: f.many2one('account.tax', { label: 'Tax (before 0.2.0)', readonly: true }),
166
345
  datePlanned: f.date({ label: 'Expected arrival' }),
346
+ acceptanceLines: f.one2many('purchase.work.acceptance.line', 'orderLine'),
347
+ qtyAccepted: f.decimal({
348
+ scale: 3,
349
+ store: true,
350
+ label: 'Accepted',
351
+ help: 'What accepted work acceptances cover of this service line.',
352
+ ...compute('purchase.order.line', 'qtyAccepted', ['acceptanceLines.quantity', 'acceptanceLines.acceptance.state'], (lines) => {
353
+ for (const l of lines)
354
+ l.qtyAccepted = [...l.acceptanceLines]
355
+ .filter((a) => a.acceptance.state === 'accepted')
356
+ .reduce((s, a) => s.plus(a.quantity), orm.toDecimal(0));
357
+ }),
358
+ }),
359
+ /** The purchase request line this one buys for (RFC 0032 §3.4). */
360
+ requestLine: f.many2one('purchase.request.line', {
361
+ ondelete: 'set null',
362
+ label: 'Request line',
363
+ }),
167
364
  currency: f.many2one('res.currency', {
168
365
  store: true,
169
366
  ...compute('purchase.order.line', 'currency', ['order.currency'], (lines) => {
@@ -174,6 +371,7 @@ export const PurchaseOrderLine = defineModel('purchase.order.line', {
174
371
  subtotal: f.monetary({
175
372
  currency: 'currency',
176
373
  store: true,
374
+ help: 'The line’s amount before taxes: the quantity times the unit price, less any tax included in the price.',
177
375
  ...compute('purchase.order.line', 'subtotal', [
178
376
  'quantity',
179
377
  'priceUnit',
@@ -193,6 +391,7 @@ export const PurchaseOrderLine = defineModel('purchase.order.line', {
193
391
  currency: 'currency',
194
392
  store: true,
195
393
  label: 'Tax',
394
+ help: 'The taxes on this line, computed from its amount and its taxes.',
196
395
  ...compute('purchase.order.line', 'taxAmount', [
197
396
  'quantity',
198
397
  'priceUnit',
@@ -215,7 +414,6 @@ export const PurchaseOrderLine = defineModel('purchase.order.line', {
215
414
  if (p === null)
216
415
  return;
217
416
  d.set('name', p.name);
218
- d.set('priceUnit', p.standardPrice);
219
417
  d.set('uom', p.uom?.id ?? null);
220
418
  // The product's taxes, loaded (a draft's related record has its plain fields only).
221
419
  const [taxed] = await env
@@ -234,8 +432,16 @@ export const PurchaseOrderLine = defineModel('purchase.order.line', {
234
432
  });
235
433
  export const purchaseShutro = defineModule({
236
434
  name: 'purchase',
237
- version: '0.3.0',
435
+ version: '0.4.0',
238
436
  migrations: [
437
+ {
438
+ version: '0.4.0',
439
+ description: 'Vendor prices: existing lines keep the price they have, as typed in (no order is repriced)',
440
+ up: async (ctx) => {
441
+ await ctx.sql `UPDATE purchase_order_line SET manual_price = price_unit WHERE manual_price IS NULL`;
442
+ await ctx.sql `UPDATE purchase_order_line SET price_reason = 'Typed in.' WHERE price_reason IS NULL`;
443
+ },
444
+ },
239
445
  {
240
446
  version: '0.2.0',
241
447
  description: 'Several taxes per line: the single tax of each line becomes its first',
@@ -247,10 +453,15 @@ export const purchaseShutro = defineModule({
247
453
  ],
248
454
  depends: [contactsShutro, productShutro, messagingShutro, permissionsShutro],
249
455
  groups: [
456
+ orm.defineGroup({
457
+ code: 'purchase.requester',
458
+ label: 'Purchase requester',
459
+ implies: ['product.user', 'messaging.user'],
460
+ }),
250
461
  orm.defineGroup({
251
462
  code: 'purchase.user',
252
463
  label: 'Buyer',
253
- implies: ['contacts.user', 'product.user', 'messaging.user'],
464
+ implies: ['purchase.requester', 'contacts.user', 'product.user', 'messaging.user'],
254
465
  }),
255
466
  orm.defineGroup({
256
467
  code: 'purchase.manager',
@@ -263,6 +474,18 @@ export const purchaseShutro = defineModule({
263
474
  implies: ['purchase.manager'],
264
475
  }),
265
476
  ],
477
+ permissions: [
478
+ orm.definePermission({
479
+ code: 'purchase.request_buy',
480
+ label: 'Turn purchase requests into requests for quotation',
481
+ groups: ['purchase.user'],
482
+ }),
483
+ orm.definePermission({
484
+ code: 'purchase.compare_approve',
485
+ label: 'Approve technical comparisons',
486
+ groups: ['purchase.manager'],
487
+ }),
488
+ ],
266
489
  sequences: [
267
490
  orm.defineSequence({
268
491
  code: 'purchase.order',
@@ -270,7 +493,68 @@ export const purchaseShutro = defineModule({
270
493
  padding: 5,
271
494
  reset: 'yearly',
272
495
  }),
496
+ orm.defineSequence({
497
+ code: 'purchase.request',
498
+ prefix: 'PR/{year}/',
499
+ padding: 5,
500
+ reset: 'yearly',
501
+ }),
502
+ orm.defineSequence({
503
+ code: 'purchase.tender',
504
+ prefix: 'RFQ/{year}/',
505
+ padding: 5,
506
+ reset: 'yearly',
507
+ }),
508
+ orm.defineSequence({
509
+ code: 'purchase.tender.response',
510
+ prefix: 'RSP/{year}/',
511
+ padding: 5,
512
+ reset: 'yearly',
513
+ }),
514
+ orm.defineSequence({
515
+ code: 'purchase.comparison',
516
+ prefix: 'CS/{year}/',
517
+ padding: 5,
518
+ reset: 'yearly',
519
+ }),
520
+ orm.defineSequence({
521
+ code: 'purchase.technical.comparison',
522
+ prefix: 'TCS/{year}/',
523
+ padding: 5,
524
+ reset: 'yearly',
525
+ }),
526
+ orm.defineSequence({
527
+ code: 'purchase.agreement',
528
+ prefix: 'PA/{year}/',
529
+ padding: 5,
530
+ reset: 'yearly',
531
+ }),
532
+ orm.defineSequence({
533
+ code: 'purchase.work.acceptance',
534
+ prefix: 'WA/{year}/',
535
+ padding: 5,
536
+ reset: 'yearly',
537
+ }),
538
+ ],
539
+ models: [
540
+ PurchaseOrder,
541
+ PurchaseOrderLine,
542
+ ProductVendorPrice,
543
+ PurchaseRequest,
544
+ PurchaseRequestLine,
545
+ PurchaseTender,
546
+ PurchaseTenderLine,
547
+ PurchaseTenderResponse,
548
+ PurchaseTenderResponseLine,
549
+ PurchaseTechnicalComparison,
550
+ PurchaseTechnicalComparisonLine,
551
+ PurchaseComparison,
552
+ PurchaseComparisonLine,
553
+ PurchaseAgreement,
554
+ PurchaseAgreementLine,
555
+ PurchaseWorkAcceptance,
556
+ PurchaseWorkAcceptanceLine,
557
+ PurchaseVendorRequest,
273
558
  ],
274
- models: [PurchaseOrder, PurchaseOrderLine],
275
559
  extensions: [CompanyPurchase],
276
560
  });