From 47afc0e8a41b90887178f8c5b47933e4065a239f Mon Sep 17 00:00:00 2001 From: Pramod Nuthakki Date: Mon, 6 Oct 2014 12:25:53 +0530 Subject: [PATCH] periodic accounting API changes --- api-docs/apiLive.htm | 8 ++++---- .../accounting/PeriodicAccrualAccountingHelper.java | 4 ++-- .../accrual/api/AccrualAccountingApiResource.java | 2 +- .../accrual/api/AccrualAccountingConstants.java | 2 +- .../domain/AbstractLoanScheduleGenerator.java | 9 ++++++--- .../LoanWritePlatformServiceJpaRepositoryImpl.java | 5 +++++ 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm index 330c116ae..bbaaf0756 100644 --- a/api-docs/apiLive.htm +++ b/api-docs/apiLive.htm @@ -31104,7 +31104,7 @@ Content-Type: application/json
Field Descriptions
- accrueTill + tillDate which specifies periodic accruals should happen till the given Date @@ -31126,7 +31126,7 @@ Content-Type: application/json
Mandatory Fields
- accrueTill + tillDate @@ -31136,7 +31136,7 @@ Content-Type: application/json
-POST https://DomainName/api/v1/accrualaccounting +POST https://DomainName/api/v1/runaccruals POST financialactivityaccounts @@ -31145,7 +31145,7 @@ Request Body: { "locale": "en", "dateFormat": "dd MMMM yyyy", - "accrueTill":"04 June 2014" + "tillDate":"04 June 2014" } diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/accounting/PeriodicAccrualAccountingHelper.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/accounting/PeriodicAccrualAccountingHelper.java index acf88cf35..307f65bf2 100755 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/accounting/PeriodicAccrualAccountingHelper.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/accounting/PeriodicAccrualAccountingHelper.java @@ -15,7 +15,7 @@ import com.jayway.restassured.specification.ResponseSpecification; public class PeriodicAccrualAccountingHelper { - private static final String PERIODIC_ACCRUAL_URL = "/mifosng-provider/api/v1/accrualaccounting"; + private static final String PERIODIC_ACCRUAL_URL = "/mifosng-provider/api/v1/runaccruals"; private final RequestSpecification requestSpec; private final ResponseSpecification responseSpec; @@ -33,7 +33,7 @@ public class PeriodicAccrualAccountingHelper { final HashMap map = new HashMap<>(); map.put("dateFormat", "dd MMMM yyyy"); map.put("locale", "en_GB"); - map.put("accrueTill", date); + map.put("tillDate", date); return new Gson().toJson(map); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/accrual/api/AccrualAccountingApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/accrual/api/AccrualAccountingApiResource.java index e7e558b2c..e70f71853 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/accrual/api/AccrualAccountingApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/accrual/api/AccrualAccountingApiResource.java @@ -20,7 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -@Path("/accrualaccounting") +@Path("/runaccruals") @Component @Scope("singleton") public class AccrualAccountingApiResource { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/accrual/api/AccrualAccountingConstants.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/accrual/api/AccrualAccountingConstants.java index 4dee52804..c425ce0ee 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/accrual/api/AccrualAccountingConstants.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/accrual/api/AccrualAccountingConstants.java @@ -11,7 +11,7 @@ import java.util.Set; public class AccrualAccountingConstants { - public static final String accrueTillParamName = "accrueTill"; + public static final String accrueTillParamName = "tillDate"; public static final String localeParamName = "locale"; public static final String dateFormatParamName = "dateFormat"; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java index b330eab08..11bead0fd 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java @@ -231,7 +231,9 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener if (reducePrincipal.isGreaterThanZero()) { switch (loanApplicationTerms.getRescheduleStrategyMethod()) { case REDUCE_EMI_AMOUNT: - loanApplicationTerms.setFixedEmiAmount(null); + if (!loanApplicationTerms.isMultiDisburseLoan()) { + loanApplicationTerms.setFixedEmiAmount(null); + } fixedEmiAmount = fixedEmiAmount.zero(); outstandingBalance = outstandingBalance.minus(reducePrincipal); balanceForcalculation = balanceForcalculation.minus(reducePrincipal); @@ -1659,13 +1661,14 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener .getId() != null && loanTransaction.getId().compareTo(precloseTransaction.getId()) == 1)))) { precloseTransaction = loanTransaction; } - collectedPrincipal = collectedPrincipal.plus(loanTransaction.getPrincipalPortion()); + collectedPrincipal = collectedPrincipal.plus(loanTransaction.getPrincipalPortion()); } if (precloseTransaction != null) { LoanRepaymentScheduleInstallment loanRepaymentScheduleInstallment = calculatePrepaymentAmount(installments, currency, precloseTransaction.getTransactionDate(), applicationTerms.getInterestChargedFromLocalDate(), applicationTerms, mc, loanCharges); - Money pendingPrinciapl = applicationTerms.getPrincipal().minus(collectedPrincipal).plus(precloseTransaction.getPrincipalPortion()); + Money pendingPrinciapl = applicationTerms.getPrincipal().minus(collectedPrincipal) + .plus(precloseTransaction.getPrincipalPortion()); if (pendingPrinciapl.isGreaterThan(loanRepaymentScheduleInstallment.getPrincipal(currency)) || precloseTransaction.getAmount(currency).isLessThan(loanRepaymentScheduleInstallment.getTotalOutstanding(currency))) { precloseTransaction = null; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index da809b704..774b07f9b 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -61,6 +61,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarInstance; import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository; import org.mifosplatform.portfolio.calendar.domain.CalendarRepository; import org.mifosplatform.portfolio.calendar.domain.CalendarType; +import org.mifosplatform.portfolio.calendar.exception.CalendarParameterUpdateNotSupportedException; import org.mifosplatform.portfolio.charge.domain.Charge; import org.mifosplatform.portfolio.charge.domain.ChargePaymentMode; import org.mifosplatform.portfolio.charge.domain.ChargeRepositoryWrapper; @@ -1732,6 +1733,10 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf // loop through each loan to reschedule the repayment dates for (final Loan loan : loans) { if (loan != null) { + if(loan.repaymentScheduleDetail().isInterestRecalculationEnabled()){ + final String defaultUserMessage = "Meeting calendar type update is not supported"; + throw new CalendarParameterUpdateNotSupportedException("jlg.loan.recalculation", defaultUserMessage); + } holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), loan.getDisbursementDate().toDate()); loan.updateLoanRepaymentScheduleDates(calendar.getStartDateLocalDate(), calendar.getRecurrence(), isHolidayEnabled, holidays, workingDays);