You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ma...@apache.org on 2022/06/25 09:10:58 UTC
[fineract] branch develop updated: FINERACT-1645:Invalid Balance after Interest posting with withdrawal fee
This is an automated email from the ASF dual-hosted git repository.
manojvm pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 44e1e4478 FINERACT-1645:Invalid Balance after Interest posting with withdrawal fee
new 7e680729f Merge pull request #2379 from logoutdhaval/fineract-1645
44e1e4478 is described below
commit 44e1e447858b91a3279f5161d1f456d27dd2a19e
Author: Dhaval Maniyar <dh...@Dhavals-MacBook-Pro.local>
AuthorDate: Fri Jun 24 00:05:56 2022 +0530
FINERACT-1645:Invalid Balance after Interest posting with withdrawal fee
---
.../data/SavingsAccountTransactionData.java | 6 ++-
.../SavingsInterestPostingJobIntegrationTest.java | 45 ++++++++++++++++++++++
2 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java
index 5afb3fb71..295baaf3a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java
@@ -155,7 +155,7 @@ public final class SavingsAccountTransactionData implements Serializable {
}
public boolean isWithdrawalFeeAndNotReversed() {
- return this.transactionType.isWithdrawalFee() && isNotReversed();
+ return this.transactionType.isFeeDeduction() && isNotReversed();
}
public boolean isPayCharge() {
@@ -186,6 +186,10 @@ public final class SavingsAccountTransactionData implements Serializable {
return Money.of(currency, this.runningBalance);
}
+ public Money getRunningBalance(final MonetaryCurrency currency) {
+ return Money.of(currency, this.runningBalance);
+ }
+
public boolean isDepositAndNotReversed() {
return this.transactionType.isDeposit() && isNotReversed();
}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsInterestPostingJobIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsInterestPostingJobIntegrationTest.java
index 4a2925d7c..31ddc620f 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsInterestPostingJobIntegrationTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsInterestPostingJobIntegrationTest.java
@@ -33,6 +33,7 @@ import org.apache.fineract.integrationtests.common.CommonConstants;
import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper;
import org.apache.fineract.integrationtests.common.SchedulerJobHelper;
import org.apache.fineract.integrationtests.common.Utils;
+import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker;
@@ -146,6 +147,31 @@ public class SavingsInterestPostingJobIntegrationTest {
}
+ @Test
+ public void testAccountBalanceWithWithdrawalFeeAfterInterestPostingJob() {
+ final String startDate = "21 June 2022";
+ final String jobName = "Post Interest For Savings";
+ final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, startDate);
+ Assertions.assertNotNull(clientID);
+
+ final Integer savingsId = createSavingsAccountDailyPostingWithCharge(clientID, startDate);
+ this.savingsAccountHelper.depositToSavingsAccount(savingsId, "1000", startDate, CommonConstants.RESPONSE_RESOURCE_ID);
+
+ this.savingsAccountHelper.withdrawalFromSavingsAccount(savingsId, "100", startDate, CommonConstants.RESPONSE_RESOURCE_ID);
+ HashMap summary = this.savingsAccountHelper.getSavingsSummary(savingsId);
+ Float balance = Float.parseFloat("800.0");
+ assertEquals(balance, summary.get("accountBalance"), "Verifying account balance is 800");
+
+ this.scheduleJobHelper.executeAndAwaitJob(jobName);
+ Object transactionObj = this.savingsAccountHelper.getSavingsDetails(savingsId, "transactions");
+ ArrayList<HashMap<String, Object>> transactions = (ArrayList<HashMap<String, Object>>) transactionObj;
+ HashMap<String, Object> interestPostingTransaction = transactions.get(transactions.size() - 5);
+ for (Map.Entry<String, Object> entry : interestPostingTransaction.entrySet()) {
+ LOG.info("{} - {}", entry.getKey(), entry.getValue().toString());
+ }
+ assertEquals("800.4932", interestPostingTransaction.get("runningBalance").toString(), "Equality check for Balance");
+ }
+
private Integer createSavingsAccountDailyPosting(final Integer clientID, final String startDate) {
final Integer savingsProductID = createSavingsProductDailyPosting();
Assertions.assertNotNull(savingsProductID);
@@ -159,6 +185,25 @@ public class SavingsInterestPostingJobIntegrationTest {
return savingsId;
}
+ private Integer createSavingsAccountDailyPostingWithCharge(final Integer clientID, final String startDate) {
+ final Integer savingsProductID = createSavingsProductDailyPosting();
+ Assertions.assertNotNull(savingsProductID);
+ final Integer savingsId = this.savingsAccountHelper.applyForSavingsApplicationOnDate(clientID, savingsProductID,
+ ACCOUNT_TYPE_INDIVIDUAL, startDate);
+ Assertions.assertNotNull(savingsId);
+
+ final Integer withdrawalChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getSavingsWithdrawalFeeJSON());
+ Assertions.assertNotNull(withdrawalChargeId);
+
+ this.savingsAccountHelper.addChargesForSavings(savingsId, withdrawalChargeId, false);
+ HashMap savingsStatusHashMap = this.savingsAccountHelper.approveSavingsOnDate(savingsId, startDate);
+ SavingsStatusChecker.verifySavingsIsApproved(savingsStatusHashMap);
+ savingsStatusHashMap = this.savingsAccountHelper.activateSavingsAccount(savingsId, startDate);
+ SavingsStatusChecker.verifySavingsIsActive(savingsStatusHashMap);
+ return savingsId;
+ }
+
private Integer createSavingsAccountDailyPostingOverdraft(final Integer clientID, final String startDate) {
final Integer savingsProductID = createSavingsProductDailyPostingOverdraft();
Assertions.assertNotNull(savingsProductID);