diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm index 6526774d7..b5ba38c0c 100644 --- a/api-docs/apiLive.htm +++ b/api-docs/apiLive.htm @@ -3595,9 +3595,14 @@ GET https://DomainName/mifosng-provider/api/v1/centers/9?associations=groupMembe
The list capability of centers can support pagination and sorting.
+The default implementation of list results into 200 entries with optional support for pagination and sorting. The parameter limit with value -1 will return all entries.
-GET https://DomainName/mifosng-provider/api/v1/centers
+GET https://DomainName/mifosng-provider/api/v1/centers?paged=true
{
@@ -4506,9 +4511,14 @@ DELETE groups/2
List Groups
- The list capability of groups can support pagination and sorting.
+ The default implementation of list results into 200 entries with optional support for pagination and sorting. The parameter limit with value -1 will return all entries.
Optional Arguments
+ - paged
+ -
+ Boolean optional, defaults to false
+
+ - If paged is true then results will be paginated.
- offset
-
Integer optional, defaults to 0
@@ -4573,7 +4583,7 @@ DELETE groups/2
-GET https://DomainName/mifosng-provider/api/v1/groups
+GET https://DomainName/mifosng-provider/api/v1/groups?paged=true
{
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/api/StaffApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/api/StaffApiResource.java
index 6501b86d8..b0ccc69e0 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/api/StaffApiResource.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/api/StaffApiResource.java
@@ -49,7 +49,7 @@ public class StaffApiResource {
* {@link StaffData}.
*/
private final Set RESPONSE_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "firstname", "lastname", "displayName",
- "officeId", "officeName", "loanOfficerFlag", "externalId", "mobileNo", "allowedOffices"));
+ "officeId", "officeName", "isLoanOfficer", "externalId", "mobileNo", "allowedOffices"));
private final String resourceNameForPermissions = "STAFF";
@@ -78,16 +78,16 @@ public class StaffApiResource {
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveStaff(@Context final UriInfo uriInfo, @QueryParam("sqlSearch") final String sqlSearch,
@QueryParam("officeId") final Long officeId,
- @DefaultValue("false") @QueryParam("staffInOfficeHierarchy") final boolean staffInOfficeHierarchy) {
+ @DefaultValue("false") @QueryParam("staffInOfficeHierarchy") final boolean staffInOfficeHierarchy,
+ @DefaultValue("false") @QueryParam("loanOfficersOnly") final boolean loanOfficersOnly) {
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions);
final Collection staff;
if (staffInOfficeHierarchy) {
- final boolean loanOfficersOnly = false;
staff = this.readPlatformService.retrieveAllStaffInOfficeAndItsParentOfficeHierarchy(officeId, loanOfficersOnly);
} else {
- staff = this.readPlatformService.retrieveAllStaff(sqlSearch, officeId);
+ staff = this.readPlatformService.retrieveAllStaff(sqlSearch, officeId, loanOfficersOnly);
}
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/service/StaffReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/service/StaffReadPlatformService.java
index 7dde36477..d628c3e08 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/service/StaffReadPlatformService.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/service/StaffReadPlatformService.java
@@ -23,5 +23,5 @@ public interface StaffReadPlatformService {
*/
Collection retrieveAllStaffInOfficeAndItsParentOfficeHierarchy(Long officeId, boolean loanOfficersOnly);
- Collection retrieveAllStaff(String sqlSearch, Long officeId);
+ Collection retrieveAllStaff(String sqlSearch, Long officeId, boolean loanOfficersOnly);
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/service/StaffReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/service/StaffReadPlatformServiceImpl.java
index 9f431abf6..0c4f10088 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/service/StaffReadPlatformServiceImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/service/StaffReadPlatformServiceImpl.java
@@ -162,8 +162,8 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
}
@Override
- public Collection retrieveAllStaff(final String sqlSearch, final Long officeId) {
- final String extraCriteria = getStaffCriteria(sqlSearch, officeId);
+ public Collection retrieveAllStaff(final String sqlSearch, final Long officeId, final boolean loanOfficersOnly) {
+ final String extraCriteria = getStaffCriteria(sqlSearch, officeId, loanOfficersOnly);
return retrieveAllStaff(extraCriteria);
}
@@ -178,22 +178,26 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
return this.jdbcTemplate.query(sql, rm, new Object[] {});
}
- private String getStaffCriteria(final String sqlSearch, final Long officeId) {
+ private String getStaffCriteria(final String sqlSearch, final Long officeId, final boolean loanOfficersOnly) {
- String extraCriteria = "";
+ final StringBuffer extraCriteria = new StringBuffer(200);
if (sqlSearch != null) {
- extraCriteria = " and (" + sqlSearch + ")";
+ extraCriteria.append(" and (").append(sqlSearch).append(")");
}
if (officeId != null) {
- extraCriteria += " and office_id = " + officeId;
+ extraCriteria.append(" and office_id = ").append(officeId).append(" ");
+ }
+ if (loanOfficersOnly) {
+ extraCriteria.append(" and s.is_loan_officer is true ");
+ }
+
+ if (StringUtils.isNotBlank(extraCriteria.toString())) {
+ extraCriteria.delete(0, 4);
}
- if (StringUtils.isNotBlank(extraCriteria)) {
- extraCriteria = extraCriteria.substring(4);
- }
-
- return extraCriteria;
+ //remove begin four letter including a space from the string.
+ return extraCriteria.toString();
}
@Override
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformService.java
index 6f8108e59..fcdb02550 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformService.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformService.java
@@ -14,12 +14,8 @@ import org.mifosplatform.portfolio.collectionsheet.data.JLGCollectionSheetFlatDa
public interface CollectionSheetReadPlatformService {
- JLGCollectionSheetData retriveCollectionSheet(LocalDate localDate, Long groupId);
-
JLGCollectionSheetData generateGroupCollectionSheet(final Long groupId, final JsonQuery query);
JLGCollectionSheetData generateCenterCollectionSheet(final Long groupId, final JsonQuery query);
- Collection retriveJLGCollectionSheet(String groupHierarchy, String officeHierarchy, LocalDate dueDate);
-
}
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java
index c0afd6b92..aa209d394 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java
@@ -77,24 +77,6 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
this.attendanceDropdownReadPlatformService = attendanceDropdownReadPlatformService;
}
- @Override
- public JLGCollectionSheetData retriveCollectionSheet(final LocalDate dueDate, final Long centerId) {
-
- final AppUser currentUser = this.context.authenticatedUser();
- final String hierarchy = currentUser.getOffice().getHierarchy();
- final String officeHierarchy = hierarchy + "%";
-
- final CenterData center = this.centerReadPlatformService.retrieveOne(centerId);
- final String groupHierarchy = center.getHierarchy() + "%";
-
- final Collection collectionSheetFlatDatas = retriveJLGCollectionSheet(groupHierarchy, officeHierarchy,
- dueDate);
-
- final JLGCollectionSheetData jlgCollectionSheetData = buildJLGCollectionSheet(dueDate, collectionSheetFlatDatas);
-
- return jlgCollectionSheetData;
- }
-
/*
* Reads all the loans which are due for disbursement or collection and
* builds hierarchical data structure for collections sheet with hierarchy
@@ -187,63 +169,59 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
return jlgCollectionSheetData;
}
- @Override
- public Collection retriveJLGCollectionSheet(final String groupHierarchy, final String officeHierarchy,
- final LocalDate dueDate) {
-
- final JLGCollectionSheetFaltDataMapper mapper = new JLGCollectionSheetFaltDataMapper();
- final String sql = mapper.collectionSheetSchema();
- final DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- final String dueDateStr = df.format(dueDate.toDate());
- final SqlParameterSource namedParameters = new MapSqlParameterSource().addValue("hierarchy", groupHierarchy)
- .addValue("dueDate", dueDateStr).addValue("officeHierarchy", officeHierarchy);
- return this.namedParameterjdbcTemplate.query(sql, namedParameters, mapper);
- }
-
private static final class JLGCollectionSheetFaltDataMapper implements RowMapper {
- public String collectionSheetSchema() {
+ public String collectionSheetSchema(final boolean isCenterCollection) {
+ StringBuffer sql = new StringBuffer(400);
+ sql.append("SELECT loandata.*, sum(lc.amount_outstanding_derived) as chargesDue from ")
+ .append("(SELECT gp.display_name As groupName, ")
+ .append("gp.id As groupId, ")
+ .append("cl.display_name As clientName, ")
+ .append("sf.id As staffId, ")
+ .append("sf.display_name As staffName, ")
+ .append("gl.id As levelId, ")
+ .append("gl.level_name As levelName, ")
+ .append("cl.id As clientId, ")
+ .append("ln.id As loanId, ")
+ .append("ln.account_no As accountId, ")
+ .append("ln.loan_status_id As accountStatusId, ")
+ .append("pl.name As productShortName, ")
+ .append("ln.product_id As productId, ")
+ .append("ln.currency_code as currencyCode, ln.currency_digits as currencyDigits, ln.currency_multiplesof as inMultiplesOf, rc.`name` as currencyName, rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode, ")
+ .append("if(ln.loan_status_id = 200 , ln.principal_amount , null) As disbursementAmount, ")
+ .append("sum(ifnull(if(ln.loan_status_id = 300, ls.principal_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.principal_completed_derived, 0.0), 0.0)) As principalDue, ")
+ .append("ln.principal_repaid_derived As principalPaid, ")
+ .append("sum(ifnull(if(ln.loan_status_id = 300, ls.interest_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.interest_completed_derived, 0.0), 0.0)) As interestDue, ")
+ .append("ln.interest_repaid_derived As interestPaid, ")
+ .append("ca.attendance_type_enum as attendanceTypeId ")
+ .append("FROM m_group gp ")
+ .append("LEFT JOIN m_office of ON of.id = gp.office_id AND of.hierarchy like :officeHierarchy ")
+ .append("JOIN m_group_level gl ON gl.id = gp.level_Id ")
+ .append("LEFT JOIN m_staff sf ON sf.id = gp.staff_id ")
+ .append("JOIN m_group_client gc ON gc.group_id = gp.id ")
+ .append("JOIN m_client cl ON cl.id = gc.client_id ")
+ .append("LEFT JOIN m_loan ln ON cl.id = ln.client_id AND ln.group_id is not null AND ( ln.loan_status_id = 300 OR ( ln.loan_status_id =200 AND ln.expected_disbursedon_date <= :dueDate )) ")
+ .append("LEFT JOIN m_product_loan pl ON pl.id = ln.product_id ")
+ .append("LEFT JOIN m_currency rc on rc.`code` = ln.currency_code ")
+ .append("LEFT JOIN m_loan_repayment_schedule ls ON ls.loan_id = ln.id AND ls.completed_derived = 0 AND ls.duedate <= :dueDate ")
+ .append("left join m_calendar_instance ci on gp.parent_id = ci.entity_id and ci.entity_type_enum =:entityTypeId ")
+ .append("left join m_meeting mt on ci.id = mt.calendar_instance_id and mt.meeting_date =:dueDate ")
+ .append("left join m_client_attendance ca on ca.meeting_id=mt.id and ca.client_id=cl.id ");
- return "SELECT gp.display_name As groupName, "
- + "gp.id As groupId, "
- + "cl.display_name As clientName, "
- + "sf.id As staffId, "
- + "sf.display_name As staffName, "
- + "gl.id As levelId, "
- + "gl.level_name As levelName, "
- + "cl.id As clientId, "
- + "ln.id As loanId, "
- + "ln.account_no As accountId, "
- + "ln.loan_status_id As accountStatusId, "
- + "pl.name As productShortName, "
- + "ln.product_id As productId, "
- + "ln.currency_code as currencyCode, ln.currency_digits as currencyDigits, ln.currency_multiplesof as inMultiplesOf, rc.`name` as currencyName, rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode, "
- + "if(ln.loan_status_id = 200 , ln.principal_amount , null) As disbursementAmount, "
- + "sum(ifnull(if(ln.loan_status_id = 300, ls.principal_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.principal_completed_derived, 0.0), 0.0)) As principalDue, "
- + "ln.principal_repaid_derived As principalPaid, "
- + "sum(ifnull(if(ln.loan_status_id = 300, ls.interest_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.interest_completed_derived, 0.0), 0.0)) As interestDue, "
- + "ln.interest_repaid_derived As interestPaid, "
- + "sum(if(ln.loan_status_id = 300, lc.amount_outstanding_derived, 0.0)) as chargesDue, "
- + "ca.attendance_type_enum as attendanceTypeId "
- + "FROM m_group gp "
- + "LEFT JOIN m_office of ON of.id = gp.office_id AND of.hierarchy like :officeHierarchy "
- // + "LEFT JOIN m_office of ON of.id = gp.office_id "
- + "JOIN m_group_level gl ON gl.id = gp.level_Id "
- + "LEFT JOIN m_staff sf ON sf.id = gp.staff_id "
- + "JOIN m_group_client gc ON gc.group_id = gp.id "
- + "JOIN m_client cl ON cl.id = gc.client_id "
- + "LEFT JOIN m_loan ln ON cl.id = ln.client_id AND ln.group_id is not null AND ( ln.loan_status_id = 300 OR ( ln.loan_status_id =200 AND ln.expected_disbursedon_date <= :dueDate )) "
- + "LEFT JOIN m_product_loan pl ON pl.id = ln.product_id "
- + "LEFT JOIN m_currency rc on rc.`code` = ln.currency_code "
- + "LEFT JOIN m_loan_repayment_schedule ls ON ls.loan_id = ln.id AND ls.completed_derived = 0 AND ls.duedate <= :dueDate "
- + "LEFT JOIN m_loan_charge lc ON lc.loan_id = ln.id AND lc.is_paid_derived = 0 AND ( lc.due_for_collection_as_of_date <= :dueDate OR lc.charge_time_enum = 1) "
- + "left join m_calendar_instance ci on gp.parent_id = ci.entity_id and ci.entity_type_enum =:entityTypeId "
- + "left join m_meeting mt on ci.id = mt.calendar_instance_id and mt.meeting_date =:dueDate "
- + "left join m_client_attendance ca on ca.meeting_id=mt.id and ca.client_id=cl.id ";
+ if (isCenterCollection) {
+ sql.append("WHERE gp.parent_id = :centerId ");
+ } else {
+ sql.append("WHERE gp.id = :groupId ");
+ }
+
+ sql.append("and (gp.status_enum = 300 or (gp.status_enum = 600 and gp.closedon_date >= :dueDate)) ")
+ .append("and (cl.status_enum = 300 or (cl.status_enum = 600 and cl.closedon_date >= :dueDate)) ")
+ .append("GROUP BY gp.id ,cl.id , ln.id ORDER BY gp.id , cl.id , ln.id ").append(") loandata ")
+ .append("LEFT JOIN m_loan_charge lc ON lc.loan_id = loandata.loanId AND lc.is_paid_derived = 0 ")
+ .append("AND ( lc.due_for_collection_as_of_date <= :dueDate OR lc.charge_time_enum = 1)");
+
+ return sql.toString();
- // + "WHERE gp.hierarchy like :hierarchy " +
- // "GROUP BY gp.id ,cl.id , ln.id " +
- // "ORDER BY gp.id , cl.id , ln.id ";
}
@Override
@@ -316,12 +294,8 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
final JLGCollectionSheetFaltDataMapper mapper = new JLGCollectionSheetFaltDataMapper();
- final StringBuilder sql = new StringBuilder(mapper.collectionSheetSchema());
- sql.append(" WHERE gp.id = :groupId ")
- .append(" and (gp.status_enum = 300 or (gp.status_enum = 600 and gp.closedon_date >= :dueDate)) ")
- .append(" and (cl.status_enum = 300 or (cl.status_enum = 600 and cl.closedon_date >= :dueDate)) ")
- .append(" GROUP BY gp.id ,cl.id , ln.id ORDER BY gp.id , cl.id , ln.id ");
-
+ final StringBuilder sql = new StringBuilder(mapper.collectionSheetSchema(false));
+
// entityType should be center if it's within a center
final CalendarEntityType entityType = (group.isChildGroup()) ? CalendarEntityType.CENTERS : CalendarEntityType.GROUPS;
@@ -352,12 +326,8 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
final JLGCollectionSheetFaltDataMapper mapper = new JLGCollectionSheetFaltDataMapper();
- StringBuilder sql = new StringBuilder(mapper.collectionSheetSchema());
- sql.append(" WHERE gp.parent_id = :centerId ")
- .append(" and (gp.status_enum = 300 or (gp.status_enum = 600 and gp.closedon_date >= :dueDate)) ")
- .append(" and (cl.status_enum = 300 or (cl.status_enum = 600 and cl.closedon_date >= :dueDate)) ")
- .append(" GROUP BY gp.id ,cl.id , ln.id ORDER BY gp.id , cl.id , ln.id");
-
+ StringBuilder sql = new StringBuilder(mapper.collectionSheetSchema(true));
+
final SqlParameterSource namedParameters = new MapSqlParameterSource().addValue("dueDate", dueDateStr)
.addValue("centerId", center.getId()).addValue("officeHierarchy", officeHierarchy)
.addValue("entityTypeId", CalendarEntityType.CENTERS.getValue());
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/CentersApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/CentersApiResource.java
index 52739557e..47aa652fc 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/CentersApiResource.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/CentersApiResource.java
@@ -33,6 +33,7 @@ import org.mifosplatform.infrastructure.core.api.ApiParameterHelper;
import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper;
import org.mifosplatform.infrastructure.core.api.JsonQuery;
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
+import org.mifosplatform.infrastructure.core.data.PaginationParameters;
import org.mifosplatform.infrastructure.core.exception.UnrecognizedQueryParamException;
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
@@ -126,18 +127,23 @@ public class CentersApiResource {
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveAll(@Context final UriInfo uriInfo, @QueryParam("sqlSearch") final String sqlSearch,
- @QueryParam("officeId") final Long officeId, @QueryParam("externalId") final String externalId,
- @QueryParam("name") final String name, @QueryParam("underHierarchy") final String hierarchy,
+ @QueryParam("officeId") final Long officeId, @QueryParam("staffId") final Long staffId,
+ @QueryParam("externalId") final String externalId, @QueryParam("name") final String name,
+ @QueryParam("underHierarchy") final String hierarchy, @QueryParam("paged") final Boolean paged,
@QueryParam("offset") final Integer offset, @QueryParam("limit") final Integer limit,
@QueryParam("orderBy") final String orderBy, @QueryParam("sortOrder") final String sortOrder) {
this.context.authenticatedUser().validateHasReadPermission(GroupingTypesApiConstants.CENTER_RESOURCE_NAME);
-
- final SearchParameters searchParameters = SearchParameters.forGroups(sqlSearch, officeId, externalId, name, hierarchy, offset,
- limit, orderBy, sortOrder);
- final Page centers = this.centerReadPlatformService.retrieveAll(searchParameters);
-
+ final PaginationParameters parameters = PaginationParameters.instance(paged, offset, limit, orderBy, sortOrder);
+ final SearchParameters searchParameters = SearchParameters.forGroups(sqlSearch, officeId, staffId, externalId, name, hierarchy,
+ offset, limit, orderBy, sortOrder);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
+ if (parameters.isPaged()) {
+ final Page centers = this.centerReadPlatformService.retrievePagedAll(searchParameters, parameters);
+ return this.toApiJsonSerializer.serialize(settings, centers, GroupingTypesApiConstants.CENTER_RESPONSE_DATA_PARAMETERS);
+ }
+
+ final Collection centers = this.centerReadPlatformService.retrieveAll(searchParameters, parameters);
return this.toApiJsonSerializer.serialize(settings, centers, GroupingTypesApiConstants.CENTER_RESPONSE_DATA_PARAMETERS);
}
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupingTypesApiConstants.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupingTypesApiConstants.java
index ed4edf4ab..d6f9ce3dd 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupingTypesApiConstants.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupingTypesApiConstants.java
@@ -58,6 +58,7 @@ public class GroupingTypesApiConstants {
public static final String clientOptionsParamName = "clientOptions";
public static final String collectionMeetingCalendar = "collectionMeetingCalendar";
public static final String timeLine ="timeline";
+ public static final String closureReasons = "closureReasons";
// group close parameters
public static final String closureDateParamName = "closureDate";
@@ -81,7 +82,8 @@ public class GroupingTypesApiConstants {
*/
public static final Set CENTER_RESPONSE_DATA_PARAMETERS = new HashSet(Arrays.asList(idParamName, nameParamName,
externalIdParamName, officeIdParamName, officeNameParamName, staffIdParamName, staffNameParamName, hierarchyParamName,
- officeOptionsParamName, staffOptionsParamName));
+ officeOptionsParamName, staffOptionsParamName, statusParamName, activeParamName, activationDateParamName, timeLine,
+ groupMembersParamName, collectionMeetingCalendar, closureReasons));
public static final Set CENTER_GROUP_RESPONSE_DATA_PARAMETERS = new HashSet(Arrays.asList(idParamName, nameParamName,
externalIdParamName, officeIdParamName, officeNameParamName, staffIdParamName, staffNameParamName, hierarchyParamName,
@@ -89,7 +91,8 @@ public class GroupingTypesApiConstants {
public static final Set GROUP_RESPONSE_DATA_PARAMETERS = new HashSet(Arrays.asList(idParamName, nameParamName,
externalIdParamName, officeIdParamName, officeNameParamName, "parentId", "parentName", staffIdParamName, staffNameParamName,
- hierarchyParamName, officeOptionsParamName, staffOptionsParamName, clientOptionsParamName,timeLine));
+ hierarchyParamName, officeOptionsParamName, statusParamName, activeParamName, activationDateParamName, staffOptionsParamName,
+ clientOptionsParamName, timeLine));
public static final Set ACTIVATION_REQUEST_DATA_PARAMETERS = new HashSet(Arrays.asList(localeParamName,
dateFormatParamName, activationDateParamName));
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsApiResource.java
index 161e8d10d..90c65311e 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsApiResource.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsApiResource.java
@@ -34,6 +34,7 @@ import org.mifosplatform.infrastructure.core.api.ApiParameterHelper;
import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper;
import org.mifosplatform.infrastructure.core.api.JsonQuery;
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
+import org.mifosplatform.infrastructure.core.data.PaginationParameters;
import org.mifosplatform.infrastructure.core.exception.UnrecognizedQueryParamException;
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
@@ -152,18 +153,24 @@ public class GroupsApiResource {
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveAll(@Context final UriInfo uriInfo, @QueryParam("sqlSearch") final String sqlSearch,
- @QueryParam("officeId") final Long officeId, @QueryParam("externalId") final String externalId,
- @QueryParam("name") final String name, @QueryParam("underHierarchy") final String hierarchy,
+ @QueryParam("officeId") final Long officeId, @QueryParam("staffId") final Long staffId,
+ @QueryParam("externalId") final String externalId, @QueryParam("name") final String name,
+ @QueryParam("underHierarchy") final String hierarchy, @QueryParam("paged") final Boolean paged,
@QueryParam("offset") final Integer offset, @QueryParam("limit") final Integer limit,
@QueryParam("orderBy") final String orderBy, @QueryParam("sortOrder") final String sortOrder) {
this.context.authenticatedUser().validateHasReadPermission(GroupingTypesApiConstants.GROUP_RESOURCE_NAME);
+ final PaginationParameters parameters = PaginationParameters.instance(paged, offset, limit, orderBy, sortOrder);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
- final SearchParameters searchParameters = SearchParameters.forGroups(sqlSearch, officeId, externalId, name, hierarchy, offset,
- limit, orderBy, sortOrder);
- final Page groups = this.groupReadPlatformService.retrieveAll(searchParameters);
+ final SearchParameters searchParameters = SearchParameters.forGroups(sqlSearch, officeId, staffId, externalId, name, hierarchy,
+ offset, limit, orderBy, sortOrder);
+ if (parameters.isPaged()) {
+ final Page groups = this.groupReadPlatformService.retrievePagedAll(searchParameters, parameters);
+ return this.toApiJsonSerializer.serialize(settings, groups, GroupingTypesApiConstants.GROUP_RESPONSE_DATA_PARAMETERS);
+ }
+ final Collection groups = this.groupReadPlatformService.retrieveAll(searchParameters, parameters);
return this.toApiJsonSerializer.serialize(settings, groups, GroupingTypesApiConstants.GROUP_RESPONSE_DATA_PARAMETERS);
}
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/data/CenterData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/data/CenterData.java
index d0a6acef5..e020346a6 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/data/CenterData.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/data/CenterData.java
@@ -20,30 +20,29 @@ import org.mifosplatform.portfolio.calendar.data.CalendarData;
public class CenterData {
private final Long id;
- private final String externalId;
-
- private final EnumOptionData status;
- @SuppressWarnings("unused")
- private final boolean active;
- private final LocalDate activationDate;
-
private final String name;
-
+ private final String externalId;
private final Long officeId;
private final String officeName;
private final Long staffId;
private final String staffName;
private final String hierarchy;
+
+ private final EnumOptionData status;
+ @SuppressWarnings("unused")
+ private final boolean active;
+ private final LocalDate activationDate;
+
private final GroupTimelineData timeline;
// associations
private final Collection groupMembers;
- // template
- private final Collection officeOptions;
- private final Collection staffOptions;
+ // template
private final Collection groupMembersOptions;
private final CalendarData collectionMeetingCalendar;
private final Collection closureReasons;
+ private final Collection officeOptions;
+ private final Collection staffOptions;
public static CenterData template(final Long officeId, final LocalDate activationDate, final Collection officeOptions,
final Collection staffOptions, final Collection groupMembersOptions) {
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/AllGroupTypesDataMapper.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/AllGroupTypesDataMapper.java
index 93c7983ea..c6295b459 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/AllGroupTypesDataMapper.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/AllGroupTypesDataMapper.java
@@ -25,7 +25,7 @@ public final class AllGroupTypesDataMapper implements RowMapper retrieveAllForDropdown(Long officeId);
- Page retrieveAll(SearchParameters searchParameters);
+ Page retrievePagedAll(SearchParameters searchParameters, PaginationParameters parameters);
+
+ Collection retrieveAll(SearchParameters searchParameters, PaginationParameters parameters);
GroupGeneralData retrieveCenterGroupTemplate(Long centerId);
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformServiceImpl.java
index b66a2d311..2c05bea4e 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformServiceImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformServiceImpl.java
@@ -10,7 +10,9 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
@@ -18,6 +20,8 @@ import org.mifosplatform.infrastructure.codes.data.CodeValueData;
import org.mifosplatform.infrastructure.codes.service.CodeValueReadPlatformService;
import org.mifosplatform.infrastructure.core.api.ApiParameterHelper;
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
+import org.mifosplatform.infrastructure.core.data.PaginationParameters;
+import org.mifosplatform.infrastructure.core.data.PaginationParametersDataValidator;
import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.infrastructure.core.service.PaginationHelper;
@@ -63,17 +67,21 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
private final GroupDataMapper groupDataMapper = new GroupDataMapper();
private final PaginationHelper paginationHelper = new PaginationHelper();
+ private final PaginationParametersDataValidator paginationParametersDataValidator;
+ private final static Set supportedOrderByValues = new HashSet(Arrays.asList("id", "name", "officeId", "officeName"));
@Autowired
public CenterReadPlatformServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource,
final ClientReadPlatformService clientReadPlatformService, final OfficeReadPlatformService officeReadPlatformService,
- final StaffReadPlatformService staffReadPlatformService, final CodeValueReadPlatformService codeValueReadPlatformService) {
+ final StaffReadPlatformService staffReadPlatformService, final CodeValueReadPlatformService codeValueReadPlatformService,
+ final PaginationParametersDataValidator paginationParametersDataValidator) {
this.context = context;
this.clientReadPlatformService = clientReadPlatformService;
this.jdbcTemplate = new JdbcTemplate(dataSource);
this.officeReadPlatformService = officeReadPlatformService;
this.staffReadPlatformService = staffReadPlatformService;
this.codeValueReadPlatformService = codeValueReadPlatformService;
+ this.paginationParametersDataValidator = paginationParametersDataValidator;
}
// 'g.' preffix because of ERROR 1052 (23000): Column 'column_name' in where
@@ -81,40 +89,41 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
// caused by the same name of columns in m_office and m_group tables
private String getCenterExtraCriteria(final SearchParameters searchCriteria) {
- String extraCriteria = " and g.level_id = " + GroupTypes.CENTER.getId();
+ StringBuffer extraCriteria = new StringBuffer(200);
+ extraCriteria.append(" and g.level_id = " + GroupTypes.CENTER.getId());
String sqlQueryCriteria = searchCriteria.getSqlSearch();
if (StringUtils.isNotBlank(sqlQueryCriteria)) {
sqlQueryCriteria = sqlQueryCriteria.replaceAll(" display_name ", " g.display_name ");
sqlQueryCriteria = sqlQueryCriteria.replaceAll("display_name ", "g.display_name ");
- extraCriteria += " and (" + sqlQueryCriteria + ")";
+ extraCriteria.append(" and (").append(sqlQueryCriteria).append(") ");
}
final Long officeId = searchCriteria.getOfficeId();
if (officeId != null) {
- extraCriteria += " and g.office_id = " + officeId;
+ extraCriteria.append(" and g.office_id = ").append(officeId);
}
final String externalId = searchCriteria.getExternalId();
if (externalId != null) {
- extraCriteria += " and g.external_id = " + ApiParameterHelper.sqlEncodeString(externalId);
+ extraCriteria.append(" and g.external_id = ").append(ApiParameterHelper.sqlEncodeString(externalId));
}
final String name = searchCriteria.getName();
if (name != null) {
- extraCriteria += " and g.display_name like " + ApiParameterHelper.sqlEncodeString(name + "%");
+ extraCriteria.append(" and g.display_name like ").append(ApiParameterHelper.sqlEncodeString(name + "%"));
}
final String hierarchy = searchCriteria.getHierarchy();
if (hierarchy != null) {
- extraCriteria += " and o.hierarchy like " + ApiParameterHelper.sqlEncodeString(hierarchy + "%");
+ extraCriteria.append(" and o.hierarchy like ").append(ApiParameterHelper.sqlEncodeString(hierarchy + "%"));
}
- if (StringUtils.isNotBlank(extraCriteria)) {
- extraCriteria = extraCriteria.substring(4);
+ if (StringUtils.isNotBlank(extraCriteria.toString())) {
+ extraCriteria.delete(0, 4);
}
- return extraCriteria;
+ return extraCriteria.toString();
}
private static final String sqlQuery = "g.id as id, g.external_id as externalId, g.display_name as name, "
@@ -247,8 +256,9 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
}
@Override
- public Page retrieveAll(final SearchParameters searchParameters) {
-
+ public Page retrievePagedAll(final SearchParameters searchParameters, final PaginationParameters parameters) {
+
+ this.paginationParametersDataValidator.validateParameterValues(parameters, supportedOrderByValues, "audits");
final AppUser currentUser = this.context.authenticatedUser();
final String hierarchy = currentUser.getOffice().getHierarchy();
final String hierarchySearchString = hierarchy + "%";
@@ -279,6 +289,39 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
return this.paginationHelper.fetchPage(this.jdbcTemplate, sqlCountRows, sqlBuilder.toString(),
new Object[] { hierarchySearchString }, this.centerMapper);
}
+
+ @Override
+ public Collection retrieveAll(SearchParameters searchParameters, PaginationParameters parameters) {
+
+ this.paginationParametersDataValidator.validateParameterValues(parameters, supportedOrderByValues, "audits");
+ final AppUser currentUser = this.context.authenticatedUser();
+ final String hierarchy = currentUser.getOffice().getHierarchy();
+ final String hierarchySearchString = hierarchy + "%";
+
+ final StringBuilder sqlBuilder = new StringBuilder(200);
+ sqlBuilder.append("select ");
+ sqlBuilder.append(this.centerMapper.schema());
+ sqlBuilder.append(" where o.hierarchy like ?");
+
+ final String extraCriteria = getCenterExtraCriteria(searchParameters);
+
+ if (StringUtils.isNotBlank(extraCriteria)) {
+ sqlBuilder.append(" and (").append(extraCriteria).append(")");
+ }
+
+ if (searchParameters.isOrderByRequested()) {
+ sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()).append(' ').append(searchParameters.getSortOrder());
+ }
+
+ if (searchParameters.isLimited()) {
+ sqlBuilder.append(" limit ").append(searchParameters.getLimit());
+ if (searchParameters.isOffset()) {
+ sqlBuilder.append(" offset ").append(searchParameters.getOffset());
+ }
+ }
+
+ return this.jdbcTemplate.query(sqlBuilder.toString(), this.centerMapper, new Object[] {hierarchySearchString});
+ }
@Override
public Collection retrieveAllForDropdown(final Long officeId) {
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformService.java
index 1f312acbd..b5a4460c2 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformService.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformService.java
@@ -7,6 +7,7 @@ package org.mifosplatform.portfolio.group.service;
import java.util.Collection;
+import org.mifosplatform.infrastructure.core.data.PaginationParameters;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
@@ -14,7 +15,9 @@ public interface GroupReadPlatformService {
GroupGeneralData retrieveTemplate(Long officeId, boolean isCenterGroup, boolean staffInSelectedOfficeOnly);
- Page retrieveAll(SearchParameters searchParameters);
+ Page retrievePagedAll(SearchParameters searchParameters, PaginationParameters parameters);
+
+ Collection retrieveAll(SearchParameters searchParameters, PaginationParameters parameters);
GroupGeneralData retrieveOne(Long groupId);
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformServiceImpl.java
index 2a63a6763..3ef510c5a 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformServiceImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformServiceImpl.java
@@ -8,13 +8,18 @@ package org.mifosplatform.portfolio.group.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.mifosplatform.infrastructure.codes.data.CodeValueData;
import org.mifosplatform.infrastructure.codes.service.CodeValueReadPlatformService;
import org.mifosplatform.infrastructure.core.api.ApiParameterHelper;
+import org.mifosplatform.infrastructure.core.data.PaginationParameters;
+import org.mifosplatform.infrastructure.core.data.PaginationParametersDataValidator;
import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.infrastructure.core.service.PaginationHelper;
@@ -52,12 +57,15 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
private final AllGroupTypesDataMapper allGroupTypesDataMapper = new AllGroupTypesDataMapper();
private final PaginationHelper paginationHelper = new PaginationHelper();
+ private final PaginationParametersDataValidator paginationParametersDataValidator;
+
+ private final static Set supportedOrderByValues = new HashSet(Arrays.asList("id", "name", "officeId", "officeName"));
@Autowired
public GroupReadPlatformServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource,
final CenterReadPlatformService centerReadPlatformService, final ClientReadPlatformService clientReadPlatformService,
final OfficeReadPlatformService officeReadPlatformService, final StaffReadPlatformService staffReadPlatformService,
- final CodeValueReadPlatformService codeValueReadPlatformService) {
+ final CodeValueReadPlatformService codeValueReadPlatformService, final PaginationParametersDataValidator paginationParametersDataValidator) {
this.context = context;
this.jdbcTemplate = new JdbcTemplate(dataSource);
this.centerReadPlatformService = centerReadPlatformService;
@@ -65,6 +73,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
this.officeReadPlatformService = officeReadPlatformService;
this.staffReadPlatformService = staffReadPlatformService;
this.codeValueReadPlatformService = codeValueReadPlatformService;
+ this.paginationParametersDataValidator = paginationParametersDataValidator;
}
@Override
@@ -118,8 +127,9 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
}
@Override
- public Page retrieveAll(final SearchParameters searchParameters) {
+ public Page retrievePagedAll(final SearchParameters searchParameters, final PaginationParameters parameters) {
+ this.paginationParametersDataValidator.validateParameterValues(parameters, supportedOrderByValues, "audits");
final AppUser currentUser = this.context.authenticatedUser();
final String hierarchy = currentUser.getOffice().getHierarchy();
final String hierarchySearchString = hierarchy + "%";
@@ -135,11 +145,11 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
sqlBuilder.append(" and (").append(extraCriteria).append(")");
}
- if (searchParameters.isOrderByRequested()) {
+ if (parameters.isOrderByRequested()) {
sqlBuilder.append(" order by ").append(searchParameters.getOrderBy()).append(' ').append(searchParameters.getSortOrder());
}
- if (searchParameters.isLimited()) {
+ if (parameters.isLimited()) {
sqlBuilder.append(" limit ").append(searchParameters.getLimit());
if (searchParameters.isOffset()) {
sqlBuilder.append(" offset ").append(searchParameters.getOffset());
@@ -150,46 +160,79 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
return this.paginationHelper.fetchPage(this.jdbcTemplate, sqlCountRows, sqlBuilder.toString(),
new Object[] { hierarchySearchString }, this.allGroupTypesDataMapper);
}
+
+
+ @Override
+ public Collection retrieveAll(SearchParameters searchParameters, final PaginationParameters parameters) {
+ final AppUser currentUser = this.context.authenticatedUser();
+ final String hierarchy = currentUser.getOffice().getHierarchy();
+ final String hierarchySearchString = hierarchy + "%";
+
+ final StringBuilder sqlBuilder = new StringBuilder(200);
+ sqlBuilder.append("select ");
+ sqlBuilder.append(this.allGroupTypesDataMapper.schema());
+ sqlBuilder.append(" where o.hierarchy like ?");
+
+ final String extraCriteria = getGroupExtraCriteria(searchParameters);
+
+ if (StringUtils.isNotBlank(extraCriteria)) {
+ sqlBuilder.append(" and (").append(extraCriteria).append(")");
+ }
+
+ if (parameters.isOrderByRequested()) {
+ sqlBuilder.append(parameters.orderBySql());
+ }
+
+ if (parameters.isLimited()) {
+ sqlBuilder.append(parameters.limitSql());
+ }
+
+ return this.jdbcTemplate.query(sqlBuilder.toString(), this.allGroupTypesDataMapper, new Object[] {hierarchySearchString});
+ }
// 'g.' preffix because of ERROR 1052 (23000): Column 'column_name' in where
// clause is ambiguous
// caused by the same name of columns in m_office and m_group tables
private String getGroupExtraCriteria(final SearchParameters searchCriteria) {
- String extraCriteria = " and g.level_Id = " + GroupTypes.GROUP.getId();
-
+ StringBuffer extraCriteria = new StringBuffer(200);
+ extraCriteria.append(" and g.level_Id = ").append(GroupTypes.GROUP.getId());
String sqlSearch = searchCriteria.getSqlSearch();
if (sqlSearch != null) {
sqlSearch = sqlSearch.replaceAll(" display_name ", " g.display_name ");
sqlSearch = sqlSearch.replaceAll("display_name ", "g.display_name ");
- extraCriteria += " and (" + sqlSearch + ")";
+ extraCriteria.append(" and ( ").append(sqlSearch).append(") ");
}
final Long officeId = searchCriteria.getOfficeId();
if (officeId != null) {
- extraCriteria += " and g.office_id = " + officeId;
+ extraCriteria.append(" and g.office_id = ").append(officeId);
}
final String externalId = searchCriteria.getExternalId();
if (externalId != null) {
- extraCriteria += " and g.external_id = " + ApiParameterHelper.sqlEncodeString(externalId);
+ extraCriteria.append(" and g.external_id = ").append(ApiParameterHelper.sqlEncodeString(externalId));
}
final String name = searchCriteria.getName();
if (name != null) {
- extraCriteria += " and g.display_name like " + ApiParameterHelper.sqlEncodeString("%" + name + "%");
+ extraCriteria.append(" and g.display_name like ").append(ApiParameterHelper.sqlEncodeString("%" + name + "%"));
}
final String hierarchy = searchCriteria.getHierarchy();
if (hierarchy != null) {
- extraCriteria += " and o.hierarchy like " + ApiParameterHelper.sqlEncodeString(hierarchy + "%");
+ extraCriteria.append(" and o.hierarchy like ").append(ApiParameterHelper.sqlEncodeString(hierarchy + "%"));
+ }
+
+ if (searchCriteria.isStaffIdPassed()){
+ extraCriteria.append(" and g.staff_id = ").append(searchCriteria.getStaffId());
}
- if (StringUtils.isNotBlank(extraCriteria)) {
- extraCriteria = extraCriteria.substring(4);
+ if (StringUtils.isNotBlank(extraCriteria.toString())) {
+ extraCriteria.delete(0, 4);
}
- return extraCriteria;
+ return extraCriteria.toString();
}
@Override
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/SearchParameters.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/SearchParameters.java
index b41a4c373..bce69087c 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/SearchParameters.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/SearchParameters.java
@@ -20,10 +20,14 @@ public final class SearchParameters {
private final Integer limit;
private final String orderBy;
private final String sortOrder;
+
+ @SuppressWarnings("unused")
+ private final Long staffId;
public static SearchParameters from(final String sqlSearch, final Long officeId, final String externalId, final String name,
final String hierarchy) {
- return new SearchParameters(sqlSearch, officeId, externalId, name, hierarchy, null, null, null, null, null, null);
+ final Long staffId = null;
+ return new SearchParameters(sqlSearch, officeId, externalId, name, hierarchy, null, null, null, null, null, null, staffId);
}
public static SearchParameters forClients(final String sqlSearch, final Long officeId, final String externalId,
@@ -31,46 +35,50 @@ public final class SearchParameters {
final Integer limit, final String orderBy, final String sortOrder) {
final Integer maxLimitAllowed = getCheckedLimit(limit);
-
+ final Long staffId = null;
+
return new SearchParameters(sqlSearch, officeId, externalId, displayName, hierarchy, firstname, lastname, offset, maxLimitAllowed,
- orderBy, sortOrder);
+ orderBy, sortOrder, staffId);
}
- public static SearchParameters forGroups(final String sqlSearch, final Long officeId, final String externalId, final String name,
+ public static SearchParameters forGroups(final String sqlSearch, final Long officeId, final Long staffId, final String externalId, final String name,
final String hierarchy, final Integer offset, final Integer limit, final String orderBy, final String sortOrder) {
final Integer maxLimitAllowed = getCheckedLimit(limit);
return new SearchParameters(sqlSearch, officeId, externalId, name, hierarchy, null, null, offset, maxLimitAllowed, orderBy,
- sortOrder);
+ sortOrder, staffId);
}
public static SearchParameters forLoans(final String sqlSearch, final String externalId, final Integer offset, final Integer limit,
final String orderBy, final String sortOrder) {
final Integer maxLimitAllowed = getCheckedLimit(limit);
-
- return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder);
+ final Long staffId = null;
+
+ return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId);
}
public static SearchParameters forJournalEntries(final Long officeId, final Integer offset, final Integer limit, final String orderBy,
final String sortOrder) {
final Integer maxLimitAllowed = getCheckedLimit(limit);
-
- return new SearchParameters(null, officeId, null, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder);
+ final Long staffId = null;
+
+ return new SearchParameters(null, officeId, null, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId);
}
public static SearchParameters forPagination(final Integer offset, final Integer limit, final String orderBy, final String sortOrder) {
final Integer maxLimitAllowed = getCheckedLimit(limit);
-
- return new SearchParameters(null, null, null, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder);
+ final Long staffId = null;
+
+ return new SearchParameters(null, null, null, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId);
}
private SearchParameters(final String sqlSearch, final Long officeId, final String externalId, final String name,
final String hierarchy, final String firstname, final String lastname, final Integer offset, final Integer limit,
- final String orderBy, final String sortOrder) {
+ final String orderBy, final String sortOrder, final Long staffId) {
this.sqlSearch = sqlSearch;
this.officeId = officeId;
this.externalId = externalId;
@@ -82,6 +90,7 @@ public final class SearchParameters {
this.limit = limit;
this.orderBy = orderBy;
this.sortOrder = sortOrder;
+ this.staffId = staffId;
}
public boolean isOrderByRequested() {
@@ -167,4 +176,13 @@ public final class SearchParameters {
public String getSortOrder() {
return this.sortOrder;
}
+
+ public boolean isStaffIdPassed() {
+ return this.staffId != null && this.staffId != 0;
+ }
+
+ public Long getStaffId() {
+ return this.staffId;
+ }
+
}
\ No newline at end of file