implemented pagination and sorting for loans api

This commit is contained in:
Anuruddha Premalal
2013-05-08 15:49:53 +05:30
parent 495c4b7109
commit 6c04f5d520
3 changed files with 74 additions and 0 deletions
@@ -39,6 +39,7 @@ import org.mifosplatform.infrastructure.core.exception.UnrecognizedQueryParamExc
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.organisation.staff.data.BulkTransferLoanOfficerData;
import org.mifosplatform.organisation.staff.data.StaffData;
@@ -357,6 +358,20 @@ public class LoansApiResource {
return this.toApiJsonSerializer.serialize(settings, loanAccount, LOAN_DATA_PARAMETERS);
}
@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveAll(@QueryParam("sqlSearch") final String sqlSearch, @QueryParam("externalId") final String externalId,
@QueryParam("underHierarchy") final String hierarchy, @QueryParam("offset") final Integer offset,
@QueryParam("limit") final Integer limit, @QueryParam("orderBy") final String orderBy,
@QueryParam("sortOrder") final String sortOrder) {
context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
final Page<LoanAccountData> loanBasicDetails = this.loanReadPlatformService.retrieveAll(sqlSearch, externalId, offset, limit,
orderBy, sortOrder);
return this.toApiJsonSerializer.serialize(loanBasicDetails);
}
@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@@ -7,6 +7,7 @@ package org.mifosplatform.portfolio.loanaccount.service;
import java.util.Collection;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.portfolio.calendar.data.CalendarData;
import org.mifosplatform.portfolio.loanaccount.data.LoanAccountData;
import org.mifosplatform.portfolio.loanaccount.data.LoanTransactionData;
@@ -46,4 +47,6 @@ public interface LoanReadPlatformService {
LoanAccountData retrieveGroupAndMembersDetailsTemplate(Long groupId);
Collection<CalendarData> retrieveCalendars(Long groupId);
Page<LoanAccountData> retrieveAll(String sqlSearch, String externalId, Integer offset, Integer limit, String orderBy, String sortOrder);
}
@@ -9,9 +9,11 @@ import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.codes.data.CodeValueData;
@@ -19,6 +21,8 @@ import org.mifosplatform.infrastructure.codes.service.CodeValueReadPlatformServi
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
import org.mifosplatform.infrastructure.core.service.DateUtils;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.infrastructure.core.service.PaginationHelper;
import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.organisation.monetary.data.CurrencyData;
@@ -87,6 +91,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
private final CodeValueReadPlatformService codeValueReadPlatformService;
private final CalendarReadPlatformService calendarReadPlatformService;
private final PaginationHelper<LoanAccountData> paginationHelper = new PaginationHelper<LoanAccountData>();
private final LoanMapper loaanLoanMapper = new LoanMapper();
@Autowired
public LoanReadPlatformServiceImpl(final PlatformSecurityContext context, final LoanRepository loanRepository,
@@ -165,6 +171,56 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
}
}
@Override
public Page<LoanAccountData> retrieveAll(final String sqlSearch, final String externalId, final Integer offset, final Integer limit,
final String orderBy, final String sortOrder) {
StringBuilder sqlBuilder = new StringBuilder(200);
sqlBuilder.append("select SQL_CALC_FOUND_ROWS ");
sqlBuilder.append(loaanLoanMapper.loanSchema());
final Object[] objectArray = new Object[1];
int arrayPos = 0;
String sqlQueryCriteria = sqlSearch;
if (StringUtils.isNotBlank(sqlQueryCriteria)) {
sqlQueryCriteria = sqlQueryCriteria.replaceAll("accountNo", "l.account_no");
sqlBuilder.append(" where (").append(sqlQueryCriteria).append(")");
}
if (StringUtils.isNotBlank(externalId)) {
sqlBuilder.append(" and l.external_id = ?");
objectArray[arrayPos] = externalId;
arrayPos = arrayPos + 1;
}
if (StringUtils.isNotBlank(orderBy)) {
sqlBuilder.append(" order by ").append(orderBy);
if (StringUtils.isNotBlank(sortOrder)) {
sqlBuilder.append(' ').append(sortOrder);
}
}
if (limit != null && limit > 0) {
Integer maxLimitAllowed = 200;
if (limit < maxLimitAllowed) {
maxLimitAllowed = limit;
}
sqlBuilder.append(" limit ").append(maxLimitAllowed);
if (offset != null) {
sqlBuilder.append(" offset ").append(offset);
}
} else if (limit != null && limit == -1) {
;
} else
sqlBuilder.append(" limit ").append(200);
final Object[] finalObjectArray = Arrays.copyOf(objectArray, arrayPos);
final String sqlCountRows = "SELECT FOUND_ROWS()";
return this.paginationHelper.fetchPage(this.jdbcTemplate, sqlCountRows, sqlBuilder.toString(), finalObjectArray,
this.loaanLoanMapper);
}
@Override
public LoanAccountData retrieveTemplateWithClientAndProductDetails(final Long clientId, final Long productId) {