Repository: incubator-fineract Updated Branches: refs/heads/develop 830412fdd -> 84651e054
FINERACT-214 : adding validation for overdue charges while rescheuling Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/4e9f534e Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/4e9f534e Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/4e9f534e Branch: refs/heads/develop Commit: 4e9f534eaad49d202026414a729d9c1c19878cb7 Parents: 416a6e5 Author: venkatconflux <[email protected]> Authored: Fri Aug 19 18:11:11 2016 +0530 Committer: venkatconflux <[email protected]> Committed: Fri Aug 19 18:11:11 2016 +0530 ---------------------------------------------------------------------- .../portfolio/loanaccount/domain/Loan.java | 4 +++ .../LoanRescheduleRequestDataValidator.java | 29 ++++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/4e9f534e/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 0ab4b2d..4f26f4a 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 @@ -6349,4 +6349,8 @@ public class Loan extends AbstractPersistable<Long> { public LoanTopupDetails getTopupLoanDetails() { return this.loanTopupDetails; } + + public Collection<LoanCharge> getLoanCharges() { + return this.charges; + } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/4e9f534e/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java index 67e0f80..1203979 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.data; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -31,6 +32,7 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.loanaccount.domain.Loan; +import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.rescheduleloan.RescheduleLoansApiConstants; import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest; @@ -140,9 +142,9 @@ public class LoanRescheduleRequestDataValidator { && !this.fromJsonHelper.parameterExists(RescheduleLoansApiConstants.adjustedDueDateParamName, jsonElement)) { dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.graceOnPrincipalParamName).notNull(); } - + LoanRepaymentScheduleInstallment installment = null; if (rescheduleFromDate != null) { - LoanRepaymentScheduleInstallment installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate); + installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate); if (installment == null) { dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.rescheduleFromDateParamName) @@ -165,9 +167,24 @@ public class LoanRescheduleRequestDataValidator { dataValidatorBuilder.reset().failWithCodeNoParameterAddedToErrorCode(RescheduleLoansApiConstants.resheduleWithInterestRecalculationNotSupportedErrorCode, "Loan rescheduling is not supported for the loan product with interest recalculation enabled"); } - + validateForOverdueCharges(dataValidatorBuilder, loan, installment); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } } + + + private void validateForOverdueCharges(DataValidatorBuilder dataValidatorBuilder, final Loan loan, + final LoanRepaymentScheduleInstallment installment) { + if (installment != null) { + LocalDate rescheduleFromDate = installment.getFromDate(); + Collection<LoanCharge> charges = loan.getLoanCharges(); + for (LoanCharge loanCharge : charges) { + if (loanCharge.isOverdueInstallmentCharge() && loanCharge.getDueLocalDate().isAfter(rescheduleFromDate)) { + dataValidatorBuilder.failWithCodeNoParameterAddedToErrorCode("not.allowed.due.to.overdue.charges"); + break; + } + } + } + } /** * Validates a user request to approve a loan reschedule request @@ -212,7 +229,7 @@ public class LoanRescheduleRequestDataValidator { LocalDate rescheduleFromDate = loanRescheduleRequest.getRescheduleFromDate(); final Loan loan = loanRescheduleRequest.getLoan(); - + LoanRepaymentScheduleInstallment installment = null; if (loan != null) { if (!loan.status().isActive()) { @@ -220,7 +237,7 @@ public class LoanRescheduleRequestDataValidator { } if (rescheduleFromDate != null) { - LoanRepaymentScheduleInstallment installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate); + installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate); if (installment == null) { dataValidatorBuilder.reset().failWithCodeNoParameterAddedToErrorCode( @@ -233,6 +250,8 @@ public class LoanRescheduleRequestDataValidator { } } } + + validateForOverdueCharges(dataValidatorBuilder, loan, installment); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } }
