You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ra...@apache.org on 2016/11/14 14:06:04 UTC
[02/14] incubator-fineract git commit: #164_compounding interest is
greater than posting inerest
#164_compounding interest is greater than posting inerest
Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/91953155
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/91953155
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/91953155
Branch: refs/heads/develop
Commit: 9195315512b5c654b134427d573c08a83ad19c3a
Parents: 580840c
Author: jyothsnag <jy...@confluxtechnologies.com>
Authored: Thu Nov 10 21:51:49 2016 +0530
Committer: jyothsnag <jy...@confluxtechnologies.com>
Committed: Thu Nov 10 21:51:49 2016 +0530
----------------------------------------------------------------------
.../savings/domain/SavingsAccount.java | 3 +-
.../interest/AnnualCompoundingPeriod.java | 5 +++
.../interest/BiAnnualCompoundingPeriod.java | 5 +++
.../domain/interest/CompoundInterestHelper.java | 13 +++++---
.../domain/interest/CompoundInterestValues.java | 35 ++++++++++++++++++++
.../domain/interest/CompoundingPeriod.java | 2 ++
.../domain/interest/DailyCompoundingPeriod.java | 10 ++++--
.../interest/MonthlyCompoundingPeriod.java | 5 +++
.../savings/domain/interest/PostingPeriod.java | 21 +++++++++---
.../interest/QuarterlyCompoundingPeriod.java | 6 +++-
10 files changed, 90 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java
----------------------------------------------------------------------
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 46b875a..bc8a72b 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
@@ -2666,8 +2666,7 @@ public class SavingsAccount extends AbstractPersistableCustom<Long> {
SavingsCompoundingInterestPeriodType savingsCompoundingInterestPeriodType = SavingsCompoundingInterestPeriodType
.fromInt(interestCompoundingPeriodType);
- if (postingtoCompoundMap.get(savingsPostingInterestPeriodType) == null
- || !postingtoCompoundMap.get(savingsPostingInterestPeriodType).contains(savingsCompoundingInterestPeriodType)) {
+ if (postingtoCompoundMap.get(savingsPostingInterestPeriodType) == null) {
baseDataValidator.failWithCodeNoParameterAddedToErrorCode("posting.period.type.is.less.than.compound.period.type",
savingsPostingInterestPeriodType.name(), savingsCompoundingInterestPeriodType.name());
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java
index bc495a3..682e7d8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java
@@ -178,4 +178,9 @@ public class AnnualCompoundingPeriod implements CompoundingPeriod {
this.periodInterval = periodInterval;
this.endOfDayBalances = endOfDayBalances;
}
+
+ @Override
+ public LocalDateInterval getPeriodInterval() {
+ return this.periodInterval;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java
index eeaa236..f07fb0f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java
@@ -178,4 +178,9 @@ public class BiAnnualCompoundingPeriod implements CompoundingPeriod {
this.periodInterval = periodInterval;
this.endOfDayBalances = endOfDayBalances;
}
+
+ @Override
+ public LocalDateInterval getPeriodInterval() {
+ return this.periodInterval;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java
index 40b6535..55cd5a6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java
@@ -46,10 +46,13 @@ public class CompoundInterestHelper {
Money interestEarned = Money.zero(currency);
// total interest earned in previous periods but not yet recognised
- BigDecimal interestEarnedButNotPosted = BigDecimal.ZERO;
+ BigDecimal compoundedInterest = BigDecimal.ZERO;
+ BigDecimal unCompoundedInterest = BigDecimal.ZERO;
+ final CompoundInterestValues compoundInterestValues = new CompoundInterestValues(compoundedInterest,
+ unCompoundedInterest);
for (final PostingPeriod postingPeriod : allPeriods) {
- final BigDecimal interestEarnedThisPeriod = postingPeriod.calculateInterest(interestEarnedButNotPosted);
+ final BigDecimal interestEarnedThisPeriod = postingPeriod.calculateInterest(compoundInterestValues);
final Money moneyToBePostedForPeriod = Money.of(currency, interestEarnedThisPeriod);
@@ -58,9 +61,9 @@ public class CompoundInterestHelper {
// interest for accounts which has post interest to linked savings
// account and if already transfered then it includes in interest
// calculation.
- if (postingPeriod.isInterestTransfered() || !interestTransferEnabled
- || (lockUntil != null && !postingPeriod.dateOfPostingTransaction().isAfter(lockUntil))) {
- interestEarnedButNotPosted = interestEarnedButNotPosted.add(moneyToBePostedForPeriod.getAmount());
+ if (!(postingPeriod.isInterestTransfered() || !interestTransferEnabled
+ || (lockUntil != null && !postingPeriod.dateOfPostingTransaction().isAfter(lockUntil)))) {
+ compoundInterestValues.setcompoundedInterest(BigDecimal.ZERO);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestValues.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestValues.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestValues.java
new file mode 100644
index 0000000..a32d5eb
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestValues.java
@@ -0,0 +1,35 @@
+package org.apache.fineract.portfolio.savings.domain.interest;
+
+import java.math.BigDecimal;
+
+public class CompoundInterestValues {
+
+ private BigDecimal compoundedInterest;
+ private BigDecimal uncompoundedInterest;
+
+ public CompoundInterestValues(final BigDecimal compoundedInterest, final BigDecimal uncompoundedInterest) {
+ this.compoundedInterest = compoundedInterest;
+ this.uncompoundedInterest = uncompoundedInterest;
+ }
+
+ public BigDecimal getcompoundedInterest() {
+ return this.compoundedInterest;
+ }
+
+ public BigDecimal getuncompoundedInterest() {
+ return this.uncompoundedInterest;
+ }
+
+ public void setcompoundedInterest(BigDecimal interestToBeCompounded) {
+ this.compoundedInterest = interestToBeCompounded;
+ }
+
+ public void setuncompoundedInterest(BigDecimal interestToBeUncompounded) {
+ this.uncompoundedInterest = interestToBeUncompounded;
+ }
+
+ public void setZeroForInterestToBeUncompounded() {
+ this.uncompoundedInterest = BigDecimal.ZERO;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundingPeriod.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundingPeriod.java
index a236abb..7e42865 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundingPeriod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundingPeriod.java
@@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.savings.domain.interest;
import java.math.BigDecimal;
+import org.apache.fineract.infrastructure.core.domain.LocalDateInterval;
import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType;
import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType;
@@ -29,4 +30,5 @@ public interface CompoundingPeriod {
SavingsInterestCalculationType interestCalculationType, BigDecimal interestFromPreviousPostingPeriod,
BigDecimal interestRateAsFraction, long daysInYear, BigDecimal minBalanceForInterestCalculation,
BigDecimal overdraftInterestRateAsFraction, BigDecimal minOverdraftForInterestCalculation);
+ LocalDateInterval getPeriodInterval();
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java
index ade20da..7433440 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java
@@ -30,7 +30,6 @@ import org.joda.time.LocalDate;
public class DailyCompoundingPeriod implements CompoundingPeriod {
- @SuppressWarnings("unused")
private final LocalDateInterval periodInterval;
private final List<EndOfDayBalance> endOfDayBalances;
@@ -77,8 +76,8 @@ public class DailyCompoundingPeriod implements CompoundingPeriod {
@Override
public BigDecimal calculateInterest(
- @SuppressWarnings("unused") final SavingsCompoundingInterestPeriodType compoundingInterestPeriodType,
- @SuppressWarnings("unused") final SavingsInterestCalculationType interestCalculationType,
+ final SavingsCompoundingInterestPeriodType compoundingInterestPeriodType,
+ final SavingsInterestCalculationType interestCalculationType,
final BigDecimal interestFromPreviousPostingPeriod, final BigDecimal interestRateAsFraction, final long daysInYear,
final BigDecimal minBalanceForInterestCalculation,
final BigDecimal overdraftInterestRateAsFraction, final BigDecimal minOverdraftForInterestCalculation) {
@@ -97,4 +96,9 @@ public class DailyCompoundingPeriod implements CompoundingPeriod {
return interestEarned;
}
+
+ @Override
+ public LocalDateInterval getPeriodInterval() {
+ return this.periodInterval;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java
index 8ead199..ca39033 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java
@@ -174,4 +174,9 @@ public class MonthlyCompoundingPeriod implements CompoundingPeriod {
this.periodInterval = periodInterval;
this.endOfDayBalances = endOfDayBalances;
}
+
+ @Override
+ public LocalDateInterval getPeriodInterval() {
+ return this.periodInterval;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java
index 2d9f560..2341288 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java
@@ -194,19 +194,32 @@ public class PostingPeriod {
return this.openingBalance;
}
- public BigDecimal calculateInterest(final BigDecimal interestFromPreviousPostingPeriod) {
+ public BigDecimal calculateInterest(final CompoundInterestValues compoundInterestValues) {
BigDecimal interestEarned = BigDecimal.ZERO;
// for each compounding period accumulate the amount of interest
// to be applied to the balanced for interest calculation
- BigDecimal interestCompounded = interestFromPreviousPostingPeriod;
for (final CompoundingPeriod compoundingPeriod : this.compoundingPeriods) {
final BigDecimal interestUnrounded = compoundingPeriod.calculateInterest(this.interestCompoundingType,
- this.interestCalculationType, interestCompounded, this.interestRateAsFraction, this.daysInYear,
+ this.interestCalculationType, compoundInterestValues.getcompoundedInterest(), this.interestRateAsFraction, this.daysInYear,
this.minBalanceForInterestCalculation.getAmount(), this.overdraftInterestRateAsFraction,
this.minOverdraftForInterestCalculation.getAmount());
- interestCompounded = interestCompounded.add(interestUnrounded);
+ BigDecimal unCompoundedInterest = compoundInterestValues.getuncompoundedInterest().add(interestUnrounded);
+ compoundInterestValues.setuncompoundedInterest(unCompoundedInterest);
+ LocalDate compoundingPeriodEndDate = compoundingPeriod.getPeriodInterval().endDate();
+ if (!SavingsCompoundingInterestPeriodType.DAILY.equals(this.interestCompoundingType)) {
+ compoundingPeriodEndDate = determineInterestPeriodEndDateFrom(
+ compoundingPeriod.getPeriodInterval().startDate(), this.interestCompoundingType,
+ compoundingPeriod.getPeriodInterval().endDate());
+ }
+
+ if (compoundingPeriodEndDate.equals(compoundingPeriod.getPeriodInterval().endDate())) {
+ BigDecimal interestCompounded = compoundInterestValues.getcompoundedInterest()
+ .add(unCompoundedInterest);
+ compoundInterestValues.setcompoundedInterest(interestCompounded);
+ compoundInterestValues.setZeroForInterestToBeUncompounded();
+ }
interestEarned = interestEarned.add(interestUnrounded);
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/91953155/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java
index ddead71..8ffdbc1 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java
@@ -31,7 +31,6 @@ import org.joda.time.LocalDate;
public class QuarterlyCompoundingPeriod implements CompoundingPeriod {
- @SuppressWarnings("unused")
private final LocalDateInterval periodInterval;
private final List<EndOfDayBalance> endOfDayBalances;
@@ -178,4 +177,9 @@ public class QuarterlyCompoundingPeriod implements CompoundingPeriod {
this.periodInterval = periodInterval;
this.endOfDayBalances = endOfDayBalances;
}
+
+ @Override
+ public LocalDateInterval getPeriodInterval() {
+ return this.periodInterval;
+ }
}
\ No newline at end of file