@things-factory/accounting 7.0.6 → 7.1.2

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 (390) hide show
  1. package/client/activities/activity-book-edit.ts +1 -1
  2. package/client/activities/activity-book-view.ts +1 -1
  3. package/client/activities/activity-expense-edit.ts +1 -1
  4. package/client/activities/activity-expense-view.ts +1 -1
  5. package/client/bootstrap.ts +10 -1
  6. package/client/components/accounting-category-selector.ts +136 -0
  7. package/client/components/accounting-category-view.ts +75 -0
  8. package/client/grist-editors/grist-editor-accounting-category-object.ts +83 -0
  9. package/client/grist-editors/grist-renderer-accounting-category-object.ts +13 -0
  10. package/client/pages/account/account-importer.ts +19 -8
  11. package/client/pages/account/account-list-page.ts +38 -8
  12. package/client/pages/accounting-category/accounting-category-importer.ts +19 -8
  13. package/client/pages/accounting-category/accounting-category-list-page.ts +36 -6
  14. package/client/pages/accounting-category/accounting-category-tree-page.ts +338 -0
  15. package/client/pages/accounting-document/accounting-document-importer.ts +90 -0
  16. package/client/pages/accounting-document/accounting-document-list-page.ts +398 -0
  17. package/client/pages/financial-statement/financial-statement-importer.ts +19 -8
  18. package/client/pages/financial-statement/financial-statement-list-page.ts +5 -6
  19. package/client/pages/fiscal-month/fiscal-month-importer.ts +90 -0
  20. package/client/pages/fiscal-month/fiscal-month-list-page.ts +398 -0
  21. package/client/pages/fiscal-quarter/fiscal-quarter-importer.ts +90 -0
  22. package/client/pages/fiscal-quarter/fiscal-quarter-list-page.ts +398 -0
  23. package/client/pages/fiscal-year/fiscal-year-importer.ts +90 -0
  24. package/client/pages/fiscal-year/fiscal-year-list-page.ts +398 -0
  25. package/client/pages/income-statement/income-statement-importer.ts +19 -8
  26. package/client/pages/income-statement/income-statement-list-page.ts +5 -6
  27. package/client/pages/{ledger/ledger-importer.ts → payment/payment-importer.ts} +13 -9
  28. package/client/pages/{ledger/ledger-list-page.ts → payment/payment-list-page.ts} +118 -58
  29. package/client/pages/transaction/transaction-importer.ts +19 -8
  30. package/client/pages/transaction/transaction-list-page.ts +5 -6
  31. package/client/route.ts +16 -8
  32. package/client/types/accounting-category.ts +23 -0
  33. package/client/types/index.ts +1 -0
  34. package/dist-client/activities/activity-book-edit.js +1 -1
  35. package/dist-client/activities/activity-book-edit.js.map +1 -1
  36. package/dist-client/activities/activity-book-view.js +1 -1
  37. package/dist-client/activities/activity-book-view.js.map +1 -1
  38. package/dist-client/activities/activity-expense-edit.js +1 -1
  39. package/dist-client/activities/activity-expense-edit.js.map +1 -1
  40. package/dist-client/activities/activity-expense-view.js +1 -1
  41. package/dist-client/activities/activity-expense-view.js.map +1 -1
  42. package/dist-client/bootstrap.js +7 -1
  43. package/dist-client/bootstrap.js.map +1 -1
  44. package/dist-client/components/accounting-category-selector.d.ts +16 -0
  45. package/dist-client/components/accounting-category-selector.js +134 -0
  46. package/dist-client/components/accounting-category-selector.js.map +1 -0
  47. package/dist-client/components/accounting-category-view.d.ts +14 -0
  48. package/dist-client/components/accounting-category-view.js +81 -0
  49. package/dist-client/components/accounting-category-view.js.map +1 -0
  50. package/dist-client/grist-editors/grist-editor-accounting-category-object.d.ts +11 -0
  51. package/dist-client/grist-editors/grist-editor-accounting-category-object.js +71 -0
  52. package/dist-client/grist-editors/grist-editor-accounting-category-object.js.map +1 -0
  53. package/dist-client/grist-editors/grist-renderer-accounting-category-object.d.ts +2 -0
  54. package/dist-client/grist-editors/grist-renderer-accounting-category-object.js +9 -0
  55. package/dist-client/grist-editors/grist-renderer-accounting-category-object.js.map +1 -0
  56. package/dist-client/pages/account/account-importer.d.ts +0 -1
  57. package/dist-client/pages/account/account-importer.js +12 -5
  58. package/dist-client/pages/account/account-importer.js.map +1 -1
  59. package/dist-client/pages/account/account-list-page.js +38 -8
  60. package/dist-client/pages/account/account-list-page.js.map +1 -1
  61. package/dist-client/pages/accounting-category/accounting-category-importer.d.ts +0 -1
  62. package/dist-client/pages/accounting-category/accounting-category-importer.js +12 -5
  63. package/dist-client/pages/accounting-category/accounting-category-importer.js.map +1 -1
  64. package/dist-client/pages/accounting-category/accounting-category-list-page.js +36 -6
  65. package/dist-client/pages/accounting-category/accounting-category-list-page.js.map +1 -1
  66. package/dist-client/pages/accounting-category/accounting-category-tree-page.d.ts +46 -0
  67. package/dist-client/pages/accounting-category/accounting-category-tree-page.js +329 -0
  68. package/dist-client/pages/accounting-category/accounting-category-tree-page.js.map +1 -0
  69. package/dist-client/pages/accounting-document/accounting-document-importer.d.ts +23 -0
  70. package/dist-client/pages/accounting-document/accounting-document-importer.js +93 -0
  71. package/dist-client/pages/accounting-document/accounting-document-importer.js.map +1 -0
  72. package/dist-client/pages/accounting-document/accounting-document-list-page.d.ts +66 -0
  73. package/dist-client/pages/accounting-document/accounting-document-list-page.js +370 -0
  74. package/dist-client/pages/accounting-document/accounting-document-list-page.js.map +1 -0
  75. package/dist-client/pages/financial-statement/financial-statement-importer.d.ts +0 -1
  76. package/dist-client/pages/financial-statement/financial-statement-importer.js +12 -5
  77. package/dist-client/pages/financial-statement/financial-statement-importer.js.map +1 -1
  78. package/dist-client/pages/financial-statement/financial-statement-list-page.js +5 -6
  79. package/dist-client/pages/financial-statement/financial-statement-list-page.js.map +1 -1
  80. package/dist-client/pages/fiscal-month/fiscal-month-importer.d.ts +23 -0
  81. package/dist-client/pages/fiscal-month/fiscal-month-importer.js +93 -0
  82. package/dist-client/pages/fiscal-month/fiscal-month-importer.js.map +1 -0
  83. package/dist-client/pages/fiscal-month/fiscal-month-list-page.d.ts +66 -0
  84. package/dist-client/pages/fiscal-month/fiscal-month-list-page.js +370 -0
  85. package/dist-client/pages/fiscal-month/fiscal-month-list-page.js.map +1 -0
  86. package/dist-client/pages/fiscal-quarter/fiscal-quarter-importer.d.ts +23 -0
  87. package/dist-client/pages/fiscal-quarter/fiscal-quarter-importer.js +93 -0
  88. package/dist-client/pages/fiscal-quarter/fiscal-quarter-importer.js.map +1 -0
  89. package/dist-client/pages/fiscal-quarter/fiscal-quarter-list-page.d.ts +66 -0
  90. package/dist-client/pages/fiscal-quarter/fiscal-quarter-list-page.js +370 -0
  91. package/dist-client/pages/fiscal-quarter/fiscal-quarter-list-page.js.map +1 -0
  92. package/dist-client/pages/fiscal-year/fiscal-year-importer.d.ts +23 -0
  93. package/dist-client/pages/fiscal-year/fiscal-year-importer.js +93 -0
  94. package/dist-client/pages/fiscal-year/fiscal-year-importer.js.map +1 -0
  95. package/dist-client/pages/fiscal-year/fiscal-year-list-page.d.ts +66 -0
  96. package/dist-client/pages/fiscal-year/fiscal-year-list-page.js +370 -0
  97. package/dist-client/pages/fiscal-year/fiscal-year-list-page.js.map +1 -0
  98. package/dist-client/pages/income-statement/income-statement-importer.d.ts +0 -1
  99. package/dist-client/pages/income-statement/income-statement-importer.js +12 -5
  100. package/dist-client/pages/income-statement/income-statement-importer.js.map +1 -1
  101. package/dist-client/pages/income-statement/income-statement-list-page.js +5 -6
  102. package/dist-client/pages/income-statement/income-statement-list-page.js.map +1 -1
  103. package/dist-client/pages/{ledger/ledger-importer.d.ts → payment/payment-importer.d.ts} +2 -2
  104. package/dist-client/pages/{ledger/ledger-importer.js → payment/payment-importer.js} +11 -11
  105. package/dist-client/pages/payment/payment-importer.js.map +1 -0
  106. package/dist-client/pages/{ledger/ledger-list-page.d.ts → payment/payment-list-page.d.ts} +12 -8
  107. package/dist-client/pages/{ledger/ledger-list-page.js → payment/payment-list-page.js} +114 -68
  108. package/dist-client/pages/payment/payment-list-page.js.map +1 -0
  109. package/dist-client/pages/transaction/transaction-importer.d.ts +0 -1
  110. package/dist-client/pages/transaction/transaction-importer.js +12 -5
  111. package/dist-client/pages/transaction/transaction-importer.js.map +1 -1
  112. package/dist-client/pages/transaction/transaction-list-page.js +5 -6
  113. package/dist-client/pages/transaction/transaction-list-page.js.map +1 -1
  114. package/dist-client/route.d.ts +1 -1
  115. package/dist-client/route.js +9 -3
  116. package/dist-client/route.js.map +1 -1
  117. package/dist-client/tsconfig.tsbuildinfo +1 -1
  118. package/dist-client/types/accounting-category.d.ts +16 -0
  119. package/dist-client/types/accounting-category.js +3 -0
  120. package/dist-client/types/accounting-category.js.map +1 -0
  121. package/dist-client/types/index.d.ts +1 -0
  122. package/dist-client/types/index.js +2 -0
  123. package/dist-client/types/index.js.map +1 -0
  124. package/dist-server/activities/activity-book.js +31 -19
  125. package/dist-server/activities/activity-book.js.map +1 -1
  126. package/dist-server/controllers/index.d.ts +1 -0
  127. package/dist-server/controllers/index.js +4 -0
  128. package/dist-server/controllers/index.js.map +1 -1
  129. package/dist-server/controllers/summary-statements.d.ts +4 -0
  130. package/dist-server/controllers/summary-statements.js +149 -0
  131. package/dist-server/controllers/summary-statements.js.map +1 -0
  132. package/dist-server/index.d.ts +2 -0
  133. package/dist-server/index.js +2 -0
  134. package/dist-server/index.js.map +1 -1
  135. package/dist-server/migrations/1725200507196-seed-fiscal-entities.d.ts +5 -0
  136. package/dist-server/migrations/1725200507196-seed-fiscal-entities.js +95 -0
  137. package/dist-server/migrations/1725200507196-seed-fiscal-entities.js.map +1 -0
  138. package/dist-server/migrations/1725201467183-seed-accounts.d.ts +5 -0
  139. package/dist-server/migrations/1725201467183-seed-accounts.js +318 -0
  140. package/dist-server/migrations/1725201467183-seed-accounts.js.map +1 -0
  141. package/dist-server/service/account/account-history.d.ts +4 -1
  142. package/dist-server/service/account/account-history.js +17 -7
  143. package/dist-server/service/account/account-history.js.map +1 -1
  144. package/dist-server/service/account/account-mutation.js +13 -9
  145. package/dist-server/service/account/account-mutation.js.map +1 -1
  146. package/dist-server/service/account/account-query.js +3 -1
  147. package/dist-server/service/account/account-query.js.map +1 -1
  148. package/dist-server/service/account/account.d.ts +1 -1
  149. package/dist-server/service/account/account.js +16 -5
  150. package/dist-server/service/account/account.js.map +1 -1
  151. package/dist-server/service/account/index.d.ts +1 -2
  152. package/dist-server/service/accounting-category/accounting-category-history.d.ts +26 -0
  153. package/dist-server/service/accounting-category/accounting-category-history.js +136 -0
  154. package/dist-server/service/accounting-category/accounting-category-history.js.map +1 -0
  155. package/dist-server/service/accounting-category/accounting-category-mutation.js +12 -8
  156. package/dist-server/service/accounting-category/accounting-category-mutation.js.map +1 -1
  157. package/dist-server/service/accounting-category/accounting-category-query.d.ts +1 -0
  158. package/dist-server/service/accounting-category/accounting-category-query.js +24 -1
  159. package/dist-server/service/accounting-category/accounting-category-query.js.map +1 -1
  160. package/dist-server/service/accounting-category/accounting-category-type.d.ts +2 -0
  161. package/dist-server/service/accounting-category/accounting-category-type.js +8 -0
  162. package/dist-server/service/accounting-category/accounting-category-type.js.map +1 -1
  163. package/dist-server/service/accounting-category/accounting-category.d.ts +2 -0
  164. package/dist-server/service/accounting-category/accounting-category.js +20 -3
  165. package/dist-server/service/accounting-category/accounting-category.js.map +1 -1
  166. package/dist-server/service/accounting-category/event-subscriber.d.ts +7 -0
  167. package/dist-server/service/accounting-category/event-subscriber.js +21 -0
  168. package/dist-server/service/accounting-category/event-subscriber.js.map +1 -0
  169. package/dist-server/service/accounting-category/index.d.ts +2 -1
  170. package/dist-server/service/accounting-category/index.js +4 -2
  171. package/dist-server/service/accounting-category/index.js.map +1 -1
  172. package/dist-server/service/accounting-document/accounting-document-history.d.ts +26 -0
  173. package/dist-server/service/accounting-document/accounting-document-history.js +129 -0
  174. package/dist-server/service/accounting-document/accounting-document-history.js.map +1 -0
  175. package/dist-server/service/accounting-document/accounting-document-mutation.d.ts +10 -0
  176. package/dist-server/service/accounting-document/accounting-document-mutation.js +128 -0
  177. package/dist-server/service/accounting-document/accounting-document-mutation.js.map +1 -0
  178. package/dist-server/service/accounting-document/accounting-document-query.d.ts +11 -0
  179. package/dist-server/service/accounting-document/accounting-document-query.js +79 -0
  180. package/dist-server/service/accounting-document/accounting-document-query.js.map +1 -0
  181. package/dist-server/service/accounting-document/accounting-document-type.d.ts +20 -0
  182. package/dist-server/service/accounting-document/accounting-document-type.js +74 -0
  183. package/dist-server/service/accounting-document/accounting-document-type.js.map +1 -0
  184. package/dist-server/service/accounting-document/accounting-document.d.ts +21 -0
  185. package/dist-server/service/accounting-document/accounting-document.js +104 -0
  186. package/dist-server/service/accounting-document/accounting-document.js.map +1 -0
  187. package/dist-server/service/accounting-document/event-subscriber.d.ts +7 -0
  188. package/dist-server/service/accounting-document/event-subscriber.js +21 -0
  189. package/dist-server/service/accounting-document/event-subscriber.js.map +1 -0
  190. package/dist-server/service/accounting-document/index.d.ts +7 -0
  191. package/dist-server/service/accounting-document/index.js +12 -0
  192. package/dist-server/service/accounting-document/index.js.map +1 -0
  193. package/dist-server/service/common-type.d.ts +5 -0
  194. package/dist-server/service/common-type.js +15 -0
  195. package/dist-server/service/common-type.js.map +1 -0
  196. package/dist-server/service/financial-statement/financial-statement-history.d.ts +9 -6
  197. package/dist-server/service/financial-statement/financial-statement-history.js +33 -23
  198. package/dist-server/service/financial-statement/financial-statement-history.js.map +1 -1
  199. package/dist-server/service/financial-statement/financial-statement-line-item.d.ts +19 -0
  200. package/dist-server/service/financial-statement/financial-statement-line-item.js +94 -0
  201. package/dist-server/service/financial-statement/financial-statement-line-item.js.map +1 -0
  202. package/dist-server/service/financial-statement/financial-statement-mutation.js +12 -8
  203. package/dist-server/service/financial-statement/financial-statement-mutation.js.map +1 -1
  204. package/dist-server/service/financial-statement/financial-statement-query.js +3 -1
  205. package/dist-server/service/financial-statement/financial-statement-query.js.map +1 -1
  206. package/dist-server/service/financial-statement/financial-statement.d.ts +2 -0
  207. package/dist-server/service/financial-statement/financial-statement.js +45 -24
  208. package/dist-server/service/financial-statement/financial-statement.js.map +1 -1
  209. package/dist-server/service/financial-statement/index.d.ts +2 -2
  210. package/dist-server/service/financial-statement/index.js +2 -1
  211. package/dist-server/service/financial-statement/index.js.map +1 -1
  212. package/dist-server/service/fiscal-month/fiscal-month-mutation.d.ts +10 -0
  213. package/dist-server/service/fiscal-month/fiscal-month-mutation.js +134 -0
  214. package/dist-server/service/fiscal-month/fiscal-month-mutation.js.map +1 -0
  215. package/dist-server/service/fiscal-month/fiscal-month-query.d.ts +11 -0
  216. package/dist-server/service/fiscal-month/fiscal-month-query.js +83 -0
  217. package/dist-server/service/fiscal-month/fiscal-month-query.js.map +1 -0
  218. package/dist-server/service/fiscal-month/fiscal-month-type.d.ts +26 -0
  219. package/dist-server/service/fiscal-month/fiscal-month-type.js +98 -0
  220. package/dist-server/service/fiscal-month/fiscal-month-type.js.map +1 -0
  221. package/dist-server/service/fiscal-month/fiscal-month.d.ts +22 -0
  222. package/dist-server/service/fiscal-month/fiscal-month.js +99 -0
  223. package/dist-server/service/fiscal-month/fiscal-month.js.map +1 -0
  224. package/dist-server/service/fiscal-month/index.d.ts +6 -0
  225. package/dist-server/service/fiscal-month/index.js +10 -0
  226. package/dist-server/service/fiscal-month/index.js.map +1 -0
  227. package/dist-server/service/fiscal-quarter/fiscal-quarter-mutation.d.ts +10 -0
  228. package/dist-server/service/fiscal-quarter/fiscal-quarter-mutation.js +134 -0
  229. package/dist-server/service/fiscal-quarter/fiscal-quarter-mutation.js.map +1 -0
  230. package/dist-server/service/fiscal-quarter/fiscal-quarter-query.d.ts +11 -0
  231. package/dist-server/service/fiscal-quarter/fiscal-quarter-query.js +85 -0
  232. package/dist-server/service/fiscal-quarter/fiscal-quarter-query.js.map +1 -0
  233. package/dist-server/service/fiscal-quarter/fiscal-quarter-type.d.ts +24 -0
  234. package/dist-server/service/fiscal-quarter/fiscal-quarter-type.js +90 -0
  235. package/dist-server/service/fiscal-quarter/fiscal-quarter-type.js.map +1 -0
  236. package/dist-server/service/fiscal-quarter/fiscal-quarter.d.ts +21 -0
  237. package/dist-server/service/fiscal-quarter/fiscal-quarter.js +94 -0
  238. package/dist-server/service/fiscal-quarter/fiscal-quarter.js.map +1 -0
  239. package/dist-server/service/fiscal-quarter/index.d.ts +6 -0
  240. package/dist-server/service/fiscal-quarter/index.js +10 -0
  241. package/dist-server/service/fiscal-quarter/index.js.map +1 -0
  242. package/dist-server/service/fiscal-year/fiscal-year-mutation.d.ts +10 -0
  243. package/dist-server/service/fiscal-year/fiscal-year-mutation.js +134 -0
  244. package/dist-server/service/fiscal-year/fiscal-year-mutation.js.map +1 -0
  245. package/dist-server/service/fiscal-year/fiscal-year-query.d.ts +11 -0
  246. package/dist-server/service/fiscal-year/fiscal-year-query.js +81 -0
  247. package/dist-server/service/fiscal-year/fiscal-year-query.js.map +1 -0
  248. package/dist-server/service/fiscal-year/fiscal-year-type.d.ts +22 -0
  249. package/dist-server/service/fiscal-year/fiscal-year-type.js +82 -0
  250. package/dist-server/service/fiscal-year/fiscal-year-type.js.map +1 -0
  251. package/dist-server/service/fiscal-year/fiscal-year.d.ts +20 -0
  252. package/dist-server/service/fiscal-year/fiscal-year.js +89 -0
  253. package/dist-server/service/fiscal-year/fiscal-year.js.map +1 -0
  254. package/dist-server/service/fiscal-year/index.d.ts +6 -0
  255. package/dist-server/service/fiscal-year/index.js +10 -0
  256. package/dist-server/service/fiscal-year/index.js.map +1 -0
  257. package/dist-server/service/income-statement/income-statement-history.d.ts +9 -5
  258. package/dist-server/service/income-statement/income-statement-history.js +38 -23
  259. package/dist-server/service/income-statement/income-statement-history.js.map +1 -1
  260. package/dist-server/service/income-statement/income-statement-line-item.d.ts +19 -0
  261. package/dist-server/service/income-statement/income-statement-line-item.js +96 -0
  262. package/dist-server/service/income-statement/income-statement-line-item.js.map +1 -0
  263. package/dist-server/service/income-statement/income-statement-mutation.js +12 -8
  264. package/dist-server/service/income-statement/income-statement-mutation.js.map +1 -1
  265. package/dist-server/service/income-statement/income-statement-query.js +3 -1
  266. package/dist-server/service/income-statement/income-statement-query.js.map +1 -1
  267. package/dist-server/service/income-statement/income-statement.d.ts +2 -0
  268. package/dist-server/service/income-statement/income-statement.js +46 -26
  269. package/dist-server/service/income-statement/income-statement.js.map +1 -1
  270. package/dist-server/service/income-statement/index.d.ts +2 -2
  271. package/dist-server/service/income-statement/index.js +2 -1
  272. package/dist-server/service/income-statement/index.js.map +1 -1
  273. package/dist-server/service/index.d.ts +7 -2
  274. package/dist-server/service/index.js +29 -3
  275. package/dist-server/service/index.js.map +1 -1
  276. package/dist-server/service/payment/event-subscriber.d.ts +7 -0
  277. package/dist-server/service/payment/event-subscriber.js +21 -0
  278. package/dist-server/service/payment/event-subscriber.js.map +1 -0
  279. package/dist-server/service/payment/index.d.ts +8 -0
  280. package/dist-server/service/payment/index.js +12 -0
  281. package/dist-server/service/payment/index.js.map +1 -0
  282. package/dist-server/service/payment/payment-history.d.ts +30 -0
  283. package/dist-server/service/payment/payment-history.js +143 -0
  284. package/dist-server/service/payment/payment-history.js.map +1 -0
  285. package/dist-server/service/payment/payment-mutation.d.ts +10 -0
  286. package/dist-server/service/payment/payment-mutation.js +134 -0
  287. package/dist-server/service/payment/payment-mutation.js.map +1 -0
  288. package/dist-server/service/payment/payment-query.d.ts +11 -0
  289. package/dist-server/service/payment/payment-query.js +81 -0
  290. package/dist-server/service/payment/payment-query.js.map +1 -0
  291. package/dist-server/service/payment/payment-type.d.ts +24 -0
  292. package/dist-server/service/payment/payment-type.js +90 -0
  293. package/dist-server/service/payment/payment-type.js.map +1 -0
  294. package/dist-server/service/payment/payment.d.ts +30 -0
  295. package/dist-server/service/payment/payment.js +146 -0
  296. package/dist-server/service/payment/payment.js.map +1 -0
  297. package/dist-server/service/transaction/transaction-history.d.ts +15 -3
  298. package/dist-server/service/transaction/transaction-history.js +64 -8
  299. package/dist-server/service/transaction/transaction-history.js.map +1 -1
  300. package/dist-server/service/transaction/transaction-mutation.js +13 -9
  301. package/dist-server/service/transaction/transaction-mutation.js.map +1 -1
  302. package/dist-server/service/transaction/transaction-query.js +3 -1
  303. package/dist-server/service/transaction/transaction-query.js.map +1 -1
  304. package/dist-server/service/transaction/transaction.d.ts +31 -6
  305. package/dist-server/service/transaction/transaction.js +138 -27
  306. package/dist-server/service/transaction/transaction.js.map +1 -1
  307. package/dist-server/tsconfig.tsbuildinfo +1 -1
  308. package/helps/accounting/accounting-document.md +160 -0
  309. package/helps/accounting/contract.md +160 -0
  310. package/helps/accounting/fiscal-month.md +160 -0
  311. package/helps/accounting/fiscal-quarter.md +160 -0
  312. package/helps/accounting/fiscal-year.md +160 -0
  313. package/helps/accounting/payment.md +160 -0
  314. package/package.json +9 -8
  315. package/server/activities/activity-book.ts +31 -19
  316. package/server/controllers/index.ts +1 -0
  317. package/server/controllers/summary-statements.ts +166 -0
  318. package/server/index.ts +2 -0
  319. package/server/migrations/1725200507196-seed-fiscal-entities.ts +106 -0
  320. package/server/migrations/1725201467183-seed-accounts.ts +339 -0
  321. package/server/service/account/account-history.ts +15 -7
  322. package/server/service/account/account-mutation.ts +13 -10
  323. package/server/service/account/account-query.ts +3 -1
  324. package/server/service/account/account.ts +16 -5
  325. package/server/service/accounting-category/accounting-category-history.ts +123 -0
  326. package/server/service/accounting-category/accounting-category-mutation.ts +12 -9
  327. package/server/service/accounting-category/accounting-category-query.ts +24 -1
  328. package/server/service/accounting-category/accounting-category-type.ts +6 -0
  329. package/server/service/accounting-category/accounting-category.ts +23 -3
  330. package/server/service/accounting-category/event-subscriber.ts +20 -0
  331. package/server/service/accounting-category/index.ts +4 -2
  332. package/server/service/accounting-document/accounting-document-history.ts +117 -0
  333. package/server/service/accounting-document/accounting-document-mutation.ts +137 -0
  334. package/server/service/accounting-document/accounting-document-query.ts +48 -0
  335. package/server/service/accounting-document/accounting-document-type.ts +52 -0
  336. package/server/service/accounting-document/accounting-document.ts +93 -0
  337. package/server/service/accounting-document/event-subscriber.ts +17 -0
  338. package/server/service/accounting-document/index.ts +9 -0
  339. package/server/service/common-type.ts +12 -0
  340. package/server/service/financial-statement/financial-statement-history.ts +28 -19
  341. package/server/service/financial-statement/financial-statement-line-item.ts +82 -0
  342. package/server/service/financial-statement/financial-statement-mutation.ts +12 -9
  343. package/server/service/financial-statement/financial-statement-query.ts +3 -1
  344. package/server/service/financial-statement/financial-statement.ts +52 -36
  345. package/server/service/financial-statement/index.ts +2 -1
  346. package/server/service/fiscal-month/fiscal-month-mutation.ts +145 -0
  347. package/server/service/fiscal-month/fiscal-month-query.ts +58 -0
  348. package/server/service/fiscal-month/fiscal-month-type.ts +66 -0
  349. package/server/service/fiscal-month/fiscal-month.ts +84 -0
  350. package/server/service/fiscal-month/index.ts +7 -0
  351. package/server/service/fiscal-quarter/fiscal-quarter-mutation.ts +148 -0
  352. package/server/service/fiscal-quarter/fiscal-quarter-query.ts +60 -0
  353. package/server/service/fiscal-quarter/fiscal-quarter-type.ts +60 -0
  354. package/server/service/fiscal-quarter/fiscal-quarter.ts +80 -0
  355. package/server/service/fiscal-quarter/index.ts +7 -0
  356. package/server/service/fiscal-year/fiscal-year-mutation.ts +145 -0
  357. package/server/service/fiscal-year/fiscal-year-query.ts +53 -0
  358. package/server/service/fiscal-year/fiscal-year-type.ts +54 -0
  359. package/server/service/fiscal-year/fiscal-year.ts +76 -0
  360. package/server/service/fiscal-year/index.ts +7 -0
  361. package/server/service/income-statement/income-statement-history.ts +31 -18
  362. package/server/service/income-statement/income-statement-line-item.ts +84 -0
  363. package/server/service/income-statement/income-statement-mutation.ts +12 -10
  364. package/server/service/income-statement/income-statement-query.ts +3 -4
  365. package/server/service/income-statement/income-statement.ts +54 -39
  366. package/server/service/income-statement/index.ts +2 -1
  367. package/server/service/index.ts +49 -3
  368. package/server/service/payment/event-subscriber.ts +17 -0
  369. package/server/service/payment/index.ts +9 -0
  370. package/server/service/payment/payment-history.ts +126 -0
  371. package/server/service/payment/payment-mutation.ts +139 -0
  372. package/server/service/payment/payment-query.ts +50 -0
  373. package/server/service/payment/payment-type.ts +64 -0
  374. package/server/service/payment/payment.ts +123 -0
  375. package/server/service/transaction/transaction-history.ts +54 -10
  376. package/server/service/transaction/transaction-mutation.ts +13 -10
  377. package/server/service/transaction/transaction-query.ts +3 -4
  378. package/server/service/transaction/transaction.ts +144 -29
  379. package/things-factory.config.js +3 -2
  380. package/translations/en.json +9 -1
  381. package/translations/ja.json +9 -1
  382. package/translations/ko.json +9 -1
  383. package/translations/ms.json +9 -1
  384. package/translations/zh.json +9 -1
  385. package/client/pages/main.ts +0 -24
  386. package/dist-client/pages/ledger/ledger-importer.js.map +0 -1
  387. package/dist-client/pages/ledger/ledger-list-page.js.map +0 -1
  388. package/dist-client/pages/main.d.ts +0 -1
  389. package/dist-client/pages/main.js +0 -27
  390. package/dist-client/pages/main.js.map +0 -1
@@ -1,7 +1,6 @@
1
1
  import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
2
  import { In } from 'typeorm'
3
-
4
- import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
3
+ import { getRepository } from '@things-factory/shell'
5
4
 
6
5
  import { IncomeStatement } from './income-statement'
7
6
  import { NewIncomeStatement, IncomeStatementPatch } from './income-statement-type'
@@ -9,6 +8,7 @@ import { NewIncomeStatement, IncomeStatementPatch } from './income-statement-typ
9
8
  @Resolver(IncomeStatement)
10
9
  export class IncomeStatementMutation {
11
10
  @Directive('@transaction')
11
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
12
12
  @Mutation(returns => IncomeStatement, { description: 'To create new IncomeStatement' })
13
13
  async createIncomeStatement(
14
14
  @Arg('incomeStatement') incomeStatement: NewIncomeStatement,
@@ -16,7 +16,7 @@ export class IncomeStatementMutation {
16
16
  ): Promise<IncomeStatement> {
17
17
  const { domain, user, tx } = context.state
18
18
 
19
- const result = await tx.getRepository(IncomeStatement).save({
19
+ const result = await getRepository(IncomeStatement, tx).save({
20
20
  ...incomeStatement,
21
21
  domain,
22
22
  creator: user,
@@ -27,6 +27,7 @@ export class IncomeStatementMutation {
27
27
  }
28
28
 
29
29
  @Directive('@transaction')
30
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
30
31
  @Mutation(returns => IncomeStatement, { description: 'To modify IncomeStatement information' })
31
32
  async updateIncomeStatement(
32
33
  @Arg('id') id: string,
@@ -35,7 +36,7 @@ export class IncomeStatementMutation {
35
36
  ): Promise<IncomeStatement> {
36
37
  const { domain, user, tx } = context.state
37
38
 
38
- const repository = tx.getRepository(IncomeStatement)
39
+ const repository = getRepository(IncomeStatement, tx)
39
40
  const incomeStatement = await repository.findOne({
40
41
  where: { domain: { id: domain.id }, id }
41
42
  })
@@ -50,6 +51,7 @@ export class IncomeStatementMutation {
50
51
  }
51
52
 
52
53
  @Directive('@transaction')
54
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
53
55
  @Mutation(returns => [IncomeStatement], { description: "To modify multiple IncomeStatements' information" })
54
56
  async updateMultipleIncomeStatement(
55
57
  @Arg('patches', type => [IncomeStatementPatch]) patches: IncomeStatementPatch[],
@@ -60,7 +62,7 @@ export class IncomeStatementMutation {
60
62
  let results = []
61
63
  const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
62
64
  const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
63
- const incomeStatementRepo = tx.getRepository(IncomeStatement)
65
+ const incomeStatementRepo = getRepository(IncomeStatement, tx)
64
66
 
65
67
  if (_createRecords.length > 0) {
66
68
  for (let i = 0; i < _createRecords.length; i++) {
@@ -96,17 +98,18 @@ export class IncomeStatementMutation {
96
98
  }
97
99
 
98
100
  @Directive('@transaction')
101
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
99
102
  @Mutation(returns => Boolean, { description: 'To delete IncomeStatement' })
100
103
  async deleteIncomeStatement(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
101
104
  const { domain, tx } = context.state
102
105
 
103
- await tx.getRepository(IncomeStatement).delete({ domain: { id: domain.id }, id })
104
- await deleteAttachmentsByRef(null, { refBys: [id] }, context)
106
+ await getRepository(IncomeStatement, tx).delete({ domain: { id: domain.id }, id })
105
107
 
106
108
  return true
107
109
  }
108
110
 
109
111
  @Directive('@transaction')
112
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
110
113
  @Mutation(returns => Boolean, { description: 'To delete multiple IncomeStatements' })
111
114
  async deleteIncomeStatements(
112
115
  @Arg('ids', type => [String]) ids: string[],
@@ -114,17 +117,16 @@ export class IncomeStatementMutation {
114
117
  ): Promise<boolean> {
115
118
  const { domain, tx } = context.state
116
119
 
117
- await tx.getRepository(IncomeStatement).delete({
120
+ await getRepository(IncomeStatement, tx).delete({
118
121
  domain: { id: domain.id },
119
122
  id: In(ids)
120
123
  })
121
124
 
122
- await deleteAttachmentsByRef(null, { refBys: ids }, context)
123
-
124
125
  return true
125
126
  }
126
127
 
127
128
  @Directive('@transaction')
129
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
128
130
  @Mutation(returns => Boolean, { description: 'To import multiple IncomeStatements' })
129
131
  async importIncomeStatements(
130
132
  @Arg('incomeStatements', type => [IncomeStatementPatch]) incomeStatements: IncomeStatementPatch[],
@@ -6,6 +6,7 @@ import { IncomeStatementList } from './income-statement-type'
6
6
 
7
7
  @Resolver(IncomeStatement)
8
8
  export class IncomeStatementQuery {
9
+ @Directive('@privilege(category: "accounting", privilege: "query")')
9
10
  @Query(returns => IncomeStatement!, { nullable: true, description: 'To fetch a IncomeStatement' })
10
11
  async incomeStatement(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<IncomeStatement> {
11
12
  const { domain } = context.state
@@ -15,11 +16,9 @@ export class IncomeStatementQuery {
15
16
  })
16
17
  }
17
18
 
19
+ @Directive('@privilege(category: "accounting", privilege: "query")')
18
20
  @Query(returns => IncomeStatementList, { description: 'To fetch multiple IncomeStatements' })
19
- async incomeStatements(
20
- @Args(type => ListParam) params: ListParam,
21
- @Ctx() context: ResolverContext
22
- ): Promise<IncomeStatementList> {
21
+ async incomeStatements(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<IncomeStatementList> {
23
22
  const { domain } = context.state
24
23
 
25
24
  const queryBuilder = getQueryBuilderFromListParams({
@@ -7,14 +7,17 @@ import {
7
7
  Column,
8
8
  RelationId,
9
9
  ManyToOne,
10
+ OneToMany,
10
11
  PrimaryGeneratedColumn,
11
12
  VersionColumn
12
13
  } from 'typeorm'
13
- import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
14
+ import { ObjectType, Field, ID, registerEnumType } from 'type-graphql'
14
15
 
15
16
  import { Domain } from '@things-factory/shell'
16
17
  import { User } from '@things-factory/auth-base'
17
18
 
19
+ import { IncomeStatementLineItem } from './income-statement-line-item'
20
+
18
21
  export enum IncomeStatementStatus {
19
22
  STATUS_A = 'STATUS_A',
20
23
  STATUS_B = 'STATUS_B'
@@ -22,84 +25,96 @@ export enum IncomeStatementStatus {
22
25
 
23
26
  registerEnumType(IncomeStatementStatus, {
24
27
  name: 'IncomeStatementStatus',
25
- description: 'state enumeration of a incomeStatement'
28
+ description: 'State enumeration of an income statement' // 손익계산서의 상태 열거형
26
29
  })
27
30
 
28
- // 손익계산서
31
+ // 손익계산서 (Income Statement)
29
32
  @Entity()
30
33
  @Index(
31
34
  'ix_income_statement_0',
32
- (incomeStatement: IncomeStatement) => [incomeStatement.domain, incomeStatement.deletedAt],
33
- { unique: true }
35
+ (incomeStatement: IncomeStatement) => [
36
+ incomeStatement.domain,
37
+ incomeStatement.year,
38
+ incomeStatement.quarter,
39
+ incomeStatement.month
40
+ ],
41
+ {
42
+ unique: true,
43
+ where: '"deleted_at" IS NULL' // 삭제되지 않은 경우에만 유니크
44
+ }
34
45
  )
35
- @ObjectType({ description: 'Entity for IncomeStatement' })
46
+ @ObjectType({ description: 'Entity for IncomeStatement, representing the profit and loss report' }) // 손익계산서 엔티티
36
47
  export class IncomeStatement {
37
48
  @PrimaryGeneratedColumn('uuid')
38
- @Field(type => ID)
39
- readonly id: string
49
+ @Field(type => ID, { description: 'Unique identifier for the income statement' })
50
+ readonly id: string // 고유 식별자 (UUID)
40
51
 
41
52
  @VersionColumn()
42
- @Field({ nullable: true })
43
- version?: number = 1
53
+ @Field({ nullable: true, description: 'Version number for optimistic locking' })
54
+ version?: number = 1 // 낙관적 잠금을 위한 버전 관리 필드
44
55
 
45
56
  @ManyToOne(type => Domain)
46
- @Field(type => Domain)
47
- domain?: Domain
57
+ @Field({ nullable: true, description: 'The domain to which this income statement belongs' })
58
+ domain?: Domain // 이 손익계산서가 속한 도메인
48
59
 
49
60
  @RelationId((incomeStatement: IncomeStatement) => incomeStatement.domain)
50
- domainId?: string
61
+ domainId?: string // 도메인의 ID
51
62
 
52
63
  @Column({ nullable: true })
53
- @Field({ nullable: true, description: 'fiscal year' })
54
- year?: number
64
+ @Field({ nullable: true, description: 'Fiscal year of the income statement' })
65
+ year?: number // 회계 연도
55
66
 
56
67
  @Column({ nullable: true })
57
- @Field({ nullable: true, description: 'fiscal quarter' })
58
- quarter?: number
68
+ @Field({ nullable: true, description: 'Fiscal quarter of the income statement' })
69
+ quarter?: number // 회계 분기
59
70
 
60
71
  @Column({ nullable: true })
61
- @Field({ nullable: true })
62
- month?: number
72
+ @Field({ nullable: true, description: 'Fiscal month of the income statement' })
73
+ month?: number // 회계 월
63
74
 
64
75
  @Column({ nullable: true })
65
- @Field({ nullable: true })
66
- revenue?: number
76
+ @Field({ nullable: true, description: 'Total revenue recorded in the income statement' })
77
+ revenue?: number // 손익계산서에 기록된 총수익
67
78
 
68
79
  @Column({ nullable: true })
69
- @Field({ nullable: true })
70
- expense?: number
80
+ @Field({ nullable: true, description: 'Total expenses recorded in the income statement' })
81
+ expense?: number // 손익계산서에 기록된 총비용
71
82
 
72
83
  @Column({ nullable: true })
73
- @Field({ nullable: true })
74
- netIncome?: number
84
+ @Field({ nullable: true, description: 'Net income calculated as revenue minus expenses' })
85
+ netIncome?: number // 총수익에서 총비용을 뺀 순이익
75
86
 
76
87
  @Column({ nullable: true })
77
- @Field({ nullable: true })
78
- active?: boolean
88
+ @Field({ nullable: true, description: 'Indicates whether this income statement is active' })
89
+ active?: boolean // 이 손익계산서가 활성 상태인지 여부
90
+
91
+ @OneToMany(type => IncomeStatementLineItem, lineItem => lineItem.statement)
92
+ @Field(type => [IncomeStatementLineItem], { nullable: true })
93
+ lineItems?: IncomeStatementLineItem[] // 계정별 브레이크다운
79
94
 
80
95
  @CreateDateColumn()
81
- @Field({ nullable: true })
82
- createdAt?: Date
96
+ @Field({ nullable: true, description: 'The date and time when the income statement was created' })
97
+ createdAt?: Date // 손익계산서가 생성된 날짜 및 시간
83
98
 
84
99
  @UpdateDateColumn()
85
- @Field({ nullable: true })
86
- updatedAt?: Date
100
+ @Field({ nullable: true, description: 'The date and time when the income statement was last updated' })
101
+ updatedAt?: Date // 손익계산서가 마지막으로 업데이트된 날짜 및 시간
87
102
 
88
103
  @DeleteDateColumn()
89
- @Field({ nullable: true })
90
- deletedAt?: Date
104
+ @Field({ nullable: true, description: 'The date and time when the income statement was deleted' })
105
+ deletedAt?: Date // 손익계산서가 삭제된 날짜 및 시간
91
106
 
92
107
  @ManyToOne(type => User, { nullable: true })
93
- @Field(type => User, { nullable: true })
94
- creator?: User
108
+ @Field(type => User, { nullable: true, description: 'The user who created the income statement' })
109
+ creator?: User // 손익계산서를 생성한 사용자
95
110
 
96
111
  @RelationId((incomeStatement: IncomeStatement) => incomeStatement.creator)
97
- creatorId?: string
112
+ creatorId?: string // 손익계산서를 생성한 사용자의 ID
98
113
 
99
114
  @ManyToOne(type => User, { nullable: true })
100
- @Field(type => User, { nullable: true })
101
- updater?: User
115
+ @Field(type => User, { nullable: true, description: 'The user who last updated the income statement' })
116
+ updater?: User // 손익계산서를 마지막으로 업데이트한 사용자
102
117
 
103
118
  @RelationId((incomeStatement: IncomeStatement) => incomeStatement.updater)
104
- updaterId?: string
119
+ updaterId?: string // 손익계산서를 업데이트한 사용자의 ID
105
120
  }
@@ -1,9 +1,10 @@
1
1
  import { IncomeStatement } from './income-statement'
2
+ import { IncomeStatementLineItem } from './income-statement-line-item'
2
3
  import { IncomeStatementHistory } from './income-statement-history'
3
4
  import { IncomeStatementQuery } from './income-statement-query'
4
5
  import { IncomeStatementMutation } from './income-statement-mutation'
5
6
  import { IncomeStatementHistoryEntitySubscriber } from './event-subscriber'
6
7
 
7
- export const entities = [IncomeStatement, IncomeStatementHistory]
8
+ export const entities = [IncomeStatement, IncomeStatementLineItem, IncomeStatementHistory]
8
9
  export const resolvers = [IncomeStatementQuery, IncomeStatementMutation]
9
10
  export const subscribers = [IncomeStatementHistoryEntitySubscriber]
@@ -3,7 +3,12 @@ export * from './income-statement/income-statement'
3
3
  export * from './financial-statement/financial-statement'
4
4
  export * from './accounting-category/accounting-category'
5
5
  export * from './transaction/transaction'
6
+ export * from './payment/payment'
6
7
  export * from './account/account'
8
+ export * from './accounting-document/accounting-document'
9
+ export * from './fiscal-month/fiscal-month'
10
+ export * from './fiscal-quarter/fiscal-quarter'
11
+ export * from './fiscal-year/fiscal-year'
7
12
 
8
13
  /* IMPORT ENTITIES AND RESOLVERS */
9
14
  import {
@@ -26,11 +31,36 @@ import {
26
31
  resolvers as TransactionResolvers,
27
32
  subscribers as TransactionSubscribers
28
33
  } from './transaction'
34
+ import {
35
+ entities as PaymentEntities,
36
+ resolvers as PaymentResolvers,
37
+ subscribers as PaymentSubscribers
38
+ } from './payment'
29
39
  import {
30
40
  entities as AccountEntities,
31
41
  resolvers as AccountResolvers,
32
42
  subscribers as AccountSubscribers
33
43
  } from './account'
44
+ import {
45
+ entities as AccountingDocumentEntities,
46
+ resolvers as AccountingDocumentResolvers,
47
+ subscribers as AccountingDocumentSubscribers
48
+ } from './accounting-document'
49
+ import {
50
+ entities as FiscalMonthEntities,
51
+ resolvers as FiscalMonthResolvers,
52
+ subscribers as FiscalMonthSubscribers
53
+ } from './fiscal-month'
54
+ import {
55
+ entities as FiscalQuarterEntities,
56
+ resolvers as FiscalQuarterResolvers,
57
+ subscribers as FiscalQuarterSubscribers
58
+ } from './fiscal-quarter'
59
+ import {
60
+ entities as FiscalYearEntities,
61
+ resolvers as FiscalYearResolvers,
62
+ subscribers as FiscalYearSubscribers
63
+ } from './fiscal-year'
34
64
 
35
65
  export const entities = [
36
66
  /* ENTITIES */
@@ -38,7 +68,12 @@ export const entities = [
38
68
  ...FinancialStatementEntities,
39
69
  ...AccountingCategoryEntities,
40
70
  ...TransactionEntities,
41
- ...AccountEntities
71
+ ...AccountEntities,
72
+ ...AccountingDocumentEntities,
73
+ ...PaymentEntities,
74
+ ...FiscalMonthEntities,
75
+ ...FiscalQuarterEntities,
76
+ ...FiscalYearEntities
42
77
  ]
43
78
 
44
79
  export const subscribers = [
@@ -47,7 +82,13 @@ export const subscribers = [
47
82
  ...FinancialStatementSubscribers,
48
83
  ...AccountingCategorySubscribers,
49
84
  ...TransactionSubscribers,
50
- ...AccountSubscribers
85
+ ...PaymentSubscribers,
86
+ ...AccountSubscribers,
87
+ ...AccountingDocumentSubscribers,
88
+ ...FiscalYearSubscribers,
89
+ ...FiscalMonthSubscribers,
90
+ ...FiscalQuarterSubscribers,
91
+ ...FiscalYearSubscribers
51
92
  ]
52
93
 
53
94
  export const schema = {
@@ -57,6 +98,11 @@ export const schema = {
57
98
  ...FinancialStatementResolvers,
58
99
  ...AccountingCategoryResolvers,
59
100
  ...TransactionResolvers,
60
- ...AccountResolvers
101
+ ...PaymentResolvers,
102
+ ...AccountResolvers,
103
+ ...AccountingDocumentResolvers,
104
+ ...FiscalMonthResolvers,
105
+ ...FiscalQuarterResolvers,
106
+ ...FiscalYearResolvers
61
107
  ]
62
108
  }
@@ -0,0 +1,17 @@
1
+ import { EventSubscriber } from 'typeorm'
2
+
3
+ import { HistoryEntitySubscriber } from '@operato/typeorm-history'
4
+
5
+ import { Payment } from './payment'
6
+ import { PaymentHistory } from './payment-history'
7
+
8
+ @EventSubscriber()
9
+ export class PaymentHistoryEntitySubscriber extends HistoryEntitySubscriber<Payment, PaymentHistory> {
10
+ public get entity() {
11
+ return Payment
12
+ }
13
+
14
+ public get historyEntity() {
15
+ return PaymentHistory
16
+ }
17
+ }
@@ -0,0 +1,9 @@
1
+ import { Payment } from './payment'
2
+ import { PaymentHistory } from './payment-history'
3
+ import { PaymentHistoryEntitySubscriber } from './event-subscriber'
4
+ import { PaymentQuery } from './payment-query'
5
+ import { PaymentMutation } from './payment-mutation'
6
+
7
+ export const entities = [Payment, PaymentHistory]
8
+ export const resolvers = [PaymentQuery, PaymentMutation]
9
+ export const subscribers = [PaymentHistoryEntitySubscriber]
@@ -0,0 +1,126 @@
1
+ import { Field, ID, ObjectType } from 'type-graphql'
2
+ import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
3
+
4
+ import {
5
+ HistoryActionColumn,
6
+ HistoryActionType,
7
+ HistoryEntityInterface,
8
+ HistoryOriginalIdColumn
9
+ } from '@operato/typeorm-history'
10
+ import { Role, User } from '@things-factory/auth-base'
11
+ import { config } from '@things-factory/env'
12
+ import { Domain } from '@things-factory/shell'
13
+
14
+ import { Transaction } from '../transaction/transaction'
15
+ import { Payment, PaymentDirection } from './payment'
16
+
17
+ const ORMCONFIG = config.get('ormconfig', {})
18
+ const DATABASE_TYPE = ORMCONFIG.type
19
+
20
+ @Entity()
21
+ @Index(
22
+ 'ix_payment_history_0',
23
+ (paymentHistory: PaymentHistory) => [paymentHistory.originalId, paymentHistory.version],
24
+ { unique: true }
25
+ )
26
+ @Index(
27
+ 'ix_payment_history_1',
28
+ (paymentHistory: PaymentHistory) => [paymentHistory.domain, paymentHistory.originalId, paymentHistory.version],
29
+ { unique: true }
30
+ )
31
+ @ObjectType({ description: 'History Entity of Payment' })
32
+ export class PaymentHistory implements HistoryEntityInterface<Payment> {
33
+ @PrimaryGeneratedColumn('uuid')
34
+ @Field(type => ID)
35
+ readonly id: string
36
+
37
+ @Column({ nullable: true, default: 1 })
38
+ @Field({ nullable: true })
39
+ version?: number = 1
40
+
41
+ @ManyToOne(type => Domain)
42
+ @Field({ nullable: true })
43
+ domain?: Domain
44
+
45
+ @RelationId((payment: Payment) => payment.domain)
46
+ domainId?: string
47
+
48
+ @ManyToOne(type => Transaction, transaction => transaction.payments)
49
+ @Field(type => Transaction)
50
+ transaction: Transaction
51
+
52
+ @RelationId((payment: Payment) => payment.transaction)
53
+ transactionId: string
54
+
55
+ @Column({ nullable: false })
56
+ @Field({ nullable: false })
57
+ amount: number
58
+
59
+ @Column({ nullable: true })
60
+ @Field({ nullable: true, description: 'fiscal year' })
61
+ year?: number
62
+
63
+ @Column({ nullable: true })
64
+ @Field({ nullable: true, description: 'fiscal quarter' })
65
+ quarter?: number
66
+
67
+ @Column({ nullable: true })
68
+ @Field({ nullable: true, description: 'fiscal month' })
69
+ month?: number
70
+
71
+ @Column({ nullable: false })
72
+ @Field({ nullable: false })
73
+ paidAt: Date
74
+
75
+ @Column({ nullable: false })
76
+ @Field(type => PaymentDirection)
77
+ direction: PaymentDirection
78
+
79
+ @Column({ nullable: true })
80
+ @Field({ nullable: true })
81
+ note?: string
82
+
83
+ @Column({ nullable: true })
84
+ @Field({ nullable: true })
85
+ createdAt?: Date
86
+
87
+ @Column({ nullable: true })
88
+ @Field({ nullable: true })
89
+ updatedAt?: Date
90
+
91
+ @Column({ nullable: true })
92
+ @Field({ nullable: true })
93
+ deletedAt?: Date
94
+
95
+ @ManyToOne(type => User, { nullable: true })
96
+ @Field(type => User, { nullable: true })
97
+ creator?: User
98
+
99
+ @RelationId((payment: Payment) => payment.creator)
100
+ creatorId?: string
101
+
102
+ @ManyToOne(type => User, { nullable: true })
103
+ @Field(type => User, { nullable: true })
104
+ updater?: User
105
+
106
+ @RelationId((payment: Payment) => payment.updater)
107
+ updaterId?: string
108
+
109
+ @Field(type => String, { nullable: true })
110
+ thumbnail?: string
111
+
112
+ @HistoryOriginalIdColumn()
113
+ public originalId!: string
114
+
115
+ @HistoryActionColumn({
116
+ nullable: false,
117
+ type:
118
+ DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
119
+ ? 'enum'
120
+ : DATABASE_TYPE == 'oracle'
121
+ ? 'varchar2'
122
+ : 'smallint',
123
+ enum: HistoryActionType
124
+ })
125
+ public action!: HistoryActionType
126
+ }
@@ -0,0 +1,139 @@
1
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { In } from 'typeorm'
3
+ import { getRepository } from '@things-factory/shell'
4
+
5
+ import { Payment } from './payment'
6
+ import { NewPayment, PaymentPatch } from './payment-type'
7
+
8
+ @Resolver(Payment)
9
+ export class PaymentMutation {
10
+ @Directive('@transaction')
11
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
12
+ @Mutation(returns => Payment, { description: 'To create new Payment' })
13
+ async createPayment(@Arg('payment') payment: NewPayment, @Ctx() context: ResolverContext): Promise<Payment> {
14
+ const { domain, user, tx } = context.state
15
+
16
+ const result = await getRepository(Payment, tx).save({
17
+ ...payment,
18
+ domain,
19
+ creator: user,
20
+ updater: user
21
+ })
22
+
23
+ return result
24
+ }
25
+
26
+ @Directive('@transaction')
27
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
28
+ @Mutation(returns => Payment, { description: 'To modify Payment information' })
29
+ async updatePayment(
30
+ @Arg('id') id: string,
31
+ @Arg('patch') patch: PaymentPatch,
32
+ @Ctx() context: ResolverContext
33
+ ): Promise<Payment> {
34
+ const { domain, user, tx } = context.state
35
+
36
+ const repository = getRepository(Payment, tx)
37
+ const payment = await repository.findOne({
38
+ where: { domain: { id: domain.id }, id }
39
+ })
40
+
41
+ const result = await repository.save({
42
+ ...payment,
43
+ ...patch,
44
+ updater: user
45
+ })
46
+
47
+ return result
48
+ }
49
+
50
+ @Directive('@transaction')
51
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
52
+ @Mutation(returns => [Payment], { description: "To modify multiple Payments' information" })
53
+ async updateMultiplePayment(
54
+ @Arg('patches', type => [PaymentPatch]) patches: PaymentPatch[],
55
+ @Ctx() context: ResolverContext
56
+ ): Promise<Payment[]> {
57
+ const { domain, user, tx } = context.state
58
+
59
+ let results = []
60
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
61
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
62
+ const paymentRepo = getRepository(Payment, tx)
63
+
64
+ if (_createRecords.length > 0) {
65
+ for (let i = 0; i < _createRecords.length; i++) {
66
+ const newRecord = _createRecords[i]
67
+
68
+ const result = await paymentRepo.save({
69
+ ...newRecord,
70
+ domain,
71
+ creator: user,
72
+ updater: user
73
+ })
74
+
75
+ results.push({ ...result, cuFlag: '+' })
76
+ }
77
+ }
78
+
79
+ if (_updateRecords.length > 0) {
80
+ for (let i = 0; i < _updateRecords.length; i++) {
81
+ const updateRecord = _updateRecords[i]
82
+ const payment = await paymentRepo.findOneBy({ id: updateRecord.id })
83
+
84
+ const result = await paymentRepo.save({
85
+ ...payment,
86
+ ...updateRecord,
87
+ updater: user
88
+ })
89
+
90
+ results.push({ ...result, cuFlag: 'M' })
91
+ }
92
+ }
93
+
94
+ return results
95
+ }
96
+
97
+ @Directive('@transaction')
98
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
99
+ @Mutation(returns => Boolean, { description: 'To delete Payment' })
100
+ async deletePayment(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
101
+ const { domain, tx } = context.state
102
+
103
+ await getRepository(Payment, tx).delete({ domain: { id: domain.id }, id })
104
+
105
+ return true
106
+ }
107
+
108
+ @Directive('@transaction')
109
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
110
+ @Mutation(returns => Boolean, { description: 'To delete multiple Payments' })
111
+ async deletePayments(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<boolean> {
112
+ const { domain, tx } = context.state
113
+
114
+ await getRepository(Payment, tx).delete({
115
+ domain: { id: domain.id },
116
+ id: In(ids)
117
+ })
118
+
119
+ return true
120
+ }
121
+
122
+ @Directive('@transaction')
123
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
124
+ @Mutation(returns => Boolean, { description: 'To import multiple Payments' })
125
+ async importPayments(
126
+ @Arg('payments', type => [PaymentPatch]) payments: PaymentPatch[],
127
+ @Ctx() context: ResolverContext
128
+ ): Promise<boolean> {
129
+ const { domain, tx } = context.state
130
+
131
+ await Promise.all(
132
+ payments.map(async (payment: PaymentPatch) => {
133
+ const createdPayment: Payment = await getRepository(Payment, tx).save({ domain, ...payment })
134
+ })
135
+ )
136
+
137
+ return true
138
+ }
139
+ }