From 7ebabc10f6bcb612ce05b08384148a1fc0848b8d Mon Sep 17 00:00:00 2001 From: Pramod Nuthakki Date: Wed, 9 Jul 2014 23:08:57 +0530 Subject: [PATCH] MIFOSX-1415 : Modified loan to capture last accrued date --- ...85__add_accrual_till_date_for_periodic_accrual.sql | 2 ++ .../service/LoanAccrualWritePlatformServiceImpl.java | 11 ++++++++++- .../service/LoanReadPlatformServiceImpl.java | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100755 mifosng-db/migrations/core_db/V185__add_accrual_till_date_for_periodic_accrual.sql diff --git a/mifosng-db/migrations/core_db/V185__add_accrual_till_date_for_periodic_accrual.sql b/mifosng-db/migrations/core_db/V185__add_accrual_till_date_for_periodic_accrual.sql new file mode 100755 index 000000000..d86b74fa4 --- /dev/null +++ b/mifosng-db/migrations/core_db/V185__add_accrual_till_date_for_periodic_accrual.sql @@ -0,0 +1,2 @@ +ALTER TABLE `m_loan` + ADD COLUMN `accrued_till` DATE NULL DEFAULT NULL AFTER `total_recovered_derived`; \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java index 176c99753..4924dee22 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java @@ -3,9 +3,11 @@ package org.mifosplatform.portfolio.loanaccount.service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import javax.sql.DataSource; @@ -50,10 +52,14 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat public void addAccrualAccounting() throws JobExecutionException { Collection loanScheduleAccrualDatas = this.loanReadPlatformService.retriveScheduleAccrualData(); StringBuilder sb = new StringBuilder(); + Set loansIds = new HashSet<>(); for (final LoanScheduleAccrualData accrualData : loanScheduleAccrualDatas) { try { - addAccrualAccounting(accrualData); + if (!loansIds.contains(accrualData.getLoanId())) { + addAccrualAccounting(accrualData); + } } catch (Exception e) { + loansIds.add(accrualData.getLoanId()); Throwable realCause = e; if (e.getCause() != null) { realCause = e.getCause(); @@ -127,6 +133,9 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat + "accrual_penalty_charges_derived=? WHERE id=?"; this.jdbcTemplate.update(repaymetUpdatesql, totalAccInterest, totalAccFee, totalAccPenalty, scheduleAccrualData.getRepaymentScheduleId()); + + String updateLoan = "UPDATE m_loan SET accrued_till=? WHERE id=?"; + this.jdbcTemplate.update(updateLoan, scheduleAccrualData.getDueDate(), scheduleAccrualData.getLoanId()); final Map accountingBridgeData = deriveAccountingBridgeData(scheduleAccrualData, transactionMap); this.journalEntryWritePlatformService.createJournalEntriesForLoan(accountingBridgeData); } catch (Exception e) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 2ba837de1..6ae419faa 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -1323,7 +1323,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { .append(" where ((if(ls.fee_charges_waived_derived is null , ls.fee_charges_amount,(ls.fee_charges_amount-ls.fee_charges_waived_derived)) <> if(ls.accrual_fee_charges_derived is null,0, ls.accrual_fee_charges_derived))") .append(" or (if(ls.penalty_charges_waived_derived is null , ls.penalty_charges_amount,(ls.penalty_charges_amount-ls.penalty_charges_waived_derived)) <> if(ls.accrual_penalty_charges_derived is null,0,ls.accrual_penalty_charges_derived))") .append(" or (if(ls.interest_waived_derived is null , ls.interest_amount,(ls.interest_amount-ls.interest_waived_derived)) <> if(ls.accrual_interest_derived is null,0,ls.accrual_interest_derived)))") - .append(" and loan.loan_status_id=? and mpl.accounting_type=? and loan.is_npa=0 and ls.duedate <= CURDATE()"); + .append(" and loan.loan_status_id=? and mpl.accounting_type=? and loan.is_npa=0 and ls.duedate <= CURDATE() order by loan.id,ls.duedate"); return this.jdbcTemplate.query(sqlBuilder.toString(), mapper, new Object[] { LoanStatus.ACTIVE.getValue(), AccountingRuleType.ACCRUAL_PERIODIC.getValue() }); }