FINERACT-1968: Fix rounding issue
This commit is contained in:
+2
-2
@@ -313,8 +313,8 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
|
|||||||
if (installmentAmountInMultiplesOf != null) {
|
if (installmentAmountInMultiplesOf != null) {
|
||||||
increasePrincipalBy = Money.roundToMultiplesOf(increasePrincipalBy, installmentAmountInMultiplesOf);
|
increasePrincipalBy = Money.roundToMultiplesOf(increasePrincipalBy, installmentAmountInMultiplesOf);
|
||||||
}
|
}
|
||||||
Money remainingAmount = increasePrincipalBy.multiplyRetainScale(noCandidateRepaymentInstallments, mc.getRoundingMode())
|
Money remainingAmount = amortizableAmount
|
||||||
.minus(amortizableAmount);
|
.minus(increasePrincipalBy.multiplyRetainScale(noCandidateRepaymentInstallments, mc.getRoundingMode()));
|
||||||
|
|
||||||
Money finalIncreasePrincipalBy = increasePrincipalBy;
|
Money finalIncreasePrincipalBy = increasePrincipalBy;
|
||||||
candidateRepaymentInstallments
|
candidateRepaymentInstallments
|
||||||
|
|||||||
+23
-24
@@ -132,10 +132,10 @@ public abstract class AbstractCumulativeLoanScheduleGenerator implements LoanSch
|
|||||||
loanApplicationTerms.getLoanCalendar(), loanApplicationTerms.getHolidayDetailDTO(), loanApplicationTerms);
|
loanApplicationTerms.getLoanCalendar(), loanApplicationTerms.getHolidayDetailDTO(), loanApplicationTerms);
|
||||||
|
|
||||||
if (!scheduleParams.isPartialUpdate()) {
|
if (!scheduleParams.isPartialUpdate()) {
|
||||||
BigDecimal downPaymentAmount = BigDecimal.ZERO;
|
Money downPaymentAmount = Money.zero(currency);
|
||||||
if (loanApplicationTerms.isDownPaymentEnabled()) {
|
if (loanApplicationTerms.isDownPaymentEnabled()) {
|
||||||
downPaymentAmount = MathUtil.percentageOf(scheduleParams.getOutstandingBalance().getAmount(),
|
downPaymentAmount = Money.of(currency, MathUtil.percentageOf(scheduleParams.getOutstandingBalance().getAmount(),
|
||||||
loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19);
|
loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19));
|
||||||
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
||||||
downPaymentAmount = Money.roundToMultiplesOf(downPaymentAmount,
|
downPaymentAmount = Money.roundToMultiplesOf(downPaymentAmount,
|
||||||
loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
||||||
@@ -143,27 +143,27 @@ public abstract class AbstractCumulativeLoanScheduleGenerator implements LoanSch
|
|||||||
|
|
||||||
}
|
}
|
||||||
Money calculatedAmortizableAmount = loanApplicationTerms.getPrincipal().minus(downPaymentAmount);
|
Money calculatedAmortizableAmount = loanApplicationTerms.getPrincipal().minus(downPaymentAmount);
|
||||||
scheduleParams.reduceOutstandingBalance(Money.of(currency, downPaymentAmount));
|
scheduleParams.reduceOutstandingBalance(downPaymentAmount);
|
||||||
// Set Fixed Principal Amount
|
// Set Fixed Principal Amount
|
||||||
updateAmortization(mc, loanApplicationTerms, scheduleParams.getPeriodNumber(), calculatedAmortizableAmount);
|
updateAmortization(mc, loanApplicationTerms, scheduleParams.getPeriodNumber(), calculatedAmortizableAmount);
|
||||||
|
|
||||||
if (loanApplicationTerms.isMultiDisburseLoan()) {
|
if (loanApplicationTerms.isMultiDisburseLoan()) {
|
||||||
/* fetches the first tranche amount and also updates other tranche details to map */
|
/* fetches the first tranche amount and also updates other tranche details to map */
|
||||||
BigDecimal disburseAmt = getDisbursementAmount(loanApplicationTerms, scheduleParams.getPeriodStartDate(),
|
Money disburseAmt = Money.of(currency, getDisbursementAmount(loanApplicationTerms, scheduleParams.getPeriodStartDate(),
|
||||||
scheduleParams.getDisburseDetailMap(), scheduleParams.applyInterestRecalculation());
|
scheduleParams.getDisburseDetailMap(), scheduleParams.applyInterestRecalculation()));
|
||||||
BigDecimal downPaymentAmt = BigDecimal.ZERO;
|
Money downPaymentAmt = Money.zero(currency);
|
||||||
if (loanApplicationTerms.isDownPaymentEnabled()) {
|
if (loanApplicationTerms.isDownPaymentEnabled()) {
|
||||||
downPaymentAmt = MathUtil.percentageOf(disburseAmt, loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(),
|
downPaymentAmt = Money.of(currency, MathUtil.percentageOf(disburseAmt.getAmount(),
|
||||||
19);
|
loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19));
|
||||||
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
||||||
downPaymentAmt = Money.roundToMultiplesOf(downPaymentAmt, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
downPaymentAmt = Money.roundToMultiplesOf(downPaymentAmt, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BigDecimal remainingPrincipalAmt = disburseAmt.subtract(downPaymentAmt);
|
Money remainingPrincipalAmt = disburseAmt.minus(downPaymentAmt);
|
||||||
scheduleParams.setPrincipalToBeScheduled(Money.of(currency, remainingPrincipalAmt));
|
scheduleParams.setPrincipalToBeScheduled(remainingPrincipalAmt);
|
||||||
loanApplicationTerms.setPrincipal(loanApplicationTerms.getPrincipal().zero().plus(remainingPrincipalAmt));
|
loanApplicationTerms.setPrincipal(remainingPrincipalAmt);
|
||||||
scheduleParams.setOutstandingBalance(Money.of(currency, remainingPrincipalAmt));
|
scheduleParams.setOutstandingBalance(remainingPrincipalAmt);
|
||||||
scheduleParams.setOutstandingBalanceAsPerRest(Money.of(currency, remainingPrincipalAmt));
|
scheduleParams.setOutstandingBalanceAsPerRest(remainingPrincipalAmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2013,19 +2013,18 @@ public abstract class AbstractCumulativeLoanScheduleGenerator implements LoanSch
|
|||||||
|
|
||||||
private LoanScheduleModelDownPaymentPeriod createDownPaymentPeriod(LoanApplicationTerms loanApplicationTerms,
|
private LoanScheduleModelDownPaymentPeriod createDownPaymentPeriod(LoanApplicationTerms loanApplicationTerms,
|
||||||
LoanScheduleParams scheduleParams, LocalDate date, BigDecimal periodBaseAmount) {
|
LoanScheduleParams scheduleParams, LocalDate date, BigDecimal periodBaseAmount) {
|
||||||
BigDecimal downPaymentAmount = MathUtil.percentageOf(periodBaseAmount,
|
Money downPaymentAmount = Money.of(loanApplicationTerms.getCurrency(),
|
||||||
loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19);
|
MathUtil.percentageOf(periodBaseAmount, loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19));
|
||||||
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
||||||
downPaymentAmount = Money.roundToMultiplesOf(downPaymentAmount, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
downPaymentAmount = Money.roundToMultiplesOf(downPaymentAmount, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
||||||
}
|
}
|
||||||
Money downPayment = Money.of(loanApplicationTerms.getCurrency(), downPaymentAmount);
|
|
||||||
LoanScheduleModelDownPaymentPeriod installment = LoanScheduleModelDownPaymentPeriod
|
LoanScheduleModelDownPaymentPeriod installment = LoanScheduleModelDownPaymentPeriod
|
||||||
.downPayment(scheduleParams.getInstalmentNumber(), date, downPayment, scheduleParams.getOutstandingBalance());
|
.downPayment(scheduleParams.getInstalmentNumber(), date, downPaymentAmount, scheduleParams.getOutstandingBalance());
|
||||||
|
|
||||||
addLoanRepaymentScheduleInstallment(scheduleParams.getInstallments(), installment);
|
addLoanRepaymentScheduleInstallment(scheduleParams.getInstallments(), installment);
|
||||||
|
|
||||||
scheduleParams.incrementInstalmentNumber();
|
scheduleParams.incrementInstalmentNumber();
|
||||||
scheduleParams.addTotalRepaymentExpected(downPayment);
|
scheduleParams.addTotalRepaymentExpected(downPaymentAmount);
|
||||||
|
|
||||||
return installment;
|
return installment;
|
||||||
}
|
}
|
||||||
@@ -2236,14 +2235,14 @@ public abstract class AbstractCumulativeLoanScheduleGenerator implements LoanSch
|
|||||||
LocalDate periodStartDate = RepaymentStartDateType.DISBURSEMENT_DATE.equals(loanApplicationTerms.getRepaymentStartDateType())
|
LocalDate periodStartDate = RepaymentStartDateType.DISBURSEMENT_DATE.equals(loanApplicationTerms.getRepaymentStartDateType())
|
||||||
? loanApplicationTerms.getExpectedDisbursementDate()
|
? loanApplicationTerms.getExpectedDisbursementDate()
|
||||||
: loanApplicationTerms.getSubmittedOnDate();
|
: loanApplicationTerms.getSubmittedOnDate();
|
||||||
BigDecimal downPaymentAmount = BigDecimal.ZERO;
|
Money downPaymentAmount = Money.zero(currency);
|
||||||
if (loanApplicationTerms.isDownPaymentEnabled()) {
|
if (loanApplicationTerms.isDownPaymentEnabled()) {
|
||||||
double downPaymentAmt = MathUtil.percentageOf(loanScheduleParams.getOutstandingBalance().getAmount(),
|
downPaymentAmount = Money.of(currency, MathUtil.percentageOf(loanScheduleParams.getOutstandingBalance().getAmount(),
|
||||||
loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19).doubleValue();
|
loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19));
|
||||||
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
||||||
downPaymentAmt = Money.roundToMultiplesOf(downPaymentAmt, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
downPaymentAmount = Money.roundToMultiplesOf(downPaymentAmount,
|
||||||
|
loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
||||||
}
|
}
|
||||||
downPaymentAmount = BigDecimal.valueOf(downPaymentAmt);
|
|
||||||
}
|
}
|
||||||
Money calculatedAmortizableAmount = principalToBeScheduled.minus(downPaymentAmount);
|
Money calculatedAmortizableAmount = principalToBeScheduled.minus(downPaymentAmount);
|
||||||
loanScheduleParams.setOutstandingBalance(calculatedAmortizableAmount);
|
loanScheduleParams.setOutstandingBalance(calculatedAmortizableAmount);
|
||||||
|
|||||||
+14
-14
@@ -87,20 +87,21 @@ public abstract class AbstractProgressiveLoanScheduleGenerator implements LoanSc
|
|||||||
|
|
||||||
if (loanApplicationTerms.isMultiDisburseLoan()) {
|
if (loanApplicationTerms.isMultiDisburseLoan()) {
|
||||||
/* fetches the first tranche amount and also updates other tranche details to map */
|
/* fetches the first tranche amount and also updates other tranche details to map */
|
||||||
BigDecimal disburseAmt = getDisbursementAmount(loanApplicationTerms, scheduleParams.getPeriodStartDate(),
|
Money disburseAmt = Money.of(currency, getDisbursementAmount(loanApplicationTerms, scheduleParams.getPeriodStartDate(),
|
||||||
scheduleParams.getDisburseDetailMap(), scheduleParams.applyInterestRecalculation());
|
scheduleParams.getDisburseDetailMap(), scheduleParams.applyInterestRecalculation()));
|
||||||
BigDecimal downPaymentAmt = BigDecimal.ZERO;
|
Money downPaymentAmt = Money.zero(currency);
|
||||||
if (loanApplicationTerms.isDownPaymentEnabled()) {
|
if (loanApplicationTerms.isDownPaymentEnabled()) {
|
||||||
downPaymentAmt = MathUtil.percentageOf(disburseAmt, loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19);
|
downPaymentAmt = Money.of(currency, MathUtil.percentageOf(disburseAmt.getAmount(),
|
||||||
|
loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19));
|
||||||
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
||||||
downPaymentAmt = Money.roundToMultiplesOf(downPaymentAmt, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
downPaymentAmt = Money.roundToMultiplesOf(downPaymentAmt, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BigDecimal remainingPrincipalAmt = disburseAmt.subtract(downPaymentAmt);
|
Money remainingPrincipalAmt = disburseAmt.minus(downPaymentAmt);
|
||||||
scheduleParams.setPrincipalToBeScheduled(Money.of(currency, remainingPrincipalAmt));
|
scheduleParams.setPrincipalToBeScheduled(remainingPrincipalAmt);
|
||||||
loanApplicationTerms.setPrincipal(loanApplicationTerms.getPrincipal().zero().plus(remainingPrincipalAmt));
|
loanApplicationTerms.setPrincipal(remainingPrincipalAmt);
|
||||||
scheduleParams.setOutstandingBalance(Money.of(currency, remainingPrincipalAmt));
|
scheduleParams.setOutstandingBalance(remainingPrincipalAmt);
|
||||||
scheduleParams.setOutstandingBalanceAsPerRest(Money.of(currency, remainingPrincipalAmt));
|
scheduleParams.setOutstandingBalanceAsPerRest(remainingPrincipalAmt);
|
||||||
loanApplicationTerms.resetFixedEmiAmount();
|
loanApplicationTerms.resetFixedEmiAmount();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,19 +308,18 @@ public abstract class AbstractProgressiveLoanScheduleGenerator implements LoanSc
|
|||||||
|
|
||||||
private LoanScheduleModelDownPaymentPeriod createDownPaymentPeriod(LoanApplicationTerms loanApplicationTerms,
|
private LoanScheduleModelDownPaymentPeriod createDownPaymentPeriod(LoanApplicationTerms loanApplicationTerms,
|
||||||
LoanScheduleParams scheduleParams, LocalDate date, BigDecimal periodBaseAmount) {
|
LoanScheduleParams scheduleParams, LocalDate date, BigDecimal periodBaseAmount) {
|
||||||
BigDecimal downPaymentAmount = MathUtil.percentageOf(periodBaseAmount,
|
Money downPaymentAmount = Money.of(loanApplicationTerms.getCurrency(),
|
||||||
loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19);
|
MathUtil.percentageOf(periodBaseAmount, loanApplicationTerms.getDisbursedAmountPercentageForDownPayment(), 19));
|
||||||
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
if (loanApplicationTerms.getInstallmentAmountInMultiplesOf() != null) {
|
||||||
downPaymentAmount = Money.roundToMultiplesOf(downPaymentAmount, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
downPaymentAmount = Money.roundToMultiplesOf(downPaymentAmount, loanApplicationTerms.getInstallmentAmountInMultiplesOf());
|
||||||
}
|
}
|
||||||
Money downPayment = Money.of(loanApplicationTerms.getCurrency(), downPaymentAmount);
|
|
||||||
LoanScheduleModelDownPaymentPeriod installment = LoanScheduleModelDownPaymentPeriod
|
LoanScheduleModelDownPaymentPeriod installment = LoanScheduleModelDownPaymentPeriod
|
||||||
.downPayment(scheduleParams.getInstalmentNumber(), date, downPayment, scheduleParams.getOutstandingBalance());
|
.downPayment(scheduleParams.getInstalmentNumber(), date, downPaymentAmount, scheduleParams.getOutstandingBalance());
|
||||||
|
|
||||||
addLoanRepaymentScheduleInstallment(scheduleParams.getInstallments(), installment);
|
addLoanRepaymentScheduleInstallment(scheduleParams.getInstallments(), installment);
|
||||||
|
|
||||||
scheduleParams.incrementInstalmentNumber();
|
scheduleParams.incrementInstalmentNumber();
|
||||||
scheduleParams.addTotalRepaymentExpected(downPayment);
|
scheduleParams.addTotalRepaymentExpected(downPaymentAmount);
|
||||||
|
|
||||||
return installment;
|
return installment;
|
||||||
}
|
}
|
||||||
|
|||||||
+368
-69
@@ -108,8 +108,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
final Account expenseAccount = accountHelper.createExpenseAccount();
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
|
|
||||||
commonLoanProductId = createLoanProduct("500", "15", "4", true, LoanScheduleType.PROGRESSIVE, LoanScheduleProcessingType.HORIZONTAL,
|
commonLoanProductId = createLoanProduct("500", "15", "4", true, "25", true, LoanScheduleType.PROGRESSIVE,
|
||||||
assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
client = clientHelper.createClient(ClientHelper.defaultClientCreationRequest());
|
client = clientHelper.createClient(ClientHelper.defaultClientCreationRequest());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,8 +126,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -199,8 +199,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -271,8 +271,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -344,8 +344,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -436,8 +436,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -525,8 +525,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -612,8 +612,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -703,8 +703,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -777,8 +777,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -865,8 +865,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -930,8 +930,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1004,8 +1004,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1092,8 +1092,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1182,8 +1182,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1269,8 +1269,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1330,8 +1330,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1391,8 +1391,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.15").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1452,8 +1452,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.20").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.20").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1550,8 +1550,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.20").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.20").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1669,8 +1669,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
.date("2023.02.20").dateFormat("yyyy.MM.dd").locale("en"));
|
.date("2023.02.20").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), commonLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1746,10 +1746,10 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
final Account incomeAccount = accountHelper.createIncomeAccount();
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
final Account expenseAccount = accountHelper.createExpenseAccount();
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
Integer localLoanProductId = createLoanProduct("500", "15", "4", false, LoanScheduleType.PROGRESSIVE,
|
Integer localLoanProductId = createLoanProduct("500", "15", "4", true, "25", false, LoanScheduleType.PROGRESSIVE,
|
||||||
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1831,10 +1831,10 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
final Account incomeAccount = accountHelper.createIncomeAccount();
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
final Account expenseAccount = accountHelper.createExpenseAccount();
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
Integer localLoanProductId = createLoanProduct("500", "15", "4", false, LoanScheduleType.PROGRESSIVE,
|
Integer localLoanProductId = createLoanProduct("500", "15", "4", true, "25", false, LoanScheduleType.PROGRESSIVE,
|
||||||
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -1928,10 +1928,10 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
final Account incomeAccount = accountHelper.createIncomeAccount();
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
final Account expenseAccount = accountHelper.createExpenseAccount();
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
Integer localLoanProductId = createLoanProduct("500", "15", "4", false, LoanScheduleType.PROGRESSIVE,
|
Integer localLoanProductId = createLoanProduct("500", "15", "4", true, "25", false, LoanScheduleType.PROGRESSIVE,
|
||||||
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -2000,10 +2000,10 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
final Account incomeAccount = accountHelper.createIncomeAccount();
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
final Account expenseAccount = accountHelper.createExpenseAccount();
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
Integer localLoanProductId = createLoanProduct("500", "15", "4", false, LoanScheduleType.PROGRESSIVE,
|
Integer localLoanProductId = createLoanProduct("500", "15", "4", true, "25", false, LoanScheduleType.PROGRESSIVE,
|
||||||
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -2085,10 +2085,10 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
final Account incomeAccount = accountHelper.createIncomeAccount();
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
final Account expenseAccount = accountHelper.createExpenseAccount();
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
Integer localLoanProductId = createLoanProduct("500", "15", "4", false, LoanScheduleType.PROGRESSIVE,
|
Integer localLoanProductId = createLoanProduct("500", "15", "4", true, "25", false, LoanScheduleType.PROGRESSIVE,
|
||||||
LoanScheduleProcessingType.VERTICAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
LoanScheduleProcessingType.VERTICAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, 500L, 45, 15, 3, 0,
|
final PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId,
|
||||||
"01 January 2023", "01 January 2023");
|
BigDecimal.valueOf(500.0), 45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(500)).dateFormat(DATETIME_PATTERN)
|
||||||
@@ -2205,15 +2205,16 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
assertNotNull(localLoanProductId);
|
assertNotNull(localLoanProductId);
|
||||||
|
|
||||||
CallFailedRuntimeException exception = assertThrows(CallFailedRuntimeException.class,
|
CallFailedRuntimeException exception = assertThrows(CallFailedRuntimeException.class,
|
||||||
() -> applyForLoanApplication(client.getClientId(), localLoanProductId, 500L, 45, 15, 3, 0, "01 January 2023",
|
() -> applyForLoanApplication(client.getClientId(), localLoanProductId, BigDecimal.valueOf(500.0), 45, 15, 3, 0,
|
||||||
"01 January 2023", FineractStyleLoanRepaymentScheduleTransactionProcessor.STRATEGY_CODE,
|
"01 January 2023", "01 January 2023", FineractStyleLoanRepaymentScheduleTransactionProcessor.STRATEGY_CODE,
|
||||||
LoanScheduleType.PROGRESSIVE.name(), LoanScheduleProcessingType.VERTICAL.name()));
|
LoanScheduleType.PROGRESSIVE.name(), LoanScheduleProcessingType.VERTICAL.name()));
|
||||||
assertEquals(400, exception.getResponse().code());
|
assertEquals(400, exception.getResponse().code());
|
||||||
assertTrue(exception.getMessage().contains("supported.only.with.advanced.payment.allocation.strategy"));
|
assertTrue(exception.getMessage().contains("supported.only.with.advanced.payment.allocation.strategy"));
|
||||||
|
|
||||||
exception = assertThrows(CallFailedRuntimeException.class,
|
exception = assertThrows(CallFailedRuntimeException.class,
|
||||||
() -> applyForLoanApplication(client.getClientId(), localLoanProductId, 500L, 45, 15, 3, 0, "01 January 2023",
|
() -> applyForLoanApplication(client.getClientId(), localLoanProductId, BigDecimal.valueOf(500.0), 45, 15, 3, 0,
|
||||||
"01 January 2023", AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY,
|
"01 January 2023", "01 January 2023",
|
||||||
|
AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY,
|
||||||
LoanScheduleType.PROGRESSIVE.name(), LoanScheduleProcessingType.HORIZONTAL.name()));
|
LoanScheduleType.PROGRESSIVE.name(), LoanScheduleProcessingType.HORIZONTAL.name()));
|
||||||
assertEquals(400, exception.getResponse().code());
|
assertEquals(400, exception.getResponse().code());
|
||||||
assertTrue(exception.getMessage()
|
assertTrue(exception.getMessage()
|
||||||
@@ -2223,6 +2224,304 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UC108: Advanced payment allocation, progressive loan schedule handling, rounding test
|
||||||
|
// ADVANCED_PAYMENT_ALLOCATION_STRATEGY
|
||||||
|
// 1. Create a Loan product, 1000 principal, across 3 installment
|
||||||
|
// 2. Submit the loan, and check the generated repayment schedule
|
||||||
|
@Test
|
||||||
|
public void uc108() {
|
||||||
|
try {
|
||||||
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||||
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
|
.date("2023.02.22").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
|
final Account assetAccount = accountHelper.createAssetAccount();
|
||||||
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
|
Integer localLoanProductId = createLoanProduct("1000", "15", "3", false, null, false, LoanScheduleType.PROGRESSIVE,
|
||||||
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
|
assertNotNull(localLoanProductId);
|
||||||
|
|
||||||
|
PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, BigDecimal.valueOf(1000), 45,
|
||||||
|
15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
|
GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 333.34, 0.0, 333.34, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getPendingApproval());
|
||||||
|
|
||||||
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(1000)).dateFormat(DATETIME_PATTERN)
|
||||||
|
.approvedOnDate("01 January 2023").locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 333.34, 0.0, 333.34, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getWaitingForDisbursal());
|
||||||
|
|
||||||
|
loanTransactionHelper.disburseLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().actualDisbursementDate("01 January 2023").dateFormat(DATETIME_PATTERN)
|
||||||
|
.transactionAmount(BigDecimal.valueOf(1000)).locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateLoanSummaryBalances(loanDetails, 1000.0, 0.0, 1000.0, 0.0, null);
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 333.34, 0.0, 333.34, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getActive());
|
||||||
|
|
||||||
|
loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, BigDecimal.valueOf(1000), 90, 15, 6, 0,
|
||||||
|
"01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 3, 2), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 5, LocalDate.of(2023, 3, 17), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 6, LocalDate.of(2023, 4, 1), 166.65, 0.0, 166.65, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getPendingApproval());
|
||||||
|
|
||||||
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(1000)).dateFormat(DATETIME_PATTERN)
|
||||||
|
.approvedOnDate("01 January 2023").locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 3, 2), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 5, LocalDate.of(2023, 3, 17), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 6, LocalDate.of(2023, 4, 1), 166.65, 0.0, 166.65, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getWaitingForDisbursal());
|
||||||
|
|
||||||
|
loanTransactionHelper.disburseLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().actualDisbursementDate("01 January 2023").dateFormat(DATETIME_PATTERN)
|
||||||
|
.transactionAmount(BigDecimal.valueOf(1000)).locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateLoanSummaryBalances(loanDetails, 1000.0, 0.0, 1000.0, 0.0, null);
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 3, 2), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 5, LocalDate.of(2023, 3, 17), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 6, LocalDate.of(2023, 4, 1), 166.65, 0.0, 166.65, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getActive());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UC109: Advanced payment allocation, cumulative loan schedule handling, rounding test
|
||||||
|
// ADVANCED_PAYMENT_ALLOCATION_STRATEGY
|
||||||
|
// 1. Create a Loan product, 1000 principal, across 3 installment
|
||||||
|
// 2. Submit the loan, and check the generated repayment schedule
|
||||||
|
@Test
|
||||||
|
public void uc109() {
|
||||||
|
try {
|
||||||
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||||
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
|
.date("2023.02.22").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
|
final Account assetAccount = accountHelper.createAssetAccount();
|
||||||
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
|
Integer localLoanProductId = createLoanProduct("1000", "15", "3", false, null, false, LoanScheduleType.CUMULATIVE,
|
||||||
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
|
assertNotNull(localLoanProductId);
|
||||||
|
|
||||||
|
PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, BigDecimal.valueOf(1000), 45,
|
||||||
|
15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
|
GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 333.34, 0.0, 333.34, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getPendingApproval());
|
||||||
|
|
||||||
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(1000)).dateFormat(DATETIME_PATTERN)
|
||||||
|
.approvedOnDate("01 January 2023").locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 333.34, 0.0, 333.34, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getWaitingForDisbursal());
|
||||||
|
|
||||||
|
loanTransactionHelper.disburseLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().actualDisbursementDate("01 January 2023").dateFormat(DATETIME_PATTERN)
|
||||||
|
.transactionAmount(BigDecimal.valueOf(1000)).locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateLoanSummaryBalances(loanDetails, 1000.0, 0.0, 1000.0, 0.0, null);
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 333.33, 0.0, 333.33, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 333.34, 0.0, 333.34, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getActive());
|
||||||
|
|
||||||
|
loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, BigDecimal.valueOf(1000), 90, 15, 6, 0,
|
||||||
|
"01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 3, 2), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 5, LocalDate.of(2023, 3, 17), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 6, LocalDate.of(2023, 4, 1), 166.65, 0.0, 166.65, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getPendingApproval());
|
||||||
|
|
||||||
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(1000)).dateFormat(DATETIME_PATTERN)
|
||||||
|
.approvedOnDate("01 January 2023").locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 3, 2), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 5, LocalDate.of(2023, 3, 17), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 6, LocalDate.of(2023, 4, 1), 166.65, 0.0, 166.65, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getWaitingForDisbursal());
|
||||||
|
|
||||||
|
loanTransactionHelper.disburseLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().actualDisbursementDate("01 January 2023").dateFormat(DATETIME_PATTERN)
|
||||||
|
.transactionAmount(BigDecimal.valueOf(1000)).locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateLoanSummaryBalances(loanDetails, 1000.0, 0.0, 1000.0, 0.0, null);
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 16), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 31), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 2, 15), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 3, 2), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 5, LocalDate.of(2023, 3, 17), 166.67, 0.0, 166.67, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 6, LocalDate.of(2023, 4, 1), 166.65, 0.0, 166.65, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getActive());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UC110: Advanced payment allocation, progressive loan schedule handling, rounding test
|
||||||
|
// ADVANCED_PAYMENT_ALLOCATION_STRATEGY
|
||||||
|
// 1. Create a Loan product, 40.50 principal, across 4 installment (1 down payment, 3 normal installment)
|
||||||
|
// 2. Submit the loan, and check the generated repayment schedule
|
||||||
|
@Test
|
||||||
|
public void uc110() {
|
||||||
|
try {
|
||||||
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||||
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
|
.date("2023.02.22").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
|
final Account assetAccount = accountHelper.createAssetAccount();
|
||||||
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
|
Integer localLoanProductId = createLoanProduct("40.50", "15", "3", true, "25", false, LoanScheduleType.PROGRESSIVE,
|
||||||
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
|
assertNotNull(localLoanProductId);
|
||||||
|
|
||||||
|
PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, BigDecimal.valueOf(40.50),
|
||||||
|
45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
|
GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 1), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 16), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 1, 31), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 2, 15), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getPendingApproval());
|
||||||
|
|
||||||
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(40.5)).dateFormat(DATETIME_PATTERN)
|
||||||
|
.approvedOnDate("01 January 2023").locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 1), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 16), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 1, 31), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 2, 15), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getWaitingForDisbursal());
|
||||||
|
|
||||||
|
loanTransactionHelper.disburseLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().actualDisbursementDate("01 January 2023").dateFormat(DATETIME_PATTERN)
|
||||||
|
.transactionAmount(BigDecimal.valueOf(40.5)).locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateLoanSummaryBalances(loanDetails, 40.5, 0.0, 40.5, 0.0, null);
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 1), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 16), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 1, 31), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 2, 15), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getActive());
|
||||||
|
} finally {
|
||||||
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UC111: Advanced payment allocation, cumulative loan schedule handling, rounding test
|
||||||
|
// ADVANCED_PAYMENT_ALLOCATION_STRATEGY
|
||||||
|
// 1. Create a Loan product, 40.50 principal, across 4 installment (1 down payment, 3 normal installment)
|
||||||
|
// 2. Submit the loan, and check the generated repayment schedule
|
||||||
|
@Test
|
||||||
|
public void uc111() {
|
||||||
|
try {
|
||||||
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||||
|
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||||
|
.date("2023.02.22").dateFormat("yyyy.MM.dd").locale("en"));
|
||||||
|
|
||||||
|
final Account assetAccount = accountHelper.createAssetAccount();
|
||||||
|
final Account incomeAccount = accountHelper.createIncomeAccount();
|
||||||
|
final Account expenseAccount = accountHelper.createExpenseAccount();
|
||||||
|
final Account overpaymentAccount = accountHelper.createLiabilityAccount();
|
||||||
|
Integer localLoanProductId = createLoanProduct("40.50", "15", "3", true, "25", false, LoanScheduleType.CUMULATIVE,
|
||||||
|
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
|
||||||
|
assertNotNull(localLoanProductId);
|
||||||
|
|
||||||
|
PostLoansResponse loanResponse = applyForLoanApplication(client.getClientId(), localLoanProductId, BigDecimal.valueOf(40.50),
|
||||||
|
45, 15, 3, 0, "01 January 2023", "01 January 2023");
|
||||||
|
|
||||||
|
GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 1), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 16), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 1, 31), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 2, 15), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getPendingApproval());
|
||||||
|
|
||||||
|
loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(40.5)).dateFormat(DATETIME_PATTERN)
|
||||||
|
.approvedOnDate("01 January 2023").locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 1), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 16), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 1, 31), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 2, 15), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getWaitingForDisbursal());
|
||||||
|
|
||||||
|
loanTransactionHelper.disburseLoan(loanResponse.getLoanId(),
|
||||||
|
new PostLoansLoanIdRequest().actualDisbursementDate("01 January 2023").dateFormat(DATETIME_PATTERN)
|
||||||
|
.transactionAmount(BigDecimal.valueOf(40.5)).locale("en"));
|
||||||
|
|
||||||
|
loanDetails = loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
|
||||||
|
validateLoanSummaryBalances(loanDetails, 40.5, 0.0, 40.5, 0.0, null);
|
||||||
|
validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2023, 1, 1), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2023, 1, 16), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2023, 1, 31), 10.13, 0.0, 10.13, 0.0, 0.0);
|
||||||
|
validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2023, 2, 15), 10.12, 0.0, 10.12, 0.0, 0.0);
|
||||||
|
assertTrue(loanDetails.getStatus().getActive());
|
||||||
|
} finally {
|
||||||
|
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void validateLoanSummaryBalances(GetLoansLoanIdResponse loanDetails, Double totalOutstanding, Double totalRepayment,
|
private static void validateLoanSummaryBalances(GetLoansLoanIdResponse loanDetails, Double totalOutstanding, Double totalRepayment,
|
||||||
Double principalOutstanding, Double principalPaid, Double totalOverpaid) {
|
Double principalOutstanding, Double principalPaid, Double totalOverpaid) {
|
||||||
assertEquals(totalOutstanding, loanDetails.getSummary().getTotalOutstanding());
|
assertEquals(totalOutstanding, loanDetails.getSummary().getTotalOutstanding());
|
||||||
@@ -2324,8 +2623,8 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static Integer createLoanProduct(final String principal, final String repaymentAfterEvery, final String numberOfRepayments,
|
private static Integer createLoanProduct(final String principal, final String repaymentAfterEvery, final String numberOfRepayments,
|
||||||
boolean autoPayForDownPayment, LoanScheduleType loanScheduleType, LoanScheduleProcessingType loanScheduleProcessingType,
|
boolean downPaymentEnabled, String downPaymentPercentage, boolean autoPayForDownPayment, LoanScheduleType loanScheduleType,
|
||||||
final Account... accounts) {
|
LoanScheduleProcessingType loanScheduleProcessingType, final Account... accounts) {
|
||||||
AdvancedPaymentData defaultAllocation = createDefaultPaymentAllocation();
|
AdvancedPaymentData defaultAllocation = createDefaultPaymentAllocation();
|
||||||
AdvancedPaymentData goodwillCreditAllocation = createPaymentAllocation("GOODWILL_CREDIT", "LAST_INSTALLMENT");
|
AdvancedPaymentData goodwillCreditAllocation = createPaymentAllocation("GOODWILL_CREDIT", "LAST_INSTALLMENT");
|
||||||
AdvancedPaymentData merchantIssuedRefundAllocation = createPaymentAllocation("MERCHANT_ISSUED_REFUND", "REAMORTIZATION");
|
AdvancedPaymentData merchantIssuedRefundAllocation = createPaymentAllocation("MERCHANT_ISSUED_REFUND", "REAMORTIZATION");
|
||||||
@@ -2333,7 +2632,7 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
LOG.info("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
|
LOG.info("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
|
||||||
final String loanProductJSON = new LoanProductTestBuilder().withMinPrincipal(principal).withPrincipal(principal)
|
final String loanProductJSON = new LoanProductTestBuilder().withMinPrincipal(principal).withPrincipal(principal)
|
||||||
.withRepaymentTypeAsDays().withRepaymentAfterEvery(repaymentAfterEvery).withNumberOfRepayments(numberOfRepayments)
|
.withRepaymentTypeAsDays().withRepaymentAfterEvery(repaymentAfterEvery).withNumberOfRepayments(numberOfRepayments)
|
||||||
.withEnableDownPayment(true, "25", autoPayForDownPayment).withinterestRatePerPeriod("0")
|
.withEnableDownPayment(downPaymentEnabled, downPaymentPercentage, autoPayForDownPayment).withinterestRatePerPeriod("0")
|
||||||
.withInterestRateFrequencyTypeAsMonths()
|
.withInterestRateFrequencyTypeAsMonths()
|
||||||
.withRepaymentStrategy(AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY)
|
.withRepaymentStrategy(AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY)
|
||||||
.withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsFlat().withAccountingRulePeriodicAccrual(accounts)
|
.withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsFlat().withAccountingRulePeriodicAccrual(accounts)
|
||||||
@@ -2392,7 +2691,7 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
assertEquals(paidLate, period.getTotalPaidLateForPeriod());
|
assertEquals(paidLate, period.getTotalPaidLateForPeriod());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PostLoansResponse applyForLoanApplication(final Long clientId, final Integer loanProductId, final Long principal,
|
private static PostLoansResponse applyForLoanApplication(final Long clientId, final Integer loanProductId, final BigDecimal principal,
|
||||||
final int loanTermFrequency, final int repaymentAfterEvery, final int numberOfRepayments, final int interestRate,
|
final int loanTermFrequency, final int repaymentAfterEvery, final int numberOfRepayments, final int interestRate,
|
||||||
final String expectedDisbursementDate, final String submittedOnDate, String transactionProcessorCode, String loanScheduleType,
|
final String expectedDisbursementDate, final String submittedOnDate, String transactionProcessorCode, String loanScheduleType,
|
||||||
String loanScheduleProcessingType) {
|
String loanScheduleProcessingType) {
|
||||||
@@ -2402,12 +2701,12 @@ public class AdvancedPaymentAllocationLoanRepaymentScheduleTest {
|
|||||||
.transactionProcessingStrategyCode(transactionProcessorCode).locale("en").submittedOnDate(submittedOnDate)
|
.transactionProcessingStrategyCode(transactionProcessorCode).locale("en").submittedOnDate(submittedOnDate)
|
||||||
.amortizationType(1).interestRatePerPeriod(interestRate).interestCalculationPeriodType(1).interestType(0)
|
.amortizationType(1).interestRatePerPeriod(interestRate).interestCalculationPeriodType(1).interestType(0)
|
||||||
.repaymentFrequencyType(0).repaymentEvery(repaymentAfterEvery).repaymentFrequencyType(0)
|
.repaymentFrequencyType(0).repaymentEvery(repaymentAfterEvery).repaymentFrequencyType(0)
|
||||||
.numberOfRepayments(numberOfRepayments).loanTermFrequency(loanTermFrequency).loanTermFrequencyType(0)
|
.numberOfRepayments(numberOfRepayments).loanTermFrequency(loanTermFrequency).loanTermFrequencyType(0).principal(principal)
|
||||||
.principal(BigDecimal.valueOf(principal)).loanType("individual").loanScheduleProcessingType(loanScheduleProcessingType)
|
.loanType("individual").loanScheduleProcessingType(loanScheduleProcessingType).loanScheduleType(loanScheduleType)
|
||||||
.loanScheduleType(loanScheduleType).maxOutstandingLoanBalance(BigDecimal.valueOf(35000)));
|
.maxOutstandingLoanBalance(BigDecimal.valueOf(35000)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PostLoansResponse applyForLoanApplication(final Long clientId, final Integer loanProductId, final Long principal,
|
private static PostLoansResponse applyForLoanApplication(final Long clientId, final Integer loanProductId, final BigDecimal principal,
|
||||||
final int loanTermFrequency, final int repaymentAfterEvery, final int numberOfRepayments, final int interestRate,
|
final int loanTermFrequency, final int repaymentAfterEvery, final int numberOfRepayments, final int interestRate,
|
||||||
final String expectedDisbursementDate, final String submittedOnDate) {
|
final String expectedDisbursementDate, final String submittedOnDate) {
|
||||||
LOG.info("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
|
LOG.info("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
|
||||||
|
|||||||
Reference in New Issue
Block a user