This is an automated email from the ASF dual-hosted git repository.
arnold 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 033847921 FINERACT-1724: Added delinquentDate to Delinquency Range
Changed events
033847921 is described below
commit 033847921269394d9bbe42c9fcad1e57fad20948
Author: Arnold Galovics <[email protected]>
AuthorDate: Tue Feb 14 16:23:44 2023 +0100
FINERACT-1724: Added delinquentDate to Delinquency Range Changed events
---
.../loan/v1/LoanAccountDelinquencyRangeDataV1.avsc | 8 ++++++++
...DelinquencyRangeChangeBusinessEventSerializer.java | 9 +++++++++
...oanAccountDelinquencyRangeEventSerializerTest.java | 19 +++++++++++++++++--
3 files changed, 34 insertions(+), 2 deletions(-)
diff --git
a/fineract-avro-schemas/src/main/avro/loan/v1/LoanAccountDelinquencyRangeDataV1.avsc
b/fineract-avro-schemas/src/main/avro/loan/v1/LoanAccountDelinquencyRangeDataV1.avsc
index b9bb2dbf1..3da294421 100644
---
a/fineract-avro-schemas/src/main/avro/loan/v1/LoanAccountDelinquencyRangeDataV1.avsc
+++
b/fineract-avro-schemas/src/main/avro/loan/v1/LoanAccountDelinquencyRangeDataV1.avsc
@@ -42,6 +42,14 @@
"name": "amount",
"doc": "Contains installments total, fee, interest, principal and
penalty amount summaries",
"type": "org.apache.fineract.avro.loan.v1.LoanAmountDataV1"
+ },
+ {
+ "default": null,
+ "name": "delinquentDate",
+ "type": [
+ "null",
+ "string"
+ ]
}
]
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanDelinquencyRangeChangeBusinessEventSerializer.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanDelinquencyRangeChangeBusinessEventSerializer.java
index bc448ff01..e04156482 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanDelinquencyRangeChangeBusinessEventSerializer.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanDelinquencyRangeChangeBusinessEventSerializer.java
@@ -33,8 +33,11 @@ import
org.apache.fineract.infrastructure.event.business.domain.loan.LoanDelinqu
import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.generic.CurrencyDataMapper;
import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanChargeDataMapper;
import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanDelinquencyRangeDataMapper;
+import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.AvroDateTimeMapper;
import
org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
+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.domain.Loan;
import
org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
@@ -55,9 +58,12 @@ public class
LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB
private final LoanChargeReadPlatformService loanChargeReadPlatformService;
+ private final DelinquencyReadPlatformService
delinquencyReadPlatformService;
+
private final LoanChargeDataMapper chargeMapper;
private final CurrencyDataMapper currencyMapper;
+ private final AvroDateTimeMapper dataTimeMapper;
@Override
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
@@ -67,6 +73,8 @@ public class
LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB
String accountNumber = data.getAccountNo();
String externalId = data.getExternalId().getValue();
MonetaryCurrency loanCurrency = event.get().getCurrency();
+ CollectionData delinquentData =
delinquencyReadPlatformService.calculateLoanCollectionData(id);
+ String delinquentDate =
dataTimeMapper.mapLocalDate(delinquentData.getDelinquentDate());
List<LoanChargeDataRangeViewV1> charges =
loanChargeReadPlatformService.retrieveLoanCharges(id)//
.stream()//
@@ -95,6 +103,7 @@ public class
LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB
.setCharges(charges)//
.setAmount(amount)//
.setCurrency(currencyMapper.map(data.getCurrency()))//
+ .setDelinquentDate(delinquentDate)//
.build();
}
diff --git
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java
index 78f6b9205..c92d22c4b 100644
---
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java
+++
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java
@@ -47,6 +47,7 @@ import
org.apache.fineract.infrastructure.event.business.domain.loan.LoanDelinqu
import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.generic.CurrencyDataMapperImpl;
import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanChargeDataMapperImpl;
import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanDelinquencyRangeDataMapperImpl;
+import
org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.AvroDateTimeMapper;
import org.apache.fineract.organisation.monetary.data.CurrencyData;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
import org.apache.fineract.organisation.monetary.domain.Money;
@@ -57,6 +58,8 @@ import
org.apache.fineract.portfolio.charge.domain.ChargeCalculationType;
import org.apache.fineract.portfolio.charge.domain.ChargePaymentMode;
import org.apache.fineract.portfolio.charge.domain.ChargeTimeType;
import org.apache.fineract.portfolio.delinquency.data.DelinquencyRangeData;
+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.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
@@ -82,6 +85,12 @@ public class LoanAccountDelinquencyRangeEventSerializerTest {
@Mock
private LoanChargeReadPlatformService loanChargeReadPlatformService;
+ @Mock
+ private DelinquencyReadPlatformService delinquencyReadPlatformService;
+
+ @Mock
+ private AvroDateTimeMapper mapper;
+
@BeforeEach
public void setUp() {
ThreadLocalContextUtil.setTenant(new FineractPlatformTenant(1L,
"default", "Default", "Asia/Kolkata", null));
@@ -94,12 +103,15 @@ public class
LoanAccountDelinquencyRangeEventSerializerTest {
// given
LoanDelinquencyRangeChangeBusinessEventSerializer serializer = new
LoanDelinquencyRangeChangeBusinessEventSerializer(
loanReadPlatformService, new
LoanDelinquencyRangeDataMapperImpl(), loanChargeReadPlatformService,
- new LoanChargeDataMapperImpl(), new CurrencyDataMapperImpl());
+ delinquencyReadPlatformService, new
LoanChargeDataMapperImpl(), new CurrencyDataMapperImpl(), mapper);
Loan loanForProcessing = Mockito.mock(Loan.class);
LoanAccountData loanAccountData = mock(LoanAccountData.class);
+ CollectionData delinquentData = mock(CollectionData.class);
MonetaryCurrency loanCurrency = new MonetaryCurrency("CODE", 1, 1);
MockedStatic<MoneyHelper> moneyHelper =
Mockito.mockStatic(MoneyHelper.class);
+ String delinquentDateAsStr = "2022-12-01";
+ LocalDate delinquentDate = LocalDate.parse(delinquentDateAsStr);
when(loanForProcessing.getId()).thenReturn(1L);
when(loanAccountData.getId()).thenReturn(1L);
@@ -109,7 +121,10 @@ public class
LoanAccountDelinquencyRangeEventSerializerTest {
when(loanAccountData.getCurrency()).thenAnswer(a -> new
CurrencyData(loanCurrency.getCode(), loanCurrency.getDigitsAfterDecimal(),
loanCurrency.getCurrencyInMultiplesOf()));
when(loanForProcessing.getCurrency()).thenReturn(loanCurrency);
+ when(delinquentData.getDelinquentDate()).thenReturn(delinquentDate);
when(loanReadPlatformService.retrieveOne(any(Long.class))).thenReturn(loanAccountData);
+
when(delinquencyReadPlatformService.calculateLoanCollectionData(any(Long.class))).thenReturn(delinquentData);
+
when(mapper.mapLocalDate(delinquentDate)).thenReturn(delinquentDateAsStr);
LoanDelinquencyRangeChangeBusinessEvent event = new
LoanDelinquencyRangeChangeBusinessEvent(loanForProcessing);
List<LoanRepaymentScheduleInstallment> repaymentScheduleInstallments =
new ArrayList<>();
@@ -141,8 +156,8 @@ public class LoanAccountDelinquencyRangeEventSerializerTest
{
assertEquals(0, data.getAmount().getInterestAmount().compareTo(new
BigDecimal("30.0")));
assertEquals(0, data.getAmount().getFeeAmount().compareTo(new
BigDecimal("5.0")));
assertEquals(0, data.getAmount().getPenaltyAmount().compareTo(new
BigDecimal("50.0")));
+ assertEquals(delinquentDateAsStr, data.getDelinquentDate());
- // assertEquals(data, expectedSerializedData);
moneyHelper.close();
}