Repository: incubator-fineract
Updated Branches:
  refs/heads/develop df690ec89 -> 90d238167


254:In tranche loans, if repayment date is same as tranche disbursement date 
then allow to change the emi 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/6c848344
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/6c848344
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/6c848344

Branch: refs/heads/develop
Commit: 6c84834459c5a86044bef453d75c541e416c2864
Parents: fe6e1e8
Author: sachinkulkarni12 <[email protected]>
Authored: Tue Apr 26 10:54:32 2016 +0530
Committer: sachinkulkarni12 <[email protected]>
Committed: Tue Apr 26 10:54:32 2016 +0530

----------------------------------------------------------------------
 .../configuration/domain/ConfigurationDomainService.java |  2 ++
 .../domain/ConfigurationDomainServiceJpa.java            |  7 +++++++
 .../portfolio/loanaccount/data/ScheduleGeneratorDTO.java | 11 ++++++++---
 .../fineract/portfolio/loanaccount/domain/Loan.java      | 10 ++++++++--
 .../portfolio/loanaccount/service/LoanUtilService.java   |  3 ++-
 ...0__configuration_for_allow_changing_of_emi_amount.sql |  4 ++++
 6 files changed, 31 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/6c848344/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainService.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainService.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainService.java
index b62aaf4..75aefb2 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainService.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainService.java
@@ -77,4 +77,6 @@ public interface ConfigurationDomainService {
     
     Long retreivePeroidInNumberOfDaysForSkipMeetingDate();
     
+    boolean isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled();
+    
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/6c848344/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java
index db853d4..356d098 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java
@@ -255,6 +255,13 @@ public class ConfigurationDomainServiceJpa implements 
ConfigurationDomainService
         final GlobalConfigurationProperty property = 
this.globalConfigurationRepository.findOneByNameWithNotFoundDetection(propertyName);
         return property.isEnabled();
     }
+    
+    @Override
+    public boolean isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled() {
+        final String propertyName = 
"change-emi-if-repaymentdate-same-as-disbursementdate";
+        final GlobalConfigurationProperty property = 
this.globalConfigurationRepository.findOneByNameWithNotFoundDetection(propertyName);
+        return property.isEnabled();
+    }
 
   
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/6c848344/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java
index ee6461a..b437af7 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java
@@ -42,15 +42,16 @@ public class ScheduleGeneratorDTO {
     final Boolean isInterestChargedFromDateAsDisbursementDateEnabled;
     final Integer numberOfdays;
     final boolean isSkipRepaymentOnFirstDayofMonth;
+    final Boolean isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled;
 
 
     public ScheduleGeneratorDTO(final LoanScheduleGeneratorFactory 
loanScheduleFactory, final ApplicationCurrency applicationCurrency,
             final LocalDate calculatedRepaymentsStartingFromDate, final 
HolidayDetailDTO holidayDetailDTO,
             final CalendarInstance calendarInstanceForInterestRecalculation, 
final CalendarInstance compoundingCalendarInstance,
             final LocalDate recalculateFrom, final Long 
overdurPenaltyWaitPeriod, final FloatingRateDTO floatingRateDTO,
-
             final Calendar calendar, final CalendarHistoryDataWrapper 
calendarHistoryDataWrapper, 
-            final Boolean isInterestChargedFromDateAsDisbursementDateEnabled, 
final Integer numberOfdays, final boolean isSkipRepaymentOnFirstDayofMonth) {
+            final Boolean isInterestChargedFromDateAsDisbursementDateEnabled, 
final Integer numberOfdays, final boolean isSkipRepaymentOnFirstDayofMonth,
+            final Boolean 
isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled) {
        
         this.loanScheduleFactory = loanScheduleFactory;
         this.applicationCurrency = applicationCurrency;
@@ -64,9 +65,9 @@ public class ScheduleGeneratorDTO {
         this.calendar = calendar;
         this.calendarHistoryDataWrapper  = calendarHistoryDataWrapper;
         this.isInterestChargedFromDateAsDisbursementDateEnabled = 
isInterestChargedFromDateAsDisbursementDateEnabled;
-
         this.numberOfdays = numberOfdays;
         this.isSkipRepaymentOnFirstDayofMonth = 
isSkipRepaymentOnFirstDayofMonth;
+        this.isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled = 
isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled;
     }
 
     public LoanScheduleGeneratorFactory getLoanScheduleFactory() {
@@ -136,5 +137,9 @@ public class ScheduleGeneratorDTO {
     public boolean isSkipRepaymentOnFirstDayofMonth() {
         return isSkipRepaymentOnFirstDayofMonth;
     }
+    
+    public Boolean isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled() {
+        return this.isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/6c848344/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 1bf5ec1..b4a88c5 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
@@ -2348,8 +2348,13 @@ public class Loan extends AbstractPersistable<Long> {
             if (this.loanProduct.isMultiDisburseLoan()) {
                 final Date dateValue = null;
                 final boolean isSpecificToInstallment = false;
+                final Boolean 
isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled = 
scheduleGeneratorDTO.isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled();
+                Date effectiveDateFrom = actualDisbursementDate.toDate();
+                if(!isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled && 
actualDisbursementDate.equals(nextPossibleRepaymentDate)){
+                    effectiveDateFrom = 
nextPossibleRepaymentDate.plusDays(1).toDate();
+                }
                 LoanTermVariations loanVariationTerms = new 
LoanTermVariations(LoanTermVariationType.EMI_AMOUNT.getValue(),
-                        actualDisbursementDate.toDate(), emiAmount, dateValue, 
isSpecificToInstallment, this, LoanStatus.ACTIVE.getValue());
+                        effectiveDateFrom, emiAmount, dateValue, 
isSpecificToInstallment, this, LoanStatus.ACTIVE.getValue());
                 this.loanTermVariations.add(loanVariationTerms);
             } else {
                 this.fixedEmiAmount = emiAmount;
@@ -5069,7 +5074,7 @@ public class Loan extends AbstractPersistable<Long> {
                 this.loanProduct.getInstallmentAmountInMultiplesOf(), 
recalculationFrequencyType, restCalendarInstance, compoundingMethod,
                 compoundingCalendarInstance, compoundingFrequencyType, 
this.loanProduct.preCloseInterestCalculationStrategy(),
                 rescheduleStrategyMethod, calendar, getApprovedPrincipal(), 
annualNominalInterestRate, loanTermVariations, calendarHistoryDataWrapper,
-                               scheduleGeneratorDTO.getNumberOfdays(), 
scheduleGeneratorDTO.isSkipRepaymentOnFirstDayofMonth());
+               scheduleGeneratorDTO.getNumberOfdays(), 
scheduleGeneratorDTO.isSkipRepaymentOnFirstDayofMonth());
         return loanApplicationTerms;
     }
 
@@ -5226,6 +5231,7 @@ public class Loan extends AbstractPersistable<Long> {
      *            TODO
      * @param floatingRateDTO
      *            TODO
+     * @param isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled 
      * @param loanCalendarInstance
      *            Used for accessing the loan's calendar object
      * @return application terms of the Loan object

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/6c848344/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
index ce06ca4..e17312e 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
@@ -136,11 +136,12 @@ public class LoanUtilService {
             isSkipRepaymentOnFirstMonth = 
isLoanRepaymentsSyncWithMeeting(loan.group(), calendar);
             if(isSkipRepaymentOnFirstMonth) { numberOfDays = 
configurationDomainService.retreivePeroidInNumberOfDaysForSkipMeetingDate().intValue();
 } 
         }
+        final Boolean isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled 
= 
this.configurationDomainService.isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled();
         
         ScheduleGeneratorDTO scheduleGeneratorDTO = new 
ScheduleGeneratorDTO(loanScheduleFactory, applicationCurrency,
                 calculatedRepaymentsStartingFromDate, holidayDetails, 
restCalendarInstance, compoundingCalendarInstance, recalculateFrom,
                 overdurPenaltyWaitPeriod, floatingRateDTO, calendar, 
calendarHistoryDataWrapper, isInterestChargedFromDateAsDisbursementDateEnabled,
-                numberOfDays, isSkipRepaymentOnFirstMonth);
+                numberOfDays, isSkipRepaymentOnFirstMonth, 
isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled);
 
                return scheduleGeneratorDTO;
     }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/6c848344/fineract-provider/src/main/resources/sql/migrations/core_db/V300__configuration_for_allow_changing_of_emi_amount.sql
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/resources/sql/migrations/core_db/V300__configuration_for_allow_changing_of_emi_amount.sql
 
b/fineract-provider/src/main/resources/sql/migrations/core_db/V300__configuration_for_allow_changing_of_emi_amount.sql
new file mode 100644
index 0000000..dc784ca
--- /dev/null
+++ 
b/fineract-provider/src/main/resources/sql/migrations/core_db/V300__configuration_for_allow_changing_of_emi_amount.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `c_configuration`
+       CHANGE COLUMN `name` `name` VARCHAR(100) NULL DEFAULT NULL AFTER `id`;
+       
+INSERT INTO `c_configuration` (`name`, `value`, `date_value`, `enabled`, 
`is_trap_door`, `description`) VALUES ( 
'change-emi-if-repaymentdate-same-as-disbursementdate', 0, NULL, 1, 0, 'In 
tranche loans, if repayment date is same as tranche disbursement date then 
allow to change the emi amount');

Reply via email to