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,37 @@
|
|
|
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 { IReserve, IReserveItem } from '../models/Reserve.model';
|
|
27
|
+
import { SignsService } from './signs.service';
|
|
28
|
+
export declare class ReserveService {
|
|
29
|
+
private readonly signsService;
|
|
30
|
+
constructor(signsService: SignsService);
|
|
31
|
+
getReserve(bbcDateId: string): Promise<IReserve>;
|
|
32
|
+
saveAndReturnReserve(bbcDateId: string, reserveUpdate: Partial<IReserve>): Promise<mongoose.FlattenMaps<import("../models/Reserve.model").IReserveDoc> & {
|
|
33
|
+
_id: mongoose.Types.ObjectId;
|
|
34
|
+
}>;
|
|
35
|
+
getLastCopyReserve(bbcDateId: string): Promise<IReserveItem[]>;
|
|
36
|
+
private calculateSummary;
|
|
37
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
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.ReserveService = void 0;
|
|
7
|
+
const mongoose_1 = __importDefault(require("mongoose"));
|
|
8
|
+
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
9
|
+
const bbcDates_db_1 = require("../db/bbcDates.db");
|
|
10
|
+
const reserve_types_enum_1 = require("../enums/reserve-types.enum");
|
|
11
|
+
const reserve_db_1 = require("../db/reserve.db");
|
|
12
|
+
class ReserveService {
|
|
13
|
+
signsService;
|
|
14
|
+
constructor(signsService) {
|
|
15
|
+
this.signsService = signsService;
|
|
16
|
+
}
|
|
17
|
+
async getReserve(bbcDateId) {
|
|
18
|
+
const bbcDateIdID = new mongoose_1.default.Types.ObjectId(bbcDateId);
|
|
19
|
+
const reserves = await (0, reserve_db_1.getReserveDocs)([bbcDateIdID]);
|
|
20
|
+
if (!!reserves.length) {
|
|
21
|
+
return reserves.pop();
|
|
22
|
+
}
|
|
23
|
+
const lastItems = await this.getLastCopyReserve(bbcDateId);
|
|
24
|
+
const isBBCLockedResult = await this.signsService.isBBCLocked(bbcDateId);
|
|
25
|
+
if (isBBCLockedResult) {
|
|
26
|
+
const summary = this.calculateSummary(lastItems);
|
|
27
|
+
return await (0, reserve_db_1.copyReserveWithoutSaving)(bbcDateIdID, lastItems, summary);
|
|
28
|
+
}
|
|
29
|
+
return this.saveAndReturnReserve(bbcDateId, { items: lastItems, notes: '' });
|
|
30
|
+
}
|
|
31
|
+
async saveAndReturnReserve(bbcDateId, reserveUpdate) {
|
|
32
|
+
const isBBCLockedResult = await this.signsService.isBBCLocked(bbcDateId);
|
|
33
|
+
if (isBBCLockedResult) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const summary = this.calculateSummary(reserveUpdate.items);
|
|
37
|
+
return await (0, reserve_db_1.saveReserveDoc)(new mongoose_1.default.Types.ObjectId(bbcDateId), { ...reserveUpdate, summary });
|
|
38
|
+
}
|
|
39
|
+
;
|
|
40
|
+
async getLastCopyReserve(bbcDateId) {
|
|
41
|
+
const { borrowerId } = await (0, bbcDates_db_1.getBBCDateDoc)(bbcDateId.toString());
|
|
42
|
+
const equipment = await (0, reserve_db_1.getLastReserveDocs)(bbcDateId, borrowerId.toString());
|
|
43
|
+
if (!!equipment.length) {
|
|
44
|
+
return equipment.pop().items;
|
|
45
|
+
}
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
calculateSummary(reserveItems) {
|
|
49
|
+
const summary = [];
|
|
50
|
+
const summaryOrder = [
|
|
51
|
+
reserve_types_enum_1.EReserveTypes.RENT,
|
|
52
|
+
reserve_types_enum_1.EReserveTypes.PAYROLL,
|
|
53
|
+
reserve_types_enum_1.EReserveTypes.INSURANCE,
|
|
54
|
+
reserve_types_enum_1.EReserveTypes.TAX,
|
|
55
|
+
reserve_types_enum_1.EReserveTypes.INVENTORY,
|
|
56
|
+
reserve_types_enum_1.EReserveTypes.RECEIVABLES,
|
|
57
|
+
reserve_types_enum_1.EReserveTypes.EQUIPMENT,
|
|
58
|
+
reserve_types_enum_1.EReserveTypes.OTHER,
|
|
59
|
+
];
|
|
60
|
+
const result = Object.keys(reserve_types_enum_1.EReserveTypes).map((equipmentType) => {
|
|
61
|
+
const typeSummary = { rowDef: equipmentType, amount: 0 };
|
|
62
|
+
reserveItems.forEach((item) => {
|
|
63
|
+
if (item.type === equipmentType) {
|
|
64
|
+
typeSummary.amount = new decimal_js_1.default(typeSummary.amount).add(item.amount).toNumber();
|
|
65
|
+
}
|
|
66
|
+
return typeSummary;
|
|
67
|
+
});
|
|
68
|
+
return typeSummary;
|
|
69
|
+
});
|
|
70
|
+
summaryOrder.forEach((summaryType) => {
|
|
71
|
+
summary.push(...result.filter((r) => r.rowDef === summaryType));
|
|
72
|
+
});
|
|
73
|
+
return summary.reduce((acc, s) => ({ ...acc, [s.rowDef]: s }), {});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.ReserveService = ReserveService;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
import Decimal from 'decimal.js';
|
|
3
|
+
|
|
4
|
+
import { getBBCDateDoc } from '../db/bbcDates.db';
|
|
5
|
+
import { EReserveTypes } from '../enums/reserve-types.enum';
|
|
6
|
+
|
|
7
|
+
import { IReserve, IReserveItem, IReserveSummary } from '../models/Reserve.model';
|
|
8
|
+
import { copyReserveWithoutSaving, getLastReserveDocs, getReserveDocs, saveReserveDoc } from '../db/reserve.db';
|
|
9
|
+
import { SignsService } from './signs.service';
|
|
10
|
+
|
|
11
|
+
export class ReserveService {
|
|
12
|
+
|
|
13
|
+
constructor(
|
|
14
|
+
private readonly signsService: SignsService,
|
|
15
|
+
) {
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async getReserve(bbcDateId: string): Promise<IReserve> {
|
|
19
|
+
const bbcDateIdID = new mongoose.Types.ObjectId(bbcDateId);
|
|
20
|
+
const reserves = await getReserveDocs([bbcDateIdID]);
|
|
21
|
+
if (!!reserves.length) {
|
|
22
|
+
return reserves.pop();
|
|
23
|
+
}
|
|
24
|
+
const lastItems = await this.getLastCopyReserve(bbcDateId);
|
|
25
|
+
const isBBCLockedResult = await this.signsService.isBBCLocked(bbcDateId);
|
|
26
|
+
if (isBBCLockedResult) {
|
|
27
|
+
const summary = this.calculateSummary(lastItems);
|
|
28
|
+
return await copyReserveWithoutSaving(bbcDateIdID, lastItems, summary);
|
|
29
|
+
}
|
|
30
|
+
return this.saveAndReturnReserve(bbcDateId, { items: lastItems, notes: '' });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async saveAndReturnReserve(bbcDateId: string, reserveUpdate: Partial<IReserve>) {
|
|
34
|
+
const isBBCLockedResult = await this.signsService.isBBCLocked(bbcDateId);
|
|
35
|
+
if (isBBCLockedResult) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const summary = this.calculateSummary(reserveUpdate.items);
|
|
39
|
+
return await saveReserveDoc(new mongoose.Types.ObjectId(bbcDateId), { ...reserveUpdate, summary });
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
async getLastCopyReserve(bbcDateId: string) {
|
|
43
|
+
const { borrowerId } = await getBBCDateDoc(bbcDateId.toString());
|
|
44
|
+
const equipment = await getLastReserveDocs(bbcDateId, borrowerId.toString());
|
|
45
|
+
if (!!equipment.length) {
|
|
46
|
+
return equipment.pop().items;
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private calculateSummary(reserveItems: IReserveItem[]): IReserveSummary {
|
|
52
|
+
const summary: { rowDef: string, amount: number }[] = [];
|
|
53
|
+
const summaryOrder = [
|
|
54
|
+
EReserveTypes.RENT,
|
|
55
|
+
EReserveTypes.PAYROLL,
|
|
56
|
+
EReserveTypes.INSURANCE,
|
|
57
|
+
EReserveTypes.TAX,
|
|
58
|
+
EReserveTypes.INVENTORY,
|
|
59
|
+
EReserveTypes.RECEIVABLES,
|
|
60
|
+
EReserveTypes.EQUIPMENT,
|
|
61
|
+
EReserveTypes.OTHER,
|
|
62
|
+
];
|
|
63
|
+
const result = Object.keys(EReserveTypes).map((equipmentType) => {
|
|
64
|
+
const typeSummary = { rowDef: equipmentType, amount: 0 };
|
|
65
|
+
reserveItems.forEach((item) => {
|
|
66
|
+
if (item.type === equipmentType) {
|
|
67
|
+
typeSummary.amount = new Decimal(typeSummary.amount).add(item.amount).toNumber();
|
|
68
|
+
}
|
|
69
|
+
return typeSummary;
|
|
70
|
+
});
|
|
71
|
+
return typeSummary;
|
|
72
|
+
});
|
|
73
|
+
summaryOrder.forEach((summaryType) => {
|
|
74
|
+
summary.push(...result.filter((r) => r.rowDef === summaryType));
|
|
75
|
+
});
|
|
76
|
+
return summary.reduce((acc, s) => ({ ...acc, [s.rowDef]: s }), {});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
interface ISentryServiceConfig {
|
|
3
|
+
dsn: string;
|
|
4
|
+
isProduction: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare class SentryService {
|
|
7
|
+
private readonly config;
|
|
8
|
+
constructor(config: ISentryServiceConfig);
|
|
9
|
+
catchErrorBySentry(res: express.Response, err?: Error, status?: number, data?: object): express.Response<any, Record<string, any>>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.SentryService = void 0;
|
|
27
|
+
const Sentry = __importStar(require("@sentry/node"));
|
|
28
|
+
class SentryService {
|
|
29
|
+
config;
|
|
30
|
+
constructor(config) {
|
|
31
|
+
this.config = config;
|
|
32
|
+
if (this.config.isProduction) {
|
|
33
|
+
Sentry.init({
|
|
34
|
+
dsn: this.config.dsn,
|
|
35
|
+
tracesSampleRate: 1.0,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catchErrorBySentry(res, err, status = 500, data) {
|
|
40
|
+
console.error(err);
|
|
41
|
+
if (this.config.isProduction) {
|
|
42
|
+
Sentry.captureException(err);
|
|
43
|
+
if (res) {
|
|
44
|
+
return res.status(status).json({ message: err?.message ?? 'Something went wrong', ...data });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.SentryService = SentryService;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import * as Sentry from '@sentry/node';
|
|
3
|
+
|
|
4
|
+
interface ISentryServiceConfig {
|
|
5
|
+
dsn: string;
|
|
6
|
+
isProduction: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export class SentryService {
|
|
10
|
+
private readonly config: ISentryServiceConfig;
|
|
11
|
+
|
|
12
|
+
constructor(
|
|
13
|
+
config: ISentryServiceConfig,
|
|
14
|
+
) {
|
|
15
|
+
this.config = config;
|
|
16
|
+
if (this.config.isProduction) {
|
|
17
|
+
Sentry.init({
|
|
18
|
+
dsn: this.config.dsn,
|
|
19
|
+
tracesSampleRate: 1.0,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
catchErrorBySentry(res: express.Response, err?: Error, status = 500, data?: object) {
|
|
25
|
+
console.error(err);
|
|
26
|
+
if (this.config.isProduction) {
|
|
27
|
+
Sentry.captureException(err);
|
|
28
|
+
if (res) {
|
|
29
|
+
return res.status(status).json({ message: err?.message ?? 'Something went wrong', ...data });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -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, { Document } from 'mongoose';
|
|
26
|
+
import { IResult } from '../interfaces/result.interface';
|
|
27
|
+
import { IUserDocument } from '../models/User.model';
|
|
28
|
+
import { IAvailabilitySignView } from '../models/AvailabilitySigns.model';
|
|
29
|
+
import { IBBCDateDoc } from '../models/BBCDate.model';
|
|
30
|
+
import { IBorrowerDocument } from '../models/Borrower.model';
|
|
31
|
+
import { IKeycloakUser } from '../interfaces/keycloak-user.interface';
|
|
32
|
+
import { IPaginatorOptions } from '../interfaces/collaterals.interface';
|
|
33
|
+
import { UsersService } from './users.service';
|
|
34
|
+
import { LoanTransactionsService } from './loan-transactions.service';
|
|
35
|
+
import { LockService } from './lock.service';
|
|
36
|
+
import { LoanStatementService } from './loan-statement.service';
|
|
37
|
+
export interface IBBCDateWithBorrower extends Document {
|
|
38
|
+
borrowerId: IBorrowerDocument;
|
|
39
|
+
bbcDate: Date;
|
|
40
|
+
}
|
|
41
|
+
export declare enum ESignStatus {
|
|
42
|
+
STARTED = "STARTED",
|
|
43
|
+
APPROVED = "APPROVED",
|
|
44
|
+
PENDING = "PENDING"
|
|
45
|
+
}
|
|
46
|
+
export declare class SignsService {
|
|
47
|
+
private readonly lockService;
|
|
48
|
+
private readonly loanTransactionsService;
|
|
49
|
+
private readonly loanStatementService;
|
|
50
|
+
private readonly usersService;
|
|
51
|
+
constructor(lockService: LockService, loanTransactionsService: LoanTransactionsService, loanStatementService: LoanStatementService, usersService: UsersService);
|
|
52
|
+
keyCloakUsers: IKeycloakUser[];
|
|
53
|
+
fulfillUserList(): Promise<void>;
|
|
54
|
+
clearUserList(): void;
|
|
55
|
+
getAvailabilitySigns(bbcDateId: string): Promise<IAvailabilitySignView>;
|
|
56
|
+
revokeAvailability(bbcDateId: string, userId: string, userIdRevoked: string): Promise<void>;
|
|
57
|
+
signAvailability(bbcDateId: string, user: IUserDocument): Promise<IResult>;
|
|
58
|
+
isBBCLocked(bbcDateId: string): Promise<boolean>;
|
|
59
|
+
getLatestSignedBBCDate(borrowerId: string, date?: Date): Promise<IBBCDateDoc>;
|
|
60
|
+
getSavedData(bbcDateId: string): Promise<any>;
|
|
61
|
+
keepBalance(bbcDateId: string): Promise<void>;
|
|
62
|
+
clearAvailabilityStoredData(bbcDateId: string): Promise<void>;
|
|
63
|
+
logSignStatus(bbcDateId: string, userId: string, isSigned: boolean): Promise<void>;
|
|
64
|
+
BBCDatesShort(borrowerId: string, paginatorOptions: IPaginatorOptions): Promise<{
|
|
65
|
+
_id: mongoose.Types.ObjectId;
|
|
66
|
+
bbcDate: Date;
|
|
67
|
+
signStatus: string;
|
|
68
|
+
}[]>;
|
|
69
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
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.SignsService = exports.ESignStatus = void 0;
|
|
7
|
+
const mongoose_1 = __importDefault(require("mongoose"));
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const availability_db_1 = require("../db/availability.db");
|
|
10
|
+
const AvailabilitySigns_model_1 = require("../models/AvailabilitySigns.model");
|
|
11
|
+
const BBCDate_model_1 = require("../models/BBCDate.model");
|
|
12
|
+
const _models_1 = require("../models/_models");
|
|
13
|
+
const bbcDates_db_1 = require("../db/bbcDates.db");
|
|
14
|
+
const UserLog_model_1 = require("../models/UserLog.model");
|
|
15
|
+
const user_logs_db_1 = require("../db/user-logs.db");
|
|
16
|
+
const collaterals_db_1 = require("../db/collaterals.db");
|
|
17
|
+
const AvilabilitySignedData_model_1 = require("../models/AvilabilitySignedData.model");
|
|
18
|
+
var ESignStatus;
|
|
19
|
+
(function (ESignStatus) {
|
|
20
|
+
ESignStatus["STARTED"] = "STARTED";
|
|
21
|
+
ESignStatus["APPROVED"] = "APPROVED";
|
|
22
|
+
ESignStatus["PENDING"] = "PENDING";
|
|
23
|
+
})(ESignStatus || (exports.ESignStatus = ESignStatus = {}));
|
|
24
|
+
class SignsService {
|
|
25
|
+
lockService;
|
|
26
|
+
loanTransactionsService;
|
|
27
|
+
loanStatementService;
|
|
28
|
+
usersService;
|
|
29
|
+
constructor(lockService, loanTransactionsService, loanStatementService, usersService) {
|
|
30
|
+
this.lockService = lockService;
|
|
31
|
+
this.loanTransactionsService = loanTransactionsService;
|
|
32
|
+
this.loanStatementService = loanStatementService;
|
|
33
|
+
this.usersService = usersService;
|
|
34
|
+
}
|
|
35
|
+
keyCloakUsers = null;
|
|
36
|
+
async fulfillUserList() {
|
|
37
|
+
const { access_token } = await this.usersService.getKeyCloakAdminBearer();
|
|
38
|
+
this.keyCloakUsers = await this.usersService.getUserList(access_token);
|
|
39
|
+
}
|
|
40
|
+
clearUserList() {
|
|
41
|
+
this.keyCloakUsers = null;
|
|
42
|
+
}
|
|
43
|
+
async getAvailabilitySigns(bbcDateId) {
|
|
44
|
+
const availabilitiesSigns = await (0, availability_db_1.getAvailabilitySigns)([bbcDateId]);
|
|
45
|
+
if (!availabilitiesSigns.length) {
|
|
46
|
+
return {
|
|
47
|
+
_id: null,
|
|
48
|
+
bbcDateId: new mongoose_1.default.Types.ObjectId(bbcDateId),
|
|
49
|
+
requiredSigns: AvailabilitySigns_model_1.REQUIRED_SIGNS,
|
|
50
|
+
signs: [],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const availabilitySigns = availabilitiesSigns[0];
|
|
54
|
+
let keyCloakUsers = this.keyCloakUsers;
|
|
55
|
+
if (!keyCloakUsers) {
|
|
56
|
+
const { access_token } = await this.usersService.getKeyCloakAdminBearer();
|
|
57
|
+
keyCloakUsers = await this.usersService.getUserList(access_token);
|
|
58
|
+
}
|
|
59
|
+
availabilitySigns.signs = availabilitySigns.signs.reduce((acc, userSign) => {
|
|
60
|
+
if (!userSign.userSigned) {
|
|
61
|
+
return acc;
|
|
62
|
+
}
|
|
63
|
+
const foundUserSigned = keyCloakUsers.find((user) => user.id === userSign.userSigned.keycloakUserId);
|
|
64
|
+
if (foundUserSigned) {
|
|
65
|
+
userSign.userSigned.firstName = foundUserSigned.firstName;
|
|
66
|
+
userSign.userSigned.lastName = foundUserSigned.lastName;
|
|
67
|
+
}
|
|
68
|
+
userSign.userSigned = (lodash_1.default.pick(userSign.userSigned, ['_id', 'firstName', 'lastName']));
|
|
69
|
+
if (userSign.userRevoked) {
|
|
70
|
+
const foundUserRevoked = keyCloakUsers.find((user) => user.id === userSign.userRevoked.keycloakUserId);
|
|
71
|
+
if (foundUserRevoked) {
|
|
72
|
+
userSign.userRevoked.firstName = foundUserRevoked.firstName;
|
|
73
|
+
userSign.userRevoked.lastName = foundUserRevoked.lastName;
|
|
74
|
+
}
|
|
75
|
+
userSign.userRevoked = (lodash_1.default.pick(userSign.userRevoked, ['_id', 'firstName', 'lastName']));
|
|
76
|
+
}
|
|
77
|
+
return [...acc, lodash_1.default.pick(userSign, ['userSigned', 'signedAt', 'userRevoked', 'revokedAt'])];
|
|
78
|
+
}, []);
|
|
79
|
+
return availabilitySigns;
|
|
80
|
+
}
|
|
81
|
+
async revokeAvailability(bbcDateId, userId, userIdRevoked) {
|
|
82
|
+
const availability = await (0, availability_db_1.findAvailabilitySignsByBBCDateId)(bbcDateId);
|
|
83
|
+
const updatedSigns = availability.signs.map((sign) => {
|
|
84
|
+
if (sign.userSignedId.toString() === userId && !sign.revokedAt) {
|
|
85
|
+
sign.userRevokedId = new mongoose_1.default.Types.ObjectId(userIdRevoked);
|
|
86
|
+
sign.revokedAt = new Date();
|
|
87
|
+
sign.userRevokedId = new mongoose_1.default.Types.ObjectId(userIdRevoked);
|
|
88
|
+
}
|
|
89
|
+
return sign;
|
|
90
|
+
});
|
|
91
|
+
await (0, availability_db_1.updateAvailabilitySigns)(bbcDateId, updatedSigns);
|
|
92
|
+
}
|
|
93
|
+
async signAvailability(bbcDateId, user) {
|
|
94
|
+
const newSign = { userSignedId: user._id, signedAt: new Date() };
|
|
95
|
+
return await (0, availability_db_1.addAvailabilitySign)(bbcDateId, newSign);
|
|
96
|
+
}
|
|
97
|
+
async isBBCLocked(bbcDateId) {
|
|
98
|
+
const bbcDoc = await BBCDate_model_1.BBCDateModel.findById(bbcDateId).lean();
|
|
99
|
+
if (!bbcDoc) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
return await this.lockService.isDateLocked(bbcDoc.bbcDate, bbcDoc.borrowerId.toString());
|
|
103
|
+
}
|
|
104
|
+
async getLatestSignedBBCDate(borrowerId, date) {
|
|
105
|
+
const bbcDocs = await (0, bbcDates_db_1.getOlderBBCDates)(borrowerId, date || new Date());
|
|
106
|
+
const activeSignsAfter = await AvailabilitySigns_model_1.AvailabilitySignsModel.aggregate([
|
|
107
|
+
{
|
|
108
|
+
$match: {
|
|
109
|
+
'bbcDateId': { $in: bbcDocs.map((bbc) => bbc._id) },
|
|
110
|
+
},
|
|
111
|
+
}, {
|
|
112
|
+
$unwind: {
|
|
113
|
+
path: '$signs',
|
|
114
|
+
preserveNullAndEmptyArrays: true,
|
|
115
|
+
},
|
|
116
|
+
}, {
|
|
117
|
+
$match: {
|
|
118
|
+
'signs.revokedAt': { $exists: false },
|
|
119
|
+
},
|
|
120
|
+
}, {
|
|
121
|
+
$group: {
|
|
122
|
+
'_id': '$_id',
|
|
123
|
+
'requiredSigns': { $first: '$requiredSigns' },
|
|
124
|
+
'bbcDateId': { $first: '$bbcDateId' },
|
|
125
|
+
'signs': { $push: '$signs' },
|
|
126
|
+
},
|
|
127
|
+
}, {
|
|
128
|
+
$match: {
|
|
129
|
+
$expr: {
|
|
130
|
+
$gte: [
|
|
131
|
+
{ '$size': '$signs' }, '$requiredSigns',
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
}, {
|
|
136
|
+
$lookup: {
|
|
137
|
+
from: _models_1.MODEL_NAMES.BBCDates,
|
|
138
|
+
localField: 'bbcDateId',
|
|
139
|
+
foreignField: '_id',
|
|
140
|
+
as: 'bbc',
|
|
141
|
+
},
|
|
142
|
+
}, {
|
|
143
|
+
$unwind: {
|
|
144
|
+
path: '$bbc',
|
|
145
|
+
preserveNullAndEmptyArrays: true,
|
|
146
|
+
},
|
|
147
|
+
}, {
|
|
148
|
+
$sort: {
|
|
149
|
+
'bbc.bbcDate': -1,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
]);
|
|
153
|
+
if (!activeSignsAfter.length) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
return activeSignsAfter[0].bbc;
|
|
157
|
+
}
|
|
158
|
+
async getSavedData(bbcDateId) {
|
|
159
|
+
const availabilitySignedData = await AvilabilitySignedData_model_1.AvailabilitySignedData.findOne({ bbcDateId }).lean();
|
|
160
|
+
if (!availabilitySignedData) {
|
|
161
|
+
return {};
|
|
162
|
+
}
|
|
163
|
+
return availabilitySignedData.data;
|
|
164
|
+
}
|
|
165
|
+
async keepBalance(bbcDateId) {
|
|
166
|
+
const loanBalances = await this.loanTransactionsService.getLoanBalanceForBBCDateId(bbcDateId);
|
|
167
|
+
const accruedStatement = await this.loanStatementService.calculateAccruedStatementForBBC(bbcDateId);
|
|
168
|
+
console.log({ bbcDateId });
|
|
169
|
+
await AvilabilitySignedData_model_1.AvailabilitySignedData.findOneAndUpdate({ bbcDateId }, { data: { loanBalances, accruedStatement } }, { upsert: true });
|
|
170
|
+
}
|
|
171
|
+
async clearAvailabilityStoredData(bbcDateId) {
|
|
172
|
+
await AvilabilitySignedData_model_1.AvailabilitySignedData.findOneAndDelete({ bbcDateId });
|
|
173
|
+
}
|
|
174
|
+
async logSignStatus(bbcDateId, userId, isSigned) {
|
|
175
|
+
const bbcDate = await BBCDate_model_1.BBCDateModel.findById(bbcDateId)
|
|
176
|
+
.populate('borrowerId')
|
|
177
|
+
.lean();
|
|
178
|
+
if (!bbcDate) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const newLog = {
|
|
182
|
+
userId,
|
|
183
|
+
action: isSigned ? UserLog_model_1.ELogActionType.CREATE : UserLog_model_1.ELogActionType.DELETE,
|
|
184
|
+
details: { date: bbcDate.bbcDate, borrower: bbcDate.borrowerId.name }, // , borrower: bbcDate.borrower.name
|
|
185
|
+
logType: isSigned ? UserLog_model_1.ELogType.SIGN_BBC : UserLog_model_1.ELogType.REVOKE_BBC,
|
|
186
|
+
};
|
|
187
|
+
await (0, user_logs_db_1.createLog)(newLog);
|
|
188
|
+
}
|
|
189
|
+
async BBCDatesShort(borrowerId, paginatorOptions) {
|
|
190
|
+
const BBCDates = await BBCDate_model_1.BBCDateModel.aggregate([
|
|
191
|
+
{
|
|
192
|
+
'$match': {
|
|
193
|
+
'borrowerId': new mongoose_1.default.Types.ObjectId(borrowerId),
|
|
194
|
+
},
|
|
195
|
+
}, {
|
|
196
|
+
'$sort': {
|
|
197
|
+
'bbcDate': -1,
|
|
198
|
+
},
|
|
199
|
+
}, {
|
|
200
|
+
'$project': {
|
|
201
|
+
'_id': 1,
|
|
202
|
+
'bbcDate': 1,
|
|
203
|
+
'signStatus': 1,
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
...(0, collaterals_db_1.ITEMS_PAGINATION)(paginatorOptions),
|
|
207
|
+
]);
|
|
208
|
+
const availabilitiesSigns = await (0, availability_db_1.getAvailabilitySigns)(BBCDates.map((bbcDate) => bbcDate._id.toString()));
|
|
209
|
+
await Promise.all(BBCDates.slice().map(async (bbcDate) => {
|
|
210
|
+
const foundAvailabilitySigns = availabilitiesSigns.find((aSigns) => aSigns.bbcDateId.toString() === bbcDate._id.toString());
|
|
211
|
+
if (!foundAvailabilitySigns) {
|
|
212
|
+
bbcDate.signStatus = ESignStatus.STARTED;
|
|
213
|
+
}
|
|
214
|
+
if (foundAvailabilitySigns) {
|
|
215
|
+
const activeSigns = foundAvailabilitySigns.signs.filter((sign) => !sign.userRevoked).length;
|
|
216
|
+
if (activeSigns === 0) {
|
|
217
|
+
bbcDate.signStatus = ESignStatus.STARTED;
|
|
218
|
+
}
|
|
219
|
+
else if (activeSigns === foundAvailabilitySigns.requiredSigns) {
|
|
220
|
+
bbcDate.signStatus = ESignStatus.APPROVED;
|
|
221
|
+
}
|
|
222
|
+
else if (activeSigns < foundAvailabilitySigns.requiredSigns) {
|
|
223
|
+
bbcDate.signStatus = ESignStatus.PENDING;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}));
|
|
227
|
+
return BBCDates;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.SignsService = SignsService;
|