From 84649193fb47a771bcbde287aba9a21d6a582f1b Mon Sep 17 00:00:00 2001 From: taskain7 Date: Thu, 9 Feb 2023 15:45:38 +0100 Subject: [PATCH] [FINERACT-1884] fix last loan transaction --- .../portfolio/loanaccount/domain/Loan.java | 11 +++--- .../LoanTransactionSummaryTest.java | 38 +++++++++++++++++++ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index 497e2c441..4de3ed85c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java @@ -4974,12 +4974,11 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom { } public LoanTransaction getLastRepaymentTransaction() { - for (final LoanTransaction loanTransaction : this.loanTransactions) { - if (!loanTransaction.isReversed() && loanTransaction.isRepaymentType()) { - return loanTransaction; - } - } - return null; + return loanTransactions.stream() // + .filter(loanTransaction -> !loanTransaction.isReversed()) // + .filter(LoanTransaction::isRepaymentType) // + .reduce((first, second) -> second) // + .orElse(null); } public LocalDate getLastUserTransactionForChargeCalc() { diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionSummaryTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionSummaryTest.java index 8c5f2881e..a15bfa934 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionSummaryTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionSummaryTest.java @@ -197,7 +197,45 @@ public class LoanTransactionSummaryTest { assertEquals(loanSummary.getTotalChargeAdjustment(), 10.00); // charge assertEquals(loanSummary.getTotalChargeback(), 50.00); + } + @Test + public void lastRepaymentAmountTest() { + // Loan ExternalId + String loanExternalIdStr = UUID.randomUUID().toString(); + + // Delinquency Bucket + final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec); + final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec, + delinquencyBucketId); + + // Client and Loan account creation + + final Integer clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue(); + final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper, + delinquencyBucketId); + assertNotNull(getLoanProductsProductResponse); + + final Integer loanId = createLoanAccount(clientId, getLoanProductsProductResponse.getId(), loanExternalIdStr); + + // Merchant Refund + final PostLoansLoanIdTransactionsResponse merchantIssuedRefund = loanTransactionHelper.makeMerchantIssuedRefund((long) loanId, + new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("8 September 2022").locale("en") + .transactionAmount(20.0)); + + final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr, + new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("8 September 2022").locale("en") + .transactionAmount(100.0)); + + final PostLoansLoanIdTransactionsResponse repaymentTransaction_2 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr, + new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("6 September 2022").locale("en") + .transactionAmount(50.0)); + + // Retrieve Loan with loanId + GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails((long) loanId); + + assertEquals(100.0, loanDetails.getDelinquent().getLastPaymentAmount()); + assertEquals(LocalDate.of(2022, 9, 8), loanDetails.getDelinquent().getLastPaymentDate()); } private GetLoanProductsProductIdResponse createLoanProduct(final LoanTransactionHelper loanTransactionHelper,