diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResourceSwagger.java index f488692e4..89258bfcb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResourceSwagger.java @@ -350,7 +350,7 @@ final class LoanTransactionsApiResourceSwagger { @Schema(example = "95174ff9-1a75-4d72-a413-6f9b1cb988b7") public String externalId; @Schema(example = "28 June 2022") - public String date; + public LocalDate date; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java index d01f23725..5e348d2b0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java @@ -479,6 +479,18 @@ public class LoanTransaction extends AbstractAuditableWithUTCDateTimeCustom { return this.principalPortion; } + public BigDecimal getInterestPortion() { + return this.interestPortion; + } + + public BigDecimal getPenaltyChargesPortion() { + return this.penaltyChargesPortion; + } + + public BigDecimal getFeeChargesPortion() { + return this.feeChargesPortion; + } + public Money getInterestPortion(final MonetaryCurrency currency) { return Money.of(currency, this.interestPortion); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java index 1a0560806..c187d86dd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java @@ -364,11 +364,10 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo businessEventNotifierService.notifyPostBusinessEvent(new LoanWaiveChargeUndoBusinessEvent(loanCharge)); - // TODO: this needs to be fixed in the future! Principal portion is bigdecimal, interest portion is money, ... changes.put("principalPortion", loanTransaction.getPrincipalPortion()); - changes.put("interestPortion", loanTransaction.getInterestPortion(loan.getCurrency())); - changes.put("feeChargesPortion", loanTransaction.getFeeChargesPortion(loan.getCurrency())); - changes.put("penaltyChargesPortion", loanTransaction.getPenaltyChargesPortion(loan.getCurrency())); + changes.put("interestPortion", loanTransaction.getInterestPortion()); + changes.put("feeChargesPortion", loanTransaction.getFeeChargesPortion()); + changes.put("penaltyChargesPortion", loanTransaction.getPenaltyChargesPortion()); changes.put("outstandingLoanBalance", loanTransaction.getOutstandingLoanBalance()); changes.put("id", loanTransaction.getId()); changes.put("externalId", loanTransaction.getExternalId()); 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 f86628906..b98065e48 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 @@ -44,6 +44,8 @@ import org.apache.fineract.client.models.PostLoansLoanIdChargesResponse; import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest; import org.apache.fineract.client.models.PostLoansLoanIdTransactionsResponse; import org.apache.fineract.client.models.PostLoansLoanIdTransactionsTransactionIdRequest; +import org.apache.fineract.client.models.PutChargeTransactionChangesRequest; +import org.apache.fineract.client.models.PutChargeTransactionChangesResponse; import org.apache.fineract.client.models.PutLoansLoanIdChargesChargeIdRequest; import org.apache.fineract.client.models.PutLoansLoanIdChargesChargeIdResponse; import org.apache.fineract.integrationtests.client.IntegrationTest; @@ -181,13 +183,13 @@ public class ExternalIdSupportIntegrationTest extends IntegrationTest { assertEquals(waiveChargeExternalIdStr, response.getExternalId()); // Check whether an external id was generated - HashMap undoWaiveLoanChargeResult = loanTransactionHelper.undoWaiveLoanCharge((long) loanId, waiveChargeExternalIdStr); - assertEquals(waiveChargeExternalIdStr, undoWaiveLoanChargeResult.get("subResourceExternalId")); + PutChargeTransactionChangesResponse undoWaiveLoanChargeResult = loanTransactionHelper.undoWaiveLoanCharge((long) loanId, + waiveChargeExternalIdStr, new PutChargeTransactionChangesRequest()); + assertEquals(waiveChargeExternalIdStr, undoWaiveLoanChargeResult.getSubResourceExternalId()); response = loanTransactionHelper.getLoanTransactionDetails((long) loanId, waiveChargeExternalIdStr); assertEquals(waiveChargeExternalIdStr, response.getExternalId()); - response = loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr, - Long.valueOf(undoWaiveLoanChargeResult.get("subResourceId").toString())); + response = loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr, undoWaiveLoanChargeResult.getSubResourceId()); assertEquals(waiveChargeExternalIdStr, response.getExternalId()); response = loanTransactionHelper.getLoanTransactionDetails(loanExternalIdStr, waiveChargeExternalIdStr); assertEquals(waiveChargeExternalIdStr, response.getExternalId()); @@ -199,8 +201,9 @@ public class ExternalIdSupportIntegrationTest extends IntegrationTest { assertEquals(penalty1LoanChargeExternalId, waiveLoanChargeResult.getResourceExternalId()); // Check whether an external id was generated - undoWaiveLoanChargeResult = loanTransactionHelper.undoWaiveLoanCharge(loanExternalIdStr, waiveLoanChargeResult.getSubResourceId()); - assertNotNull(undoWaiveLoanChargeResult.get("subResourceExternalId")); + undoWaiveLoanChargeResult = loanTransactionHelper.undoWaiveLoanCharge(loanExternalIdStr, waiveLoanChargeResult.getSubResourceId(), + new PutChargeTransactionChangesRequest()); + assertNotNull(undoWaiveLoanChargeResult.getSubResourceExternalId()); // Check whether an external id was generated waiveChargeExternalIdStr = UUID.randomUUID().toString(); @@ -211,8 +214,8 @@ public class ExternalIdSupportIntegrationTest extends IntegrationTest { // Check whether an external id was generated undoWaiveLoanChargeResult = loanTransactionHelper.undoWaiveLoanCharge(loanExternalIdStr, - waiveLoanChargeResult.getSubResourceExternalId()); - assertEquals(waiveChargeExternalIdStr, undoWaiveLoanChargeResult.get("subResourceExternalId")); + waiveLoanChargeResult.getSubResourceExternalId(), new PutChargeTransactionChangesRequest()); + assertEquals(waiveChargeExternalIdStr, undoWaiveLoanChargeResult.getSubResourceExternalId()); // Check whether an external id was generated final PostLoansLoanIdTransactionsResponse repaymentResult = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr, 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 07616bd0e..39edb4b97 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 @@ -62,6 +62,8 @@ import org.apache.fineract.client.models.PostLoansLoanIdResponse; import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest; import org.apache.fineract.client.models.PostLoansLoanIdTransactionsResponse; import org.apache.fineract.client.models.PostLoansLoanIdTransactionsTransactionIdRequest; +import org.apache.fineract.client.models.PutChargeTransactionChangesRequest; +import org.apache.fineract.client.models.PutChargeTransactionChangesResponse; import org.apache.fineract.client.models.PutLoansLoanIdChargesChargeIdRequest; import org.apache.fineract.client.models.PutLoansLoanIdChargesChargeIdResponse; import org.apache.fineract.client.models.PutLoansLoanIdResponse; @@ -504,25 +506,28 @@ public class LoanTransactionHelper extends IntegrationTest { return ok(fineract().loanTransactions.executeLoanTransaction(loanId, request, "repayment")); } - public HashMap undoWaiveLoanCharge(final Long loanId, final String transactionExternalId) { + public PutChargeTransactionChangesResponse undoWaiveLoanCharge(final Long loanId, final Long transactionId, + final PutChargeTransactionChangesRequest request) { log.info("--------------------------------- UNDO WAIVE CHARGES FOR LOAN --------------------------------"); - final String TRANSAC_URL = "/fineract-provider/api/v1/loans/" + loanId + "/transactions/external-id/" + transactionExternalId + "?" - + Utils.TENANT_IDENTIFIER; - return Utils.performServerPut(requestSpec, responseSpec, TRANSAC_URL, "", ""); + return ok(fineract().loanTransactions.undoWaiveCharge(loanId, transactionId, request)); } - public HashMap undoWaiveLoanCharge(final String loanExternalId, final Long transactionId) { + public PutChargeTransactionChangesResponse undoWaiveLoanCharge(final Long loanId, final String transactionExternalId, + final PutChargeTransactionChangesRequest request) { log.info("--------------------------------- UNDO WAIVE CHARGES FOR LOAN --------------------------------"); - final String TRANSAC_URL = "/fineract-provider/api/v1/loans/external-id/" + loanExternalId + "/transactions/" + transactionId + "?" - + Utils.TENANT_IDENTIFIER; - return Utils.performServerPut(requestSpec, responseSpec, TRANSAC_URL, "", ""); + return ok(fineract().loanTransactions.undoWaiveCharge1(loanId, transactionExternalId, request)); } - public HashMap undoWaiveLoanCharge(final String loanExternalId, final String transactionExternalId) { + public PutChargeTransactionChangesResponse undoWaiveLoanCharge(final String loanExternalId, final Long transactionId, + final PutChargeTransactionChangesRequest request) { log.info("--------------------------------- UNDO WAIVE CHARGES FOR LOAN --------------------------------"); - final String TRANSAC_URL = "/fineract-provider/api/v1/loans/external-id/" + loanExternalId + "/transactions/external-id/" - + transactionExternalId + "?" + Utils.TENANT_IDENTIFIER; - return Utils.performServerPut(requestSpec, responseSpec, TRANSAC_URL, "", ""); + return ok(fineract().loanTransactions.undoWaiveCharge2(loanExternalId, transactionId, request)); + } + + public PutChargeTransactionChangesResponse undoWaiveLoanCharge(final String loanExternalId, final String transactionExternalId, + final PutChargeTransactionChangesRequest request) { + log.info("--------------------------------- UNDO WAIVE CHARGES FOR LOAN --------------------------------"); + return ok(fineract().loanTransactions.undoWaiveCharge3(loanExternalId, transactionExternalId, request)); } public PostLoansLoanIdChargesChargeIdResponse waiveLoanCharge(final Long loanId, final Long loanChargeId,