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