This is an automated email from the ASF dual-hosted git repository.

ptuomola pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new d252188  Change the deduplication logic used in loan loss provisioning 
(FINERACT-1404)
d252188 is described below

commit d2521886ba579a12a49ed7861e6405bdbbf4bb7e
Author: Sidney Wasibani <[email protected]>
AuthorDate: Fri Oct 8 11:14:55 2021 +0300

    Change the deduplication logic used in loan loss provisioning 
(FINERACT-1404)
---
 .../provisioning/domain/LoanProductProvisioningEntry.java         | 7 +++++++
 .../ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java | 8 ++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

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 05fad4c..46c0902 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 2307d4b..ba226f1 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<LoanProductProvisioningEntry> 
generateLoanProvisioningEntry(ProvisioningEntry parent, Date date) {
         Collection<LoanProductProvisioningEntryData> entries = 
this.provisioningEntriesReadPlatformService
                 .retrieveLoanProductsProvisioningData(date);
-        Map<LoanProductProvisioningEntry, LoanProductProvisioningEntry> 
provisioningEntries = new HashMap<>();
+        Map<Integer, LoanProductProvisioningEntry> 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());
             }
         }

Reply via email to