FINERACT-1634: Invalid balance after withdrawal correction

This commit is contained in:
Dhaval Maniyar
2022-06-13 20:39:35 +05:30
parent 8e37f93baf
commit 49e67a01c8
3 changed files with 152 additions and 7 deletions
@@ -975,12 +975,12 @@ public class SavingsAccount extends AbstractPersistableCustom {
boolean isTransactionsModified = false;
for (final SavingsAccountTransaction transaction : accountTransactionsSorted) {
if (transaction.isReversed()) {
if (transaction.isReversed() || transaction.isReversalTransaction()) {
transaction.zeroBalanceFields();
} else {
Money overdraftAmount = Money.zero(this.currency);
Money transactionAmount = Money.zero(this.currency);
if (transaction.isCredit() || transaction.isAmountRelease()) {
if ((transaction.isCredit() || transaction.isAmountRelease())) {
if (runningBalance.isLessThanZero()) {
Money diffAmount = transaction.getAmount(this.currency).plus(runningBalance);
if (diffAmount.isGreaterThanZero()) {
@@ -998,7 +998,9 @@ public class SavingsAccount extends AbstractPersistableCustom {
}
runningBalance = runningBalance.plus(transactionAmount);
transaction.updateRunningBalance(runningBalance);
if (!transaction.getRunningBalance(transactionAmount.getCurrency()).isEqualTo(transactionAmount)) {
transaction.updateRunningBalance(runningBalance);
}
if (overdraftAmount.isZero() && runningBalance.isLessThanZero()) {
overdraftAmount = overdraftAmount.plus(runningBalance.getAmount().negate());
}
@@ -1407,9 +1409,9 @@ public class SavingsAccount extends AbstractPersistableCustom {
LocalDate lastSavingsDate = null;
final BigDecimal withdrawalFee = null;
for (final SavingsAccountTransaction transaction : transactionsSortedByDate) {
if (transaction.isNotReversed() && transaction.isCredit()) {
if (transaction.isNotReversed() && transaction.isCredit() && !transaction.isReversalTransaction()) {
runningBalance = runningBalance.plus(transaction.getAmount(this.currency));
} else if (transaction.isNotReversed() && transaction.isDebit()) {
} else if (transaction.isNotReversed() && transaction.isDebit() && !transaction.isReversalTransaction()) {
runningBalance = runningBalance.minus(transaction.getAmount(this.currency));
} else {
continue;
@@ -36,7 +36,8 @@ public final class SavingsAccountTransactionSummaryWrapper {
public BigDecimal calculateTotalDeposits(final MonetaryCurrency currency, final List<SavingsAccountTransaction> transactions) {
Money total = Money.zero(currency);
for (final SavingsAccountTransaction transaction : transactions) {
if (transaction.isDepositAndNotReversed() || transaction.isDividendPayoutAndNotReversed()) {
if ((transaction.isDepositAndNotReversed() || transaction.isDividendPayoutAndNotReversed())
&& !transaction.isReversalTransaction()) {
total = total.plus(transaction.getAmount(currency));
}
}
@@ -56,7 +57,7 @@ public final class SavingsAccountTransactionSummaryWrapper {
public BigDecimal calculateTotalWithdrawals(final MonetaryCurrency currency, final List<SavingsAccountTransaction> transactions) {
Money total = Money.zero(currency);
for (final SavingsAccountTransaction transaction : transactions) {
if (transaction.isWithdrawal() && transaction.isNotReversed()) {
if (transaction.isWithdrawal() && transaction.isNotReversed() && !transaction.isReversalTransaction()) {
total = total.plus(transaction.getAmount(currency));
}
}