This is an automated email from the ASF dual-hosted git repository.
adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 33ecbc713 FINERACT-2092: Fix adjust transactions handling
33ecbc713 is described below
commit 33ecbc71304c1855705b19e3e9d5b0d4a654cf7e
Author: Adam Saghy <[email protected]>
AuthorDate: Tue Jun 25 13:35:42 2024 +0200
FINERACT-2092: Fix adjust transactions handling
---
.../loanaccount/domain/LoanTransaction.java | 4 ++
.../LoanWritePlatformServiceJpaRepositoryImpl.java | 4 +-
.../LoanTransactionInterestPaymentWaiverTest.java | 45 ++++++++++++++++++++++
3 files changed, 51 insertions(+), 2 deletions(-)
diff --git
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
index 1508b4829..973c8245f 100644
---
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
+++
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
@@ -1040,6 +1040,10 @@ public class LoanTransaction extends
AbstractAuditableWithUTCDateTimeCustom<Long
return false;
}
+ public String getChargeRefundChargeType() {
+ return chargeRefundChargeType;
+ }
+
// TODO missing hashCode(), equals(Object obj), but probably OK as long as
// this is never stored in a Collection.
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index 0040243bf..590d66d26 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -1444,8 +1444,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl
implements LoanWritePlatf
final Money transactionAmountAsMoney = Money.of(loan.getCurrency(),
transactionAmount);
final PaymentDetail paymentDetail =
this.paymentDetailWritePlatformService.createPaymentDetail(command, changes);
- LoanTransaction newTransactionDetail =
LoanTransaction.repayment(loan.getOffice(), transactionAmountAsMoney,
paymentDetail,
- transactionDate, txnExternalId);
+ LoanTransaction newTransactionDetail =
LoanTransaction.repaymentType(transactionToAdjust.getTypeOf(), loan.getOffice(),
+ transactionAmountAsMoney, paymentDetail, transactionDate,
txnExternalId, transactionToAdjust.getChargeRefundChargeType());
if (transactionToAdjust.isInterestWaiver()) {
Money unrecognizedIncome = transactionAmountAsMoney.zero();
Money interestComponent = transactionAmountAsMoney;
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionInterestPaymentWaiverTest.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionInterestPaymentWaiverTest.java
index 843fb73be..b8bd25f0c 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionInterestPaymentWaiverTest.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionInterestPaymentWaiverTest.java
@@ -1579,6 +1579,51 @@ public class LoanTransactionInterestPaymentWaiverTest
extends BaseLoanIntegratio
});
}
+ @Test
+ public void testInterestPaymentWaiverAdjustTransaction() {
+ runAt("15 January 2023", () -> {
+ Integer numberOfRepayments = 4;
+ double amount = 1000.0;
+ String loanDisbursementDate = "1 January 2023";
+
+ Long clientId =
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+
+ LOG.info("------------------------------CREATING NEW LOAN PRODUCT
---------------------------------------");
+ PostLoanProductsResponse loanProductResponse = loanProductHelper
+
.createLoanProduct(createOnePeriod30DaysLongNoInterestPeriodicAccrualProductWithAdvancedPaymentAllocation()
+
.loanScheduleType(LoanScheduleType.PROGRESSIVE.toString()));
+
+ Long loanId =
applyAndApproveLoanProgressiveAdvancedPaymentAllocationStrategyMonthlyRepayments(clientId,
+ loanProductResponse.getResourceId(), numberOfRepayments,
loanDisbursementDate, amount, null);
+
+ verifyRepaymentSchedule(loanId, //
+ installment(1000.0, null, "01 January 2023"), //
+ installment(250.0, false, "01 February 2023"), //
+ installment(250.0, false, "01 March 2023"), //
+ installment(250.0, false, "01 April 2023"), //
+ installment(250.0, false, "01 May 2023") //
+ );
+
+ loanTransactionHelper.disburseLoan(loanId, new
PostLoansLoanIdRequest().actualDisbursementDate("1 January 2023")
+
.dateFormat(DATETIME_PATTERN).transactionAmount(BigDecimal.valueOf(1000.0)).locale("en"));
+
+ // loan should be active
+ Long transactionId = addInterestPaymentWaiverForLoan(loanId,
250.0, "2 January 2023");
+
+ verifyTransactions(loanId, //
+ transaction(1000.0, "Disbursement", "01 January 2023",
1000.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
+ transaction(250.0, "Interest Payment Waiver", "02 January
2023", 750.0, 250.0, 0.0, 0.0, 0, 0.0, 0.0));
+
+ loanTransactionHelper.adjustLoanTransaction(loanId, transactionId,
new PostLoansLoanIdTransactionsTransactionIdRequest()
+
.transactionAmount(200.0).dateFormat(DATETIME_PATTERN).transactionDate("3
January 2023").locale("en"));
+
+ verifyTransactions(loanId, //
+ transaction(1000.0, "Disbursement", "01 January 2023",
1000.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
+ transaction(250.0, "Interest Payment Waiver", "02 January
2023", 750.0, 250.0, 0.0, 0.0, 0, 0.0, 0.0, true),
+ transaction(200.0, "Interest Payment Waiver", "03 January
2023", 800.0, 200.0, 0.0, 0.0, 0, 0.0, 0.0));
+ });
+ }
+
private void chargeFee(Long loanId, Double amount, String dueDate) {
PostChargesResponse feeCharge = chargesHelper.createCharges(new
PostChargesRequest().penalty(false).amount(9.0)
.chargeCalculationType(ChargeCalculationType.FLAT.getValue()).chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE.getValue())