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());
}
}