FINERACT-2321: Adding arrears days to loan/at-date api

This commit is contained in:
soticsenge
2025-07-10 16:24:32 +02:00
committed by GitHub
parent 5a0115e6ec
commit 93bfc6fb66
7 changed files with 189 additions and 5 deletions
@@ -23,6 +23,7 @@ import org.apache.fineract.infrastructure.core.config.MapstructMapperConfig;
import org.apache.fineract.organisation.monetary.data.CurrencyData;
import org.apache.fineract.organisation.monetary.mapper.CurrencyMapper;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.arrears.LoanArrearsData;
import org.mapstruct.Mapping;
@Data
@@ -51,6 +52,9 @@ public class LoanPointInTimeData {
private Long loanProductId;
private String loanProductName;
// Arrears data
private LoanArrearsData arrears;
@org.mapstruct.Mapper(config = MapstructMapperConfig.class, uses = { LoanStatusEnumData.Mapper.class, CurrencyMapper.class,
LoanPrincipalData.Mapper.class, LoanInterestData.Mapper.class, LoanFeeData.Mapper.class, LoanPenaltyData.Mapper.class,
LoanTotalAmountData.Mapper.class })
@@ -70,6 +74,7 @@ public class LoanPointInTimeData {
@Mapping(source = "summary", target = "total")
@Mapping(source = "loanProduct.id", target = "loanProductId")
@Mapping(source = "loanProduct.name", target = "loanProductName")
@Mapping(target = "arrears", ignore = true)
LoanPointInTimeData map(Loan source);
}
}
@@ -35,6 +35,7 @@ import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
import org.apache.fineract.portfolio.loanaccount.data.LoanPointInTimeData;
import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.arrears.LoanArrearsData;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionInterceptor;
@@ -49,6 +50,7 @@ public class LoanPointInTimeServiceImpl implements LoanPointInTimeService {
private final LoanAssembler loanAssembler;
private final LoanPointInTimeData.Mapper dataMapper;
private final EntityManager entityManager;
private final LoanArrearsAgingService arrearsAgingService;
@Override
public LoanPointInTimeData retrieveAt(Long loanId, LocalDate date) {
@@ -69,7 +71,11 @@ public class LoanPointInTimeServiceImpl implements LoanPointInTimeService {
ScheduleGeneratorDTO scheduleGeneratorDTO = loanUtilService.buildScheduleGeneratorDTO(loan, null, null);
loanScheduleService.recalculateSchedule(loan, scheduleGeneratorDTO);
return dataMapper.map(loan);
LoanArrearsData arrearsData = arrearsAgingService.calculateArrearsForLoan(loan);
LoanPointInTimeData result = dataMapper.map(loan);
result.setArrears(arrearsData);
return result;
} finally {
entityManager.clear();
TransactionInterceptor.currentTransactionStatus().setRollbackOnly();