merge ashoks changes for collection sheet improvements

This commit is contained in:
Vishwas Babu A J
2013-12-29 22:47:05 +05:30
16 changed files with 281 additions and 175 deletions
+14 -4
View File
@@ -3595,9 +3595,14 @@ GET https://DomainName/mifosng-provider/api/v1/centers/9?associations=groupMembe
<div class="method-section">
<div class="method-description">
<h4>List Centers</h4>
<p>The <i>list</i> capability of centers can support <b>pagination</b> and <b>sorting</b>.</p>
<p>The default implementation of <i>list</i> results into 200 entries with optional support for <b>pagination</b> and <b>sorting</b>. The parameter <b>limit</b> with value <b>-1</b> will return all entries.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>paged</dt>
<dd>
Boolean <span>optional</span>, defaults to false
</dd>
<dd>If paged is <span>true</span> then results will be paginated.</dd>
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
@@ -3662,7 +3667,7 @@ GET https://DomainName/mifosng-provider/api/v1/centers/9?associations=groupMembe
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/mifosng-provider/api/v1/centers
GET https://DomainName/mifosng-provider/api/v1/centers?paged=true
</code>
<code class="method-response">
{
@@ -4506,9 +4511,14 @@ DELETE groups/2
<div class="method-section">
<div class="method-description">
<h4>List Groups</h4>
<p>The <i>list</i> capability of groups can support <b>pagination</b> and <b>sorting</b>.</p>
<p>The default implementation of <i>list</i> results into 200 entries with optional support for <b>pagination</b> and <b>sorting</b>. The parameter <b>limit</b> with value <b>-1</b> will return all entries.</p>
<h5>Optional Arguments</h5>
<dl class="argument-list">
<dt>paged</dt>
<dd>
Boolean <span>optional</span>, defaults to false
</dd>
<dd>If paged is <span>true</span> then results will be paginated.</dd>
<dt>offset</dt>
<dd>
Integer <span>optional</span>, defaults to 0
@@ -4573,7 +4583,7 @@ DELETE groups/2
</div>
<div class="method-example">
<code class="method-declaration">
GET https://DomainName/mifosng-provider/api/v1/groups
GET https://DomainName/mifosng-provider/api/v1/groups?paged=true
</code>
<code class="method-response">
{
@@ -49,7 +49,7 @@ public class StaffApiResource {
* {@link StaffData}.
*/
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "firstname", "lastname", "displayName",
"officeId", "officeName", "loanOfficerFlag", "externalId", "mobileNo", "allowedOffices", "isActive"));
"officeId", "officeName", "isLoanOfficer", "externalId", "mobileNo", "allowedOffices", "isActive"));
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<StaffData> 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());
@@ -23,5 +23,5 @@ public interface StaffReadPlatformService {
*/
Collection<StaffData> retrieveAllStaffInOfficeAndItsParentOfficeHierarchy(Long officeId, boolean loanOfficersOnly);
Collection<StaffData> retrieveAllStaff(String sqlSearch, Long officeId);
Collection<StaffData> retrieveAllStaff(String sqlSearch, Long officeId, boolean loanOfficersOnly);
}
@@ -163,8 +163,8 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
}
@Override
public Collection<StaffData> retrieveAllStaff(final String sqlSearch, final Long officeId) {
final String extraCriteria = getStaffCriteria(sqlSearch, officeId);
public Collection<StaffData> retrieveAllStaff(final String sqlSearch, final Long officeId, final boolean loanOfficersOnly) {
final String extraCriteria = getStaffCriteria(sqlSearch, officeId, loanOfficersOnly);
return retrieveAllStaff(extraCriteria);
}
@@ -179,21 +179,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
@@ -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<JLGCollectionSheetFlatData> retriveJLGCollectionSheet(String groupHierarchy, String officeHierarchy, LocalDate dueDate);
}
@@ -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<JLGCollectionSheetFlatData> 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<JLGCollectionSheetFlatData> 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<JLGCollectionSheetFlatData> {
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.short_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
@@ -306,8 +284,8 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
// check if transaction against calendar effective from date
if (!calendar.isValidRecurringDate(transactionDate)) { throw new NotValidRecurringDateException("collectionsheet", "The date '"
+ transactionDate + "' is not a valid meeting date.", transactionDate); }
+ transactionDate + "' is not a valid meeting date.", transactionDate); }
final AppUser currentUser = this.context.authenticatedUser();
final String hierarchy = currentUser.getOffice().getHierarchy();
final String officeHierarchy = hierarchy + "%";
@@ -316,11 +294,7 @@ 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,18 +326,14 @@ 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());
final Collection<JLGCollectionSheetFlatData> collectionSheetFlatDatas = this.namedParameterjdbcTemplate.query(sql.toString(), namedParameters,
mapper);
final Collection<JLGCollectionSheetFlatData> collectionSheetFlatDatas = this.namedParameterjdbcTemplate.query(sql.toString(),
namedParameters, mapper);
return buildJLGCollectionSheet(transactionDate, collectionSheetFlatDatas);
}
@@ -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<CenterData> 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<CenterData> centers = this.centerReadPlatformService.retrievePagedAll(searchParameters, parameters);
return this.toApiJsonSerializer.serialize(settings, centers, GroupingTypesApiConstants.CENTER_RESPONSE_DATA_PARAMETERS);
}
final Collection<CenterData> centers = this.centerReadPlatformService.retrieveAll(searchParameters, parameters);
return this.toApiJsonSerializer.serialize(settings, centers, GroupingTypesApiConstants.CENTER_RESPONSE_DATA_PARAMETERS);
}
@@ -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<String> CENTER_RESPONSE_DATA_PARAMETERS = new HashSet<String>(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<String> CENTER_GROUP_RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(idParamName, nameParamName,
externalIdParamName, officeIdParamName, officeNameParamName, staffIdParamName, staffNameParamName, hierarchyParamName,
@@ -89,7 +91,8 @@ public class GroupingTypesApiConstants {
public static final Set<String> GROUP_RESPONSE_DATA_PARAMETERS = new HashSet<String>(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<String> ACTIVATION_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName,
dateFormatParamName, activationDateParamName));
@@ -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<GroupGeneralData> 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<GroupGeneralData> groups = this.groupReadPlatformService.retrievePagedAll(searchParameters, parameters);
return this.toApiJsonSerializer.serialize(settings, groups, GroupingTypesApiConstants.GROUP_RESPONSE_DATA_PARAMETERS);
}
final Collection<GroupGeneralData> groups = this.groupReadPlatformService.retrieveAll(searchParameters, parameters);
return this.toApiJsonSerializer.serialize(settings, groups, GroupingTypesApiConstants.GROUP_RESPONSE_DATA_PARAMETERS);
}
@@ -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<GroupGeneralData> groupMembers;
// template
private final Collection<OfficeData> officeOptions;
private final Collection<StaffData> staffOptions;
// template
private final Collection<GroupGeneralData> groupMembersOptions;
private final CalendarData collectionMeetingCalendar;
private final Collection<CodeValueData> closureReasons;
private final Collection<OfficeData> officeOptions;
private final Collection<StaffData> staffOptions;
public static CenterData template(final Long officeId, final LocalDate activationDate, final Collection<OfficeData> officeOptions,
final Collection<StaffData> staffOptions, final Collection<GroupGeneralData> groupMembersOptions) {
@@ -25,7 +25,7 @@ public final class AllGroupTypesDataMapper implements RowMapper<GroupGeneralData
public AllGroupTypesDataMapper() {
final StringBuilder sqlBuilder = new StringBuilder(400);
sqlBuilder.append("g.id as id, g.external_id as externalId, g.display_name as displayName, ");
sqlBuilder.append("g.id as id, g.external_id as externalId, g.display_name as name, ");
sqlBuilder.append("g.office_id as officeId, o.name as officeName, ");
sqlBuilder.append("g.parent_id as centerId, pg.display_name as centerName, ");
sqlBuilder.append("g.staff_id as staffId, s.display_name as staffName, ");
@@ -66,7 +66,7 @@ public final class AllGroupTypesDataMapper implements RowMapper<GroupGeneralData
public GroupGeneralData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
final Long id = rs.getLong("id");
final String name = rs.getString("displayName");
final String name = rs.getString("name");
final String externalId = rs.getString("externalId");
final Integer statusEnum = JdbcSupport.getInteger(rs, "statusEnum");
@@ -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.CenterData;
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
@@ -19,7 +20,9 @@ public interface CenterReadPlatformService {
Collection<CenterData> retrieveAllForDropdown(Long officeId);
Page<CenterData> retrieveAll(SearchParameters searchParameters);
Page<CenterData> retrievePagedAll(SearchParameters searchParameters, PaginationParameters parameters);
Collection<CenterData> retrieveAll(SearchParameters searchParameters, PaginationParameters parameters);
GroupGeneralData retrieveCenterGroupTemplate(Long centerId);
@@ -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<CenterData> paginationHelper = new PaginationHelper<CenterData>();
private final PaginationParametersDataValidator paginationParametersDataValidator;
private final static Set<String> supportedOrderByValues = new HashSet<String>(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<CenterData> retrieveAll(final SearchParameters searchParameters) {
public Page<CenterData> 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<CenterData> 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<CenterData> retrieveAllForDropdown(final Long officeId) {
@@ -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<GroupGeneralData> retrieveAll(SearchParameters searchParameters);
Page<GroupGeneralData> retrievePagedAll(SearchParameters searchParameters, PaginationParameters parameters);
Collection<GroupGeneralData> retrieveAll(SearchParameters searchParameters, PaginationParameters parameters);
GroupGeneralData retrieveOne(Long groupId);
@@ -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<GroupGeneralData> paginationHelper = new PaginationHelper<GroupGeneralData>();
private final PaginationParametersDataValidator paginationParametersDataValidator;
private final static Set<String> supportedOrderByValues = new HashSet<String>(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<GroupGeneralData> retrieveAll(final SearchParameters searchParameters) {
public Page<GroupGeneralData> 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<GroupGeneralData> 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
@@ -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;
}
}