shutro-erp 0.3.3 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/dist/account_portal/.kosh/bindings.js +1 -1
  2. package/dist/account_portal/.kosh/schema.d.ts +181 -3
  3. package/dist/account_portal/module.d.ts +359 -6
  4. package/dist/accounting/.kosh/bindings.js +1 -1
  5. package/dist/accounting/.kosh/schema.d.ts +181 -3
  6. package/dist/accounting/index.js +214 -2
  7. package/dist/accounting/module.d.ts +217 -5
  8. package/dist/accounting/module.js +23 -2
  9. package/dist/calendar/.kosh/bindings.d.ts +22 -0
  10. package/dist/calendar/.kosh/bindings.js +15 -0
  11. package/dist/calendar/.kosh/schema.d.ts +795 -0
  12. package/dist/calendar/demo.d.ts +6 -0
  13. package/dist/calendar/demo.js +24 -0
  14. package/dist/calendar/index.d.ts +3 -0
  15. package/dist/calendar/index.js +291 -0
  16. package/dist/calendar/module.d.ts +1705 -0
  17. package/dist/calendar/module.js +180 -0
  18. package/dist/cli/init.js +48 -0
  19. package/dist/cli/templates.d.ts +1 -1
  20. package/dist/cli/templates.js +137 -0
  21. package/dist/contacts/.kosh/bindings.js +1 -1
  22. package/dist/contacts/.kosh/schema.d.ts +205 -3
  23. package/dist/contacts/demo.js +30 -1
  24. package/dist/contacts/index.d.ts +1 -1
  25. package/dist/contacts/index.js +155 -9
  26. package/dist/contacts/module.d.ts +338 -2
  27. package/dist/contacts/module.js +82 -5
  28. package/dist/crm/.kosh/bindings.d.ts +22 -0
  29. package/dist/crm/.kosh/bindings.js +15 -0
  30. package/dist/crm/.kosh/schema.d.ts +799 -0
  31. package/dist/crm/demo.d.ts +6 -0
  32. package/dist/crm/demo.js +45 -0
  33. package/dist/crm/index.d.ts +3 -0
  34. package/dist/crm/index.js +361 -0
  35. package/dist/crm/module.d.ts +1843 -0
  36. package/dist/crm/module.js +207 -0
  37. package/dist/event/.kosh/bindings.d.ts +22 -0
  38. package/dist/event/.kosh/bindings.js +15 -0
  39. package/dist/event/.kosh/schema.d.ts +843 -0
  40. package/dist/event/demo.d.ts +6 -0
  41. package/dist/event/demo.js +65 -0
  42. package/dist/event/index.d.ts +14 -0
  43. package/dist/event/index.js +333 -0
  44. package/dist/event/mails.d.ts +15 -0
  45. package/dist/event/mails.js +112 -0
  46. package/dist/event/module.d.ts +2800 -0
  47. package/dist/event/module.js +323 -0
  48. package/dist/event/web/CheckInBox.d.ts +9 -0
  49. package/dist/event/web/CheckInBox.js +87 -0
  50. package/dist/event/web/index.d.ts +11 -0
  51. package/dist/event/web/index.js +16 -0
  52. package/dist/event/web/messages.d.ts +2 -0
  53. package/dist/event/web/messages.js +23 -0
  54. package/dist/event_account/.kosh/bindings.d.ts +22 -0
  55. package/dist/event_account/.kosh/bindings.js +15 -0
  56. package/dist/event_account/.kosh/schema.d.ts +1639 -0
  57. package/dist/event_account/index.d.ts +3 -0
  58. package/dist/event_account/index.js +28 -0
  59. package/dist/event_account/module.d.ts +6968 -0
  60. package/dist/event_account/module.js +90 -0
  61. package/dist/hr/.kosh/bindings.d.ts +22 -0
  62. package/dist/hr/.kosh/bindings.js +15 -0
  63. package/dist/hr/.kosh/schema.d.ts +878 -0
  64. package/dist/hr/demo.d.ts +6 -0
  65. package/dist/hr/demo.js +60 -0
  66. package/dist/hr/index.d.ts +3 -0
  67. package/dist/hr/index.js +483 -0
  68. package/dist/hr/module.d.ts +2611 -0
  69. package/dist/hr/module.js +350 -0
  70. package/dist/integrations/index.js +12 -0
  71. package/dist/integrations/web/OAuthAppsPage.d.ts +9 -0
  72. package/dist/integrations/web/OAuthAppsPage.js +79 -0
  73. package/dist/integrations/web/index.d.ts +1 -0
  74. package/dist/integrations/web/index.js +3 -0
  75. package/dist/integrations/web/messages.js +58 -0
  76. package/dist/l10n_bd/.kosh/bindings.js +1 -1
  77. package/dist/l10n_bd/.kosh/schema.d.ts +181 -3
  78. package/dist/l10n_bd/module.d.ts +359 -6
  79. package/dist/l10n_in/.kosh/bindings.js +1 -1
  80. package/dist/l10n_in/.kosh/schema.d.ts +181 -3
  81. package/dist/l10n_in/module.d.ts +380 -7
  82. package/dist/maintenance/.kosh/bindings.d.ts +22 -0
  83. package/dist/maintenance/.kosh/bindings.js +15 -0
  84. package/dist/maintenance/.kosh/schema.d.ts +911 -0
  85. package/dist/maintenance/demo.d.ts +6 -0
  86. package/dist/maintenance/demo.js +60 -0
  87. package/dist/maintenance/index.d.ts +3 -0
  88. package/dist/maintenance/index.js +422 -0
  89. package/dist/maintenance/module.d.ts +3545 -0
  90. package/dist/maintenance/module.js +446 -0
  91. package/dist/maintenance_stock/.kosh/bindings.d.ts +22 -0
  92. package/dist/maintenance_stock/.kosh/bindings.js +15 -0
  93. package/dist/maintenance_stock/.kosh/schema.d.ts +1371 -0
  94. package/dist/maintenance_stock/index.d.ts +9 -0
  95. package/dist/maintenance_stock/index.js +52 -0
  96. package/dist/maintenance_stock/module.d.ts +6953 -0
  97. package/dist/maintenance_stock/module.js +192 -0
  98. package/dist/messaging/web/index.js +1 -1
  99. package/dist/modules-sdk/index.d.ts +1 -1
  100. package/dist/modules-sdk/manifest.d.ts +70 -0
  101. package/dist/modules-sdk/manifest.js +35 -1
  102. package/dist/mrp/.kosh/bindings.d.ts +22 -0
  103. package/dist/mrp/.kosh/bindings.js +15 -0
  104. package/dist/mrp/.kosh/schema.d.ts +1378 -0
  105. package/dist/mrp/demo.d.ts +7 -0
  106. package/dist/mrp/demo.js +42 -0
  107. package/dist/mrp/index.d.ts +3 -0
  108. package/dist/mrp/index.js +392 -0
  109. package/dist/mrp/module.d.ts +8608 -0
  110. package/dist/mrp/module.js +695 -0
  111. package/dist/mrp_account/.kosh/bindings.d.ts +22 -0
  112. package/dist/mrp_account/.kosh/bindings.js +15 -0
  113. package/dist/mrp_account/.kosh/schema.d.ts +2106 -0
  114. package/dist/mrp_account/index.d.ts +3 -0
  115. package/dist/mrp_account/index.js +22 -0
  116. package/dist/mrp_account/module.d.ts +20840 -0
  117. package/dist/mrp_account/module.js +123 -0
  118. package/dist/notify/web/index.js +1 -1
  119. package/dist/payment/.kosh/bindings.js +1 -1
  120. package/dist/payment/.kosh/schema.d.ts +181 -3
  121. package/dist/payment/module.d.ts +359 -6
  122. package/dist/portal/.kosh/bindings.js +1 -1
  123. package/dist/portal/.kosh/schema.d.ts +205 -3
  124. package/dist/portal/module.d.ts +166 -2
  125. package/dist/pos/.kosh/bindings.d.ts +22 -0
  126. package/dist/pos/.kosh/bindings.js +15 -0
  127. package/dist/pos/.kosh/schema.d.ts +1690 -0
  128. package/dist/pos/accounting.d.ts +10 -0
  129. package/dist/pos/accounting.js +149 -0
  130. package/dist/pos/demo.d.ts +6 -0
  131. package/dist/pos/demo.js +90 -0
  132. package/dist/pos/index.d.ts +9 -0
  133. package/dist/pos/index.js +349 -0
  134. package/dist/pos/module.d.ts +9636 -0
  135. package/dist/pos/module.js +423 -0
  136. package/dist/pos/routes.d.ts +39 -0
  137. package/dist/pos/routes.js +368 -0
  138. package/dist/pos/web/Register.d.ts +9 -0
  139. package/dist/pos/web/Register.js +252 -0
  140. package/dist/pos/web/index.d.ts +11 -0
  141. package/dist/pos/web/index.js +16 -0
  142. package/dist/pos/web/messages.d.ts +2 -0
  143. package/dist/pos/web/messages.js +87 -0
  144. package/dist/pos_stock/.kosh/bindings.d.ts +22 -0
  145. package/dist/pos_stock/.kosh/bindings.js +15 -0
  146. package/dist/pos_stock/.kosh/schema.d.ts +2015 -0
  147. package/dist/pos_stock/index.d.ts +9 -0
  148. package/dist/pos_stock/index.js +35 -0
  149. package/dist/pos_stock/module.d.ts +11935 -0
  150. package/dist/pos_stock/module.js +115 -0
  151. package/dist/product/.kosh/bindings.js +1 -1
  152. package/dist/product/.kosh/schema.d.ts +178 -1
  153. package/dist/product/index.js +81 -4
  154. package/dist/product/module.d.ts +43 -1
  155. package/dist/product/module.js +9 -2
  156. package/dist/project/.kosh/bindings.js +1 -1
  157. package/dist/project/.kosh/schema.d.ts +181 -3
  158. package/dist/project/index.js +147 -7
  159. package/dist/project/module.d.ts +210 -2
  160. package/dist/project/module.js +52 -5
  161. package/dist/project_portal/.kosh/bindings.js +1 -1
  162. package/dist/project_portal/.kosh/schema.d.ts +181 -3
  163. package/dist/project_portal/module.d.ts +353 -4
  164. package/dist/purchase/.kosh/bindings.js +1 -1
  165. package/dist/purchase/.kosh/schema.d.ts +181 -3
  166. package/dist/purchase/index.js +163 -3
  167. package/dist/purchase/module.d.ts +215 -3
  168. package/dist/purchase/module.js +21 -3
  169. package/dist/purchase_account/.kosh/bindings.js +1 -1
  170. package/dist/purchase_account/.kosh/schema.d.ts +182 -3
  171. package/dist/purchase_account/index.js +26 -1
  172. package/dist/purchase_account/module.d.ts +393 -7
  173. package/dist/purchase_portal/.kosh/bindings.js +1 -1
  174. package/dist/purchase_portal/.kosh/schema.d.ts +181 -3
  175. package/dist/purchase_portal/module.d.ts +366 -5
  176. package/dist/purchase_stock/.kosh/bindings.d.ts +22 -0
  177. package/dist/purchase_stock/.kosh/bindings.js +15 -0
  178. package/dist/purchase_stock/.kosh/schema.d.ts +1310 -0
  179. package/dist/purchase_stock/index.d.ts +7 -0
  180. package/dist/purchase_stock/index.js +91 -0
  181. package/dist/purchase_stock/module.d.ts +6763 -0
  182. package/dist/purchase_stock/module.js +144 -0
  183. package/dist/purchase_stock_account/.kosh/bindings.d.ts +22 -0
  184. package/dist/purchase_stock_account/.kosh/bindings.js +15 -0
  185. package/dist/purchase_stock_account/.kosh/schema.d.ts +1959 -0
  186. package/dist/purchase_stock_account/index.d.ts +3 -0
  187. package/dist/purchase_stock_account/index.js +24 -0
  188. package/dist/purchase_stock_account/module.d.ts +35366 -0
  189. package/dist/purchase_stock_account/module.js +162 -0
  190. package/dist/recruitment/.kosh/bindings.d.ts +22 -0
  191. package/dist/recruitment/.kosh/bindings.js +15 -0
  192. package/dist/recruitment/.kosh/schema.d.ts +990 -0
  193. package/dist/recruitment/demo.d.ts +6 -0
  194. package/dist/recruitment/demo.js +45 -0
  195. package/dist/recruitment/index.d.ts +3 -0
  196. package/dist/recruitment/index.js +385 -0
  197. package/dist/recruitment/module.d.ts +3247 -0
  198. package/dist/recruitment/module.js +193 -0
  199. package/dist/recruitment/web/HireButton.d.ts +9 -0
  200. package/dist/recruitment/web/HireButton.js +32 -0
  201. package/dist/recruitment/web/index.d.ts +11 -0
  202. package/dist/recruitment/web/index.js +16 -0
  203. package/dist/recruitment/web/messages.d.ts +2 -0
  204. package/dist/recruitment/web/messages.js +19 -0
  205. package/dist/reporting/documents.d.ts +5 -0
  206. package/dist/reporting/documents.js +28 -1
  207. package/dist/reporting/index.d.ts +1 -1
  208. package/dist/reporting/index.js +4 -2
  209. package/dist/reporting/models.js +9 -0
  210. package/dist/reporting/overviews.d.ts +16 -0
  211. package/dist/reporting/overviews.js +56 -0
  212. package/dist/reporting/routes-documents.js +1 -1
  213. package/dist/reporting/routes.js +138 -80
  214. package/dist/reporting/web/DashboardView.d.ts +11 -0
  215. package/dist/reporting/web/DashboardView.js +2 -2
  216. package/dist/reporting/web/DesignerView.js +5 -0
  217. package/dist/reporting/web/Overview.d.ts +9 -0
  218. package/dist/reporting/web/Overview.js +53 -0
  219. package/dist/reporting/web/index.d.ts +1 -0
  220. package/dist/reporting/web/index.js +4 -1
  221. package/dist/reporting/web/messages.js +9 -0
  222. package/dist/sale_account/.kosh/bindings.js +1 -1
  223. package/dist/sale_account/.kosh/schema.d.ts +186 -3
  224. package/dist/sale_account/index.js +22 -1
  225. package/dist/sale_account/module.d.ts +461 -7
  226. package/dist/sale_portal/.kosh/bindings.js +1 -1
  227. package/dist/sale_portal/.kosh/schema.d.ts +185 -3
  228. package/dist/sale_portal/module.d.ts +434 -5
  229. package/dist/sale_project/.kosh/bindings.js +1 -1
  230. package/dist/sale_project/.kosh/schema.d.ts +187 -3
  231. package/dist/sale_project/module.d.ts +476 -6
  232. package/dist/sale_stock/.kosh/bindings.d.ts +22 -0
  233. package/dist/sale_stock/.kosh/bindings.js +15 -0
  234. package/dist/sale_stock/.kosh/schema.d.ts +1228 -0
  235. package/dist/sale_stock/index.d.ts +7 -0
  236. package/dist/sale_stock/index.js +84 -0
  237. package/dist/sale_stock/module.d.ts +6791 -0
  238. package/dist/sale_stock/module.js +146 -0
  239. package/dist/sales/.kosh/bindings.js +1 -1
  240. package/dist/sales/.kosh/schema.d.ts +185 -3
  241. package/dist/sales/index.js +191 -4
  242. package/dist/sales/module.d.ts +355 -3
  243. package/dist/sales/module.js +78 -3
  244. package/dist/server/api/metadata.d.ts +5 -0
  245. package/dist/server/api/metadata.js +5 -0
  246. package/dist/server/api/rest.js +64 -1
  247. package/dist/server/api/views.js +1 -0
  248. package/dist/server/app-settings.d.ts +7 -0
  249. package/dist/server/app-settings.js +10 -0
  250. package/dist/server/auth/base.js +85 -0
  251. package/dist/server/auth/oauth.d.ts +21 -0
  252. package/dist/server/auth/oauth.js +579 -0
  253. package/dist/server/auth/service.d.ts +4 -0
  254. package/dist/server/auth/service.js +17 -0
  255. package/dist/server/identity.d.ts +2 -0
  256. package/dist/server/images.d.ts +12 -0
  257. package/dist/server/images.js +139 -0
  258. package/dist/server/index.d.ts +2 -0
  259. package/dist/server/index.js +2 -0
  260. package/dist/server/server.d.ts +4 -0
  261. package/dist/server/server.js +9 -1
  262. package/dist/settings/app-settings.d.ts +2 -0
  263. package/dist/settings/app-settings.js +518 -0
  264. package/dist/settings/company.js +3 -1
  265. package/dist/settings/index.d.ts +1 -0
  266. package/dist/settings/index.js +15 -0
  267. package/dist/settings/people.js +32 -6
  268. package/dist/settings/web/AppSettingsPage.d.ts +11 -0
  269. package/dist/settings/web/AppSettingsPage.js +210 -0
  270. package/dist/settings/web/CompaniesPage.js +2 -2
  271. package/dist/settings/web/CompanyPage.js +13 -2
  272. package/dist/settings/web/ConnectedAppsPage.d.ts +7 -0
  273. package/dist/settings/web/ConnectedAppsPage.js +33 -0
  274. package/dist/settings/web/OverviewPage.js +28 -4
  275. package/dist/settings/web/PeoplePage.js +23 -18
  276. package/dist/settings/web/ProfilePage.js +9 -7
  277. package/dist/settings/web/index.d.ts +2 -0
  278. package/dist/settings/web/index.js +8 -0
  279. package/dist/settings/web/messages.js +146 -2
  280. package/dist/stock/.kosh/bindings.d.ts +22 -0
  281. package/dist/stock/.kosh/bindings.js +15 -0
  282. package/dist/stock/.kosh/schema.d.ts +1147 -0
  283. package/dist/stock/demo.d.ts +7 -0
  284. package/dist/stock/demo.js +55 -0
  285. package/dist/stock/index.d.ts +3 -0
  286. package/dist/stock/index.js +674 -0
  287. package/dist/stock/module.d.ts +6330 -0
  288. package/dist/stock/module.js +1325 -0
  289. package/dist/stock/web/ScanBox.d.ts +8 -0
  290. package/dist/stock/web/ScanBox.js +90 -0
  291. package/dist/stock/web/index.d.ts +11 -0
  292. package/dist/stock/web/index.js +16 -0
  293. package/dist/stock/web/messages.d.ts +2 -0
  294. package/dist/stock/web/messages.js +25 -0
  295. package/dist/stock_account/.kosh/bindings.d.ts +22 -0
  296. package/dist/stock_account/.kosh/bindings.js +15 -0
  297. package/dist/stock_account/.kosh/schema.d.ts +1875 -0
  298. package/dist/stock_account/index.d.ts +3 -0
  299. package/dist/stock_account/index.js +130 -0
  300. package/dist/stock_account/module.d.ts +10655 -0
  301. package/dist/stock_account/module.js +339 -0
  302. package/dist/storage/attachments.d.ts +5 -0
  303. package/dist/storage/attachments.js +12 -1
  304. package/dist/storage/models.js +3 -0
  305. package/dist/storage/routes.js +13 -2
  306. package/dist/todo/.kosh/bindings.d.ts +22 -0
  307. package/dist/todo/.kosh/bindings.js +15 -0
  308. package/dist/todo/.kosh/schema.d.ts +732 -0
  309. package/dist/todo/demo.d.ts +6 -0
  310. package/dist/todo/demo.js +35 -0
  311. package/dist/todo/index.d.ts +3 -0
  312. package/dist/todo/index.js +187 -0
  313. package/dist/todo/module.d.ts +1180 -0
  314. package/dist/todo/module.js +130 -0
  315. package/dist/trade_finance/.kosh/bindings.d.ts +22 -0
  316. package/dist/trade_finance/.kosh/bindings.js +15 -0
  317. package/dist/trade_finance/.kosh/schema.d.ts +884 -0
  318. package/dist/trade_finance/demo.d.ts +6 -0
  319. package/dist/trade_finance/demo.js +63 -0
  320. package/dist/trade_finance/index.d.ts +3 -0
  321. package/dist/trade_finance/index.js +413 -0
  322. package/dist/trade_finance/module.d.ts +3779 -0
  323. package/dist/trade_finance/module.js +505 -0
  324. package/dist/trade_finance_account/.kosh/bindings.d.ts +22 -0
  325. package/dist/trade_finance_account/.kosh/bindings.js +15 -0
  326. package/dist/trade_finance_account/.kosh/schema.d.ts +1711 -0
  327. package/dist/trade_finance_account/index.d.ts +3 -0
  328. package/dist/trade_finance_account/index.js +92 -0
  329. package/dist/trade_finance_account/module.d.ts +7928 -0
  330. package/dist/trade_finance_account/module.js +244 -0
  331. package/dist/trade_finance_purchase/.kosh/bindings.d.ts +22 -0
  332. package/dist/trade_finance_purchase/.kosh/bindings.js +15 -0
  333. package/dist/trade_finance_purchase/.kosh/schema.d.ts +1153 -0
  334. package/dist/trade_finance_purchase/index.d.ts +8 -0
  335. package/dist/trade_finance_purchase/index.js +50 -0
  336. package/dist/trade_finance_purchase/module.d.ts +4252 -0
  337. package/dist/trade_finance_purchase/module.js +44 -0
  338. package/dist/trade_finance_sale/.kosh/bindings.d.ts +22 -0
  339. package/dist/trade_finance_sale/.kosh/bindings.js +15 -0
  340. package/dist/trade_finance_sale/.kosh/schema.d.ts +1071 -0
  341. package/dist/trade_finance_sale/index.d.ts +8 -0
  342. package/dist/trade_finance_sale/index.js +50 -0
  343. package/dist/trade_finance_sale/module.d.ts +4280 -0
  344. package/dist/trade_finance_sale/module.js +44 -0
  345. package/dist/ui/api.d.ts +6 -1
  346. package/dist/ui/api.js +2 -1
  347. package/dist/ui/app.js +51 -17
  348. package/dist/ui/components/AppIcon.js +33 -1
  349. package/dist/ui/components/Avatar.d.ts +21 -0
  350. package/dist/ui/components/Avatar.js +71 -0
  351. package/dist/ui/components/primitives.d.ts +2 -0
  352. package/dist/ui/components/primitives.js +7 -1
  353. package/dist/ui/i18n/messages.d.ts +53 -0
  354. package/dist/ui/i18n/messages.js +98 -0
  355. package/dist/ui/index.d.ts +2 -0
  356. package/dist/ui/index.js +2 -0
  357. package/dist/ui/offline/queue.d.ts +5 -1
  358. package/dist/ui/offline/queue.js +2 -0
  359. package/dist/ui/registry.d.ts +12 -1
  360. package/dist/ui/registry.js +10 -1
  361. package/dist/ui/search/ViewTabs.d.ts +14 -0
  362. package/dist/ui/search/ViewTabs.js +42 -0
  363. package/dist/ui/shell/Consent.d.ts +5 -0
  364. package/dist/ui/shell/Consent.js +35 -0
  365. package/dist/ui/shell/Home.js +136 -16
  366. package/dist/ui/shell/Sidebar.js +15 -22
  367. package/dist/ui/views/FormView.js +98 -17
  368. package/dist/ui/views/KanbanView.d.ts +2 -0
  369. package/dist/ui/views/KanbanView.js +32 -3
  370. package/dist/ui/views/ListView.js +155 -31
  371. package/dist/ui/views/StatsRow.d.ts +14 -0
  372. package/dist/ui/views/StatsRow.js +88 -0
  373. package/dist/ui/views/widgets.d.ts +2 -1
  374. package/dist/ui/views/widgets.js +194 -1
  375. package/dist/views/builders.d.ts +19 -2
  376. package/dist/views/builders.js +21 -1
  377. package/dist/views/condition.d.ts +6 -0
  378. package/dist/views/condition.js +20 -0
  379. package/dist/views/documents.d.ts +8 -0
  380. package/dist/views/extend.d.ts +2 -2
  381. package/dist/views/extend.js +11 -1
  382. package/dist/views/index.d.ts +2 -2
  383. package/dist/views/index.js +2 -2
  384. package/dist/views/types.d.ts +52 -5
  385. package/dist/views/validate.js +39 -1
  386. package/dist/website/.kosh/bindings.d.ts +22 -0
  387. package/dist/website/.kosh/bindings.js +15 -0
  388. package/dist/website/.kosh/schema.d.ts +881 -0
  389. package/dist/website/demo.d.ts +6 -0
  390. package/dist/website/demo.js +115 -0
  391. package/dist/website/index.d.ts +9 -0
  392. package/dist/website/index.js +250 -0
  393. package/dist/website/module.d.ts +2987 -0
  394. package/dist/website/module.js +281 -0
  395. package/dist/website/render.d.ts +45 -0
  396. package/dist/website/render.js +102 -0
  397. package/dist/website/routes.d.ts +12 -0
  398. package/dist/website/routes.js +246 -0
  399. package/dist/website/web/PagePreview.d.ts +7 -0
  400. package/dist/website/web/PagePreview.js +33 -0
  401. package/dist/website/web/index.d.ts +11 -0
  402. package/dist/website/web/index.js +16 -0
  403. package/dist/website/web/messages.d.ts +2 -0
  404. package/dist/website/web/messages.js +15 -0
  405. package/dist/website_crm/.kosh/bindings.d.ts +22 -0
  406. package/dist/website_crm/.kosh/bindings.js +15 -0
  407. package/dist/website_crm/.kosh/schema.d.ts +966 -0
  408. package/dist/website_crm/index.d.ts +3 -0
  409. package/dist/website_crm/index.js +39 -0
  410. package/dist/website_crm/module.d.ts +2955 -0
  411. package/dist/website_crm/module.js +44 -0
  412. package/package.json +118 -1
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: e7d2cbddec9ade69
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: ed4aa028c6a6d3e3
2
2
  // Schema view of module `accounting` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -28,7 +28,9 @@ export interface SchemaView {
28
28
  readonly 'auth.session': AuthSession;
29
29
  readonly 'auth.user_grant': AuthUserGrant;
30
30
  readonly 'auth.user_group': AuthUserGroup;
31
+ readonly 'kosh.image': KoshImage;
31
32
  readonly 'kosh.saved_view': KoshSavedView;
33
+ readonly 'kosh.setting': KoshSetting;
32
34
  readonly 'mail.activity': MailActivity;
33
35
  readonly 'mail.activity.type': MailActivityType;
34
36
  readonly 'mail.channel': MailChannel;
@@ -36,6 +38,10 @@ export interface SchemaView {
36
38
  readonly 'mail.follower': MailFollower;
37
39
  readonly 'mail.message': MailMessage;
38
40
  readonly 'mail.message.reaction': MailMessageReaction;
41
+ readonly 'oauth.app': OauthApp;
42
+ readonly 'oauth.code': OauthCode;
43
+ readonly 'oauth.grant': OauthGrant;
44
+ readonly 'oauth.token': OauthToken;
39
45
  readonly 'product.category': ProductCategory;
40
46
  readonly 'product.product': ProductProduct;
41
47
  readonly 'report.dashboard': ReportDashboard;
@@ -48,6 +54,7 @@ export interface SchemaView {
48
54
  readonly 'res.currency': ResCurrency;
49
55
  readonly 'res.currency.rate': ResCurrencyRate;
50
56
  readonly 'res.partner': ResPartner;
57
+ readonly 'res.partner.tag': ResPartnerTag;
51
58
  readonly 'res.users': ResUsers;
52
59
  readonly 'storage.attachment': StorageAttachment;
53
60
  readonly 'uom.uom': UomUom;
@@ -724,6 +731,29 @@ export interface AuthUserGroup {
724
731
  export interface AuthUserGroupMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.user_group'> {
725
732
  }
726
733
 
734
+ /** `kosh.image` (owner: base). */
735
+ export interface KoshImage {
736
+ readonly name: 'kosh.image';
737
+ readonly fields: {
738
+ readonly id: F.Id<'kosh.image'>;
739
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
740
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
741
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
742
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
743
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
744
+ readonly ownerModel: F.Char<{ readonly required: true }>;
745
+ readonly ownerId: F.Integer<{ readonly required: true }>;
746
+ readonly mime: F.Char<{ readonly required: true }>;
747
+ readonly data: F.Text<{ readonly required: true }>;
748
+ readonly hash: F.Char<{ readonly required: true }>;
749
+ };
750
+ readonly methods: KoshImageMethods;
751
+ }
752
+
753
+ /** Methods of `kosh.image`: declared ones and transitions. */
754
+ export interface KoshImageMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'kosh.image'> {
755
+ }
756
+
727
757
  /** `kosh.saved_view` (owner: base). */
728
758
  export interface KoshSavedView {
729
759
  readonly name: 'kosh.saved_view';
@@ -748,6 +778,26 @@ export interface KoshSavedView {
748
778
  export interface KoshSavedViewMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'kosh.saved_view'> {
749
779
  }
750
780
 
781
+ /** `kosh.setting` (owner: base). */
782
+ export interface KoshSetting {
783
+ readonly name: 'kosh.setting';
784
+ readonly fields: {
785
+ readonly id: F.Id<'kosh.setting'>;
786
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
787
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
788
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
789
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
790
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
791
+ readonly key: F.Char<{ readonly required: true }>;
792
+ readonly value: F.Json;
793
+ };
794
+ readonly methods: KoshSettingMethods;
795
+ }
796
+
797
+ /** Methods of `kosh.setting`: declared ones and transitions. */
798
+ export interface KoshSettingMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'kosh.setting'> {
799
+ }
800
+
751
801
  /** `mail.activity` (owner: messaging). */
752
802
  export interface MailActivity {
753
803
  readonly name: 'mail.activity';
@@ -926,6 +976,105 @@ export interface MailMessageReaction {
926
976
  export interface MailMessageReactionMethods extends F.Methods<typeof import('../../messaging/index.js').messagingShutro, 'mail.message.reaction'> {
927
977
  }
928
978
 
979
+ /** `oauth.app` (owner: base). */
980
+ export interface OauthApp {
981
+ readonly name: 'oauth.app';
982
+ readonly fields: {
983
+ readonly id: F.Id<'oauth.app'>;
984
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
985
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
986
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
987
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
988
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
989
+ readonly name: F.Char<{ readonly required: true }>;
990
+ readonly clientId: F.Char<{ readonly required: true }>;
991
+ readonly secretHash: F.Char;
992
+ readonly confidential: F.Bool<{ readonly required: true; readonly default: true }>;
993
+ readonly redirectUris: F.Text<{ readonly required: true }>;
994
+ readonly scopes: F.Char<{ readonly required: true }>;
995
+ readonly homepage: F.Char;
996
+ readonly active: F.Bool<{ readonly required: true; readonly default: true }>;
997
+ readonly owner: F.Many2one<'res.users'>;
998
+ };
999
+ readonly methods: OauthAppMethods;
1000
+ }
1001
+
1002
+ /** Methods of `oauth.app`: declared ones and transitions. */
1003
+ export interface OauthAppMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.app'> {
1004
+ }
1005
+
1006
+ /** `oauth.code` (owner: base). */
1007
+ export interface OauthCode {
1008
+ readonly name: 'oauth.code';
1009
+ readonly fields: {
1010
+ readonly id: F.Id<'oauth.code'>;
1011
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
1012
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
1013
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
1014
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
1015
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
1016
+ readonly codeHash: F.Char<{ readonly required: true }>;
1017
+ readonly grant: F.Many2one<'oauth.grant', { readonly required: true }>;
1018
+ readonly redirectUri: F.Char<{ readonly required: true }>;
1019
+ readonly challenge: F.Char;
1020
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
1021
+ readonly used: F.Bool<{ readonly required: true; readonly default: true }>;
1022
+ };
1023
+ readonly methods: OauthCodeMethods;
1024
+ }
1025
+
1026
+ /** Methods of `oauth.code`: declared ones and transitions. */
1027
+ export interface OauthCodeMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.code'> {
1028
+ }
1029
+
1030
+ /** `oauth.grant` (owner: base). */
1031
+ export interface OauthGrant {
1032
+ readonly name: 'oauth.grant';
1033
+ readonly fields: {
1034
+ readonly id: F.Id<'oauth.grant'>;
1035
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
1036
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
1037
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
1038
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
1039
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
1040
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
1041
+ readonly app: F.Many2one<'oauth.app', { readonly required: true }>;
1042
+ readonly scopes: F.Char<{ readonly required: true }>;
1043
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
1044
+ readonly lastUsedAt: F.Datetime;
1045
+ };
1046
+ readonly methods: OauthGrantMethods;
1047
+ }
1048
+
1049
+ /** Methods of `oauth.grant`: declared ones and transitions. */
1050
+ export interface OauthGrantMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.grant'> {
1051
+ }
1052
+
1053
+ /** `oauth.token` (owner: base). */
1054
+ export interface OauthToken {
1055
+ readonly name: 'oauth.token';
1056
+ readonly fields: {
1057
+ readonly id: F.Id<'oauth.token'>;
1058
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
1059
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
1060
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
1061
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
1062
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
1063
+ readonly grant: F.Many2one<'oauth.grant', { readonly required: true }>;
1064
+ readonly accessHash: F.Char<{ readonly required: true }>;
1065
+ readonly refreshHash: F.Char<{ readonly required: true }>;
1066
+ readonly accessExpiresAt: F.Datetime<{ readonly required: true }>;
1067
+ readonly refreshExpiresAt: F.Datetime<{ readonly required: true }>;
1068
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
1069
+ readonly rotated: F.Bool<{ readonly required: true; readonly default: true }>;
1070
+ };
1071
+ readonly methods: OauthTokenMethods;
1072
+ }
1073
+
1074
+ /** Methods of `oauth.token`: declared ones and transitions. */
1075
+ export interface OauthTokenMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.token'> {
1076
+ }
1077
+
929
1078
  /** `product.category` (owner: product). */
930
1079
  export interface ProductCategory {
931
1080
  readonly name: 'product.category';
@@ -963,6 +1112,7 @@ export interface ProductProduct {
963
1112
  readonly category: F.Many2one<'product.category'>;
964
1113
  readonly uom: F.Many2one<'uom.uom'>;
965
1114
  readonly barcode: F.Char;
1115
+ readonly image: F.Many2one<'storage.attachment'>;
966
1116
  readonly listPrice: F.Decimal<{ readonly required: true; readonly default: true }>;
967
1117
  readonly standardPrice: F.Decimal<{ readonly required: true; readonly default: true }>;
968
1118
  readonly saleOk: F.Bool<{ readonly required: true; readonly default: true }>;
@@ -993,6 +1143,7 @@ export interface ReportDashboard {
993
1143
  readonly name: F.Char<{ readonly required: true }>;
994
1144
  readonly items: F.Json<unknown, { readonly required: true; readonly default: true }>;
995
1145
  readonly shared: F.Bool<{ readonly required: true; readonly default: true }>;
1146
+ readonly key: F.Char;
996
1147
  };
997
1148
  readonly methods: ReportDashboardMethods;
998
1149
  }
@@ -1133,7 +1284,7 @@ export interface ResBankAccount {
1133
1284
  export interface ResBankAccountMethods extends F.Methods<typeof import('../module.js').accountingShutro, 'res.bank.account'> {
1134
1285
  }
1135
1286
 
1136
- /** `res.company` (owner: base; extended by: accounting). */
1287
+ /** `res.company` (owner: base; extended by: contacts, accounting). */
1137
1288
  export interface ResCompany {
1138
1289
  readonly name: 'res.company';
1139
1290
  readonly fields: {
@@ -1153,6 +1304,8 @@ export interface ResCompany {
1153
1304
  readonly email: F.Char;
1154
1305
  readonly phone: F.Char;
1155
1306
  readonly website: F.Char;
1307
+ readonly contactTaxIdRequired: F.Bool<{ readonly required: true; readonly default: true }>; // contacts
1308
+ readonly contactUniqueEmail: F.Bool<{ readonly required: true; readonly default: true }>; // contacts
1156
1309
  readonly fiscalYearStart: F.Integer<{ readonly required: true; readonly default: true }>; // accounting
1157
1310
  readonly chartTemplate: F.Char; // accounting
1158
1311
  readonly country: F.Char; // accounting
@@ -1169,7 +1322,7 @@ export interface ResCompany {
1169
1322
  }
1170
1323
 
1171
1324
  /** Methods of `res.company`: declared ones and transitions. */
1172
- export interface ResCompanyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'res.company'>, F.Methods<typeof import('../module.js').accountingShutro, 'res.company'> {
1325
+ export interface ResCompanyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'res.company'>, F.Methods<typeof import('../../contacts/index.js').contactsShutro, 'res.company'>, F.Methods<typeof import('../module.js').accountingShutro, 'res.company'> {
1173
1326
  }
1174
1327
 
1175
1328
  /** `res.currency` (owner: base). */
@@ -1228,6 +1381,10 @@ export interface ResPartner {
1228
1381
  readonly active: F.Bool<{ readonly required: true; readonly default: true }>;
1229
1382
  readonly company: F.Many2one<'res.company', { readonly default: true }>;
1230
1383
  readonly name: F.Char<{ readonly required: true }>;
1384
+ readonly image: F.Many2one<'storage.attachment'>;
1385
+ readonly tags: F.Many2many<'res.partner.tag', { readonly required: true }>;
1386
+ readonly latitude: F.Decimal;
1387
+ readonly longitude: F.Decimal;
1231
1388
  readonly isCompany: F.Bool<{ readonly required: true; readonly default: true }>;
1232
1389
  readonly parent: F.Many2one<'res.partner'>;
1233
1390
  readonly contacts: F.One2many<'res.partner', { readonly required: true }>;
@@ -1254,6 +1411,25 @@ export interface ResPartner {
1254
1411
  export interface ResPartnerMethods extends F.Methods<typeof import('../../contacts/index.js').contactsShutro, 'res.partner'>, F.Methods<typeof import('../module.js').accountingShutro, 'res.partner'> {
1255
1412
  }
1256
1413
 
1414
+ /** `res.partner.tag` (owner: contacts). */
1415
+ export interface ResPartnerTag {
1416
+ readonly name: 'res.partner.tag';
1417
+ readonly fields: {
1418
+ readonly id: F.Id<'res.partner.tag'>;
1419
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
1420
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
1421
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
1422
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
1423
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
1424
+ readonly name: F.Char<{ readonly required: true }>;
1425
+ };
1426
+ readonly methods: ResPartnerTagMethods;
1427
+ }
1428
+
1429
+ /** Methods of `res.partner.tag`: declared ones and transitions. */
1430
+ export interface ResPartnerTagMethods extends F.Methods<typeof import('../../contacts/index.js').contactsShutro, 'res.partner.tag'> {
1431
+ }
1432
+
1257
1433
  /** `res.users` (owner: base). */
1258
1434
  export interface ResUsers {
1259
1435
  readonly name: 'res.users';
@@ -1299,6 +1475,8 @@ export interface StorageAttachment {
1299
1475
  readonly key: F.Char<{ readonly required: true }>;
1300
1476
  readonly resModel: F.Char<{ readonly required: true }>;
1301
1477
  readonly resId: F.Integer<{ readonly required: true }>;
1478
+ readonly variantOf: F.Many2one<'storage.attachment'>;
1479
+ readonly width: F.Integer;
1302
1480
  };
1303
1481
  readonly methods: StorageAttachmentMethods;
1304
1482
  }
@@ -18,7 +18,7 @@ import { permissions } from '../permissions/index.js';
18
18
  import { product } from '../product/index.js';
19
19
  import { reporting } from '../reporting/index.js';
20
20
  import { HttpProblem } from '../server/index.js';
21
- import { action, field, form, list, pivot, search } from '../views/index.js';
21
+ import { action, field, form, list, pivot, search, stat } from '../views/index.js';
22
22
  import { ChartInstalledError, chartsOf, installChart, installedChart, installImmutability, installLocalization, localizationsOf, } from './chart.js';
23
23
  import { agingReport, closeFiscalYear, readSettings, reopenFiscalYear, updateSettings, } from './closing.js';
24
24
  import { accountingDemo } from './demo.js';
@@ -128,6 +128,148 @@ export const accounting = defineModule({
128
128
  implies: ['user'],
129
129
  },
130
130
  },
131
+ // Settings › App settings › Accounting (RFC 0020): per company, changed by accounting managers.
132
+ settings: {
133
+ sections: [
134
+ {
135
+ key: 'periods',
136
+ label: 'Fiscal year and lock dates',
137
+ description: 'When the fiscal year starts, and the dates before which nothing may change.',
138
+ keywords: 'fiscal year lock date period closing tax return',
139
+ scope: 'company',
140
+ editors: ['account.manager'],
141
+ fields: [
142
+ {
143
+ key: 'fiscalYearStart',
144
+ min: 1,
145
+ max: 12,
146
+ help: 'The month it starts: 7 for July–June.',
147
+ },
148
+ { key: 'lockDate', help: 'Nothing is posted, reversed or reconciled on or before it.' },
149
+ {
150
+ key: 'taxLockDate',
151
+ help: 'Tax returns are filed up to it: tax lines cannot change on or before it.',
152
+ },
153
+ ],
154
+ },
155
+ ],
156
+ },
157
+ // The Overview (RFC 0022 step 2): what is owed to us and by us, the month's invoicing, who owes most.
158
+ overview: {
159
+ cards: [
160
+ {
161
+ id: 'receivable',
162
+ title: 'Receivable',
163
+ kind: 'kpi',
164
+ model: 'account.move',
165
+ measure: 'sum:amountResidual',
166
+ filter: {
167
+ kind: { in: ['out_invoice', 'out_debit'] },
168
+ state: 'posted',
169
+ paymentState: { in: ['not_paid', 'partial'] },
170
+ },
171
+ w: 3,
172
+ },
173
+ {
174
+ id: 'payable',
175
+ title: 'Payable',
176
+ kind: 'kpi',
177
+ model: 'account.move',
178
+ measure: 'sum:amountResidual',
179
+ filter: {
180
+ kind: { in: ['in_invoice', 'in_debit'] },
181
+ state: 'posted',
182
+ paymentState: { in: ['not_paid', 'partial'] },
183
+ },
184
+ w: 3,
185
+ },
186
+ {
187
+ id: 'invoiced_month',
188
+ title: 'Invoiced this month',
189
+ kind: 'kpi',
190
+ model: 'account.move',
191
+ measure: 'sum:amountTotal',
192
+ filter: { kind: 'out_invoice', state: 'posted' },
193
+ comparison: { field: 'date', mode: 'previous' },
194
+ w: 3,
195
+ },
196
+ {
197
+ id: 'billed_month',
198
+ title: 'Bills this month',
199
+ kind: 'kpi',
200
+ model: 'account.move',
201
+ measure: 'sum:amountTotal',
202
+ filter: { kind: 'in_invoice', state: 'posted' },
203
+ comparison: { field: 'date', mode: 'previous' },
204
+ w: 3,
205
+ },
206
+ {
207
+ id: 'revenue_by_month',
208
+ title: 'Invoiced by month',
209
+ kind: 'chart',
210
+ model: 'account.move',
211
+ measure: 'sum:amountTotal',
212
+ groupBy: 'date:month',
213
+ filter: { kind: 'out_invoice', state: 'posted' },
214
+ chart: 'bar',
215
+ w: 6,
216
+ },
217
+ {
218
+ id: 'top_debtors',
219
+ title: 'Who owes most',
220
+ kind: 'pivot',
221
+ model: 'account.move',
222
+ measure: 'sum:amountResidual',
223
+ groupBy: 'partner',
224
+ filter: {
225
+ kind: { in: ['out_invoice', 'out_debit'] },
226
+ state: 'posted',
227
+ paymentState: { in: ['not_paid', 'partial'] },
228
+ },
229
+ w: 6,
230
+ },
231
+ {
232
+ id: 'payments_month',
233
+ title: 'Payments this month',
234
+ kind: 'kpi',
235
+ model: 'account.payment',
236
+ measure: 'sum:amount',
237
+ comparison: { field: 'date', mode: 'previous' },
238
+ w: 3,
239
+ },
240
+ {
241
+ id: 'drafts',
242
+ title: 'Draft invoices and bills',
243
+ kind: 'kpi',
244
+ model: 'account.move',
245
+ measure: 'count',
246
+ filter: { kind: { ne: 'entry' }, state: 'draft' },
247
+ w: 3,
248
+ },
249
+ {
250
+ id: 'to_approve',
251
+ title: 'Waiting approval',
252
+ kind: 'kpi',
253
+ model: 'account.move',
254
+ measure: 'count',
255
+ filter: { state: 'to_approve' },
256
+ w: 3,
257
+ },
258
+ {
259
+ id: 'biggest_open',
260
+ title: 'Biggest open invoices',
261
+ kind: 'list',
262
+ model: 'account.move',
263
+ measure: 'sum:amountResidual',
264
+ filter: {
265
+ kind: { in: ['out_invoice', 'out_debit'] },
266
+ state: 'posted',
267
+ paymentState: { in: ['not_paid', 'partial'] },
268
+ },
269
+ w: 3,
270
+ },
271
+ ],
272
+ },
131
273
  actions: {
132
274
  'accounting.action_customer_invoices': action(AccountMove, {
133
275
  label: 'Customer invoices',
@@ -425,6 +567,53 @@ export const accounting = defineModule({
425
567
  ],
426
568
  // Which withholdings apply to a contact (VDS, TDS), next to their roles (RFC 0016).
427
569
  viewExtensions: [
570
+ // The contact's invoices, what they still owe, and their bills (RFC 0022 §3.1).
571
+ {
572
+ view: 'res.partner.form',
573
+ operations: [
574
+ {
575
+ append: 'related',
576
+ nodes: [
577
+ stat({
578
+ id: 'customer_invoices',
579
+ label: 'Invoices',
580
+ model: AccountMove,
581
+ where: {
582
+ partner: { $record: 'id' },
583
+ kind: { in: ['out_invoice', 'out_refund', 'out_debit'] },
584
+ state: 'posted',
585
+ },
586
+ action: 'accounting.action_customer_invoices',
587
+ }),
588
+ stat({
589
+ id: 'customer_due',
590
+ label: 'Due from them',
591
+ model: AccountMove,
592
+ where: {
593
+ partner: { $record: 'id' },
594
+ kind: { in: ['out_invoice', 'out_debit'] },
595
+ state: 'posted',
596
+ paymentState: { ne: 'paid' },
597
+ },
598
+ measure: { sum: 'amountResidual' },
599
+ action: 'accounting.action_customer_invoices',
600
+ tone: 'warning',
601
+ }),
602
+ stat({
603
+ id: 'vendor_bills',
604
+ label: 'Bills',
605
+ model: AccountMove,
606
+ where: {
607
+ partner: { $record: 'id' },
608
+ kind: { in: ['in_invoice', 'in_refund', 'in_debit'] },
609
+ state: 'posted',
610
+ },
611
+ action: 'accounting.action_vendor_bills',
612
+ }),
613
+ ],
614
+ },
615
+ ],
616
+ },
428
617
  // A tax's accounts, reverse charge's payable account, and its components (CGST / SGST / IGST).
429
618
  {
430
619
  view: 'account.tax.form',
@@ -575,7 +764,7 @@ export const accounting = defineModule({
575
764
  'name',
576
765
  'partner',
577
766
  'date',
578
- 'dateDue',
767
+ { field: 'dateDue', widget: 'daysLeft' },
579
768
  'invoiceOrigin',
580
769
  { field: 'amountTotal', sum: true },
581
770
  { field: 'amountResidual', sum: true },
@@ -583,6 +772,11 @@ export const accounting = defineModule({
583
772
  { field: 'paymentState', widget: 'badge' },
584
773
  ],
585
774
  defaultOrder: ['date desc', 'name desc'],
775
+ decorations: {
776
+ success: { paymentState: 'paid' },
777
+ warning: { paymentState: 'partial' },
778
+ neutral: { state: 'cancel' },
779
+ },
586
780
  }),
587
781
  'account.move.invoice.form': form(AccountMove, (k) => ({
588
782
  header: {
@@ -596,6 +790,24 @@ export const accounting = defineModule({
596
790
  ],
597
791
  },
598
792
  sheet: [
793
+ k.stats('related', [
794
+ {
795
+ id: 'invoice_payments',
796
+ label: 'Payments',
797
+ model: AccountPayment,
798
+ where: { documents: { any: { id: { $record: 'id' } } }, state: 'posted' },
799
+ action: 'accounting.action_payments',
800
+ },
801
+ {
802
+ id: 'invoice_paid',
803
+ label: 'Paid',
804
+ model: AccountPayment,
805
+ where: { documents: { any: { id: { $record: 'id' } } }, state: 'posted' },
806
+ measure: { sum: 'amount' },
807
+ action: 'accounting.action_payments',
808
+ tone: 'success',
809
+ },
810
+ ]),
599
811
  k.group('party', ['partner', 'kind', 'invoiceOrigin', 'ref', 'debitOf', 'placeOfSupply']),
600
812
  k.group('dates', ['date', 'dateDue', 'paymentTerm', 'journal']),
601
813
  k.lines('lines', [