implemented pagination and sorting for loans api
This commit is contained in:
+15
@@ -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 })
|
||||
|
||||
+3
@@ -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);
|
||||
}
|
||||
+56
@@ -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) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user