FINERACT-1724: Added delinquentDate to Delinquency Range Changed events

This commit is contained in:
Arnold Galovics
2023-02-14 17:38:13 +01:00
committed by Arnold Gálovics
parent 201295814b
commit 0338479212
3 changed files with 34 additions and 2 deletions
@@ -42,6 +42,14 @@
"name": "amount", "name": "amount",
"doc": "Contains installments total, fee, interest, principal and penalty amount summaries", "doc": "Contains installments total, fee, interest, principal and penalty amount summaries",
"type": "org.apache.fineract.avro.loan.v1.LoanAmountDataV1" "type": "org.apache.fineract.avro.loan.v1.LoanAmountDataV1"
},
{
"default": null,
"name": "delinquentDate",
"type": [
"null",
"string"
]
} }
] ]
} }
@@ -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.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.LoanChargeDataMapper;
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanDelinquencyRangeDataMapper; 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.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; 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.data.LoanAccountData;
import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
@@ -55,9 +58,12 @@ public class LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB
private final LoanChargeReadPlatformService loanChargeReadPlatformService; private final LoanChargeReadPlatformService loanChargeReadPlatformService;
private final DelinquencyReadPlatformService delinquencyReadPlatformService;
private final LoanChargeDataMapper chargeMapper; private final LoanChargeDataMapper chargeMapper;
private final CurrencyDataMapper currencyMapper; private final CurrencyDataMapper currencyMapper;
private final AvroDateTimeMapper dataTimeMapper;
@Override @Override
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) { protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
@@ -67,6 +73,8 @@ public class LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB
String accountNumber = data.getAccountNo(); String accountNumber = data.getAccountNo();
String externalId = data.getExternalId().getValue(); String externalId = data.getExternalId().getValue();
MonetaryCurrency loanCurrency = event.get().getCurrency(); MonetaryCurrency loanCurrency = event.get().getCurrency();
CollectionData delinquentData = delinquencyReadPlatformService.calculateLoanCollectionData(id);
String delinquentDate = dataTimeMapper.mapLocalDate(delinquentData.getDelinquentDate());
List<LoanChargeDataRangeViewV1> charges = loanChargeReadPlatformService.retrieveLoanCharges(id)// List<LoanChargeDataRangeViewV1> charges = loanChargeReadPlatformService.retrieveLoanCharges(id)//
.stream()// .stream()//
@@ -95,6 +103,7 @@ public class LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB
.setCharges(charges)// .setCharges(charges)//
.setAmount(amount)// .setAmount(amount)//
.setCurrency(currencyMapper.map(data.getCurrency()))// .setCurrency(currencyMapper.map(data.getCurrency()))//
.setDelinquentDate(delinquentDate)//
.build(); .build();
} }
@@ -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.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.LoanChargeDataMapperImpl;
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanDelinquencyRangeDataMapperImpl; 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.data.CurrencyData;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
import org.apache.fineract.organisation.monetary.domain.Money; 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.ChargePaymentMode;
import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType;
import org.apache.fineract.portfolio.delinquency.data.DelinquencyRangeData; 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.data.LoanAccountData;
import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
@@ -82,6 +85,12 @@ public class LoanAccountDelinquencyRangeEventSerializerTest {
@Mock @Mock
private LoanChargeReadPlatformService loanChargeReadPlatformService; private LoanChargeReadPlatformService loanChargeReadPlatformService;
@Mock
private DelinquencyReadPlatformService delinquencyReadPlatformService;
@Mock
private AvroDateTimeMapper mapper;
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
ThreadLocalContextUtil.setTenant(new FineractPlatformTenant(1L, "default", "Default", "Asia/Kolkata", null)); ThreadLocalContextUtil.setTenant(new FineractPlatformTenant(1L, "default", "Default", "Asia/Kolkata", null));
@@ -94,12 +103,15 @@ public class LoanAccountDelinquencyRangeEventSerializerTest {
// given // given
LoanDelinquencyRangeChangeBusinessEventSerializer serializer = new LoanDelinquencyRangeChangeBusinessEventSerializer( LoanDelinquencyRangeChangeBusinessEventSerializer serializer = new LoanDelinquencyRangeChangeBusinessEventSerializer(
loanReadPlatformService, new LoanDelinquencyRangeDataMapperImpl(), loanChargeReadPlatformService, loanReadPlatformService, new LoanDelinquencyRangeDataMapperImpl(), loanChargeReadPlatformService,
new LoanChargeDataMapperImpl(), new CurrencyDataMapperImpl()); delinquencyReadPlatformService, new LoanChargeDataMapperImpl(), new CurrencyDataMapperImpl(), mapper);
Loan loanForProcessing = Mockito.mock(Loan.class); Loan loanForProcessing = Mockito.mock(Loan.class);
LoanAccountData loanAccountData = mock(LoanAccountData.class); LoanAccountData loanAccountData = mock(LoanAccountData.class);
CollectionData delinquentData = mock(CollectionData.class);
MonetaryCurrency loanCurrency = new MonetaryCurrency("CODE", 1, 1); MonetaryCurrency loanCurrency = new MonetaryCurrency("CODE", 1, 1);
MockedStatic<MoneyHelper> moneyHelper = Mockito.mockStatic(MoneyHelper.class); MockedStatic<MoneyHelper> moneyHelper = Mockito.mockStatic(MoneyHelper.class);
String delinquentDateAsStr = "2022-12-01";
LocalDate delinquentDate = LocalDate.parse(delinquentDateAsStr);
when(loanForProcessing.getId()).thenReturn(1L); when(loanForProcessing.getId()).thenReturn(1L);
when(loanAccountData.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(), when(loanAccountData.getCurrency()).thenAnswer(a -> new CurrencyData(loanCurrency.getCode(), loanCurrency.getDigitsAfterDecimal(),
loanCurrency.getCurrencyInMultiplesOf())); loanCurrency.getCurrencyInMultiplesOf()));
when(loanForProcessing.getCurrency()).thenReturn(loanCurrency); when(loanForProcessing.getCurrency()).thenReturn(loanCurrency);
when(delinquentData.getDelinquentDate()).thenReturn(delinquentDate);
when(loanReadPlatformService.retrieveOne(any(Long.class))).thenReturn(loanAccountData); 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); LoanDelinquencyRangeChangeBusinessEvent event = new LoanDelinquencyRangeChangeBusinessEvent(loanForProcessing);
List<LoanRepaymentScheduleInstallment> repaymentScheduleInstallments = new ArrayList<>(); 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().getInterestAmount().compareTo(new BigDecimal("30.0")));
assertEquals(0, data.getAmount().getFeeAmount().compareTo(new BigDecimal("5.0"))); assertEquals(0, data.getAmount().getFeeAmount().compareTo(new BigDecimal("5.0")));
assertEquals(0, data.getAmount().getPenaltyAmount().compareTo(new BigDecimal("50.0"))); assertEquals(0, data.getAmount().getPenaltyAmount().compareTo(new BigDecimal("50.0")));
assertEquals(delinquentDateAsStr, data.getDelinquentDate());
// assertEquals(data, expectedSerializedData);
moneyHelper.close(); moneyHelper.close();
} }