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
