From 49d94eb9326f76b13f0a944538d077a245029960 Mon Sep 17 00:00:00 2001
From: Ashhar Ahmad Khan <145142826+AshharAhmadKhan@users.noreply.github.com>
Date: Fri, 10 Apr 2026 13:30:39 +0530
Subject: [PATCH] FINERACT-2587: Remove CLIENTCHARGE|INACTIVATE write path
(never implemented since 2015)
---
.../service/CommandWrapperBuilder.java | 9 -----
.../client/api/ClientApiConstants.java | 2 --
.../client/api/ClientChargesApiResource.java | 8 +----
.../ClientChargeWritePlatformService.java | 3 --
.../ClientChargeWritePlatformServiceImpl.java | 7 ----
.../db/changelog/tenant/changelog-tenant.xml | 1 +
...ve_clientcharge_inactivate_permissions.xml | 34 +++++++++++++++++++
.../migrations/sample_data/barebones_db.sql | 2 --
.../sample_data/load_sample_data.sql | 2 --
9 files changed, 36 insertions(+), 32 deletions(-)
create mode 100644 fineract-provider/src/main/resources/db/changelog/tenant/parts/0231_remove_clientcharge_inactivate_permissions.xml
diff --git a/fineract-core/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java b/fineract-core/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java
index 887f999d2a5..809fa440f8e 100644
--- a/fineract-core/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java
+++ b/fineract-core/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java
@@ -3170,15 +3170,6 @@ public CommandWrapperBuilder payClientCharge(final Long clientId, final Long cha
return this;
}
- public CommandWrapperBuilder inactivateClientCharge(final Long clientId, final Long chargeId) {
- this.actionName = ACTION_INACTIVATE;
- this.entityName = ClientApiConstants.CLIENT_CHARGES_RESOURCE_NAME;
- this.entityId = chargeId;
- this.clientId = clientId;
- this.href = "/clients/" + clientId + "/charges/" + chargeId + "?command=inactivate";
- return this;
- }
-
public CommandWrapperBuilder undoClientTransaction(final Long clientId, final Long transactionId) {
this.actionName = ClientApiConstants.CLIENT_TRANSACTION_ACTION_UNDO;
this.entityName = ClientApiConstants.CLIENT_RESOURCE_NAME;
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java
index 8d9e0fda760..d1add72687e 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java
@@ -33,7 +33,6 @@ public class ClientApiConstants {
public static final String CLIENT_CHARGE_ACTION_DELETE = "DELETE";
public static final String CLIENT_CHARGE_ACTION_WAIVE = "WAIVE";
public static final String CLIENT_CHARGE_ACTION_PAY = "PAY";
- public static final String CLIENT_CHARGE_ACTION_INACTIVATE = "INACTIVATE";
// Client charge associations and query parameters
public static final String CLIENT_CHARGE_QUERY_PARAM_STATUS = "chargeStatus";
@@ -49,7 +48,6 @@ public class ClientApiConstants {
// Commands
public static final String CLIENT_CHARGE_COMMAND_WAIVE_CHARGE = "waive";
public static final String CLIENT_CHARGE_COMMAND_PAY_CHARGE = "paycharge";
- public static final String CLIENT_CHARGE_COMMAND_INACTIVATE_CHARGE = "inactivate";
public static final String CLIENT_TRANSACTION_COMMAND_UNDO = "undo";
public static final String CLIENT_CLOSURE_REASON = "ClientClosureReason";
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java
index ed47dbf1805..8c467177ef2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java
@@ -205,16 +205,10 @@ public String payOrWaiveClientCharge(@PathParam("clientId") @Parameter(descripti
final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
- json = this.toApiJsonSerializer.serialize(result);
- } else if (is(commandParam, ClientApiConstants.CLIENT_CHARGE_COMMAND_INACTIVATE_CHARGE)) {
- final CommandWrapper commandRequest = new CommandWrapperBuilder().inactivateClientCharge(clientId, chargeId).build();
-
- final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
-
json = this.toApiJsonSerializer.serialize(result);
} else {
throw new UnrecognizedQueryParamException("command", commandParam, ClientApiConstants.CLIENT_CHARGE_COMMAND_WAIVE_CHARGE,
- ClientApiConstants.CLIENT_CHARGE_COMMAND_PAY_CHARGE, ClientApiConstants.CLIENT_CHARGE_COMMAND_INACTIVATE_CHARGE);
+ ClientApiConstants.CLIENT_CHARGE_COMMAND_PAY_CHARGE);
}
return json;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformService.java
index 27352a0047a..028ad8c1992 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformService.java
@@ -39,7 +39,4 @@ public interface ClientChargeWritePlatformService {
@Transactional
CommandProcessingResult payCharge(Long clientId, Long clientChargeId, JsonCommand command);
- @Transactional
- CommandProcessingResult inactivateCharge(Long clientId, Long clientChargeId);
-
}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformServiceImpl.java
index 920eb437038..2327184c4cf 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformServiceImpl.java
@@ -355,13 +355,6 @@ public CommandProcessingResult updateCharge(@SuppressWarnings("unused") Long cli
return null;
}
- @Override
- @SuppressWarnings("unused")
- public CommandProcessingResult inactivateCharge(Long clientId, Long clientChargeId) {
- // functionality not yet supported
- return null;
- }
-
/**
* Ensures that the charge due date is not on a holiday or a non working day
*
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
index 25dff267864..5957af5c3b5 100644
--- a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
@@ -249,4 +249,5 @@
+
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0231_remove_clientcharge_inactivate_permissions.xml b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0231_remove_clientcharge_inactivate_permissions.xml
new file mode 100644
index 00000000000..34ebf3278fe
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0231_remove_clientcharge_inactivate_permissions.xml
@@ -0,0 +1,34 @@
+
+
+
+
+ Remove INACTIVATE_CLIENTCHARGE permissions - command was never implemented and the client-charge inactivate write path is being removed.
+
+ code='INACTIVATE_CLIENTCHARGE'
+
+
+ code='INACTIVATE_CLIENTCHARGE_CHECKER'
+
+
+
diff --git a/fineract-provider/src/main/resources/sql/migrations/sample_data/barebones_db.sql b/fineract-provider/src/main/resources/sql/migrations/sample_data/barebones_db.sql
index e39c0014010..09cd583eb5c 100644
--- a/fineract-provider/src/main/resources/sql/migrations/sample_data/barebones_db.sql
+++ b/fineract-provider/src/main/resources/sql/migrations/sample_data/barebones_db.sql
@@ -3738,13 +3738,11 @@ INSERT INTO `m_permission` (`id`, `grouping`, `code`, `entity_name`, `action_nam
(668, 'portfolio', 'DELETE_CLIENTCHARGE', 'CLIENTCHARGE', 'DELETE', 0),
(669, 'portfolio', 'WAIVE_CLIENTCHARGE', 'CLIENTCHARGE', 'WAIVE', 0),
(670, 'portfolio', 'PAY_CLIENTCHARGE', 'CLIENTCHARGE', 'PAY', 0),
- (671, 'portfolio', 'INACTIVATE_CLIENTCHARGE', 'CLIENTCHARGE', 'INACTIVATE', 0),
(672, 'portfolio', 'UPDATE_CLIENTCHARGE', 'CLIENTCHARGE', 'UPDATE', 0),
(673, 'portfolio', 'CREATE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'CREATE_CHECKER', 0),
(674, 'portfolio', 'DELETE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'DELETE_CHECKER', 0),
(675, 'portfolio', 'WAIVE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'WAIVE_CHECKER', 0),
(676, 'portfolio', 'PAY_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'PAY_CHECKER', 0),
- (677, 'portfolio', 'INACTIVATE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'INACTIVATE_CHECKER', 0),
(678, 'portfolio', 'UPDATE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'UPDATE_CHECKER', 0),
(679, 'transaction_client', 'READTRANSACTION_CLIENT', 'CLIENT', 'READTRANSACTION', 0),
(680, 'transaction_client', 'UNDOTRANSACTION_CLIENT', 'CLIENT', 'UNDOTRANSACTION', 0),
diff --git a/fineract-provider/src/main/resources/sql/migrations/sample_data/load_sample_data.sql b/fineract-provider/src/main/resources/sql/migrations/sample_data/load_sample_data.sql
index a5d1c7f294a..f800b6fa8a5 100644
--- a/fineract-provider/src/main/resources/sql/migrations/sample_data/load_sample_data.sql
+++ b/fineract-provider/src/main/resources/sql/migrations/sample_data/load_sample_data.sql
@@ -3910,13 +3910,11 @@ INSERT INTO `m_permission` (`id`, `grouping`, `code`, `entity_name`, `action_nam
(668, 'portfolio', 'DELETE_CLIENTCHARGE', 'CLIENTCHARGE', 'DELETE', 0),
(669, 'portfolio', 'WAIVE_CLIENTCHARGE', 'CLIENTCHARGE', 'WAIVE', 0),
(670, 'portfolio', 'PAY_CLIENTCHARGE', 'CLIENTCHARGE', 'PAY', 0),
- (671, 'portfolio', 'INACTIVATE_CLIENTCHARGE', 'CLIENTCHARGE', 'INACTIVATE', 0),
(672, 'portfolio', 'UPDATE_CLIENTCHARGE', 'CLIENTCHARGE', 'UPDATE', 0),
(673, 'portfolio', 'CREATE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'CREATE_CHECKER', 0),
(674, 'portfolio', 'DELETE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'DELETE_CHECKER', 0),
(675, 'portfolio', 'WAIVE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'WAIVE_CHECKER', 0),
(676, 'portfolio', 'PAY_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'PAY_CHECKER', 0),
- (677, 'portfolio', 'INACTIVATE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'INACTIVATE_CHECKER', 0),
(678, 'portfolio', 'UPDATE_CLIENTCHARGE_CHECKER', 'CLIENTCHARGE', 'UPDATE_CHECKER', 0),
(679, 'transaction_client', 'READTRANSACTION_CLIENT', 'CLIENT', 'READTRANSACTION', 0),
(680, 'transaction_client', 'UNDOTRANSACTION_CLIENT', 'CLIENT', 'UNDOTRANSACTION', 0),