show Interest Earnings/Overdraft Interest not yet posted

This commit is contained in:
AvinashKumarG
2016-05-27 12:17:09 +05:30
parent 851b22d166
commit f96d96a147
5 changed files with 35 additions and 7 deletions
@@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.savings.data;
import java.math.BigDecimal; import java.math.BigDecimal;
import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.monetary.data.CurrencyData;
import org.joda.time.LocalDate;
/** /**
* Immutable data object representing Savings Account summary information. * Immutable data object representing Savings Account summary information.
@@ -40,11 +41,14 @@ public class SavingsAccountSummaryData {
private final BigDecimal totalPenaltyCharge; private final BigDecimal totalPenaltyCharge;
private final BigDecimal totalOverdraftInterestDerived; private final BigDecimal totalOverdraftInterestDerived;
private final BigDecimal totalWithholdTax; private final BigDecimal totalWithholdTax;
private final BigDecimal interestNotPosted;
private final LocalDate lastInterestCalculationDate;
public SavingsAccountSummaryData(final CurrencyData currency, final BigDecimal totalDeposits, final BigDecimal totalWithdrawals, public SavingsAccountSummaryData(final CurrencyData currency, final BigDecimal totalDeposits, final BigDecimal totalWithdrawals,
final BigDecimal totalWithdrawalFees, final BigDecimal totalAnnualFees, final BigDecimal totalInterestEarned, final BigDecimal totalWithdrawalFees, final BigDecimal totalAnnualFees, final BigDecimal totalInterestEarned,
final BigDecimal totalInterestPosted, final BigDecimal accountBalance, final BigDecimal totalFeeCharge, final BigDecimal totalInterestPosted, final BigDecimal accountBalance, final BigDecimal totalFeeCharge,
final BigDecimal totalPenaltyCharge, final BigDecimal totalOverdraftInterestDerived,final BigDecimal totalWithholdTax) { final BigDecimal totalPenaltyCharge, final BigDecimal totalOverdraftInterestDerived,final BigDecimal totalWithholdTax,
final BigDecimal interestNotPosted, final LocalDate lastInterestCalculationDate) {
this.currency = currency; this.currency = currency;
this.totalDeposits = totalDeposits; this.totalDeposits = totalDeposits;
this.totalWithdrawals = totalWithdrawals; this.totalWithdrawals = totalWithdrawals;
@@ -57,5 +61,7 @@ public class SavingsAccountSummaryData {
this.totalPenaltyCharge = totalPenaltyCharge; this.totalPenaltyCharge = totalPenaltyCharge;
this.totalOverdraftInterestDerived = totalOverdraftInterestDerived; this.totalOverdraftInterestDerived = totalOverdraftInterestDerived;
this.totalWithholdTax = totalWithholdTax; this.totalWithholdTax = totalWithholdTax;
this.interestNotPosted = interestNotPosted;
this.lastInterestCalculationDate = lastInterestCalculationDate;
} }
} }
@@ -19,15 +19,20 @@
package org.apache.fineract.portfolio.savings.domain; package org.apache.fineract.portfolio.savings.domain;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Embeddable; import javax.persistence.Embeddable;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient; import javax.persistence.Transient;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.organisation.monetary.domain.Money;
import org.apache.fineract.portfolio.savings.domain.interest.PostingPeriod; import org.apache.fineract.portfolio.savings.domain.interest.PostingPeriod;
import org.joda.time.LocalDate;
/** /**
* {@link SavingsAccountSummary} encapsulates all the summary details of a * {@link SavingsAccountSummary} encapsulates all the summary details of a
@@ -76,6 +81,10 @@ public final class SavingsAccountSummary {
@Column(name = "total_withhold_tax_derived", scale = 6, precision = 19) @Column(name = "total_withhold_tax_derived", scale = 6, precision = 19)
private BigDecimal totalWithholdTax; private BigDecimal totalWithholdTax;
@Temporal(TemporalType.DATE)
@Column(name = "last_interest_calculation_date")
private Date lastInterestCalculationDate;
protected SavingsAccountSummary() { protected SavingsAccountSummary() {
// //
} }
@@ -104,13 +113,13 @@ public final class SavingsAccountSummary {
public void updateFromInterestPeriodSummaries(final MonetaryCurrency currency, final List<PostingPeriod> allPostingPeriods) { public void updateFromInterestPeriodSummaries(final MonetaryCurrency currency, final List<PostingPeriod> allPostingPeriods) {
Money totalEarned = Money.zero(currency); Money totalEarned = Money.zero(currency);
LocalDate interestCalculationDate = DateUtils.getLocalDateOfTenant();
for (final PostingPeriod period : allPostingPeriods) { for (final PostingPeriod period : allPostingPeriods) {
Money interestEarned = period.interest(); Money interestEarned = period.interest();
interestEarned = interestEarned == null ? Money.zero(currency) : interestEarned; interestEarned = interestEarned == null ? Money.zero(currency) : interestEarned;
totalEarned = totalEarned.plus(interestEarned); totalEarned = totalEarned.plus(interestEarned);
} }
this.lastInterestCalculationDate = interestCalculationDate.toDate();
this.totalInterestEarned = totalEarned.getAmount(); this.totalInterestEarned = totalEarned.getAmount();
} }
@@ -741,7 +741,7 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead
final SavingsAccountSummaryData summary = new SavingsAccountSummaryData(currency, totalDeposits, totalWithdrawals, final SavingsAccountSummaryData summary = new SavingsAccountSummaryData(currency, totalDeposits, totalWithdrawals,
totalWithdrawalFees, totalAnnualFees, totalInterestEarned, totalInterestPosted, accountBalance, totalFeeCharge, totalWithdrawalFees, totalAnnualFees, totalInterestEarned, totalInterestPosted, accountBalance, totalFeeCharge,
totalPenaltyCharge, totalOverdraftInterestDerived, totalWithholdTax); totalPenaltyCharge, totalOverdraftInterestDerived, totalWithholdTax, null, null);
return DepositAccountData.instance(id, accountNo, externalId, groupId, groupName, clientId, clientName, productId, productName, return DepositAccountData.instance(id, accountNo, externalId, groupId, groupName, clientId, clientName, productId, productName,
fieldOfficerId, fieldOfficerName, status, timeline, currency, nominalAnnualInterestRate, interestCompoundingPeriodType, fieldOfficerId, fieldOfficerName, status, timeline, currency, nominalAnnualInterestRate, interestCompoundingPeriodType,
@@ -289,8 +289,9 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead
sqlBuilder.append("sa.min_required_balance as minRequiredBalance, "); sqlBuilder.append("sa.min_required_balance as minRequiredBalance, ");
sqlBuilder.append("sa.enforce_min_required_balance as enforceMinRequiredBalance, "); sqlBuilder.append("sa.enforce_min_required_balance as enforceMinRequiredBalance, ");
sqlBuilder.append("sa.on_hold_funds_derived as onHoldFunds, "); sqlBuilder.append("sa.on_hold_funds_derived as onHoldFunds, ");
sqlBuilder.append("sa.withhold_tax as withHoldTax,"); sqlBuilder.append("sa.withhold_tax as withHoldTax, ");
sqlBuilder.append("sa.total_withhold_tax_derived as totalWithholdTax,"); sqlBuilder.append("sa.total_withhold_tax_derived as totalWithholdTax, ");
sqlBuilder.append("sa.last_interest_calculation_date as lastInterestCalculationDate, ");
sqlBuilder.append("tg.id as taxGroupId, tg.name as taxGroupName, "); sqlBuilder.append("tg.id as taxGroupId, tg.name as taxGroupName, ");
sqlBuilder.append("(select IFNULL(max(sat.transaction_date),sa.activatedon_date) "); sqlBuilder.append("(select IFNULL(max(sat.transaction_date),sa.activatedon_date) ");
sqlBuilder.append("from m_savings_account_transaction as sat "); sqlBuilder.append("from m_savings_account_transaction as sat ");
@@ -498,9 +499,16 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead
"minBalanceForInterestCalculation"); "minBalanceForInterestCalculation");
final BigDecimal onHoldFunds = rs.getBigDecimal("onHoldFunds"); final BigDecimal onHoldFunds = rs.getBigDecimal("onHoldFunds");
BigDecimal interestNotPosted = BigDecimal.ZERO;
if (totalInterestEarned != null) {
interestNotPosted = totalInterestEarned.subtract(totalInterestPosted).add(totalOverdraftInterestDerived);
}
LocalDate lastInterestCalculationDate = JdbcSupport.getLocalDate(rs, "lastInterestCalculationDate");
final SavingsAccountSummaryData summary = new SavingsAccountSummaryData(currency, totalDeposits, totalWithdrawals, final SavingsAccountSummaryData summary = new SavingsAccountSummaryData(currency, totalDeposits, totalWithdrawals,
totalWithdrawalFees, totalAnnualFees, totalInterestEarned, totalInterestPosted, accountBalance, totalFeeCharge, totalWithdrawalFees, totalAnnualFees, totalInterestEarned, totalInterestPosted, accountBalance, totalFeeCharge,
totalPenaltyCharge, totalOverdraftInterestDerived, totalWithholdTax); totalPenaltyCharge, totalOverdraftInterestDerived, totalWithholdTax, interestNotPosted, lastInterestCalculationDate);
final boolean withHoldTax = rs.getBoolean("withHoldTax"); final boolean withHoldTax = rs.getBoolean("withHoldTax");
final Long taxGroupId = JdbcSupport.getLong(rs, "taxGroupId"); final Long taxGroupId = JdbcSupport.getLong(rs, "taxGroupId");
@@ -0,0 +1,5 @@
ALTER TABLE `m_savings_account`
ADD COLUMN `last_interest_calculation_date` DATE NULL DEFAULT NULL AFTER `tax_group_id`;