Skip to content

Commit 2a6f479

Browse files
logoutdhavalvidakovic
authored andcommitted
FINERACT-1755:withdrawal fee is not considered for interest calculation (#2639)
1 parent 90f854b commit 2a6f479

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,15 @@ public boolean isChargeTransaction() {
165165
}
166166

167167
public boolean isAnnualFee() {
168-
return this.value.equals(SavingsAccountTransactionType.ANNUAL_FEE.getValue().toString());
168+
return Long.valueOf(SavingsAccountTransactionType.ANNUAL_FEE.getValue()).equals(this.id);
169169
}
170170

171171
public boolean isPayCharge() {
172-
return this.value.equals(SavingsAccountTransactionType.PAY_CHARGE.getValue().toString());
172+
return Long.valueOf(SavingsAccountTransactionType.PAY_CHARGE.getValue()).equals(this.id);
173173
}
174174

175175
public boolean isWithdrawalFee() {
176-
return this.value.equals(SavingsAccountTransactionType.WITHDRAWAL_FEE.getValue().toString());
176+
return Long.valueOf(SavingsAccountTransactionType.WITHDRAWAL_FEE.getValue()).equals(this.id);
177177
}
178178

179179
}

integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsInterestPostingJobIntegrationTest.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,31 @@ public void testAccountBalanceWithWithdrawalFeeAfterInterestPostingJob() {
215215
for (Map.Entry<String, Object> entry : interestPostingTransaction.entrySet()) {
216216
LOG.info("{} - {}", entry.getKey(), entry.getValue().toString());
217217
}
218-
assertEquals("800.4932", interestPostingTransaction.get("runningBalance").toString(), "Equality check for Balance");
218+
assertEquals("800.4384", interestPostingTransaction.get("runningBalance").toString(), "Equality check for Balance");
219+
}
220+
221+
@Test
222+
public void testAccountBalanceWithWithdrawalFeeAfterInterestPostingJobInOverdraftAccount() {
223+
final String startDate = "21 June 2022";
224+
final String jobName = "Post Interest For Savings";
225+
final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, startDate);
226+
Assertions.assertNotNull(clientID);
227+
228+
final Integer savingsId = createOverdraftSavingsAccountDailyPostingWithCharge(clientID, startDate);
229+
230+
this.savingsAccountHelper.withdrawalFromSavingsAccount(savingsId, "1000", startDate, CommonConstants.RESPONSE_RESOURCE_ID);
231+
HashMap summary = this.savingsAccountHelper.getSavingsSummary(savingsId);
232+
Float balance = Float.parseFloat("-1100.0");
233+
assertEquals(balance, summary.get("accountBalance"), "Verifying account balance is -1100");
234+
235+
this.scheduleJobHelper.executeAndAwaitJob(jobName);
236+
Object transactionObj = this.savingsAccountHelper.getSavingsDetails(savingsId, "transactions");
237+
ArrayList<HashMap<String, Object>> transactions = (ArrayList<HashMap<String, Object>>) transactionObj;
238+
HashMap<String, Object> interestPostingTransaction = transactions.get(transactions.size() - 3);
239+
for (Map.Entry<String, Object> entry : interestPostingTransaction.entrySet()) {
240+
LOG.info("{} - {}", entry.getKey(), entry.getValue().toString());
241+
}
242+
assertEquals("-1100.3014", interestPostingTransaction.get("runningBalance").toString(), "Equality check for Balance");
219243
}
220244

221245
private Integer createSavingsAccountDailyPosting(final Integer clientID, final String startDate) {
@@ -263,6 +287,25 @@ private Integer createSavingsAccountDailyPostingWithCharge(final Integer clientI
263287
return savingsId;
264288
}
265289

290+
private Integer createOverdraftSavingsAccountDailyPostingWithCharge(final Integer clientID, final String startDate) {
291+
final Integer savingsProductID = createSavingsProductDailyPostingOverdraft();
292+
Assertions.assertNotNull(savingsProductID);
293+
final Integer savingsId = this.savingsAccountHelper.applyForSavingsApplicationOnDate(clientID, savingsProductID,
294+
ACCOUNT_TYPE_INDIVIDUAL, startDate);
295+
Assertions.assertNotNull(savingsId);
296+
297+
final Integer withdrawalChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
298+
ChargesHelper.getSavingsWithdrawalFeeJSON());
299+
Assertions.assertNotNull(withdrawalChargeId);
300+
301+
this.savingsAccountHelper.addChargesForSavings(savingsId, withdrawalChargeId, false);
302+
HashMap savingsStatusHashMap = this.savingsAccountHelper.approveSavingsOnDate(savingsId, startDate);
303+
SavingsStatusChecker.verifySavingsIsApproved(savingsStatusHashMap);
304+
savingsStatusHashMap = this.savingsAccountHelper.activateSavingsAccount(savingsId, startDate);
305+
SavingsStatusChecker.verifySavingsIsActive(savingsStatusHashMap);
306+
return savingsId;
307+
}
308+
266309
private Integer createSavingsAccountDailyPostingOverdraft(final Integer clientID, final String startDate) {
267310
final Integer savingsProductID = createSavingsProductDailyPostingOverdraft();
268311
Assertions.assertNotNull(savingsProductID);

0 commit comments

Comments
 (0)