This is an automated email from the ASF dual-hosted git repository. aleks pushed a commit to branch 1.8.2 in repository https://gitbox.apache.org/repos/asf/fineract.git
commit 2a6f4799e0e380edd90a888a872abbc70e49357a Author: logoutdhaval <[email protected]> AuthorDate: Fri Oct 7 13:24:06 2022 +0530 FINERACT-1755:withdrawal fee is not considered for interest calculation (#2639) --- .../data/SavingsAccountTransactionEnumData.java | 6 +-- .../SavingsInterestPostingJobIntegrationTest.java | 45 +++++++++++++++++++++- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java index 46157fcc2..510819cd8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java @@ -165,15 +165,15 @@ public class SavingsAccountTransactionEnumData implements Serializable { } public boolean isAnnualFee() { - return this.value.equals(SavingsAccountTransactionType.ANNUAL_FEE.getValue().toString()); + return Long.valueOf(SavingsAccountTransactionType.ANNUAL_FEE.getValue()).equals(this.id); } public boolean isPayCharge() { - return this.value.equals(SavingsAccountTransactionType.PAY_CHARGE.getValue().toString()); + return Long.valueOf(SavingsAccountTransactionType.PAY_CHARGE.getValue()).equals(this.id); } public boolean isWithdrawalFee() { - return this.value.equals(SavingsAccountTransactionType.WITHDRAWAL_FEE.getValue().toString()); + return Long.valueOf(SavingsAccountTransactionType.WITHDRAWAL_FEE.getValue()).equals(this.id); } } 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 3bd89a308..179406bd4 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 @@ -215,7 +215,31 @@ public class SavingsInterestPostingJobIntegrationTest { 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"); + assertEquals("800.4384", interestPostingTransaction.get("runningBalance").toString(), "Equality check for Balance"); + } + + @Test + public void testAccountBalanceWithWithdrawalFeeAfterInterestPostingJobInOverdraftAccount() { + 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 = createOverdraftSavingsAccountDailyPostingWithCharge(clientID, startDate); + + this.savingsAccountHelper.withdrawalFromSavingsAccount(savingsId, "1000", startDate, CommonConstants.RESPONSE_RESOURCE_ID); + HashMap summary = this.savingsAccountHelper.getSavingsSummary(savingsId); + Float balance = Float.parseFloat("-1100.0"); + assertEquals(balance, summary.get("accountBalance"), "Verifying account balance is -1100"); + + 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() - 3); + for (Map.Entry<String, Object> entry : interestPostingTransaction.entrySet()) { + LOG.info("{} - {}", entry.getKey(), entry.getValue().toString()); + } + assertEquals("-1100.3014", interestPostingTransaction.get("runningBalance").toString(), "Equality check for Balance"); } private Integer createSavingsAccountDailyPosting(final Integer clientID, final String startDate) { @@ -263,6 +287,25 @@ public class SavingsInterestPostingJobIntegrationTest { return savingsId; } + private Integer createOverdraftSavingsAccountDailyPostingWithCharge(final Integer clientID, final String startDate) { + final Integer savingsProductID = createSavingsProductDailyPostingOverdraft(); + 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);
