ruchiD commented on code in PR #3288:
URL: https://github.com/apache/fineract/pull/3288#discussion_r1254072669
##########
integration-tests/src/test/java/org/apache/fineract/integrationtests/DueDateRespectiveLoanRepaymentScheduleTest.java:
##########
@@ -1397,13 +1403,288 @@ public void scenario9() {
}
}
+ // Scenario10:
+ //
DUE_PENALTY_INTEREST_PRINCIPAL_FEE_IN_ADVANCE_PENALTY_INTEREST_PRINCIPAL_FEE_STRATEGY
+ // 1. Disburse the loan
+ // 2. Snooze fee
+ // 3. Merchant issued refund (partial)
+ // 4. Charge adjustment (same day)
+ // 5. Merchant issued refund (rest)
+ @Test
+ public void scenario10() {
+ try {
+ GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec,
responseSpec, Boolean.TRUE);
+ businessDateHelper.updateBusinessDate(new
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+ .date("2023.05.14").dateFormat("yyyy.MM.dd").locale("en"));
+
GlobalConfigurationHelper.updateChargeAccrualDateConfiguration(requestSpec,
responseSpec, "submitted-date");
+
+ final Account assetAccount =
this.accountHelper.createAssetAccount();
+ final Account incomeAccount =
this.accountHelper.createIncomeAccount();
+ final Account expenseAccount =
this.accountHelper.createExpenseAccount();
+ final Account overpaymentAccount =
this.accountHelper.createLiabilityAccount();
+
+ Integer fee = ChargesHelper.createCharges(requestSpec,
responseSpec,
+
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT,
"3.65", false));
+ final Integer loanProductID =
createLoanProductWithNoAccountingNoInterest("1000", "30", "1", "0",
+
LoanProductTestBuilder.DUE_PENALTY_INTEREST_PRINCIPAL_FEE_IN_ADVANCE_PENALTY_INTEREST_PRINCIPAL_FEE_STRATEGY,
+ assetAccount, incomeAccount, expenseAccount,
overpaymentAccount);
+ final Integer clientID = ClientHelper.createClient(requestSpec,
responseSpec, "01 January 2023");
+
+ final Integer loanID = applyForLoanApplication(clientID,
loanProductID, "1000", "30", "30", "1", "0",
+
LoanApplicationTestBuilder.DUE_PENALTY_INTEREST_PRINCIPAL_FEE_IN_ADVANCE_PENALTY_INTEREST_PRINCIPAL_FEE_STRATEGY,
+ "14 May 2023", "14 May 2023");
+
+ HashMap<String, Object> loanStatusHashMap =
LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
+ LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
+
+ loanStatusHashMap = loanTransactionHelper.approveLoan("14 May
2023", loanID);
+ LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
+
LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
+
+ loanStatusHashMap =
loanTransactionHelper.disburseLoanWithTransactionAmount("14 May 2023", loanID,
"127.95");
+ LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
+
+ businessDateHelper.updateBusinessDate(new
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+ .date("2023.06.11").dateFormat("yyyy.MM.dd").locale("en"));
+
+ final String requestJSON = new
LoanRescheduleRequestTestBuilder().updateRescheduleFromDate("13 June 2023")
+ .updateAdjustedDueDate("13 July
2023").updateSubmittedOnDate("11 June 2023").updateGraceOnPrincipal(null)
+
.updateGraceOnInterest(null).updateExtraTerms(null).build(loanID.toString());
+
+ final HashMap<String, String> map = new HashMap<>();
+ map.put("locale", "en");
+ map.put("dateFormat", "dd MMMM yyyy");
+ map.put("approvedOnDate", "11 June 2023");
+ final String aproveRequestJSON = new Gson().toJson(map);
+
+ Integer loanRescheduleRequestId =
this.loanRescheduleRequestHelper.createLoanRescheduleRequest(requestJSON);
+
this.loanRescheduleRequestHelper.approveLoanRescheduleRequest(loanRescheduleRequestId,
aproveRequestJSON);
+ Integer penalty1LoanChargeId =
loanTransactionHelper.addChargesForLoan(loanID,
+
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(fee),
"13 July 2023", "3.65"));
+ businessDateHelper.updateBusinessDate(new
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+ .date("2023.06.12").dateFormat("yyyy.MM.dd").locale("en"));
+ inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
+
+ GetLoansLoanIdResponse loanDetails =
loanTransactionHelper.getLoanDetails((long) loanID);
+ assertEquals(131.6,
loanDetails.getSummary().getTotalOutstanding());
+ assertEquals(131.6,
loanDetails.getRepaymentSchedule().getTotalOutstanding());
+ assertEquals(3.65,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesPaid());
+ assertEquals(3.65,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesOutstanding());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesOutstanding());
+ assertEquals(127.95,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalPaid());
+ assertEquals(127.95,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalOutstanding());
+ assertTrue(loanDetails.getStatus().getActive());
+
+ businessDateHelper.updateBusinessDate(new
BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
+ .date("2023.06.17").dateFormat("yyyy.MM.dd").locale("en"));
+ PostLoansLoanIdTransactionsResponse merchantIssuedRefund1 =
loanTransactionHelper.makeMerchantIssuedRefund(Long.valueOf(loanID),
+ new
PostLoansLoanIdTransactionsRequest().locale("en").dateFormat("dd MMMM
yyyy").transactionDate("17 June 2023")
+ .transactionAmount(125.0));
+
+ loanDetails = loanTransactionHelper.getLoanDetails((long) loanID);
+ assertEquals(6.6, loanDetails.getSummary().getTotalOutstanding());
+ assertEquals(6.6,
loanDetails.getRepaymentSchedule().getTotalOutstanding());
+ assertEquals(3.65,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesPaid());
+ assertEquals(3.65,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getFeeChargesOutstanding());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesDue());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesPaid());
+ assertEquals(0.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPenaltyChargesOutstanding());
+ assertEquals(127.95,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalDue());
+ assertEquals(125.0,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalPaid());
+ assertEquals(2.95,
loanDetails.getRepaymentSchedule().getPeriods().get(1).getPrincipalOutstanding());
+ assertTrue(loanDetails.getStatus().getActive());
+
Review Comment:
Hi @adamsaghy, Do we want to check distribution of various
portions(principal, fee, penalty, interest etc) for transaction also as we did
for repayment schedule.
Same for rest of the test and scenario11.
--
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]