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 3b35c5394..8b1cc2a41 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 @@ -862,7 +862,11 @@ public class Loan extends AbstractPersistableCustom { break; case PERCENT_OF_AMOUNT_AND_INTEREST: final BigDecimal totalInterestCharged = getTotalInterest(); - amount = getPrincpal().getAmount().add(totalInterestCharged); + if (isMultiDisburmentLoan() && loanCharge.isDisbursementCharge()) { + amount = getTotalAllTrancheDisbursementAmount().getAmount().add(totalInterestCharged); + }else{ + amount = getPrincpal().getAmount().add(totalInterestCharged); + } break; case PERCENT_OF_INTEREST: amount = getTotalInterest(); @@ -880,6 +884,31 @@ public class Loan extends AbstractPersistableCustom { return amount; } + private Money getTotalAllTrancheDisbursementAmount() { + Money amount = Money.zero(getCurrency()); + if (isMultiDisburmentLoan()) { + for (final LoanDisbursementDetails loanDisbursementDetail : this.disbursementDetails) { + amount = amount.plus(loanDisbursementDetail.principal()); + } + } + return amount; + } + + private boolean isFirstTrancheDisbursement() { + if (isMultiDisburmentLoan()) { + int totalTranchDisbursementCount = 0; + for (final LoanDisbursementDetails loanDisbursementDetail : this.disbursementDetails) { + if(loanDisbursementDetail.actualDisbursementDate() != null){ + totalTranchDisbursementCount++; + } + } + if(totalTranchDisbursementCount < 2){ + return true; + } + } + return false; + } + /** * @return */ 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 88a8aee49..5a8582f4b 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 @@ -990,6 +990,10 @@ public class LoanCharge extends AbstractPersistableCustom { return this.loan; } + public boolean isDisbursementCharge() { + return ChargeTimeType.fromInt(this.chargeTime).equals(ChargeTimeType.DISBURSEMENT); + } + public boolean isTrancheDisbursementCharge() { return ChargeTimeType.fromInt(this.chargeTime).equals(ChargeTimeType.TRANCHE_DISBURSEMENT); }