reluxa commented on code in PR #3467:
URL: https://github.com/apache/fineract/pull/3467#discussion_r1336658756
##########
integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccountPaymentAllocationWithOverlappingDownPaymentInstallmentTest.java:
##########
@@ -637,6 +634,325 @@ public void
loanAccountWithEnableDownPaymentAndDisableAutoRepaymentForDownPaymen
}
+ @Test
+ public void
loanAccountWithEnableDownPaymentAndDisableAutoRepaymentForDownPaymentWithOverlappingInstallmentForMultipleDisbursementsOnSameDayTest()
{
+ try {
+
+ // Test with
+ // Enable Down Payment
+ // Disable Auto Repayment For Down Payment
+ // Overlapping down payment and regular installment with multiple
disbursements on same day
+
+ // Set business date
+ LocalDate disbursementDate = LocalDate.of(2023, 3, 3);
+
+ GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec,
responseSpec, Boolean.TRUE);
+ BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec,
BusinessDateType.BUSINESS_DATE, disbursementDate);
+
+ // Loan ExternalId
+ String loanExternalIdStr = UUID.randomUUID().toString();
+
+ // down-payment configuration
+ Boolean enableDownPayment = true;
+ BigDecimal disbursedAmountPercentageForDownPayment =
BigDecimal.valueOf(25);
+ Boolean enableAutoRepaymentForDownPayment = false;
+
+ final Integer clientId =
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
+
+ // Loan Product creation with down-payment configuration
+ final GetLoanProductsProductIdResponse
getLoanProductsProductResponse =
createLoanProductWithEnableDownPaymentAndMultipleDisbursements(
+ loanTransactionHelper, enableDownPayment, "25",
enableAutoRepaymentForDownPayment);
+
+ assertNotNull(getLoanProductsProductResponse);
+ assertEquals(enableDownPayment,
getLoanProductsProductResponse.getEnableDownPayment());
+ assertEquals(0,
getLoanProductsProductResponse.getDisbursedAmountPercentageForDownPayment()
+ .compareTo(disbursedAmountPercentageForDownPayment));
+ assertEquals(enableAutoRepaymentForDownPayment,
getLoanProductsProductResponse.getEnableAutoRepaymentForDownPayment());
+
+ // create loan account
+
+ final Integer loanId =
createLoanAccountMultipleRepaymentsDisbursement(clientId,
getLoanProductsProductResponse.getId(),
+ loanExternalIdStr,
LoanProductTestBuilder.DEFAULT_STRATEGY);
+
+ // Retrieve Loan with loanId
+
+ GetLoansLoanIdResponse loanDetails =
loanTransactionHelper.getLoanDetails(loanId.longValue());
+
+ // verify down-payment details for Loan
+ assertNotNull(loanDetails);
+ assertEquals(enableDownPayment,
loanDetails.getEnableDownPayment());
+ assertEquals(0,
loanDetails.getDisbursedAmountPercentageForDownPayment().compareTo(disbursedAmountPercentageForDownPayment));
+ assertEquals(enableAutoRepaymentForDownPayment,
loanDetails.getEnableAutoRepaymentForDownPayment());
+
+ // first disbursement
+ loanTransactionHelper.disburseLoanWithTransactionAmount("03 March
2023", loanId, "200");
+
+ // make repayment on 3rd March
+ final PostLoansLoanIdTransactionsResponse repaymentTransaction =
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
+ new PostLoansLoanIdTransactionsRequest().dateFormat("dd
MMMM yyyy").transactionDate("3 March 2023").locale("en")
+ .transactionAmount(50.0));
+
+ // verify loan schedule
+
+ loanDetails =
loanTransactionHelper.getLoanDetails(loanId.longValue());
+
+ assertNotNull(loanDetails.getRepaymentSchedule());
+
+ // first period [2023-03-03 to 2023-03-03] down payment installment
+ assertEquals(1,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFromDate());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getDueDate());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalInstallmentAmountForPeriod());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalPaidForPeriod());
+ assertEquals(true,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getComplete());
+
+ // second period [2023-03-03 to 2023-04-03] regular installment
+ assertEquals(2,
loanDetails.getRepaymentSchedule().getPeriods().get(2).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(2).getFromDate());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(2).getDueDate());
+ assertEquals(75.0,
loanDetails.getRepaymentSchedule().getPeriods().get(2).getTotalInstallmentAmountForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(2).getTotalPaidForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(2).getFeeChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(2).getFeeChargesPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(2).getPenaltyChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(2).getPenaltyChargesPaid());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(2).getComplete());
+
+ // third period [2023-04-03 to 2023-05-03] regular installment
+ assertEquals(3,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getPeriod());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(3).getFromDate());
+ assertEquals(LocalDate.of(2023, 5, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(3).getDueDate());
+ assertEquals(75.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getTotalInstallmentAmountForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getTotalPaidForPeriod());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getComplete());
+
+ // second disbursement with overlapping installment i.e same due
date as regular repayment due date
+
+ disbursementDate = LocalDate.of(2023, 4, 3);
+ BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec,
BusinessDateType.BUSINESS_DATE, disbursementDate);
+ loanTransactionHelper.disburseLoanWithTransactionAmount("03 April
2023", loanId, "200");
+
+ // make repayment on 3rd April
+ final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 =
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
+ new PostLoansLoanIdTransactionsRequest().dateFormat("dd
MMMM yyyy").transactionDate("3 April 2023").locale("en")
+ .transactionAmount(50.0));
+
+ // verify loan schedule
+
+ loanDetails =
loanTransactionHelper.getLoanDetails(loanId.longValue());
+
+ assertNotNull(loanDetails.getRepaymentSchedule());
+
+ // verify that overlapping down payment installment is created
after regular installment
+
+ // and verify regular repayment type installment gets paid before
down payment installment according to
+ // payment
+
+ // allocation strategy
+
+ // first period [2023-03-03 to 2023-03-03] first down payment
installment
+ assertEquals(1,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFromDate());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getDueDate());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalInstallmentAmountForPeriod());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalPaidForPeriod());
+ assertEquals(true,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getComplete());
+
+ // second period [2023-03-03 to 2023-04-03] regular installment,
principal gets paid first
+ assertEquals(2,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(3).getFromDate());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(3).getDueDate());
+ assertEquals(150.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getTotalInstallmentAmountForPeriod());
+ assertEquals(50.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getTotalPaidForPeriod());
+ assertEquals(50.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getPrincipalPaid());
+ assertEquals(100.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getTotalOutstandingForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getFeeChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getFeeChargesPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getPenaltyChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getPenaltyChargesPaid());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(3).getComplete());
+
+ // third period [2023-04-03 to 2023-04-03] overlapping down
payment installment
+ assertEquals(3,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPeriod());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFromDate());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(4).getDueDate());
+ assertEquals(50.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalInstallmentAmountForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalPaidForPeriod());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getComplete());
+
+ // fourth period [2023-04-03 to 2023-05-03] regular installment
+ assertEquals(4,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getPeriod());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(5).getFromDate());
+ assertEquals(LocalDate.of(2023, 5, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(5).getDueDate());
+ assertEquals(150.0,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getTotalInstallmentAmountForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getTotalPaidForPeriod());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getComplete());
+
+ // same day third disbursement with overlapping installment i.e
same due date as regular repayment due date
+ // 3-April
+ loanTransactionHelper.disburseLoanWithTransactionAmount("03 April
2023", loanId, "200");
+
+ // make repayment on 3rd April
+ final PostLoansLoanIdTransactionsResponse repaymentTransaction_2 =
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
+ new PostLoansLoanIdTransactionsRequest().dateFormat("dd
MMMM yyyy").transactionDate("3 April 2023").locale("en")
+ .transactionAmount(50.0));
+
+ // verify loan schedule
+
+ loanDetails =
loanTransactionHelper.getLoanDetails(loanId.longValue());
+
+ assertNotNull(loanDetails.getRepaymentSchedule());
+
+ // verify that overlapping down payment installment is created
after regular installment
+
+ // verify amounts for down payment installment and regular
installment gets updated considering new
+ // disbursement
+ // and verify regular repayment type installment gets paid before
down payment installment according to
+ // payment
+ // allocation strategy
+
+ // first period [2023-03-03 to 2023-03-03] first down payment
installment
+ assertEquals(1,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFromDate());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getDueDate());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalInstallmentAmountForPeriod());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalPaidForPeriod());
+ assertEquals(true,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getComplete());
+
+ // second period [2023-03-03 to 2023-04-03] regular installment,
principal gets paid first
+ assertEquals(2,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFromDate());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(4).getDueDate());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalInstallmentAmountForPeriod());
+ assertEquals(100.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalPaidForPeriod());
+ assertEquals(100.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPrincipalPaid());
+ assertEquals(125.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalOutstandingForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFeeChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFeeChargesPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPenaltyChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPenaltyChargesPaid());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getComplete());
+
+ // third period [2023-04-03 to 2023-04-03] overlapping down
payment installment
+ assertEquals(3,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getPeriod());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(5).getFromDate());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(5).getDueDate());
+ assertEquals(100.0,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getTotalInstallmentAmountForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getTotalPaidForPeriod());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getComplete());
+
+ // fourth period [2023-04-03 to 2023-05-03] regular installment
+ assertEquals(4,
loanDetails.getRepaymentSchedule().getPeriods().get(6).getPeriod());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(6).getFromDate());
+ assertEquals(LocalDate.of(2023, 5, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(6).getDueDate());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(6).getTotalInstallmentAmountForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(6).getTotalPaidForPeriod());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(6).getComplete());
+
+ // make repayment for fully paying and verify that regular
installment gets fully paid on 3rd april
+ final PostLoansLoanIdTransactionsResponse repaymentTransaction_3 =
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
+ new PostLoansLoanIdTransactionsRequest().dateFormat("dd
MMMM yyyy").transactionDate("3 April 2023").locale("en")
+ .transactionAmount(125.0));
+
+ loanDetails =
loanTransactionHelper.getLoanDetails(loanId.longValue());
+
+ assertNotNull(loanDetails.getRepaymentSchedule());
+
+ // verify regular installment gets paid off
+
+ // first period [2023-03-03 to 2023-03-03] first down payment
installment
+ assertEquals(1,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFromDate());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getDueDate());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalInstallmentAmountForPeriod());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalPaidForPeriod());
+ assertEquals(true,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getComplete());
+
+ // second period [2023-03-03 to 2023-04-03] regular installment,
principal gets paid first
+ assertEquals(2,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFromDate());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(4).getDueDate());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalInstallmentAmountForPeriod());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalPaidForPeriod());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPrincipalPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalOutstandingForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFeeChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFeeChargesPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPenaltyChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPenaltyChargesPaid());
+ assertEquals(true,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getComplete());
+
+ // third period [2023-04-03 to 2023-04-03] overlapping down
payment installment
+ assertEquals(3,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getPeriod());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(5).getFromDate());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(5).getDueDate());
+ assertEquals(100.0,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getTotalInstallmentAmountForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getTotalPaidForPeriod());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(5).getComplete());
+
+ // fourth period [2023-04-03 to 2023-05-03] regular installment
+ assertEquals(4,
loanDetails.getRepaymentSchedule().getPeriods().get(6).getPeriod());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(6).getFromDate());
+ assertEquals(LocalDate.of(2023, 5, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(6).getDueDate());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(6).getTotalInstallmentAmountForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(6).getTotalPaidForPeriod());
+ assertEquals(false,
loanDetails.getRepaymentSchedule().getPeriods().get(6).getComplete());
+
+ // make another repayment and verify downpayment installment gets
paid off on 3rd april
+ final PostLoansLoanIdTransactionsResponse repaymentTransaction_4 =
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
+ new PostLoansLoanIdTransactionsRequest().dateFormat("dd
MMMM yyyy").transactionDate("3 April 2023").locale("en")
+ .transactionAmount(100.00));
+
+ loanDetails =
loanTransactionHelper.getLoanDetails(loanId.longValue());
+
+ assertNotNull(loanDetails.getRepaymentSchedule());
+
+ // verify down payment installment gets paid off
+
+ // first period [2023-03-03 to 2023-03-03] first down payment
installment
+ assertEquals(1,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFromDate());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(1).getDueDate());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalInstallmentAmountForPeriod());
+ assertEquals(50.00,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getTotalPaidForPeriod());
+ assertEquals(true,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getComplete());
+
+ // second period [2023-03-03 to 2023-04-03] regular installment,
principal gets paid first
+ assertEquals(2,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPeriod());
+ assertEquals(LocalDate.of(2023, 3, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFromDate());
+ assertEquals(LocalDate.of(2023, 4, 3),
loanDetails.getRepaymentSchedule().getPeriods().get(4).getDueDate());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalInstallmentAmountForPeriod());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalPaidForPeriod());
+ assertEquals(225.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPrincipalPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getTotalOutstandingForPeriod());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFeeChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getFeeChargesPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPenaltyChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getPenaltyChargesPaid());
+ assertEquals(true,
loanDetails.getRepaymentSchedule().getPeriods().get(4).getComplete());
+
+ // third period [2023-04-03 to 2023-04-03] overlapping down
payment installment
Review Comment:
Just for double checking. We don't want to create two separate entries for
the two downpayments happend on the same day, right?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]