This is an automated email from the ASF dual-hosted git repository.
adamsaghy 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 19b2a77127 FINERACT-2181: Fix integration test / unify
getLoanRepaymentScheduleDetail()
19b2a77127 is described below
commit 19b2a77127cb853c51be0195b8c7ba38dcab26f7
Author: Adam Saghy <[email protected]>
AuthorDate: Fri Jun 6 11:13:39 2025 +0200
FINERACT-2181: Fix integration test / unify getLoanRepaymentScheduleDetail()
---
.../org/apache/fineract/portfolio/loanaccount/domain/Loan.java | 10 +++-------
.../portfolio/loanaccount/mapper/LoanTermVariationsMapper.java | 2 +-
.../loanaccount/service/LoanDownPaymentHandlerServiceImpl.java | 2 +-
.../impl/AdvancedPaymentScheduleTransactionProcessor.java | 2 +-
.../impl/AdvancedPaymentScheduleTransactionProcessorTest.java | 3 +--
.../loanaccount/serialization/LoanApplicationValidator.java | 8 ++++----
.../LoanApplicationWritePlatformServiceJpaRepositoryImpl.java | 9 +++++----
.../portfolio/loanaccount/service/LoanAssemblerImpl.java | 2 +-
.../portfolio/loanaccount/service/LoanUtilService.java | 4 ++--
.../service/LoanWritePlatformServiceJpaRepositoryImpl.java | 6 +++---
.../service/LoanChargeWritePlatformServiceImplTest.java | 2 +-
.../service/LoanDownPaymentHandlerServiceImplTest.java | 2 +-
12 files changed, 24 insertions(+), 28 deletions(-)
diff --git
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
index f3c76d0572..f2ad4f94e0 100644
---
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
+++
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
@@ -667,10 +667,6 @@ public class Loan extends
AbstractAuditableWithUTCDateTimeCustom<Long> {
return this.loanProduct;
}
- public LoanProductRelatedDetail repaymentScheduleDetail() {
- return this.loanRepaymentScheduleDetail;
- }
-
public void updateClient(final Client client) {
this.client = client;
}
@@ -1347,7 +1343,7 @@ public class Loan extends
AbstractAuditableWithUTCDateTimeCustom<Long> {
}
public Money getTotalOverpaidAsMoney() {
- return Money.of(this.repaymentScheduleDetail().getCurrency(),
this.totalOverpaid);
+ return Money.of(this.getLoanProductRelatedDetail().getCurrency(),
this.totalOverpaid);
}
public void updateIsInterestRecalculationEnabled() {
@@ -1512,7 +1508,7 @@ public class Loan extends
AbstractAuditableWithUTCDateTimeCustom<Long> {
public boolean isFeeCompoundingEnabledForInterestRecalculation() {
boolean isEnabled = false;
- if (this.repaymentScheduleDetail().isInterestRecalculationEnabled()) {
+ if
(this.getLoanProductRelatedDetail().isInterestRecalculationEnabled()) {
isEnabled =
this.loanInterestRecalculationDetails.getInterestRecalculationCompoundingMethod().isFeeCompoundingEnabled();
}
return isEnabled;
@@ -1602,7 +1598,7 @@ public class Loan extends
AbstractAuditableWithUTCDateTimeCustom<Long> {
}
return numberOfInstallments;
}
- return this.repaymentScheduleDetail().getNumberOfRepayments() +
adjustNumberOfRepayments();
+ return this.getLoanProductRelatedDetail().getNumberOfRepayments() +
adjustNumberOfRepayments();
}
/*
diff --git
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/mapper/LoanTermVariationsMapper.java
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/mapper/LoanTermVariationsMapper.java
index 6d21260b50..7fd5591e75 100644
---
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/mapper/LoanTermVariationsMapper.java
+++
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/mapper/LoanTermVariationsMapper.java
@@ -86,7 +86,7 @@ public class LoanTermVariationsMapper {
CalendarHistoryDataWrapper calendarHistoryDataWrapper;
RepaymentStartDateType repaymentStartDateType =
loan.getLoanProduct().getRepaymentStartDateType();
boolean allowCompoundingOnEod = false;
- if (loan.repaymentScheduleDetail().isInterestRecalculationEnabled()) {
+ if
(loan.getLoanProductRelatedDetail().isInterestRecalculationEnabled()) {
restCalendarInstance =
scheduleGeneratorDTO.getCalendarInstanceForInterestRecalculation();
compoundingCalendarInstance =
scheduleGeneratorDTO.getCompoundingCalendarInstance();
recalculationFrequencyType =
loan.getLoanInterestRecalculationDetails().getRestFrequencyType();
diff --git
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanDownPaymentHandlerServiceImpl.java
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanDownPaymentHandlerServiceImpl.java
index 5e2004790f..271756c407 100644
---
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanDownPaymentHandlerServiceImpl.java
+++
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanDownPaymentHandlerServiceImpl.java
@@ -179,7 +179,7 @@ public class LoanDownPaymentHandlerServiceImpl implements
LoanDownPaymentHandler
.reduce(BigDecimal.ZERO, BigDecimal::add);
final BigDecimal totalPrincipalCredited =
totalDisbursed.add(totalPrincipalAdjusted).add(totalCapitalizedIncome);
if
(totalPrincipalCredited.compareTo(loan.getSummary().getTotalPrincipalRepaid())
< 0
- &&
loan.repaymentScheduleDetail().getPrincipal().minus(totalDisbursed).isGreaterThanZero())
{
+ &&
loan.getLoanProductRelatedDetail().getPrincipal().minus(totalDisbursed).isGreaterThanZero())
{
final String errorMessage = "The transaction amount cannot
exceed threshold.";
throw new InvalidLoanStateTransitionException("transaction",
"amount.exceeds.threshold", errorMessage);
}
diff --git
a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java
b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java
index 4f6818c5b4..61eb53fc8f 100644
---
a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java
+++
b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java
@@ -1226,7 +1226,7 @@ public class AdvancedPaymentScheduleTransactionProcessor
extends AbstractLoanRep
final MathContext mc = MoneyHelper.getMathContext();
Loan loan = disbursementTransaction.getLoan();
LoanProductRelatedDetail loanProductRelatedDetail =
loan.getLoanRepaymentScheduleDetail();
- Integer installmentAmountInMultiplesOf =
loan.getLoanProductRelatedDetail().getInstallmentAmountInMultiplesOf();
+ Integer installmentAmountInMultiplesOf =
loanProductRelatedDetail.getInstallmentAmountInMultiplesOf();
List<LoanRepaymentScheduleInstallment> installments =
transactionCtx.getInstallments();
LocalDate transactionDate =
disbursementTransaction.getTransactionDate();
MonetaryCurrency currency = transactionCtx.getCurrency();
diff --git
a/fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java
b/fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java
index 9cde84ea00..7efc6ad18c 100644
---
a/fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java
+++
b/fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java
@@ -529,12 +529,11 @@ class AdvancedPaymentScheduleTransactionProcessorTest {
LoanProductRelatedDetail loanProductRelatedDetail =
mock(LoanProductRelatedDetail.class);
org.apache.fineract.portfolio.loanproduct.domain.LoanProduct
loanProduct = mock(
org.apache.fineract.portfolio.loanproduct.domain.LoanProduct.class);
- when(loanProduct.getInstallmentAmountInMultiplesOf()).thenReturn(null);
+
when(loanProductRelatedDetail.getInstallmentAmountInMultiplesOf()).thenReturn(null);
when(loanProductRelatedDetail.isEnableDownPayment()).thenReturn(false);
Loan loan = mock(Loan.class);
when(loan.getLoanRepaymentScheduleDetail()).thenReturn(loanProductRelatedDetail);
- when(loan.getLoanProduct()).thenReturn(loanProduct);
when(loan.isInterestBearing()).thenReturn(true);
LoanRepaymentScheduleInstallment installment1 = spy(
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationValidator.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationValidator.java
index 4473a137a7..e299345546 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationValidator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationValidator.java
@@ -215,8 +215,8 @@ public final class LoanApplicationValidator {
}
validateLoanTermAndRepaidEveryValues(loan.getTermFrequency(),
loan.getTermPeriodFrequencyType().getValue(),
- loan.repaymentScheduleDetail().getNumberOfRepayments(),
loan.repaymentScheduleDetail().getRepayEvery(),
-
loan.repaymentScheduleDetail().getRepaymentPeriodFrequencyType().getValue(),
loan);
+ loan.getLoanProductRelatedDetail().getNumberOfRepayments(),
loan.getLoanProductRelatedDetail().getRepayEvery(),
+
loan.getLoanProductRelatedDetail().getRepaymentPeriodFrequencyType().getValue(),
loan);
}
public void validateForModify(final Loan loan) {
@@ -229,8 +229,8 @@ public final class LoanApplicationValidator {
}
validateLoanTermAndRepaidEveryValues(loan.getTermFrequency(),
loan.getTermPeriodFrequencyType().getValue(),
- loan.repaymentScheduleDetail().getNumberOfRepayments(),
loan.repaymentScheduleDetail().getRepayEvery(),
-
loan.repaymentScheduleDetail().getRepaymentPeriodFrequencyType().getValue(),
loan);
+ loan.getLoanProductRelatedDetail().getNumberOfRepayments(),
loan.getLoanProductRelatedDetail().getRepayEvery(),
+
loan.getLoanProductRelatedDetail().getRepaymentPeriodFrequencyType().getValue(),
loan);
}
public void validateForCreate(JsonCommand command) {
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
index cbd6c829c5..72835b441a 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
@@ -233,12 +233,13 @@ public class
LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa
case DAILY -> CalendarFrequencyType.DAILY;
case WEEKLY -> CalendarFrequencyType.WEEKLY;
case MONTHLY -> CalendarFrequencyType.MONTHLY;
- case SAME_AS_REPAYMENT_PERIOD ->
CalendarFrequencyType.from(loan.repaymentScheduleDetail().getRepaymentPeriodFrequencyType());
+ case SAME_AS_REPAYMENT_PERIOD ->
+
CalendarFrequencyType.from(loan.getLoanProductRelatedDetail().getRepaymentPeriodFrequencyType());
case INVALID -> CalendarFrequencyType.INVALID;
};
if (recalculationFrequencyType == SAME_AS_REPAYMENT_PERIOD) {
- frequency = loan.repaymentScheduleDetail().getRepayEvery();
+ frequency = loan.getLoanProductRelatedDetail().getRepayEvery();
calendarStartDate = loan.getExpectedDisbursedOnLocalDate();
if (updatedRepeatsOnDay == null) {
updatedRepeatsOnDay =
calendarStartDate.get(ChronoField.DAY_OF_WEEK);
@@ -400,12 +401,12 @@ public class
LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa
}
}
} else {
- PeriodFrequencyType repaymentFrequencyType =
loan.repaymentScheduleDetail().getRepaymentPeriodFrequencyType();
+ PeriodFrequencyType repaymentFrequencyType =
loan.getLoanProductRelatedDetail().getRepaymentPeriodFrequencyType();
if (repaymentFrequencyType == PeriodFrequencyType.MONTHS) {
final String title = "loan_schedule_" + loan.getId();
final Integer typeId =
CalendarType.COLLECTION.getValue();
final CalendarFrequencyType calendarFrequencyType =
CalendarFrequencyType.MONTHLY;
- final Integer interval =
loan.repaymentScheduleDetail().getRepayEvery();
+ final Integer interval =
loan.getLoanProductRelatedDetail().getRepayEvery();
LocalDate startDate =
loan.getExpectedFirstRepaymentOnDate();
if (startDate == null) {
startDate = loan.getExpectedDisbursedOnLocalDate();
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssemblerImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssemblerImpl.java
index 2725325678..23d1f21e04 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssemblerImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssemblerImpl.java
@@ -775,7 +775,7 @@ public class LoanAssemblerImpl implements LoanAssembler {
changes.put(LoanApiConstants.fixedPrincipalPercentagePerInstallmentParamName,
loan.getFixedPrincipalPercentagePerInstallment());
}
- final LoanProductRelatedDetail productRelatedDetail =
loan.repaymentScheduleDetail();
+ final LoanProductRelatedDetail productRelatedDetail =
loan.getLoanProductRelatedDetail();
if (loan.loanProduct().getLoanConfigurableAttributes() != null) {
loanScheduleAssembler.updateProductRelatedDetails(productRelatedDetail, loan);
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
index 0f0793ee01..123d717987 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
@@ -249,7 +249,7 @@ public class LoanUtilService {
// immediately after disbursement date,
// need to have minimum number of days gap between disbursement
// and first repayment date.
- final LoanProductRelatedDetail repaymentScheduleDetails =
loan.repaymentScheduleDetail();
+ final LoanProductRelatedDetail repaymentScheduleDetails =
loan.getLoanProductRelatedDetail();
// Not expecting to be null
if (repaymentScheduleDetails != null) {
final Integer repayEvery =
repaymentScheduleDetails.getRepayEvery();
@@ -273,7 +273,7 @@ public class LoanUtilService {
private LocalDate generateCalculatedRepaymentStartDate(final
CalendarHistoryDataWrapper calendarHistoryDataWrapper,
LocalDate actualDisbursementDate, Loan loan) {
- final LoanProductRelatedDetail repaymentScheduleDetails =
loan.repaymentScheduleDetail();
+ final LoanProductRelatedDetail repaymentScheduleDetails =
loan.getLoanProductRelatedDetail();
final WorkingDays workingDays = this.workingDaysRepository.findOne();
LocalDate calculatedRepaymentsStartingFromDate = null;
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index bbd9150810..0c7fbfe50d 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -415,7 +415,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl
implements LoanWritePlatf
regenerateScheduleOnDisbursement(command, loan,
recalculateSchedule, scheduleGeneratorDTO, nextPossibleRepaymentDate,
rescheduledRepaymentDate);
- boolean downPaymentEnabled =
loan.repaymentScheduleDetail().isEnableDownPayment();
+ boolean downPaymentEnabled =
loan.getLoanProductRelatedDetail().isEnableDownPayment();
if (loan.isInterestBearingAndInterestRecalculationEnabled() ||
downPaymentEnabled) {
createAndSaveLoanScheduleArchive(loan, scheduleGeneratorDTO);
}
@@ -786,7 +786,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl
implements LoanWritePlatf
final ScheduleGeneratorDTO scheduleGeneratorDTO =
this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom);
regenerateScheduleOnDisbursement(command, loan,
recalculateSchedule, scheduleGeneratorDTO, nextPossibleRepaymentDate,
rescheduledRepaymentDate);
- boolean downPaymentEnabled =
loan.repaymentScheduleDetail().isEnableDownPayment();
+ boolean downPaymentEnabled =
loan.getLoanProductRelatedDetail().isEnableDownPayment();
if (loan.isInterestBearingAndInterestRecalculationEnabled() ||
downPaymentEnabled) {
createAndSaveLoanScheduleArchive(loan,
scheduleGeneratorDTO);
}
@@ -2340,7 +2340,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl
implements LoanWritePlatf
loanDownPaymentTransactionValidator.validateAccountStatus(loan,
LoanEvent.LOAN_EDIT_MULTI_DISBURSE_DATE);
updateDisbursementDateAndAmountForTranche(loan,
loanDisbursementDetails, command, changes, scheduleGeneratorDTO);
} else {
-
loan.repaymentScheduleDetail().setPrincipal(loan.getPrincipalAmountForRepaymentSchedule());
+
loan.getLoanProductRelatedDetail().setPrincipal(loan.getPrincipalAmountForRepaymentSchedule());
if (loan.isCumulativeSchedule() &&
loan.isInterestBearingAndInterestRecalculationEnabled()) {
loanScheduleService.regenerateRepaymentScheduleWithInterestRecalculation(loan,
scheduleGeneratorDTO);
diff --git
a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImplTest.java
b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImplTest.java
index 46dce0a0ed..f482a412bd 100644
---
a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImplTest.java
+++
b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImplTest.java
@@ -177,7 +177,7 @@ class LoanChargeWritePlatformServiceImplTest {
when(chargeDefinition.getChargeTimeType()).thenReturn(SPECIFIED_DUE_DATE);
when(chargeDefinition.getCurrencyCode()).thenReturn(CURRENCY_CODE);
when(loanChargeAssembler.createNewFromJson(loan, chargeDefinition,
jsonCommand)).thenReturn(loanCharge);
-
when(loan.repaymentScheduleDetail()).thenReturn(loanRepaymentScheduleDetail);
+
when(loan.getLoanProductRelatedDetail()).thenReturn(loanRepaymentScheduleDetail);
when(loanRepaymentScheduleDetail.getLoanScheduleType()).thenReturn(LoanScheduleType.CUMULATIVE);
when(loan.getLoanRepaymentScheduleDetail()).thenReturn(loanRepaymentScheduleDetail);
when(loan.hasCurrencyCodeOf(CURRENCY_CODE)).thenReturn(true);
diff --git
a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanDownPaymentHandlerServiceImplTest.java
b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanDownPaymentHandlerServiceImplTest.java
index 231e1bad39..4b71bb82c0 100644
---
a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanDownPaymentHandlerServiceImplTest.java
+++
b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanDownPaymentHandlerServiceImplTest.java
@@ -162,7 +162,7 @@ public class LoanDownPaymentHandlerServiceImplTest {
when(loanRepaymentRelatedDetail.getInstallmentAmountInMultiplesOf()).thenReturn(10);
when(loanForProcessing.getLoanRepaymentScheduleDetail()).thenReturn(loanRepaymentRelatedDetail);
-
when(loanForProcessing.repaymentScheduleDetail()).thenReturn(loanRepaymentRelatedDetail);
+
when(loanForProcessing.getLoanProductRelatedDetail()).thenReturn(loanRepaymentRelatedDetail);
when(loanRepaymentRelatedDetail.isInterestRecalculationEnabled()).thenReturn(true);
when(loanForProcessing.isInterestBearingAndInterestRecalculationEnabled()).thenReturn(true);
when(loanRepaymentRelatedDetail.getDisbursedAmountPercentageForDownPayment()).thenReturn(BigDecimal.valueOf(10));