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.
Files changed (303) hide show
  1. package/classes/bank-transaction-item.d.ts +17 -0
  2. package/classes/bank-transaction-item.js +64 -0
  3. package/classes/bank-transaction-item.ts +66 -0
  4. package/classes/bank-uploaded-transaction.d.ts +17 -0
  5. package/classes/bank-uploaded-transaction.js +35 -0
  6. package/classes/bank-uploaded-transaction.ts +35 -0
  7. package/classes/inventory-item.d.ts +41 -0
  8. package/classes/inventory-item.js +44 -0
  9. package/classes/inventory-item.ts +63 -0
  10. package/classes/payable-account-item.d.ts +22 -0
  11. package/classes/payable-account-item.js +27 -0
  12. package/classes/payable-account-item.ts +35 -0
  13. package/classes/quickbook-item.d.ts +37 -0
  14. package/classes/quickbook-item.js +51 -0
  15. package/classes/quickbook-item.ts +59 -0
  16. package/classes/receivable-item.d.ts +26 -0
  17. package/classes/receivable-item.js +28 -0
  18. package/classes/receivable-item.ts +38 -0
  19. package/constants/date-formats.contsants.d.ts +1 -0
  20. package/constants/date-formats.contsants.js +4 -0
  21. package/constants/date-formats.contsants.ts +1 -0
  22. package/db/brokers.db.d.ts +185 -0
  23. package/db/brokers.db.js +35 -2
  24. package/db/brokers.db.ts +34 -1
  25. package/db/collateral-adjustments.db.d.ts +34 -0
  26. package/db/collateral-adjustments.db.js +52 -0
  27. package/db/collateral-adjustments.db.ts +54 -0
  28. package/db/collaterals.db.d.ts +1 -1
  29. package/db/equipment.db.d.ts +40 -0
  30. package/db/equipment.db.js +55 -0
  31. package/db/equipment.db.ts +56 -0
  32. package/db/financial-spreading.db.ts +2 -1
  33. package/db/groups.d.ts +5 -0
  34. package/db/groups.js +57 -0
  35. package/db/groups.ts +52 -0
  36. package/db/inventories.d.ts +91 -0
  37. package/db/inventories.js +449 -0
  38. package/db/inventories.ts +481 -0
  39. package/db/inventory-availability.d.ts +3 -0
  40. package/db/inventory-availability.js +103 -0
  41. package/db/inventory-availability.ts +113 -0
  42. package/db/new-summary.d.ts +31 -0
  43. package/db/new-summary.js +1295 -0
  44. package/db/new-summary.ts +1509 -0
  45. package/db/payable-accounts.d.ts +30 -0
  46. package/db/payable-accounts.js +55 -0
  47. package/db/payable-accounts.ts +50 -0
  48. package/db/reserve.db.d.ts +34 -0
  49. package/db/reserve.db.js +52 -0
  50. package/db/reserve.db.ts +48 -0
  51. package/db/uploads.db.d.ts +2 -0
  52. package/db/uploads.db.js +29 -0
  53. package/db/uploads.db.ts +24 -0
  54. package/helpers/main.helper.d.ts +31 -0
  55. package/helpers/main.helper.js +63 -0
  56. package/helpers/main.helper.ts +63 -0
  57. package/models/AccountPayableItem.model.d.ts +6 -6
  58. package/models/AllocatedBankTransaction.model.d.ts +54 -0
  59. package/models/AllocatedBankTransaction.model.js +70 -0
  60. package/models/AllocatedBankTransaction.model.ts +94 -0
  61. package/models/AllocatedData.model.d.ts +33 -0
  62. package/models/AllocatedData.model.js +19 -0
  63. package/models/AllocatedData.model.ts +24 -0
  64. package/models/BBCDate.model.d.ts +3 -3
  65. package/models/BBCSheet.model.d.ts +3 -3
  66. package/models/Banks.model.d.ts +3 -3
  67. package/models/Borrower.model.d.ts +3 -3
  68. package/models/BorrowerData.model.d.ts +3 -3
  69. package/models/BorrowerDataInsurance.model.d.ts +3 -3
  70. package/models/BorrowerDataTerm.model.d.ts +3 -3
  71. package/models/BorrowerSummary.model.js +1 -1
  72. package/models/BorrowerSummary.model.ts +1 -1
  73. package/models/CalandarDay.model.d.ts +40 -0
  74. package/models/CalandarDay.model.js +47 -0
  75. package/models/CalandarDay.model.ts +61 -0
  76. package/models/CashAllocationProduct.model.d.ts +119 -0
  77. package/models/CashAllocationProduct.model.js +102 -0
  78. package/models/CashAllocationProduct.model.ts +112 -0
  79. package/models/CashAllocationReference.model.d.ts +37 -0
  80. package/models/CashAllocationReference.model.js +27 -0
  81. package/models/CashAllocationReference.model.ts +40 -0
  82. package/models/CollateralAdjustment.model.d.ts +51 -0
  83. package/models/CollateralAdjustment.model.js +61 -0
  84. package/models/CollateralAdjustment.model.ts +98 -0
  85. package/models/Company.model.d.ts +35 -0
  86. package/models/Company.model.js +18 -0
  87. package/models/Company.model.ts +29 -0
  88. package/models/CustomerAPGroup.model.d.ts +32 -0
  89. package/models/CustomerAPGroup.model.js +24 -0
  90. package/models/CustomerAPGroup.model.ts +31 -0
  91. package/models/Equipment.model.d.ts +53 -0
  92. package/models/Equipment.model.js +140 -0
  93. package/models/Equipment.model.ts +172 -0
  94. package/models/FinancialCompliance.model.d.ts +39 -0
  95. package/models/FinancialCompliance.model.js +64 -0
  96. package/models/FinancialCompliance.model.ts +78 -0
  97. package/models/FinancialComplianceBorrower.model.d.ts +58 -0
  98. package/models/FinancialComplianceBorrower.model.js +82 -0
  99. package/models/FinancialComplianceBorrower.model.ts +118 -0
  100. package/models/FinancialIndexes.model.d.ts +36 -0
  101. package/models/FinancialIndexes.model.js +27 -0
  102. package/models/FinancialIndexes.model.ts +37 -0
  103. package/models/Inventory.model.d.ts +18 -18
  104. package/models/InventoryAvailability.model.d.ts +21 -21
  105. package/models/InventoryAvailabilityItem.model.d.ts +6 -6
  106. package/models/InventoryItem.model.d.ts +24 -24
  107. package/models/InventoryManualEntry.model.d.ts +9 -9
  108. package/models/InventorySeasonalRates.model.d.ts +3 -3
  109. package/models/LoanBroker.model.d.ts +3 -3
  110. package/models/LoanCharges.model.d.ts +12 -12
  111. package/models/LoanProducts.model.d.ts +9 -9
  112. package/models/LoanStatementStatus.model.d.ts +35 -0
  113. package/models/LoanStatementStatus.model.js +34 -0
  114. package/models/LoanStatementStatus.model.ts +45 -0
  115. package/models/LoanStatementTransaction.model.d.ts +9 -9
  116. package/models/LoanTransactionFile.model.d.ts +41 -0
  117. package/models/LoanTransactionFile.model.js +44 -0
  118. package/models/LoanTransactionFile.model.ts +61 -0
  119. package/models/MappedGroup.model.d.ts +37 -0
  120. package/models/MappedGroup.model.js +33 -0
  121. package/models/MappedGroup.model.ts +46 -0
  122. package/models/MonthEndData.Model.d.ts +41 -0
  123. package/models/MonthEndData.Model.js +42 -0
  124. package/models/MonthEndData.Model.ts +53 -0
  125. package/models/OrganizationEmails.model.d.ts +44 -0
  126. package/models/OrganizationEmails.model.js +40 -0
  127. package/models/OrganizationEmails.model.ts +54 -0
  128. package/models/ProductBroker.model.d.ts +9 -9
  129. package/models/QuickbooksAccount.model.d.ts +39 -0
  130. package/models/QuickbooksAccount.model.js +43 -0
  131. package/models/QuickbooksAccount.model.ts +57 -0
  132. package/models/Receivable.model.d.ts +12 -12
  133. package/models/ReceivableAvailability.model.d.ts +54 -54
  134. package/models/ReceivableAvailabilityItem.model.d.ts +57 -57
  135. package/models/ReceivableItem.model.d.ts +6 -6
  136. package/models/Reserve.model.d.ts +51 -0
  137. package/models/Reserve.model.js +96 -0
  138. package/models/Reserve.model.ts +125 -0
  139. package/models/TermLoan.model.d.ts +3 -3
  140. package/models/TermLoanCalculated.model.d.ts +6 -6
  141. package/models/TransactionAttachedFile.Model.d.ts +35 -0
  142. package/models/TransactionAttachedFile.Model.js +37 -0
  143. package/models/TransactionAttachedFile.Model.ts +48 -0
  144. package/models/UploadedBankTransaction.model.d.ts +56 -0
  145. package/models/UploadedBankTransaction.model.js +78 -0
  146. package/models/UploadedBankTransaction.model.ts +110 -0
  147. package/models/UploadedData.model.d.ts +36 -0
  148. package/models/UploadedData.model.js +23 -0
  149. package/models/UploadedData.model.ts +35 -0
  150. package/models/UploadedFile.model.d.ts +40 -0
  151. package/models/UploadedFile.model.js +41 -0
  152. package/models/UploadedFile.model.ts +57 -0
  153. package/models/UploadedSheet.model.d.ts +46 -0
  154. package/models/UploadedSheet.model.js +27 -0
  155. package/models/UploadedSheet.model.ts +51 -0
  156. package/package.json +10 -1
  157. package/repositories/globals.repository.d.ts +8 -0
  158. package/repositories/globals.repository.js +24 -0
  159. package/repositories/globals.repository.ts +21 -0
  160. package/services/attached-files.service.d.ts +57 -0
  161. package/services/attached-files.service.js +103 -0
  162. package/services/attached-files.service.ts +123 -0
  163. package/services/availability.service.d.ts +77 -0
  164. package/services/availability.service.js +897 -0
  165. package/services/availability.service.ts +1034 -0
  166. package/services/bank-uploaded-transactions.service.d.ts +33 -0
  167. package/services/bank-uploaded-transactions.service.js +430 -0
  168. package/services/bank-uploaded-transactions.service.ts +475 -0
  169. package/services/banks.service.d.ts +36 -0
  170. package/services/banks.service.js +91 -0
  171. package/services/banks.service.ts +95 -0
  172. package/services/borrower-summary.service.d.ts +35 -0
  173. package/services/borrower-summary.service.js +310 -0
  174. package/services/borrower-summary.service.ts +334 -0
  175. package/services/borrowers.service.d.ts +103 -0
  176. package/services/borrowers.service.js +268 -0
  177. package/services/borrowers.service.ts +302 -0
  178. package/services/brokers.service.d.ts +212 -0
  179. package/services/brokers.service.js +160 -0
  180. package/services/brokers.service.ts +200 -0
  181. package/services/calendar.service.d.ts +53 -0
  182. package/services/calendar.service.js +108 -0
  183. package/services/calendar.service.ts +128 -0
  184. package/services/cash-allocation.service.d.ts +40 -0
  185. package/services/cash-allocation.service.js +92 -0
  186. package/services/cash-allocation.service.ts +105 -0
  187. package/services/collateral-adjustments.service.d.ts +38 -0
  188. package/services/collateral-adjustments.service.js +82 -0
  189. package/services/collateral-adjustments.service.ts +95 -0
  190. package/services/collaterals.service.d.ts +69 -0
  191. package/services/collaterals.service.js +279 -0
  192. package/services/collaterals.service.ts +319 -0
  193. package/services/companies.service.d.ts +5 -0
  194. package/services/companies.service.js +21 -0
  195. package/services/companies.service.ts +23 -0
  196. package/services/compliance-borrowers.service.d.ts +152 -0
  197. package/services/compliance-borrowers.service.js +569 -0
  198. package/services/compliance-borrowers.service.ts +617 -0
  199. package/services/equipment.service.d.ts +42 -0
  200. package/services/equipment.service.js +120 -0
  201. package/services/equipment.service.ts +149 -0
  202. package/services/file-manager.service.d.ts +44 -0
  203. package/services/file-manager.service.js +120 -0
  204. package/services/file-manager.service.ts +146 -0
  205. package/services/financial-compliance.service.d.ts +58 -0
  206. package/services/financial-compliance.service.js +281 -0
  207. package/services/financial-compliance.service.ts +309 -0
  208. package/services/financial-indexes.service.d.ts +20 -0
  209. package/services/financial-indexes.service.js +241 -0
  210. package/services/financial-indexes.service.ts +257 -0
  211. package/services/financial-spreading.service.d.ts +74 -0
  212. package/services/financial-spreading.service.js +450 -0
  213. package/services/financial-spreading.service.ts +517 -0
  214. package/services/globals.service.d.ts +5 -0
  215. package/services/globals.service.js +11 -0
  216. package/services/globals.service.ts +8 -0
  217. package/services/groups.service.d.ts +39 -0
  218. package/services/groups.service.js +65 -0
  219. package/services/groups.service.ts +64 -0
  220. package/services/inventory-availability.service.d.ts +13 -0
  221. package/services/inventory-availability.service.js +170 -0
  222. package/services/inventory-availability.service.ts +187 -0
  223. package/services/inventory.service.d.ts +118 -0
  224. package/services/inventory.service.js +239 -0
  225. package/services/inventory.service.ts +276 -0
  226. package/services/loan-charges.service.d.ts +83 -0
  227. package/services/loan-charges.service.js +343 -0
  228. package/services/loan-charges.service.ts +396 -0
  229. package/services/loan-payments.service.d.ts +94 -0
  230. package/services/loan-payments.service.js +485 -0
  231. package/services/loan-payments.service.ts +541 -0
  232. package/services/loan-products.service.d.ts +12 -0
  233. package/services/loan-products.service.js +55 -0
  234. package/services/loan-products.service.ts +58 -0
  235. package/services/loan-statement-balance.service.d.ts +16 -0
  236. package/services/loan-statement-balance.service.js +106 -0
  237. package/services/loan-statement-balance.service.ts +113 -0
  238. package/services/loan-statement-effects.service.d.ts +8 -0
  239. package/services/loan-statement-effects.service.js +42 -0
  240. package/services/loan-statement-effects.service.ts +41 -0
  241. package/services/loan-statement-status.service.d.ts +208 -0
  242. package/services/loan-statement-status.service.js +159 -0
  243. package/services/loan-statement-status.service.ts +177 -0
  244. package/services/loan-statement.service.d.ts +186 -0
  245. package/services/loan-statement.service.js +935 -0
  246. package/services/loan-statement.service.ts +1040 -0
  247. package/services/loan-transactions.service.d.ts +169 -0
  248. package/services/loan-transactions.service.js +941 -0
  249. package/services/loan-transactions.service.ts +1042 -0
  250. package/services/lock.service.d.ts +6 -0
  251. package/services/lock.service.js +45 -0
  252. package/services/lock.service.ts +45 -0
  253. package/services/manual-entry.service.d.ts +20 -0
  254. package/services/manual-entry.service.js +186 -0
  255. package/services/manual-entry.service.ts +201 -0
  256. package/services/month-end-data.service.d.ts +34 -0
  257. package/services/month-end-data.service.js +30 -0
  258. package/services/month-end-data.service.ts +35 -0
  259. package/services/nodemailer.service.d.ts +96 -0
  260. package/services/nodemailer.service.js +689 -0
  261. package/services/nodemailer.service.ts +774 -0
  262. package/services/organization-emails.service.d.ts +31 -0
  263. package/services/organization-emails.service.js +10 -0
  264. package/services/organization-emails.service.ts +7 -0
  265. package/services/organizations.service.d.ts +34 -0
  266. package/services/organizations.service.js +74 -0
  267. package/services/organizations.service.ts +84 -0
  268. package/services/pdf.service.d.ts +61 -0
  269. package/services/pdf.service.js +547 -0
  270. package/services/pdf.service.ts +642 -0
  271. package/services/quickbooks.service.d.ts +99 -0
  272. package/services/quickbooks.service.js +640 -0
  273. package/services/quickbooks.service.ts +734 -0
  274. package/services/reports/investor-summary.service.d.ts +28 -0
  275. package/services/reports/investor-summary.service.js +136 -0
  276. package/services/reports/investor-summary.service.ts +159 -0
  277. package/services/reports.service.d.ts +126 -0
  278. package/services/reports.service.js +584 -0
  279. package/services/reports.service.ts +702 -0
  280. package/services/reserve.service.d.ts +37 -0
  281. package/services/reserve.service.js +76 -0
  282. package/services/reserve.service.ts +79 -0
  283. package/services/sentry.service.d.ts +11 -0
  284. package/services/sentry.service.js +49 -0
  285. package/services/sentry.service.ts +33 -0
  286. package/services/signs.service.d.ts +69 -0
  287. package/services/signs.service.js +230 -0
  288. package/services/signs.service.ts +260 -0
  289. package/services/term-loan.service.d.ts +30 -0
  290. package/services/term-loan.service.js +614 -0
  291. package/services/term-loan.service.ts +696 -0
  292. package/services/uploads.service.d.ts +134 -0
  293. package/services/uploads.service.js +587 -0
  294. package/services/uploads.service.ts +643 -0
  295. package/services/user-logs.service.d.ts +23 -0
  296. package/services/user-logs.service.js +160 -0
  297. package/services/user-logs.service.ts +177 -0
  298. package/services/users.service.d.ts +4 -4
  299. package/services/yield.service.d.ts +46 -0
  300. package/services/yield.service.js +42 -12
  301. package/services/yield.service.ts +38 -8
  302. package/tsconfig.json +5 -5
  303. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,260 @@
1
+ import mongoose, { Document } from 'mongoose';
2
+ import _ from 'lodash';
3
+
4
+ import { IResult } from '../interfaces/result.interface';
5
+ import {
6
+ addAvailabilitySign,
7
+ findAvailabilitySignsByBBCDateId,
8
+ getAvailabilitySigns,
9
+ updateAvailabilitySigns,
10
+ } from '../db/availability.db';
11
+ import { IUserDocument } from '../models/User.model';
12
+ import {
13
+ AvailabilitySignsModel,
14
+ IAvailabilitySignItem,
15
+ IAvailabilitySignView,
16
+ REQUIRED_SIGNS,
17
+ } from '../models/AvailabilitySigns.model';
18
+ import { BBCDateModel, IBBCDateDoc } from '../models/BBCDate.model';
19
+ import { MODEL_NAMES } from '../models/_models';
20
+ import { getOlderBBCDates } from '../db/bbcDates.db';
21
+ import { ELogActionType, ELogType } from '../models/UserLog.model';
22
+ import { createLog, ICreateLogParams } from '../db/user-logs.db';
23
+ import { IBorrowerDocument } from '../models/Borrower.model';
24
+ import { IKeycloakUser } from '../interfaces/keycloak-user.interface';
25
+ import { IPaginatorOptions } from '../interfaces/collaterals.interface';
26
+ import { ITEMS_PAGINATION } from '../db/collaterals.db';
27
+ import { UsersService } from './users.service';
28
+
29
+ import { AvailabilitySignedData } from '../models/AvilabilitySignedData.model';
30
+ import { LoanTransactionsService } from './loan-transactions.service';
31
+ import { LockService } from './lock.service';
32
+ import { LoanStatementService } from './loan-statement.service';
33
+
34
+ export interface IBBCDateWithBorrower extends Document {
35
+ borrowerId: IBorrowerDocument;
36
+ bbcDate: Date;
37
+ }
38
+
39
+ export enum ESignStatus {
40
+ STARTED = 'STARTED',
41
+ APPROVED = 'APPROVED',
42
+ PENDING = 'PENDING',
43
+ }
44
+
45
+ export class SignsService {
46
+
47
+ constructor(
48
+ private readonly lockService: LockService,
49
+ private readonly loanTransactionsService: LoanTransactionsService,
50
+ private readonly loanStatementService: LoanStatementService,
51
+ private readonly usersService: UsersService,
52
+ ) {
53
+ }
54
+
55
+ keyCloakUsers: IKeycloakUser[] = null;
56
+
57
+ async fulfillUserList() {
58
+ const { access_token } = await this.usersService.getKeyCloakAdminBearer();
59
+ this.keyCloakUsers = await this.usersService.getUserList(access_token);
60
+ }
61
+
62
+ clearUserList() {
63
+ this.keyCloakUsers = null;
64
+ }
65
+
66
+ async getAvailabilitySigns(bbcDateId: string): Promise<IAvailabilitySignView> {
67
+ const availabilitiesSigns = await getAvailabilitySigns([bbcDateId]);
68
+ if (!availabilitiesSigns.length) {
69
+ return <IAvailabilitySignView>{
70
+ _id: null,
71
+ bbcDateId: new mongoose.Types.ObjectId(bbcDateId),
72
+ requiredSigns: REQUIRED_SIGNS,
73
+ signs: [],
74
+ };
75
+ }
76
+ const availabilitySigns = availabilitiesSigns[0];
77
+ let keyCloakUsers = this.keyCloakUsers;
78
+ if (!keyCloakUsers) {
79
+ const { access_token } = await this.usersService.getKeyCloakAdminBearer();
80
+ keyCloakUsers = await this.usersService.getUserList(access_token);
81
+ }
82
+ availabilitySigns.signs = availabilitySigns.signs.reduce((acc, userSign) => {
83
+ if (!userSign.userSigned) {
84
+ return acc;
85
+ }
86
+ const foundUserSigned = keyCloakUsers.find((user) => user.id === userSign.userSigned.keycloakUserId);
87
+ if (foundUserSigned) {
88
+ userSign.userSigned.firstName = foundUserSigned.firstName;
89
+ userSign.userSigned.lastName = foundUserSigned.lastName;
90
+ }
91
+ userSign.userSigned = (_.pick(userSign.userSigned, ['_id', 'firstName', 'lastName'])) as IUserDocument;
92
+ if (userSign.userRevoked) {
93
+ const foundUserRevoked = keyCloakUsers.find((user) => user.id === userSign.userRevoked.keycloakUserId);
94
+ if (foundUserRevoked) {
95
+ userSign.userRevoked.firstName = foundUserRevoked.firstName;
96
+ userSign.userRevoked.lastName = foundUserRevoked.lastName;
97
+ }
98
+ userSign.userRevoked = (_.pick(userSign.userRevoked, ['_id', 'firstName', 'lastName'])) as IUserDocument;
99
+ }
100
+ return [...acc, _.pick(userSign, ['userSigned', 'signedAt', 'userRevoked', 'revokedAt'])];
101
+ }, []);
102
+ return availabilitySigns;
103
+ }
104
+
105
+ async revokeAvailability(bbcDateId: string, userId: string, userIdRevoked: string): Promise<void> {
106
+ const availability = await findAvailabilitySignsByBBCDateId(bbcDateId);
107
+ const updatedSigns = availability.signs.map((sign) => {
108
+ if (sign.userSignedId.toString() === userId && !sign.revokedAt) {
109
+ sign.userRevokedId = new mongoose.Types.ObjectId(userIdRevoked);
110
+ sign.revokedAt = new Date();
111
+ sign.userRevokedId = new mongoose.Types.ObjectId(userIdRevoked);
112
+ }
113
+ return sign;
114
+ });
115
+ await updateAvailabilitySigns(bbcDateId, updatedSigns);
116
+ }
117
+
118
+ async signAvailability(bbcDateId: string, user: IUserDocument): Promise<IResult> {
119
+ const newSign = <IAvailabilitySignItem>{ userSignedId: user._id, signedAt: new Date() };
120
+ return await addAvailabilitySign(bbcDateId, newSign);
121
+ }
122
+
123
+ async isBBCLocked(bbcDateId: string): Promise<boolean> {
124
+ const bbcDoc = await BBCDateModel.findById(bbcDateId).lean();
125
+ if (!bbcDoc) {
126
+ return false;
127
+ }
128
+ return await this.lockService.isDateLocked(bbcDoc.bbcDate, bbcDoc.borrowerId.toString());
129
+ }
130
+
131
+ async getLatestSignedBBCDate(borrowerId: string, date?: Date): Promise<IBBCDateDoc> {
132
+ const bbcDocs = await getOlderBBCDates(borrowerId, date || new Date());
133
+ const activeSignsAfter = await AvailabilitySignsModel.aggregate([
134
+ {
135
+ $match: {
136
+ 'bbcDateId': { $in: bbcDocs.map((bbc) => bbc._id) },
137
+ },
138
+ }, {
139
+ $unwind: {
140
+ path: '$signs',
141
+ preserveNullAndEmptyArrays: true,
142
+ },
143
+ }, {
144
+ $match: {
145
+ 'signs.revokedAt': { $exists: false },
146
+ },
147
+ }, {
148
+ $group: {
149
+ '_id': '$_id',
150
+ 'requiredSigns': { $first: '$requiredSigns' },
151
+ 'bbcDateId': { $first: '$bbcDateId' },
152
+ 'signs': { $push: '$signs' },
153
+ },
154
+ }, {
155
+ $match: {
156
+ $expr: {
157
+ $gte: [
158
+ { '$size': '$signs' }, '$requiredSigns',
159
+ ],
160
+ },
161
+ },
162
+ }, {
163
+ $lookup: {
164
+ from: MODEL_NAMES.BBCDates,
165
+ localField: 'bbcDateId',
166
+ foreignField: '_id',
167
+ as: 'bbc',
168
+ },
169
+ }, {
170
+ $unwind: {
171
+ path: '$bbc',
172
+ preserveNullAndEmptyArrays: true,
173
+ },
174
+ }, {
175
+ $sort: {
176
+ 'bbc.bbcDate': -1,
177
+ },
178
+ },
179
+ ]);
180
+ if (!activeSignsAfter.length) {
181
+ return null;
182
+ }
183
+ return activeSignsAfter[0].bbc;
184
+ }
185
+
186
+ async getSavedData(bbcDateId: string) {
187
+ const availabilitySignedData = await AvailabilitySignedData.findOne({ bbcDateId }).lean();
188
+ if (!availabilitySignedData) {
189
+ return {};
190
+ }
191
+ return availabilitySignedData.data;
192
+ }
193
+
194
+ async keepBalance(bbcDateId: string) {
195
+ const loanBalances = await this.loanTransactionsService.getLoanBalanceForBBCDateId(bbcDateId);
196
+ const accruedStatement = await this.loanStatementService.calculateAccruedStatementForBBC(bbcDateId);
197
+ console.log({ bbcDateId });
198
+ await AvailabilitySignedData.findOneAndUpdate({ bbcDateId }, { data: { loanBalances, accruedStatement } }, { upsert: true });
199
+ }
200
+
201
+ async clearAvailabilityStoredData(bbcDateId: string) {
202
+ await AvailabilitySignedData.findOneAndDelete({ bbcDateId });
203
+ }
204
+
205
+ async logSignStatus(bbcDateId: string, userId: string, isSigned: boolean) {
206
+ const bbcDate = await BBCDateModel.findById(bbcDateId)
207
+ .populate('borrowerId')
208
+ .lean() as unknown as IBBCDateWithBorrower;
209
+ if (!bbcDate) {
210
+ return;
211
+ }
212
+ const newLog: ICreateLogParams = {
213
+ userId,
214
+ action: isSigned ? ELogActionType.CREATE : ELogActionType.DELETE,
215
+ details: { date: bbcDate.bbcDate, borrower: bbcDate.borrowerId.name }, // , borrower: bbcDate.borrower.name
216
+ logType: isSigned ? ELogType.SIGN_BBC : ELogType.REVOKE_BBC,
217
+ };
218
+ await createLog(newLog);
219
+ }
220
+
221
+ async BBCDatesShort(borrowerId: string, paginatorOptions: IPaginatorOptions) {
222
+ const BBCDates = await BBCDateModel.aggregate<{ _id: mongoose.Types.ObjectId, bbcDate: Date, signStatus: string }>([
223
+ {
224
+ '$match': {
225
+ 'borrowerId': new mongoose.Types.ObjectId(borrowerId),
226
+ },
227
+ }, {
228
+ '$sort': {
229
+ 'bbcDate': -1,
230
+ },
231
+ }, {
232
+ '$project': {
233
+ '_id': 1,
234
+ 'bbcDate': 1,
235
+ 'signStatus': 1,
236
+ },
237
+ },
238
+ ...ITEMS_PAGINATION(paginatorOptions),
239
+ ]);
240
+
241
+ const availabilitiesSigns = await getAvailabilitySigns(BBCDates.map((bbcDate) => bbcDate._id.toString()));
242
+ await Promise.all(BBCDates.slice().map(async (bbcDate) => {
243
+ const foundAvailabilitySigns = availabilitiesSigns.find((aSigns) => aSigns.bbcDateId.toString() ===bbcDate._id.toString());
244
+ if (!foundAvailabilitySigns) {
245
+ bbcDate.signStatus = ESignStatus.STARTED;
246
+ }
247
+ if (foundAvailabilitySigns) {
248
+ const activeSigns = foundAvailabilitySigns.signs.filter((sign) => !sign.userRevoked).length;
249
+ if (activeSigns === 0) {
250
+ bbcDate.signStatus = ESignStatus.STARTED;
251
+ } else if (activeSigns === foundAvailabilitySigns.requiredSigns) {
252
+ bbcDate.signStatus = ESignStatus.APPROVED;
253
+ } else if (activeSigns < foundAvailabilitySigns.requiredSigns) {
254
+ bbcDate.signStatus = ESignStatus.PENDING;
255
+ }
256
+ }
257
+ }));
258
+ return BBCDates;
259
+ }
260
+ }
@@ -0,0 +1,30 @@
1
+ import { ITermLoanSettingsOnly } from '../models/TermLoanSettings.model';
2
+ import { ETermLoanStatus, ITermLoanView } from '../models/TermLoan.model';
3
+ import { ITermLoanCalculated, ITermLoanCalculatedDoc } from '../models/TermLoanCalculated.model';
4
+ import { FinancialIndexesService } from './financial-indexes.service';
5
+ import { LoanChargesService } from './loan-charges.service';
6
+ import { LoanStatementStatusService } from './loan-statement-status.service';
7
+ import { LoanTransactionsService } from './loan-transactions.service';
8
+ import { UploadsService } from './uploads.service';
9
+ export declare class TermLoanService {
10
+ private readonly financialIndexesService;
11
+ private readonly loanChargesService;
12
+ private readonly getLoanStatementStatusService;
13
+ private readonly getLoanTransactionsService;
14
+ private readonly getUploadsService;
15
+ constructor(financialIndexesService: FinancialIndexesService, loanChargesService: LoanChargesService, getLoanStatementStatusService: () => LoanStatementStatusService, getLoanTransactionsService: () => LoanTransactionsService, getUploadsService: () => UploadsService);
16
+ private createTermLoan;
17
+ private createTermLoanSettings;
18
+ private getCreateTermLoan;
19
+ getTermLoan(productId: string, actual: boolean): Promise<ITermLoanView & {
20
+ calculated: ITermLoanCalculatedDoc[];
21
+ }>;
22
+ saveTermLoanSettings(productId: string, actual: boolean, settings: ITermLoanSettingsOnly): Promise<any>;
23
+ calculateAllTermLoans(): Promise<void>;
24
+ setTermLoanExpected(productId: string, recalculate?: boolean): Promise<void>;
25
+ updateTermLoanStatus(termLoanId: string, calculationStatus: ETermLoanStatus, lastCalculated?: Date): Promise<void>;
26
+ calculateTermLoan(productId: string, actual: boolean): Promise<any>;
27
+ saveCalculatedTermLoan(calculatedTermLoans: ITermLoanCalculated[], productId: string): Promise<void>;
28
+ getTermLoanExcel(productId: string, actual: boolean, short: boolean): Promise<any>;
29
+ isBorrowerTermLoanActual(borrowerId: string): Promise<boolean>;
30
+ }