gemcap-be-common 1.2.140 → 1.3.0
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/classes/bank-transaction-item.d.ts +17 -0
- package/classes/bank-transaction-item.js +64 -0
- package/classes/bank-transaction-item.ts +66 -0
- package/classes/bank-uploaded-transaction.d.ts +17 -0
- package/classes/bank-uploaded-transaction.js +35 -0
- package/classes/bank-uploaded-transaction.ts +35 -0
- package/classes/inventory-item.d.ts +41 -0
- package/classes/inventory-item.js +44 -0
- package/classes/inventory-item.ts +63 -0
- package/classes/payable-account-item.d.ts +22 -0
- package/classes/payable-account-item.js +27 -0
- package/classes/payable-account-item.ts +35 -0
- package/classes/quickbook-item.d.ts +37 -0
- package/classes/quickbook-item.js +51 -0
- package/classes/quickbook-item.ts +59 -0
- package/classes/receivable-item.d.ts +26 -0
- package/classes/receivable-item.js +28 -0
- package/classes/receivable-item.ts +38 -0
- package/constants/date-formats.contsants.d.ts +1 -0
- package/constants/date-formats.contsants.js +4 -0
- package/constants/date-formats.contsants.ts +1 -0
- package/db/brokers.db.d.ts +185 -0
- package/db/brokers.db.js +35 -2
- package/db/brokers.db.ts +34 -1
- package/db/collateral-adjustments.db.d.ts +34 -0
- package/db/collateral-adjustments.db.js +52 -0
- package/db/collateral-adjustments.db.ts +54 -0
- package/db/collaterals.db.d.ts +1 -1
- package/db/equipment.db.d.ts +40 -0
- package/db/equipment.db.js +55 -0
- package/db/equipment.db.ts +56 -0
- package/db/financial-spreading.db.ts +2 -1
- package/db/groups.d.ts +5 -0
- package/db/groups.js +57 -0
- package/db/groups.ts +52 -0
- package/db/inventories.d.ts +91 -0
- package/db/inventories.js +449 -0
- package/db/inventories.ts +481 -0
- package/db/inventory-availability.d.ts +3 -0
- package/db/inventory-availability.js +103 -0
- package/db/inventory-availability.ts +113 -0
- package/db/new-summary.d.ts +31 -0
- package/db/new-summary.js +1295 -0
- package/db/new-summary.ts +1509 -0
- package/db/payable-accounts.d.ts +30 -0
- package/db/payable-accounts.js +55 -0
- package/db/payable-accounts.ts +50 -0
- package/db/reserve.db.d.ts +34 -0
- package/db/reserve.db.js +52 -0
- package/db/reserve.db.ts +48 -0
- package/db/uploads.db.d.ts +2 -0
- package/db/uploads.db.js +29 -0
- package/db/uploads.db.ts +24 -0
- package/helpers/main.helper.d.ts +31 -0
- package/helpers/main.helper.js +63 -0
- package/helpers/main.helper.ts +63 -0
- package/models/AccountPayableItem.model.d.ts +6 -6
- package/models/AllocatedBankTransaction.model.d.ts +54 -0
- package/models/AllocatedBankTransaction.model.js +70 -0
- package/models/AllocatedBankTransaction.model.ts +94 -0
- package/models/AllocatedData.model.d.ts +33 -0
- package/models/AllocatedData.model.js +19 -0
- package/models/AllocatedData.model.ts +24 -0
- package/models/BBCDate.model.d.ts +3 -3
- package/models/BBCSheet.model.d.ts +3 -3
- package/models/Banks.model.d.ts +3 -3
- package/models/Borrower.model.d.ts +3 -3
- package/models/BorrowerData.model.d.ts +3 -3
- package/models/BorrowerDataInsurance.model.d.ts +3 -3
- package/models/BorrowerDataTerm.model.d.ts +3 -3
- package/models/BorrowerSummary.model.js +1 -1
- package/models/BorrowerSummary.model.ts +1 -1
- package/models/CalandarDay.model.d.ts +40 -0
- package/models/CalandarDay.model.js +47 -0
- package/models/CalandarDay.model.ts +61 -0
- package/models/CashAllocationProduct.model.d.ts +119 -0
- package/models/CashAllocationProduct.model.js +102 -0
- package/models/CashAllocationProduct.model.ts +112 -0
- package/models/CashAllocationReference.model.d.ts +37 -0
- package/models/CashAllocationReference.model.js +27 -0
- package/models/CashAllocationReference.model.ts +40 -0
- package/models/CollateralAdjustment.model.d.ts +51 -0
- package/models/CollateralAdjustment.model.js +61 -0
- package/models/CollateralAdjustment.model.ts +98 -0
- package/models/Company.model.d.ts +35 -0
- package/models/Company.model.js +18 -0
- package/models/Company.model.ts +29 -0
- package/models/CustomerAPGroup.model.d.ts +32 -0
- package/models/CustomerAPGroup.model.js +24 -0
- package/models/CustomerAPGroup.model.ts +31 -0
- package/models/Equipment.model.d.ts +53 -0
- package/models/Equipment.model.js +140 -0
- package/models/Equipment.model.ts +172 -0
- package/models/FinancialCompliance.model.d.ts +39 -0
- package/models/FinancialCompliance.model.js +64 -0
- package/models/FinancialCompliance.model.ts +78 -0
- package/models/FinancialComplianceBorrower.model.d.ts +58 -0
- package/models/FinancialComplianceBorrower.model.js +82 -0
- package/models/FinancialComplianceBorrower.model.ts +118 -0
- package/models/FinancialIndexes.model.d.ts +36 -0
- package/models/FinancialIndexes.model.js +27 -0
- package/models/FinancialIndexes.model.ts +37 -0
- package/models/Inventory.model.d.ts +18 -18
- package/models/InventoryAvailability.model.d.ts +21 -21
- package/models/InventoryAvailabilityItem.model.d.ts +6 -6
- package/models/InventoryItem.model.d.ts +24 -24
- package/models/InventoryManualEntry.model.d.ts +9 -9
- package/models/InventorySeasonalRates.model.d.ts +3 -3
- package/models/LoanBroker.model.d.ts +3 -3
- package/models/LoanCharges.model.d.ts +12 -12
- package/models/LoanProducts.model.d.ts +9 -9
- package/models/LoanStatementStatus.model.d.ts +35 -0
- package/models/LoanStatementStatus.model.js +34 -0
- package/models/LoanStatementStatus.model.ts +45 -0
- package/models/LoanStatementTransaction.model.d.ts +9 -9
- package/models/LoanTransactionFile.model.d.ts +41 -0
- package/models/LoanTransactionFile.model.js +44 -0
- package/models/LoanTransactionFile.model.ts +61 -0
- package/models/MappedGroup.model.d.ts +37 -0
- package/models/MappedGroup.model.js +33 -0
- package/models/MappedGroup.model.ts +46 -0
- package/models/MonthEndData.Model.d.ts +41 -0
- package/models/MonthEndData.Model.js +42 -0
- package/models/MonthEndData.Model.ts +53 -0
- package/models/OrganizationEmails.model.d.ts +44 -0
- package/models/OrganizationEmails.model.js +40 -0
- package/models/OrganizationEmails.model.ts +54 -0
- package/models/ProductBroker.model.d.ts +9 -9
- package/models/QuickbooksAccount.model.d.ts +39 -0
- package/models/QuickbooksAccount.model.js +43 -0
- package/models/QuickbooksAccount.model.ts +57 -0
- package/models/Receivable.model.d.ts +12 -12
- package/models/ReceivableAvailability.model.d.ts +54 -54
- package/models/ReceivableAvailabilityItem.model.d.ts +57 -57
- package/models/ReceivableItem.model.d.ts +6 -6
- package/models/Reserve.model.d.ts +51 -0
- package/models/Reserve.model.js +96 -0
- package/models/Reserve.model.ts +125 -0
- package/models/TermLoan.model.d.ts +3 -3
- package/models/TermLoanCalculated.model.d.ts +6 -6
- package/models/TransactionAttachedFile.Model.d.ts +35 -0
- package/models/TransactionAttachedFile.Model.js +37 -0
- package/models/TransactionAttachedFile.Model.ts +48 -0
- package/models/UploadedBankTransaction.model.d.ts +56 -0
- package/models/UploadedBankTransaction.model.js +78 -0
- package/models/UploadedBankTransaction.model.ts +110 -0
- package/models/UploadedData.model.d.ts +36 -0
- package/models/UploadedData.model.js +23 -0
- package/models/UploadedData.model.ts +35 -0
- package/models/UploadedFile.model.d.ts +40 -0
- package/models/UploadedFile.model.js +41 -0
- package/models/UploadedFile.model.ts +57 -0
- package/models/UploadedSheet.model.d.ts +46 -0
- package/models/UploadedSheet.model.js +27 -0
- package/models/UploadedSheet.model.ts +51 -0
- package/package.json +10 -1
- package/repositories/globals.repository.d.ts +8 -0
- package/repositories/globals.repository.js +24 -0
- package/repositories/globals.repository.ts +21 -0
- package/services/attached-files.service.d.ts +57 -0
- package/services/attached-files.service.js +103 -0
- package/services/attached-files.service.ts +123 -0
- package/services/availability.service.d.ts +77 -0
- package/services/availability.service.js +897 -0
- package/services/availability.service.ts +1034 -0
- package/services/bank-uploaded-transactions.service.d.ts +33 -0
- package/services/bank-uploaded-transactions.service.js +430 -0
- package/services/bank-uploaded-transactions.service.ts +475 -0
- package/services/banks.service.d.ts +36 -0
- package/services/banks.service.js +91 -0
- package/services/banks.service.ts +95 -0
- package/services/borrower-summary.service.d.ts +35 -0
- package/services/borrower-summary.service.js +310 -0
- package/services/borrower-summary.service.ts +334 -0
- package/services/borrowers.service.d.ts +103 -0
- package/services/borrowers.service.js +268 -0
- package/services/borrowers.service.ts +302 -0
- package/services/brokers.service.d.ts +212 -0
- package/services/brokers.service.js +160 -0
- package/services/brokers.service.ts +200 -0
- package/services/calendar.service.d.ts +53 -0
- package/services/calendar.service.js +108 -0
- package/services/calendar.service.ts +128 -0
- package/services/cash-allocation.service.d.ts +40 -0
- package/services/cash-allocation.service.js +92 -0
- package/services/cash-allocation.service.ts +105 -0
- package/services/collateral-adjustments.service.d.ts +38 -0
- package/services/collateral-adjustments.service.js +82 -0
- package/services/collateral-adjustments.service.ts +95 -0
- package/services/collaterals.service.d.ts +69 -0
- package/services/collaterals.service.js +279 -0
- package/services/collaterals.service.ts +319 -0
- package/services/companies.service.d.ts +5 -0
- package/services/companies.service.js +21 -0
- package/services/companies.service.ts +23 -0
- package/services/compliance-borrowers.service.d.ts +152 -0
- package/services/compliance-borrowers.service.js +569 -0
- package/services/compliance-borrowers.service.ts +617 -0
- package/services/equipment.service.d.ts +42 -0
- package/services/equipment.service.js +120 -0
- package/services/equipment.service.ts +149 -0
- package/services/file-manager.service.d.ts +44 -0
- package/services/file-manager.service.js +120 -0
- package/services/file-manager.service.ts +146 -0
- package/services/financial-compliance.service.d.ts +58 -0
- package/services/financial-compliance.service.js +281 -0
- package/services/financial-compliance.service.ts +309 -0
- package/services/financial-indexes.service.d.ts +20 -0
- package/services/financial-indexes.service.js +241 -0
- package/services/financial-indexes.service.ts +257 -0
- package/services/financial-spreading.service.d.ts +74 -0
- package/services/financial-spreading.service.js +450 -0
- package/services/financial-spreading.service.ts +517 -0
- package/services/globals.service.d.ts +5 -0
- package/services/globals.service.js +11 -0
- package/services/globals.service.ts +8 -0
- package/services/groups.service.d.ts +39 -0
- package/services/groups.service.js +65 -0
- package/services/groups.service.ts +64 -0
- package/services/inventory-availability.service.d.ts +13 -0
- package/services/inventory-availability.service.js +170 -0
- package/services/inventory-availability.service.ts +187 -0
- package/services/inventory.service.d.ts +118 -0
- package/services/inventory.service.js +239 -0
- package/services/inventory.service.ts +276 -0
- package/services/loan-charges.service.d.ts +83 -0
- package/services/loan-charges.service.js +343 -0
- package/services/loan-charges.service.ts +396 -0
- package/services/loan-payments.service.d.ts +94 -0
- package/services/loan-payments.service.js +485 -0
- package/services/loan-payments.service.ts +541 -0
- package/services/loan-products.service.d.ts +12 -0
- package/services/loan-products.service.js +55 -0
- package/services/loan-products.service.ts +58 -0
- package/services/loan-statement-balance.service.d.ts +16 -0
- package/services/loan-statement-balance.service.js +106 -0
- package/services/loan-statement-balance.service.ts +113 -0
- package/services/loan-statement-effects.service.d.ts +8 -0
- package/services/loan-statement-effects.service.js +42 -0
- package/services/loan-statement-effects.service.ts +41 -0
- package/services/loan-statement-status.service.d.ts +208 -0
- package/services/loan-statement-status.service.js +159 -0
- package/services/loan-statement-status.service.ts +177 -0
- package/services/loan-statement.service.d.ts +186 -0
- package/services/loan-statement.service.js +935 -0
- package/services/loan-statement.service.ts +1040 -0
- package/services/loan-transactions.service.d.ts +169 -0
- package/services/loan-transactions.service.js +941 -0
- package/services/loan-transactions.service.ts +1042 -0
- package/services/lock.service.d.ts +6 -0
- package/services/lock.service.js +45 -0
- package/services/lock.service.ts +45 -0
- package/services/manual-entry.service.d.ts +20 -0
- package/services/manual-entry.service.js +186 -0
- package/services/manual-entry.service.ts +201 -0
- package/services/month-end-data.service.d.ts +34 -0
- package/services/month-end-data.service.js +30 -0
- package/services/month-end-data.service.ts +35 -0
- package/services/nodemailer.service.d.ts +96 -0
- package/services/nodemailer.service.js +689 -0
- package/services/nodemailer.service.ts +774 -0
- package/services/organization-emails.service.d.ts +31 -0
- package/services/organization-emails.service.js +10 -0
- package/services/organization-emails.service.ts +7 -0
- package/services/organizations.service.d.ts +34 -0
- package/services/organizations.service.js +74 -0
- package/services/organizations.service.ts +84 -0
- package/services/pdf.service.d.ts +61 -0
- package/services/pdf.service.js +547 -0
- package/services/pdf.service.ts +642 -0
- package/services/quickbooks.service.d.ts +99 -0
- package/services/quickbooks.service.js +640 -0
- package/services/quickbooks.service.ts +734 -0
- package/services/reports/investor-summary.service.d.ts +28 -0
- package/services/reports/investor-summary.service.js +136 -0
- package/services/reports/investor-summary.service.ts +159 -0
- package/services/reports.service.d.ts +126 -0
- package/services/reports.service.js +584 -0
- package/services/reports.service.ts +702 -0
- package/services/reserve.service.d.ts +37 -0
- package/services/reserve.service.js +76 -0
- package/services/reserve.service.ts +79 -0
- package/services/sentry.service.d.ts +11 -0
- package/services/sentry.service.js +49 -0
- package/services/sentry.service.ts +33 -0
- package/services/signs.service.d.ts +69 -0
- package/services/signs.service.js +230 -0
- package/services/signs.service.ts +260 -0
- package/services/term-loan.service.d.ts +30 -0
- package/services/term-loan.service.js +614 -0
- package/services/term-loan.service.ts +696 -0
- package/services/uploads.service.d.ts +134 -0
- package/services/uploads.service.js +587 -0
- package/services/uploads.service.ts +643 -0
- package/services/user-logs.service.d.ts +23 -0
- package/services/user-logs.service.js +160 -0
- package/services/user-logs.service.ts +177 -0
- package/services/users.service.d.ts +4 -4
- package/services/yield.service.d.ts +46 -0
- package/services/yield.service.js +42 -12
- package/services/yield.service.ts +38 -8
- package/tsconfig.json +5 -5
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
import Decimal from 'decimal.js';
|
|
3
|
+
|
|
4
|
+
import { ECollaterals } from '../enums/collaterals.enum';
|
|
5
|
+
import { getBBCDateDoc } from '../db/bbcDates.db';
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
copyCollateralAdjustmentWithoutSaving,
|
|
9
|
+
getCollateralAdjustmentDocs,
|
|
10
|
+
getLastCollateralAdjustmentDocs,
|
|
11
|
+
saveCollateralAdjustmentDoc,
|
|
12
|
+
} from '../db/collateral-adjustments.db';
|
|
13
|
+
import {
|
|
14
|
+
ICollateralAdjustment,
|
|
15
|
+
ICollateralAdjustmentItem,
|
|
16
|
+
ICollateralAdjustmentSummary,
|
|
17
|
+
} from '../models/CollateralAdjustment.model';
|
|
18
|
+
import { SignsService } from './signs.service';
|
|
19
|
+
|
|
20
|
+
export class CollateralAdjustmentsService {
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
private readonly signsService: SignsService,
|
|
24
|
+
) {
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async getCollateralAdjustmentSummary(bbcDateId: string): Promise<ICollateralAdjustmentSummary> {
|
|
28
|
+
const bbcDateIdID = new mongoose.Types.ObjectId(bbcDateId);
|
|
29
|
+
const collateralAdjustments = await getCollateralAdjustmentDocs([bbcDateIdID]);
|
|
30
|
+
if (!collateralAdjustments.length) {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
return collateralAdjustments[0].summary;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async getCollateralAdjustment(bbcDateId: string): Promise<ICollateralAdjustment> {
|
|
37
|
+
const bbcDateIdID = new mongoose.Types.ObjectId(bbcDateId);
|
|
38
|
+
const cCollateralAdjustments = await getCollateralAdjustmentDocs([bbcDateIdID]);
|
|
39
|
+
if (!!cCollateralAdjustments.length) {
|
|
40
|
+
return cCollateralAdjustments.pop();
|
|
41
|
+
}
|
|
42
|
+
const lastItems = await this.getLastCopyCollateralAdjustmentItems(bbcDateId);
|
|
43
|
+
const isBBCLockedResult = await this.signsService.isBBCLocked(bbcDateId);
|
|
44
|
+
if (isBBCLockedResult) {
|
|
45
|
+
const summary = this.calculateSummary(lastItems);
|
|
46
|
+
return await copyCollateralAdjustmentWithoutSaving(bbcDateIdID, lastItems, summary);
|
|
47
|
+
}
|
|
48
|
+
return this.saveCollateralAdjustment(bbcDateId, { items: lastItems, notes: '' });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async saveCollateralAdjustment(bbcDateId: string, collateralAdjustmentsUpdate: Partial<ICollateralAdjustment>) {
|
|
52
|
+
const isBBCLockedResult = await this.signsService.isBBCLocked(bbcDateId);
|
|
53
|
+
if (isBBCLockedResult) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const summary = this.calculateSummary(collateralAdjustmentsUpdate.items);
|
|
57
|
+
return await saveCollateralAdjustmentDoc(new mongoose.Types.ObjectId(bbcDateId), {
|
|
58
|
+
...collateralAdjustmentsUpdate,
|
|
59
|
+
summary,
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
async getLastCopyCollateralAdjustmentItems(bbcDateId: string) {
|
|
64
|
+
const { borrowerId } = await getBBCDateDoc(bbcDateId.toString());
|
|
65
|
+
const collateralAdjustmentDocs = await getLastCollateralAdjustmentDocs(bbcDateId, borrowerId.toString());
|
|
66
|
+
if (!!collateralAdjustmentDocs.length) {
|
|
67
|
+
return collateralAdjustmentDocs.pop().items;
|
|
68
|
+
}
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private calculateSummary(collateralAdjustmentItems: ICollateralAdjustmentItem[]): ICollateralAdjustmentSummary {
|
|
73
|
+
const summary: { rowDef: string, amount: number }[] = [];
|
|
74
|
+
const summaryOrder = [
|
|
75
|
+
ECollaterals.INVENTORY,
|
|
76
|
+
ECollaterals.RECEIVABLE,
|
|
77
|
+
ECollaterals.OTHER,
|
|
78
|
+
];
|
|
79
|
+
const result = Object.keys(ECollaterals).map((equipmentType) => {
|
|
80
|
+
const typeSummary = { rowDef: equipmentType, amount: 0 };
|
|
81
|
+
collateralAdjustmentItems.map((item) => {
|
|
82
|
+
if (item.type === equipmentType) {
|
|
83
|
+
typeSummary.amount = new Decimal(typeSummary.amount).add(item.amount).toNumber();
|
|
84
|
+
}
|
|
85
|
+
return typeSummary;
|
|
86
|
+
});
|
|
87
|
+
return typeSummary;
|
|
88
|
+
});
|
|
89
|
+
summaryOrder.forEach((summaryType) => {
|
|
90
|
+
summary.push(...result.filter((r) => r.rowDef === summaryType));
|
|
91
|
+
});
|
|
92
|
+
return summary.reduce((acc, s) => ({ ...acc, [s.rowDef]: s }), {});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/// <reference types="mongoose/types/aggregate" />
|
|
2
|
+
/// <reference types="mongoose/types/callback" />
|
|
3
|
+
/// <reference types="mongoose/types/collection" />
|
|
4
|
+
/// <reference types="mongoose/types/connection" />
|
|
5
|
+
/// <reference types="mongoose/types/cursor" />
|
|
6
|
+
/// <reference types="mongoose/types/document" />
|
|
7
|
+
/// <reference types="mongoose/types/error" />
|
|
8
|
+
/// <reference types="mongoose/types/expressions" />
|
|
9
|
+
/// <reference types="mongoose/types/helpers" />
|
|
10
|
+
/// <reference types="mongoose/types/middlewares" />
|
|
11
|
+
/// <reference types="mongoose/types/indexes" />
|
|
12
|
+
/// <reference types="mongoose/types/models" />
|
|
13
|
+
/// <reference types="mongoose/types/mongooseoptions" />
|
|
14
|
+
/// <reference types="mongoose/types/pipelinestage" />
|
|
15
|
+
/// <reference types="mongoose/types/populate" />
|
|
16
|
+
/// <reference types="mongoose/types/query" />
|
|
17
|
+
/// <reference types="mongoose/types/schemaoptions" />
|
|
18
|
+
/// <reference types="mongoose/types/schematypes" />
|
|
19
|
+
/// <reference types="mongoose/types/session" />
|
|
20
|
+
/// <reference types="mongoose/types/types" />
|
|
21
|
+
/// <reference types="mongoose/types/utility" />
|
|
22
|
+
/// <reference types="mongoose/types/validation" />
|
|
23
|
+
/// <reference types="mongoose/types/virtuals" />
|
|
24
|
+
/// <reference types="mongoose/types/inferschematype" />
|
|
25
|
+
import mongoose from 'mongoose';
|
|
26
|
+
import { ECollaterals } from '../enums/collaterals.enum';
|
|
27
|
+
import { IPaginatorOptions, IUploadedItems } from '../interfaces/collaterals.interface';
|
|
28
|
+
import { IBBCDateDoc, ICreateBBCDate } from '../models/BBCDate.model';
|
|
29
|
+
import { IBBCSheetDoc, IBBCSheetWithBBCDate } from '../models/BBCSheet.model';
|
|
30
|
+
import { IInventoryItem } from '../models/InventoryItem.model';
|
|
31
|
+
import { IReceivableItem } from '../models/ReceivableItem.model';
|
|
32
|
+
import { IAccountPayableItem } from '../models/AccountPayableItem.model';
|
|
33
|
+
import { GroupsService } from './groups.service';
|
|
34
|
+
import { UploadsService } from './uploads.service';
|
|
35
|
+
export declare class CollateralsService {
|
|
36
|
+
private readonly _groupsService;
|
|
37
|
+
private readonly _uploadsService;
|
|
38
|
+
constructor(_groupsService: GroupsService, _uploadsService: UploadsService);
|
|
39
|
+
findCollateralsByType(bbcDateId: string, collateralType: ECollaterals): Promise<any>;
|
|
40
|
+
findCollaterals(collateralsId: string, group: boolean, paginatorOptions?: IPaginatorOptions): Promise<any>;
|
|
41
|
+
countCollateralItems(bbcSheetId: string): Promise<any>;
|
|
42
|
+
findCollateralSheets(bbcDateId: string, collateralType: ECollaterals): Promise<(mongoose.Document<unknown, {}, IBBCSheetDoc> & IBBCSheetDoc & {
|
|
43
|
+
_id: mongoose.Types.ObjectId;
|
|
44
|
+
})[]>;
|
|
45
|
+
findCollateralSheetsById(collateralsId: string): Promise<IBBCSheetDoc>;
|
|
46
|
+
findCollateralSheetByIdWithBBCDate(collateralsId: string): Promise<IBBCSheetWithBBCDate>;
|
|
47
|
+
findAllCollaterals(borrowerId: string, collateralTypes: ECollaterals[]): Promise<IBBCDateDoc[]>;
|
|
48
|
+
saveCollateralItems<T extends IInventoryItem | IReceivableItem | IAccountPayableItem>(uploadedItems: IUploadedItems<T>, collateralType: ECollaterals, shift?: number): Promise<any>;
|
|
49
|
+
getCollateralsBySheet(sheet: IBBCSheetDoc, paginatorOptions?: IPaginatorOptions): Promise<any>;
|
|
50
|
+
getCollateralItemTotal(sheet: IBBCSheetDoc): Promise<any>;
|
|
51
|
+
getCollateralsBenford(collaterals: any[]): any[] | {
|
|
52
|
+
_id: any;
|
|
53
|
+
bbcDates: any;
|
|
54
|
+
confirmed: any[];
|
|
55
|
+
};
|
|
56
|
+
countCollateralDocsByBBC(bbcIds: string[], collateralType: ECollaterals): Promise<any>;
|
|
57
|
+
excludeNoDataColumns(data: any[], columns: string[]): Pick<any, string>[];
|
|
58
|
+
addCustomerGroups(data: any[], borrowerId: string): Promise<any[]>;
|
|
59
|
+
getLatestBBC(borrowerId: string, bbcDate?: Date): Promise<IBBCDateDoc>;
|
|
60
|
+
gebNextBBC(borrowerId: string, bbcDate?: Date): Promise<IBBCDateDoc[]>;
|
|
61
|
+
getLatestBBCDate(borrowerId: string): Promise<{
|
|
62
|
+
lastBBCDate: Date;
|
|
63
|
+
lastBBCId: any;
|
|
64
|
+
}>;
|
|
65
|
+
createBBCDate(bbcDate: ICreateBBCDate): Promise<void>;
|
|
66
|
+
deleteCollateralById(collateralId: string): Promise<mongoose.Document<unknown, {}, IBBCSheetDoc> & IBBCSheetDoc & {
|
|
67
|
+
_id: mongoose.Types.ObjectId;
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CollateralsService = void 0;
|
|
7
|
+
const mongoose_1 = __importDefault(require("mongoose"));
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const collaterals_enum_1 = require("../enums/collaterals.enum");
|
|
10
|
+
const BBCDate_model_1 = require("../models/BBCDate.model");
|
|
11
|
+
const BBCSheet_model_1 = require("../models/BBCSheet.model");
|
|
12
|
+
const bbcDates_db_1 = require("../db/bbcDates.db");
|
|
13
|
+
const bbcSheets_db_1 = require("../db/bbcSheets.db");
|
|
14
|
+
const collaterals_db_1 = require("../db/collaterals.db");
|
|
15
|
+
const numbers_helper_1 = require("../helpers/numbers.helper");
|
|
16
|
+
const enums_helper_1 = require("../helpers/enums.helper");
|
|
17
|
+
class CollateralsService {
|
|
18
|
+
_groupsService;
|
|
19
|
+
_uploadsService;
|
|
20
|
+
constructor(_groupsService, _uploadsService) {
|
|
21
|
+
this._groupsService = _groupsService;
|
|
22
|
+
this._uploadsService = _uploadsService;
|
|
23
|
+
}
|
|
24
|
+
async findCollateralsByType(bbcDateId, collateralType) {
|
|
25
|
+
const sheets = await this.findCollateralSheets(bbcDateId, collateralType);
|
|
26
|
+
return (await Promise.all(sheets.map(async (sheet) => {
|
|
27
|
+
return await this.getCollateralsBySheet(sheet);
|
|
28
|
+
})))
|
|
29
|
+
.reduce((acc, group) => [...acc, ...group], []);
|
|
30
|
+
}
|
|
31
|
+
async findCollaterals(collateralsId, group, paginatorOptions) {
|
|
32
|
+
const sheet = await this.findCollateralSheetsById(collateralsId);
|
|
33
|
+
if (group) {
|
|
34
|
+
return await this.getCollateralsBySheet(sheet, paginatorOptions);
|
|
35
|
+
}
|
|
36
|
+
return await (0, collaterals_db_1.getCollateralListBySheetId)(sheet, paginatorOptions);
|
|
37
|
+
}
|
|
38
|
+
async countCollateralItems(bbcSheetId) {
|
|
39
|
+
const sheet = await this.findCollateralSheetsById(bbcSheetId);
|
|
40
|
+
return await this.getCollateralItemTotal(sheet);
|
|
41
|
+
}
|
|
42
|
+
async findCollateralSheets(bbcDateId, collateralType) {
|
|
43
|
+
return BBCSheet_model_1.BBCSheetModel.find({ bbcDateId, dataType: collateralType });
|
|
44
|
+
}
|
|
45
|
+
async findCollateralSheetsById(collateralsId) {
|
|
46
|
+
return BBCSheet_model_1.BBCSheetModel.findById(collateralsId);
|
|
47
|
+
}
|
|
48
|
+
async findCollateralSheetByIdWithBBCDate(collateralsId) {
|
|
49
|
+
const bbcSheet = await BBCSheet_model_1.BBCSheetModel.aggregate([
|
|
50
|
+
{
|
|
51
|
+
$match: {
|
|
52
|
+
'_id': new mongoose_1.default.Types.ObjectId(collateralsId),
|
|
53
|
+
},
|
|
54
|
+
}, {
|
|
55
|
+
$lookup: {
|
|
56
|
+
'from': 'bbcdates',
|
|
57
|
+
'localField': 'bbcDateId',
|
|
58
|
+
'foreignField': '_id',
|
|
59
|
+
'as': 'bbcDate',
|
|
60
|
+
},
|
|
61
|
+
}, {
|
|
62
|
+
$unwind: {
|
|
63
|
+
'path': '$bbcDate',
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
]);
|
|
67
|
+
return bbcSheet.length ? bbcSheet[0] : null;
|
|
68
|
+
}
|
|
69
|
+
async findAllCollaterals(borrowerId, collateralTypes) {
|
|
70
|
+
return (0, bbcDates_db_1.getBBCDatesByType)(borrowerId, collateralTypes);
|
|
71
|
+
}
|
|
72
|
+
async saveCollateralItems(uploadedItems, collateralType, shift = 0) {
|
|
73
|
+
const bbcDates = await (0, bbcDates_db_1.getBBCDates)(uploadedItems.borrowerId, uploadedItems.bbcDate);
|
|
74
|
+
const bbcSheets = await (0, bbcSheets_db_1.getBBCSheetsByType)(bbcDates.map((bbcDate) => String(bbcDate._id)), collateralType);
|
|
75
|
+
const lastBBCDate = bbcDates.pop();
|
|
76
|
+
const lastBBCSheet = bbcSheets.find((bbcSheet) => (bbcSheet.fileName === uploadedItems.fileName) && (bbcSheet.sheetName === uploadedItems.sheetName));
|
|
77
|
+
let savedBBCDate;
|
|
78
|
+
if (!lastBBCDate) {
|
|
79
|
+
const newBBCDate = new BBCDate_model_1.BBCDateModel({
|
|
80
|
+
borrowerId: uploadedItems.borrowerId,
|
|
81
|
+
bbcDate: uploadedItems.bbcDate,
|
|
82
|
+
});
|
|
83
|
+
savedBBCDate = await newBBCDate.save();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
savedBBCDate = lastBBCDate;
|
|
87
|
+
}
|
|
88
|
+
let savedBBCSheet;
|
|
89
|
+
if (!lastBBCSheet) {
|
|
90
|
+
const newBBCSheet = new BBCSheet_model_1.BBCSheetModel({
|
|
91
|
+
bbcDateId: savedBBCDate._id,
|
|
92
|
+
dataType: collateralType,
|
|
93
|
+
fileName: uploadedItems.fileName,
|
|
94
|
+
sheetName: uploadedItems.sheetName,
|
|
95
|
+
});
|
|
96
|
+
savedBBCSheet = await newBBCSheet.save();
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
savedBBCSheet = bbcSheets.pop();
|
|
100
|
+
}
|
|
101
|
+
const orderedItems = uploadedItems.items.map((item, index) => ({
|
|
102
|
+
...item,
|
|
103
|
+
order: index + shift,
|
|
104
|
+
}));
|
|
105
|
+
await Promise.all(orderedItems.map(async (item) => {
|
|
106
|
+
const newCollateralItem = new collaterals_db_1.collateralMap[collateralType]({
|
|
107
|
+
bbcSheetId: savedBBCSheet._id,
|
|
108
|
+
order: item.order,
|
|
109
|
+
...item,
|
|
110
|
+
});
|
|
111
|
+
await newCollateralItem.save();
|
|
112
|
+
}));
|
|
113
|
+
return savedBBCDate._id;
|
|
114
|
+
}
|
|
115
|
+
async getCollateralsBySheet(sheet, paginatorOptions) {
|
|
116
|
+
const groupFields = {
|
|
117
|
+
bbcDate: 'bbc.bbcDate',
|
|
118
|
+
borrowerId: 'bbc.borrowerId',
|
|
119
|
+
fileName: 'bbcSheet.fileName',
|
|
120
|
+
sheetName: 'bbcSheet.sheetName',
|
|
121
|
+
};
|
|
122
|
+
const { groupQueries, itemQueries, enumKey } = (0, collaterals_db_1.createQuery)(groupFields, sheet.dataType);
|
|
123
|
+
const groupingQuery = { _id: '$bbcSheetId', ...groupQueries, items: { $push: itemQueries } };
|
|
124
|
+
const collateralSheets = await collaterals_db_1.collateralMap[enumKey].aggregate([
|
|
125
|
+
{
|
|
126
|
+
$match: {
|
|
127
|
+
'bbcSheetId': new mongoose_1.default.Types.ObjectId(sheet.id),
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
...collaterals_db_1.COLLATERALS_LOOKUP,
|
|
131
|
+
{
|
|
132
|
+
$sort: {
|
|
133
|
+
order: 1,
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
...(0, collaterals_db_1.ITEMS_PAGINATION)(paginatorOptions),
|
|
137
|
+
{
|
|
138
|
+
$group: groupingQuery,
|
|
139
|
+
},
|
|
140
|
+
]);
|
|
141
|
+
if (collateralSheets.length === 0) {
|
|
142
|
+
const bbcDates = await BBCDate_model_1.BBCDateModel.aggregate([
|
|
143
|
+
{
|
|
144
|
+
$match: {
|
|
145
|
+
'_id': sheet.bbcDateId,
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
]);
|
|
149
|
+
if (bbcDates.length === 0) {
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
return [{
|
|
153
|
+
_id: sheet._id,
|
|
154
|
+
bbcDate: bbcDates[0].bbcDate,
|
|
155
|
+
borrowerId: bbcDates[0].borrowerId,
|
|
156
|
+
fileName: sheet.fileName,
|
|
157
|
+
sheetName: sheet.sheetName,
|
|
158
|
+
items: [],
|
|
159
|
+
}];
|
|
160
|
+
}
|
|
161
|
+
return collateralSheets;
|
|
162
|
+
}
|
|
163
|
+
async getCollateralItemTotal(sheet) {
|
|
164
|
+
const enumKey = (0, enums_helper_1.getEnumKeyByEnumValue)(collaterals_enum_1.ECollaterals, sheet.dataType);
|
|
165
|
+
return collaterals_db_1.collateralMap[enumKey].countDocuments({
|
|
166
|
+
'bbcSheetId': new mongoose_1.default.Types.ObjectId(sheet.id),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
getCollateralsBenford(collaterals) {
|
|
170
|
+
if (collaterals.length === 0) {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
const eachInventoryBenfordResult = [];
|
|
174
|
+
collaterals[0]?.digitArrays.forEach((lastDigitsArray) => {
|
|
175
|
+
const digitsArrayWithoutZeros = lastDigitsArray.filter((digit) => digit !== '0');
|
|
176
|
+
const results = [];
|
|
177
|
+
const firstDigitFrequencies = (0, numbers_helper_1.getDigitsFrequencies)(lastDigitsArray);
|
|
178
|
+
for (let n = 1; n <= 9; n++) {
|
|
179
|
+
const dataFrequency = firstDigitFrequencies[n];
|
|
180
|
+
const dataFrequencyPercent = (dataFrequency / digitsArrayWithoutZeros.length) * 100;
|
|
181
|
+
const dataFrequencyTotal = isNaN(dataFrequencyPercent) ? 0 : Math.round(dataFrequencyPercent * 100) / 100;
|
|
182
|
+
results.push(dataFrequencyTotal);
|
|
183
|
+
}
|
|
184
|
+
eachInventoryBenfordResult.push(results);
|
|
185
|
+
});
|
|
186
|
+
return {
|
|
187
|
+
_id: collaterals[0]._id,
|
|
188
|
+
bbcDates: collaterals[0].bbcDates,
|
|
189
|
+
confirmed: eachInventoryBenfordResult,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
async countCollateralDocsByBBC(bbcIds, collateralType) {
|
|
193
|
+
const bbcSheets = await (0, bbcSheets_db_1.getBBCSheetsByType)(bbcIds, collateralType);
|
|
194
|
+
const collateralModel = collaterals_db_1.collateralMap[collateralType];
|
|
195
|
+
if (!collateralModel) {
|
|
196
|
+
console.error(`Could not find a model for ${collateralType}`);
|
|
197
|
+
return 0;
|
|
198
|
+
}
|
|
199
|
+
return collateralModel.countDocuments({
|
|
200
|
+
'bbcSheetId': { $in: bbcSheets.map((bbcSheet) => bbcSheet._id) },
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
excludeNoDataColumns(data, columns) {
|
|
204
|
+
return data.map((dataRow) => lodash_1.default.pick(dataRow, columns));
|
|
205
|
+
}
|
|
206
|
+
async addCustomerGroups(data, borrowerId) {
|
|
207
|
+
const groupName = 'customers';
|
|
208
|
+
const groups = await this._groupsService.getBorrowerGroups(borrowerId, groupName);
|
|
209
|
+
return data.map((dataRow) => {
|
|
210
|
+
const foundGroup = groups[groupName].find((group) => group.items.includes(dataRow.customerTitle));
|
|
211
|
+
return {
|
|
212
|
+
...dataRow,
|
|
213
|
+
customerGroup: foundGroup ? foundGroup.groupName : dataRow.customerTitle,
|
|
214
|
+
};
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
async getLatestBBC(borrowerId, bbcDate = new Date()) {
|
|
218
|
+
const bbcDateDocs = await BBCDate_model_1.BBCDateModel.aggregate([
|
|
219
|
+
{
|
|
220
|
+
$match: {
|
|
221
|
+
'borrowerId': new mongoose_1.default.Types.ObjectId(borrowerId),
|
|
222
|
+
'bbcDate': { $lte: bbcDate },
|
|
223
|
+
},
|
|
224
|
+
}, {
|
|
225
|
+
$sort: {
|
|
226
|
+
'bbcDate': -1,
|
|
227
|
+
},
|
|
228
|
+
}, {
|
|
229
|
+
$limit: 1,
|
|
230
|
+
},
|
|
231
|
+
]);
|
|
232
|
+
if (bbcDateDocs.length === 0) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
return bbcDateDocs[0];
|
|
236
|
+
}
|
|
237
|
+
async gebNextBBC(borrowerId, bbcDate = new Date()) {
|
|
238
|
+
return BBCDate_model_1.BBCDateModel.aggregate([
|
|
239
|
+
{
|
|
240
|
+
$match: {
|
|
241
|
+
'borrowerId': new mongoose_1.default.Types.ObjectId(borrowerId),
|
|
242
|
+
'bbcDate': { $gte: bbcDate },
|
|
243
|
+
},
|
|
244
|
+
}, {
|
|
245
|
+
$sort: {
|
|
246
|
+
'bbcDate': -1,
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
]);
|
|
250
|
+
}
|
|
251
|
+
async getLatestBBCDate(borrowerId) {
|
|
252
|
+
const latestBBC = await this.getLatestBBC(borrowerId);
|
|
253
|
+
if (!latestBBC) {
|
|
254
|
+
return { lastBBCDate: null, lastBBCId: null };
|
|
255
|
+
}
|
|
256
|
+
return { lastBBCDate: latestBBC.bbcDate, lastBBCId: latestBBC._id.toString() };
|
|
257
|
+
}
|
|
258
|
+
async createBBCDate(bbcDate) {
|
|
259
|
+
if (bbcDate.inventory || bbcDate.receivables) {
|
|
260
|
+
const existingBbcDates = await (0, bbcDates_db_1.getBBCDates)(bbcDate.borrowerId, bbcDate.date);
|
|
261
|
+
let existingBbcDate = existingBbcDates.length > 0 ? existingBbcDates[0] : null;
|
|
262
|
+
if (!existingBbcDate) {
|
|
263
|
+
existingBbcDate = await (0, bbcDates_db_1.createBBCDate)(bbcDate.borrowerId, bbcDate.date);
|
|
264
|
+
}
|
|
265
|
+
if (bbcDate.inventory) {
|
|
266
|
+
await (0, bbcSheets_db_1.createBBCSheet)(existingBbcDate._id.toString(), 'INVENTORY');
|
|
267
|
+
}
|
|
268
|
+
if (bbcDate.receivables) {
|
|
269
|
+
await (0, bbcSheets_db_1.createBBCSheet)(existingBbcDate._id.toString(), 'RECEIVABLE');
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
async deleteCollateralById(collateralId) {
|
|
274
|
+
const results = await BBCSheet_model_1.BBCSheetModel.findByIdAndDelete(collateralId);
|
|
275
|
+
setTimeout(async () => await this._uploadsService.removeEmptyBBC(true), 500);
|
|
276
|
+
return results;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
exports.CollateralsService = CollateralsService;
|