From 915f187bef81160a1cb75e2d12db4638db6c0cd0 Mon Sep 17 00:00:00 2001 From: Pramod Nuthakki Date: Fri, 7 Nov 2014 15:56:33 +0530 Subject: [PATCH] MIFOSX-1643 : modified charge payment to bypass running balance check --- .../ClientSavingsIntegrationTest.java | 5 +++-- .../portfolio/savings/domain/SavingsAccount.java | 4 ++-- .../savings/domain/SavingsAccountCharge.java | 16 ++++++++++++++++ .../domain/SavingsAccountChargePaidBy.java | 4 ++++ .../domain/SavingsAccountTransaction.java | 9 +++++++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientSavingsIntegrationTest.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientSavingsIntegrationTest.java index f008f8875..b4b514ff7 100755 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientSavingsIntegrationTest.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientSavingsIntegrationTest.java @@ -202,9 +202,10 @@ public class ClientSavingsIntegrationTest { Assert.assertNotNull(clientID); final String minBalanceForInterestCalculation = null; final String minRequiredBalance = "1500.0"; + final String openningBalance = "1600"; final String enforceMinRequiredBalance = "true"; final boolean allowOverdraft = false; - final Integer savingsProductID = createSavingsProduct(this.requestSpec, this.responseSpec, MINIMUM_OPENING_BALANCE, + final Integer savingsProductID = createSavingsProduct(this.requestSpec, this.responseSpec, openningBalance , minBalanceForInterestCalculation, minRequiredBalance, enforceMinRequiredBalance, allowOverdraft); Assert.assertNotNull(savingsProductID); @@ -227,7 +228,7 @@ public class ClientSavingsIntegrationTest { SavingsStatusChecker.verifySavingsIsActive(savingsStatusHashMap); HashMap summary = this.savingsAccountHelper.getSavingsSummary(savingsId); - Float balance = new Float(MINIMUM_OPENING_BALANCE); + Float balance = new Float(openningBalance); Float chargeAmt = 100f; balance -= chargeAmt; assertEquals("Verifying opening Balance", balance, summary.get("accountBalance")); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java index 2f9b14f2d..684269842 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java @@ -870,7 +870,7 @@ public class SavingsAccount extends AbstractPersistable { final BigDecimal withdrawalFee = null; // deal with potential minRequiredBalance and // enforceMinRequiredBalance - if (!isWithdrawBalance && transaction.isDebit()) { + if (!isWithdrawBalance && transaction.canProcessBalanceCheck()) { if (runningBalance.minus(minRequiredBalance).isLessThanZero()) { throw new InsufficientAccountBalanceException( "transactionAmount", getAccountBalance(), withdrawalFee, transactionAmount); } } @@ -891,7 +891,7 @@ public class SavingsAccount extends AbstractPersistable { } // enforceMinRequiredBalance - if (transaction.isDebit()) { + if (transaction.canProcessBalanceCheck()) { if (runningBalance.minus(minRequiredBalance).isLessThanZero()) { final List dataValidationErrors = new ArrayList<>(); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java index c4024419b..746373155 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java @@ -40,6 +40,10 @@ import org.mifosplatform.portfolio.charge.domain.ChargeTimeType; import org.mifosplatform.portfolio.charge.exception.SavingsAccountChargeWithoutMandatoryFieldException; import org.springframework.data.jpa.domain.AbstractPersistable; +/** + * @author dv6 + * + */ @Entity @Table(name = "m_savings_account_charge") public class SavingsAccountCharge extends AbstractPersistable { @@ -823,4 +827,16 @@ public class SavingsAccountCharge extends AbstractPersistable { public boolean isNotActive() { return !isActive(); } + + /** + * This method is to identify the charges which can override the savings + * rules(for example if there is a minimum enforced balance of 1000 on + * savings account with account balance of 1000, still these charges can be + * collected as these charges are initiated by system and it can bring down + * the balance below the enforced minimum balance). + * + */ + public boolean canOverriteSavingAccountRules() { + return !(this.isSavingsActivation() || this.isWithdrawalFee()); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountChargePaidBy.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountChargePaidBy.java index f824721fb..4da54a6fc 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountChargePaidBy.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountChargePaidBy.java @@ -77,4 +77,8 @@ public class SavingsAccountChargePaidBy extends AbstractPersistable { public boolean isPenaltyCharge() { return (this.savingsAccountCharge == null) ? false : this.savingsAccountCharge.isPenaltyCharge(); } + + public boolean canOverriteSavingAccountRules() { + return (this.savingsAccountCharge == null) ? false : this.savingsAccountCharge.canOverriteSavingAccountRules(); + } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountTransaction.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountTransaction.java index 23dc7280e..0a7126218 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountTransaction.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountTransaction.java @@ -514,6 +514,15 @@ public final class SavingsAccountTransaction extends AbstractPersistable { return SavingsAccountTransactionType.fromInt(this.typeOf).isWaiveCharge(); } + private boolean canOverriteSavingAccountRules() { + final SavingsAccountChargePaidBy chargePaidBy = getSavingsAccountChargePaidBy(); + return (isChargeTransaction() && chargePaidBy != null) ? chargePaidBy.canOverriteSavingAccountRules() : false; + } + + public boolean canProcessBalanceCheck() { + return isDebit() && !canOverriteSavingAccountRules(); + } + public boolean isFeeCharge() { final SavingsAccountChargePaidBy chargePaidBy = getSavingsAccountChargePaidBy(); return (isPayCharge() && chargePaidBy != null) ? chargePaidBy.isFeeCharge() : false;