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 2017/03/30 11:12:39 UTC
incubator-fineract git commit: FINERACT-78 : Specified due date
percentage charge calculation uses loan principal amount instead of
installment principal amount
Repository: incubator-fineract
Updated Branches:
refs/heads/develop 254d25970 -> 8baf9f4cd
FINERACT-78 : Specified due date percentage charge calculation uses loan principal amount instead of installment principal amount
Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/8baf9f4c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/8baf9f4c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/8baf9f4c
Branch: refs/heads/develop
Commit: 8baf9f4cd0de899ae015f1994e17b1b0e8b39641
Parents: 254d259
Author: nazeer1100126 <na...@confluxtechnologies.com>
Authored: Mon Mar 27 17:34:20 2017 +0530
Committer: nazeer1100126 <na...@confluxtechnologies.com>
Committed: Tue Mar 28 13:52:20 2017 +0530
----------------------------------------------------------------------
.../portfolio/loanaccount/domain/Loan.java | 16 ++++++++--
.../loanaccount/domain/LoanCharge.java | 31 +++++++++++++++++++-
.../LoanRepaymentScheduleProcessingWrapper.java | 16 ++++++++--
3 files changed, 58 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/8baf9f4c/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
----------------------------------------------------------------------
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 8b1cc2a..56eba26 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
@@ -6065,12 +6065,24 @@ public class Loan extends AbstractPersistableCustom<Long> {
return nextRepaymentDate;
}
- public BigDecimal getDerivedAmountForCharge(LoanCharge loanCharge) {
+ public BigDecimal getDerivedAmountForCharge(final LoanCharge loanCharge) {
BigDecimal amount = BigDecimal.ZERO;
if (isMultiDisburmentLoan() && (loanCharge.getCharge().getChargeTimeType() == ChargeTimeType.DISBURSEMENT.getValue())) {
amount = getApprovedPrincipal();
} else {
- amount = getPrincpal().getAmount();
+ // If charge type is specified due date and loan is multi disburment
+ // loan.
+ // Then we need to get as of this loan charge due date how much
+ // amount disbursed.
+ if (loanCharge.isSpecifiedDueDate() && this.isMultiDisburmentLoan()) {
+ for (final LoanDisbursementDetails loanDisbursementDetails : this.getDisbursementDetails()) {
+ if (!loanDisbursementDetails.expectedDisbursementDate().after(loanCharge.getDueDate())) {
+ amount = amount.add(loanDisbursementDetails.principal());
+ }
+ }
+ } else {
+ amount = getPrincpal().getAmount();
+ }
}
return amount;
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/8baf9f4c/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
index 5a8582f..8dc7207 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
@@ -182,6 +182,19 @@ public class LoanCharge extends AbstractPersistableCustom<Long> {
percentage);
}
+ // If charge type is specified due date and loan is multi disburment
+ // loan.
+ // Then we need to get as of this loan charge due date how much amount
+ // disbursed.
+ if (chargeDefinition.getChargeTimeType().equals(ChargeTimeType.SPECIFIED_DUE_DATE.getValue()) && loan.isMultiDisburmentLoan()) {
+ amountPercentageAppliedTo = BigDecimal.ZERO;
+ for (final LoanDisbursementDetails loanDisbursementDetails : loan.getDisbursementDetails()) {
+ if (!loanDisbursementDetails.expectedDisbursementDate().after(dueDate.toDate())) {
+ amountPercentageAppliedTo = amountPercentageAppliedTo.add(loanDisbursementDetails.principal());
+ }
+ }
+ }
+
return new LoanCharge(loan, chargeDefinition, amountPercentageAppliedTo, amount, chargeTime, chargeCalculation, dueDate,
chargePaymentMode, null, loanCharge);
}
@@ -408,7 +421,19 @@ public class LoanCharge extends AbstractPersistableCustom<Long> {
if (this.loan != null) {
switch (ChargeCalculationType.fromInt(this.chargeCalculation)) {
case PERCENT_OF_AMOUNT:
- amountPercentageAppliedTo = this.loan.getPrincpal().getAmount();
+ // If charge type is specified due date and loan is multi
+ // disburment loan.
+ // Then we need to get as of this loan charge due date how
+ // much amount disbursed.
+ if (this.loan.isMultiDisburmentLoan() && this.isSpecifiedDueDate()) {
+ for (final LoanDisbursementDetails loanDisbursementDetails : this.loan.getDisbursementDetails()) {
+ if (!loanDisbursementDetails.expectedDisbursementDate().after(this.getDueDate())) {
+ amountPercentageAppliedTo = amountPercentageAppliedTo.add(loanDisbursementDetails.principal());
+ }
+ }
+ } else {
+ amountPercentageAppliedTo = this.loan.getPrincpal().getAmount();
+ }
break;
case PERCENT_OF_AMOUNT_AND_INTEREST:
amountPercentageAppliedTo = this.loan.getPrincpal().getAmount().add(this.loan.getTotalInterest());
@@ -553,6 +578,10 @@ public class LoanCharge extends AbstractPersistableCustom<Long> {
}
return dueDate;
}
+
+ public Date getDueDate() {
+ return this.dueDate;
+ }
private boolean determineIfFullyPaid() {
if (this.amount == null) { return true; }
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/8baf9f4c/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java
index e8a5aa3..aad2bab 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java
@@ -19,6 +19,7 @@
package org.apache.fineract.portfolio.loanaccount.domain;
import java.math.BigDecimal;
+import java.util.Date;
import java.util.List;
import java.util.Set;
@@ -71,7 +72,6 @@ public class LoanRepaymentScheduleProcessingWrapper {
final Money totalInterest, boolean isInstallmentChargeApplicable) {
Money cumulative = Money.zero(monetaryCurrency);
-
for (final LoanCharge loanCharge : loanCharges) {
if (loanCharge.isFeeCharge() && !loanCharge.isDueAtDisbursement()) {
if (loanCharge.isInstalmentFee() && isInstallmentChargeApplicable) {
@@ -102,7 +102,19 @@ public class LoanRepaymentScheduleProcessingWrapper {
} else if (loanCharge.getChargeCalculation().isPercentageOfInterest()) {
amount = amount.add(totalInterest.getAmount());
} else {
- amount = amount.add(totalPrincipal.getAmount());
+ // If charge type is specified due date and loan is
+ // multi disburment loan.
+ // Then we need to get as of this loan charge due date
+ // how much amount disbursed.
+ if (loanCharge.getLoan() != null && loanCharge.isSpecifiedDueDate() && loanCharge.getLoan().isMultiDisburmentLoan()) {
+ for (final LoanDisbursementDetails loanDisbursementDetails : loanCharge.getLoan().getDisbursementDetails()) {
+ if (!loanDisbursementDetails.expectedDisbursementDate().after(loanCharge.getDueDate())) {
+ amount = amount.add(loanDisbursementDetails.principal());
+ }
+ }
+ } else {
+ amount = amount.add(totalPrincipal.getAmount());
+ }
}
BigDecimal loanChargeAmt = amount.multiply(loanCharge.getPercentage()).divide(BigDecimal.valueOf(100));
cumulative = cumulative.plus(loanChargeAmt);