From 9208ea2fe1be1a47784974f3500827603e89396d Mon Sep 17 00:00:00 2001 From: Adam Saghy Date: Mon, 3 Mar 2025 20:50:14 +0000 Subject: [PATCH] FINERACT-2200: Add "reversed" flag to LoanTransactionDataV1.avsc --- .../src/main/avro/loan/v1/LoanTransactionDataV1.avsc | 8 ++++++++ .../mapper/loan/LoanTransactionDataMapper.java | 5 +++++ .../integrationtests/ExternalBusinessEventTest.java | 3 +++ 3 files changed, 16 insertions(+) diff --git a/fineract-avro-schemas/src/main/avro/loan/v1/LoanTransactionDataV1.avsc b/fineract-avro-schemas/src/main/avro/loan/v1/LoanTransactionDataV1.avsc index d11de9746..d9df8b18c 100644 --- a/fineract-avro-schemas/src/main/avro/loan/v1/LoanTransactionDataV1.avsc +++ b/fineract-avro-schemas/src/main/avro/loan/v1/LoanTransactionDataV1.avsc @@ -255,6 +255,14 @@ "type": "map" } ] + }, + { + "default": null, + "name": "reversed", + "type": [ + "null", + "boolean" + ] } ] } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/mapper/loan/LoanTransactionDataMapper.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/mapper/loan/LoanTransactionDataMapper.java index cf6642cbc..cf84e0e63 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/mapper/loan/LoanTransactionDataMapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/service/serialization/mapper/loan/LoanTransactionDataMapper.java @@ -31,5 +31,10 @@ public interface LoanTransactionDataMapper { @Mapping(target = "unpaidCharges", ignore = true) @Mapping(target = "externalOwnerId", ignore = true) @Mapping(target = "customData", ignore = true) + @Mapping(target = "reversed", expression = "java(isReversed(source))") LoanTransactionDataV1 map(LoanTransactionData source); + + default boolean isReversed(LoanTransactionData source) { + return source.isManuallyReversed() || source.getReversedOnDate() != null; + } } diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalBusinessEventTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalBusinessEventTest.java index 3b2e7dbea..7f7ea4a8b 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalBusinessEventTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalBusinessEventTest.java @@ -266,6 +266,7 @@ public class ExternalBusinessEventTest extends BaseLoanIntegrationTest { Assertions.assertEquals(42.0D, chargePaidBy.get("amount")); Assertions.assertEquals(chargeId.doubleValue(), chargePaidBy.get("chargeId")); Assertions.assertEquals(transactionId.doubleValue(), chargePaidBy.get("transactionId")); + Assertions.assertFalse((Boolean) event.getPayLoad().get("reversed")); // check that third part cannot post for that charge, because it already fully adjusted Assertions.assertThrows(RuntimeException.class, () -> loanTransactionHelper.chargeAdjustment(loanId, chargeId, @@ -780,6 +781,8 @@ public class ExternalBusinessEventTest extends BaseLoanIntegrationTest { && x.getPayLoad().get("transactionToAdjust") != null) // .toList(); // Assertions.assertEquals(2, list.size()); + Assertions.assertTrue((Boolean) ((Map) list.get(0).getPayLoad().get("transactionToAdjust")).get("reversed")); + Assertions.assertTrue((Boolean) ((Map) list.get(1).getPayLoad().get("transactionToAdjust")).get("reversed")); loanDetails = loanTransactionHelper.getLoanDetails(loanId); verifyLoanStatus(loanDetails, GetLoansLoanIdStatus::getActive);