merge ashoks changes for collection sheet improvements
This commit is contained in:
+14
-4
@@ -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">
|
||||
{
|
||||
|
||||
+4
-4
@@ -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());
|
||||
|
||||
+1
-1
@@ -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);
|
||||
}
|
||||
+15
-10
@@ -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
|
||||
|
||||
-4
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
+55
-85
@@ -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);
|
||||
}
|
||||
|
||||
+13
-7
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+5
-2
@@ -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));
|
||||
|
||||
+12
-5
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+10
-11
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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");
|
||||
|
||||
+4
-1
@@ -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);
|
||||
|
||||
|
||||
+55
-12
@@ -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) {
|
||||
|
||||
+4
-1
@@ -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);
|
||||
|
||||
|
||||
+57
-14
@@ -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
|
||||
|
||||
+30
-12
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user