gemcap-be-common 1.3.99 → 1.3.101

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gemcap-be-common",
3
- "version": "1.3.99",
3
+ "version": "1.3.101",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -313,11 +313,11 @@ class LoanTransactionsService {
313
313
  updatedTransaction = await LoanTransaction_model_1.LoanTransaction.findByIdAndUpdate(transaction._id, transaction, { new: true });
314
314
  }
315
315
  if (startId) {
316
- await this.recalculateBalance(startId);
316
+ this.recalculateBalance(startId).catch(console.error);
317
317
  }
318
318
  const statementDate = this.loanStatementStatusService.getStatementDateForDate(new Date(transaction.date));
319
- await this.loanStatementStatusService.updateStatementStatus(transaction.productId.toString(), statementDate, false);
320
- await this.termLoanService.setTermLoanExpected(transaction.productId.toString());
319
+ this.loanStatementStatusService.updateStatementStatus(transaction.productId.toString(), statementDate, false).catch(console.error);
320
+ this.termLoanService.setTermLoanExpected(transaction.productId.toString()).catch(console.error);
321
321
  return updatedTransaction;
322
322
  }
323
323
  async recalculateProduct(productId) {
@@ -485,74 +485,64 @@ class LoanTransactionsService {
485
485
  console.error(`Transaction not found: ${transactionId}`);
486
486
  return;
487
487
  }
488
- const session = await mongoose_1.default.startSession();
489
- try {
490
- await session.withTransaction(async () => {
491
- // Получаем все транзакции, начиная с самой ранней, которую нужно пересчитать
492
- const earliestTransaction = await LoanTransaction_model_1.LoanTransaction.aggregate([
493
- {
494
- $match: {
495
- productId: startTransaction.productId,
496
- date: { $lte: new Date(startTransaction.date) }
497
- }
498
- },
499
- { $sort: { date: 1, order: 1, createdAt: 1 } },
500
- { $limit: 1 }
501
- ]);
502
- const fromDate = earliestTransaction.length
503
- ? earliestTransaction[0].date
504
- : startTransaction.date;
505
- const allTransactions = await LoanTransaction_model_1.LoanTransaction.aggregate([
506
- {
507
- $match: {
508
- productId: startTransaction.productId,
509
- date: { $gte: fromDate }
510
- }
511
- },
512
- { $sort: { date: 1, order: 1, createdAt: 1 } }
513
- ]);
514
- let balance = 0;
515
- let floatedBalance = 0;
516
- // Найдём стартовые значения
517
- const prevBeforeStart = await LoanTransaction_model_1.LoanTransaction.aggregate([
518
- {
519
- $match: {
520
- productId: startTransaction.productId,
521
- date: { $lt: fromDate }
522
- }
523
- },
524
- { $sort: { date: -1, order: -1, createdAt: -1 } },
525
- { $limit: 1 }
526
- ]);
527
- if (prevBeforeStart.length) {
528
- balance = prevBeforeStart[0].balance || 0;
529
- floatedBalance = prevBeforeStart[0].floatedBalance || 0;
530
- }
531
- // Один проход для расчёта balance и floatedBalance
532
- for (const tr of allTransactions) {
533
- // Пересчёт обычного баланса
534
- balance = new decimal_js_1.default(balance).add(tr.amount).toNumber();
535
- // Пересчёт floatedBalance
536
- const totalPostponed = await (0, loan_products_db_1.getPostponedTransactions)(tr.date, tr.productId.toString(), true);
537
- switch (tr.transactionType) {
538
- case LoanTransaction_model_1.ELoanTransactionTypes.COLLECTION:
539
- await this.cleanRecalculated(tr._id.toString());
540
- await this.createPostponedTransaction(tr);
541
- floatedBalance = new decimal_js_1.default(floatedBalance).add(totalPostponed).toNumber();
542
- break;
543
- case LoanTransaction_model_1.ELoanTransactionTypes.DISBURSEMENT:
544
- case LoanTransaction_model_1.ELoanTransactionTypes.ADJUSTMENT:
545
- floatedBalance = new decimal_js_1.default(floatedBalance).add(tr.amount).add(totalPostponed).toNumber();
546
- break;
547
- }
548
- await LoanTransaction_model_1.LoanTransaction.updateOne({ _id: tr._id }, { balance, floatedBalance }, { session });
549
- }
550
- await LoanProducts_model_1.LoanProduct.updateOne({ _id: startTransaction.productId }, { isBalanceActual: true, isFloatedBalanceActual: true }, { session });
551
- });
488
+ // Получаем все транзакции, начиная с самой ранней, которую нужно пересчитать
489
+ const earliestTransaction = await LoanTransaction_model_1.LoanTransaction.aggregate([
490
+ {
491
+ $match: {
492
+ productId: startTransaction.productId,
493
+ date: { $lte: new Date(startTransaction.date) },
494
+ },
495
+ },
496
+ { $sort: { date: 1, order: 1, createdAt: 1 } },
497
+ { $limit: 1 },
498
+ ]);
499
+ const fromDate = earliestTransaction.length
500
+ ? earliestTransaction[0].date
501
+ : startTransaction.date;
502
+ const allTransactions = await LoanTransaction_model_1.LoanTransaction.aggregate([
503
+ {
504
+ $match: {
505
+ productId: startTransaction.productId,
506
+ date: { $gte: fromDate },
507
+ },
508
+ },
509
+ { $sort: { date: 1, order: 1, createdAt: 1 } },
510
+ ]);
511
+ let balance = 0;
512
+ let floatedBalance = 0;
513
+ const prevBeforeStart = await LoanTransaction_model_1.LoanTransaction.aggregate([
514
+ {
515
+ $match: {
516
+ productId: startTransaction.productId,
517
+ date: { $lt: fromDate },
518
+ },
519
+ },
520
+ { $sort: { date: -1, order: -1, createdAt: -1 } },
521
+ { $limit: 1 },
522
+ ]);
523
+ if (prevBeforeStart.length) {
524
+ balance = prevBeforeStart[0].balance || 0;
525
+ floatedBalance = prevBeforeStart[0].floatedBalance || 0;
552
526
  }
553
- finally {
554
- await session.endSession();
527
+ for (const tr of allTransactions) {
528
+ // regular balance recalculation
529
+ balance = new decimal_js_1.default(balance).add(tr.amount).toNumber();
530
+ // floatedBalance recalculation
531
+ const totalPostponed = await (0, loan_products_db_1.getPostponedTransactions)(tr.date, tr.productId.toString(), true);
532
+ switch (tr.transactionType) {
533
+ case LoanTransaction_model_1.ELoanTransactionTypes.COLLECTION:
534
+ await this.cleanRecalculated(tr._id.toString());
535
+ await this.createPostponedTransaction(tr);
536
+ floatedBalance = new decimal_js_1.default(floatedBalance).add(totalPostponed).toNumber();
537
+ break;
538
+ case LoanTransaction_model_1.ELoanTransactionTypes.DISBURSEMENT:
539
+ case LoanTransaction_model_1.ELoanTransactionTypes.ADJUSTMENT:
540
+ floatedBalance = new decimal_js_1.default(floatedBalance).add(tr.amount).add(totalPostponed).toNumber();
541
+ break;
542
+ }
543
+ await LoanTransaction_model_1.LoanTransaction.updateOne({ _id: tr._id }, { balance, floatedBalance });
555
544
  }
545
+ await LoanProducts_model_1.LoanProduct.updateOne({ _id: startTransaction.productId }, { isBalanceActual: true, isFloatedBalanceActual: true });
556
546
  }
557
547
  async deleteLoanTransaction(transactionId, updateLoanPayment, userId = null) {
558
548
  const currentTransaction = await LoanTransaction_model_1.LoanTransaction.findById(transactionId).lean();
@@ -587,11 +577,11 @@ class LoanTransactionsService {
587
577
  }
588
578
  }
589
579
  if (nextTransaction.length) {
590
- await this.recalculateBalance(nextTransaction[0]._id.toString());
580
+ this.recalculateBalance(nextTransaction[0]._id.toString()).catch(console.error);
591
581
  }
592
582
  const statementDate = this.loanStatementStatusService.getStatementDateForDate(new Date(currentTransaction.date));
593
- await this.loanStatementStatusService.updateStatementStatus(currentTransaction.productId.toString(), statementDate, false);
594
- await this.termLoanService.setTermLoanExpected(currentTransaction.productId.toString());
583
+ this.loanStatementStatusService.updateStatementStatus(currentTransaction.productId.toString(), statementDate, false).catch(console.error);
584
+ this.termLoanService.setTermLoanExpected(currentTransaction.productId.toString()).catch(console.error);
595
585
  }
596
586
  async createPostponedTransaction(transaction) {
597
587
  const currentDay = (0, dayjs_1.default)(new Date(transaction.date)).format('YYYY-MM-DD');
@@ -371,11 +371,11 @@ export class LoanTransactionsService {
371
371
  updatedTransaction = await LoanTransaction.findByIdAndUpdate(transaction._id, transaction, { new: true });
372
372
  }
373
373
  if (startId) {
374
- await this.recalculateBalance(startId);
374
+ this.recalculateBalance(startId).catch(console.error);
375
375
  }
376
376
  const statementDate = this.loanStatementStatusService.getStatementDateForDate(new Date(transaction.date));
377
- await this.loanStatementStatusService.updateStatementStatus(transaction.productId.toString(), statementDate, false);
378
- await this.termLoanService.setTermLoanExpected(transaction.productId.toString());
377
+ this.loanStatementStatusService.updateStatementStatus(transaction.productId.toString(), statementDate, false).catch(console.error);
378
+ this.termLoanService.setTermLoanExpected(transaction.productId.toString()).catch(console.error);
379
379
  return updatedTransaction;
380
380
  }
381
381
 
@@ -551,90 +551,79 @@ export class LoanTransactionsService {
551
551
  return;
552
552
  }
553
553
 
554
- const session = await mongoose.startSession();
555
- try {
556
- await session.withTransaction(async () => {
557
- // Получаем все транзакции, начиная с самой ранней, которую нужно пересчитать
558
- const earliestTransaction = await LoanTransaction.aggregate<ILoanTransactionDoc>([
559
- {
560
- $match: {
561
- productId: startTransaction.productId,
562
- date: { $lte: new Date(startTransaction.date) }
563
- }
564
- },
565
- { $sort: { date: 1, order: 1, createdAt: 1 } },
566
- { $limit: 1 }
567
- ]);
568
-
569
- const fromDate = earliestTransaction.length
570
- ? earliestTransaction[0].date
571
- : startTransaction.date;
554
+ // Получаем все транзакции, начиная с самой ранней, которую нужно пересчитать
555
+ const earliestTransaction = await LoanTransaction.aggregate<ILoanTransactionDoc>([
556
+ {
557
+ $match: {
558
+ productId: startTransaction.productId,
559
+ date: { $lte: new Date(startTransaction.date) },
560
+ },
561
+ },
562
+ { $sort: { date: 1, order: 1, createdAt: 1 } },
563
+ { $limit: 1 },
564
+ ]);
572
565
 
573
- const allTransactions = await LoanTransaction.aggregate<ILoanTransactionDoc>([
574
- {
575
- $match: {
576
- productId: startTransaction.productId,
577
- date: { $gte: fromDate }
578
- }
579
- },
580
- { $sort: { date: 1, order: 1, createdAt: 1 } }
581
- ]);
566
+ const fromDate = earliestTransaction.length
567
+ ? earliestTransaction[0].date
568
+ : startTransaction.date;
582
569
 
583
- let balance = 0;
584
- let floatedBalance = 0;
570
+ const allTransactions = await LoanTransaction.aggregate<ILoanTransactionDoc>([
571
+ {
572
+ $match: {
573
+ productId: startTransaction.productId,
574
+ date: { $gte: fromDate },
575
+ },
576
+ },
577
+ { $sort: { date: 1, order: 1, createdAt: 1 } },
578
+ ]);
585
579
 
586
- // Найдём стартовые значения
587
- const prevBeforeStart = await LoanTransaction.aggregate<ILoanTransactionDoc>([
588
- {
589
- $match: {
590
- productId: startTransaction.productId,
591
- date: { $lt: fromDate }
592
- }
593
- },
594
- { $sort: { date: -1, order: -1, createdAt: -1 } },
595
- { $limit: 1 }
596
- ]);
580
+ let balance = 0;
581
+ let floatedBalance = 0;
597
582
 
598
- if (prevBeforeStart.length) {
599
- balance = prevBeforeStart[0].balance || 0;
600
- floatedBalance = prevBeforeStart[0].floatedBalance || 0;
601
- }
583
+ const prevBeforeStart = await LoanTransaction.aggregate<ILoanTransactionDoc>([
584
+ {
585
+ $match: {
586
+ productId: startTransaction.productId,
587
+ date: { $lt: fromDate },
588
+ },
589
+ },
590
+ { $sort: { date: -1, order: -1, createdAt: -1 } },
591
+ { $limit: 1 },
592
+ ]);
602
593
 
603
- // Один проход для расчёта balance и floatedBalance
604
- for (const tr of allTransactions) {
605
- // Пересчёт обычного баланса
606
- balance = new Decimal(balance).add(tr.amount).toNumber();
607
-
608
- // Пересчёт floatedBalance
609
- const totalPostponed = await getPostponedTransactions(tr.date, tr.productId.toString(), true);
610
- switch (tr.transactionType) {
611
- case ELoanTransactionTypes.COLLECTION:
612
- await this.cleanRecalculated(tr._id.toString());
613
- await this.createPostponedTransaction(tr);
614
- floatedBalance = new Decimal(floatedBalance).add(totalPostponed).toNumber();
615
- break;
616
- case ELoanTransactionTypes.DISBURSEMENT:
617
- case ELoanTransactionTypes.ADJUSTMENT:
618
- floatedBalance = new Decimal(floatedBalance).add(tr.amount).add(totalPostponed).toNumber();
619
- break;
620
- }
594
+ if (prevBeforeStart.length) {
595
+ balance = prevBeforeStart[0].balance || 0;
596
+ floatedBalance = prevBeforeStart[0].floatedBalance || 0;
597
+ }
621
598
 
622
- await LoanTransaction.updateOne(
623
- { _id: tr._id },
624
- { balance, floatedBalance },
625
- { session }
626
- );
627
- }
599
+ for (const tr of allTransactions) {
600
+ // regular balance recalculation
601
+ balance = new Decimal(balance).add(tr.amount).toNumber();
602
+
603
+ // floatedBalance recalculation
604
+ const totalPostponed = await getPostponedTransactions(tr.date, tr.productId.toString(), true);
605
+ switch (tr.transactionType) {
606
+ case ELoanTransactionTypes.COLLECTION:
607
+ await this.cleanRecalculated(tr._id.toString());
608
+ await this.createPostponedTransaction(tr);
609
+ floatedBalance = new Decimal(floatedBalance).add(totalPostponed).toNumber();
610
+ break;
611
+ case ELoanTransactionTypes.DISBURSEMENT:
612
+ case ELoanTransactionTypes.ADJUSTMENT:
613
+ floatedBalance = new Decimal(floatedBalance).add(tr.amount).add(totalPostponed).toNumber();
614
+ break;
615
+ }
628
616
 
629
- await LoanProduct.updateOne(
630
- { _id: startTransaction.productId },
631
- { isBalanceActual: true, isFloatedBalanceActual: true },
632
- { session }
633
- );
634
- });
635
- } finally {
636
- await session.endSession();
617
+ await LoanTransaction.updateOne(
618
+ { _id: tr._id },
619
+ { balance, floatedBalance },
620
+ );
637
621
  }
622
+
623
+ await LoanProduct.updateOne(
624
+ { _id: startTransaction.productId },
625
+ { isBalanceActual: true, isFloatedBalanceActual: true },
626
+ );
638
627
  }
639
628
 
640
629
  async deleteLoanTransaction(transactionId: string, updateLoanPayment: boolean, userId = null) {
@@ -670,11 +659,11 @@ export class LoanTransactionsService {
670
659
  }
671
660
  }
672
661
  if (nextTransaction.length) {
673
- await this.recalculateBalance(nextTransaction[0]._id.toString());
662
+ this.recalculateBalance(nextTransaction[0]._id.toString()).catch(console.error);
674
663
  }
675
664
  const statementDate = this.loanStatementStatusService.getStatementDateForDate(new Date(currentTransaction.date));
676
- await this.loanStatementStatusService.updateStatementStatus(currentTransaction.productId.toString(), statementDate, false);
677
- await this.termLoanService.setTermLoanExpected(currentTransaction.productId.toString());
665
+ this.loanStatementStatusService.updateStatementStatus(currentTransaction.productId.toString(), statementDate, false).catch(console.error);
666
+ this.termLoanService.setTermLoanExpected(currentTransaction.productId.toString()).catch(console.error);
678
667
  }
679
668
 
680
669
  async createPostponedTransaction(transaction: ILoanTransactionDoc) {