From 67be38e71ab26836f341b62cd80277b2abbedfad Mon Sep 17 00:00:00 2001 From: sachinkulkarni12 Date: Thu, 21 Apr 2016 16:47:00 +0530 Subject: [PATCH] 136 : accrual exception while doing repayment --- .../fineract/portfolio/loanaccount/domain/Loan.java | 12 +++++++++++- .../domain/LoanAccountDomainServiceJpa.java | 3 +++ .../LoanWritePlatformServiceJpaRepositoryImpl.java | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index 1bf5ec1a8..fd9ca044c 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java @@ -30,6 +30,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; +import java.util.ListIterator; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -2005,7 +2006,16 @@ public class Loan extends AbstractPersistable { private LocalDate determineExpectedMaturityDate() { final int numberOfInstallments = this.repaymentScheduleInstallments.size(); - return this.repaymentScheduleInstallments.get(numberOfInstallments - 1).getDueDate(); + LocalDate maturityDate = this.repaymentScheduleInstallments.get(numberOfInstallments - 1).getDueDate(); + ListIterator iterator = this.repaymentScheduleInstallments.listIterator(numberOfInstallments); + while(iterator.hasPrevious()){ + LoanRepaymentScheduleInstallment loanRepaymentScheduleInstallment = iterator.previous(); + if(!loanRepaymentScheduleInstallment.isRecalculatedInterestComponent()){ + maturityDate = loanRepaymentScheduleInstallment.getDueDate(); + break; + } + } + return maturityDate; } public Map loanApplicationRejection(final AppUser currentUser, final JsonCommand command, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java index 437e7e6a0..ba0788f96 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java @@ -461,6 +461,9 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { Set loanCharges = loan.charges(); for (LoanRepaymentScheduleInstallment installment : installments) { + if (installment.getDueDate().isAfter(loan.getMaturityDate())) { + accruedTill = DateUtils.getLocalDateOfTenant(); + } if(!isOrganisationDateEnabled || new LocalDate(organisationStartDate).isBefore(installment.getDueDate())){ generateLoanScheduleAccrualData(accruedTill, loanScheduleAccrualDatas, loanId, officeId, accrualStartDate, repaymentFrequency, repayEvery, interestCalculatedFrom, loanProductId, currency, currencyData, loanCharges, installment); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index 639836a1b..61303388f 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -312,6 +312,9 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf checkForProductMixRestrictions(loan); LocalDate recalculateFrom = null; + if (loan.repaymentScheduleDetail().isInterestRecalculationEnabled()) { + recalculateFrom = actualDisbursementDate; + } ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); // validate actual disbursement date against meeting date