From 9d3f05ed6808d7db70b69f07fdfd20693c1c3301 Mon Sep 17 00:00:00 2001 From: Harshdhall01 Date: Fri, 15 May 2026 23:07:00 +0530 Subject: [PATCH] FINERACT-2421: Add equals() and hashCode() to LoanTransaction --- .../loanaccount/domain/LoanTransaction.java | 21 +++++++++++++++++-- ...edPaymentScheduleTransactionProcessor.java | 4 ++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java index 168ab04ab32..c74cfbc9782 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java @@ -35,6 +35,7 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.function.Predicate; import lombok.Getter; @@ -1014,8 +1015,24 @@ public void updateAmount(BigDecimal bigDecimal) { this.amount = bigDecimal; } - // TODO missing hashCode(), equals(Object obj), but probably OK as long as - // this is never stored in a Collection. + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof LoanTransaction other)) { + return false; + } + if (getId() == null || other.getId() == null) { + return false; + } + return Objects.equals(getId(), other.getId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId()); + } public void updateTransactionDate(final LocalDate transactionDate) { this.dateOf = transactionDate; diff --git a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java index 9fe606c8d57..da9c11254f8 100644 --- a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java +++ b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java @@ -1264,7 +1264,7 @@ private Map adjustOriginalAllocationWithFormerChargebacks // let's figure out the original transaction for these chargebacks, and order them by ascending order Comparator comparator = LoanTransactionComparator.INSTANCE; List chargebacksForTheSameOriginal = chargebacks.stream() - .filter(tr -> findChargebackOriginalTransaction(tr, ctx) == originalTransaction + .filter(tr -> Objects.equals(findChargebackOriginalTransaction(tr, ctx), originalTransaction) && comparator.compare(tr, chargebackTransaction) < 0) .sorted(comparator).toList(); @@ -1355,7 +1355,7 @@ private Predicate hasMatchingToLoanTransaction(Long id, private Predicate hasMatchingToLoanTransaction(LoanTransaction loanTransaction, LoanTransactionRelationTypeEnum typeEnum) { - return relation -> relation.getRelationType().equals(typeEnum) && relation.getToTransaction() == loanTransaction; + return relation -> relation.getRelationType().equals(typeEnum) && Objects.equals(relation.getToTransaction(), loanTransaction); } protected void handleRefund(LoanTransaction loanTransaction, TransactionCtx ctx) {