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,108 @@
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.CalendarService = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const dayjs_1 = __importDefault(require("dayjs"));
9
+ const CalandarDay_model_1 = __importDefault(require("../models/CalandarDay.model"));
10
+ class CalendarService {
11
+ async fulfillCalendar() {
12
+ const getDays = () => {
13
+ const days = [];
14
+ const start = (0, dayjs_1.default)('2025-01-01');
15
+ const end = (0, dayjs_1.default)('2026-01-01'); // TODO add custom date
16
+ for (let day = (0, dayjs_1.default)(start); day.isBefore(end); day = day.add(1, 'day')) {
17
+ days.push(day.format('YYYY-MM-DD'));
18
+ }
19
+ return days;
20
+ };
21
+ const options = (date) => ({
22
+ method: 'GET',
23
+ url: 'https://working-days.p.rapidapi.com/1.3/get_info_day',
24
+ params: {
25
+ country_code: 'US',
26
+ date,
27
+ },
28
+ headers: {
29
+ 'X-RapidAPI-Key': '07a550d083msh90e492b0eeb739cp180bb6jsn4005ea3ba2a7',
30
+ 'X-RapidAPI-Host': 'working-days.p.rapidapi.com',
31
+ },
32
+ });
33
+ try {
34
+ const dates = getDays();
35
+ const datesToCreate = [];
36
+ await Promise.all(dates.map(async (date) => {
37
+ const foundDate = await CalandarDay_model_1.default.findOne({ date });
38
+ if (!foundDate) {
39
+ datesToCreate.push(date);
40
+ }
41
+ }));
42
+ await Promise.all(datesToCreate.map(async (date, i) => {
43
+ setTimeout(async () => {
44
+ const response = await axios_1.default.request(options(date));
45
+ await this.createDate(date, response.data);
46
+ console.log('created', date);
47
+ if (datesToCreate.length === i + 1) {
48
+ console.log('done!');
49
+ }
50
+ }, i * 500);
51
+ }));
52
+ }
53
+ catch (error) {
54
+ console.error(error);
55
+ }
56
+ }
57
+ async createDate(date, dateProp) {
58
+ const newDate = {
59
+ date: date,
60
+ customDate: dateProp.custom_date === 1,
61
+ customDateDescription: dateProp.custom_date_description,
62
+ publicHoliday: dateProp.public_holiday === '1',
63
+ publicHolidayDescription: dateProp.public_holiday_description,
64
+ weekendDay: dateProp.weekend_day === 1,
65
+ workingDay: dateProp.working_day === 1,
66
+ };
67
+ await CalandarDay_model_1.default.create(newDate);
68
+ }
69
+ async isWorkingDay(date) {
70
+ const calendarDay = await CalandarDay_model_1.default.findOne({ date });
71
+ return calendarDay.workingDay;
72
+ }
73
+ async isLastWorkingDay(date) {
74
+ const calendarDay = await CalandarDay_model_1.default.findOne({ date });
75
+ const isNextDayWorking = await this.isWorkingDay((0, dayjs_1.default)(calendarDay.date).add(1, 'day').format('YYYY-MM-DD'));
76
+ return !isNextDayWorking;
77
+ }
78
+ async getNextWorkingDay(date) {
79
+ let nextDay = (0, dayjs_1.default)(new Date(date));
80
+ let isWorking = false;
81
+ do {
82
+ nextDay = nextDay.add(1, 'day');
83
+ const calendarDay = await CalandarDay_model_1.default.findOne({ date: nextDay.format('YYYY-MM-DD') }).lean();
84
+ if (!calendarDay) {
85
+ console.error(`no data in calendar for ${nextDay.format('YYYY-MM-DD')}`);
86
+ }
87
+ isWorking = calendarDay ? calendarDay.workingDay : true;
88
+ } while (isWorking === false);
89
+ return nextDay.format('YYYY-MM-DD');
90
+ }
91
+ async getLastWorkingDay(date) {
92
+ let previous = (0, dayjs_1.default)(new Date(date));
93
+ let isWorking = false;
94
+ do {
95
+ previous = previous.subtract(1, 'day');
96
+ const calendarDay = await CalandarDay_model_1.default.findOne({ date: previous.format('YYYY-MM-DD') }).lean();
97
+ if (!calendarDay) {
98
+ console.error(`no data in calendar for ${previous.format('YYYY-MM-DD')}`);
99
+ }
100
+ isWorking = calendarDay ? calendarDay.workingDay : true;
101
+ } while (isWorking === false);
102
+ return previous.format('YYYY-MM-DD');
103
+ }
104
+ async getFullCalendarList() {
105
+ return CalandarDay_model_1.default.find().sort({ date: 1 }).lean();
106
+ }
107
+ }
108
+ exports.CalendarService = CalendarService;
@@ -0,0 +1,128 @@
1
+ import axios from 'axios';
2
+ import dayjs from 'dayjs';
3
+
4
+ import CalendarDay, { ICalendarDay } from '../models/CalandarDay.model';
5
+
6
+ interface IWorkingDaysApi {
7
+ working_day: number;
8
+ work_hours: number;
9
+ wages: number;
10
+ morning_start: string;
11
+ morning_end: string;
12
+ afternoon_start: string;
13
+ afternoon_end: string;
14
+ public_holiday: string;
15
+ public_holiday_description: string;
16
+ weekend_day: number;
17
+ custom_date: number;
18
+ custom_date_description: string;
19
+ custom_date_color: string;
20
+ type: number;
21
+ }
22
+
23
+ export class CalendarService {
24
+ async fulfillCalendar() {
25
+
26
+ const getDays = () => {
27
+ const days: string[] = [];
28
+ const start = dayjs('2025-01-01');
29
+ const end = dayjs('2026-01-01'); // TODO add custom date
30
+ for (let day = dayjs(start); day.isBefore(end); day = day.add(1, 'day')) {
31
+ days.push(day.format('YYYY-MM-DD'));
32
+ }
33
+ return days;
34
+ };
35
+
36
+ const options = (date: string) => ({
37
+ method: 'GET',
38
+ url: 'https://working-days.p.rapidapi.com/1.3/get_info_day',
39
+ params: {
40
+ country_code: 'US',
41
+ date,
42
+ },
43
+ headers: {
44
+ 'X-RapidAPI-Key': '07a550d083msh90e492b0eeb739cp180bb6jsn4005ea3ba2a7',
45
+ 'X-RapidAPI-Host': 'working-days.p.rapidapi.com',
46
+ },
47
+ });
48
+
49
+ try {
50
+ const dates = getDays();
51
+ const datesToCreate: string[] = [];
52
+ await Promise.all(dates.map(async (date) => {
53
+ const foundDate = await CalendarDay.findOne({ date });
54
+ if (!foundDate) {
55
+ datesToCreate.push(date);
56
+ }
57
+ }));
58
+ await Promise.all(datesToCreate.map(async (date, i) => {
59
+ setTimeout(async () => {
60
+ const response = await axios.request(options(date));
61
+ await this.createDate(date, response.data);
62
+ console.log('created', date);
63
+ if (datesToCreate.length === i + 1) {
64
+ console.log('done!');
65
+ }
66
+ }, i * 500);
67
+ }));
68
+ } catch (error) {
69
+ console.error(error);
70
+ }
71
+ }
72
+
73
+ async createDate(date: string, dateProp: IWorkingDaysApi) {
74
+ const newDate: ICalendarDay = {
75
+ date: date,
76
+ customDate: dateProp.custom_date === 1,
77
+ customDateDescription: dateProp.custom_date_description,
78
+ publicHoliday: dateProp.public_holiday === '1',
79
+ publicHolidayDescription: dateProp.public_holiday_description,
80
+ weekendDay: dateProp.weekend_day === 1,
81
+ workingDay: dateProp.working_day === 1,
82
+ };
83
+ await CalendarDay.create(newDate);
84
+ }
85
+
86
+ async isWorkingDay(date: string): Promise<boolean> {
87
+ const calendarDay = await CalendarDay.findOne({ date });
88
+ return calendarDay.workingDay;
89
+ }
90
+
91
+ async isLastWorkingDay(date: string): Promise<boolean> {
92
+ const calendarDay = await CalendarDay.findOne({ date });
93
+ const isNextDayWorking = await this.isWorkingDay(dayjs(calendarDay.date).add(1, 'day').format('YYYY-MM-DD'));
94
+ return !isNextDayWorking;
95
+ }
96
+
97
+ async getNextWorkingDay(date: string) {
98
+ let nextDay = dayjs(new Date(date));
99
+ let isWorking = false;
100
+ do {
101
+ nextDay = nextDay.add(1, 'day');
102
+ const calendarDay = await CalendarDay.findOne({ date: nextDay.format('YYYY-MM-DD') }).lean();
103
+ if (!calendarDay) {
104
+ console.error(`no data in calendar for ${nextDay.format('YYYY-MM-DD')}`);
105
+ }
106
+ isWorking = calendarDay ? calendarDay.workingDay : true;
107
+ } while (isWorking === false);
108
+ return nextDay.format('YYYY-MM-DD');
109
+ }
110
+
111
+ async getLastWorkingDay(date: string) {
112
+ let previous = dayjs(new Date(date));
113
+ let isWorking = false;
114
+ do {
115
+ previous = previous.subtract(1, 'day');
116
+ const calendarDay = await CalendarDay.findOne({ date: previous.format('YYYY-MM-DD') }).lean();
117
+ if (!calendarDay) {
118
+ console.error(`no data in calendar for ${previous.format('YYYY-MM-DD')}`);
119
+ }
120
+ isWorking = calendarDay ? calendarDay.workingDay : true;
121
+ } while (isWorking === false);
122
+ return previous.format('YYYY-MM-DD');
123
+ }
124
+
125
+ async getFullCalendarList() {
126
+ return CalendarDay.find().sort({ date: 1 }).lean();
127
+ }
128
+ }
@@ -0,0 +1,40 @@
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" />
25
+ /// <reference types="mongoose/types/inferschematype" />
26
+ import { IUploadedBankTransaction } from '../models/UploadedBankTransaction.model';
27
+ import { ICashAllocationReference, ICashAllocationReferenceStringified } from '../models/CashAllocationReference.model';
28
+ import { ICashAllocationProduct, ICashAllocationProductStringified } from '../models/CashAllocationProduct.model';
29
+ export declare class CashAllocationService {
30
+ createCashAllocation(transactions: IUploadedBankTransaction[]): Promise<void>;
31
+ getNextOrder(): Promise<number>;
32
+ getCashAllocationsByReferences(references: string[]): Promise<(import("mongoose").FlattenMaps<ICashAllocationReference> & Required<{
33
+ _id: import("mongoose").Types.ObjectId;
34
+ }>)[]>;
35
+ getAllCashAllocations(): Promise<{
36
+ references: ICashAllocationReference[];
37
+ products: ICashAllocationProduct[];
38
+ }>;
39
+ updateAllCashAllocation(products: ICashAllocationProductStringified[], references: ICashAllocationReferenceStringified[]): Promise<void>;
40
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CashAllocationService = void 0;
4
+ const main_helper_1 = require("../helpers/main.helper");
5
+ const CashAllocationReference_model_1 = require("../models/CashAllocationReference.model");
6
+ const CashAllocationProduct_model_1 = require("../models/CashAllocationProduct.model");
7
+ class CashAllocationService {
8
+ async createCashAllocation(transactions) {
9
+ const newReferencesSet = new Set(transactions.map((transaction) => transaction.reference.toLowerCase()));
10
+ const newReferences = Array.from(newReferencesSet);
11
+ const foundCashAllocation = await this.getCashAllocationsByReferences(newReferences);
12
+ const excludedReferences = foundCashAllocation.map((allocation) => allocation.reference.toLowerCase());
13
+ const createdReferences = newReferences.filter((r) => !excludedReferences.includes(r));
14
+ const createdTransactions = createdReferences.reduce((acc, cur) => {
15
+ const newTransactions = transactions.find((tr) => tr.reference.toLowerCase() === cur);
16
+ return [...acc, newTransactions];
17
+ }, []);
18
+ const order = await this.getNextOrder();
19
+ await Promise.all(createdTransactions.map(async (transactions) => {
20
+ if (excludedReferences.includes(transactions.reference.toLowerCase())) {
21
+ return;
22
+ }
23
+ if (!newReferencesSet.has(transactions.reference.toLowerCase())) {
24
+ return;
25
+ }
26
+ const cashAllocation = {
27
+ order,
28
+ reference: transactions.reference.trim(),
29
+ cashAllocationProductId: null,
30
+ };
31
+ const newCashAllocationReference = new CashAllocationReference_model_1.CashAllocationReference(cashAllocation);
32
+ await newCashAllocationReference.save();
33
+ newReferencesSet.delete(transactions.reference.toLowerCase());
34
+ }));
35
+ }
36
+ async getNextOrder() {
37
+ const lastOrder = await CashAllocationReference_model_1.CashAllocationReference.findOne().sort({ order: -1 }).select('order').lean();
38
+ return lastOrder ? lastOrder.order + 1 : 0;
39
+ }
40
+ async getCashAllocationsByReferences(references) {
41
+ return CashAllocationReference_model_1.CashAllocationReference
42
+ .find({ reference: { $in: references.map(ref => new RegExp(`^${ref}$`, 'i')) } })
43
+ .lean();
44
+ }
45
+ async getAllCashAllocations() {
46
+ const cashAllocationReferences = await CashAllocationReference_model_1.CashAllocationReference
47
+ .find()
48
+ .sort({ order: 1 });
49
+ const cashAllocationsProducts = await CashAllocationProduct_model_1.CashAllocationProduct
50
+ .find()
51
+ .sort({ order: 1 });
52
+ return {
53
+ references: cashAllocationReferences.map((i) => (0, main_helper_1.removeFields)(i, main_helper_1.fieldsToUnset)),
54
+ products: cashAllocationsProducts.map((i) => (0, main_helper_1.removeFields)(i, main_helper_1.fieldsToUnset)),
55
+ };
56
+ }
57
+ async updateAllCashAllocation(products, references) {
58
+ const existingCashAllocations = await this.getAllCashAllocations();
59
+ const existingCashAllocationProductIds = existingCashAllocations.products.map((i) => i._id.toString());
60
+ const cashAllocationProductsToDelete = existingCashAllocationProductIds.filter((id) => !products.some((i) => i._id === id));
61
+ await CashAllocationProduct_model_1.CashAllocationProduct.deleteMany({ _id: { $in: cashAllocationProductsToDelete } });
62
+ const newProductsMap = new Map();
63
+ await Promise.all(products.map(async (product, order) => {
64
+ const { _id, ...update } = product;
65
+ if (_id.includes('new_')) {
66
+ const newCashAllocationProduct = new CashAllocationProduct_model_1.CashAllocationProduct({ ...update, order });
67
+ const createdCashAllocationProduct = await newCashAllocationProduct.save();
68
+ newProductsMap.set(_id, createdCashAllocationProduct._id.toString());
69
+ }
70
+ else {
71
+ await CashAllocationProduct_model_1.CashAllocationProduct.findByIdAndUpdate(_id, { ...update, order });
72
+ }
73
+ }));
74
+ const existingCashAllocationReferenceIds = existingCashAllocations.references.map((i) => i._id.toString());
75
+ const cashAllocationReferencesToDelete = existingCashAllocationReferenceIds.filter((id) => !references.some((i) => i._id === id));
76
+ await CashAllocationReference_model_1.CashAllocationReference.deleteMany({ _id: { $in: cashAllocationReferencesToDelete } });
77
+ await Promise.all(references.map(async (reference, order) => {
78
+ if (reference.cashAllocationProductId.includes('new_')) {
79
+ reference.cashAllocationProductId = newProductsMap.get(reference.cashAllocationProductId);
80
+ }
81
+ const { _id, ...update } = reference;
82
+ if (_id.includes('new_')) {
83
+ const newCashAllocationReference = new CashAllocationReference_model_1.CashAllocationReference({ ...update, order });
84
+ await newCashAllocationReference.save();
85
+ }
86
+ else {
87
+ await CashAllocationReference_model_1.CashAllocationReference.findByIdAndUpdate(_id, { ...update, order });
88
+ }
89
+ }));
90
+ }
91
+ }
92
+ exports.CashAllocationService = CashAllocationService;
@@ -0,0 +1,105 @@
1
+ import { IUploadedBankTransaction } from '../models/UploadedBankTransaction.model';
2
+ import { fieldsToUnset, removeFields } from '../helpers/main.helper';
3
+ import {
4
+ CashAllocationReference,
5
+ ICashAllocationReference,
6
+ ICashAllocationReferenceStringified,
7
+ } from '../models/CashAllocationReference.model';
8
+ import {
9
+ CashAllocationProduct,
10
+ ICashAllocationProduct,
11
+ ICashAllocationProductStringified,
12
+ } from '../models/CashAllocationProduct.model';
13
+
14
+ export class CashAllocationService {
15
+ async createCashAllocation(transactions: IUploadedBankTransaction[]) {
16
+ const newReferencesSet = new Set(transactions.map((transaction: IUploadedBankTransaction) => transaction.reference.toLowerCase()));
17
+ const newReferences = Array.from(newReferencesSet);
18
+ const foundCashAllocation = await this.getCashAllocationsByReferences(newReferences);
19
+ const excludedReferences = foundCashAllocation.map((allocation) => allocation.reference.toLowerCase());
20
+ const createdReferences = newReferences.filter((r) => !excludedReferences.includes(r));
21
+ const createdTransactions = createdReferences.reduce((acc, cur) => {
22
+ const newTransactions = transactions.find((tr) => tr.reference.toLowerCase() === cur);
23
+ return [...acc, newTransactions];
24
+ }, <IUploadedBankTransaction[]>[]);
25
+ const order = await this.getNextOrder();
26
+ await Promise.all(createdTransactions.map(async (transactions) => {
27
+ if (excludedReferences.includes(transactions.reference.toLowerCase())) {
28
+ return;
29
+ }
30
+ if (!newReferencesSet.has(transactions.reference.toLowerCase())) {
31
+ return;
32
+ }
33
+ const cashAllocation: ICashAllocationReference = {
34
+ order,
35
+ reference: transactions.reference.trim(),
36
+ cashAllocationProductId: null,
37
+ };
38
+ const newCashAllocationReference = new CashAllocationReference(cashAllocation);
39
+ await newCashAllocationReference.save();
40
+ newReferencesSet.delete(transactions.reference.toLowerCase());
41
+ }));
42
+ }
43
+
44
+ async getNextOrder() {
45
+ const lastOrder = await CashAllocationReference.findOne().sort({ order: -1 }).select('order').lean();
46
+ return lastOrder ? lastOrder.order + 1 : 0;
47
+ }
48
+
49
+ async getCashAllocationsByReferences(references: string[]) {
50
+ return CashAllocationReference
51
+ .find({ reference: { $in: references.map(ref => new RegExp(`^${ref}$`, 'i')) } })
52
+ .lean();
53
+ }
54
+
55
+ async getAllCashAllocations() {
56
+ const cashAllocationReferences = await CashAllocationReference
57
+ .find()
58
+ .sort({ order: 1 });
59
+ const cashAllocationsProducts = await CashAllocationProduct
60
+ .find()
61
+ .sort({ order: 1 });
62
+ return {
63
+ references: cashAllocationReferences.map((i) => removeFields<ICashAllocationReference>(i, fieldsToUnset)),
64
+ products: cashAllocationsProducts.map((i) => removeFields<ICashAllocationProduct>(i, fieldsToUnset)),
65
+ };
66
+ }
67
+
68
+ async updateAllCashAllocation(products: ICashAllocationProductStringified[], references: ICashAllocationReferenceStringified[]) {
69
+ const existingCashAllocations = await this.getAllCashAllocations();
70
+
71
+ const existingCashAllocationProductIds = existingCashAllocations.products.map((i) => i._id.toString());
72
+ const cashAllocationProductsToDelete = existingCashAllocationProductIds.filter((id) => !products.some((i) => i._id === id));
73
+ await CashAllocationProduct.deleteMany({ _id: { $in: cashAllocationProductsToDelete } });
74
+
75
+ const newProductsMap = new Map();
76
+
77
+ await Promise.all(products.map(async (product, order) => {
78
+ const { _id, ...update } = product;
79
+ if (_id.includes('new_')) {
80
+ const newCashAllocationProduct = new CashAllocationProduct({ ...update, order });
81
+ const createdCashAllocationProduct = await newCashAllocationProduct.save();
82
+ newProductsMap.set(_id, createdCashAllocationProduct._id.toString());
83
+ } else {
84
+ await CashAllocationProduct.findByIdAndUpdate(_id, { ...update, order });
85
+ }
86
+ }));
87
+
88
+ const existingCashAllocationReferenceIds = existingCashAllocations.references.map((i) => i._id.toString());
89
+ const cashAllocationReferencesToDelete = existingCashAllocationReferenceIds.filter((id) => !references.some((i) => i._id === id));
90
+ await CashAllocationReference.deleteMany({ _id: { $in: cashAllocationReferencesToDelete } });
91
+
92
+ await Promise.all(references.map(async (reference, order) => {
93
+ if (reference.cashAllocationProductId.includes('new_')) {
94
+ reference.cashAllocationProductId = newProductsMap.get(reference.cashAllocationProductId);
95
+ }
96
+ const { _id, ...update } = reference;
97
+ if (_id.includes('new_')) {
98
+ const newCashAllocationReference = new CashAllocationReference({ ...update, order });
99
+ await newCashAllocationReference.save();
100
+ } else {
101
+ await CashAllocationReference.findByIdAndUpdate(_id, { ...update, order });
102
+ }
103
+ }));
104
+ }
105
+ }
@@ -0,0 +1,38 @@
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 { ICollateralAdjustment, ICollateralAdjustmentItem, ICollateralAdjustmentSummary } from '../models/CollateralAdjustment.model';
27
+ import { SignsService } from './signs.service';
28
+ export declare class CollateralAdjustmentsService {
29
+ private readonly signsService;
30
+ constructor(signsService: SignsService);
31
+ getCollateralAdjustmentSummary(bbcDateId: string): Promise<ICollateralAdjustmentSummary>;
32
+ getCollateralAdjustment(bbcDateId: string): Promise<ICollateralAdjustment>;
33
+ saveCollateralAdjustment(bbcDateId: string, collateralAdjustmentsUpdate: Partial<ICollateralAdjustment>): Promise<mongoose.FlattenMaps<ICollateralAdjustment> & {
34
+ _id: mongoose.Types.ObjectId;
35
+ }>;
36
+ getLastCopyCollateralAdjustmentItems(bbcDateId: string): Promise<ICollateralAdjustmentItem[]>;
37
+ private calculateSummary;
38
+ }
@@ -0,0 +1,82 @@
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.CollateralAdjustmentsService = void 0;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const decimal_js_1 = __importDefault(require("decimal.js"));
9
+ const collaterals_enum_1 = require("../enums/collaterals.enum");
10
+ const bbcDates_db_1 = require("../db/bbcDates.db");
11
+ const collateral_adjustments_db_1 = require("../db/collateral-adjustments.db");
12
+ class CollateralAdjustmentsService {
13
+ signsService;
14
+ constructor(signsService) {
15
+ this.signsService = signsService;
16
+ }
17
+ async getCollateralAdjustmentSummary(bbcDateId) {
18
+ const bbcDateIdID = new mongoose_1.default.Types.ObjectId(bbcDateId);
19
+ const collateralAdjustments = await (0, collateral_adjustments_db_1.getCollateralAdjustmentDocs)([bbcDateIdID]);
20
+ if (!collateralAdjustments.length) {
21
+ return {};
22
+ }
23
+ return collateralAdjustments[0].summary;
24
+ }
25
+ async getCollateralAdjustment(bbcDateId) {
26
+ const bbcDateIdID = new mongoose_1.default.Types.ObjectId(bbcDateId);
27
+ const cCollateralAdjustments = await (0, collateral_adjustments_db_1.getCollateralAdjustmentDocs)([bbcDateIdID]);
28
+ if (!!cCollateralAdjustments.length) {
29
+ return cCollateralAdjustments.pop();
30
+ }
31
+ const lastItems = await this.getLastCopyCollateralAdjustmentItems(bbcDateId);
32
+ const isBBCLockedResult = await this.signsService.isBBCLocked(bbcDateId);
33
+ if (isBBCLockedResult) {
34
+ const summary = this.calculateSummary(lastItems);
35
+ return await (0, collateral_adjustments_db_1.copyCollateralAdjustmentWithoutSaving)(bbcDateIdID, lastItems, summary);
36
+ }
37
+ return this.saveCollateralAdjustment(bbcDateId, { items: lastItems, notes: '' });
38
+ }
39
+ async saveCollateralAdjustment(bbcDateId, collateralAdjustmentsUpdate) {
40
+ const isBBCLockedResult = await this.signsService.isBBCLocked(bbcDateId);
41
+ if (isBBCLockedResult) {
42
+ return null;
43
+ }
44
+ const summary = this.calculateSummary(collateralAdjustmentsUpdate.items);
45
+ return await (0, collateral_adjustments_db_1.saveCollateralAdjustmentDoc)(new mongoose_1.default.Types.ObjectId(bbcDateId), {
46
+ ...collateralAdjustmentsUpdate,
47
+ summary,
48
+ });
49
+ }
50
+ ;
51
+ async getLastCopyCollateralAdjustmentItems(bbcDateId) {
52
+ const { borrowerId } = await (0, bbcDates_db_1.getBBCDateDoc)(bbcDateId.toString());
53
+ const collateralAdjustmentDocs = await (0, collateral_adjustments_db_1.getLastCollateralAdjustmentDocs)(bbcDateId, borrowerId.toString());
54
+ if (!!collateralAdjustmentDocs.length) {
55
+ return collateralAdjustmentDocs.pop().items;
56
+ }
57
+ return [];
58
+ }
59
+ calculateSummary(collateralAdjustmentItems) {
60
+ const summary = [];
61
+ const summaryOrder = [
62
+ collaterals_enum_1.ECollaterals.INVENTORY,
63
+ collaterals_enum_1.ECollaterals.RECEIVABLE,
64
+ collaterals_enum_1.ECollaterals.OTHER,
65
+ ];
66
+ const result = Object.keys(collaterals_enum_1.ECollaterals).map((equipmentType) => {
67
+ const typeSummary = { rowDef: equipmentType, amount: 0 };
68
+ collateralAdjustmentItems.map((item) => {
69
+ if (item.type === equipmentType) {
70
+ typeSummary.amount = new decimal_js_1.default(typeSummary.amount).add(item.amount).toNumber();
71
+ }
72
+ return typeSummary;
73
+ });
74
+ return typeSummary;
75
+ });
76
+ summaryOrder.forEach((summaryType) => {
77
+ summary.push(...result.filter((r) => r.rowDef === summaryType));
78
+ });
79
+ return summary.reduce((acc, s) => ({ ...acc, [s.rowDef]: s }), {});
80
+ }
81
+ }
82
+ exports.CollateralAdjustmentsService = CollateralAdjustmentsService;