diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanBusinessEventSerializer.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanBusinessEventSerializer.java index b87755523..be7d8343e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanBusinessEventSerializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanBusinessEventSerializer.java @@ -21,15 +21,20 @@ package org.apache.fineract.infrastructure.event.external.service.serialization. import java.util.Collection; import lombok.RequiredArgsConstructor; import org.apache.avro.generic.GenericContainer; +import org.apache.commons.collections.CollectionUtils; import org.apache.fineract.avro.generator.ByteBufferSerializable; import org.apache.fineract.avro.loan.v1.LoanAccountDataV1; import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent; import org.apache.fineract.infrastructure.event.business.domain.loan.LoanBusinessEvent; import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanAccountDataMapper; import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer; +import org.apache.fineract.portfolio.delinquency.service.DelinquencyReadPlatformService; +import org.apache.fineract.portfolio.loanaccount.data.CollectionData; import org.apache.fineract.portfolio.loanaccount.data.LoanAccountData; +import org.apache.fineract.portfolio.loanaccount.data.LoanChargeData; import org.apache.fineract.portfolio.loanaccount.data.LoanSummaryData; import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData; +import org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformService; import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService; import org.springframework.stereotype.Component; @@ -39,6 +44,8 @@ public class LoanBusinessEventSerializer extends AbstractBusinessEventSerializer private final LoanReadPlatformService service; private final LoanAccountDataMapper mapper; + private final LoanChargeReadPlatformService loanChargeReadPlatformService; + private final DelinquencyReadPlatformService delinquencyReadPlatformService; @Override public boolean canSerialize(BusinessEvent event) { @@ -48,10 +55,23 @@ public class LoanBusinessEventSerializer extends AbstractBusinessEventSerializer @Override protected ByteBufferSerializable toAvroDTO(BusinessEvent rawEvent) { LoanBusinessEvent event = (LoanBusinessEvent) rawEvent; - LoanAccountData data = service.retrieveOne(event.get().getId()); + Long loanId = event.get().getId(); + LoanAccountData data = service.retrieveOne(loanId); + data = service.fetchRepaymentScheduleData(data); + + Collection loanCharges = loanChargeReadPlatformService.retrieveLoanCharges(loanId); + if (CollectionUtils.isNotEmpty(loanCharges)) { + data.setCharges(loanCharges); + } + + if (data.isActive()) { + CollectionData delinquentData = delinquencyReadPlatformService.calculateLoanCollectionData(loanId); + data.setDelinquent(delinquentData); + } + if (data.getSummary() != null) { - final Collection currentLoanTransactions = service.retrieveLoanTransactions(event.get().getId()); + final Collection currentLoanTransactions = service.retrieveLoanTransactions(loanId); data.setSummary(LoanSummaryData.withTransactionAmountsSummary(data.getSummary(), currentLoanTransactions)); } return mapper.map(data);