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); }
     }

Reply via email to