diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java index bafe4a1c7..f5c9b2716 100644 --- a/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java +++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java @@ -157,6 +157,8 @@ public final class SavingsAccountData implements Serializable { private LocalDate endDate; private Boolean introducerRequired; private Boolean shareLinkingEnabled; + private Long shareAccountId; + private String shareAccountNo; private Boolean nominationFacility; private Boolean dormancyAlert; private Boolean isDormancyTrackingActiveFromProduct; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/clerkwithdrawal/api/ClerkShareWithdrawalRequestApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/clerkwithdrawal/api/ClerkShareWithdrawalRequestApiResource.java index 2b3cf5a23..5f3da17da 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/clerkwithdrawal/api/ClerkShareWithdrawalRequestApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/clerkwithdrawal/api/ClerkShareWithdrawalRequestApiResource.java @@ -208,8 +208,9 @@ public class ClerkShareWithdrawalRequestApiResource { @Produces(MediaType.APPLICATION_JSON) public String list(@QueryParam("status") @DefaultValue("PENDING") final String status, @QueryParam("offset") @DefaultValue("0") final int offset, @QueryParam("limit") @DefaultValue("20") final int limit, - @QueryParam("fromDate") final String fromDate, @QueryParam("toDate") final String toDate) { - return queryList("WHERE status = ?", new ArrayList<>(List.of(status)), fromDate, toDate, offset, limit); + @QueryParam("fromDate") final String fromDate, @QueryParam("toDate") final String toDate, + @QueryParam("search") final String search) { + return queryList("WHERE status = ?", new ArrayList<>(List.of(status)), fromDate, toDate, search, offset, limit); } // ── GET /v1/clerk/share-withdrawal-requests/my ── Clerk's own requests ────── @@ -227,11 +228,11 @@ public class ClerkShareWithdrawalRequestApiResource { where.append(" AND status = ?"); params.add(status); } - return queryList(where.toString(), params, fromDate, toDate, offset, limit); + return queryList(where.toString(), params, fromDate, toDate, null, offset, limit); } private String queryList(final String baseWhere, final List baseParams, final String fromDate, final String toDate, - final int offset, final int limit) { + final String search, final int offset, final int limit) { final StringBuilder where = new StringBuilder(baseWhere); final List params = new ArrayList<>(baseParams); if (fromDate != null && !fromDate.isBlank()) { @@ -242,6 +243,13 @@ public class ClerkShareWithdrawalRequestApiResource { where.append(" AND DATE(submitted_at) <= ?"); params.add(Date.valueOf(toDate)); } + if (search != null && !search.isBlank()) { + where.append(" AND (account_no ILIKE ? OR client_name ILIKE ? OR resolution_number ILIKE ?)"); + final String like = "%" + search.trim() + "%"; + params.add(like); + params.add(like); + params.add(like); + } final long total = Optional .ofNullable(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM m_clerk_share_withdrawal_request " + where, Long.class, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/clerkwithdrawal/api/ClerkWithdrawalRequestApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/clerkwithdrawal/api/ClerkWithdrawalRequestApiResource.java index 03dcd8d24..7765e417e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/clerkwithdrawal/api/ClerkWithdrawalRequestApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/clerkwithdrawal/api/ClerkWithdrawalRequestApiResource.java @@ -158,7 +158,8 @@ public class ClerkWithdrawalRequestApiResource { @QueryParam("offset") @DefaultValue("0") final int offset, @QueryParam("limit") @DefaultValue("20") final int limit, @QueryParam("fromDate") final String fromDate, - @QueryParam("toDate") final String toDate) { + @QueryParam("toDate") final String toDate, + @QueryParam("search") final String search) { final StringBuilder where = new StringBuilder("WHERE status = ?"); final List baseParams = new ArrayList<>(List.of(status)); @@ -170,6 +171,14 @@ public class ClerkWithdrawalRequestApiResource { where.append(" AND DATE(submitted_at) <= ?"); baseParams.add(Date.valueOf(toDate)); } + if (search != null && !search.isBlank()) { + where.append(" AND (account_no ILIKE ? OR client_name ILIKE ? OR voucher_no ILIKE ? OR tok_no ILIKE ?)"); + final String like = "%" + search.trim() + "%"; + baseParams.add(like); + baseParams.add(like); + baseParams.add(like); + baseParams.add(like); + } final long total = Optional.ofNullable( jdbcTemplate.queryForObject("SELECT COUNT(*) FROM m_clerk_withdrawal_request " + where, Long.class, baseParams.toArray()) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java index 6ade6bfff..4205b3804 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java @@ -883,6 +883,7 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead sqlBuilder.append("COALESCE(sa.auto_debit_facility, sp.auto_debit_facility) as autoDebitFacility, "); sqlBuilder.append("COALESCE(sa.introducer_required, sp.introducer_required) as introducerRequired, "); sqlBuilder.append("COALESCE(sa.share_linking_enabled, sp.share_linking_enabled) as shareLinkingEnabled, "); + sqlBuilder.append("sa.share_account_id as shareAccountId, msha.account_no as shareAccountNo, "); // Facility config fields sqlBuilder.append("safc.atm_facility as atmFacility, "); sqlBuilder.append("safc.atm_withdrawal_facility as atmWithdrawalFacility, "); @@ -915,6 +916,7 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead sqlBuilder.append("left join m_appuser cbu on cbu.id = sa.closedon_userid "); sqlBuilder.append("left join m_tax_group tg on tg.id = sa.tax_group_id "); sqlBuilder.append("left join m_savings_account_facility_config safc on safc.savings_account_id = sa.id "); + sqlBuilder.append("left join m_share_account msha on msha.id = sa.share_account_id "); this.schemaSql = sqlBuilder.toString(); } @@ -1141,6 +1143,8 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead accountData.setAutoDebitFacility(rs.getObject("autoDebitFacility") != null ? rs.getBoolean("autoDebitFacility") : null); accountData.setIntroducerRequired(rs.getObject("introducerRequired") != null ? rs.getBoolean("introducerRequired") : null); accountData.setShareLinkingEnabled(rs.getObject("shareLinkingEnabled") != null ? rs.getBoolean("shareLinkingEnabled") : null); + accountData.setShareAccountId(JdbcSupport.getLong(rs, "shareAccountId")); + accountData.setShareAccountNo(rs.getString("shareAccountNo")); accountData.setTerminateTrue(rs.getObject("terminateTrue") != null ? rs.getBoolean("terminateTrue") : null); // Nominee as parsed map