You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by na...@apache.org on 2016/06/22 11:37:22 UTC
[1/2] incubator-fineract git commit: compounding issues fixed
Repository: incubator-fineract
Updated Branches:
refs/heads/develop b7ba92417 -> e338658a4
compounding issues fixed
Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/4945040f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/4945040f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/4945040f
Branch: refs/heads/develop
Commit: 4945040fffd9e7d176ac1abef865fa382675d4b0
Parents: a89a43a
Author: venkatconflux <ve...@confluxtechnologies.com>
Authored: Mon Jun 20 14:45:39 2016 +0530
Committer: venkatconflux <ve...@confluxtechnologies.com>
Committed: Mon Jun 20 14:45:39 2016 +0530
----------------------------------------------------------------------
.../domain/AbstractLoanScheduleGenerator.java | 40 ++++++++++++++------
...anWritePlatformServiceJpaRepositoryImpl.java | 2 +-
2 files changed, 30 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/4945040f/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
index 080689e..3581558 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
@@ -549,6 +549,12 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
.getPrincipal().minus(scheduleParams.getTotalCumulativePrincipal()));
}
+ scheduleParams.getCompoundingDateVariations().put(periodStartDateApplicableForInterest,
+ new TreeMap<>(scheduleParams.getCompoundingMap()));
+ scheduleParams.getCompoundingMap().clear();
+ populateCompoundingDatesInPeriod(periodStartDateApplicableForInterest, calculateTill, loanApplicationTerms, holidayDetailDTO,
+ scheduleParams, loanCharges, totalInterestChargedForFullLoanTerm.getCurrency());
+
// this is to make sure we are recalculating using correct interest rate
// once calculation is done system will set the actual interest rate
BigDecimal currentInterestRate = loanApplicationTerms.getAnnualNominalInterestRate();
@@ -577,7 +583,9 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
Money penaltyDiff = currentPeriodParams.getPenaltyChargesForInstallment().minus(tempPeriod.getPenaltyChargesForInstallment());
Money diff = interestDiff.plus(chargeDiff).plus(penaltyDiff);
- if (!scheduleParams.getOutstandingBalance().minus(diff).isGreaterThanZero()) {
+ if (scheduleParams.getOutstandingBalance().minus(diff).isGreaterThanZero()) {
+ updateCompoundingDetails(scheduleParams, periodStartDateApplicableForInterest);
+ } else {
scheduleParams.reduceOutstandingBalance(diff);
currentPeriodParams.minusInterestForThisPeriod(interestDiff);
currentPeriodParams.minusFeeChargesForInstallment(chargeDiff);
@@ -593,7 +601,6 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
currentPeriodParams.fetchTotalAmountForPeriod(), false);
scheduleParams.setTotalOutstandingInterestPaymentDueToGrace(interestTillDate.interestPaymentDueToGrace());
}
-
}
return modifiedInstallment;
}
@@ -637,8 +644,9 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
private void updateCompoundingDetails(LoanScheduleParams scheduleParams, LocalDate periodStartDateApplicableForInterest) {
if (scheduleParams.getCompoundingDateVariations().containsKey(periodStartDateApplicableForInterest)) {
scheduleParams.getCompoundingMap().clear();
- scheduleParams.getCompoundingMap().putAll(
- scheduleParams.getCompoundingDateVariations().get(periodStartDateApplicableForInterest));
+ scheduleParams.getCompoundingMap()
+ .putAll(scheduleParams.getCompoundingDateVariations().get(periodStartDateApplicableForInterest));
+ scheduleParams.getCompoundingDateVariations().remove(periodStartDateApplicableForInterest);
}
}
@@ -821,7 +829,9 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
if (!scheduleParams.getOutstandingBalance().isGreaterThan(unprocessed)
&& !loanApplicationTerms.getPreClosureInterestCalculationStrategy()
.calculateTillRestFrequencyEnabled()) {
-
+
+ scheduleParams.getCompoundingDateVariations().put(periodStartDateApplicableForInterest,
+ new TreeMap<>(scheduleParams.getCompoundingMap()));
LocalDate calculateTill = transactionDate;
PrincipalInterest principalInterestForThisPeriod = calculatePrincipalInterestComponentsForPeriod(
this.paymentPeriodsInOneYearCalculator,
@@ -1177,7 +1187,8 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
int periodNumberTemp = 1;
LocalDate lastRestDate = getNextRestScheduleDate(currentDate.minusDays(1), loanApplicationTerms, holidayDetailDTO);
Collection<LoanTermVariationsData> applicableVariations = loanApplicationTerms.getLoanTermVariations().getInterestRateChanges();
-
+ Money uncompoundedFromLastInstallment = params.getUnCompoundedAmount();
+ LocalDate additionalPeriodsStartDate = params.getPeriodStartDate();
do {
params.setActualRepaymentDate(this.scheduledDateGenerator.generateNextRepaymentDate(params.getActualRepaymentDate(),
@@ -1220,9 +1231,10 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
updateCompoundingMap(loanApplicationTerms, holidayDetailDTO, params, lastRestDate, transactionDate);
populateCompoundingDatesInPeriod(installment.periodDueDate(), params.getActualRepaymentDate(), loanApplicationTerms,
holidayDetailDTO, params, loanCharges, currency);
- params.setCompoundedInLastInstallment(params.getUnCompoundedAmount());
+ uncompoundedFromLastInstallment = params.getUnCompoundedAmount();
params.setPeriodStartDate(transactionDate);
startDate = transactionDate;
+ additionalPeriodsStartDate = startDate;
}
loanRepaymentScheduleTransactionProcessor.handleRepaymentSchedule(currentTransactions, currency, params.getInstallments());
updateLatePaidAmountsToPrincipalMap(detail.getTransaction(), loanApplicationTerms, currency, holidayDetailDTO,
@@ -1256,6 +1268,10 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
compounded = compounded.plus(mapEntry.getValue());
}
}
+ if (compounded.isGreaterThanZero() && startDate.isEqual(additionalPeriodsStartDate)) {
+ params.setCompoundedInLastInstallment(uncompoundedFromLastInstallment);// uncompounded in last installment
+ additionalPeriodsStartDate = additionalPeriodsStartDate.plusDays(1);
+ }
Money compoundedForThisPeriod = compounded.minus(uncompounded);
Money uncompoundedForThisPeriod = interest.minus(compoundedForThisPeriod);
params.setUnCompoundedAmount(uncompoundedForThisPeriod);
@@ -1506,7 +1522,11 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
final LocalDate restDate = getNextRestScheduleDate(scheduledDueDate.minusDays(1), loanApplicationTerms,
holidayDetailDTO);
if (!compoundingEffectiveDate.isAfter(loanRepaymentScheduleInstallment.getDueDate())) {
- totalCompoundedAmount = totalCompoundedAmount.minus(params.getUnCompoundedAmount());
+ Money amountCompoundedFromLastPeriod = params.getCompoundedInLastInstallment();
+ if (amountCompoundedFromLastPeriod.isZero()) {
+ amountCompoundedFromLastPeriod = params.getUnCompoundedAmount();
+ }
+ totalCompoundedAmount = totalCompoundedAmount.minus(amountCompoundedFromLastPeriod);
periodHasCompoundingDate = true;
}
while (!compoundingEffectiveDate.isAfter(loanRepaymentScheduleInstallment.getDueDate())) {
@@ -1544,13 +1564,11 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
for (Map.Entry<LocalDate, Money> mapEntry : params.getCompoundingMap().entrySet()) {
if (!mapEntry.getKey().isAfter(loanRepaymentScheduleInstallment.getDueDate())) {
updateMapWithAmount(params.getPrincipalPortionMap(), mapEntry.getValue().negated(), mapEntry.getKey());
- }else if(params.getUnCompoundedAmount().isEqualTo( mapEntry.getValue())){
- totalCompoundedAmount = totalCompoundedAmount.plus(params.getUnCompoundedAmount());
}
}
params.minusUnCompoundedAmount(params.getUnCompoundedAmount());
params.getCompoundingMap().clear();
- params.addUnCompoundedAmount(amountCharged.minus(totalCompoundedAmount.minus(params.getCompoundedInLastInstallment())));
+ params.addUnCompoundedAmount(amountCharged.minus(totalCompoundedAmount));
} else {
params.getCompoundingMap().clear();
params.getCompoundingDateVariations().put(loanRepaymentScheduleInstallment.getFromDate(),
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/4945040f/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
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 6e35e51..c56e230 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
@@ -1433,7 +1433,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
this.loanTransactionRepository.save(applyLoanChargeTransaction);
}
boolean isAppliedOnBackDate = false;
- if (loanCharge.getDueLocalDate() == null || LocalDate.now().isAfter(loanCharge.getDueLocalDate())) {
+ if (loanCharge.getDueLocalDate() == null || DateUtils.getLocalDateOfTenant().isAfter(loanCharge.getDueLocalDate())) {
isAppliedOnBackDate = true;
}
return isAppliedOnBackDate;
[2/2] incubator-fineract git commit: Merge branch 'compoundingissue'
into develop
Posted by na...@apache.org.
Merge branch 'compoundingissue' into develop
Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/e338658a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/e338658a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/e338658a
Branch: refs/heads/develop
Commit: e338658a48d3dec1caba0d4cce4efd0f67a89e62
Parents: b7ba924 4945040
Author: Nazeer Hussain Shaik <na...@confluxtechnologies.com>
Authored: Wed Jun 22 11:30:37 2016 +0530
Committer: Nazeer Hussain Shaik <na...@confluxtechnologies.com>
Committed: Wed Jun 22 11:30:37 2016 +0530
----------------------------------------------------------------------
.../domain/AbstractLoanScheduleGenerator.java | 40 ++++++++++++++------
...anWritePlatformServiceJpaRepositoryImpl.java | 2 +-
2 files changed, 30 insertions(+), 12 deletions(-)
----------------------------------------------------------------------