Merge pull request #1530 from nazeer1100126/MIFOSX-2303-Provisioning

MIFOSX-2303 Add Product/Branch/Category filtering to Loan Provisionin…
This commit is contained in:
Adi Narayana Raju
2015-11-02 11:08:16 +05:30
6 changed files with 310 additions and 124 deletions
@@ -19,7 +19,9 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
import org.mifosplatform.accounting.provisioning.constant.ProvisioningEntriesApiConstants; import org.mifosplatform.accounting.provisioning.constant.ProvisioningEntriesApiConstants;
import org.mifosplatform.accounting.provisioning.data.LoanProductProvisioningEntryData;
import org.mifosplatform.accounting.provisioning.data.ProvisioningEntryData; import org.mifosplatform.accounting.provisioning.data.ProvisioningEntryData;
import org.mifosplatform.accounting.provisioning.domain.LoanProductProvisioningEntry;
import org.mifosplatform.accounting.provisioning.service.ProvisioningEntriesReadPlatformService; import org.mifosplatform.accounting.provisioning.service.ProvisioningEntriesReadPlatformService;
import org.mifosplatform.commands.domain.CommandWrapper; import org.mifosplatform.commands.domain.CommandWrapper;
import org.mifosplatform.commands.service.CommandWrapperBuilder; import org.mifosplatform.commands.service.CommandWrapperBuilder;
@@ -29,6 +31,8 @@ import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
import org.mifosplatform.infrastructure.core.exception.UnrecognizedQueryParamException; import org.mifosplatform.infrastructure.core.exception.UnrecognizedQueryParamException;
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer; import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.infrastructure.core.service.SearchParameters;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
@@ -42,6 +46,7 @@ public class ProvisioningEntriesApiResource {
private final PlatformSecurityContext platformSecurityContext; private final PlatformSecurityContext platformSecurityContext;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService; private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
private final DefaultToApiJsonSerializer<ProvisioningEntryData> toApiJsonSerializer; private final DefaultToApiJsonSerializer<ProvisioningEntryData> toApiJsonSerializer;
private final DefaultToApiJsonSerializer<Object> entriesApiJsonSerializer;
private final ProvisioningEntriesReadPlatformService provisioningEntriesReadPlatformService; private final ProvisioningEntriesReadPlatformService provisioningEntriesReadPlatformService;
private final ApiRequestParameterHelper apiRequestParameterHelper; private final ApiRequestParameterHelper apiRequestParameterHelper;
@@ -50,12 +55,13 @@ public class ProvisioningEntriesApiResource {
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService, final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService,
final DefaultToApiJsonSerializer<ProvisioningEntryData> toApiJsonSerializer, final DefaultToApiJsonSerializer<ProvisioningEntryData> toApiJsonSerializer,
final ProvisioningEntriesReadPlatformService provisioningEntriesReadPlatformService, final ProvisioningEntriesReadPlatformService provisioningEntriesReadPlatformService,
final ApiRequestParameterHelper apiRequestParameterHelper) { final ApiRequestParameterHelper apiRequestParameterHelper, final DefaultToApiJsonSerializer<Object> entriesApiJsonSerializer) {
this.platformSecurityContext = platformSecurityContext; this.platformSecurityContext = platformSecurityContext;
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService; this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
this.toApiJsonSerializer = toApiJsonSerializer; this.toApiJsonSerializer = toApiJsonSerializer;
this.provisioningEntriesReadPlatformService = provisioningEntriesReadPlatformService; this.provisioningEntriesReadPlatformService = provisioningEntriesReadPlatformService;
this.apiRequestParameterHelper = apiRequestParameterHelper; this.apiRequestParameterHelper = apiRequestParameterHelper;
this.entriesApiJsonSerializer = entriesApiJsonSerializer;
} }
@POST @POST
@@ -79,11 +85,13 @@ public class ProvisioningEntriesApiResource {
this.platformSecurityContext.authenticatedUser(); this.platformSecurityContext.authenticatedUser();
if ("createjournalentry".equals(commandParam)) { if ("createjournalentry".equals(commandParam)) {
commandWrapper = new CommandWrapperBuilder().createProvisioningJournalEntries(entryId).withJson(apiRequestBodyAsJson).build(); commandWrapper = new CommandWrapperBuilder().createProvisioningJournalEntries(entryId).withJson(apiRequestBodyAsJson).build();
final CommandProcessingResult commandProcessingResult = this.commandsSourceWritePlatformService.logCommandSource(commandWrapper); final CommandProcessingResult commandProcessingResult = this.commandsSourceWritePlatformService
.logCommandSource(commandWrapper);
return this.toApiJsonSerializer.serialize(commandProcessingResult); return this.toApiJsonSerializer.serialize(commandProcessingResult);
} else if ("recreateprovisioningentry".equals(commandParam)) { } else if ("recreateprovisioningentry".equals(commandParam)) {
commandWrapper = new CommandWrapperBuilder().reCreateProvisioningEntries(entryId).withJson(apiRequestBodyAsJson).build(); commandWrapper = new CommandWrapperBuilder().reCreateProvisioningEntries(entryId).withJson(apiRequestBodyAsJson).build();
final CommandProcessingResult commandProcessingResult = this.commandsSourceWritePlatformService.logCommandSource(commandWrapper); final CommandProcessingResult commandProcessingResult = this.commandsSourceWritePlatformService
.logCommandSource(commandWrapper);
return this.toApiJsonSerializer.serialize(commandProcessingResult); return this.toApiJsonSerializer.serialize(commandProcessingResult);
} }
throw new UnrecognizedQueryParamException("command", commandParam); throw new UnrecognizedQueryParamException("command", commandParam);
@@ -101,12 +109,27 @@ public class ProvisioningEntriesApiResource {
} }
@GET @GET
@Path("entries")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String retrieveAllProvisioningEntries(@Context final UriInfo uriInfo) { public String retrieveProviioningEntries(@QueryParam("entryId") final Long entryId, @QueryParam("offset") final Integer offset,
platformSecurityContext.authenticatedUser() ; @QueryParam("limit") final Integer limit, @QueryParam("officeId") final Long officeId,
Collection<ProvisioningEntryData> data = this.provisioningEntriesReadPlatformService.retrieveAllProvisioningEntries() ; @QueryParam("productId") final Long productId, @QueryParam("categoryId") final Long categoryId, @Context final UriInfo uriInfo) {
this.platformSecurityContext.authenticatedUser();
SearchParameters params = SearchParameters.forProvisioningEntries(entryId, officeId, productId, categoryId, offset, limit);
Page<LoanProductProvisioningEntryData> entries = this.provisioningEntriesReadPlatformService.retrieveProvisioningEntries(params);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, data, ProvisioningEntriesApiConstants.ALL_PROVISIONING_ENTRIES); return this.entriesApiJsonSerializer.serialize(settings, entries, ProvisioningEntriesApiConstants.PROVISIONING_ENTRY_PARAMETERS);
}
@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveAllProvisioningEntries(@QueryParam("offset") final Integer offset, @QueryParam("limit") final Integer limit,
@Context final UriInfo uriInfo) {
platformSecurityContext.authenticatedUser();
Page<ProvisioningEntryData> data = this.provisioningEntriesReadPlatformService.retrieveAllProvisioningEntries(offset, limit);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.entriesApiJsonSerializer.serialize(settings, data, ProvisioningEntriesApiConstants.ALL_PROVISIONING_ENTRIES);
} }
} }
@@ -5,6 +5,7 @@
*/ */
package org.mifosplatform.accounting.provisioning.data; package org.mifosplatform.accounting.provisioning.data;
import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
@@ -25,6 +26,8 @@ public class ProvisioningEntryData {
private String modifiedUser ; private String modifiedUser ;
private BigDecimal reservedAmount ;
private Collection<LoanProductProvisioningEntryData> provisioningEntries ; private Collection<LoanProductProvisioningEntryData> provisioningEntries ;
public ProvisioningEntryData(final Long id, final Collection<LoanProductProvisioningEntryData> provisioningEntries) { public ProvisioningEntryData(final Long id, final Collection<LoanProductProvisioningEntryData> provisioningEntries) {
@@ -33,7 +36,7 @@ public class ProvisioningEntryData {
} }
public ProvisioningEntryData(Long id, Boolean journalEntry, Long createdById, public ProvisioningEntryData(Long id, Boolean journalEntry, Long createdById,
String createdUser, Date createdDate, Long modifiedById, String modifiedUser) { String createdUser, Date createdDate, Long modifiedById, String modifiedUser, BigDecimal totalReservedAmount) {
this.id = id ; this.id = id ;
this.journalEntry = journalEntry ; this.journalEntry = journalEntry ;
this.createdById = createdById ; this.createdById = createdById ;
@@ -41,6 +44,7 @@ public class ProvisioningEntryData {
this.modifiedById = modifiedById ; this.modifiedById = modifiedById ;
this.modifiedUser = modifiedUser ; this.modifiedUser = modifiedUser ;
this.createdDate = createdDate ; this.createdDate = createdDate ;
this.reservedAmount = totalReservedAmount ;
} }
public void setEntries(Collection<LoanProductProvisioningEntryData> provisioningEntries) { public void setEntries(Collection<LoanProductProvisioningEntryData> provisioningEntries) {
@@ -10,6 +10,8 @@ import java.util.Date;
import org.mifosplatform.accounting.provisioning.data.LoanProductProvisioningEntryData; import org.mifosplatform.accounting.provisioning.data.LoanProductProvisioningEntryData;
import org.mifosplatform.accounting.provisioning.data.ProvisioningEntryData; import org.mifosplatform.accounting.provisioning.data.ProvisioningEntryData;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.infrastructure.core.service.SearchParameters;
public interface ProvisioningEntriesReadPlatformService { public interface ProvisioningEntriesReadPlatformService {
@@ -18,11 +20,13 @@ public interface ProvisioningEntriesReadPlatformService {
public ProvisioningEntryData retrieveProvisioningEntryData(Long entryId) ; public ProvisioningEntryData retrieveProvisioningEntryData(Long entryId) ;
public Collection<ProvisioningEntryData> retrieveAllProvisioningEntries() ; public Page<ProvisioningEntryData> retrieveAllProvisioningEntries(Integer offset, Integer limit) ;
public ProvisioningEntryData retrieveProvisioningEntryData(String date) ; public ProvisioningEntryData retrieveProvisioningEntryData(String date) ;
public ProvisioningEntryData retrieveProvisioningEntryDataByCriteriaId(Long criteriaId) ; public ProvisioningEntryData retrieveProvisioningEntryDataByCriteriaId(Long criteriaId) ;
public ProvisioningEntryData retrieveExistingProvisioningIdDateWithJournals() ; public ProvisioningEntryData retrieveExistingProvisioningIdDateWithJournals() ;
public Page<LoanProductProvisioningEntryData> retrieveProvisioningEntries(SearchParameters searchParams) ;
} }
@@ -9,14 +9,19 @@ import java.math.BigDecimal;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.mifosplatform.accounting.provisioning.data.LoanProductProvisioningEntryData; import org.mifosplatform.accounting.provisioning.data.LoanProductProvisioningEntryData;
import org.mifosplatform.accounting.provisioning.data.ProvisioningEntryData; import org.mifosplatform.accounting.provisioning.data.ProvisioningEntryData;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.infrastructure.core.service.PaginationHelper;
import org.mifosplatform.infrastructure.core.service.RoutingDataSource; import org.mifosplatform.infrastructure.core.service.RoutingDataSource;
import org.mifosplatform.infrastructure.core.service.SearchParameters;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
@@ -28,6 +33,9 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
private final JdbcTemplate jdbcTemplate; private final JdbcTemplate jdbcTemplate;
private final PaginationHelper<LoanProductProvisioningEntryData> loanProductProvisioningEntryDataPaginationHelper = new PaginationHelper<>();
private final PaginationHelper<ProvisioningEntryData> provisioningEntryDataPaginationHelper = new PaginationHelper<>();
@Autowired @Autowired
public ProvisioningEntriesReadPlatformServiceImpl(final RoutingDataSource dataSource) { public ProvisioningEntriesReadPlatformServiceImpl(final RoutingDataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource); this.jdbcTemplate = new JdbcTemplate(dataSource);
@@ -58,8 +66,7 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
.append(" JOIN m_provisioning_criteria_definition pcd on pcd.criteria_id = lpm.criteria_id and ") .append(" JOIN m_provisioning_criteria_definition pcd on pcd.criteria_id = lpm.criteria_id and ")
.append("(pcd.min_age <= GREATEST(datediff(").append(formattedDate).append(",sch.duedate),0) and ") .append("(pcd.min_age <= GREATEST(datediff(").append(formattedDate).append(",sch.duedate),0) and ")
.append("GREATEST(datediff(").append(formattedDate).append(",sch.duedate),0) <= pcd.max_age) and ") .append("GREATEST(datediff(").append(formattedDate).append(",sch.duedate),0) <= pcd.max_age) and ")
.append("pcd.criteria_id is not null ") .append("pcd.criteria_id is not null ").append("LEFT JOIN m_client mclient ON mclient.id = loan.client_id ")
.append("LEFT JOIN m_client mclient ON mclient.id = loan.client_id ")
.append("LEFT JOIN m_group mgroup ON mgroup.id = loan.group_id ") .append("LEFT JOIN m_group mgroup ON mgroup.id = loan.group_id ")
.append("where loan.loan_status_id=300 and sch.completed_derived=false ") .append("where loan.loan_status_id=300 and sch.completed_derived=false ")
.append("GROUP BY loan.id order by loan.product_id"); .append("GROUP BY loan.id order by loan.product_id");
@@ -91,22 +98,18 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
@Override @Override
public ProvisioningEntryData retrieveProvisioningEntryData(Long entryId) { public ProvisioningEntryData retrieveProvisioningEntryData(Long entryId) {
LoanProductProvisioningEntryRowMapper mapper = new LoanProductProvisioningEntryRowMapper(); ProvisioningEntryDataMapperWithSumReserved mapper1 = new ProvisioningEntryDataMapperWithSumReserved();
final String sql = mapper.getSchema() + " where entry.history_id = ?"; final String sql1 = "select" + mapper1.getSchema() + " where entry.id = ?";
Collection<LoanProductProvisioningEntryData> entries = this.jdbcTemplate.query(sql, mapper, new Object[] { entryId });
ProvisioningEntryDataMapper mapper1 = new ProvisioningEntryDataMapper() ;
final String sql1 = mapper1.getSchema() + " where entry.id = ?";
ProvisioningEntryData data = this.jdbcTemplate.queryForObject(sql1, mapper1, new Object[] { entryId }); ProvisioningEntryData data = this.jdbcTemplate.queryForObject(sql1, mapper1, new Object[] { entryId });
data.setEntries(entries) ;
return data; return data;
} }
private static final class ProvisioningEntryDataMapper implements RowMapper<ProvisioningEntryData> { private static final class ProvisioningEntryDataMapper implements RowMapper<ProvisioningEntryData> {
private final StringBuilder sqlQuery = new StringBuilder() private final StringBuilder sqlQuery = new StringBuilder()
.append("select entry.id, journal_entry_created, createdby_id, created_date, created.username as createduser,") .append(" entry.id, entry.journal_entry_created, entry.createdby_id, entry.created_date, created.username as createduser,")
.append("lastmodifiedby_id, modified.username as modifieduser, lastmodified_date ") .append("entry.lastmodifiedby_id, modified.username as modifieduser, entry.lastmodified_date ")
.append("from m_provisioning_history entry ") .append("from m_provisioning_history entry ").append("left JOIN m_appuser created ON created.id = entry.createdby_id ")
.append("left JOIN m_appuser created ON created.id = entry.createdby_id ")
.append("left JOIN m_appuser modified ON modified.id = entry.lastmodifiedby_id "); .append("left JOIN m_appuser modified ON modified.id = entry.lastmodifiedby_id ");
@Override @Override
@@ -119,7 +122,9 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
Date createdDate = rs.getDate("created_date"); Date createdDate = rs.getDate("created_date");
Long modifiedById = rs.getLong("lastmodifiedby_id"); Long modifiedById = rs.getLong("lastmodifiedby_id");
String modifieUser = rs.getString("modifieduser"); String modifieUser = rs.getString("modifieduser");
return new ProvisioningEntryData(id, journalEntry, createdById, createdUser, createdDate, modifiedById, modifieUser); BigDecimal totalReservedAmount = null;
return new ProvisioningEntryData(id, journalEntry, createdById, createdUser, createdDate, modifiedById, modifieUser,
totalReservedAmount);
} }
public String getSchema() { public String getSchema() {
@@ -127,10 +132,11 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
} }
} }
private static final class LoanProductProvisioningEntryRowMapper implements RowMapper<LoanProductProvisioningEntryData> { private static final class LoanProductProvisioningEntryRowMapper implements RowMapper<LoanProductProvisioningEntryData> {
private final StringBuilder sqlQuery = new StringBuilder() private final StringBuilder sqlQuery = new StringBuilder()
.append("select entry.id, entry.history_id as historyId, office_id, entry.criteria_id as criteriaid, office.name as officename, product.name as productname, entry.product_id, ") .append(" entry.id, entry.history_id as historyId, office_id, entry.criteria_id as criteriaid, office.name as officename, product.name as productname, entry.product_id, ")
.append("category_id, category.category_name, liability.id as liabilityid, liability.gl_code as liabilitycode, liability.name as liabilityname, ") .append("category_id, category.category_name, liability.id as liabilityid, liability.gl_code as liabilitycode, liability.name as liabilityname, ")
.append("expense.id as expenseid, expense.gl_code as expensecode, expense.name as expensename, entry.currency_code, entry.overdue_in_days, entry.reseve_amount from m_loanproduct_provisioning_entry entry ") .append("expense.id as expenseid, expense.gl_code as expensecode, expense.name as expensename, entry.currency_code, entry.overdue_in_days, entry.reseve_amount from m_loanproduct_provisioning_entry entry ")
.append("left join m_office office ON office.id = entry.office_id ") .append("left join m_office office ON office.id = entry.office_id ")
@@ -159,8 +165,9 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
Long criteriaId = rs.getLong("criteriaid"); Long criteriaId = rs.getLong("criteriaid");
String liabilityAccountName = rs.getString("liabilityname"); String liabilityAccountName = rs.getString("liabilityname");
String expenseAccountName = rs.getString("expensename"); String expenseAccountName = rs.getString("expensename");
return new LoanProductProvisioningEntryData(historyId, officeId, officeName, currentcyCode, productId, productName, categoryId, categoryName, overdueDays, amountreserved, return new LoanProductProvisioningEntryData(historyId, officeId, officeName, currentcyCode, productId, productName, categoryId,
liabilityAccountCode, liabilityAccountglCode, liabilityAccountName, expenseAccountCode, expenseAccountglCode, expenseAccountName, criteriaId); categoryName, overdueDays, amountreserved, liabilityAccountCode, liabilityAccountglCode, liabilityAccountName,
expenseAccountCode, expenseAccountglCode, expenseAccountName, criteriaId);
} }
public String getSchema() { public String getSchema() {
@@ -168,17 +175,56 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
} }
} }
private static final class ProvisioningEntryDataMapperWithSumReserved implements RowMapper<ProvisioningEntryData> {
private final StringBuilder sqlQuery = new StringBuilder()
.append(" entry.id, journal_entry_created, createdby_id, created_date, created.username as createduser,")
.append("lastmodifiedby_id, modified.username as modifieduser, lastmodified_date, SUM(reserved.reseve_amount) as totalreserved ")
.append("from m_provisioning_history entry ")
.append("JOIN m_loanproduct_provisioning_entry reserved on entry.id = reserved.history_id ")
.append("left JOIN m_appuser created ON created.id = entry.createdby_id ")
.append("left JOIN m_appuser modified ON modified.id = entry.lastmodifiedby_id ");
@Override @Override
public Collection<ProvisioningEntryData> retrieveAllProvisioningEntries() { @SuppressWarnings("unused")
public ProvisioningEntryData mapRow(ResultSet rs, int rowNum) throws SQLException {
Long id = rs.getLong("id");
Boolean journalEntry = rs.getBoolean("journal_entry_created");
Long createdById = rs.getLong("createdby_id");
String createdUser = rs.getString("createduser");
Date createdDate = rs.getDate("created_date");
Long modifiedById = rs.getLong("lastmodifiedby_id");
String modifieUser = rs.getString("modifieduser");
BigDecimal totalReservedAmount = rs.getBigDecimal("totalreserved");
return new ProvisioningEntryData(id, journalEntry, createdById, createdUser, createdDate, modifiedById, modifieUser,
totalReservedAmount);
}
public String getSchema() {
return sqlQuery.toString();
}
}
@Override
public Page<ProvisioningEntryData> retrieveAllProvisioningEntries(Integer offset, Integer limit) {
ProvisioningEntryDataMapper mapper = new ProvisioningEntryDataMapper(); ProvisioningEntryDataMapper mapper = new ProvisioningEntryDataMapper();
final String sql1 = mapper.getSchema() + " order by entry.created_date "; StringBuilder sqlBuilder = new StringBuilder();
return this.jdbcTemplate.query(sql1, mapper, new Object[] {}); sqlBuilder.append("select SQL_CALC_FOUND_ROWS ");
sqlBuilder.append(mapper.getSchema());
sqlBuilder.append(" order by entry.created_date");
sqlBuilder.append(" limit ").append(limit);
sqlBuilder.append(" offset ").append(offset);
final String sqlCountRows = "SELECT FOUND_ROWS()";
Object[] whereClauseItemsitems = new Object[] {};
return this.provisioningEntryDataPaginationHelper.fetchPage(this.jdbcTemplate, sqlCountRows, sqlBuilder.toString(),
whereClauseItemsitems, mapper);
} }
@Override @Override
public ProvisioningEntryData retrieveProvisioningEntryData(String date) { public ProvisioningEntryData retrieveProvisioningEntryData(String date) {
ProvisioningEntryDataMapper mapper1 = new ProvisioningEntryDataMapper(); ProvisioningEntryDataMapper mapper1 = new ProvisioningEntryDataMapper();
final String sql1 = mapper1.getSchema() + " where entry.created_date like " + "'"+date+"%'" ; final String sql1 = "select " + mapper1.getSchema() + " where entry.created_date like " + "'" + date + "%'";
ProvisioningEntryData data = null; ProvisioningEntryData data = null;
try { try {
data = this.jdbcTemplate.queryForObject(sql1, mapper1, new Object[] {}); data = this.jdbcTemplate.queryForObject(sql1, mapper1, new Object[] {});
@@ -193,12 +239,12 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
public ProvisioningEntryData retrieveProvisioningEntryDataByCriteriaId(Long criteriaId) { public ProvisioningEntryData retrieveProvisioningEntryDataByCriteriaId(Long criteriaId) {
ProvisioningEntryData data = null; ProvisioningEntryData data = null;
LoanProductProvisioningEntryRowMapper mapper = new LoanProductProvisioningEntryRowMapper(); LoanProductProvisioningEntryRowMapper mapper = new LoanProductProvisioningEntryRowMapper();
final String sql = mapper.getSchema() + " where entry.criteria_id = ?"; final String sql = "select " + mapper.getSchema() + " where entry.criteria_id = ?";
Collection<LoanProductProvisioningEntryData> entries = this.jdbcTemplate.query(sql, mapper, new Object[] { criteriaId }); Collection<LoanProductProvisioningEntryData> entries = this.jdbcTemplate.query(sql, mapper, new Object[] { criteriaId });
if (entries != null && entries.size() > 0) { if (entries != null && entries.size() > 0) {
Long entryId = ((LoanProductProvisioningEntryData) entries.toArray()[0]).getHistoryId(); Long entryId = ((LoanProductProvisioningEntryData) entries.toArray()[0]).getHistoryId();
ProvisioningEntryDataMapper mapper1 = new ProvisioningEntryDataMapper(); ProvisioningEntryDataMapper mapper1 = new ProvisioningEntryDataMapper();
final String sql1 = mapper1.getSchema() + " where entry.id = ?"; final String sql1 = "select " + mapper1.getSchema() + " where entry.id = ?";
data = this.jdbcTemplate.queryForObject(sql1, mapper1, new Object[] { entryId }); data = this.jdbcTemplate.queryForObject(sql1, mapper1, new Object[] { entryId });
data.setEntries(entries); data.setEntries(entries);
} }
@@ -219,8 +265,7 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
private static final class ProvisioningEntryIdDateRowMapper implements RowMapper<ProvisioningEntryData> { private static final class ProvisioningEntryIdDateRowMapper implements RowMapper<ProvisioningEntryData> {
StringBuffer buff = new StringBuffer() StringBuffer buff = new StringBuffer().append("select history1.id, history1.created_date from m_provisioning_history history1 ")
.append("select history1.id, history1.created_date from m_provisioning_history history1 ")
.append("where history1.created_date = (select max(history2.created_date) from m_provisioning_history history2 ") .append("where history1.created_date = (select max(history2.created_date) from m_provisioning_history history2 ")
.append("where history2.journal_entry_created='1')"); .append("where history2.journal_entry_created='1')");
@@ -234,7 +279,9 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
String createdName = null; String createdName = null;
Long modifiedBy = null; Long modifiedBy = null;
String modifiedName = null; String modifiedName = null;
return new ProvisioningEntryData(id, Boolean.TRUE, createdBy, createdName, createdDate, modifiedBy, modifiedName) ; BigDecimal totalReservedAmount = null;
return new ProvisioningEntryData(id, Boolean.TRUE, createdBy, createdName, createdDate, modifiedBy, modifiedName,
totalReservedAmount);
} }
public String schema() { public String schema() {
@@ -242,4 +289,49 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
} }
} }
@Override
public Page<LoanProductProvisioningEntryData> retrieveProvisioningEntries(SearchParameters searchParams) {
LoanProductProvisioningEntryRowMapper mapper = new LoanProductProvisioningEntryRowMapper();
final StringBuilder sqlBuilder = new StringBuilder(200);
sqlBuilder.append("select SQL_CALC_FOUND_ROWS ");
sqlBuilder.append(mapper.getSchema());
String whereClose = " where ";
List<Object> items = new ArrayList<>();
if (searchParams.isProvisioningEntryIdPassed()) {
sqlBuilder.append(whereClose + " entry.history_id = ?");
items.add(searchParams.getProvisioningEntryId());
whereClose = " and ";
}
if (searchParams.isOfficeIdPassed()) {
sqlBuilder.append(whereClose + " entry.office_id = ?");
items.add(searchParams.getOfficeId());
whereClose = " and ";
}
if (searchParams.isProductIdPassed()) {
sqlBuilder.append(whereClose + " entry.product_id = ?");
items.add(searchParams.getProductId());
whereClose = " and ";
}
if (searchParams.isCategoryIdPassed()) {
sqlBuilder.append(whereClose + " entry.category_id = ?");
items.add(searchParams.getCategoryId());
}
sqlBuilder.append(" order by entry.id");
if (searchParams.isLimited()) {
sqlBuilder.append(" limit ").append(searchParams.getLimit());
if (searchParams.isOffset()) {
sqlBuilder.append(" offset ").append(searchParams.getOffset());
}
}
Object[] whereClauseItemsitems = items.toArray();
final String sqlCountRows = "SELECT FOUND_ROWS()";
return this.loanProductProvisioningEntryDataPaginationHelper.fetchPage(this.jdbcTemplate, sqlCountRows, sqlBuilder.toString(),
whereClauseItemsitems, mapper);
}
} }
@@ -30,6 +30,11 @@ public final class SearchParameters {
private final Long savingsId; private final Long savingsId;
private final Boolean orphansOnly; private final Boolean orphansOnly;
//Provisning Entries Search Params
private final Long provisioningEntryId ;
private final Long productId ;
private final Long categoryId ;
public static SearchParameters from(final String sqlSearch, final Long officeId, final String externalId, final String name, public static SearchParameters from(final String sqlSearch, final Long officeId, final String externalId, final String name,
final String hierarchy) { final String hierarchy) {
final Long staffId = null; final Long staffId = null;
@@ -134,6 +139,11 @@ public final class SearchParameters {
loanId, savingsId, orphansOnly); loanId, savingsId, orphansOnly);
} }
public final static SearchParameters forProvisioningEntries(final Long provisioningEntryId, final Long officeId, final Long productId,
final Long categoryId, final Integer offset, final Integer limit) {
return new SearchParameters(provisioningEntryId, officeId, productId, categoryId, offset, limit) ;
}
public static SearchParameters forSavings(final String sqlSearch, final String externalId, final Integer offset, final Integer limit, public static SearchParameters forSavings(final String sqlSearch, final String externalId, final Integer offset, final Integer limit,
final String orderBy, final String sortOrder) { final String orderBy, final String sortOrder) {
@@ -183,6 +193,35 @@ public final class SearchParameters {
this.savingsId = savingsId; this.savingsId = savingsId;
this.orphansOnly = orphansOnly; this.orphansOnly = orphansOnly;
this.currencyCode = null; this.currencyCode = null;
this.provisioningEntryId = null ;
this.productId = null ;
this.categoryId = null ;
}
private SearchParameters(final Long provisioningEntryId, final Long officeId, final Long productId, final Long categoryId,
final Integer offset, final Integer limit) {
this.sqlSearch = null;
this.externalId = null;
this.name = null;
this.hierarchy = null;
this.firstname = null;
this.lastname = null;
this.orderBy = null;
this.sortOrder = null;
this.staffId = null;
this.accountNo = null;
this.loanId = null;
this.savingsId = null;
this.orphansOnly = null;
this.currencyCode = null;
this.officeId = officeId;
this.offset = offset;
this.limit = limit;
this.provisioningEntryId = provisioningEntryId ;
this.productId = productId ;
this.categoryId = categoryId ;
} }
public SearchParameters(final String sqlSearch, final Long officeId, final String externalId, final String name, final String hierarchy, public SearchParameters(final String sqlSearch, final Long officeId, final String externalId, final String name, final String hierarchy,
@@ -206,6 +245,9 @@ public final class SearchParameters {
this.savingsId = savingsId; this.savingsId = savingsId;
this.orphansOnly = orphansOnly; this.orphansOnly = orphansOnly;
this.currencyCode = currencyCode; this.currencyCode = currencyCode;
this.provisioningEntryId = null ;
this.productId = null ;
this.categoryId = null ;
} }
public boolean isOrderByRequested() { public boolean isOrderByRequested() {
@@ -331,6 +373,28 @@ public final class SearchParameters {
public Boolean isOrphansOnly() { public Boolean isOrphansOnly() {
if (this.orphansOnly != null) { return this.orphansOnly; } if (this.orphansOnly != null) { return this.orphansOnly; }
return false; return false;
}
public Long getProvisioningEntryId() {
return this.provisioningEntryId;
}
public boolean isProvisioningEntryIdPassed() {
return this.provisioningEntryId != null && this.provisioningEntryId != 0 ;
}
public Long getProductId() {
return this.productId;
}
public boolean isProductIdPassed() {
return this.productId != null && this.productId != 0 ;
}
public Long getCategoryId() {
return this.categoryId;
}
public boolean isCategoryIdPassed() {
return this.categoryId != null && this.categoryId != 0 ;
} }
} }
@@ -58,7 +58,6 @@ public class ProvisioningCategoryApiResource {
} }
@GET @GET
@Path("template")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String retrieveAll(@Context final UriInfo uriInfo) { public String retrieveAll(@Context final UriInfo uriInfo) {