shutro-erp 0.3.5 → 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 (768) hide show
  1. package/dist/account_asset/.kosh/bindings.js +15 -0
  2. package/dist/{mrp_account → account_asset}/.kosh/schema.d.ts +785 -614
  3. package/dist/account_asset/board.d.ts +61 -0
  4. package/dist/account_asset/board.js +86 -0
  5. package/dist/account_asset/books.d.ts +42 -0
  6. package/dist/account_asset/books.js +398 -0
  7. package/dist/account_asset/demo.d.ts +7 -0
  8. package/dist/account_asset/demo.js +72 -0
  9. package/dist/account_asset/i18n/bn.d.ts +2 -0
  10. package/dist/account_asset/i18n/bn.js +97 -0
  11. package/dist/account_asset/index.d.ts +9 -0
  12. package/dist/account_asset/index.js +337 -0
  13. package/dist/account_asset/module.d.ts +11076 -0
  14. package/dist/account_asset/module.js +230 -0
  15. package/dist/account_budget/.kosh/bindings.js +15 -0
  16. package/dist/account_budget/.kosh/schema.d.ts +2841 -0
  17. package/dist/account_budget/budget.d.ts +5 -0
  18. package/dist/account_budget/budget.js +142 -0
  19. package/dist/account_budget/demo.d.ts +6 -0
  20. package/dist/account_budget/demo.js +30 -0
  21. package/dist/account_budget/i18n/bn.d.ts +2 -0
  22. package/dist/account_budget/i18n/bn.js +63 -0
  23. package/dist/account_budget/index.d.ts +4 -0
  24. package/dist/account_budget/index.js +237 -0
  25. package/dist/account_budget/module.d.ts +27289 -0
  26. package/dist/account_budget/module.js +182 -0
  27. package/dist/account_portal/.kosh/bindings.js +1 -1
  28. package/dist/account_portal/.kosh/schema.d.ts +651 -10
  29. package/dist/account_portal/i18n/bn.d.ts +2 -0
  30. package/dist/account_portal/i18n/bn.js +6 -0
  31. package/dist/account_portal/index.js +2 -0
  32. package/dist/account_portal/module.d.ts +5212 -1592
  33. package/dist/accounting/.kosh/bindings.js +1 -1
  34. package/dist/accounting/.kosh/schema.d.ts +651 -10
  35. package/dist/accounting/closing.js +1 -0
  36. package/dist/accounting/fiscal.d.ts +578 -0
  37. package/dist/accounting/fiscal.js +401 -0
  38. package/dist/accounting/followups.d.ts +618 -0
  39. package/dist/accounting/followups.js +420 -0
  40. package/dist/accounting/i18n/bn.d.ts +2 -0
  41. package/dist/accounting/i18n/bn.js +425 -0
  42. package/dist/accounting/index.d.ts +3 -1
  43. package/dist/accounting/index.js +780 -5
  44. package/dist/accounting/module.d.ts +5386 -1543
  45. package/dist/accounting/module.js +155 -18
  46. package/dist/accounting/statements.d.ts +878 -0
  47. package/dist/accounting/statements.js +728 -0
  48. package/dist/accounting/web/BankReconcilePage.d.ts +9 -0
  49. package/dist/accounting/web/BankReconcilePage.js +138 -0
  50. package/dist/accounting/web/FollowupsPage.d.ts +8 -0
  51. package/dist/accounting/web/FollowupsPage.js +54 -0
  52. package/dist/accounting/web/PostingPreview.d.ts +8 -0
  53. package/dist/accounting/web/PostingPreview.js +26 -0
  54. package/dist/accounting/web/index.d.ts +3 -0
  55. package/dist/accounting/web/index.js +9 -0
  56. package/dist/accounting/web/messages.js +140 -0
  57. package/dist/approvals/.kosh/bindings.d.ts +22 -0
  58. package/dist/approvals/.kosh/bindings.js +15 -0
  59. package/dist/approvals/.kosh/schema.d.ts +879 -0
  60. package/dist/approvals/demo.d.ts +7 -0
  61. package/dist/approvals/demo.js +41 -0
  62. package/dist/approvals/i18n/bn.d.ts +2 -0
  63. package/dist/approvals/i18n/bn.js +133 -0
  64. package/dist/approvals/index.d.ts +36 -0
  65. package/dist/approvals/index.js +772 -0
  66. package/dist/approvals/mails.d.ts +30 -0
  67. package/dist/approvals/mails.js +87 -0
  68. package/dist/approvals/module.d.ts +2930 -0
  69. package/dist/approvals/module.js +473 -0
  70. package/dist/approvals/web/Config.d.ts +12 -0
  71. package/dist/approvals/web/Config.js +60 -0
  72. package/dist/approvals/web/History.d.ts +4 -0
  73. package/dist/approvals/web/History.js +13 -0
  74. package/dist/approvals/web/Inbox.d.ts +9 -0
  75. package/dist/approvals/web/Inbox.js +114 -0
  76. package/dist/approvals/web/Matrix.d.ts +9 -0
  77. package/dist/approvals/web/Matrix.js +26 -0
  78. package/dist/approvals/web/Mine.d.ts +7 -0
  79. package/dist/approvals/web/Mine.js +27 -0
  80. package/dist/approvals/web/index.d.ts +15 -0
  81. package/dist/approvals/web/index.js +29 -0
  82. package/dist/approvals/web/messages.d.ts +2 -0
  83. package/dist/approvals/web/messages.js +211 -0
  84. package/dist/approvals/web/shared.d.ts +59 -0
  85. package/dist/approvals/web/shared.js +46 -0
  86. package/dist/approvals_purchase/.kosh/bindings.d.ts +22 -0
  87. package/dist/approvals_purchase/.kosh/bindings.js +15 -0
  88. package/dist/approvals_purchase/.kosh/schema.d.ts +1997 -0
  89. package/dist/approvals_purchase/i18n/bn.d.ts +2 -0
  90. package/dist/approvals_purchase/i18n/bn.js +5 -0
  91. package/dist/approvals_purchase/index.d.ts +3 -0
  92. package/dist/approvals_purchase/index.js +47 -0
  93. package/dist/approvals_purchase/module.d.ts +12670 -0
  94. package/dist/approvals_purchase/module.js +84 -0
  95. package/dist/attendance/.kosh/bindings.d.ts +22 -0
  96. package/dist/attendance/.kosh/bindings.js +15 -0
  97. package/dist/attendance/.kosh/schema.d.ts +1106 -0
  98. package/dist/attendance/days.d.ts +96 -0
  99. package/dist/attendance/days.js +430 -0
  100. package/dist/attendance/demo.d.ts +7 -0
  101. package/dist/attendance/demo.js +58 -0
  102. package/dist/attendance/i18n/bn.d.ts +2 -0
  103. package/dist/attendance/i18n/bn.js +147 -0
  104. package/dist/attendance/index.d.ts +4 -0
  105. package/dist/attendance/index.js +515 -0
  106. package/dist/attendance/module.d.ts +4413 -0
  107. package/dist/attendance/module.js +412 -0
  108. package/dist/attendance/routes.d.ts +16 -0
  109. package/dist/attendance/routes.js +266 -0
  110. package/dist/attendance/web/Check.d.ts +8 -0
  111. package/dist/attendance/web/Check.js +40 -0
  112. package/dist/attendance/web/Kiosk.d.ts +8 -0
  113. package/dist/attendance/web/Kiosk.js +62 -0
  114. package/dist/attendance/web/PinButton.d.ts +7 -0
  115. package/dist/attendance/web/PinButton.js +29 -0
  116. package/dist/attendance/web/index.d.ts +13 -0
  117. package/dist/attendance/web/index.js +22 -0
  118. package/dist/attendance/web/messages.d.ts +2 -0
  119. package/dist/attendance/web/messages.js +61 -0
  120. package/dist/automation/engine.js +1 -1
  121. package/dist/calendar/.kosh/bindings.js +1 -1
  122. package/dist/calendar/.kosh/schema.d.ts +2 -1
  123. package/dist/calendar/i18n/bn.d.ts +2 -0
  124. package/dist/calendar/i18n/bn.js +80 -0
  125. package/dist/calendar/index.js +77 -0
  126. package/dist/calendar/module.d.ts +26 -0
  127. package/dist/calendar/module.js +14 -4
  128. package/dist/cli/apps.js +25 -5
  129. package/dist/cli/init.js +46 -4
  130. package/dist/cli/templates.d.ts +1 -1
  131. package/dist/cli/templates.js +123 -5
  132. package/dist/contacts/.kosh/bindings.js +1 -1
  133. package/dist/contacts/.kosh/schema.d.ts +2 -1
  134. package/dist/contacts/i18n/bn.d.ts +2 -0
  135. package/dist/contacts/i18n/bn.js +67 -0
  136. package/dist/contacts/index.js +3 -0
  137. package/dist/contacts/module.d.ts +42 -0
  138. package/dist/contacts/module.js +19 -3
  139. package/dist/crm/.kosh/bindings.js +1 -1
  140. package/dist/crm/.kosh/schema.d.ts +3 -1
  141. package/dist/crm/i18n/bn.d.ts +2 -0
  142. package/dist/crm/i18n/bn.js +80 -0
  143. package/dist/crm/index.js +22 -0
  144. package/dist/crm/module.d.ts +22 -0
  145. package/dist/crm/module.js +6 -3
  146. package/dist/documents/.kosh/bindings.d.ts +22 -0
  147. package/dist/documents/.kosh/bindings.js +15 -0
  148. package/dist/documents/.kosh/schema.d.ts +863 -0
  149. package/dist/documents/demo.d.ts +6 -0
  150. package/dist/documents/demo.js +22 -0
  151. package/dist/documents/documents.d.ts +98 -0
  152. package/dist/documents/documents.js +318 -0
  153. package/dist/documents/i18n/bn.d.ts +2 -0
  154. package/dist/documents/i18n/bn.js +83 -0
  155. package/dist/documents/index.d.ts +30 -0
  156. package/dist/documents/index.js +569 -0
  157. package/dist/documents/module.d.ts +2801 -0
  158. package/dist/documents/module.js +215 -0
  159. package/dist/documents/web/Versions.d.ts +7 -0
  160. package/dist/documents/web/Versions.js +45 -0
  161. package/dist/documents/web/index.d.ts +11 -0
  162. package/dist/documents/web/index.js +16 -0
  163. package/dist/documents/web/messages.d.ts +2 -0
  164. package/dist/documents/web/messages.js +21 -0
  165. package/dist/event/.kosh/bindings.js +1 -1
  166. package/dist/event/.kosh/schema.d.ts +2 -1
  167. package/dist/event/i18n/bn.d.ts +2 -0
  168. package/dist/event/i18n/bn.js +101 -0
  169. package/dist/event/index.js +66 -0
  170. package/dist/event/module.d.ts +20 -0
  171. package/dist/event/module.js +8 -1
  172. package/dist/event_account/.kosh/bindings.js +1 -1
  173. package/dist/event_account/.kosh/schema.d.ts +651 -10
  174. package/dist/event_account/i18n/bn.d.ts +2 -0
  175. package/dist/event_account/i18n/bn.js +5 -0
  176. package/dist/event_account/index.js +2 -0
  177. package/dist/event_account/module.d.ts +5133 -1513
  178. package/dist/expense/.kosh/bindings.d.ts +22 -0
  179. package/dist/expense/.kosh/bindings.js +15 -0
  180. package/dist/expense/.kosh/schema.d.ts +1620 -0
  181. package/dist/expense/demo.d.ts +7 -0
  182. package/dist/expense/demo.js +69 -0
  183. package/dist/expense/i18n/bn.d.ts +2 -0
  184. package/dist/expense/i18n/bn.js +155 -0
  185. package/dist/expense/index.d.ts +3 -0
  186. package/dist/expense/index.js +502 -0
  187. package/dist/expense/module.d.ts +6768 -0
  188. package/dist/expense/module.js +649 -0
  189. package/dist/expense_account/.kosh/bindings.d.ts +22 -0
  190. package/dist/expense_account/.kosh/bindings.js +15 -0
  191. package/dist/expense_account/.kosh/schema.d.ts +2515 -0
  192. package/dist/expense_account/i18n/bn.d.ts +2 -0
  193. package/dist/expense_account/i18n/bn.js +15 -0
  194. package/dist/expense_account/index.d.ts +3 -0
  195. package/dist/expense_account/index.js +76 -0
  196. package/dist/expense_account/module.d.ts +14628 -0
  197. package/dist/expense_account/module.js +318 -0
  198. package/dist/helpdesk/.kosh/bindings.d.ts +22 -0
  199. package/dist/helpdesk/.kosh/bindings.js +15 -0
  200. package/dist/helpdesk/.kosh/schema.d.ts +886 -0
  201. package/dist/helpdesk/demo.d.ts +7 -0
  202. package/dist/helpdesk/demo.js +65 -0
  203. package/dist/helpdesk/hours.d.ts +17 -0
  204. package/dist/helpdesk/hours.js +94 -0
  205. package/dist/helpdesk/i18n/bn.d.ts +2 -0
  206. package/dist/helpdesk/i18n/bn.js +127 -0
  207. package/dist/helpdesk/index.d.ts +10 -0
  208. package/dist/helpdesk/index.js +463 -0
  209. package/dist/helpdesk/module.d.ts +2960 -0
  210. package/dist/helpdesk/module.js +326 -0
  211. package/dist/helpdesk/routes.d.ts +12 -0
  212. package/dist/helpdesk/routes.js +132 -0
  213. package/dist/helpdesk/sla.d.ts +37 -0
  214. package/dist/helpdesk/sla.js +226 -0
  215. package/dist/hr/.kosh/bindings.js +1 -1
  216. package/dist/hr/.kosh/schema.d.ts +59 -1
  217. package/dist/hr/demo.js +11 -1
  218. package/dist/hr/i18n/bn.d.ts +2 -0
  219. package/dist/hr/i18n/bn.js +126 -0
  220. package/dist/hr/index.d.ts +1 -1
  221. package/dist/hr/index.js +158 -12
  222. package/dist/hr/module.d.ts +932 -59
  223. package/dist/hr/module.js +114 -17
  224. package/dist/indent/.kosh/bindings.d.ts +22 -0
  225. package/dist/indent/.kosh/bindings.js +15 -0
  226. package/dist/indent/.kosh/schema.d.ts +2084 -0
  227. package/dist/indent/demo.d.ts +7 -0
  228. package/dist/indent/demo.js +48 -0
  229. package/dist/indent/i18n/bn.d.ts +2 -0
  230. package/dist/indent/i18n/bn.js +143 -0
  231. package/dist/indent/index.d.ts +3 -0
  232. package/dist/indent/index.js +450 -0
  233. package/dist/indent/module.d.ts +13424 -0
  234. package/dist/indent/module.js +792 -0
  235. package/dist/indent_purchase/.kosh/bindings.d.ts +22 -0
  236. package/dist/indent_purchase/.kosh/bindings.js +15 -0
  237. package/dist/indent_purchase/.kosh/schema.d.ts +2710 -0
  238. package/dist/indent_purchase/i18n/bn.d.ts +2 -0
  239. package/dist/indent_purchase/i18n/bn.js +13 -0
  240. package/dist/indent_purchase/index.d.ts +3 -0
  241. package/dist/indent_purchase/index.js +61 -0
  242. package/dist/indent_purchase/module.d.ts +27950 -0
  243. package/dist/indent_purchase/module.js +163 -0
  244. package/dist/l10n_bd/.kosh/bindings.js +1 -1
  245. package/dist/l10n_bd/.kosh/schema.d.ts +651 -10
  246. package/dist/l10n_bd/i18n/bn.d.ts +2 -0
  247. package/dist/l10n_bd/i18n/bn.js +69 -0
  248. package/dist/l10n_bd/index.js +2 -0
  249. package/dist/l10n_bd/module.d.ts +5212 -1592
  250. package/dist/l10n_bd_payroll/.kosh/bindings.d.ts +22 -0
  251. package/dist/l10n_bd_payroll/.kosh/bindings.js +15 -0
  252. package/dist/l10n_bd_payroll/.kosh/schema.d.ts +2891 -0
  253. package/dist/l10n_bd_payroll/data.d.ts +47 -0
  254. package/dist/l10n_bd_payroll/data.js +347 -0
  255. package/dist/l10n_bd_payroll/i18n/bn.d.ts +2 -0
  256. package/dist/l10n_bd_payroll/i18n/bn.js +4 -0
  257. package/dist/l10n_bd_payroll/index.d.ts +4 -0
  258. package/dist/l10n_bd_payroll/index.js +26 -0
  259. package/dist/l10n_bd_payroll/module.d.ts +17294 -0
  260. package/dist/l10n_bd_payroll/module.js +86 -0
  261. package/dist/l10n_bd_pos/.kosh/bindings.d.ts +22 -0
  262. package/dist/{mrp_account → l10n_bd_pos}/.kosh/bindings.js +2 -2
  263. package/dist/l10n_bd_pos/.kosh/schema.d.ts +2341 -0
  264. package/dist/l10n_bd_pos/i18n/bn.d.ts +2 -0
  265. package/dist/l10n_bd_pos/i18n/bn.js +32 -0
  266. package/dist/l10n_bd_pos/index.d.ts +3 -0
  267. package/dist/l10n_bd_pos/index.js +111 -0
  268. package/dist/{mrp_account → l10n_bd_pos}/module.d.ts +9047 -6981
  269. package/dist/l10n_bd_pos/module.js +43 -0
  270. package/dist/l10n_in/.kosh/bindings.js +1 -1
  271. package/dist/l10n_in/.kosh/schema.d.ts +651 -10
  272. package/dist/l10n_in/i18n/bn.d.ts +2 -0
  273. package/dist/l10n_in/i18n/bn.js +95 -0
  274. package/dist/l10n_in/index.js +2 -0
  275. package/dist/l10n_in/module.d.ts +6778 -1580
  276. package/dist/l10n_in/module.js +25 -5
  277. package/dist/l10n_in/web/GstSettings.js +2 -2
  278. package/dist/mail/inbound/handle.js +8 -5
  279. package/dist/mail/inbound/models.js +5 -3
  280. package/dist/mail/index.d.ts +12 -1
  281. package/dist/mail/index.js +139 -2
  282. package/dist/mail/send.d.ts +56 -0
  283. package/dist/mail/send.js +394 -0
  284. package/dist/mail/web/SendButton.d.ts +9 -0
  285. package/dist/mail/web/SendButton.js +71 -0
  286. package/dist/mail/web/SendSelected.d.ts +8 -0
  287. package/dist/mail/web/SendSelected.js +33 -0
  288. package/dist/mail/web/index.d.ts +2 -0
  289. package/dist/mail/web/index.js +6 -0
  290. package/dist/mail/web/messages.js +36 -0
  291. package/dist/maintenance/.kosh/bindings.js +1 -1
  292. package/dist/maintenance/.kosh/schema.d.ts +2 -1
  293. package/dist/maintenance/i18n/bn.d.ts +2 -0
  294. package/dist/maintenance/i18n/bn.js +132 -0
  295. package/dist/maintenance/index.js +85 -0
  296. package/dist/maintenance/module.d.ts +25 -0
  297. package/dist/maintenance/module.js +27 -9
  298. package/dist/maintenance_stock/.kosh/bindings.js +1 -1
  299. package/dist/maintenance_stock/.kosh/schema.d.ts +374 -3
  300. package/dist/maintenance_stock/i18n/bn.d.ts +2 -0
  301. package/dist/maintenance_stock/i18n/bn.js +21 -0
  302. package/dist/maintenance_stock/index.js +2 -0
  303. package/dist/maintenance_stock/module.d.ts +6095 -1327
  304. package/dist/maintenance_stock/module.js +1 -0
  305. package/dist/modules-sdk/apps.d.ts +10 -0
  306. package/dist/modules-sdk/apps.js +32 -0
  307. package/dist/modules-sdk/index.d.ts +1 -1
  308. package/dist/modules-sdk/manifest.d.ts +105 -2
  309. package/dist/payment/.kosh/bindings.js +1 -1
  310. package/dist/payment/.kosh/schema.d.ts +653 -11
  311. package/dist/payment/i18n/bn.d.ts +2 -0
  312. package/dist/payment/i18n/bn.js +59 -0
  313. package/dist/payment/index.d.ts +41 -0
  314. package/dist/payment/index.js +216 -74
  315. package/dist/payment/module.d.ts +5353 -1675
  316. package/dist/payment/module.js +36 -6
  317. package/dist/payment/settle.js +11 -1
  318. package/dist/payroll/.kosh/bindings.d.ts +22 -0
  319. package/dist/payroll/.kosh/bindings.js +15 -0
  320. package/dist/payroll/.kosh/schema.d.ts +1448 -0
  321. package/dist/payroll/compute.d.ts +35 -0
  322. package/dist/payroll/compute.js +398 -0
  323. package/dist/payroll/demo.d.ts +55 -0
  324. package/dist/payroll/demo.js +121 -0
  325. package/dist/payroll/formula.d.ts +62 -0
  326. package/dist/payroll/formula.js +320 -0
  327. package/dist/payroll/i18n/bn.d.ts +2 -0
  328. package/dist/payroll/i18n/bn.js +206 -0
  329. package/dist/payroll/index.d.ts +230 -0
  330. package/dist/payroll/index.js +715 -0
  331. package/dist/{mrp → payroll}/module.d.ts +4294 -2624
  332. package/dist/payroll/module.js +606 -0
  333. package/dist/payroll/routes.d.ts +10 -0
  334. package/dist/payroll/routes.js +112 -0
  335. package/dist/payroll_account/.kosh/bindings.d.ts +22 -0
  336. package/dist/payroll_account/.kosh/bindings.js +15 -0
  337. package/dist/payroll_account/.kosh/schema.d.ts +2887 -0
  338. package/dist/payroll_account/i18n/bn.d.ts +2 -0
  339. package/dist/payroll_account/i18n/bn.js +10 -0
  340. package/dist/payroll_account/index.d.ts +3 -0
  341. package/dist/payroll_account/index.js +42 -0
  342. package/dist/payroll_account/module.d.ts +16738 -0
  343. package/dist/payroll_account/module.js +256 -0
  344. package/dist/permissions/approvals.d.ts +227 -12
  345. package/dist/permissions/approvals.js +1421 -67
  346. package/dist/permissions/index.d.ts +1 -1
  347. package/dist/permissions/index.js +2 -2
  348. package/dist/permissions/models.js +364 -13
  349. package/dist/permissions/routes.d.ts +9 -1
  350. package/dist/permissions/routes.js +72 -5
  351. package/dist/permissions/web/ApprovalPanel.d.ts +5 -4
  352. package/dist/permissions/web/ApprovalPanel.js +75 -11
  353. package/dist/permissions/web/index.d.ts +6 -4
  354. package/dist/permissions/web/index.js +13 -4
  355. package/dist/permissions/web/messages.d.ts +2 -0
  356. package/dist/permissions/web/messages.js +95 -0
  357. package/dist/portal/.kosh/bindings.js +1 -1
  358. package/dist/portal/.kosh/schema.d.ts +2 -1
  359. package/dist/portal/documents.d.ts +3 -0
  360. package/dist/portal/documents.js +21 -1
  361. package/dist/portal/i18n/bn.d.ts +2 -0
  362. package/dist/portal/i18n/bn.js +33 -0
  363. package/dist/portal/index.js +3 -1
  364. package/dist/portal/module.d.ts +20 -0
  365. package/dist/portal/routes-documents.js +76 -0
  366. package/dist/pos/.kosh/bindings.js +1 -1
  367. package/dist/pos/.kosh/schema.d.ts +652 -10
  368. package/dist/pos/i18n/bn.d.ts +2 -0
  369. package/dist/pos/i18n/bn.js +133 -0
  370. package/dist/pos/index.js +87 -1
  371. package/dist/pos/module.d.ts +6967 -1709
  372. package/dist/pos/module.js +49 -5
  373. package/dist/pos/routes.js +80 -7
  374. package/dist/pos/web/Register.js +2 -5
  375. package/dist/pos_stock/.kosh/bindings.js +1 -1
  376. package/dist/pos_stock/.kosh/schema.d.ts +822 -12
  377. package/dist/pos_stock/i18n/bn.d.ts +2 -0
  378. package/dist/pos_stock/i18n/bn.js +6 -0
  379. package/dist/pos_stock/index.js +2 -0
  380. package/dist/pos_stock/module.d.ts +11241 -2851
  381. package/dist/product/.kosh/bindings.js +1 -1
  382. package/dist/product/.kosh/schema.d.ts +203 -1
  383. package/dist/product/i18n/bn.d.ts +2 -0
  384. package/dist/product/i18n/bn.js +175 -0
  385. package/dist/product/index.d.ts +1 -0
  386. package/dist/product/index.js +301 -1
  387. package/dist/product/module.d.ts +1727 -0
  388. package/dist/product/module.js +67 -6
  389. package/dist/product/pricelist.d.ts +575 -0
  390. package/dist/product/pricelist.js +257 -0
  391. package/dist/product/variants.d.ts +908 -0
  392. package/dist/product/variants.js +251 -0
  393. package/dist/production/.kosh/bindings.d.ts +22 -0
  394. package/dist/production/.kosh/bindings.js +15 -0
  395. package/dist/production/.kosh/schema.d.ts +2345 -0
  396. package/dist/{mrp → production}/demo.d.ts +1 -1
  397. package/dist/{mrp → production}/demo.js +5 -5
  398. package/dist/production/depth.d.ts +790 -0
  399. package/dist/production/depth.js +262 -0
  400. package/dist/production/i18n/bn.d.ts +2 -0
  401. package/dist/production/i18n/bn.js +350 -0
  402. package/dist/production/index.d.ts +6 -0
  403. package/dist/production/index.js +1256 -0
  404. package/dist/production/module.d.ts +17327 -0
  405. package/dist/production/module.js +1333 -0
  406. package/dist/production/plan.d.ts +921 -0
  407. package/dist/production/plan.js +511 -0
  408. package/dist/production/schedule.d.ts +656 -0
  409. package/dist/production/schedule.js +309 -0
  410. package/dist/production_account/.kosh/bindings.d.ts +22 -0
  411. package/dist/production_account/.kosh/bindings.js +15 -0
  412. package/dist/production_account/.kosh/schema.d.ts +3496 -0
  413. package/dist/production_account/i18n/bn.d.ts +2 -0
  414. package/dist/production_account/i18n/bn.js +93 -0
  415. package/dist/production_account/index.d.ts +4 -0
  416. package/dist/production_account/index.js +246 -0
  417. package/dist/production_account/module.d.ts +1192 -0
  418. package/dist/{mrp_account → production_account}/module.js +72 -18
  419. package/dist/production_account/overhead.d.ts +1195 -0
  420. package/dist/production_account/overhead.js +554 -0
  421. package/dist/project/.kosh/bindings.js +1 -1
  422. package/dist/project/.kosh/schema.d.ts +735 -1
  423. package/dist/project/i18n/bn.d.ts +2 -0
  424. package/dist/project/i18n/bn.js +383 -0
  425. package/dist/project/index.d.ts +3 -1
  426. package/dist/project/index.js +1024 -14
  427. package/dist/project/module.d.ts +9912 -390
  428. package/dist/project/module.js +1590 -14
  429. package/dist/project/routes.d.ts +44 -0
  430. package/dist/project/routes.js +314 -0
  431. package/dist/project/schedule.d.ts +72 -0
  432. package/dist/project/schedule.js +192 -0
  433. package/dist/project/web/Refresh.d.ts +8 -0
  434. package/dist/project/web/Refresh.js +29 -0
  435. package/dist/project/web/Schedule.d.ts +9 -0
  436. package/dist/project/web/Schedule.js +93 -0
  437. package/dist/project/web/Structure.d.ts +8 -0
  438. package/dist/project/web/Structure.js +86 -0
  439. package/dist/project/web/Workload.d.ts +8 -0
  440. package/dist/project/web/Workload.js +43 -0
  441. package/dist/project/web/index.d.ts +14 -0
  442. package/dist/project/web/index.js +25 -0
  443. package/dist/project/web/messages.d.ts +2 -0
  444. package/dist/project/web/messages.js +85 -0
  445. package/dist/project_account/.kosh/bindings.d.ts +22 -0
  446. package/dist/project_account/.kosh/bindings.js +15 -0
  447. package/dist/project_account/.kosh/schema.d.ts +2763 -0
  448. package/dist/project_account/i18n/bn.d.ts +2 -0
  449. package/dist/project_account/i18n/bn.js +6 -0
  450. package/dist/project_account/index.d.ts +3 -0
  451. package/dist/project_account/index.js +29 -0
  452. package/dist/project_account/module.d.ts +15013 -0
  453. package/dist/project_account/module.js +76 -0
  454. package/dist/project_portal/.kosh/bindings.js +1 -1
  455. package/dist/project_portal/.kosh/schema.d.ts +735 -1
  456. package/dist/project_portal/i18n/bn.d.ts +2 -0
  457. package/dist/project_portal/i18n/bn.js +6 -0
  458. package/dist/project_portal/index.js +2 -0
  459. package/dist/project_portal/module.d.ts +4796 -87
  460. package/dist/project_purchase/.kosh/bindings.d.ts +22 -0
  461. package/dist/project_purchase/.kosh/bindings.js +15 -0
  462. package/dist/project_purchase/.kosh/schema.d.ts +3393 -0
  463. package/dist/project_purchase/i18n/bn.d.ts +2 -0
  464. package/dist/project_purchase/i18n/bn.js +4 -0
  465. package/dist/project_purchase/index.d.ts +9 -0
  466. package/dist/project_purchase/index.js +24 -0
  467. package/dist/project_purchase/module.d.ts +38613 -0
  468. package/dist/project_purchase/module.js +56 -0
  469. package/dist/purchase/.kosh/bindings.js +1 -1
  470. package/dist/purchase/.kosh/schema.d.ts +908 -5
  471. package/dist/purchase/comparison.d.ts +993 -0
  472. package/dist/purchase/comparison.js +415 -0
  473. package/dist/purchase/extras.d.ts +1509 -0
  474. package/dist/purchase/extras.js +445 -0
  475. package/dist/purchase/i18n/bn.d.ts +2 -0
  476. package/dist/purchase/i18n/bn.js +413 -0
  477. package/dist/purchase/index.d.ts +5 -0
  478. package/dist/purchase/index.js +1280 -4
  479. package/dist/purchase/module.d.ts +7147 -395
  480. package/dist/purchase/module.js +303 -10
  481. package/dist/purchase/request.d.ts +696 -0
  482. package/dist/purchase/request.js +446 -0
  483. package/dist/purchase/tender.d.ts +1208 -0
  484. package/dist/purchase/tender.js +507 -0
  485. package/dist/purchase/vendorprice.d.ts +340 -0
  486. package/dist/purchase/vendorprice.js +153 -0
  487. package/dist/purchase_account/.kosh/bindings.js +1 -1
  488. package/dist/purchase_account/.kosh/schema.d.ts +1209 -16
  489. package/dist/purchase_account/i18n/bn.d.ts +2 -0
  490. package/dist/purchase_account/i18n/bn.js +22 -0
  491. package/dist/purchase_account/index.js +20 -0
  492. package/dist/purchase_account/module.d.ts +12232 -2028
  493. package/dist/purchase_account/module.js +252 -9
  494. package/dist/purchase_portal/.kosh/bindings.js +1 -1
  495. package/dist/purchase_portal/.kosh/schema.d.ts +908 -5
  496. package/dist/purchase_portal/i18n/bn.d.ts +2 -0
  497. package/dist/purchase_portal/i18n/bn.js +5 -0
  498. package/dist/purchase_portal/index.js +2 -0
  499. package/dist/purchase_portal/module.d.ts +6853 -352
  500. package/dist/purchase_stock/.kosh/bindings.js +1 -1
  501. package/dist/purchase_stock/.kosh/schema.d.ts +1096 -21
  502. package/dist/purchase_stock/i18n/bn.d.ts +2 -0
  503. package/dist/purchase_stock/i18n/bn.js +19 -0
  504. package/dist/purchase_stock/index.d.ts +2 -2
  505. package/dist/purchase_stock/index.js +38 -2
  506. package/dist/purchase_stock/module.d.ts +12930 -1612
  507. package/dist/purchase_stock/module.js +317 -9
  508. package/dist/purchase_stock/scorecard.d.ts +22 -0
  509. package/dist/purchase_stock/scorecard.js +77 -0
  510. package/dist/purchase_stock/web/Scorecard.d.ts +7 -0
  511. package/dist/purchase_stock/web/Scorecard.js +22 -0
  512. package/dist/purchase_stock/web/index.d.ts +11 -0
  513. package/dist/purchase_stock/web/index.js +16 -0
  514. package/dist/purchase_stock/web/messages.d.ts +2 -0
  515. package/dist/purchase_stock/web/messages.js +27 -0
  516. package/dist/purchase_stock_account/.kosh/bindings.js +1 -1
  517. package/dist/purchase_stock_account/.kosh/schema.d.ts +1444 -20
  518. package/dist/purchase_stock_account/i18n/bn.d.ts +2 -0
  519. package/dist/purchase_stock_account/i18n/bn.js +8 -0
  520. package/dist/purchase_stock_account/index.js +18 -0
  521. package/dist/purchase_stock_account/module.d.ts +7 -35346
  522. package/dist/purchase_stock_account/module.js +35 -8
  523. package/dist/recruitment/.kosh/bindings.js +1 -1
  524. package/dist/recruitment/.kosh/schema.d.ts +60 -1
  525. package/dist/recruitment/i18n/bn.d.ts +2 -0
  526. package/dist/recruitment/i18n/bn.js +93 -0
  527. package/dist/recruitment/index.js +64 -0
  528. package/dist/recruitment/module.d.ts +460 -8
  529. package/dist/recruitment/module.js +13 -4
  530. package/dist/reporting/documents.d.ts +5 -0
  531. package/dist/reporting/documents.js +11 -1
  532. package/dist/reporting/index.d.ts +1 -1
  533. package/dist/reporting/index.js +1 -1
  534. package/dist/reporting/web/CalendarView.d.ts +18 -5
  535. package/dist/reporting/web/CalendarView.js +163 -29
  536. package/dist/reporting/web/messages.js +18 -0
  537. package/dist/sale_account/.kosh/bindings.js +1 -1
  538. package/dist/sale_account/.kosh/schema.d.ts +763 -18
  539. package/dist/sale_account/i18n/bn.d.ts +2 -0
  540. package/dist/sale_account/i18n/bn.js +48 -0
  541. package/dist/sale_account/index.d.ts +1 -1
  542. package/dist/sale_account/index.js +102 -4
  543. package/dist/sale_account/module.d.ts +8241 -2052
  544. package/dist/sale_account/module.js +535 -46
  545. package/dist/sale_crm/.kosh/bindings.d.ts +22 -0
  546. package/dist/sale_crm/.kosh/bindings.js +15 -0
  547. package/dist/{mrp → sale_crm}/.kosh/schema.d.ts +391 -494
  548. package/dist/sale_crm/i18n/bn.d.ts +2 -0
  549. package/dist/sale_crm/i18n/bn.js +9 -0
  550. package/dist/sale_crm/index.d.ts +7 -0
  551. package/dist/sale_crm/index.js +104 -0
  552. package/dist/sale_crm/module.d.ts +5609 -0
  553. package/dist/sale_crm/module.js +73 -0
  554. package/dist/sale_portal/.kosh/bindings.js +1 -1
  555. package/dist/sale_portal/.kosh/schema.d.ts +292 -4
  556. package/dist/sale_portal/i18n/bn.d.ts +2 -0
  557. package/dist/sale_portal/i18n/bn.js +7 -0
  558. package/dist/sale_portal/index.js +10 -0
  559. package/dist/sale_portal/module.d.ts +2563 -292
  560. package/dist/sale_project/.kosh/bindings.js +1 -1
  561. package/dist/sale_project/.kosh/schema.d.ts +1025 -4
  562. package/dist/sale_project/i18n/bn.d.ts +2 -0
  563. package/dist/sale_project/i18n/bn.js +12 -0
  564. package/dist/sale_project/index.js +2 -0
  565. package/dist/sale_project/module.d.ts +9280 -762
  566. package/dist/sale_project/module.js +17 -1
  567. package/dist/sale_stock/.kosh/bindings.js +1 -1
  568. package/dist/sale_stock/.kosh/schema.d.ts +463 -6
  569. package/dist/sale_stock/i18n/bn.d.ts +2 -0
  570. package/dist/sale_stock/i18n/bn.js +15 -0
  571. package/dist/sale_stock/index.js +2 -0
  572. package/dist/sale_stock/module.d.ts +8355 -1334
  573. package/dist/sale_stock/module.js +20 -3
  574. package/dist/sales/.kosh/bindings.js +1 -1
  575. package/dist/sales/.kosh/schema.d.ts +292 -4
  576. package/dist/sales/i18n/bn.d.ts +2 -0
  577. package/dist/sales/i18n/bn.js +128 -0
  578. package/dist/sales/index.js +124 -5
  579. package/dist/sales/module.d.ts +3568 -633
  580. package/dist/sales/module.js +306 -11
  581. package/dist/server/api/duplicate.d.ts +14 -0
  582. package/dist/server/api/duplicate.js +75 -0
  583. package/dist/server/api/explain.d.ts +70 -0
  584. package/dist/server/api/explain.js +111 -0
  585. package/dist/server/api/metadata.d.ts +2 -0
  586. package/dist/server/api/metadata.js +9 -0
  587. package/dist/server/api/openapi.js +15 -0
  588. package/dist/server/api/rest.d.ts +1 -0
  589. package/dist/server/api/rest.js +76 -12
  590. package/dist/server/api/views.js +1 -1
  591. package/dist/server/apps.d.ts +16 -1
  592. package/dist/server/apps.js +164 -2
  593. package/dist/server/auth/base.js +2 -0
  594. package/dist/server/auth/service.d.ts +8 -0
  595. package/dist/server/auth/service.js +19 -0
  596. package/dist/server/events.d.ts +13 -0
  597. package/dist/server/events.js +22 -0
  598. package/dist/server/i18n.d.ts +27 -0
  599. package/dist/server/i18n.js +143 -0
  600. package/dist/server/index.d.ts +2 -0
  601. package/dist/server/index.js +2 -0
  602. package/dist/server/server.js +6 -0
  603. package/dist/settings/company.d.ts +3 -1
  604. package/dist/settings/company.js +26 -5
  605. package/dist/settings/routes.d.ts +10 -0
  606. package/dist/settings/routes.js +19 -3
  607. package/dist/settings/web/AppsPage.d.ts +3 -2
  608. package/dist/settings/web/AppsPage.js +26 -8
  609. package/dist/settings/web/CompaniesPage.js +91 -6
  610. package/dist/settings/web/messages.js +64 -0
  611. package/dist/sign/.kosh/bindings.d.ts +22 -0
  612. package/dist/{mrp → sign}/.kosh/bindings.js +2 -2
  613. package/dist/sign/.kosh/schema.d.ts +991 -0
  614. package/dist/sign/i18n/bn.d.ts +2 -0
  615. package/dist/sign/i18n/bn.js +97 -0
  616. package/dist/sign/index.d.ts +29 -0
  617. package/dist/sign/index.js +478 -0
  618. package/dist/sign/module.d.ts +4518 -0
  619. package/dist/sign/module.js +167 -0
  620. package/dist/sign/sign.d.ts +82 -0
  621. package/dist/sign/sign.js +474 -0
  622. package/dist/stock/.kosh/bindings.js +1 -1
  623. package/dist/stock/.kosh/schema.d.ts +374 -3
  624. package/dist/stock/demo.d.ts +2 -1
  625. package/dist/stock/demo.js +28 -1
  626. package/dist/stock/i18n/bn.d.ts +2 -0
  627. package/dist/stock/i18n/bn.js +311 -0
  628. package/dist/stock/index.d.ts +4 -1
  629. package/dist/stock/index.js +674 -6
  630. package/dist/stock/ledger.d.ts +78 -0
  631. package/dist/stock/ledger.js +582 -0
  632. package/dist/stock/module.d.ts +6142 -1380
  633. package/dist/stock/module.js +780 -26
  634. package/dist/stock/replenish.d.ts +38 -0
  635. package/dist/stock/replenish.js +191 -0
  636. package/dist/stock/returns.d.ts +157 -0
  637. package/dist/stock/returns.js +163 -0
  638. package/dist/stock/web/Ledger.d.ts +9 -0
  639. package/dist/stock/web/Ledger.js +108 -0
  640. package/dist/stock/web/Operations.d.ts +8 -0
  641. package/dist/stock/web/Operations.js +33 -0
  642. package/dist/stock/web/Replenishment.d.ts +8 -0
  643. package/dist/stock/web/Replenishment.js +84 -0
  644. package/dist/stock/web/ReturnButton.d.ts +7 -0
  645. package/dist/stock/web/ReturnButton.js +62 -0
  646. package/dist/stock/web/index.d.ts +7 -2
  647. package/dist/stock/web/index.js +15 -2
  648. package/dist/stock/web/messages.js +206 -0
  649. package/dist/stock_account/.kosh/bindings.js +1 -1
  650. package/dist/stock_account/.kosh/schema.d.ts +878 -12
  651. package/dist/stock_account/i18n/bn.d.ts +2 -0
  652. package/dist/stock_account/i18n/bn.js +73 -0
  653. package/dist/stock_account/index.d.ts +1 -0
  654. package/dist/stock_account/index.js +141 -3
  655. package/dist/stock_account/landed.d.ts +429 -0
  656. package/dist/stock_account/landed.js +335 -0
  657. package/dist/stock_account/module.d.ts +12143 -3391
  658. package/dist/stock_account/module.js +135 -6
  659. package/dist/stock_account/web/LandedPreview.d.ts +7 -0
  660. package/dist/stock_account/web/LandedPreview.js +23 -0
  661. package/dist/stock_account/web/index.d.ts +11 -0
  662. package/dist/stock_account/web/index.js +16 -0
  663. package/dist/stock_account/web/messages.d.ts +2 -0
  664. package/dist/stock_account/web/messages.js +27 -0
  665. package/dist/todo/i18n/bn.d.ts +2 -0
  666. package/dist/todo/i18n/bn.js +66 -0
  667. package/dist/todo/index.js +59 -0
  668. package/dist/todo/module.d.ts +5 -0
  669. package/dist/todo/module.js +5 -3
  670. package/dist/trade_finance/.kosh/bindings.js +1 -1
  671. package/dist/trade_finance/.kosh/schema.d.ts +2 -1
  672. package/dist/trade_finance/i18n/bn.d.ts +2 -0
  673. package/dist/trade_finance/i18n/bn.js +162 -0
  674. package/dist/trade_finance/index.js +95 -0
  675. package/dist/trade_finance/module.d.ts +26 -0
  676. package/dist/trade_finance/module.js +29 -8
  677. package/dist/trade_finance_account/.kosh/bindings.js +1 -1
  678. package/dist/trade_finance_account/.kosh/schema.d.ts +651 -10
  679. package/dist/trade_finance_account/i18n/bn.d.ts +2 -0
  680. package/dist/trade_finance_account/i18n/bn.js +27 -0
  681. package/dist/trade_finance_account/index.js +3 -0
  682. package/dist/trade_finance_account/module.d.ts +5129 -1509
  683. package/dist/trade_finance_account/module.js +2 -0
  684. package/dist/trade_finance_purchase/.kosh/bindings.js +1 -1
  685. package/dist/trade_finance_purchase/.kosh/schema.d.ts +908 -5
  686. package/dist/trade_finance_purchase/i18n/bn.d.ts +2 -0
  687. package/dist/trade_finance_purchase/i18n/bn.js +6 -0
  688. package/dist/trade_finance_purchase/index.js +2 -0
  689. package/dist/trade_finance_purchase/module.d.ts +6909 -408
  690. package/dist/trade_finance_sale/.kosh/bindings.js +1 -1
  691. package/dist/trade_finance_sale/.kosh/schema.d.ts +292 -4
  692. package/dist/trade_finance_sale/i18n/bn.d.ts +2 -0
  693. package/dist/trade_finance_sale/i18n/bn.js +6 -0
  694. package/dist/trade_finance_sale/index.js +2 -0
  695. package/dist/trade_finance_sale/module.d.ts +2602 -331
  696. package/dist/ui/api.d.ts +2 -0
  697. package/dist/ui/app.d.ts +9 -0
  698. package/dist/ui/app.js +47 -15
  699. package/dist/ui/components/AppIcon.js +9 -2
  700. package/dist/ui/components/Explain.d.ts +69 -0
  701. package/dist/ui/components/Explain.js +62 -0
  702. package/dist/ui/context.d.ts +8 -1
  703. package/dist/ui/context.js +34 -1
  704. package/dist/ui/i18n/messages.d.ts +40 -0
  705. package/dist/ui/i18n/messages.js +80 -0
  706. package/dist/ui/index.d.ts +2 -1
  707. package/dist/ui/index.js +1 -0
  708. package/dist/ui/registry.d.ts +14 -0
  709. package/dist/ui/registry.js +10 -0
  710. package/dist/ui/views/FormView.d.ts +6 -0
  711. package/dist/ui/views/FormView.js +51 -12
  712. package/dist/ui/views/KanbanView.js +9 -1
  713. package/dist/ui/views/ListView.d.ts +8 -0
  714. package/dist/ui/views/ListView.js +14 -5
  715. package/dist/ui/views/StatsRow.js +2 -1
  716. package/dist/ui/views/widgets.js +7 -1
  717. package/dist/views/extend.js +12 -0
  718. package/dist/views/types.d.ts +13 -2
  719. package/dist/views/validate.js +8 -1
  720. package/dist/website/.kosh/bindings.js +1 -1
  721. package/dist/website/.kosh/schema.d.ts +2 -1
  722. package/dist/website/i18n/bn.d.ts +2 -0
  723. package/dist/website/i18n/bn.js +113 -0
  724. package/dist/website/index.js +37 -0
  725. package/dist/website/module.d.ts +20 -0
  726. package/dist/website/module.js +30 -5
  727. package/dist/website_crm/.kosh/bindings.js +1 -1
  728. package/dist/website_crm/.kosh/schema.d.ts +3 -1
  729. package/dist/website_crm/i18n/bn.d.ts +2 -0
  730. package/dist/website_crm/i18n/bn.js +5 -0
  731. package/dist/website_crm/index.js +2 -0
  732. package/dist/website_crm/module.d.ts +41 -0
  733. package/dist/website_sale/.kosh/bindings.d.ts +22 -0
  734. package/dist/website_sale/.kosh/bindings.js +15 -0
  735. package/dist/website_sale/.kosh/schema.d.ts +2909 -0
  736. package/dist/website_sale/couriers.d.ts +50 -0
  737. package/dist/website_sale/couriers.js +59 -0
  738. package/dist/website_sale/demo.d.ts +7 -0
  739. package/dist/website_sale/demo.js +90 -0
  740. package/dist/website_sale/growth.d.ts +31 -0
  741. package/dist/website_sale/growth.js +163 -0
  742. package/dist/website_sale/i18n/bn.d.ts +2 -0
  743. package/dist/website_sale/i18n/bn.js +132 -0
  744. package/dist/website_sale/index.d.ts +49 -0
  745. package/dist/website_sale/index.js +620 -0
  746. package/dist/website_sale/module.d.ts +35182 -0
  747. package/dist/website_sale/module.js +419 -0
  748. package/dist/website_sale/shipments.d.ts +16 -0
  749. package/dist/website_sale/shipments.js +113 -0
  750. package/dist/website_sale/shop.d.ts +81 -0
  751. package/dist/website_sale/shop.js +662 -0
  752. package/dist/website_sale_stock/.kosh/bindings.d.ts +22 -0
  753. package/dist/website_sale_stock/.kosh/bindings.js +15 -0
  754. package/dist/website_sale_stock/.kosh/schema.d.ts +3400 -0
  755. package/dist/website_sale_stock/i18n/bn.d.ts +2 -0
  756. package/dist/website_sale_stock/i18n/bn.js +4 -0
  757. package/dist/website_sale_stock/index.d.ts +9 -0
  758. package/dist/website_sale_stock/index.js +22 -0
  759. package/dist/website_sale_stock/module.d.ts +11 -0
  760. package/dist/website_sale_stock/module.js +32 -0
  761. package/package.json +117 -8
  762. package/dist/mrp/index.d.ts +0 -3
  763. package/dist/mrp/index.js +0 -392
  764. package/dist/mrp/module.js +0 -695
  765. package/dist/mrp_account/index.d.ts +0 -3
  766. package/dist/mrp_account/index.js +0 -22
  767. /package/dist/{mrp → account_asset}/.kosh/bindings.d.ts +0 -0
  768. /package/dist/{mrp_account → account_budget}/.kosh/bindings.d.ts +0 -0
@@ -0,0 +1,50 @@
1
+ /** Where a parcel is, in the Shop's words. */
2
+ export type ParcelStatus = 'booked' | 'picked' | 'in_transit' | 'delivered' | 'returned' | 'cancelled';
3
+ export interface Parcel {
4
+ /** The shipment's reference on our side (`SHP/2026/00007`). */
5
+ readonly reference: string;
6
+ readonly recipient: {
7
+ readonly name: string;
8
+ readonly phone: string;
9
+ readonly address: string;
10
+ readonly city: string;
11
+ };
12
+ /** The cash the courier collects on delivery (`0.00`: paid already), in the company's currency. */
13
+ readonly cod: string;
14
+ readonly weightKg: string;
15
+ readonly note: string;
16
+ }
17
+ export interface Booked {
18
+ /** The courier's consignment id. */
19
+ readonly trackingRef: string;
20
+ readonly labelUrl?: string;
21
+ }
22
+ export interface Tracking {
23
+ readonly status: ParcelStatus;
24
+ /** What the courier says happened, oldest first. */
25
+ readonly events: readonly {
26
+ readonly at: string;
27
+ readonly status: ParcelStatus;
28
+ readonly note: string;
29
+ }[];
30
+ /** Delivered with the cash collected. */
31
+ readonly codCollected: boolean;
32
+ }
33
+ export interface CourierAdapter {
34
+ readonly code: string;
35
+ /** Whether this server has the courier's credentials. */
36
+ configured(): boolean;
37
+ book(parcel: Parcel): Promise<Booked>;
38
+ track(trackingRef: string): Promise<Tracking>;
39
+ cancel(trackingRef: string): Promise<void>;
40
+ }
41
+ /** The test courier: parcels in memory, moved along by `advance`. */
42
+ export interface FakeCourier extends CourierAdapter {
43
+ /** Moves a parcel to `status` (delivered collects its cash). */
44
+ advance(trackingRef: string, status: ParcelStatus, note?: string): void;
45
+ }
46
+ export declare function fakeCourier(): FakeCourier;
47
+ /** The test courier every server has (the demo's and the tests'). */
48
+ export declare const testCourier: FakeCourier;
49
+ export declare function setCouriers(next: ReadonlyMap<string, CourierAdapter>): void;
50
+ export declare function courierOf(code: string): CourierAdapter | null;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Couriers (RFC 0024 §2.7): what the Shop asks of a courier — book a parcel (with the cash to collect on delivery),
3
+ * say where it is, cancel it — behind one adapter per courier, so Pathao, Steadfast or RedX can be switched without
4
+ * changing the Shop. Credentials are never in records: an adapter reads them from the environment. The test courier
5
+ * moves no parcel: tests (and the demo) move it along with `advance`.
6
+ */
7
+ import { randomBytes } from 'node:crypto';
8
+ export function fakeCourier() {
9
+ const parcels = new Map();
10
+ const step = (p, status, note) => {
11
+ p.status = status;
12
+ p.events.push({ at: new Date().toISOString(), status, note });
13
+ };
14
+ const known = (ref) => {
15
+ const p = parcels.get(ref);
16
+ if (p === undefined)
17
+ throw new Error(`The test courier has no parcel ${ref}.`);
18
+ return p;
19
+ };
20
+ return {
21
+ code: 'fake',
22
+ configured: () => true,
23
+ book: async (parcel) => {
24
+ const trackingRef = `FAKE-${randomBytes(5).toString('hex').toUpperCase()}`;
25
+ parcels.set(trackingRef, {
26
+ parcel,
27
+ status: 'booked',
28
+ events: [{ at: new Date().toISOString(), status: 'booked', note: 'Booked' }],
29
+ });
30
+ return { trackingRef, labelUrl: `https://courier.test/labels/${trackingRef}.pdf` };
31
+ },
32
+ track: async (ref) => {
33
+ const p = known(ref);
34
+ return {
35
+ status: p.status,
36
+ events: p.events.map((e) => ({ ...e })),
37
+ codCollected: p.status === 'delivered' && Number(p.parcel.cod) > 0,
38
+ };
39
+ },
40
+ cancel: async (ref) => {
41
+ const p = known(ref);
42
+ if (p.status !== 'booked')
43
+ throw new Error('The courier has picked the parcel up already.');
44
+ step(p, 'cancelled', 'Cancelled');
45
+ },
46
+ advance: (ref, status, note) => step(known(ref), status, note ?? status),
47
+ };
48
+ }
49
+ /** The test courier every server has (the demo's and the tests'). */
50
+ export const testCourier = fakeCourier();
51
+ /** The couriers of the running server, by code (Pathao, Steadfast and RedX come with their sandbox credentials). */
52
+ let couriers = new Map([['fake', testCourier]]);
53
+ export function setCouriers(next) {
54
+ couriers = next;
55
+ }
56
+ export function courierOf(code) {
57
+ const c = couriers.get(code);
58
+ return c?.configured() ? c : null;
59
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The Shop's demo data (RFC 0024 §2.7): Padma Traders' site sells — cement, LED panels and copper cable published with
3
+ * their weight and a Bangla description, related to one another; two delivery methods (by zone, Dhaka or outside,
4
+ * free from 10 000; and a courier by weight); and an order placed on the shop with cash on delivery.
5
+ */
6
+ import type { DemoContext } from '../modules-sdk/index.js';
7
+ export declare function shopDemo(ctx: DemoContext): Promise<string>;
@@ -0,0 +1,90 @@
1
+ /**
2
+ * The Shop's demo data (RFC 0024 §2.7): Padma Traders' site sells — cement, LED panels and copper cable published with
3
+ * their weight and a Bangla description, related to one another; two delivery methods (by zone, Dhaka or outside,
4
+ * free from 10 000; and a courier by weight); and an order placed on the shop with cash on delivery.
5
+ */
6
+ import { idByName } from '../modules-sdk/index.js';
7
+ import { orm } from '../server/orm.js';
8
+ import { checkout, newCart, setLine } from './shop.js';
9
+ const DINA = {
10
+ login: 'dina',
11
+ name: 'Dina Rahman',
12
+ groups: ['website_sale.manager', 'product.manager'],
13
+ };
14
+ export async function shopDemo(ctx) {
15
+ const placed = await ctx.as(DINA, async (raw) => {
16
+ const env = raw;
17
+ const [site] = await (await env.model('website.site').search({ where: { key: 'padma' }, limit: 1 })).load({});
18
+ if (site === undefined)
19
+ return null;
20
+ await env.model('website.site').browse([site.id]).write({ shop: true, codLimit: '50000' });
21
+ const products = [
22
+ ['Cement bag 50 kg', '50', 'পোর্টল্যান্ড কম্পোজিট সিমেন্ট, ৫০ কেজির বস্তা।'],
23
+ ['LED panel 40 W', '2.5', '৪০ ওয়াটের এলইডি প্যানেল, অফিস ও দোকানের জন্য।'],
24
+ ['Copper cable 2.5 mm²', '0.03', 'তামার তার, ২.৫ বর্গমিলিমিটার, মিটার হিসেবে।'],
25
+ ];
26
+ const ids = [];
27
+ for (const [name, weight, bangla] of products) {
28
+ const id = (await idByName(env, 'product.product', name));
29
+ if (id === undefined)
30
+ continue;
31
+ ids.push(id);
32
+ await env
33
+ .model('product.product')
34
+ .browse([id])
35
+ .write({
36
+ published: true,
37
+ weight,
38
+ websiteDescription: { en_US: `${name}, delivered across Bangladesh.`, bn_BD: bangla },
39
+ });
40
+ }
41
+ for (const id of ids)
42
+ await env
43
+ .model('product.product')
44
+ .browse([id])
45
+ .write({ related: { set: ids.filter((o) => o !== id) } });
46
+ const carriers = await env.model('delivery.carrier').create([
47
+ {
48
+ name: 'Home delivery',
49
+ kind: 'zone',
50
+ zoneCities: 'Dhaka',
51
+ priceInside: '60',
52
+ priceOutside: '120',
53
+ freeOver: '10000',
54
+ cod: true,
55
+ courier: 'fake',
56
+ sequence: 1,
57
+ },
58
+ {
59
+ name: 'Courier by weight',
60
+ kind: 'weight',
61
+ price: '80',
62
+ pricePerKg: '20',
63
+ cod: false,
64
+ sequence: 2,
65
+ },
66
+ ]);
67
+ await env.flush();
68
+ // An order placed with cash on delivery, as a visitor would (the shop works as the system).
69
+ return env.asSuperuser({ reason: 'demo shop order' }, async (su) => {
70
+ const shop = { id: site.id, key: site.key, company: site.company.id };
71
+ const cart = await newCart(su, shop);
72
+ const cement = ids[0];
73
+ if (cement === undefined)
74
+ return null;
75
+ await setLine(su, cart.id, cement, orm.toDecimal(4));
76
+ return checkout(su, shop, cart.id, {
77
+ name: 'Rina Akter',
78
+ email: 'rina@example.com',
79
+ phone: '01700000000',
80
+ street: 'House 12, Road 5, Dhanmondi',
81
+ city: 'Dhaka',
82
+ carrier: carriers.ids[0],
83
+ payment: 'cod',
84
+ });
85
+ });
86
+ });
87
+ return placed === null
88
+ ? 'Shop: no site to sell on.'
89
+ : `Shop: 3 products published, 2 delivery methods, order ${placed.order} placed with cash on delivery.`;
90
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Bringing visitors back and to the shop (RFC 0024 §2.7): carts left with an email get one reminder with a code that
3
+ * restores them (the cart's own token is never sent); the site's sitemap lists its published pages and products for
4
+ * search engines; product pictures are served without a sign-in, only of products on the shop.
5
+ */
6
+ import { type Mailer } from '../mail/index.js';
7
+ import type { Env } from './.kosh/bindings.js';
8
+ import type { Site } from './shop.js';
9
+ export declare function setShopMailer(mailer: Mailer | undefined): void;
10
+ /** The email a visitor leaves on their cart, for one reminder if they leave it. */
11
+ export declare function setContact(env: Env, id: number, email: string): Promise<void>;
12
+ /**
13
+ * Reminds the carts of the company's shops left longer than their site says, with an email and goods, once each: a
14
+ * new recovery code (only its hash is kept) in a link to the site's `/cart/recover`. Sent after the commit; returns
15
+ * how many were reminded.
16
+ */
17
+ export declare function remindAbandoned(env: Env, now?: Date): Promise<number>;
18
+ /** A reminder's code restores its cart: a new token for it (the old one stops working); null when unknown. */
19
+ export declare function recoverCart(env: Env, site: Site, code: string): Promise<string | null>;
20
+ /**
21
+ * The site's sitemap: its published pages (the default language at their path, the other at `/<lang><path>`) and the
22
+ * products on its shop (at `/shop/p/<id>`), each with when it last changed. Null without the site's domain.
23
+ */
24
+ export declare function sitemap(env: Env, site: Site): Promise<string | null>;
25
+ /** The picture of a product on the shop (`width`: its thumbnail of that width, when one was made). */
26
+ export declare function productImage(env: Env, product: number, width?: number): Promise<{
27
+ key: string;
28
+ mime: string;
29
+ size: number;
30
+ name: string;
31
+ } | null>;
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Bringing visitors back and to the shop (RFC 0024 §2.7): carts left with an email get one reminder with a code that
3
+ * restores them (the cart's own token is never sent); the site's sitemap lists its published pages and products for
4
+ * search engines; product pictures are served without a sign-in, only of products on the shop.
5
+ */
6
+ import { layout } from '../mail/index.js';
7
+ import { HttpProblem } from '../server/index.js';
8
+ import { orm } from '../server/orm.js';
9
+ import { hashToken, newCartToken } from './module.js';
10
+ const EMAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
11
+ const escapeXml = (s) => s.replace(/[<>&'"]/g, (c) => ({ '<': '&lt;', '>': '&gt;', '&': '&amp;', "'": '&apos;', '"': '&quot;' })[c] ?? c);
12
+ /** The shop's mailer (from the environment, or the tests'): set by the module. */
13
+ let shopMailer;
14
+ export function setShopMailer(mailer) {
15
+ shopMailer = mailer;
16
+ }
17
+ /** The email a visitor leaves on their cart, for one reminder if they leave it. */
18
+ export async function setContact(env, id, email) {
19
+ const clean = email.trim().slice(0, 200);
20
+ if (!EMAIL.test(clean))
21
+ throw new HttpProblem(422, 'invalid-input', 'Invalid email', 'An email address.');
22
+ await env
23
+ .model('sale.order')
24
+ .browse([id])
25
+ .write({ contactEmail: clean });
26
+ await env.flush();
27
+ }
28
+ /**
29
+ * Reminds the carts of the company's shops left longer than their site says, with an email and goods, once each: a
30
+ * new recovery code (only its hash is kept) in a link to the site's `/cart/recover`. Sent after the commit; returns
31
+ * how many were reminded.
32
+ */
33
+ export async function remindAbandoned(env, now = new Date()) {
34
+ const sites = await (await env
35
+ .model('website.site')
36
+ .search({ where: { shop: true, abandonedHours: { gt: 0 } } })).load({});
37
+ let reminded = 0;
38
+ for (const site of sites) {
39
+ if (site.domain === null || site.domain === '')
40
+ continue;
41
+ const before = new Date(now.getTime() - site.abandonedHours * 3_600_000);
42
+ const carts = await (await env.model('sale.order').search({
43
+ where: {
44
+ website: site.id,
45
+ state: 'draft',
46
+ placedAt: { isNull: true },
47
+ contactEmail: { isNull: false },
48
+ remindedAt: { isNull: true },
49
+ updatedAt: { lt: before },
50
+ },
51
+ limit: 200,
52
+ })).load({ lines: true, currency: true });
53
+ for (const cart of carts) {
54
+ const goods = [...cart.lines].filter((l) => !l.isDelivery && !l.isDiscount);
55
+ if (goods.length === 0 || cart.contactEmail === null)
56
+ continue;
57
+ const code = newCartToken();
58
+ await env
59
+ .model('sale.order')
60
+ .browse([cart.id])
61
+ .write({ recoveryToken: hashToken(code), remindedAt: now });
62
+ const bangla = site.lang === 'bn';
63
+ const url = `https://${site.domain}/cart/recover?code=${encodeURIComponent(code)}`;
64
+ const mail = layout({
65
+ title: bangla ? 'আপনার কার্ট অপেক্ষা করছে' : 'Your cart is waiting',
66
+ paragraphs: [
67
+ bangla
68
+ ? `${site.name}-এ আপনার কার্টে রাখা পণ্যগুলো:`
69
+ : `What you left in your cart at ${site.name}:`,
70
+ ...goods.map((l) => `${l.quantity.toString()} × ${l.name}`),
71
+ ],
72
+ action: { label: bangla ? 'কার্টে ফিরে যান' : 'Back to your cart', url },
73
+ lang: bangla ? 'bn' : 'en',
74
+ });
75
+ const to = cart.contactEmail;
76
+ const subject = bangla ? 'আপনার কার্ট অপেক্ষা করছে' : `Your cart at ${site.name} is waiting`;
77
+ const mailer = shopMailer;
78
+ if (mailer !== undefined)
79
+ env.afterCommit(async () => {
80
+ await mailer
81
+ .send({ to, subject, html: mail.html, text: mail.text })
82
+ .catch(() => undefined);
83
+ });
84
+ reminded += 1;
85
+ }
86
+ }
87
+ await env.flush();
88
+ return reminded;
89
+ }
90
+ /** A reminder's code restores its cart: a new token for it (the old one stops working); null when unknown. */
91
+ export async function recoverCart(env, site, code) {
92
+ if (code === '' || code.length > 100)
93
+ return null;
94
+ const [id] = (await env.model('sale.order').search({
95
+ where: {
96
+ website: site.id,
97
+ recoveryToken: hashToken(code),
98
+ state: 'draft',
99
+ placedAt: { isNull: true },
100
+ },
101
+ limit: 1,
102
+ })).ids;
103
+ if (id === undefined)
104
+ return null;
105
+ const token = newCartToken();
106
+ await env
107
+ .model('sale.order')
108
+ .browse([id])
109
+ .write({ cartToken: hashToken(token), recoveryToken: null });
110
+ await env.flush();
111
+ return token;
112
+ }
113
+ /**
114
+ * The site's sitemap: its published pages (the default language at their path, the other at `/<lang><path>`) and the
115
+ * products on its shop (at `/shop/p/<id>`), each with when it last changed. Null without the site's domain.
116
+ */
117
+ export async function sitemap(env, site) {
118
+ const [s] = await env
119
+ .model('website.site')
120
+ .browse([site.id])
121
+ .load({});
122
+ if (s === undefined || s.domain === null || s.domain === '')
123
+ return null;
124
+ const base = `https://${s.domain.replace(/^https?:\/\//, '').replace(/\/$/, '')}`;
125
+ const day = (v) => v instanceof Date ? v.toISOString().slice(0, 10) : String(v ?? '').slice(0, 10);
126
+ const pages = await (await env
127
+ .model('website.page')
128
+ .search({ where: { site: site.id, state: 'published' }, order: ['path asc'] })).load({});
129
+ const products = await (await env.model('product.product').search({
130
+ where: { published: true, saleOk: true },
131
+ order: ['shopSequence asc', 'id asc'],
132
+ limit: 5000,
133
+ })).load({});
134
+ const urls = [
135
+ ...[...pages].map((p) => ({
136
+ loc: `${base}${p.lang === s.lang ? '' : `/${p.lang}`}${p.path === '/' && p.lang !== s.lang ? '' : p.path}`,
137
+ lastmod: day(p.updatedAt),
138
+ })),
139
+ ...[...products].map((p) => ({ loc: `${base}/shop/p/${p.id}`, lastmod: day(p.updatedAt) })),
140
+ ];
141
+ return `<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n${urls
142
+ .map((u) => ` <url><loc>${escapeXml(u.loc)}</loc><lastmod>${u.lastmod}</lastmod></url>`)
143
+ .join('\n')}\n</urlset>\n`;
144
+ }
145
+ /** The picture of a product on the shop (`width`: its thumbnail of that width, when one was made). */
146
+ export async function productImage(env, product, width) {
147
+ const [p] = await (await env.model('product.product').search({
148
+ where: { id: orm.asId(product, 'product.product'), published: true, saleOk: true },
149
+ limit: 1,
150
+ })).load({});
151
+ if (p === undefined || p.image === null)
152
+ return null;
153
+ const attachments = env.model('storage.attachment');
154
+ let id = p.image.id;
155
+ if (width !== undefined) {
156
+ const variant = await attachments.search({ where: { variantOf: id, width }, limit: 1 });
157
+ id = variant.ids[0] ?? id;
158
+ }
159
+ const [a] = [...(await attachments.browse([id]).load(['key', 'mime', 'size', 'name']))];
160
+ if (a === undefined || !a.mime.startsWith('image/'))
161
+ return null;
162
+ return { key: a.key, mime: a.mime, size: a.size, name: a.name };
163
+ }
@@ -0,0 +1,2 @@
1
+ /** Bangla for the module's labels, keyed by their English text (RFC 0023 §3.1; `pnpm i18n:extract`). */
2
+ export declare const bn: Readonly<Record<string, string>>;
@@ -0,0 +1,132 @@
1
+ /** Bangla for the module's labels, keyed by their English text (RFC 0023 §3.1; `pnpm i18n:extract`). */
2
+ export const bn = {
3
+ 'A code is 2 to 40 capital letters, digits, dashes or underscores (EID10).': 'কোডে ২ থেকে ৪০টি বড় হাতের অক্ষর, অঙ্ক, ড্যাশ বা আন্ডারস্কোর থাকে (EID10)।',
4
+ 'A coupon ends on or after it starts.': 'কুপন শুরুর দিন বা তার পরে শেষ হয়।',
5
+ 'A coupon gives zero or more (a percentage up to 100), from zero or more.': 'কুপন শূন্য বা তার বেশি দেয় (শতাংশ হলে ১০০ পর্যন্ত), শূন্য বা তার বেশি থেকে।',
6
+ 'A fixed fee; by weight, the first kg and each one after it; by zone, a fee inside the listed cities and one outside.': 'নির্দিষ্ট ফি; ওজন অনুযায়ী হলে প্রথম কেজি ও পরের প্রতি কেজি; এলাকা অনুযায়ী হলে তালিকাভুক্ত শহরের ভেতরে একটি ফি এবং বাইরে আরেকটি।',
7
+ 'A percentage off the goods, an amount off, or free delivery — from a minimum, typed at checkout.': 'পণ্যে শতাংশ ছাড়, নির্দিষ্ট অঙ্ক ছাড় বা ফ্রি ডেলিভারি — একটি ন্যূনতম অঙ্ক থেকে, চেকআউটে লিখে দিতে হয়।',
8
+ Active: 'সক্রিয়',
9
+ Address: 'ঠিকানা',
10
+ 'Amount off': 'অঙ্ক ছাড়',
11
+ 'Amounts are zero or more.': 'অঙ্ক শূন্য বা তার বেশি হতে হবে।',
12
+ 'Another coupon has this code.': 'অন্য একটি কুপনে এই কোড আছে।',
13
+ 'Book the courier': 'কুরিয়ার বুক করুন',
14
+ Booked: 'হিসাবভুক্ত',
15
+ 'Booked with the courier, then moved along by what it says; the cash to collect is collected on delivery.': 'কুরিয়ারে বুক করা হয়, তারপর কুরিয়ারের তথ্য অনুযায়ী এগোয়; আদায়যোগ্য নগদ সরবরাহের সময় আদায় হয়।',
16
+ 'By weight': 'ওজন অনুযায়ী',
17
+ 'By zone': 'এলাকা অনুযায়ী',
18
+ Cancel: 'বাতিল করুন',
19
+ 'Cancel this shipment with the courier?': 'কুরিয়ারের কাছে এই চালান (শিপমেন্ট) বাতিল করবেন?',
20
+ Cancelled: 'বাতিল',
21
+ Carrier: 'বাহক',
22
+ 'Cart email': 'কার্টের ইমেইল',
23
+ 'Cart token': 'কার্ট টোকেন',
24
+ 'Cash collected': 'আদায়কৃত নগদ',
25
+ 'Cash on delivery': 'ক্যাশ অন ডেলিভারি',
26
+ 'Cash on delivery up to': 'ক্যাশ অন ডেলিভারির সর্বোচ্চ সীমা',
27
+ 'Cash to collect': 'আদায়যোগ্য নগদ',
28
+ City: 'শহর',
29
+ Code: 'কোড',
30
+ 'Collected at': 'আদায়ের সময়',
31
+ Company: 'প্রতিষ্ঠান',
32
+ Consignment: 'কনসাইনমেন্ট',
33
+ Coupon: 'কুপন',
34
+ 'Coupon discount': 'কুপন ছাড়',
35
+ Coupons: 'কুপন',
36
+ Courier: 'কুরিয়ার',
37
+ 'Created At': 'তৈরির সময়',
38
+ 'Created By': 'তৈরি করেছেন',
39
+ 'Customer note': 'গ্রাহকের নোট',
40
+ 'Deliver to': 'যেখানে সরবরাহ হবে',
41
+ Delivered: 'সরবরাহকৃত',
42
+ 'Delivery fee': 'সরবরাহ ফি',
43
+ 'Delivery method': 'সরবরাহ পদ্ধতি',
44
+ 'Delivery methods': 'সরবরাহ পদ্ধতি',
45
+ Description: 'বিবরণ',
46
+ 'Discount product': 'ছাড়ের পণ্য',
47
+ 'Display Name': 'প্রদর্শিত নাম',
48
+ 'Each further kg': 'পরের প্রতি কেজি',
49
+ Fee: 'ফি',
50
+ 'Fee by': 'ফি যে অনুযায়ী',
51
+ 'Fee inside': 'ভেতরের ফি',
52
+ 'Fee outside': 'বাইরের ফি',
53
+ 'Fee product': 'ফি-এর পণ্য',
54
+ 'Fees are zero or more.': 'ফি শূন্য বা তার বেশি হতে হবে।',
55
+ 'Few left from': 'অল্প বাকি যখন',
56
+ 'Fixed fee': 'নির্দিষ্ট ফি',
57
+ 'Follows the parcel from booking with the courier through pick-up and transit to delivery or return.': 'কুরিয়ারে বুকিং থেকে শুরু করে সংগ্রহ ও পরিবহন হয়ে সরবরাহ বা ফেরত পর্যন্ত পার্সেলটির অবস্থা।',
58
+ 'Free delivery': 'ফ্রি ডেলিভারি',
59
+ 'Free from': 'ফ্রি যখন থেকে',
60
+ From: 'থেকে',
61
+ Gives: 'দেয়',
62
+ 'How the delivery fee is worked out: one fixed fee, by the parcel’s weight or by whether the city is inside the zone.': 'সরবরাহ ফি কীভাবে হিসাব হয়: একটি নির্দিষ্ট ফি, পার্সেলের ওজন অনুযায়ী, অথবা শহরটি এলাকার ভেতরে কি না তা অনুযায়ী।',
63
+ ID: 'আইডি',
64
+ 'In transit': 'পথে',
65
+ 'Inside: cities': 'ভেতরে: শহর',
66
+ Label: 'লেবেল',
67
+ Name: 'নাম',
68
+ 'None (delivered by hand)': 'কোনোটি নয় (হাতে সরবরাহ)',
69
+ Note: 'নোট',
70
+ 'On the shop': 'দোকানে',
71
+ 'On the way': 'পথে আছে',
72
+ 'Once per customer': 'প্রতি গ্রাহক একবার',
73
+ 'Online payments': 'অনলাইন পেমেন্ট',
74
+ Order: 'অর্ডার',
75
+ 'Page {{page}} of {{pages}}': 'পৃষ্ঠা {{page}} / {{pages}}',
76
+ 'Paid online': 'অনলাইনে পরিশোধিত',
77
+ Pathao: 'Pathao',
78
+ Payment: 'পেমেন্ট',
79
+ 'Percentage off the goods': 'পণ্যে শতাংশ ছাড়',
80
+ Phone: 'ফোন',
81
+ 'Picked up': 'সংগৃহীত',
82
+ 'Placed at': 'অর্ডারের সময়',
83
+ Recipient: 'প্রাপক',
84
+ 'Recovery code': 'পুনরুদ্ধার কোড',
85
+ RedX: 'RedX',
86
+ Reference: 'রেফারেন্স',
87
+ 'Related products': 'সম্পর্কিত পণ্য',
88
+ 'Remind abandoned carts after (h)': 'ফেলে রাখা কার্টের রিমাইন্ডার (ঘণ্টা পরে)',
89
+ 'Reminded at': 'মনে করানোর সময়',
90
+ Returned: 'ফেরত এসেছে',
91
+ 'Sales order': 'বিক্রয় আদেশ',
92
+ 'Search description': 'সার্চ বিবরণ',
93
+ 'Search title': 'সার্চ শিরোনাম',
94
+ 'Sell beyond stock': 'মজুদের বেশি বিক্রয়',
95
+ Sequence: 'ক্রম',
96
+ Shipment: 'চালান (শিপমেন্ট)',
97
+ 'Shipment {{name}}': 'চালান (শিপমেন্ট) {{name}}',
98
+ 'Shipment delivered': 'চালান (শিপমেন্ট) সরবরাহ হয়েছে',
99
+ 'Shipment returned': 'চালান (শিপমেন্ট) ফেরত এসেছে',
100
+ Shipments: 'চালান (শিপমেন্ট)',
101
+ 'Shipping label': 'শিপিং লেবেল',
102
+ Shop: 'দোকান',
103
+ 'Shop description': 'দোকানের বিবরণ',
104
+ 'Shop manager': 'দোকান ব্যবস্থাপক',
105
+ 'Shop order': 'দোকানের অর্ডার',
106
+ 'Shop orders': 'দোকানের অর্ডার',
107
+ 'Shop orders for': 'দোকানের অর্ডার যার জন্য',
108
+ 'Shop products': 'দোকানের পণ্য',
109
+ 'Shop visitor': 'দোকানের দর্শনার্থী',
110
+ Site: 'সাইট',
111
+ State: 'অবস্থা',
112
+ Status: 'অবস্থা',
113
+ Steadfast: 'Steadfast',
114
+ 'Test courier': 'পরীক্ষামূলক কুরিয়ার',
115
+ 'The courier service that books and delivers the parcels of this method.': 'যে কুরিয়ার সেবা এই পদ্ধতির পার্সেল বুক করে ও পৌঁছে দেয়।',
116
+ 'The courier service the parcel is booked with.': 'যে কুরিয়ার সেবায় পার্সেলটি বুক করা হয়েছে।',
117
+ To: 'পর্যন্ত',
118
+ 'To book': 'বুক করতে হবে',
119
+ Tracking: 'ট্র্যাকিং',
120
+ 'Tracking event': 'ট্র্যাকিং ঘটনা',
121
+ 'Updated At': 'হালনাগাদের সময়',
122
+ 'Updated By': 'হালনাগাদ করেছেন',
123
+ Used: 'ব্যবহৃত',
124
+ 'Uses at most': 'সর্বোচ্চ ব্যবহার',
125
+ 'Valid from': 'কার্যকর শুরু',
126
+ 'Valid until': 'কার্যকর পর্যন্ত',
127
+ Value: 'মান',
128
+ 'Weight (kg)': 'ওজন (কেজি)',
129
+ 'What it gives': 'যা দেয়',
130
+ 'What the coupon gives: a percentage off the goods, an amount off or free delivery.': 'কুপনটি কী দেয়: পণ্যের ওপর শতাংশ ছাড়, নির্দিষ্ট অঙ্কের ছাড় বা বিনা খরচে সরবরাহ।',
131
+ When: 'কখন',
132
+ };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * `shutro-erp/website_sale` (RFC 0024 §2.7): the **Shop** on a Sites site. Products published with a description in English
4
+ * and Bangla; delivery methods with fees (fixed, by weight, by zone — Dhaka or outside — free above an amount); a
5
+ * public API for a storefront (the Next.js site, or any other): the catalogue, a cart held by a secret token, the
6
+ * delivery methods with their fee, and checkout with cash on delivery or an online payment (RFC 0017 providers),
7
+ * which confirms, invoices and pays the order once the provider confirms. No sign-in; rate limited per address as
8
+ * every public route is; prices always the server's. The cart's token travels in the `x-cart-token` header.
9
+ *
10
+ * - `GET /api/v1/public/shop/:site/products?q=&category=&min=&max=&sort=price|-price|name|new&page=&lang=`
11
+ * - `GET /api/v1/public/shop/:site/products/:id?lang=` a product's page with related products
12
+ * - `GET /api/v1/public/shop/:site/categories?lang=`
13
+ * - `POST /api/v1/public/shop/:site/cart` a new cart → `{ token }`
14
+ * - `GET /api/v1/public/shop/:site/cart` the cart (lines, fee, taxes, total)
15
+ * - `PUT /api/v1/public/shop/:site/cart/lines` `{ product, quantity }` (0 removes)
16
+ * - `GET /api/v1/public/shop/:site/carriers?city=` the delivery methods with their fee for the cart
17
+ * - `GET /api/v1/public/shop/:site/payments` the online payment providers offered
18
+ * - `POST /api/v1/public/shop/:site/checkout` `{ name, email, phone, street, city, carrier,
19
+ * payment: 'cod' | provider id, note?, returnUrl? }`
20
+ * - `GET /api/v1/public/shop/:site/order` the placed order of the token: its state, payment
21
+ * and shipments
22
+ * - `PUT /api/v1/public/shop/:site/cart/coupon` `{ code }` (empty takes it off)
23
+ * - `PUT /api/v1/public/shop/:site/cart/contact` `{ email }`: one reminder if the cart is left
24
+ * - `POST /api/v1/public/shop/:site/cart/recover` `{ code }` from the reminder → `{ token }`
25
+ * - `GET /api/v1/public/shop/:site/products/:id/image?w=256` a published product's picture
26
+ * - `GET /api/v1/public/shop/:site/sitemap.xml` the site's pages and products for search engines
27
+ */
28
+ import { type Mailer } from '../mail/index.js';
29
+ import { defineModule } from '../modules-sdk/index.js';
30
+ import { type ModuleContext } from '../server/index.js';
31
+ import { type Worker } from '../server/orm.js';
32
+ import { type CourierAdapter } from './couriers.js';
33
+ export { type Booked, type CourierAdapter, courierOf, type FakeCourier, fakeCourier, type Parcel, type ParcelStatus, setCouriers, type Tracking, testCourier, } from './couriers.js';
34
+ export { recoverCart, remindAbandoned, setContact, sitemap } from './growth.js';
35
+ export { COURIERS, DeliveryCarrier, DeliveryShipment, DeliveryShipmentEvent, feeOf, hashToken, LineShop, OrderShop, ProductShop, ShopCoupon, SiteShop, TransactionOrder, websiteSaleShutro, } from './module.js';
36
+ export { draftShipments, refreshShipments, trackingOf } from './shipments.js';
37
+ export { type CheckoutInput, checkout, setDelivery, setLine } from './shop.js';
38
+ /** The subscriber that makes the draft shipments of confirmed shop orders; tests `drain()` it, the server starts it. */
39
+ export declare function shipmentWorker(context: Pick<ModuleContext, 'shutro'>): Worker;
40
+ export interface ShopOptions {
41
+ /** The couriers by code (tests; default: the test courier). */
42
+ readonly couriers?: ReadonlyMap<string, CourierAdapter>;
43
+ /** Who sends the reminders; default: SMTP from the environment (`SMTP_URL`), none without it. */
44
+ readonly mailer?: Mailer | undefined;
45
+ }
46
+ /** The Shop with explicit options (tests, installations wiring their couriers). */
47
+ export declare function websiteSaleModule(options?: ShopOptions): ReturnType<typeof defineModule>;
48
+ /** The Shop (the test courier; Pathao, Steadfast and RedX adapters come with their sandbox credentials). */
49
+ export declare const websiteSale: ReturnType<typeof defineModule>;