diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java index 05fad4c64..46c0902db 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java @@ -143,4 +143,11 @@ public class LoanProductProvisioningEntry extends AbstractPersistableCustom { return Objects.hash(entry.getId(), criteriaId, office.getId(), currencyCode, loanProduct.getId(), provisioningCategory.getId(), overdueInDays, reservedAmount, liabilityAccount.getId(), expenseAccount.getId()); } + + public int partialHashCode() { + // this is used to group together all the entries that have similar parameters (excluding the amount reserved) + // rather than a check for if the objects are the same based on their values, this tells if they are similar + return Objects.hash(entry.getId(), criteriaId, office.getId(), currencyCode, loanProduct.getId(), provisioningCategory.getId(), + overdueInDays, liabilityAccount.getId(), expenseAccount.getId()); + } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java index 2307d4b72..ba226f1a3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java @@ -230,7 +230,7 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements private Collection generateLoanProvisioningEntry(ProvisioningEntry parent, Date date) { Collection entries = this.provisioningEntriesReadPlatformService .retrieveLoanProductsProvisioningData(date); - Map provisioningEntries = new HashMap<>(); + Map provisioningEntries = new HashMap<>(); for (LoanProductProvisioningEntryData data : entries) { LoanProduct loanProduct = this.loanProductRepository.findById(data.getProductId()).get(); Office office = this.officeRepositoryWrapper.findOneWithNotFoundDetection(data.getOfficeId()); @@ -245,10 +245,10 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements provisioningCategory, data.getOverdueInDays(), amountToReserve.getAmount(), liabilityAccount, expenseAccount, criteraId); entry.setProvisioningEntry(parent); - if (!provisioningEntries.containsKey(entry)) { - provisioningEntries.put(entry, entry); + if (!provisioningEntries.containsKey(entry.partialHashCode())) { + provisioningEntries.put(entry.partialHashCode(), entry); } else { - LoanProductProvisioningEntry entry1 = provisioningEntries.get(entry); + LoanProductProvisioningEntry entry1 = provisioningEntries.get(entry.partialHashCode()); entry1.addReservedAmount(entry.getReservedAmount()); } }