From e47f4dde8b33701d3c3a092abc9b4e54c747d913 Mon Sep 17 00:00:00 2001 From: nazeer1100126 Date: Tue, 14 Mar 2017 18:28:08 +0530 Subject: [PATCH] FINERACT-345 : Should not allow to add guarantor, If savings account transaction date is greter that loan application submitted date --- .../service/GuarantorDomainServiceImpl.java | 21 ++++++++++++++++--- .../savings/domain/SavingsAccount.java | 5 +++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java index ff4596699..50a72dfe5 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java @@ -19,7 +19,6 @@ package org.apache.fineract.portfolio.loanaccount.guarantor.service; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -57,6 +56,8 @@ import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransaction; import org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransactionRepository; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; +import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler; +import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; import org.apache.fineract.portfolio.savings.exception.InsufficientAccountBalanceException; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormatter; @@ -73,6 +74,7 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { private final BusinessEventNotifierService businessEventNotifierService; private final DepositAccountOnHoldTransactionRepository depositAccountOnHoldTransactionRepository; private final Map releaseLoanIds = new HashMap<>(2); + private final SavingsAccountAssembler savingsAccountAssembler; @Autowired @@ -81,13 +83,15 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { final GuarantorFundingTransactionRepository guarantorFundingTransactionRepository, final AccountTransfersWritePlatformService accountTransfersWritePlatformService, final BusinessEventNotifierService businessEventNotifierService, - final DepositAccountOnHoldTransactionRepository depositAccountOnHoldTransactionRepository) { + final DepositAccountOnHoldTransactionRepository depositAccountOnHoldTransactionRepository, + final SavingsAccountAssembler savingsAccountAssembler) { this.guarantorRepository = guarantorRepository; this.guarantorFundingRepository = guarantorFundingRepository; this.guarantorFundingTransactionRepository = guarantorFundingTransactionRepository; this.accountTransfersWritePlatformService = accountTransfersWritePlatformService; this.businessEventNotifierService = businessEventNotifierService; this.depositAccountOnHoldTransactionRepository = depositAccountOnHoldTransactionRepository; + this.savingsAccountAssembler = savingsAccountAssembler; } @PostConstruct @@ -327,7 +331,17 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { final List fundingDetails = guarantor.getGuarantorFundDetails(); for (GuarantorFundingDetails guarantorFundingDetails : fundingDetails) { if (guarantorFundingDetails.getStatus().isActive()) { - SavingsAccount savingsAccount = guarantorFundingDetails.getLinkedSavingsAccount(); + final SavingsAccount savingsAccount = guarantorFundingDetails.getLinkedSavingsAccount(); + if (loan.isApproved() && !loan.isDisbursed()) { + final List transactions = new ArrayList<>(); + for (final SavingsAccountTransaction transaction : savingsAccount.getTransactions()) { + if (!transaction.getTransactionLocalDate().isAfter(loan.getApprovedOnDate())) { + transactions.add(transaction); + } + } + this.savingsAccountAssembler.setHelpers(savingsAccount); + savingsAccount.updateSavingsAccountSummary(transactions); + } savingsAccount.holdFunds(guarantorFundingDetails.getAmount()); totalGuarantee = totalGuarantee.add(guarantorFundingDetails.getAmount()); DepositAccountOnHoldTransaction onHoldTransaction = DepositAccountOnHoldTransaction.hold(savingsAccount, @@ -340,6 +354,7 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { if (savingsAccount.getWithdrawableBalance().compareTo(BigDecimal.ZERO) == -1) { insufficientBalanceIds.add(savingsAccount.getId()); } + savingsAccount.updateSavingsAccountSummary(savingsAccount.getTransactions()); } } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java index d851aa52f..9825d814f 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java @@ -2817,4 +2817,9 @@ public class SavingsAccount extends AbstractPersistableCustom { charges.size(); savingsOfficerHistory.size(); } + + public void updateSavingsAccountSummary(final List transactions) { + this.summary.updateSummary(this.currency, this.savingsAccountTransactionSummaryWrapper, transactions); + } + } \ No newline at end of file