From e81d810b244cd24093e65e062f6682182156ed85 Mon Sep 17 00:00:00 2001 From: avikganguly01 Date: Tue, 19 Sep 2017 18:39:48 +0530 Subject: [PATCH] Fineract-521 --- .../portfolio/savings/domain/SavingsAccount.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java index d7a629886..e87470193 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java @@ -1085,13 +1085,21 @@ public class SavingsAccount extends AbstractPersistableCustom { // deal with potential minRequiredBalance and // enforceMinRequiredBalance - if (!isException && transaction.canProcessBalanceCheck()) { + if (!isException && transaction.canProcessBalanceCheck() && !isOverdraft()) { if (runningBalance.minus(minRequiredBalance).isLessThanZero()) { throw new InsufficientAccountBalanceException( "transactionAmount", getAccountBalance(), withdrawalFee, transactionAmount); } } lastSavingsDate = transaction.transactionLocalDate(); } + + //In overdraft cases, minRequiredBalance can be in violation after interest posting + //and should be checked after processing all transactions + if(isOverdraft()) { + if (runningBalance.minus(minRequiredBalance).isLessThanZero()) { throw new InsufficientAccountBalanceException( + "transactionAmount", getAccountBalance(), withdrawalFee, transactionAmount); } + } + if (this.getSavingsHoldAmount().compareTo(BigDecimal.ZERO) == 1) { if (runningBalance.minus(this.getSavingsHoldAmount()).isLessThanZero()) { throw new InsufficientAccountBalanceException("transactionAmount", getAccountBalance(), withdrawalFee, @@ -3048,5 +3056,9 @@ public class SavingsAccount extends AbstractPersistableCustom { public void releaseAmount(BigDecimal amount) { this.savingsOnHoldAmount = getSavingsHoldAmount().subtract(amount); } + + private boolean isOverdraft() { + return allowOverdraft; + } } \ No newline at end of file