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 a370875ce FINERACT-1760: Enhanced external id support for loan
transactions
a370875ce is described below
commit a370875ce815e9384b008b68c51f74693cd5db84
Author: Adam Saghy <[email protected]>
AuthorDate: Fri Nov 25 18:45:18 2022 +0100
FINERACT-1760: Enhanced external id support for loan transactions
---
.../loanaccount/data/LoanTransactionData.java | 23 ++--
.../service/LoanReadPlatformServiceImpl.java | 31 +++--
.../ExternalIdSupportIntegrationTest.java | 138 ++++++++++++++++++++-
.../common/loans/LoanTransactionHelper.java | 16 +++
4 files changed, 183 insertions(+), 25 deletions(-)
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java
index b5d4205be..d4d876ad1 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java
@@ -91,7 +91,7 @@ public class LoanTransactionData {
private List<LoanRepaymentScheduleInstallmentData>
loanRepaymentScheduleInstallments;
// Reverse Data
- private String reversalExternalId;
+ private final ExternalId reversalExternalId;
private LocalDate reversedOnDate;
private List<LoanTransactionRelationData> transactionRelations;
@@ -126,7 +126,7 @@ public class LoanTransactionData {
this.penaltyChargesPortion = null;
this.overpaymentPortion = null;
this.unrecognizedIncomePortion = null;
- this.externalId = null;
+ this.externalId = ExternalId.empty();
this.transfer = null;
this.fixedEmiAmount = null;
this.outstandingLoanBalance = null;
@@ -135,6 +135,7 @@ public class LoanTransactionData {
this.possibleNextRepaymentDate = null;
this.paymentTypeOptions = null;
this.writeOffReasonOptions = null;
+ this.reversalExternalId = ExternalId.empty();
}
public static LoanTransactionData importInstance(BigDecimal
repaymentAmount, LocalDate repaymentDate, Long repaymentTypeId,
@@ -177,7 +178,7 @@ public class LoanTransactionData {
this.penaltyChargesPortion = null;
this.overpaymentPortion = null;
this.unrecognizedIncomePortion = null;
- this.externalId = null;
+ this.externalId = ExternalId.empty();
this.transfer = null;
this.fixedEmiAmount = null;
this.outstandingLoanBalance = null;
@@ -186,6 +187,7 @@ public class LoanTransactionData {
this.possibleNextRepaymentDate = null;
this.paymentTypeOptions = null;
this.writeOffReasonOptions = null;
+ this.reversalExternalId = ExternalId.empty();
}
public void setNumberOfRepayments(Integer numberOfRepayments) {
@@ -229,8 +231,8 @@ public class LoanTransactionData {
boolean manuallyReversed, Long loanId, String externalLoanId) {
this(id, externalLoanId, officeId, officeName, transactionType,
paymentDetailData, currency, date, amount, netDisbursalAmount,
principalPortion, interestPortion, feeChargesPortion,
penaltyChargesPortion, overpaymentPortion, unrecognizedIncomePortion,
- paymentTypeOptions, externalId, transfer, fixedEmiAmount,
outstandingLoanBalance, null, manuallyReversed, null, null,
- loanId);
+ paymentTypeOptions, externalId, transfer, fixedEmiAmount,
outstandingLoanBalance, null, manuallyReversed,
+ ExternalId.empty(), null, loanId);
}
public LoanTransactionData(final Long id, final Long officeId, final
String officeName, final LoanTransactionEnumData transactionType,
@@ -239,7 +241,7 @@ public class LoanTransactionData {
final BigDecimal feeChargesPortion, final BigDecimal
penaltyChargesPortion, final BigDecimal overpaymentPortion,
final BigDecimal unrecognizedIncomePortion, final ExternalId
externalId, final AccountTransferData transfer,
BigDecimal fixedEmiAmount, BigDecimal outstandingLoanBalance,
LocalDate submittedOnDate, final boolean manuallyReversed,
- final String reversalExternalId, final LocalDate reversedOnDate,
Long loanId, String externalLoanId) {
+ final ExternalId reversalExternalId, final LocalDate
reversedOnDate, Long loanId, String externalLoanId) {
this(id, externalLoanId, officeId, officeName, transactionType,
paymentDetailData, currency, date, amount, netDisbursalAmount,
principalPortion, interestPortion, feeChargesPortion,
penaltyChargesPortion, overpaymentPortion, unrecognizedIncomePortion,
null, externalId, transfer, fixedEmiAmount,
outstandingLoanBalance, submittedOnDate, manuallyReversed, reversalExternalId,
@@ -253,7 +255,7 @@ public class LoanTransactionData {
final BigDecimal overpaymentPortion, final BigDecimal
unrecognizedIncomePortion,
final Collection<PaymentTypeData> paymentTypeOptions, final
ExternalId externalId, final AccountTransferData transfer,
final BigDecimal fixedEmiAmount, BigDecimal
outstandingLoanBalance, final LocalDate submittedOnDate,
- final boolean manuallyReversed, final String reversalExternalId,
final LocalDate reversedOnDate, Long loanId) {
+ final boolean manuallyReversed, final ExternalId
reversalExternalId, final LocalDate reversedOnDate, Long loanId) {
this.id = id;
this.loanId = loanId;
this.externalLoanId = externalLoanId;
@@ -286,10 +288,10 @@ public class LoanTransactionData {
public LoanTransactionData(Long id, LoanTransactionEnumData
transactionType, LocalDate date, BigDecimal totalAmount,
BigDecimal netDisbursalAmount, BigDecimal principalPortion,
BigDecimal interestPortion, BigDecimal feeChargesPortion,
BigDecimal penaltyChargesPortion, BigDecimal overpaymentPortion,
BigDecimal unrecognizedIncomePortion,
- BigDecimal outstandingLoanBalance, final boolean manuallyReversed,
Long loanId, String externalLoanId) {
+ BigDecimal outstandingLoanBalance, final boolean manuallyReversed,
ExternalId externalId, Long loanId, String externalLoanId) {
this(id, externalLoanId, null, null, transactionType, null, null,
date, totalAmount, netDisbursalAmount, principalPortion,
- interestPortion, feeChargesPortion, penaltyChargesPortion,
overpaymentPortion, unrecognizedIncomePortion, null, null, null,
- null, outstandingLoanBalance, null, manuallyReversed, null,
null, loanId);
+ interestPortion, feeChargesPortion, penaltyChargesPortion,
overpaymentPortion, unrecognizedIncomePortion, null, externalId,
+ null, null, outstandingLoanBalance, null, manuallyReversed,
ExternalId.empty(), null, loanId);
}
public static LoanTransactionData
loanTransactionDataForDisbursalTemplate(final LoanTransactionEnumData
transactionType,
@@ -355,6 +357,7 @@ public class LoanTransactionData {
this.submittedOnDate = submittedOnDate;
this.manuallyReversed = manuallyReversed;
this.possibleNextRepaymentDate = possibleNextRepaymentDate;
+ this.reversalExternalId = ExternalId.empty();
}
public boolean isNotDisbursement() {
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
index 9ad07d2fe..b8ae00ea8 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
@@ -44,6 +44,7 @@ import
org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.core.domain.ExternalId;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
import org.apache.fineract.infrastructure.core.service.DateUtils;
+import org.apache.fineract.infrastructure.core.service.ExternalIdFactory;
import org.apache.fineract.infrastructure.core.service.Page;
import org.apache.fineract.infrastructure.core.service.PaginationHelper;
import org.apache.fineract.infrastructure.core.service.SearchParameters;
@@ -459,7 +460,7 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
loanRepaymentScheduleInstallment.getInterestOutstanding(currency).getAmount(),
loanRepaymentScheduleInstallment.getFeeChargesOutstanding(currency).getAmount().subtract(adjustedChargeAmount),
loanRepaymentScheduleInstallment.getPenaltyChargesOutstanding(currency).getAmount(),
null, unrecognizedIncomePortion,
- paymentOptions, null, null, null, outstandingLoanBalance,
false, loanId, loan.getExternalId());
+ paymentOptions, ExternalId.empty(), null, null,
outstandingLoanBalance, false, loanId, loan.getExternalId());
}
private BigDecimal adjustPrepayInstallmentCharge(Loan loan, final
LocalDate onDate) {
@@ -496,7 +497,7 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
final BigDecimal outstandingLoanBalance = null;
final BigDecimal unrecognizedIncomePortion = null;
return new LoanTransactionData(null, null, null, transactionType,
null, currencyData, waiveOfInterest.getTransactionDate(), amount,
- loan.getNetDisbursalAmount(), null, null, null, null, null,
null, null, null, outstandingLoanBalance,
+ loan.getNetDisbursalAmount(), null, null, null, null, null,
ExternalId.empty(), null, null, outstandingLoanBalance,
unrecognizedIncomePortion, false, loanId,
loan.getExternalId());
}
@@ -508,7 +509,8 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
final LoanTransactionEnumData transactionType =
LoanEnumerations.transactionType(LoanTransactionType.WRITEOFF);
final BigDecimal unrecognizedIncomePortion = null;
return new LoanTransactionData(null, null, null, transactionType,
null, null, DateUtils.getBusinessLocalDate(), null, null, null,
- null, null, null, null, null, null, null,
outstandingLoanBalance, unrecognizedIncomePortion, false, null, null);
+ null, null, null, null, ExternalId.empty(), null, null,
outstandingLoanBalance, unrecognizedIncomePortion, false, null,
+ null);
}
@@ -1374,8 +1376,9 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
final BigDecimal unrecognizedIncomePortion =
JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "unrecognizedIncome");
final BigDecimal outstandingLoanBalance =
JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "outstandingLoanBalance");
final String externalIdStr = rs.getString("externalId");
- final ExternalId externalId = StringUtils.isBlank(externalIdStr) ?
ExternalId.empty() : new ExternalId(externalIdStr);
- final String reversalExternalId =
rs.getString("reversalExternalId");
+ final ExternalId externalId =
ExternalIdFactory.produce(externalIdStr);
+ final String reversalExternalIdStr =
rs.getString("reversalExternalId");
+ final ExternalId reversalExternalId =
ExternalIdFactory.produce(reversalExternalIdStr);
final LocalDate reversedOnDate = JdbcSupport.getLocalDate(rs,
"reversedOnDate");
final BigDecimal netDisbursalAmount =
JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "netDisbursalAmount");
@@ -1873,8 +1876,8 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
BigDecimal outstandingLoanBalance = null;
final BigDecimal unrecognizedIncomePortion = null;
return new LoanTransactionData(null, null, null, transactionType,
null, null, null, loan.getTotalWrittenOff(),
- loan.getNetDisbursalAmount(), null, null, null, null, null,
unrecognizedIncomePortion, paymentOptions, null, null, null,
- outstandingLoanBalance, false, loanId, loan.getExternalId());
+ loan.getNetDisbursalAmount(), null, null, null, null, null,
unrecognizedIncomePortion, paymentOptions, ExternalId.empty(),
+ null, null, outstandingLoanBalance, false, loanId,
loan.getExternalId());
}
@@ -1887,8 +1890,8 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
final List<CodeValueData> writeOffReasonOptions = new ArrayList<>(
this.codeValueReadPlatformService.retrieveCodeValuesByCode(LoanApiConstants.WRITEOFFREASONS));
LoanTransactionData loanTransactionData = new
LoanTransactionData(null, null, null, transactionType, null, loan.getCurrency(),
- DateUtils.getBusinessLocalDate(), totalOutstanding,
loan.getNetDisbursalAmount(), null, null, null, null, null, null, null,
- null, null, null, false, loanId, loan.getExternalId());
+ DateUtils.getBusinessLocalDate(), totalOutstanding,
loan.getNetDisbursalAmount(), null, null, null, null, null,
+ ExternalId.empty(), null, null, null, null, false, loanId,
loan.getExternalId());
loanTransactionData.setWriteOffReasonOptions(writeOffReasonOptions);
return loanTransactionData;
}
@@ -2018,8 +2021,8 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
+ ", tr.amount as total, tr.principal_portion_derived as
principal, tr.interest_portion_derived as interest, "
+ " tr.fee_charges_portion_derived as fees,
tr.penalty_charges_portion_derived as penalties, "
+ " tr.overpayment_portion_derived as overpayment,
tr.outstanding_loan_balance_derived as outstandingLoanBalance, "
- + " tr.unrecognized_income_portion as unrecognizedIncome,
tr.loan_id as loanId, l.external_id as externalLoanId from m_loan_transaction
tr "
- + " left join m_loan l on tr.loan_id = l.id";
+ + " tr.unrecognized_income_portion as unrecognizedIncome,
tr.loan_id as loanId, l.external_id as externalLoanId, "
+ + " tr.external_id as externalId from m_loan_transaction
tr " + " left join m_loan l on tr.loan_id = l.id";
}
@Override
@@ -2040,10 +2043,12 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
final BigDecimal overPaymentPortion =
JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "overpayment");
final BigDecimal unrecognizedIncomePortion =
JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "unrecognizedIncome");
final BigDecimal outstandingLoanBalance =
JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "outstandingLoanBalance");
+ final String externalIdStr = rs.getString("externalId");
+ final ExternalId externalId =
ExternalIdFactory.produce(externalIdStr);
return new LoanTransactionData(id, transactionType, date,
totalAmount, null, principalPortion, interestPortion,
feeChargesPortion, penaltyChargesPortion,
overPaymentPortion, unrecognizedIncomePortion, outstandingLoanBalance, false,
- loanId, externalLoanId);
+ externalId, loanId, externalLoanId);
}
}
@@ -2283,7 +2288,7 @@ public class LoanReadPlatformServiceImpl implements
LoanReadPlatformService {
loanRepaymentScheduleInstallment.getInterestOutstanding(currency).getAmount(),
loanRepaymentScheduleInstallment.getFeeChargesOutstanding(currency).getAmount(),
loanRepaymentScheduleInstallment.getPenaltyChargesOutstanding(currency).getAmount(),
null, unrecognizedIncomePortion,
- paymentTypeOptions, null, null, null, outstandingLoanBalance,
isReversed, loanId, loan.getExternalId());
+ paymentTypeOptions, ExternalId.empty(), null, null,
outstandingLoanBalance, isReversed, loanId, loan.getExternalId());
}
private static final class CurrencyMapper implements
RowMapper<CurrencyData> {
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalIdSupportIntegrationTest.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalIdSupportIntegrationTest.java
index 5b3e5e814..cf8b3ab81 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalIdSupportIntegrationTest.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalIdSupportIntegrationTest.java
@@ -31,6 +31,7 @@ import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.HashMap;
import java.util.UUID;
+import
org.apache.fineract.client.models.GetLoansLoanIdTransactionsTransactionIdResponse;
import org.apache.fineract.client.models.PostClientsResponse;
import org.apache.fineract.client.models.PostLoansLoanIdChargesChargeIdRequest;
import
org.apache.fineract.client.models.PostLoansLoanIdChargesChargeIdResponse;
@@ -135,10 +136,26 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
(long) penalty1LoanChargeId, new
PostLoansLoanIdChargesChargeIdRequest().externalId(waiveChargeExternalIdStr));
assertEquals(waiveChargeExternalIdStr,
waiveLoanChargeResult.getSubResourceExternalId());
+ GetLoansLoanIdTransactionsTransactionIdResponse response =
loanTransactionHelper.getLoanTransactionDetails((long) loanId,
+ waiveChargeExternalIdStr);
+ assertEquals(waiveChargeExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
waiveLoanChargeResult.getSubResourceExternalId());
+ assertEquals(waiveChargeExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
waiveChargeExternalIdStr);
+ assertEquals(waiveChargeExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
HashMap undoWaiveLoanChargeResult =
loanTransactionHelper.undoWaiveLoanCharge((long) loanId,
waiveChargeExternalIdStr);
assertEquals(waiveChargeExternalIdStr,
undoWaiveLoanChargeResult.get("subResourceExternalId"));
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, waiveChargeExternalIdStr);
+ assertEquals(waiveChargeExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
+
Long.valueOf(undoWaiveLoanChargeResult.get("subResourceId").toString()));
+ assertEquals(waiveChargeExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
waiveChargeExternalIdStr);
+ assertEquals(waiveChargeExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
waiveLoanChargeResult = loanTransactionHelper.waiveLoanCharge((long)
loanId, (long) penalty1LoanChargeId,
new PostLoansLoanIdChargesChargeIdRequest());
@@ -165,6 +182,14 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionAmount(5.0));
assertNotNull(repaymentResult.getResourceExternalId());
+ String repaymentExternalId = repaymentResult.getResourceExternalId();
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, repaymentExternalId);
+ assertEquals(repaymentExternalId, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
repaymentResult.getResourceId());
+ assertEquals(repaymentExternalId, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
repaymentExternalId);
+ assertEquals(repaymentExternalId, response.getExternalId());
+
// Check whether the provided external id was retrieved
String transactionExternalIdStr = UUID.randomUUID().toString();
final PostLoansLoanIdTransactionsResponse
repaymentResultWithExternalId =
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
@@ -185,6 +210,14 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionDate("06 September
2022").locale("en").transactionAmount(5.0).externalId(transactionExternalIdStr));
assertEquals(transactionExternalIdStr,
merchantIssuedRefundResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
+ merchantIssuedRefundResultWithExternalId.getResourceId());
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
final PostLoansLoanIdTransactionsResponse payoutRefundResult =
loanTransactionHelper.makePayoutRefund(loanExternalIdStr,
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM
yyyy").transactionDate("06 September 2022").locale("en")
@@ -198,6 +231,13 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionDate("06 September
2022").locale("en").transactionAmount(5.0).externalId(transactionExternalIdStr));
assertEquals(transactionExternalIdStr,
payoutRefundResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
payoutRefundResultWithExternalId.getResourceId());
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
final PostLoansLoanIdTransactionsResponse goodWillCreditResult =
loanTransactionHelper.makeGoodwillCredit(loanExternalIdStr,
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM
yyyy").transactionDate("06 September 2022").locale("en")
@@ -211,11 +251,26 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionDate("06 September
2022").locale("en").transactionAmount(5.0).externalId(transactionExternalIdStr));
assertEquals(transactionExternalIdStr,
goodWillCreditResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
goodWillCreditResultWithExternalId.getResourceId());
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
final PostLoansLoanIdTransactionsResponse writeoffResult =
loanTransactionHelper.makeWriteoff(loanExternalIdStr,
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM
yyyy").transactionDate("06 September 2022").locale("en"));
assertNotNull(writeoffResult.getResourceExternalId());
+ transactionExternalIdStr = writeoffResult.getResourceExternalId();
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
writeoffResult.getResourceId());
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
final PostLoansLoanIdTransactionsResponse makeRecoveryPaymentResult =
loanTransactionHelper.makeRecoveryPayment(loanExternalIdStr,
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM
yyyy").transactionDate("06 September 2022").locale("en")
@@ -229,10 +284,17 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionDate("06 September
2022").locale("en").transactionAmount(5.0).externalId(transactionExternalIdStr));
assertEquals(transactionExternalIdStr,
makeRecoveryPaymentResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
+ makeRecoveryPaymentResultWithExternalId.getResourceId());
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
final PostLoansLoanIdTransactionsResponse undoWriteoffResult =
loanTransactionHelper.makeUndoWriteoff(loanExternalIdStr,
- new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM
yyyy").transactionDate("06 September 2022").locale("en")
- .transactionAmount(5.0));
+ new PostLoansLoanIdTransactionsRequest());
assertNotNull(undoWriteoffResult.getResourceExternalId());
// Check whether the provided external id was retrieved
@@ -247,6 +309,13 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.makeUndoWriteoff(loanExternalIdStr, new
PostLoansLoanIdTransactionsRequest());
assertEquals(transactionExternalIdStr,
undoWriteoffResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
undoWriteoffResultWithExternalId.getResourceId());
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+
// Overpay the account
transactionExternalIdStr = UUID.randomUUID().toString();
final PostLoansLoanIdTransactionsResponse
overpaymentResultWithExternalId = loanTransactionHelper
@@ -267,6 +336,14 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionDate("06 September
2022").locale("en").transactionAmount(5.0).externalId(transactionExternalIdStr));
assertEquals(transactionExternalIdStr,
makeCreditBalanceRefundResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
+ makeCreditBalanceRefundResultWithExternalId.getResourceId());
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
final PostLoansLoanIdTransactionsResponse chargeRefundResult =
loanTransactionHelper.makeChargeRefund(loanExternalIdStr,
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM
yyyy").locale("en").loanChargeId(penalty1LoanChargeId)
@@ -280,6 +357,13 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.loanChargeId(penalty1LoanChargeId).transactionAmount(1.0).externalId(transactionExternalIdStr));
assertEquals(transactionExternalIdStr,
chargeRefundResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanId, transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
chargeRefundResultWithExternalId.getResourceId());
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
transactionExternalIdStr);
+ assertEquals(transactionExternalIdStr, response.getExternalId());
+
// Create a loan with interest and test the rest of the transactions
final String loanProductWithInterestJSON = new
LoanProductTestBuilder().withPrincipal("10000.0").withRepaymentTypeAsMonth()
@@ -335,6 +419,13 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionDate(formattedDate).locale("en").transactionAmount(1.0).externalId(waiveInterestTxnExternalIdStr));
assertEquals(waiveInterestTxnExternalIdStr,
waiveInterestResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanWithInterestId, waiveInterestTxnExternalIdStr);
+ assertEquals(waiveInterestTxnExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
waiveInterestResultWithExternalId.getResourceId());
+ assertEquals(waiveInterestTxnExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
waiveInterestTxnExternalIdStr);
+ assertEquals(waiveInterestTxnExternalIdStr, response.getExternalId());
+
String inAdvanceRepaymentTxnExternalIdStr =
UUID.randomUUID().toString();
final PostLoansLoanIdTransactionsResponse inAdvanceRepaymentResult =
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM
yyyy").transactionDate(formattedDate).locale("en")
@@ -358,11 +449,25 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionDate(formattedDate).locale("en").transactionAmount(5.0).externalId(makeRefundTxnExternalIdStr));
assertEquals(makeRefundTxnExternalIdStr,
makeRefundByCashResultWithExternalId.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanWithInterestId, makeRefundTxnExternalIdStr);
+ assertEquals(makeRefundTxnExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
makeRefundByCashResultWithExternalId.getResourceId());
+ assertEquals(makeRefundTxnExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
makeRefundTxnExternalIdStr);
+ assertEquals(makeRefundTxnExternalIdStr, response.getExternalId());
+
PostLoansLoanIdTransactionsResponse adjustmentResult =
loanTransactionHelper.reverseLoanTransaction((long) loanWithInterestId,
inAdvanceRepayment2TxnExternalIdStr, new
PostLoansLoanIdTransactionsTransactionIdRequest().transactionDate(formattedDate)
.locale("en").dateFormat("dd MMMM
yyyy").transactionAmount(0.0));
assertEquals(inAdvanceRepayment2TxnExternalIdStr,
adjustmentResult.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanWithInterestId, inAdvanceRepayment2TxnExternalIdStr);
+ assertEquals(inAdvanceRepayment2TxnExternalIdStr,
response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
adjustmentResult.getResourceId());
+ assertEquals(inAdvanceRepayment2TxnExternalIdStr,
response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
inAdvanceRepayment2TxnExternalIdStr);
+ assertEquals(inAdvanceRepayment2TxnExternalIdStr,
response.getExternalId());
+
adjustmentResult =
loanTransactionHelper.reverseLoanTransaction(loanExternalIdStr,
inAdvanceRepaymentResult.getResourceId(),
new
PostLoansLoanIdTransactionsTransactionIdRequest().transactionDate(formattedDate).locale("en").dateFormat("dd
MMMM yyyy")
.transactionAmount(0.0));
@@ -374,6 +479,13 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionAmount(2.0).externalId(adjustTransactionExternalId));
assertEquals(adjustTransactionExternalId,
adjustmentResult.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanWithInterestId, adjustTransactionExternalId);
+ assertEquals(adjustTransactionExternalId, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
adjustmentResult.getResourceId());
+ assertEquals(adjustTransactionExternalId, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
adjustTransactionExternalId);
+ assertEquals(adjustTransactionExternalId, response.getExternalId());
+
adjustmentResult =
loanTransactionHelper.adjustLoanTransaction(loanExternalIdStr,
adjustmentResult.getResourceExternalId(),
new
PostLoansLoanIdTransactionsTransactionIdRequest().transactionDate(formattedDate).locale("en").dateFormat("dd
MMMM yyyy")
.transactionAmount(1.0));
@@ -390,6 +502,13 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
.transactionAmount(2.0).externalId(chargebackTransactionExternalId).paymentTypeId(1L));
assertEquals(chargebackTransactionExternalId,
chargebackResult.getResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanWithInterestId, chargebackTransactionExternalId);
+ assertEquals(chargebackTransactionExternalId,
response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
chargebackResult.getResourceId());
+ assertEquals(chargebackTransactionExternalId,
response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
chargebackTransactionExternalId);
+ assertEquals(chargebackTransactionExternalId,
response.getExternalId());
+
chargebackResult =
loanTransactionHelper.chargebackLoanTransaction(loanExternalIdStr,
repaymentForChargebackResult.getResourceExternalId(),
new
PostLoansLoanIdTransactionsTransactionIdRequest().locale("en").transactionAmount(2.0).paymentTypeId(2L));
@@ -402,6 +521,13 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
new
PostLoansLoanIdChargesChargeIdRequest().externalId(chargeAdjustmentExternalIdStr).amount(1.0).locale("en"));
assertEquals(chargeAdjustmentExternalIdStr,
chargeAdjustmentResult.getSubResourceExternalId());
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanWithInterestId, chargeAdjustmentExternalIdStr);
+ assertEquals(chargeAdjustmentExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
chargeAdjustmentResult.getSubResourceExternalId());
+ assertEquals(chargeAdjustmentExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
chargeAdjustmentExternalIdStr);
+ assertEquals(chargeAdjustmentExternalIdStr, response.getExternalId());
+
// Check whether an external id was generated
chargeAdjustmentResult = loanTransactionHelper.chargeAdjustment((long)
loanWithInterestId, (long) penalty3LoanChargeId,
new
PostLoansLoanIdChargesChargeIdRequest().amount(1.0).locale("en"));
@@ -416,6 +542,14 @@ public class ExternalIdSupportIntegrationTest extends
IntegrationTest {
LoanTransactionHelper.getPayChargeJSON(formattedDate, null,
payChargeExternalIdStr), "");
assertEquals(payChargeExternalIdStr,
payChargeResult.get("subResourceExternalId"));
+ response = loanTransactionHelper.getLoanTransactionDetails((long)
loanWithInterestId, payChargeExternalIdStr);
+ assertEquals(payChargeExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
+ Long.valueOf(payChargeResult.get("subResourceId").toString()));
+ assertEquals(payChargeExternalIdStr, response.getExternalId());
+ response =
loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr,
payChargeExternalIdStr);
+ assertEquals(payChargeExternalIdStr, response.getExternalId());
+
GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(requestSpec,
responseSpec, 50, false);
}
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java
index d499bfc14..71e99cc91 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java
@@ -784,6 +784,22 @@ public class LoanTransactionHelper extends IntegrationTest
{
return ok(fineract().loanTransactions.retrieveTransaction(loanId,
transactionId, null));
}
+ public GetLoansLoanIdTransactionsTransactionIdResponse
getLoanTransactionDetails(final String loanExternalId,
+ final Long transactionId) {
+ return
ok(fineract().loanTransactions.retrieveTransactionByLoanExternalIdAndTransactionId(loanExternalId,
transactionId, null));
+ }
+
+ public GetLoansLoanIdTransactionsTransactionIdResponse
getLoanTransactionDetails(final Long loanId,
+ final String transactionExternalId) {
+ return
ok(fineract().loanTransactions.retrieveTransactionByTransactionExternalId(loanId,
transactionExternalId, null));
+ }
+
+ public GetLoansLoanIdTransactionsTransactionIdResponse
getLoanTransactionDetails(final String loanExternalId,
+ final String transactionExternalId) {
+ return
ok(fineract().loanTransactions.retrieveTransactionByLoanExternalIdAndTransactionExternalId(loanExternalId,
+ transactionExternalId, null));
+ }
+
public GetLoansLoanIdResponse getLoanDetails(final Long loanId) {
return ok(fineract().loans.retrieveLoan(loanId, false, "all", null,
null));
}