Change the deduplication logic used in loan loss provisioning (FINERACT-1404)

This commit is contained in:
Sidney Wasibani
2021-10-09 09:00:11 +08:00
committed by Petri Tuomola
parent bcdf9df136
commit d2521886ba
2 changed files with 11 additions and 4 deletions
@@ -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());
}
}
@@ -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());
}
}