FINERACT-1634: Invalid balance after withdrawal correction
This commit is contained in:
+7
-5
@@ -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;
|
||||
|
||||
+3
-2
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user