You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by pt...@apache.org on 2021/10/09 01:00:19 UTC

[fineract] branch develop updated: Change the deduplication logic used in loan loss provisioning (FINERACT-1404)

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 <ja...@gmail.com>
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());
             }
         }