Repository: incubator-fineract
Updated Branches:
  refs/heads/develop cf9af2ec3 -> d93885b55


 bugs fixed 458,310,453,158,166


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

Branch: refs/heads/develop
Commit: d70618d7d1af43cd0bef80ab03c757c0ceda59c7
Parents: a8ac555
Author: nazeer1100126 <[email protected]>
Authored: Mon May 15 20:59:18 2017 +0530
Committer: nazeer1100126 <[email protected]>
Committed: Mon May 15 20:59:18 2017 +0530

----------------------------------------------------------------------
 ...ntWritePlatformServiceJpaRepositoryImpl.java |  6 ++++-
 .../domain/LoanInstallmentCharge.java           |  5 ++--
 ...onWritePlatformServiceJpaRepositoryImpl.java |  2 +-
 .../service/LoanReadPlatformServiceImpl.java    | 27 ++++++++++++++++++--
 ...anWritePlatformServiceJpaRepositoryImpl.java |  4 ++-
 .../LoanProductReadPlatformServiceImpl.java     |  6 ++---
 6 files changed, 39 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/d70618d7/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java
index 2a131a0..2e109c4 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java
@@ -365,7 +365,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl 
implements ClientWriteP
     {          
        final JsonElement clientNonPersonElement = 
this.fromApiJsonHelper.parse(command.jsonFragment(ClientApiConstants.clientNonPersonDetailsParamName));
 
-               if(clientNonPersonElement != null)
+               if(clientNonPersonElement != null && 
!isEmpty(clientNonPersonElement))
                {
                        final String incorpNumber = 
this.fromApiJsonHelper.extractStringNamed(ClientApiConstants.incorpNumberParamName,
 clientNonPersonElement);
                final String remarks = 
this.fromApiJsonHelper.extractStringNamed(ClientApiConstants.remarksParamName, 
clientNonPersonElement);                
@@ -391,6 +391,10 @@ public class ClientWritePlatformServiceJpaRepositoryImpl 
implements ClientWriteP
                this.clientNonPersonRepository.save(newClientNonPerson);
                }
     }
+    
+    public boolean isEmpty(final JsonElement element){
+       return element.toString().trim().length()<4;
+    }
 
     @Transactional
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/d70618d7/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java
index f0459a2..53168ef 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java
@@ -20,7 +20,6 @@ package org.apache.fineract.portfolio.loanaccount.domain;
 
 import java.math.BigDecimal;
 
-import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.JoinColumn;
@@ -39,8 +38,8 @@ public class LoanInstallmentCharge extends 
AbstractPersistableCustom<Long> imple
     @JoinColumn(name = "loan_charge_id", referencedColumnName = "id", nullable 
= false)
     private LoanCharge loancharge;
 
-    @ManyToOne(optional = false, cascade = CascadeType.ALL)
-    @JoinColumn(name = "loan_schedule_id", referencedColumnName = "id", 
nullable = false)
+    @ManyToOne
+    @JoinColumn(name = "loan_schedule_id", nullable = false)
     private LoanRepaymentScheduleInstallment installment;
 
     @Column(name = "amount", scale = 6, precision = 19, nullable = false)

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/d70618d7/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
index 92660a0..8757e01 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
@@ -824,7 +824,7 @@ public class 
LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa
                     final CalendarInstance calendarInstance = ciList.get(0);
                     final boolean isCalendarAssociatedWithEntity = 
this.calendarReadPlatformService.isCalendarAssociatedWithEntity(calendarInstance
                             .getEntityId(), 
calendarInstance.getCalendar().getId(), 
CalendarEntityType.LOANS.getValue().longValue());
-                    if (isCalendarAssociatedWithEntity) {
+                    if (isCalendarAssociatedWithEntity && calendarId == null) {
                         
this.calendarRepository.delete(calendarInstance.getCalendar());
                     }
                     if (calendarInstance.getCalendar().getId() != 
calendar.getId()) {

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/d70618d7/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
index 4bf7326..a5de687 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
@@ -60,6 +60,7 @@ import 
org.apache.fineract.portfolio.calendar.data.CalendarData;
 import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType;
 import 
org.apache.fineract.portfolio.calendar.service.CalendarReadPlatformService;
 import org.apache.fineract.portfolio.charge.data.ChargeData;
+import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType;
 import org.apache.fineract.portfolio.charge.domain.ChargeTimeType;
 import org.apache.fineract.portfolio.charge.service.ChargeReadPlatformService;
 import org.apache.fineract.portfolio.client.data.ClientData;
@@ -90,6 +91,8 @@ import 
org.apache.fineract.portfolio.loanaccount.data.PaidInAdvanceData;
 import 
org.apache.fineract.portfolio.loanaccount.data.RepaymentScheduleRelatedLoanData;
 import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO;
 import org.apache.fineract.portfolio.loanaccount.domain.Loan;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge;
 import 
org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
 import 
org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleTransactionProcessorFactory;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper;
@@ -416,14 +419,34 @@ public class LoanReadPlatformServiceImpl implements 
LoanReadPlatformService {
         final Collection<PaymentTypeData> paymentOptions = 
this.paymentTypeReadPlatformService.retrieveAllPaymentTypes();
         final BigDecimal outstandingLoanBalance = 
loanRepaymentScheduleInstallment.getPrincipalOutstanding(currency).getAmount();
         final BigDecimal unrecognizedIncomePortion = null;
+        BigDecimal adjustedChargeAmount = adjustPrepayInstallmentCharge(loan, 
onDate);
         return new LoanTransactionData(null, null, null, transactionType, 
null, currencyData, earliestUnpaidInstallmentDate,
-                
loanRepaymentScheduleInstallment.getTotalOutstanding(currency).getAmount(), 
loanRepaymentScheduleInstallment
+                
loanRepaymentScheduleInstallment.getTotalOutstanding(currency).getAmount().subtract(adjustedChargeAmount),
 loanRepaymentScheduleInstallment
                         .getPrincipalOutstanding(currency).getAmount(), 
loanRepaymentScheduleInstallment.getInterestOutstanding(currency)
-                        .getAmount(), 
loanRepaymentScheduleInstallment.getFeeChargesOutstanding(currency).getAmount(),
+                        .getAmount(), 
loanRepaymentScheduleInstallment.getFeeChargesOutstanding(currency).getAmount().subtract(adjustedChargeAmount),
                 
loanRepaymentScheduleInstallment.getPenaltyChargesOutstanding(currency).getAmount(),
 null, unrecognizedIncomePortion,
                 paymentOptions, null, null, null, outstandingLoanBalance, 
false);
     }
 
+       private BigDecimal adjustPrepayInstallmentCharge(Loan loan, final 
LocalDate onDate) {
+               BigDecimal chargeAmount = BigDecimal.ZERO;
+               for(LoanCharge loanCharge: loan.charges()){
+               if(loanCharge.isInstalmentFee() && 
loanCharge.getCharge().getChargeCalculation()==ChargeCalculationType.FLAT.getValue()){
                       
+                       for (LoanRepaymentScheduleInstallment installment : 
loan.getRepaymentScheduleInstallments()) {
+                               if(onDate.isBefore(installment.getDueDate())){
+                                       LoanInstallmentCharge 
loanInstallmentCharge =  
loanCharge.getInstallmentLoanCharge(installment.getInstallmentNumber());
+                                       if(loanInstallmentCharge != null){
+                                               chargeAmount = 
chargeAmount.add(loanInstallmentCharge.getAmountOutstanding());
+                                       }
+                                       
+                                       break;
+                               }
+                               }
+               }
+        }
+               return chargeAmount;
+       }
+
     @Override
     public LoanTransactionData retrieveWaiveInterestDetails(final Long loanId) 
{
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/d70618d7/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index c0a6ae2..23270d5 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -279,7 +279,9 @@ public class LoanWritePlatformServiceJpaRepositoryImpl 
implements LoanWritePlatf
         checkForProductMixRestrictions(loan);
         
         LocalDate recalculateFrom = null;
-        loan.setActualDisbursementDate(actualDisbursementDate.toDate());
+        if(!loan.isMultiDisburmentLoan()){
+               loan.setActualDisbursementDate(actualDisbursementDate.toDate());
+        }        
         ScheduleGeneratorDTO scheduleGeneratorDTO = 
this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom);
 
         // validate actual disbursement date against meeting date

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/d70618d7/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java
index 903503d..165cf71 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java
@@ -477,16 +477,16 @@ public class LoanProductReadPlatformServiceImpl 
implements LoanProductReadPlatfo
         }
 
         public String productMixSchema() {
-            return "lp.id as id, lp.name as name FROM m_product_loan lp left 
join m_product_mix pm on pm.product_id=lp.id where lp.id not IN("
+            return "lp.id as id, lp.name as name, lp.allow_multiple_disbursals 
as multiDisburseLoan FROM m_product_loan lp left join m_product_mix pm on 
pm.product_id=lp.id where lp.id not IN("
                     + "select lp.id from m_product_loan lp inner join 
m_product_mix pm on pm.product_id=lp.id)";
         }
 
         public String restrictedProductsSchema() {
-            return "pm.restricted_product_id as id, rp.name as name from 
m_product_mix pm join m_product_loan rp on rp.id = pm.restricted_product_id ";
+            return "pm.restricted_product_id as id, rp.name as name, 
rp.allow_multiple_disbursals as multiDisburseLoan from m_product_mix pm join 
m_product_loan rp on rp.id = pm.restricted_product_id ";
         }
 
         public String derivedRestrictedProductsSchema() {
-            return "pm.product_id as id, lp.name as name from m_product_mix pm 
join m_product_loan lp on lp.id=pm.product_id";
+            return "pm.product_id as id, lp.name as name, 
lp.allow_multiple_disbursals as multiDisburseLoan from m_product_mix pm join 
m_product_loan lp on lp.id=pm.product_id";
         }
 
         @Override

Reply via email to