@tomei/finance 0.4.26 → 0.5.1

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 (293) hide show
  1. package/.commitlintrc.json +22 -22
  2. package/.eslintrc.js +72 -72
  3. package/.husky/commit-msg +4 -4
  4. package/.husky/pre-commit +4 -4
  5. package/.prettierrc +4 -4
  6. package/CONTRIBUTING.md +30 -30
  7. package/LICENSE +21 -21
  8. package/README.md +13 -13
  9. package/configs/config.js +336 -336
  10. package/dist/customer/customer.d.ts +2 -0
  11. package/dist/customer/customer.js +22 -0
  12. package/dist/customer/customer.js.map +1 -1
  13. package/dist/index.d.ts +2 -1
  14. package/dist/index.js +3 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/payment-item/payment-item.js +7 -5
  17. package/dist/payment-item/payment-item.js.map +1 -1
  18. package/dist/test-document.d.ts +3 -0
  19. package/dist/test-document.js +19 -0
  20. package/dist/test-document.js.map +1 -0
  21. package/dist/tsconfig.tsbuildinfo +1 -1
  22. package/invoice-template/assets/css/style.css.map +12 -12
  23. package/invoice-template/assets/css/style.min.css +1 -1
  24. package/invoice-template/assets/img/arrow_bg.svg +11 -11
  25. package/invoice-template/assets/img/coffy_shop_img.svg +18 -18
  26. package/invoice-template/assets/img/logo_accent.svg +3 -3
  27. package/invoice-template/assets/img/logo_white.svg +4 -4
  28. package/invoice-template/assets/img/sign.svg +12 -12
  29. package/invoice-template/assets/img/tomei-logo.svg +9 -9
  30. package/invoice-template/assets/js/html2canvas.min.js +10379 -10379
  31. package/invoice-template/assets/js/jquery.min.js +1 -1
  32. package/invoice-template/assets/sass/common/_color_variable.scss +12 -12
  33. package/invoice-template/assets/sass/common/_typography.scss +178 -178
  34. package/invoice-template/assets/sass/style.scss +12 -12
  35. package/migrations/finance-account-migration.js +97 -97
  36. package/migrations/finance-company-migration.js +29 -29
  37. package/migrations/finance-customer-migration.js +51 -51
  38. package/migrations/finance-document-item-migration.js +111 -111
  39. package/migrations/finance-document-migration.js +116 -116
  40. package/migrations/finance-payment-item-migration.js +52 -52
  41. package/migrations/finance-payment-method-migration.js +31 -31
  42. package/migrations/finance-payment-method-type-migration.js +55 -55
  43. package/migrations/finance-payment-migration.js +96 -96
  44. package/migrations/finance-post-history-migration.js +45 -45
  45. package/nest-cli.json +19 -19
  46. package/package.json +79 -79
  47. package/src/account/account.repository.ts +11 -11
  48. package/src/account/account.ts +264 -264
  49. package/src/account/interfaces/account-attr.interface.ts +31 -31
  50. package/src/account-system-entity/account-system-entity.ts +65 -65
  51. package/src/account-system-entity/post-history.repository.ts +11 -11
  52. package/src/config.ts +382 -382
  53. package/src/customer/customer.ts +316 -276
  54. package/src/customer/finance-customer.repository.ts +13 -13
  55. package/src/customer/interfaces/customer.repository.interface.ts +3 -3
  56. package/src/customer/interfaces/finance-customer-attr.interface.ts +10 -10
  57. package/src/customer/interfaces/finance-customer.repository.interface.ts +4 -4
  58. package/src/database.ts +15 -15
  59. package/src/document/document-item.repository.ts +11 -11
  60. package/src/document/document.repository.ts +11 -11
  61. package/src/document/interfaces/document-attr.interface.ts +28 -28
  62. package/src/document/interfaces/document-item-attr.interface.ts +22 -22
  63. package/src/document/interfaces/document-item.repository.interface.ts +4 -4
  64. package/src/enum/doc-type.enum.ts +8 -8
  65. package/src/enum/index.ts +17 -17
  66. package/src/enum/payment-method.enum.ts +3 -3
  67. package/src/enum/payment-type.enum.ts +4 -4
  68. package/src/finance-company/finance-company.repository.ts +11 -11
  69. package/src/finance-company/finance-company.ts +1754 -1754
  70. package/src/helpers/typeof.ts +29 -29
  71. package/src/index.ts +32 -30
  72. package/src/interfaces/account-system.interface.ts +20 -20
  73. package/src/interfaces/index.ts +3 -3
  74. package/src/models/account.entity.ts +206 -206
  75. package/src/models/customer.entity.ts +93 -93
  76. package/src/models/document-item.entity.ts +143 -143
  77. package/src/models/document.entity.ts +211 -211
  78. package/src/models/finance-company.entity.ts +25 -25
  79. package/src/models/journal-entry.entity.ts +110 -110
  80. package/src/models/ledger-transaction.entity.ts +148 -148
  81. package/src/models/payment-item.entity.ts +60 -60
  82. package/src/models/payment-method-type.entity.ts +70 -70
  83. package/src/models/payment-method.entity.ts +51 -51
  84. package/src/models/payment.entity.ts +161 -161
  85. package/src/models/post-history.entity.ts +41 -41
  86. package/src/payment/interfaces/payment-attr.interface.ts +23 -23
  87. package/src/payment/interfaces/payment-params.interface.ts +8 -8
  88. package/src/payment/payment.repository.ts +11 -11
  89. package/src/payment/payment.ts +213 -213
  90. package/src/payment-item/interfaces/payment-item-attr.interface.ts +10 -10
  91. package/src/payment-item/payment-item.repository.ts +11 -11
  92. package/src/payment-item/payment-item.ts +125 -119
  93. package/src/payment-method/payment-method.repository.ts +11 -11
  94. package/src/payment-method-type/payment-method-type.repository.ts +11 -11
  95. package/src/test-document.ts +25 -0
  96. package/tsconfig.build.json +4 -4
  97. package/tsconfig.json +22 -22
  98. package/tslint.json +18 -18
  99. package/dist/account/entities/account.entity.d.ts +0 -26
  100. package/dist/account/entities/account.entity.js +0 -199
  101. package/dist/account/entities/account.entity.js.map +0 -1
  102. package/dist/account/entities/fee-associated-object.entity.d.ts +0 -6
  103. package/dist/account/entities/fee-associated-object.entity.js +0 -52
  104. package/dist/account/entities/fee-associated-object.entity.js.map +0 -1
  105. package/dist/account/index.d.ts +0 -6
  106. package/dist/account/index.js +0 -10
  107. package/dist/account/index.js.map +0 -1
  108. package/dist/account/interfaces/account.repository.interface.d.ts +0 -3
  109. package/dist/account/interfaces/account.repository.interface.js +0 -3
  110. package/dist/account/interfaces/account.repository.interface.js.map +0 -1
  111. package/dist/account-system-entity/index.d.ts +0 -2
  112. package/dist/account-system-entity/index.js +0 -6
  113. package/dist/account-system-entity/index.js.map +0 -1
  114. package/dist/account-system-entity/post-history.entity.d.ts +0 -11
  115. package/dist/account-system-entity/post-history.entity.js +0 -65
  116. package/dist/account-system-entity/post-history.entity.js.map +0 -1
  117. package/dist/base/account-system.interface.d.ts +0 -7
  118. package/dist/base/account-system.interface.js +0 -3
  119. package/dist/base/account-system.interface.js.map +0 -1
  120. package/dist/base/address.base.abstract.d.ts +0 -4
  121. package/dist/base/address.base.abstract.js +0 -10
  122. package/dist/base/address.base.abstract.js.map +0 -1
  123. package/dist/base/base.address.d.ts +0 -8
  124. package/dist/base/base.address.js +0 -15
  125. package/dist/base/base.address.js.map +0 -1
  126. package/dist/base/base.object.d.ts +0 -7
  127. package/dist/base/base.object.js +0 -14
  128. package/dist/base/base.object.js.map +0 -1
  129. package/dist/base/base.owner.d.ts +0 -23
  130. package/dist/base/base.owner.js +0 -34
  131. package/dist/base/base.owner.js.map +0 -1
  132. package/dist/base/base.repository.abstract.d.ts +0 -12
  133. package/dist/base/base.repository.abstract.js +0 -22
  134. package/dist/base/base.repository.abstract.js.map +0 -1
  135. package/dist/base/base.repository.interface.d.ts +0 -9
  136. package/dist/base/base.repository.interface.js +0 -3
  137. package/dist/base/base.repository.interface.js.map +0 -1
  138. package/dist/base/index.d.ts +0 -4
  139. package/dist/base/index.js +0 -10
  140. package/dist/base/index.js.map +0 -1
  141. package/dist/base/object/base.object.abstract.d.ts +0 -5
  142. package/dist/base/object/base.object.abstract.js +0 -7
  143. package/dist/base/object/base.object.abstract.js.map +0 -1
  144. package/dist/base/object/base.object.d.ts +0 -7
  145. package/dist/base/object/base.object.js +0 -14
  146. package/dist/base/object/base.object.js.map +0 -1
  147. package/dist/base/object/object.interface.d.ts +0 -4
  148. package/dist/base/object/object.interface.js +0 -3
  149. package/dist/base/object/object.interface.js.map +0 -1
  150. package/dist/base/object.base.abstract.d.ts +0 -5
  151. package/dist/base/object.base.abstract.js +0 -11
  152. package/dist/base/object.base.abstract.js.map +0 -1
  153. package/dist/base/owner/base.owner.abstract.d.ts +0 -20
  154. package/dist/base/owner/base.owner.abstract.js +0 -8
  155. package/dist/base/owner/base.owner.abstract.js.map +0 -1
  156. package/dist/base/owner/base.owner.d.ts +0 -22
  157. package/dist/base/owner/base.owner.js +0 -31
  158. package/dist/base/owner/base.owner.js.map +0 -1
  159. package/dist/base/owner/owner.interface.d.ts +0 -19
  160. package/dist/base/owner/owner.interface.js +0 -3
  161. package/dist/base/owner/owner.interface.js.map +0 -1
  162. package/dist/base/person.base.abstract.d.ts +0 -21
  163. package/dist/base/person.base.abstract.js +0 -17
  164. package/dist/base/person.base.abstract.js.map +0 -1
  165. package/dist/base/repository/base.repository.abstract.d.ts +0 -12
  166. package/dist/base/repository/base.repository.abstract.js +0 -22
  167. package/dist/base/repository/base.repository.abstract.js.map +0 -1
  168. package/dist/base/repository/base.repository.interface.d.ts +0 -9
  169. package/dist/base/repository/base.repository.interface.js +0 -3
  170. package/dist/base/repository/base.repository.interface.js.map +0 -1
  171. package/dist/customer/customer.repository.d.ts +0 -0
  172. package/dist/customer/customer.repository.js +0 -1
  173. package/dist/customer/customer.repository.js.map +0 -1
  174. package/dist/customer/entities/customer.entity.d.ts +0 -13
  175. package/dist/customer/entities/customer.entity.js +0 -111
  176. package/dist/customer/entities/customer.entity.js.map +0 -1
  177. package/dist/customer/index.d.ts +0 -7
  178. package/dist/customer/index.js +0 -10
  179. package/dist/customer/index.js.map +0 -1
  180. package/dist/document/entities/document-item.entity.d.ts +0 -27
  181. package/dist/document/entities/document-item.entity.js +0 -174
  182. package/dist/document/entities/document-item.entity.js.map +0 -1
  183. package/dist/document/entities/document.entity.d.ts +0 -22
  184. package/dist/document/entities/document.entity.js +0 -139
  185. package/dist/document/entities/document.entity.js.map +0 -1
  186. package/dist/document/index.d.ts +0 -11
  187. package/dist/document/index.js +0 -20
  188. package/dist/document/index.js.map +0 -1
  189. package/dist/document/interfaces/document.repository.interface.d.ts +0 -3
  190. package/dist/document/interfaces/document.repository.interface.js +0 -3
  191. package/dist/document/interfaces/document.repository.interface.js.map +0 -1
  192. package/dist/enum/document-type.enum.d.ts +0 -7
  193. package/dist/enum/document-type.enum.js +0 -12
  194. package/dist/enum/document-type.enum.js.map +0 -1
  195. package/dist/enum/intuit-client.enum.d.ts +0 -13
  196. package/dist/enum/intuit-client.enum.js +0 -19
  197. package/dist/enum/intuit-client.enum.js.map +0 -1
  198. package/dist/finance-company/entities/finance-company.entity.d.ts +0 -13
  199. package/dist/finance-company/entities/finance-company.entity.js +0 -113
  200. package/dist/finance-company/entities/finance-company.entity.js.map +0 -1
  201. package/dist/finance-company/finance-company.entity.d.ts +0 -13
  202. package/dist/finance-company/finance-company.entity.js +0 -66
  203. package/dist/finance-company/finance-company.entity.js.map +0 -1
  204. package/dist/finance-company/index.d.ts +0 -3
  205. package/dist/finance-company/index.js +0 -8
  206. package/dist/finance-company/index.js.map +0 -1
  207. package/dist/finance-company/interfaces/finance-company-attr.interface.d.ts +0 -10
  208. package/dist/finance-company/interfaces/finance-company-attr.interface.js +0 -3
  209. package/dist/finance-company/interfaces/finance-company-attr.interface.js.map +0 -1
  210. package/dist/finance-company/interfaces/finance-company.repository.interface.d.ts +0 -3
  211. package/dist/finance-company/interfaces/finance-company.repository.interface.js +0 -3
  212. package/dist/finance-company/interfaces/finance-company.repository.interface.js.map +0 -1
  213. package/dist/interfaces/account-system-entity.interface.d.ts +0 -7
  214. package/dist/interfaces/account-system-entity.interface.js +0 -3
  215. package/dist/interfaces/account-system-entity.interface.js.map +0 -1
  216. package/dist/interfaces/customer.repository.interface.d.ts +0 -3
  217. package/dist/interfaces/customer.repository.interface.js +0 -3
  218. package/dist/interfaces/customer.repository.interface.js.map +0 -1
  219. package/dist/interfaces/finance-customer.repository.interface.d.ts +0 -3
  220. package/dist/interfaces/finance-customer.repository.interface.js +0 -3
  221. package/dist/interfaces/finance-customer.repository.interface.js.map +0 -1
  222. package/dist/interfaces/systemConfig.interface.d.ts +0 -0
  223. package/dist/interfaces/systemConfig.interface.js +0 -1
  224. package/dist/interfaces/systemConfig.interface.js.map +0 -1
  225. package/dist/intuit-client/client.d.ts +0 -14
  226. package/dist/intuit-client/client.js +0 -44
  227. package/dist/intuit-client/client.js.map +0 -1
  228. package/dist/journal-entry/entities/journal-entry.entity.d.ts +0 -16
  229. package/dist/journal-entry/entities/journal-entry.entity.js +0 -129
  230. package/dist/journal-entry/entities/journal-entry.entity.js.map +0 -1
  231. package/dist/journal-entry/index.d.ts +0 -6
  232. package/dist/journal-entry/index.js +0 -10
  233. package/dist/journal-entry/index.js.map +0 -1
  234. package/dist/journal-entry/interfaces/journal-entry.repository.interface.d.ts +0 -10
  235. package/dist/journal-entry/interfaces/journal-entry.repository.interface.js +0 -3
  236. package/dist/journal-entry/interfaces/journal-entry.repository.interface.js.map +0 -1
  237. package/dist/ledger-transaction/entities/ledger-transaction.entity.d.ts +0 -19
  238. package/dist/ledger-transaction/entities/ledger-transaction.entity.js +0 -157
  239. package/dist/ledger-transaction/entities/ledger-transaction.entity.js.map +0 -1
  240. package/dist/ledger-transaction/index.d.ts +0 -6
  241. package/dist/ledger-transaction/index.js +0 -10
  242. package/dist/ledger-transaction/index.js.map +0 -1
  243. package/dist/payment/entities/payment-item.entity.d.ts +0 -10
  244. package/dist/payment/entities/payment-item.entity.js +0 -62
  245. package/dist/payment/entities/payment-item.entity.js.map +0 -1
  246. package/dist/payment/entities/payment.entity.d.ts +0 -25
  247. package/dist/payment/entities/payment.entity.js +0 -152
  248. package/dist/payment/entities/payment.entity.js.map +0 -1
  249. package/dist/payment/index.d.ts +0 -10
  250. package/dist/payment/index.js +0 -18
  251. package/dist/payment/index.js.map +0 -1
  252. package/dist/payment/interfaces/payment-item-attr.interface.d.ts +0 -8
  253. package/dist/payment/interfaces/payment-item-attr.interface.js +0 -7
  254. package/dist/payment/interfaces/payment-item-attr.interface.js.map +0 -1
  255. package/dist/payment/interfaces/payment-item.repository.interface.d.ts +0 -3
  256. package/dist/payment/interfaces/payment-item.repository.interface.js +0 -3
  257. package/dist/payment/interfaces/payment-item.repository.interface.js.map +0 -1
  258. package/dist/payment/interfaces/payment.repository.interface.d.ts +0 -3
  259. package/dist/payment/interfaces/payment.repository.interface.js +0 -3
  260. package/dist/payment/interfaces/payment.repository.interface.js.map +0 -1
  261. package/dist/payment/payment-item.repository.d.ts +0 -5
  262. package/dist/payment/payment-item.repository.js +0 -12
  263. package/dist/payment/payment-item.repository.js.map +0 -1
  264. package/dist/payment-item/interfaces/payment-item.repository.interface.d.ts +0 -3
  265. package/dist/payment-item/interfaces/payment-item.repository.interface.js +0 -3
  266. package/dist/payment-item/interfaces/payment-item.repository.interface.js.map +0 -1
  267. package/dist/quickbook-client/client.d.ts +0 -39
  268. package/dist/quickbook-client/client.js +0 -205
  269. package/dist/quickbook-client/client.js.map +0 -1
  270. package/dist/quickbook-client/constant.d.ts +0 -1
  271. package/dist/quickbook-client/constant.js +0 -5
  272. package/dist/quickbook-client/constant.js.map +0 -1
  273. package/dist/quickbook-client/index.d.ts +0 -5
  274. package/dist/quickbook-client/index.js +0 -6
  275. package/dist/quickbook-client/index.js.map +0 -1
  276. package/dist/quickbook-client/interfaces/quickbook-client-call-options.interface.d.ts +0 -6
  277. package/dist/quickbook-client/interfaces/quickbook-client-call-options.interface.js +0 -3
  278. package/dist/quickbook-client/interfaces/quickbook-client-call-options.interface.js.map +0 -1
  279. package/dist/quickbook-client/interfaces/quickbook-client-create-account-options.interface.d.ts +0 -9
  280. package/dist/quickbook-client/interfaces/quickbook-client-create-account-options.interface.js +0 -3
  281. package/dist/quickbook-client/interfaces/quickbook-client-create-account-options.interface.js.map +0 -1
  282. package/dist/quickbook-client/interfaces/quickbook-client-create-customer-options.interface.d.ts +0 -7
  283. package/dist/quickbook-client/interfaces/quickbook-client-create-customer-options.interface.js +0 -3
  284. package/dist/quickbook-client/interfaces/quickbook-client-create-customer-options.interface.js.map +0 -1
  285. package/dist/quickbook-client/interfaces/quickbook-client-options.interface.d.ts +0 -8
  286. package/dist/quickbook-client/interfaces/quickbook-client-options.interface.js +0 -3
  287. package/dist/quickbook-client/interfaces/quickbook-client-options.interface.js.map +0 -1
  288. package/dist/quickbook-client/quickbook-client.module-definition.d.ts +0 -2
  289. package/dist/quickbook-client/quickbook-client.module-definition.js +0 -9
  290. package/dist/quickbook-client/quickbook-client.module-definition.js.map +0 -1
  291. package/dist/quickbook-client/quickbook-client.module.d.ts +0 -6
  292. package/dist/quickbook-client/quickbook-client.module.js +0 -34
  293. package/dist/quickbook-client/quickbook-client.module.js.map +0 -1
@@ -1,276 +1,316 @@
1
- import {
2
- IAddress,
3
- IRepositoryBase,
4
- IPerson,
5
- LoginUserBase,
6
- RecordNotFoundError,
7
- } from '@tomei/general';
8
- import FinanceCustomerModel from '../models/customer.entity';
9
- import { AccountSystemEntity } from '../account-system-entity/account-system-entity';
10
- import { FinanceCustomerRepository } from './finance-customer.repository';
11
- import * as cuid from 'cuid';
12
- import Account from '../account/account';
13
- import { AccountRepository } from '../account/account.repository';
14
- import { type } from '../helpers/typeof';
15
- import * as FinanceDb from '../database';
16
-
17
- // const AccountSystemEntity = import('../account-system-entity').then(({AccountSystemEntity}) => AccountSystemEntity);
18
- export default abstract class FinanceCustomerBase
19
- extends AccountSystemEntity
20
- implements IPerson
21
- {
22
- CustomerId = 'New';
23
- CustSystemCode = '';
24
- CustSystemRefId = '';
25
-
26
- protected abstract ParentARAccountNo: string;
27
- protected abstract ParentAPAccountNo: string;
28
- protected abstract ARAccountNo: string;
29
- protected abstract APAccountNo: string;
30
-
31
- abstract FullName: string;
32
- abstract IDNo: string;
33
- abstract IDType: string;
34
- abstract ContactNo: string;
35
- abstract Email: string;
36
- abstract DefaultAddress: IAddress;
37
-
38
- private _AccountReceivable: Account;
39
- private _AccountPayable: Account;
40
-
41
- protected _DbTransaction: any;
42
-
43
- private static _AccountRepository = new AccountRepository();
44
-
45
- // note: getDetails from spec is void type. Meaning that this probably needed a fix soon
46
- async getDetails(): Promise<{
47
- FullName: string;
48
- IDNo: string;
49
- IDType: string;
50
- Email: string;
51
- ContactNo: string;
52
- }> {
53
- return {
54
- FullName: this.FullName,
55
- IDNo: this.IDNo,
56
- IDType: this.IDType,
57
- Email: this.Email,
58
- ContactNo: this.ContactNo,
59
- };
60
- }
61
-
62
- protected static _FinanceCustomerRepository = new FinanceCustomerRepository();
63
- RepositoryBase: IRepositoryBase<any>;
64
-
65
- constructor(
66
- custSystemRefId?: string,
67
- custSystemCode?: string,
68
- sFinanceCompanyId?: string,
69
- ) {
70
- super();
71
- if (custSystemRefId && custSystemCode && sFinanceCompanyId) {
72
- const financeCustomerData =
73
- FinanceCustomerBase._FinanceCustomerRepository.findOne({
74
- where: {
75
- CompanyId: sFinanceCompanyId,
76
- CustSystemCode: custSystemCode,
77
- CustSystemRefId: custSystemRefId,
78
- },
79
- });
80
- if (financeCustomerData) {
81
- this.CompanyId = sFinanceCompanyId;
82
- this.CustSystemCode = custSystemCode;
83
- this.CustSystemRefId = custSystemRefId;
84
- } else {
85
- const notFoundError = new RecordNotFoundError('No Record Found');
86
- throw notFoundError;
87
- }
88
- }
89
- }
90
-
91
- public static async initCustomer<C extends FinanceCustomerBase>(
92
- this: new () => C,
93
- custSystemRefId: string,
94
- custSystemCode: string,
95
- sFinanceCompanyId: string,
96
- dbTransaction?: any,
97
- ): Promise<C> {
98
- if (!dbTransaction) {
99
- dbTransaction = await FinanceDb.getConnection().transaction();
100
- }
101
-
102
- const financeCustomerData =
103
- await FinanceCustomerBase._FinanceCustomerRepository.findOne({
104
- where: {
105
- CompanyId: sFinanceCompanyId,
106
- CustSystemCode: custSystemCode,
107
- CustSystemRefId: custSystemRefId,
108
- },
109
- transaction: dbTransaction,
110
- });
111
- if (financeCustomerData) {
112
- const self = new this();
113
- self._DbTransaction = dbTransaction;
114
- self.CustomerId = financeCustomerData.CustomerId;
115
- self.CompanyId = sFinanceCompanyId;
116
- self.CustSystemCode = custSystemCode;
117
- self.CustSystemRefId = custSystemRefId;
118
- self.AccSystemRefId = financeCustomerData.AccSystemRefId;
119
- self.PostedToAccSystemYN = financeCustomerData.PostedToAccSystemYN;
120
- self.PostedById = financeCustomerData.PostedById;
121
- self.PostedDateTime = financeCustomerData.PostedDateTime;
122
- return self;
123
- } else {
124
- const notFoundError = new RecordNotFoundError('No Record Found');
125
- throw notFoundError;
126
- }
127
- }
128
-
129
- get AccountReceivable(): Promise<Account> {
130
- return new Promise((resolve, reject) => {
131
- let transaction = this._DbTransaction;
132
- if (this._AccountReceivable) {
133
- resolve(this._AccountReceivable);
134
- } else {
135
- return (
136
- FinanceCustomerBase._AccountRepository
137
- .findOne({
138
- where: {
139
- AccountType: 'Account Receivable',
140
- OwnerId: this.CustomerId,
141
- OwnerType: type(this),
142
- },
143
- transaction,
144
- })
145
- // })
146
- .then((accountData) => {
147
- this._AccountReceivable = new Account(transaction);
148
- if (accountData) {
149
- this._AccountReceivable.AccountNo = accountData.AccountNo;
150
- this._AccountReceivable.ParentAccountNo =
151
- accountData.ParentAccountNo;
152
- this._AccountReceivable.AccountType = accountData.AccountType;
153
- this._AccountReceivable.OwnerId = accountData.OwnerId;
154
- this._AccountReceivable.OwnerType = accountData.OwnerType;
155
- } else {
156
- // this._AccountReceivable.AccountNo = `${this.CustSystemCode}-AR-123456789`;
157
- // this._AccountReceivable.ParentAccountNo = `${this.CustSystemCode}-AR`;
158
- this._AccountReceivable.AccountNo = this.ARAccountNo; //SystemInfo.SYSTEM_CODE + '-AR-' + '8 digit running no'
159
- this._AccountReceivable.ParentAccountNo =
160
- this.ParentARAccountNo; //SystemInfo.SYSTEM_CODE + '-AR'
161
- this._AccountReceivable.AccountType = 'Account Receivable';
162
- this._AccountReceivable.OwnerId = this.CustomerId;
163
- this._AccountReceivable.OwnerType = type(this);
164
- }
165
- resolve(this._AccountReceivable);
166
- })
167
- .catch((err) => {
168
- reject(err);
169
- })
170
- );
171
- }
172
- });
173
- }
174
-
175
- get AccountPayable(): Promise<Account> {
176
- return new Promise((resolve, reject) => {
177
- let transaction = this._DbTransaction;
178
- if (this._AccountPayable) {
179
- resolve(this._AccountPayable);
180
- } else {
181
- return (
182
- FinanceCustomerBase._AccountRepository
183
- .findOne({
184
- where: {
185
- AccountType: 'Account Payable',
186
- OwnerId: this.CustomerId,
187
- OwnerType: type(this),
188
- },
189
- transaction,
190
- })
191
- // })
192
- .then((accountData) => {
193
- this._AccountPayable = new Account(transaction);
194
- if (accountData) {
195
- this._AccountPayable.AccountNo = accountData.AccountNo;
196
- this._AccountPayable.ParentAccountNo =
197
- accountData.ParentAccountNo;
198
- this._AccountPayable.AccountType = accountData.AccountType;
199
- this._AccountPayable.OwnerId = accountData.OwnerId;
200
- this._AccountPayable.OwnerType = accountData.OwnerType;
201
- } else {
202
- // this._AccountPayable.AccountNo = `${this.CustSystemCode}-AP-123456789`;
203
- // this._AccountPayable.ParentAccountNo = `${this.CustSystemCode}-AP`;
204
- this._AccountPayable.AccountNo = this.APAccountNo; //SystemInfo.SYSTEM_CODE + '-AP-' + '8 digit running no'
205
- this._AccountPayable.ParentAccountNo = this.ParentAPAccountNo; //SystemInfo.SYSTEM_CODE + '-AP'
206
- this._AccountPayable.AccountType = 'Account Payable';
207
- this._AccountPayable.OwnerId = this.CustomerId;
208
- this._AccountPayable.OwnerType = type(this);
209
- }
210
- resolve(this._AccountPayable);
211
- })
212
- .catch((err) => {
213
- reject(err);
214
- })
215
- );
216
- }
217
- });
218
- }
219
-
220
- /*
221
- * Get the billing address for a person.
222
- **/
223
- abstract getBillingAddress(params: any): Promise<IAddress>;
224
-
225
- init(person: LoginUserBase) {
226
- this.FullName = person.FullName;
227
- this.IDNo = person.IDNo;
228
- this.IDType = person.IDType;
229
- this.Email = person.Email;
230
- this.ContactNo = person.ContactNo;
231
- this.DefaultAddress = person.DefaultAddress;
232
- }
233
-
234
- async save(
235
- accSystemRefId: string,
236
- custSystemCode: string,
237
- custSystemRefId: string,
238
- dbTransaction?: any,
239
- ): Promise<FinanceCustomerModel> {
240
- this.CustSystemCode = custSystemCode;
241
- this.CustSystemRefId = custSystemRefId;
242
- this.AccSystemRefId = accSystemRefId;
243
- this.PostedToAccSystemYN = 'Y';
244
- const data = await FinanceCustomerBase._FinanceCustomerRepository.create(
245
- {
246
- CompanyId: this.CompanyId,
247
- CustomerId: cuid(),
248
- CustSystemCode: this.CustSystemCode,
249
- CustSystemRefId: this.CustSystemRefId,
250
- AccSystemRefId: this.AccSystemRefId,
251
- PostedToAccSystemYN: this.PostedToAccSystemYN,
252
- },
253
- { transaction: dbTransaction },
254
- );
255
- return data;
256
- }
257
-
258
- static async isFinanceCustomerExist(
259
- custSystemRefId: string,
260
- custSystemCode: string,
261
- sFinanceCompanyId: string,
262
- ): Promise<boolean> {
263
- const data = await FinanceCustomerBase._FinanceCustomerRepository.findAll({
264
- where: {
265
- CustSystemRefId: custSystemRefId,
266
- CustSystemCode: custSystemCode,
267
- CompanyId: sFinanceCompanyId,
268
- },
269
- });
270
-
271
- if (data.length > 0) {
272
- return true;
273
- }
274
- return false;
275
- }
276
- }
1
+ import {
2
+ IAddress,
3
+ IRepositoryBase,
4
+ IPerson,
5
+ LoginUserBase,
6
+ RecordNotFoundError,
7
+ } from '@tomei/general';
8
+ import FinanceCustomerModel from '../models/customer.entity';
9
+ import { AccountSystemEntity } from '../account-system-entity/account-system-entity';
10
+ import { FinanceCustomerRepository } from './finance-customer.repository';
11
+ import * as cuid from 'cuid';
12
+ import Account from '../account/account';
13
+ import { AccountRepository } from '../account/account.repository';
14
+ import { type } from '../helpers/typeof';
15
+ import * as FinanceDb from '../database';
16
+ import { LedgerTransactionRepository } from '../ledger-transaction/ledger-transaction.repository';
17
+
18
+ // const AccountSystemEntity = import('../account-system-entity').then(({AccountSystemEntity}) => AccountSystemEntity);
19
+ export default abstract class FinanceCustomerBase
20
+ extends AccountSystemEntity
21
+ implements IPerson
22
+ {
23
+ CustomerId = 'New';
24
+ CustSystemCode = '';
25
+ CustSystemRefId = '';
26
+
27
+ protected abstract ParentARAccountNo: string;
28
+ protected abstract ParentAPAccountNo: string;
29
+ protected abstract ARAccountNo: string;
30
+ protected abstract APAccountNo: string;
31
+
32
+ abstract FullName: string;
33
+ abstract IDNo: string;
34
+ abstract IDType: string;
35
+ abstract ContactNo: string;
36
+ abstract Email: string;
37
+ abstract DefaultAddress: IAddress;
38
+
39
+ private _AccountReceivable: Account;
40
+ private _AccountPayable: Account;
41
+
42
+ protected _DbTransaction: any;
43
+
44
+ private static _AccountRepository = new AccountRepository();
45
+ private static _LedgerTransactionRepository =
46
+ new LedgerTransactionRepository();
47
+
48
+ // note: getDetails from spec is void type. Meaning that this probably needed a fix soon
49
+ async getDetails(): Promise<{
50
+ FullName: string;
51
+ IDNo: string;
52
+ IDType: string;
53
+ Email: string;
54
+ ContactNo: string;
55
+ }> {
56
+ return {
57
+ FullName: this.FullName,
58
+ IDNo: this.IDNo,
59
+ IDType: this.IDType,
60
+ Email: this.Email,
61
+ ContactNo: this.ContactNo,
62
+ };
63
+ }
64
+
65
+ protected static _FinanceCustomerRepository = new FinanceCustomerRepository();
66
+ RepositoryBase: IRepositoryBase<any>;
67
+
68
+ constructor(
69
+ custSystemRefId?: string,
70
+ custSystemCode?: string,
71
+ sFinanceCompanyId?: string,
72
+ ) {
73
+ super();
74
+ if (custSystemRefId && custSystemCode && sFinanceCompanyId) {
75
+ const financeCustomerData =
76
+ FinanceCustomerBase._FinanceCustomerRepository.findOne({
77
+ where: {
78
+ CompanyId: sFinanceCompanyId,
79
+ CustSystemCode: custSystemCode,
80
+ CustSystemRefId: custSystemRefId,
81
+ },
82
+ });
83
+ if (financeCustomerData) {
84
+ this.CompanyId = sFinanceCompanyId;
85
+ this.CustSystemCode = custSystemCode;
86
+ this.CustSystemRefId = custSystemRefId;
87
+ } else {
88
+ const notFoundError = new RecordNotFoundError('No Record Found');
89
+ throw notFoundError;
90
+ }
91
+ }
92
+ }
93
+
94
+ public static async initCustomer<C extends FinanceCustomerBase>(
95
+ this: new () => C,
96
+ custSystemRefId: string,
97
+ custSystemCode: string,
98
+ sFinanceCompanyId: string,
99
+ dbTransaction?: any,
100
+ ): Promise<C> {
101
+ if (!dbTransaction) {
102
+ dbTransaction = await FinanceDb.getConnection().transaction();
103
+ }
104
+
105
+ const financeCustomerData =
106
+ await FinanceCustomerBase._FinanceCustomerRepository.findOne({
107
+ where: {
108
+ CompanyId: sFinanceCompanyId,
109
+ CustSystemCode: custSystemCode,
110
+ CustSystemRefId: custSystemRefId,
111
+ },
112
+ transaction: dbTransaction,
113
+ });
114
+ if (financeCustomerData) {
115
+ const self = new this();
116
+ self._DbTransaction = dbTransaction;
117
+ self.CustomerId = financeCustomerData.CustomerId;
118
+ self.CompanyId = sFinanceCompanyId;
119
+ self.CustSystemCode = custSystemCode;
120
+ self.CustSystemRefId = custSystemRefId;
121
+ self.AccSystemRefId = financeCustomerData.AccSystemRefId;
122
+ self.PostedToAccSystemYN = financeCustomerData.PostedToAccSystemYN;
123
+ self.PostedById = financeCustomerData.PostedById;
124
+ self.PostedDateTime = financeCustomerData.PostedDateTime;
125
+ return self;
126
+ } else {
127
+ const notFoundError = new RecordNotFoundError('No Record Found');
128
+ throw notFoundError;
129
+ }
130
+ }
131
+
132
+ get AccountReceivable(): Promise<Account> {
133
+ return new Promise((resolve, reject) => {
134
+ let transaction = this._DbTransaction;
135
+ if (this._AccountReceivable) {
136
+ resolve(this._AccountReceivable);
137
+ } else {
138
+ return (
139
+ FinanceCustomerBase._AccountRepository
140
+ .findOne({
141
+ where: {
142
+ AccountType: 'Account Receivable',
143
+ OwnerId: this.CustomerId,
144
+ OwnerType: type(this),
145
+ },
146
+ transaction,
147
+ })
148
+ // })
149
+ .then((accountData) => {
150
+ this._AccountReceivable = new Account(transaction);
151
+ if (accountData) {
152
+ this._AccountReceivable.AccountNo = accountData.AccountNo;
153
+ this._AccountReceivable.ParentAccountNo =
154
+ accountData.ParentAccountNo;
155
+ this._AccountReceivable.AccountType = accountData.AccountType;
156
+ this._AccountReceivable.OwnerId = accountData.OwnerId;
157
+ this._AccountReceivable.OwnerType = accountData.OwnerType;
158
+ } else {
159
+ // this._AccountReceivable.AccountNo = `${this.CustSystemCode}-AR-123456789`;
160
+ // this._AccountReceivable.ParentAccountNo = `${this.CustSystemCode}-AR`;
161
+ this._AccountReceivable.AccountNo = this.ARAccountNo; //SystemInfo.SYSTEM_CODE + '-AR-' + '8 digit running no'
162
+ this._AccountReceivable.ParentAccountNo =
163
+ this.ParentARAccountNo; //SystemInfo.SYSTEM_CODE + '-AR'
164
+ this._AccountReceivable.AccountType = 'Account Receivable';
165
+ this._AccountReceivable.OwnerId = this.CustomerId;
166
+ this._AccountReceivable.OwnerType = type(this);
167
+ }
168
+ resolve(this._AccountReceivable);
169
+ })
170
+ .catch((err) => {
171
+ reject(err);
172
+ })
173
+ );
174
+ }
175
+ });
176
+ }
177
+
178
+ get AccountPayable(): Promise<Account> {
179
+ return new Promise((resolve, reject) => {
180
+ let transaction = this._DbTransaction;
181
+ if (this._AccountPayable) {
182
+ resolve(this._AccountPayable);
183
+ } else {
184
+ return (
185
+ FinanceCustomerBase._AccountRepository
186
+ .findOne({
187
+ where: {
188
+ AccountType: 'Account Payable',
189
+ OwnerId: this.CustomerId,
190
+ OwnerType: type(this),
191
+ },
192
+ transaction,
193
+ })
194
+ // })
195
+ .then((accountData) => {
196
+ this._AccountPayable = new Account(transaction);
197
+ if (accountData) {
198
+ this._AccountPayable.AccountNo = accountData.AccountNo;
199
+ this._AccountPayable.ParentAccountNo =
200
+ accountData.ParentAccountNo;
201
+ this._AccountPayable.AccountType = accountData.AccountType;
202
+ this._AccountPayable.OwnerId = accountData.OwnerId;
203
+ this._AccountPayable.OwnerType = accountData.OwnerType;
204
+ } else {
205
+ // this._AccountPayable.AccountNo = `${this.CustSystemCode}-AP-123456789`;
206
+ // this._AccountPayable.ParentAccountNo = `${this.CustSystemCode}-AP`;
207
+ this._AccountPayable.AccountNo = this.APAccountNo; //SystemInfo.SYSTEM_CODE + '-AP-' + '8 digit running no'
208
+ this._AccountPayable.ParentAccountNo = this.ParentAPAccountNo; //SystemInfo.SYSTEM_CODE + '-AP'
209
+ this._AccountPayable.AccountType = 'Account Payable';
210
+ this._AccountPayable.OwnerId = this.CustomerId;
211
+ this._AccountPayable.OwnerType = type(this);
212
+ }
213
+ resolve(this._AccountPayable);
214
+ })
215
+ .catch((err) => {
216
+ reject(err);
217
+ })
218
+ );
219
+ }
220
+ });
221
+ }
222
+
223
+ /*
224
+ * Get the billing address for a person.
225
+ **/
226
+ abstract getBillingAddress(params: any): Promise<IAddress>;
227
+
228
+ init(person: LoginUserBase) {
229
+ this.FullName = person.FullName;
230
+ this.IDNo = person.IDNo;
231
+ this.IDType = person.IDType;
232
+ this.Email = person.Email;
233
+ this.ContactNo = person.ContactNo;
234
+ this.DefaultAddress = person.DefaultAddress;
235
+ }
236
+
237
+ async save(
238
+ accSystemRefId: string,
239
+ custSystemCode: string,
240
+ custSystemRefId: string,
241
+ dbTransaction?: any,
242
+ ): Promise<FinanceCustomerModel> {
243
+ this.CustSystemCode = custSystemCode;
244
+ this.CustSystemRefId = custSystemRefId;
245
+ this.AccSystemRefId = accSystemRefId;
246
+ this.PostedToAccSystemYN = 'Y';
247
+ const data = await FinanceCustomerBase._FinanceCustomerRepository.create(
248
+ {
249
+ CompanyId: this.CompanyId,
250
+ CustomerId: cuid(),
251
+ CustSystemCode: this.CustSystemCode,
252
+ CustSystemRefId: this.CustSystemRefId,
253
+ AccSystemRefId: this.AccSystemRefId,
254
+ PostedToAccSystemYN: this.PostedToAccSystemYN,
255
+ },
256
+ { transaction: dbTransaction },
257
+ );
258
+ return data;
259
+ }
260
+
261
+ static async isFinanceCustomerExist(
262
+ custSystemRefId: string,
263
+ custSystemCode: string,
264
+ sFinanceCompanyId: string,
265
+ ): Promise<boolean> {
266
+ const data = await FinanceCustomerBase._FinanceCustomerRepository.findAll({
267
+ where: {
268
+ CustSystemRefId: custSystemRefId,
269
+ CustSystemCode: custSystemCode,
270
+ CompanyId: sFinanceCompanyId,
271
+ },
272
+ });
273
+
274
+ if (data.length > 0) {
275
+ return true;
276
+ }
277
+ return false;
278
+ }
279
+
280
+ /**
281
+ * Method to calculate and return the outstanding balance for customer receivable account
282
+ *
283
+ * @param dbTransaction
284
+ * @returns {number}
285
+ */
286
+ async getOutstandingBalance(dbTransaction: any): Promise<number> {
287
+ if (!dbTransaction) {
288
+ dbTransaction = await FinanceDb.getConnection().transaction();
289
+ }
290
+
291
+ const ledgerTransactions =
292
+ await FinanceCustomerBase._LedgerTransactionRepository.findAll({
293
+ where: {
294
+ AccountNo: (await this.AccountReceivable).AccountNo,
295
+ },
296
+ transaction: dbTransaction,
297
+ });
298
+
299
+ const totalDebitAmount = ledgerTransactions.reduce(
300
+ (accumulator, currentValue) => accumulator + +currentValue.DebitAmount,
301
+ 0,
302
+ );
303
+
304
+ const totalCreditAmount = ledgerTransactions.reduce(
305
+ (accumulator, currentValue) => accumulator + +currentValue.CreditAmount,
306
+ 0,
307
+ );
308
+
309
+ if (totalCreditAmount > totalDebitAmount) {
310
+ return 0;
311
+ }
312
+
313
+ const balance = totalDebitAmount - totalCreditAmount;
314
+ return balance;
315
+ }
316
+ }
@@ -1,13 +1,13 @@
1
- import { Injectable } from '@nestjs/common/decorators';
2
- import { RepositoryBase, IRepositoryBase } from '@tomei/general';
3
- import FinanceCustomerModel from '../models/customer.entity';
4
-
5
- @Injectable()
6
- export class FinanceCustomerRepository
7
- extends RepositoryBase<FinanceCustomerModel>
8
- implements IRepositoryBase<FinanceCustomerModel>
9
- {
10
- constructor() {
11
- super(FinanceCustomerModel);
12
- }
13
- }
1
+ import { Injectable } from '@nestjs/common/decorators';
2
+ import { RepositoryBase, IRepositoryBase } from '@tomei/general';
3
+ import FinanceCustomerModel from '../models/customer.entity';
4
+
5
+ @Injectable()
6
+ export class FinanceCustomerRepository
7
+ extends RepositoryBase<FinanceCustomerModel>
8
+ implements IRepositoryBase<FinanceCustomerModel>
9
+ {
10
+ constructor() {
11
+ super(FinanceCustomerModel);
12
+ }
13
+ }
@@ -1,3 +1,3 @@
1
- export interface ICustomerRepository<T> {
2
- findOne?(options: any): Promise<T>;
3
- }
1
+ export interface ICustomerRepository<T> {
2
+ findOne?(options: any): Promise<T>;
3
+ }
@@ -1,10 +1,10 @@
1
- export interface IFinanceCustomerAttr {
2
- CustomerId: string;
3
- CompanyId: string;
4
- CustSystemCode: string;
5
- CustSystemRefId: string;
6
- AccSystemRefId: string;
7
- PostedToAccSystemYN: string;
8
- PostedById: string;
9
- PostedDateTime?: Date;
10
- }
1
+ export interface IFinanceCustomerAttr {
2
+ CustomerId: string;
3
+ CompanyId: string;
4
+ CustSystemCode: string;
5
+ CustSystemRefId: string;
6
+ AccSystemRefId: string;
7
+ PostedToAccSystemYN: string;
8
+ PostedById: string;
9
+ PostedDateTime?: Date;
10
+ }