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
@@ -8,6 +8,7 @@ import { accountingShutro } from '../accounting/index.js';
8
8
  import { contactsShutro } from '../contacts/index.js';
9
9
  import { messagingShutro } from '../messaging/index.js';
10
10
  import { productShutro } from '../product/index.js';
11
+ import { emitting } from '../server/index.js';
11
12
  import { orm } from '../server/orm.js';
12
13
  import { check, compute, defineModel, defineModule, f, method, records, } from './.kosh/bindings.js';
13
14
  import { bookSessions } from './accounting.js';
@@ -30,6 +31,12 @@ export const PosShop = defineModel('pos.shop', {
30
31
  archivable: true,
31
32
  access: { 'pos.cashier': ['read'], 'pos.manager': [...ALL, 'export'] },
32
33
  fields: {
34
+ /** Its prices (RFC 0028 §3.1): the shop's price list, else list prices; a customer's own list wins. */
35
+ pricelist: f.many2one('product.pricelist', {
36
+ ondelete: 'restrict',
37
+ label: 'Price list',
38
+ help: 'The till prices products by this list; a sale for a customer with a list of their own uses theirs.',
39
+ }),
33
40
  name: f.char({ required: true }),
34
41
  /** Prices on the register include the taxes (a shop) or not (a wholesale counter). */
35
42
  pricesIncludeTax: f.boolean({ default: true, label: 'Prices include taxes' }),
@@ -44,6 +51,16 @@ export const PosShop = defineModel('pos.shop', {
44
51
  label: 'Cash difference account',
45
52
  }),
46
53
  },
54
+ methods: {
55
+ /**
56
+ * The key of the receipt template each of these shops prints (`<module>.<key>`). The Counter's own here; a
57
+ * localization overrides it (`l10n_bd_pos`: the Mushak 6.3 receipt for shops that issue it).
58
+ */
59
+ receiptTemplate: method('pos.shop', async function () {
60
+ const shops = this;
61
+ return new Map(shops.ids.map((id) => [id, 'pos.receipt']));
62
+ }),
63
+ },
47
64
  });
48
65
  /** How a shop takes money: cash, a card terminal, mobile money, a transfer; each to its journal. */
49
66
  export const PosPaymentMethod = defineModel('pos.payment.method', {
@@ -55,7 +72,11 @@ export const PosPaymentMethod = defineModel('pos.payment.method', {
55
72
  fields: {
56
73
  shop: f.many2one('pos.shop', { required: true, ondelete: 'cascade' }),
57
74
  name: f.char({ required: true }),
58
- kind: f.selection({ cash: 'Cash', card: 'Card', mobile: 'Mobile money', transfer: 'Bank transfer' }, { required: true, default: 'cash' }),
75
+ kind: f.selection({ cash: 'Cash', card: 'Card', mobile: 'Mobile money', transfer: 'Bank transfer' }, {
76
+ required: true,
77
+ default: 'cash',
78
+ help: 'The kind of payment; only cash payments count toward the cash expected in the drawer.',
79
+ }),
59
80
  journal: f.many2one('account.journal', { ondelete: 'restrict' }),
60
81
  sequence: f.integer({ required: true, default: 10 }),
61
82
  },
@@ -86,6 +107,7 @@ export const PosSession = defineModel('pos.session', {
86
107
  scale: 2,
87
108
  store: true,
88
109
  label: 'Cash expected',
110
+ help: 'The opening cash plus the cash taken on paid sales, less the change given back.',
89
111
  ...compute('pos.session', 'expectedCash', [
90
112
  'openingCash',
91
113
  'orders.state',
@@ -112,6 +134,7 @@ export const PosSession = defineModel('pos.session', {
112
134
  scale: 2,
113
135
  store: true,
114
136
  label: 'Difference',
137
+ help: 'The cash counted at closing less the cash expected; negative when cash is missing.',
115
138
  ...compute('pos.session', 'closingDifference', ['closingCash', 'expectedCash'], (sessions) => {
116
139
  for (const s of sessions)
117
140
  s.closingDifference =
@@ -134,6 +157,7 @@ export const PosSession = defineModel('pos.session', {
134
157
  scale: 2,
135
158
  store: true,
136
159
  label: 'Sold',
160
+ help: 'The total of the session’s paid sales.',
137
161
  ...compute('pos.session', 'total', ['orders.state', 'orders.total'], (sessions) => {
138
162
  for (const s of sessions)
139
163
  s.total = [...s.orders]
@@ -142,10 +166,11 @@ export const PosSession = defineModel('pos.session', {
142
166
  }),
143
167
  }),
144
168
  state: f.state({
169
+ help: 'Open while the cashier sells; closed once the cash in the drawer is counted.',
145
170
  states: { open: 'Open', closed: 'Closed' },
146
171
  initial: 'open',
147
172
  transitions: {
148
- close: {
173
+ close: emitting('pos.session.closed', {
149
174
  from: ['open'],
150
175
  to: 'closed',
151
176
  guard: records('pos.session', async (sessions) => sessions.filter((s) => s.closingCash === null)),
@@ -163,7 +188,7 @@ export const PosSession = defineModel('pos.session', {
163
188
  await env.asSuperuser({ reason: 'counter session books' }, (su) => bookSessions(su, sessions.ids));
164
189
  await env.model('pos.session').browse(sessions.ids).closed();
165
190
  }),
166
- },
191
+ }),
167
192
  },
168
193
  }),
169
194
  },
@@ -256,6 +281,7 @@ export const PosOrder = defineModel('pos.order', {
256
281
  scale: 2,
257
282
  store: true,
258
283
  label: 'Untaxed',
284
+ help: 'The sum of the lines’ amounts before taxes.',
259
285
  ...compute('pos.order', 'amountUntaxed', ['lines.subtotal'], (orders) => {
260
286
  for (const o of orders)
261
287
  o.amountUntaxed = [...o.lines].reduce((sum, l) => sum.plus(l.subtotal ?? ZERO), ZERO);
@@ -265,6 +291,7 @@ export const PosOrder = defineModel('pos.order', {
265
291
  scale: 2,
266
292
  store: true,
267
293
  label: 'Taxes',
294
+ help: 'The sum of the taxes on the lines.',
268
295
  ...compute('pos.order', 'amountTax', ['lines.taxAmount'], (orders) => {
269
296
  for (const o of orders)
270
297
  o.amountTax = [...o.lines].reduce((sum, l) => sum.plus(l.taxAmount ?? ZERO), ZERO);
@@ -274,6 +301,7 @@ export const PosOrder = defineModel('pos.order', {
274
301
  scale: 2,
275
302
  store: true,
276
303
  label: 'Total',
304
+ help: 'What the customer pays: the untaxed amount plus the taxes.',
277
305
  ...compute('pos.order', 'total', ['amountUntaxed', 'amountTax'], (orders) => {
278
306
  for (const o of orders)
279
307
  o.total = (o.amountUntaxed ?? ZERO).plus(o.amountTax ?? ZERO);
@@ -283,6 +311,7 @@ export const PosOrder = defineModel('pos.order', {
283
311
  scale: 2,
284
312
  store: true,
285
313
  label: 'Paid',
314
+ help: 'The sum of the payments received for the sale.',
286
315
  ...compute('pos.order', 'amountPaid', ['payments.amount'], (orders) => {
287
316
  for (const o of orders)
288
317
  o.amountPaid = [...o.payments].reduce((sum, p) => sum.plus(p.amount), ZERO);
@@ -293,6 +322,7 @@ export const PosOrder = defineModel('pos.order', {
293
322
  scale: 2,
294
323
  store: true,
295
324
  label: 'Change',
325
+ help: 'What the cashier gives back when the payments exceed the total.',
296
326
  ...compute('pos.order', 'change', ['amountPaid', 'total'], (orders) => {
297
327
  for (const o of orders) {
298
328
  const over = (o.amountPaid ?? ZERO).minus(o.total ?? ZERO);
@@ -301,6 +331,7 @@ export const PosOrder = defineModel('pos.order', {
301
331
  }),
302
332
  }),
303
333
  state: f.state({
334
+ help: 'Being paid while the sale is at the register; paid once the payments cover the total, or voided when it is abandoned.',
304
335
  states: { draft: 'Being paid', paid: 'Paid', void: 'Voided' },
305
336
  initial: 'draft',
306
337
  transitions: {
@@ -363,8 +394,20 @@ export const PosOrderLine = defineModel('pos.order.line', {
363
394
  priceUnit: f.decimal({ scale: 2, required: true, default: '0', label: 'Unit price' }),
364
395
  discount: f.decimal({ scale: 2, required: true, default: '0', label: 'Discount %' }),
365
396
  taxes: f.many2many('account.tax', { relation: 'pos_line_tax_rel' }),
366
- subtotal: f.decimal({ scale: 2, store: true, label: 'Untaxed', ...lineAmounts }),
367
- taxAmount: f.decimal({ scale: 2, store: true, label: 'Tax', ...lineAmounts }),
397
+ subtotal: f.decimal({
398
+ scale: 2,
399
+ store: true,
400
+ label: 'Untaxed',
401
+ help: 'The line’s amount before taxes, after the discount.',
402
+ ...lineAmounts,
403
+ }),
404
+ taxAmount: f.decimal({
405
+ scale: 2,
406
+ store: true,
407
+ label: 'Tax',
408
+ help: 'The taxes on this line, after the discount.',
409
+ ...lineAmounts,
410
+ }),
368
411
  },
369
412
  });
370
413
  export const PosOrderPayment = defineModel('pos.order.payment', {
@@ -380,6 +423,7 @@ export const PosOrderPayment = defineModel('pos.order.payment', {
380
423
  /** The method's kind, kept on the payment so a session's cash adds up without a second hop. */
381
424
  kind: f.selection({ cash: 'Cash', card: 'Card', mobile: 'Mobile money', transfer: 'Bank transfer' }, {
382
425
  store: true,
426
+ help: 'The kind of the payment’s method, copied from the method.',
383
427
  ...compute('pos.order.payment', 'kind', ['method.kind'], (payments) => {
384
428
  for (const p of payments)
385
429
  p.kind = p.method.kind;
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import { mailerFromEnv } from '../mail/index.js';
14
14
  import { messengerFromEnv } from '../notify/index.js';
15
+ import { priceFor } from '../product/index.js';
15
16
  import { documentFields, renderDocument } from '../reporting/index.js';
16
17
  import { HttpProblem, publicApiModels } from '../server/index.js';
17
18
  import { orm } from '../server/orm.js';
@@ -28,6 +29,31 @@ export function registerCounterRoutes(context, options = {}) {
28
29
  const messenger = 'messenger' in options ? options.messenger : messengerFromEnv();
29
30
  const models = publicApiModels(context.registry);
30
31
  const fields = documentFields(models);
32
+ /** The receipt template of a sale: its shop's (`pos.shop.receiptTemplate()`), as the cashier may read it. */
33
+ const receiptTemplateOf = async (env, id) => {
34
+ const [order] = await env
35
+ .model('pos.order')
36
+ .browse([id])
37
+ .load({ session: ['shop'] });
38
+ const shop = order?.session?.shop?.id;
39
+ const keys = shop === undefined
40
+ ? new Map()
41
+ : await env.model('pos.shop').browse([shop]).receiptTemplate();
42
+ const key = (shop === undefined ? undefined : keys.get(shop)) ?? 'pos.receipt';
43
+ const find = async (k) => (await (await env.model('report.template').search({ where: { key: k }, limit: 1 })).load([])).read(['id', 'name', 'layout', 'scope'])[0];
44
+ const template = (await find(key)) ?? (await find('pos.receipt'));
45
+ if (template === undefined)
46
+ throw new HttpProblem(409, 'no-template', 'No receipt template', 'Run the apps\u2019 defaults.');
47
+ return template;
48
+ };
49
+ // `GET /api/v1/counter/orders/:id/receipt-template`: the template its receipt prints with (the shop decides).
50
+ app.get('/api/v1/counter/orders/:id/receipt-template', async (request) => {
51
+ const id = idOf(request.params.id, 'id');
52
+ return request.env(async (raw) => {
53
+ const template = await receiptTemplateOf(raw, id);
54
+ return { id: template['id'], name: template['name'] };
55
+ });
56
+ });
31
57
  // `POST /api/v1/counter/orders/:id/receipt` `{ email?, phone? }`: the receipt sent — the document by email,
32
58
  // a summary by text; what was sent is said back.
33
59
  app.post('/api/v1/counter/orders/:id/receipt', async (request) => {
@@ -47,9 +73,7 @@ export function registerCounterRoutes(context, options = {}) {
47
73
  if (email !== '') {
48
74
  if (mailer === undefined)
49
75
  throw new HttpProblem(409, 'no-mailer', 'No email set up', 'Set SMTP_URL to send receipts by email.');
50
- const [template] = (await (await env.model('report.template').search({ where: { key: 'pos.receipt' }, limit: 1 })).load([])).read(['id', 'name', 'layout', 'scope']);
51
- if (template === undefined)
52
- throw new HttpProblem(409, 'no-template', 'No receipt template', 'Run the apps\u2019 defaults.');
76
+ const template = await receiptTemplateOf(env, id);
53
77
  const rendered = await renderDocument(env, model, template, fields, { ids: [id] }, 'html');
54
78
  await mailer.send({
55
79
  to: email,
@@ -70,29 +94,49 @@ export function registerCounterRoutes(context, options = {}) {
70
94
  });
71
95
  app.get('/api/v1/counter/shops', async (request) => request.env(async (raw) => {
72
96
  const env = raw;
73
- const shops = await (await env.model('pos.shop').search({})).load({ methods: true });
97
+ const shops = await (await env.model('pos.shop').search({})).load({
98
+ methods: true,
99
+ pricelist: true,
100
+ });
74
101
  return {
75
102
  shops: shops.map((s) => ({
76
103
  id: s.id,
77
104
  name: s.name,
78
105
  pricesIncludeTax: s.pricesIncludeTax,
79
106
  receiptFooter: s.receiptFooter,
107
+ pricelist: s.pricelist?.id ?? null,
80
108
  methods: [...s.methods].map((m) => ({ id: m.id, name: m.name, kind: m.kind })),
81
109
  })),
82
110
  };
83
111
  }));
112
+ // `GET /api/v1/counter/catalogue?shop=`: the products on sale, at the shop's prices (its price list).
84
113
  app.get('/api/v1/counter/catalogue', async (request) => request.env(async (raw) => {
85
114
  const env = raw;
115
+ const shopId = Number(request.query?.shop);
116
+ const [shop] = Number.isSafeInteger(shopId) && shopId > 0
117
+ ? await env
118
+ .model('pos.shop')
119
+ .browse([shopId])
120
+ .load({ pricelist: true })
121
+ : [];
122
+ const list = shop?.pricelist?.id ?? null;
123
+ const today = env.today();
86
124
  const products = await (await env
87
125
  .model('product.product')
88
126
  .search({ where: { saleOk: true }, order: ['name asc'], limit: 2000 })).load({ taxes: true, category: true, uom: true, image: true });
127
+ const prices = new Map();
128
+ if (list !== null)
129
+ for (const p of products)
130
+ prices.set(p.id, (await priceFor(env, list, p.id, '1', today)).price);
89
131
  return {
90
132
  products: products.map((p) => ({
91
133
  id: p.id,
92
134
  name: p.name,
93
135
  code: p.code,
94
136
  barcode: p.barcode,
95
- price: p.listPrice.toString(),
137
+ price: (list === null
138
+ ? p.listPrice
139
+ : (prices.get(p.id) ?? p.listPrice)).toString(),
96
140
  category: p.category?.name ?? null,
97
141
  uom: p.uom?.name ?? null,
98
142
  image: p.image?.id ?? null,
@@ -157,9 +201,35 @@ export function registerCounterRoutes(context, options = {}) {
157
201
  const [current] = await env
158
202
  .model('pos.session')
159
203
  .browse([session])
160
- .load({ shop: true });
204
+ .load({ shop: { pricelist: true } });
161
205
  if (current === undefined)
162
206
  throw new HttpProblem(404, 'missing-record', 'Not found', 'No such session.');
207
+ // The customer's own price list, else the shop's (RFC 0028 §3.1).
208
+ const customer = input.partner === undefined || input.partner === null
209
+ ? null
210
+ : idOf(input.partner, 'partner');
211
+ // A customer's price list is Sales' field: read when Sales is installed.
212
+ let own = null;
213
+ if (customer !== null)
214
+ try {
215
+ const partners = env.model('res.partner');
216
+ const [row] = (await partners.browse([customer]).load(['pricelist'])).read([
217
+ 'pricelist',
218
+ ]);
219
+ own = typeof row?.['pricelist'] === 'number' ? row['pricelist'] : null;
220
+ }
221
+ catch {
222
+ own = null; // Sales is not installed: no customer lists
223
+ }
224
+ const list = own ?? current.shop.pricelist?.id ?? null;
225
+ const today = env.today();
226
+ const listed = new Map();
227
+ for (const l of input.lines)
228
+ if (text(l.priceUnit) === '' && list !== null) {
229
+ const quantity = text(l.quantity) || '1';
230
+ listed.set(`${String(l.product)}:${quantity}`, (await priceFor(env, list, idOf(l.product, 'product'), quantity, today))
231
+ .price);
232
+ }
163
233
  const products = await env
164
234
  .model('product.product')
165
235
  .browse(input.lines.map((l) => idOf(l.product, 'product')))
@@ -183,7 +253,10 @@ export function registerCounterRoutes(context, options = {}) {
183
253
  product: product.id,
184
254
  name: product.name,
185
255
  quantity: orm.toDecimal(text(l.quantity) || '1'),
186
- priceUnit: orm.toDecimal(text(l.priceUnit) || product.listPrice.toString()),
256
+ priceUnit: text(l.priceUnit) !== ''
257
+ ? orm.toDecimal(text(l.priceUnit))
258
+ : (listed.get(`${String(l.product)}:${text(l.quantity) || '1'}`) ??
259
+ product.listPrice),
187
260
  discount: orm.toDecimal(text(l.discount) || '0'),
188
261
  taxes: { set: [...product.taxes].map((t) => t.id) },
189
262
  };
@@ -204,11 +204,8 @@ export function Register({ api }) {
204
204
  });
205
205
  const printReceipt = async (sale) => {
206
206
  try {
207
- const { templates } = await api.call('GET', '/api/v1/models/pos.order/documents');
208
- const template = templates.find((tpl) => tpl.name === 'Receipt') ??
209
- templates.find((tpl) => tpl.scope === 'record');
210
- if (template === undefined)
211
- throw new Error(t('noReceiptTemplate'));
207
+ // The shop's receipt (a Mushak 6.3 receipt where the shop issues them).
208
+ const template = await api.call('GET', `/api/v1/counter/orders/${sale.id}/receipt-template`);
212
209
  const file = await api.download(`/api/v1/models/pos.order/documents/${template.id}`, {
213
210
  ids: [sale.id],
214
211
  });
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: d17d968a7b529306
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: af4eb6b5269b81cc
2
2
  // Bindings of module `pos_stock`: 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';