taskain7 commented on code in PR #3583:
URL: https://github.com/apache/fineract/pull/3583#discussion_r1392463755
##########
integration-tests/src/test/java/org/apache/fineract/integrationtests/RefundForActiveLoansWithAdvancedPaymentAllocationTest.java:
##########
@@ -288,15 +288,215 @@ public void
refundForActiveLoanWithDefaultPaymentAllocation() {
}
}
+ @Test
+ public void
refundForActiveLoanWithDefaultPaymentAllocationProcessingHorizontally() {
+ try {
+ GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec,
responseSpec, Boolean.TRUE);
+ businessDateHelper.updateBusinessDate(new
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+ .date("2023.02.15").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 loanProductId = createLoanProduct("1000", "30", "4",
LoanScheduleProcessingType.HORIZONTAL, assetAccount, incomeAccount,
+ expenseAccount, overpaymentAccount);
+
+ final PostLoansResponse loanResponse =
applyForLoanApplication(client.getClientId(), loanProductId, 1000L, 90, 30, 3,
0,
+ "01 January 2023", "01 January 2023");
+
+ int loanId = loanResponse.getLoanId().intValue();
+
+ loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
+ new
PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(1000)).dateFormat(DATETIME_PATTERN)
+ .approvedOnDate("01 January 2023").locale("en"));
+
+ loanTransactionHelper.disburseLoan(loanResponse.getLoanId(),
+ new PostLoansLoanIdRequest().actualDisbursementDate("01
January 2023").dateFormat(DATETIME_PATTERN)
+
.transactionAmount(BigDecimal.valueOf(1000.00)).locale("en"));
+
+ final float feePortion = 50.0f;
+ final float penaltyPortion = 100.0f;
+
+ Integer fee = ChargesHelper.createCharges(requestSpec,
responseSpec, ChargesHelper
+
.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
String.valueOf(feePortion), false));
+
+ Integer penalty = ChargesHelper.createCharges(requestSpec,
responseSpec, ChargesHelper
+
.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
String.valueOf(penaltyPortion), true));
+
+ final String firstInstallmentChargeAddedDate =
DATE_FORMATTER.format(LocalDate.of(2023, 1, 3));
+ loanTransactionHelper.addChargesForLoan(loanId,
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(
+ String.valueOf(fee), firstInstallmentChargeAddedDate,
String.valueOf(feePortion)));
+
+ loanTransactionHelper.addChargesForLoan(loanId,
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(
+ String.valueOf(penalty), firstInstallmentChargeAddedDate,
String.valueOf(penaltyPortion)));
+
+ final String secondInstallmentChargeAddedDate =
DATE_FORMATTER.format(LocalDate.of(2023, 2, 3));
+ loanTransactionHelper.addChargesForLoan(loanId,
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(
+ String.valueOf(fee), secondInstallmentChargeAddedDate,
String.valueOf(feePortion)));
+
+ loanTransactionHelper.addChargesForLoan(loanId,
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(
+ String.valueOf(penalty), secondInstallmentChargeAddedDate,
String.valueOf(penaltyPortion)));
+
+ GetLoansLoanIdResponse loanDetails =
loanTransactionHelper.getLoanDetails((long) loanId);
+
+ GetLoansLoanIdRepaymentPeriod firstRepaymentInstallment =
loanDetails.getRepaymentSchedule().getPeriods().get(2);
+ GetLoansLoanIdRepaymentPeriod secondRepaymentInstallment =
loanDetails.getRepaymentSchedule().getPeriods().get(3);
+ GetLoansLoanIdRepaymentPeriod thirdRepaymentInstallment =
loanDetails.getRepaymentSchedule().getPeriods().get(4);
+
+ assertEquals(5,
loanDetails.getRepaymentSchedule().getPeriods().size());
+ assertEquals(feePortion,
firstRepaymentInstallment.getFeeChargesDue());
+ assertEquals(feePortion,
firstRepaymentInstallment.getFeeChargesOutstanding());
+ assertEquals(penaltyPortion,
firstRepaymentInstallment.getPenaltyChargesDue());
+ assertEquals(penaltyPortion,
firstRepaymentInstallment.getPenaltyChargesOutstanding());
+ assertEquals(250.0f, firstRepaymentInstallment.getPrincipalDue());
+ assertEquals(250.0f,
firstRepaymentInstallment.getPrincipalOutstanding());
+ assertEquals(400.0f,
firstRepaymentInstallment.getTotalDueForPeriod());
+ assertEquals(400.0f,
firstRepaymentInstallment.getTotalOutstandingForPeriod());
+ assertEquals(LocalDate.of(2023, 1, 31),
firstRepaymentInstallment.getDueDate());
+
+ assertEquals(feePortion,
secondRepaymentInstallment.getFeeChargesDue());
+ assertEquals(feePortion,
secondRepaymentInstallment.getFeeChargesOutstanding());
+ assertEquals(penaltyPortion,
secondRepaymentInstallment.getPenaltyChargesDue());
+ assertEquals(penaltyPortion,
secondRepaymentInstallment.getPenaltyChargesOutstanding());
+ assertEquals(400.0f,
secondRepaymentInstallment.getTotalDueForPeriod());
+ assertEquals(400.0f,
secondRepaymentInstallment.getTotalOutstandingForPeriod());
+ assertEquals(LocalDate.of(2023, 3, 2),
secondRepaymentInstallment.getDueDate());
+
+ assertEquals(0.0f, thirdRepaymentInstallment.getFeeChargesDue());
+ assertEquals(0.0f,
thirdRepaymentInstallment.getFeeChargesOutstanding());
+ assertEquals(0.0f,
thirdRepaymentInstallment.getPenaltyChargesDue());
+ assertEquals(0.0f,
thirdRepaymentInstallment.getPenaltyChargesOutstanding());
+ assertEquals(250.0f,
thirdRepaymentInstallment.getTotalDueForPeriod());
+ assertEquals(250.0f,
thirdRepaymentInstallment.getTotalOutstandingForPeriod());
+ assertEquals(LocalDate.of(2023, 4, 1),
thirdRepaymentInstallment.getDueDate());
+
+ businessDateHelper.updateBusinessDate(new
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+ .date("2023.03.01").dateFormat("yyyy.MM.dd").locale("en"));
Review Comment:
I changed it to 28th of January, here we have multiple installments paid in
advance, and still the second installmnet will be fully refunded
--
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]