Repository: incubator-fineract
Updated Branches:
  refs/heads/develop f9746718f -> ded0c7b84


MIFOSX-2497 : fixed schedule generator for waivers


Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/1cd226d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/1cd226d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/1cd226d4

Branch: refs/heads/develop
Commit: 1cd226d4c634db5bbad9bf7ff5e021ff3b0858e4
Parents: fe6e1e8
Author: pramod <[email protected]>
Authored: Mon Apr 18 13:23:43 2016 +0530
Committer: pramod <[email protected]>
Committed: Mon Apr 18 13:23:43 2016 +0530

----------------------------------------------------------------------
 ...anRepaymentScheduleTransactionProcessor.java |  6 ++-
 .../domain/AbstractLoanScheduleGenerator.java   | 40 +++++++++++++-------
 2 files changed, 32 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1cd226d4/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
index b06275b..78cd9d7 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java
@@ -497,7 +497,11 @@ public abstract class 
AbstractLoanRepaymentScheduleTransactionProcessor implemen
             if (loanTransaction.isRepayment() || 
loanTransaction.isInterestWaiver() || loanTransaction.isRecoveryRepayment()) {
                 loanTransaction.resetDerivedComponents();
             }
-            unProcessed = processTransaction(loanTransaction, currency, 
installments, amountToProcess);
+            if (loanTransaction.isInterestWaiver()) {
+                processTransaction(loanTransaction, currency, installments, 
amountToProcess);
+            } else {
+                unProcessed = processTransaction(loanTransaction, currency, 
installments, amountToProcess);
+            }
         }
         return unProcessed;
     }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1cd226d4/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
index 8024652..2f8b728 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
@@ -57,7 +57,6 @@ import 
org.apache.fineract.portfolio.loanaccount.loanschedule.exception.Schedule
 import 
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleModel;
 import 
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleModelRepaymentPeriod;
 import 
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest;
-import org.apache.fineract.portfolio.loanaccount.service.LoanUtilService;
 import 
org.apache.fineract.portfolio.loanproduct.domain.LoanProductMinimumRepaymentScheduleRelatedDetail;
 import org.joda.time.Days;
 import org.joda.time.LocalDate;
@@ -186,8 +185,9 @@ public abstract class AbstractLoanScheduleGenerator 
implements LoanScheduleGener
 
             // calculated interest start date for the period
             LocalDate periodStartDateApplicableForInterest = 
calculateInterestStartDateForPeriod(loanApplicationTerms,
-                    scheduleParams.getPeriodStartDate(), 
idealDisbursementDate, firstRepaymentdate, 
-                    
loanApplicationTerms.isInterestChargedFromDateSameAsDisbursalDateEnabled(), 
loanApplicationTerms.getExpectedDisbursementDate());
+                    scheduleParams.getPeriodStartDate(), 
idealDisbursementDate, firstRepaymentdate,
+                    
loanApplicationTerms.isInterestChargedFromDateSameAsDisbursalDateEnabled(),
+                    loanApplicationTerms.getExpectedDisbursementDate());
 
             // Loan Schedule Exceptions that need to be applied for Loan 
Account
             LoanTermVariationParams termVariationParams = 
applyLoanTermVariations(loanApplicationTerms, scheduleParams,
@@ -251,8 +251,9 @@ public abstract class AbstractLoanScheduleGenerator 
implements LoanScheduleGener
                 continue;
             }
             periodStartDateApplicableForInterest = 
calculateInterestStartDateForPeriod(loanApplicationTerms,
-                    scheduleParams.getPeriodStartDate(), 
idealDisbursementDate, firstRepaymentdate, 
-                    
loanApplicationTerms.isInterestChargedFromDateSameAsDisbursalDateEnabled(), 
loanApplicationTerms.getExpectedDisbursementDate());
+                    scheduleParams.getPeriodStartDate(), 
idealDisbursementDate, firstRepaymentdate,
+                    
loanApplicationTerms.isInterestChargedFromDateSameAsDisbursalDateEnabled(),
+                    loanApplicationTerms.getExpectedDisbursementDate());
 
             // backup for pre-close transaction
             updateCompoundingDetails(scheduleParams, 
periodStartDateApplicableForInterest);
@@ -616,6 +617,7 @@ public abstract class AbstractLoanScheduleGenerator 
implements LoanScheduleGener
             final Collection<LoanTermVariationsData> interestRates = 
loanApplicationTerms.getLoanTermVariations().getInterestRateChanges();
             boolean checkForOutstanding = true;
             List<RecalculationDetail> unprocessedTransactions = new 
ArrayList<>();
+            List<RecalculationDetail> processTransactions = new ArrayList<>();
             LoanScheduleModelPeriod installment = null;
             LocalDate periodStartDateApplicableForInterest = 
periodStartDateForInterest;
             for (RecalculationDetail detail : applicableTransactions) {
@@ -628,7 +630,17 @@ public abstract class AbstractLoanScheduleGenerator 
implements LoanScheduleGener
                     if 
(scheduleParams.getLoanRepaymentScheduleTransactionProcessor() != null
                             && 
scheduleParams.getLoanRepaymentScheduleTransactionProcessor()
                                     
.isInterestFirstRepaymentScheduleTransactionProcessor()) {
-                        List<LoanTransaction> currentTransactions = 
createCurrentTransactionList(detail);
+                        if (detail.getTransaction().isWaiver()) {
+                            processTransactions.add(detail);
+                            continue;
+                        }
+                        List<LoanTransaction> currentTransactions = new 
ArrayList<>();
+                        for (RecalculationDetail processDetail : 
processTransactions) {
+                            
currentTransactions.addAll(createCurrentTransactionList(processDetail));
+                        }
+                        processTransactions.clear();
+                        
currentTransactions.addAll(createCurrentTransactionList(detail));
+
                         if 
(!transactionDate.isEqual(scheduleParams.getPeriodStartDate()) || 
scheduleParams.getInstalmentNumber() == 1) {
 
                             int periodDays = 
Days.daysBetween(scheduleParams.getPeriodStartDate(), 
transactionDate).getDays();
@@ -636,7 +648,8 @@ public abstract class AbstractLoanScheduleGenerator 
implements LoanScheduleGener
                             // calculation as per the configuration
                             periodStartDateApplicableForInterest = 
calculateInterestStartDateForPeriod(loanApplicationTerms,
                                     scheduleParams.getPeriodStartDate(), 
idealDisbursementDate, firstRepaymentdate,
-                                    
loanApplicationTerms.isInterestChargedFromDateSameAsDisbursalDateEnabled(), 
loanApplicationTerms.getExpectedDisbursementDate());
+                                    
loanApplicationTerms.isInterestChargedFromDateSameAsDisbursalDateEnabled(),
+                                    
loanApplicationTerms.getExpectedDisbursementDate());
 
                             int daysInPeriodApplicable = 
Days.daysBetween(periodStartDateApplicableForInterest, 
transactionDate).getDays();
                             Money interestForThisinstallment = 
Money.zero(currency);
@@ -1538,12 +1551,12 @@ public abstract class AbstractLoanScheduleGenerator 
implements LoanScheduleGener
      * 
      * @param firstRepaymentdate
      *            TODO
-     * @param boolean1 
-     * @param localDate 
+     * @param boolean1
+     * @param localDate
      */
     private LocalDate calculateInterestStartDateForPeriod(final 
LoanApplicationTerms loanApplicationTerms, LocalDate periodStartDate,
-            final LocalDate idealDisbursementDate, final LocalDate 
firstRepaymentdate, final Boolean 
isInterestChargedFromDateSameAsDisbursalDateEnabled, 
-            final LocalDate expectedDisbursementDate) {
+            final LocalDate idealDisbursementDate, final LocalDate 
firstRepaymentdate,
+            final Boolean isInterestChargedFromDateSameAsDisbursalDateEnabled, 
final LocalDate expectedDisbursementDate) {
         LocalDate periodStartDateApplicableForInterest = periodStartDate;
         if (periodStartDate.isBefore(idealDisbursementDate) || 
firstRepaymentdate.isAfter(periodStartDate)) {
             if (loanApplicationTerms.getInterestChargedFromLocalDate() != 
null) {
@@ -1551,11 +1564,12 @@ public abstract class AbstractLoanScheduleGenerator 
implements LoanScheduleGener
                         || 
loanApplicationTerms.getInterestChargedFromLocalDate().isAfter(periodStartDate))
 {
                     periodStartDateApplicableForInterest = 
loanApplicationTerms.getInterestChargedFromLocalDate();
                 }
-            } else if(loanApplicationTerms.getInterestChargedFromLocalDate() 
== null && isInterestChargedFromDateSameAsDisbursalDateEnabled) {
+            } else if (loanApplicationTerms.getInterestChargedFromLocalDate() 
== null
+                    && isInterestChargedFromDateSameAsDisbursalDateEnabled) {
                 periodStartDateApplicableForInterest = 
expectedDisbursementDate;
             } else if 
(periodStartDate.isEqual(loanApplicationTerms.getExpectedDisbursementDate())) {
                 periodStartDateApplicableForInterest = idealDisbursementDate;
-            } 
+            }
         }
         return periodStartDateApplicableForInterest;
     }

Reply via email to