MIFOSX-339: use common search parameters for loans and journal entries retrieve all as it contains logic and api for dealing with limits.
This commit is contained in:
-3
@@ -20,9 +20,6 @@ import org.apache.commons.lang.StringUtils;
|
||||
* Class for parsing dates sent as query parameters
|
||||
*
|
||||
* TODO: Vishwas Should move this class to a more generic package
|
||||
*
|
||||
* @author
|
||||
*
|
||||
*/
|
||||
public class DateParam {
|
||||
|
||||
|
||||
+7
-5
@@ -34,6 +34,7 @@ import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSeriali
|
||||
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
|
||||
import org.mifosplatform.infrastructure.core.service.Page;
|
||||
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -80,8 +81,6 @@ public class JournalEntriesApiResource {
|
||||
|
||||
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
|
||||
|
||||
Page<JournalEntryData> glJournalEntries = null;
|
||||
|
||||
Date fromDate = null;
|
||||
if (fromDateParam != null) {
|
||||
fromDate = fromDateParam.getDate();
|
||||
@@ -90,11 +89,14 @@ public class JournalEntriesApiResource {
|
||||
if (toDateParam != null) {
|
||||
toDate = toDateParam.getDate();
|
||||
}
|
||||
glJournalEntries = this.journalEntryReadPlatformService.retrieveAll(officeId, glAccountId, onlyManualEntries, fromDate, toDate,
|
||||
offset, limit, orderBy, sortOrder, transactionId);
|
||||
|
||||
final SearchParameters searchParameters = SearchParameters.forJournalEntries(officeId, offset, limit, orderBy, sortOrder);
|
||||
|
||||
Page<JournalEntryData> glJournalEntries = this.journalEntryReadPlatformService.retrieveAll(searchParameters, glAccountId,
|
||||
onlyManualEntries, fromDate, toDate, transactionId);
|
||||
return this.apiJsonSerializerService.serialize(glJournalEntries);
|
||||
}
|
||||
|
||||
|
||||
@GET
|
||||
@Path("{journalEntryId}")
|
||||
@Consumes({ MediaType.APPLICATION_JSON })
|
||||
|
||||
+3
-2
@@ -9,12 +9,13 @@ import java.util.Date;
|
||||
|
||||
import org.mifosplatform.accounting.journalentry.data.JournalEntryData;
|
||||
import org.mifosplatform.infrastructure.core.service.Page;
|
||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
||||
|
||||
public interface JournalEntryReadPlatformService {
|
||||
|
||||
JournalEntryData retrieveGLJournalEntryById(long glJournalEntryId);
|
||||
|
||||
Page<JournalEntryData> retrieveAll(Long officeId, Long glAccountId, Boolean onlyManualEntries, Date fromDate, Date toDate,
|
||||
Integer offset, Integer limit, String orderBy, String sortOrder, String transactionId);
|
||||
Page<JournalEntryData> retrieveAll(SearchParameters searchParameters, Long glAccountId, Boolean onlyManualEntries, Date fromDate,
|
||||
Date toDate, String transactionId);
|
||||
|
||||
}
|
||||
|
||||
+19
-25
@@ -23,6 +23,7 @@ import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
|
||||
import org.mifosplatform.infrastructure.core.service.Page;
|
||||
import org.mifosplatform.infrastructure.core.service.PaginationHelper;
|
||||
import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource;
|
||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.EmptyResultDataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
@@ -33,7 +34,7 @@ import org.springframework.stereotype.Service;
|
||||
public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlatformService {
|
||||
|
||||
private final JdbcTemplate jdbcTemplate;
|
||||
|
||||
|
||||
private final GLJournalEntryMapper journalEntryMapper = new GLJournalEntryMapper();
|
||||
private final PaginationHelper<JournalEntryData> paginationHelper = new PaginationHelper<JournalEntryData>();
|
||||
|
||||
@@ -89,16 +90,15 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
||||
final Boolean reversed = rs.getBoolean("reversed");
|
||||
final String referenceNumber = rs.getString("referenceNumber");
|
||||
|
||||
return new JournalEntryData(id, officeId, officeName, glAccountName, glAccountId, glCode, accountType,
|
||||
transactionDate, entryType, amount, transactionId, manualEntry, entityType, entityId, createdByUserId, createdDate,
|
||||
createdByUserName, comments, reversed, referenceNumber);
|
||||
return new JournalEntryData(id, officeId, officeName, glAccountName, glAccountId, glCode, accountType, transactionDate,
|
||||
entryType, amount, transactionId, manualEntry, entityType, entityId, createdByUserId, createdDate, createdByUserName,
|
||||
comments, reversed, referenceNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<JournalEntryData> retrieveAll(final Long officeId, final Long glAccountId, final Boolean onlyManualEntries,
|
||||
final Date fromDate, final Date toDate, final Integer offset, final Integer limit, final String orderBy,
|
||||
final String sortOrder, final String transactionId) {
|
||||
public Page<JournalEntryData> retrieveAll(final SearchParameters searchParameters, final Long glAccountId,
|
||||
final Boolean onlyManualEntries, final Date fromDate, final Date toDate, final String transactionId) {
|
||||
|
||||
StringBuilder sqlBuilder = new StringBuilder(200);
|
||||
sqlBuilder.append("select SQL_CALC_FOUND_ROWS ");
|
||||
@@ -113,9 +113,9 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
||||
arrayPos = arrayPos + 1;
|
||||
}
|
||||
|
||||
if (officeId != null && officeId != 0) {
|
||||
if (searchParameters.isOfficeIdPassed()) {
|
||||
sqlBuilder.append(" and journalEntry.office_id = ?");
|
||||
objectArray[arrayPos] = officeId;
|
||||
objectArray[arrayPos] = searchParameters.getOfficeId();
|
||||
arrayPos = arrayPos + 1;
|
||||
}
|
||||
|
||||
@@ -156,26 +156,20 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(orderBy)) {
|
||||
sqlBuilder.append(" order by ").append(orderBy);
|
||||
if (StringUtils.isNotBlank(sortOrder)) {
|
||||
sqlBuilder.append(' ').append(sortOrder);
|
||||
if (searchParameters.isOrderByRequested()) {
|
||||
sqlBuilder.append(" order by ").append(searchParameters.getOrderBy());
|
||||
|
||||
if (searchParameters.isSortOrderProvided()) {
|
||||
sqlBuilder.append(' ').append(searchParameters.getSortOrder());
|
||||
}
|
||||
}
|
||||
|
||||
if (limit != null && limit > 0) {
|
||||
Integer maxLimitAllowed = 200;
|
||||
if (limit < maxLimitAllowed) {
|
||||
maxLimitAllowed = limit;
|
||||
if (searchParameters.isLimited()) {
|
||||
sqlBuilder.append(" limit ").append(searchParameters.getLimit());
|
||||
if (searchParameters.isOffset()) {
|
||||
sqlBuilder.append(" offset ").append(searchParameters.getOffset());
|
||||
}
|
||||
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()";
|
||||
|
||||
-3
@@ -90,9 +90,6 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
|
||||
sqlBuilder.append(" and (").append(extraCriteria).append(")");
|
||||
}
|
||||
|
||||
// DONT order by default - just use database natural ordering so doesnt
|
||||
// have to scan entire database table.
|
||||
// sql += " order by c.display_name ASC, c.account_no ASC";
|
||||
if (searchParameters.isOrderByRequested()) {
|
||||
sqlBuilder.append(" order by ").append(searchParameters.getOrderBy());
|
||||
|
||||
|
||||
+43
-17
@@ -30,20 +30,35 @@ public final class SearchParameters {
|
||||
final String displayName, final String firstname, final String lastname, final String hierarchy, final Integer offset,
|
||||
final Integer limit, final String orderBy, final String sortOrder) {
|
||||
|
||||
Integer maxLimitAllowed = getCheckedLimit(200, limit);
|
||||
|
||||
Integer maxLimitAllowed = getCheckedLimit(limit);
|
||||
|
||||
return new SearchParameters(sqlSearch, officeId, externalId, displayName, hierarchy, firstname, lastname, offset, maxLimitAllowed,
|
||||
orderBy, sortOrder);
|
||||
}
|
||||
|
||||
public static SearchParameters forGroups(final String sqlSearch, final Long officeId, final String externalId,
|
||||
final String name, final String hierarchy, final Integer offset,
|
||||
final Integer limit, final String orderBy, final String sortOrder) {
|
||||
|
||||
Integer maxLimitAllowed = getCheckedLimit(200, limit);
|
||||
public static SearchParameters forGroups(final String sqlSearch, final Long officeId, final String externalId, final String name,
|
||||
final String hierarchy, final Integer offset, final Integer limit, final String orderBy, final String sortOrder) {
|
||||
|
||||
return new SearchParameters(sqlSearch, officeId, externalId, name, hierarchy, null, null, offset, maxLimitAllowed,
|
||||
orderBy, sortOrder);
|
||||
Integer maxLimitAllowed = getCheckedLimit(limit);
|
||||
|
||||
return new SearchParameters(sqlSearch, officeId, externalId, name, hierarchy, null, null, offset, maxLimitAllowed, orderBy,
|
||||
sortOrder);
|
||||
}
|
||||
|
||||
public static SearchParameters forLoans(final String sqlSearch, final String externalId, final Integer offset, final Integer limit,
|
||||
final String orderBy, final String sortOrder) {
|
||||
|
||||
Integer maxLimitAllowed = getCheckedLimit(limit);
|
||||
|
||||
return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder);
|
||||
}
|
||||
|
||||
public static SearchParameters forJournalEntries(final Long officeId, final Integer offset, final Integer limit, final String orderBy,
|
||||
final String sortOrder) {
|
||||
|
||||
Integer maxLimitAllowed = getCheckedLimit(limit);
|
||||
|
||||
return new SearchParameters(null, officeId, null, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder);
|
||||
}
|
||||
|
||||
private SearchParameters(final String sqlSearch, final Long officeId, final String externalId, final String name,
|
||||
@@ -69,14 +84,25 @@ public final class SearchParameters {
|
||||
public boolean isSortOrderProvided() {
|
||||
return StringUtils.isNotBlank(this.sortOrder);
|
||||
}
|
||||
|
||||
public static Integer getCheckedLimit(Integer maxLimitAllowed, Integer limit) {
|
||||
if (limit != null && limit < maxLimitAllowed && limit > 0) {
|
||||
return limit;
|
||||
} else if (limit != null && limit == -1) {
|
||||
return null;
|
||||
} else
|
||||
return maxLimitAllowed;
|
||||
|
||||
public static Integer getCheckedLimit(final Integer limit) {
|
||||
|
||||
final Integer maxLimitAllowed = 200;
|
||||
// default to max limit first off
|
||||
Integer checkedLimit = maxLimitAllowed;
|
||||
|
||||
if (limit != null && limit > 0) {
|
||||
checkedLimit = limit;
|
||||
} else if (limit != null) {
|
||||
// unlimited case: limit provided and 0 or less
|
||||
checkedLimit = null;
|
||||
}
|
||||
|
||||
return checkedLimit;
|
||||
}
|
||||
|
||||
public boolean isOfficeIdPassed() {
|
||||
return this.officeId != null && this.officeId != 0;
|
||||
}
|
||||
|
||||
public String getSqlSearch() {
|
||||
|
||||
+5
-2
@@ -54,6 +54,7 @@ import org.mifosplatform.portfolio.fund.data.FundData;
|
||||
import org.mifosplatform.portfolio.fund.service.FundReadPlatformService;
|
||||
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
|
||||
import org.mifosplatform.portfolio.group.service.GroupReadPlatformService;
|
||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.LoanAccountData;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.LoanChargeData;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.LoanTransactionData;
|
||||
@@ -367,8 +368,10 @@ public class LoansApiResource {
|
||||
@QueryParam("sortOrder") final String sortOrder) {
|
||||
|
||||
context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
|
||||
final Page<LoanAccountData> loanBasicDetails = this.loanReadPlatformService.retrieveAll(sqlSearch, externalId, offset, limit,
|
||||
orderBy, sortOrder);
|
||||
|
||||
final SearchParameters searchParameters = SearchParameters.forLoans(sqlSearch, externalId, offset, limit, orderBy, sortOrder);
|
||||
|
||||
final Page<LoanAccountData> loanBasicDetails = this.loanReadPlatformService.retrieveAll(searchParameters);
|
||||
return this.toApiJsonSerializer.serialize(loanBasicDetails);
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -9,6 +9,7 @@ import java.util.Collection;
|
||||
|
||||
import org.mifosplatform.infrastructure.core.service.Page;
|
||||
import org.mifosplatform.portfolio.calendar.data.CalendarData;
|
||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.LoanAccountData;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.LoanTransactionData;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.RepaymentScheduleRelatedLoanData;
|
||||
@@ -48,5 +49,5 @@ public interface LoanReadPlatformService {
|
||||
|
||||
Collection<CalendarData> retrieveCalendars(Long groupId);
|
||||
|
||||
Page<LoanAccountData> retrieveAll(String sqlSearch, String externalId, Integer offset, Integer limit, String orderBy, String sortOrder);
|
||||
Page<LoanAccountData> retrieveAll(SearchParameters searchParameters);
|
||||
}
|
||||
+15
-21
@@ -42,6 +42,7 @@ import org.mifosplatform.portfolio.fund.data.FundData;
|
||||
import org.mifosplatform.portfolio.fund.service.FundReadPlatformService;
|
||||
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
|
||||
import org.mifosplatform.portfolio.group.service.GroupReadPlatformService;
|
||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.DisbursementData;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.LoanAccountData;
|
||||
import org.mifosplatform.portfolio.loanaccount.data.LoanApplicationTimelineData;
|
||||
@@ -173,8 +174,7 @@ 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) {
|
||||
public Page<LoanAccountData> retrieveAll(final SearchParameters searchParameters) {
|
||||
|
||||
StringBuilder sqlBuilder = new StringBuilder(200);
|
||||
sqlBuilder.append("select SQL_CALC_FOUND_ROWS ");
|
||||
@@ -183,38 +183,32 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
|
||||
final Object[] objectArray = new Object[1];
|
||||
int arrayPos = 0;
|
||||
|
||||
String sqlQueryCriteria = sqlSearch;
|
||||
String sqlQueryCriteria = searchParameters.getSqlSearch();
|
||||
if (StringUtils.isNotBlank(sqlQueryCriteria)) {
|
||||
sqlQueryCriteria = sqlQueryCriteria.replaceAll("accountNo", "l.account_no");
|
||||
sqlBuilder.append(" where (").append(sqlQueryCriteria).append(")");
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(externalId)) {
|
||||
if (StringUtils.isNotBlank(searchParameters.getExternalId())) {
|
||||
sqlBuilder.append(" and l.external_id = ?");
|
||||
objectArray[arrayPos] = externalId;
|
||||
objectArray[arrayPos] = searchParameters.getExternalId();
|
||||
arrayPos = arrayPos + 1;
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(orderBy)) {
|
||||
sqlBuilder.append(" order by ").append(orderBy);
|
||||
if (StringUtils.isNotBlank(sortOrder)) {
|
||||
sqlBuilder.append(' ').append(sortOrder);
|
||||
if (searchParameters.isOrderByRequested()) {
|
||||
sqlBuilder.append(" order by ").append(searchParameters.getOrderBy());
|
||||
|
||||
if (searchParameters.isSortOrderProvided()) {
|
||||
sqlBuilder.append(' ').append(searchParameters.getSortOrder());
|
||||
}
|
||||
}
|
||||
|
||||
if (limit != null && limit > 0) {
|
||||
Integer maxLimitAllowed = 200;
|
||||
if (limit < maxLimitAllowed) {
|
||||
maxLimitAllowed = limit;
|
||||
if (searchParameters.isLimited()) {
|
||||
sqlBuilder.append(" limit ").append(searchParameters.getLimit());
|
||||
if (searchParameters.isOffset()) {
|
||||
sqlBuilder.append(" offset ").append(searchParameters.getOffset());
|
||||
}
|
||||
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()";
|
||||
|
||||
Reference in New Issue
Block a user