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

Reply via email to