From f094d13058d684548afb8c4990af481fdcfaab83 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 15 Sep 2015 12:37:18 +0530 Subject: [PATCH] Mifosx 1523 - Loan Rescheduling modification --- .../api/RescheduleLoansApiResource.java | 8 +- ...cheduleRequestReadPlatformServiceImpl.java | 273 +++++++++--------- 2 files changed, 144 insertions(+), 137 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java index dfc824dd0..efda8e570 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java @@ -72,16 +72,14 @@ public class RescheduleLoansApiResource { @Path("template") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String retrieveTemplate(@Context final UriInfo uriInfo, @QueryParam("commandParam") final String commandParam) { + public String retrieveTemplate(@Context final UriInfo uriInfo) { this.platformSecurityContext.authenticatedUser().validateHasReadPermission(RescheduleLoansApiConstants.ENTITY_NAME); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); LoanRescheduleRequestData loanRescheduleReasons = null; - if (compareIgnoreCase(commandParam, "rescheduleReason")) { - loanRescheduleReasons = this.loanRescheduleRequestReadPlatformService - .retrieveAllRescheduleReasons(RescheduleLoansApiConstants.LOAN_RESCHEDULE_REASON); - } + loanRescheduleReasons = this.loanRescheduleRequestReadPlatformService + .retrieveAllRescheduleReasons(RescheduleLoansApiConstants.LOAN_RESCHEDULE_REASON); return this.loanRescheduleRequestToApiJsonSerializer.serialize(settings, loanRescheduleReasons); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestReadPlatformServiceImpl.java index 93e56cbac..aa6371eae 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestReadPlatformServiceImpl.java @@ -32,85 +32,84 @@ import org.springframework.stereotype.Service; @Service public class LoanRescheduleRequestReadPlatformServiceImpl implements LoanRescheduleRequestReadPlatformService { - - private final JdbcTemplate jdbcTemplate; - private final LoanRepository loanRepository; - private final LoanRescheduleRequestRowMapper loanRescheduleRequestRowMapper = new LoanRescheduleRequestRowMapper(); - private final CodeValueReadPlatformService codeValueReadPlatformService; - - @Autowired - public LoanRescheduleRequestReadPlatformServiceImpl(final RoutingDataSource dataSource, - LoanRepository loanRepository, final CodeValueReadPlatformService codeValueReadPlatformService) { - this.jdbcTemplate = new JdbcTemplate(dataSource); - this.loanRepository = loanRepository; - this.codeValueReadPlatformService = codeValueReadPlatformService ; - } - - private static final class LoanRescheduleRequestRowMapper implements RowMapper { - - private final String schema; - - public LoanRescheduleRequestRowMapper() { - final StringBuilder sqlBuilder = new StringBuilder(200); - - sqlBuilder.append("lr.id as id, lr.loan_id as loanId, lr.status_enum as statusEnum, "); - sqlBuilder.append("mc.display_name as clientName, "); - sqlBuilder.append("mc.id as clientId, "); - sqlBuilder.append("ml.account_no as loanAccountNumber, "); - sqlBuilder.append("lr.reschedule_from_installment as rescheduleFromInstallment, "); - sqlBuilder.append("lr.grace_on_principal as graceOnPrincipal, "); - sqlBuilder.append("lr.grace_on_interest as graceOnInterest, "); - sqlBuilder.append("lr.reschedule_from_date as rescheduleFromDate, "); - sqlBuilder.append("lr.adjusted_due_date as adjustedDueDate, "); - sqlBuilder.append("lr.extra_terms as extraTerms, "); - sqlBuilder.append("lr.recalculate_interest as recalculateInterest, "); - sqlBuilder.append("lr.interest_rate as interestRate, "); - sqlBuilder.append("lr.reschedule_reason_cv_id as rescheduleReasonCvId, "); - sqlBuilder.append("cv.code_value as rescheduleReasonCvValue, "); - sqlBuilder.append("lr.reschedule_reason_comment as rescheduleReasonComment, "); - - sqlBuilder.append("lr.submitted_on_date as submittedOnDate, "); - sqlBuilder.append("sbu.username as submittedByUsername, "); - sqlBuilder.append("sbu.firstname as submittedByFirstname, "); - sqlBuilder.append("sbu.lastname as submittedByLastname, "); - - sqlBuilder.append("lr.approved_on_date as approvedOnDate, "); - sqlBuilder.append("abu.username as approvedByUsername, "); - sqlBuilder.append("abu.firstname as approvedByFirstname, "); - sqlBuilder.append("abu.lastname as approvedByLastname, "); - - sqlBuilder.append("lr.rejected_on_date as rejectedOnDate, "); - sqlBuilder.append("rbu.username as rejectedByUsername, "); - sqlBuilder.append("rbu.firstname as rejectedByFirstname, "); - sqlBuilder.append("rbu.lastname as rejectedByLastname "); - - sqlBuilder.append("from " + loanRescheduleRequestTableName() + " lr "); - sqlBuilder.append("left join m_code_value cv on cv.id = lr.reschedule_reason_cv_id "); - sqlBuilder.append("left join m_appuser sbu on sbu.id = lr.submitted_by_user_id "); - sqlBuilder.append("left join m_appuser abu on abu.id = lr.approved_by_user_id "); - sqlBuilder.append("left join m_appuser rbu on rbu.id = lr.rejected_by_user_id "); - sqlBuilder.append("left join m_loan ml on ml.id = lr.loan_id "); - sqlBuilder.append("left join m_client mc on mc.id = ml.client_id "); - - this.schema = sqlBuilder.toString(); - } - - public String schema() { + + private final JdbcTemplate jdbcTemplate; + private final LoanRepository loanRepository; + private final LoanRescheduleRequestRowMapper loanRescheduleRequestRowMapper = new LoanRescheduleRequestRowMapper(); + private final CodeValueReadPlatformService codeValueReadPlatformService; + + @Autowired + public LoanRescheduleRequestReadPlatformServiceImpl(final RoutingDataSource dataSource, LoanRepository loanRepository, + final CodeValueReadPlatformService codeValueReadPlatformService) { + this.jdbcTemplate = new JdbcTemplate(dataSource); + this.loanRepository = loanRepository; + this.codeValueReadPlatformService = codeValueReadPlatformService; + } + + private static final class LoanRescheduleRequestRowMapper implements RowMapper { + + private final String schema; + + public LoanRescheduleRequestRowMapper() { + final StringBuilder sqlBuilder = new StringBuilder(200); + + sqlBuilder.append("lr.id as id, lr.loan_id as loanId, lr.status_enum as statusEnum, "); + sqlBuilder.append("mc.display_name as clientName, "); + sqlBuilder.append("mc.id as clientId, "); + sqlBuilder.append("ml.account_no as loanAccountNumber, "); + sqlBuilder.append("lr.reschedule_from_installment as rescheduleFromInstallment, "); + sqlBuilder.append("lr.grace_on_principal as graceOnPrincipal, "); + sqlBuilder.append("lr.grace_on_interest as graceOnInterest, "); + sqlBuilder.append("lr.reschedule_from_date as rescheduleFromDate, "); + sqlBuilder.append("lr.adjusted_due_date as adjustedDueDate, "); + sqlBuilder.append("lr.extra_terms as extraTerms, "); + sqlBuilder.append("lr.recalculate_interest as recalculateInterest, "); + sqlBuilder.append("lr.interest_rate as interestRate, "); + sqlBuilder.append("lr.reschedule_reason_cv_id as rescheduleReasonCvId, "); + sqlBuilder.append("cv.code_value as rescheduleReasonCvValue, "); + sqlBuilder.append("lr.reschedule_reason_comment as rescheduleReasonComment, "); + + sqlBuilder.append("lr.submitted_on_date as submittedOnDate, "); + sqlBuilder.append("sbu.username as submittedByUsername, "); + sqlBuilder.append("sbu.firstname as submittedByFirstname, "); + sqlBuilder.append("sbu.lastname as submittedByLastname, "); + + sqlBuilder.append("lr.approved_on_date as approvedOnDate, "); + sqlBuilder.append("abu.username as approvedByUsername, "); + sqlBuilder.append("abu.firstname as approvedByFirstname, "); + sqlBuilder.append("abu.lastname as approvedByLastname, "); + + sqlBuilder.append("lr.rejected_on_date as rejectedOnDate, "); + sqlBuilder.append("rbu.username as rejectedByUsername, "); + sqlBuilder.append("rbu.firstname as rejectedByFirstname, "); + sqlBuilder.append("rbu.lastname as rejectedByLastname "); + + sqlBuilder.append("from " + loanRescheduleRequestTableName() + " lr "); + sqlBuilder.append("left join m_code_value cv on cv.id = lr.reschedule_reason_cv_id "); + sqlBuilder.append("left join m_appuser sbu on sbu.id = lr.submitted_by_user_id "); + sqlBuilder.append("left join m_appuser abu on abu.id = lr.approved_by_user_id "); + sqlBuilder.append("left join m_appuser rbu on rbu.id = lr.rejected_by_user_id "); + sqlBuilder.append("left join m_loan ml on ml.id = lr.loan_id "); + sqlBuilder.append("left join m_client mc on mc.id = ml.client_id "); + + this.schema = sqlBuilder.toString(); + } + + public String schema() { return this.schema; } - - public String loanRescheduleRequestTableName() { - return "m_loan_reschedule_request"; - } - - @Override - @SuppressWarnings("unused") - public LoanRescheduleRequestData mapRow(final ResultSet rs, final int rowNum) throws SQLException { - final Long id = rs.getLong("id"); + + public String loanRescheduleRequestTableName() { + return "m_loan_reschedule_request"; + } + + @Override + @SuppressWarnings("unused") + public LoanRescheduleRequestData mapRow(final ResultSet rs, final int rowNum) throws SQLException { + final Long id = rs.getLong("id"); final Long loanId = rs.getLong("loanId"); final Integer statusEnumId = JdbcSupport.getInteger(rs, "statusEnum"); - final LoanRescheduleRequestStatusEnumData statusEnum = LoanRescheduleRequestEnumerations - .status(statusEnumId); + final LoanRescheduleRequestStatusEnumData statusEnum = LoanRescheduleRequestEnumerations.status(statusEnumId); final String clientName = rs.getString("clientName"); final String loanAccountNumber = rs.getString("loanAccountNumber"); final Long clientId = rs.getLong("clientId"); @@ -123,86 +122,96 @@ public class LoanRescheduleRequestReadPlatformServiceImpl implements LoanResched final BigDecimal interestRate = rs.getBigDecimal("interestRate"); final Long rescheduleReasonCvId = JdbcSupport.getLong(rs, "rescheduleReasonCvId"); final String rescheduleReasonCvValue = rs.getString("rescheduleReasonCvValue"); - final CodeValueData rescheduleReasonCodeValue = CodeValueData - .instance(rescheduleReasonCvId, rescheduleReasonCvValue); + final CodeValueData rescheduleReasonCodeValue = CodeValueData.instance(rescheduleReasonCvId, rescheduleReasonCvValue); final String rescheduleReasonComment = rs.getString("rescheduleReasonComment"); final Boolean recalculateInterest = rs.getBoolean("recalculateInterest"); - + final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate"); final String submittedByUsername = rs.getString("submittedByUsername"); final String submittedByFirstname = rs.getString("submittedByFirstname"); final String submittedByLastname = rs.getString("submittedByLastname"); - + final LocalDate approvedOnDate = JdbcSupport.getLocalDate(rs, "approvedOnDate"); final String approvedByUsername = rs.getString("approvedByUsername"); final String approvedByFirstname = rs.getString("approvedByFirstname"); final String approvedByLastname = rs.getString("approvedByLastname"); - + final LocalDate rejectedOnDate = JdbcSupport.getLocalDate(rs, "rejectedOnDate"); final String rejectedByUsername = rs.getString("rejectedByUsername"); final String rejectedByFirstname = rs.getString("rejectedByFirstname"); final String rejectedByLastname = rs.getString("rejectedByLastname"); - final Collection rescheduleReasons = null ; - final LoanRescheduleRequestTimelineData timeline = new LoanRescheduleRequestTimelineData(submittedOnDate, - submittedByUsername, submittedByFirstname, submittedByLastname, approvedOnDate, approvedByUsername, - approvedByFirstname, approvedByLastname, rejectedOnDate, rejectedByUsername, rejectedByFirstname, - rejectedByLastname); + final Collection rescheduleReasons = null; + final LoanRescheduleRequestTimelineData timeline = new LoanRescheduleRequestTimelineData(submittedOnDate, submittedByUsername, + submittedByFirstname, submittedByLastname, approvedOnDate, approvedByUsername, approvedByFirstname, approvedByLastname, + rejectedOnDate, rejectedByUsername, rejectedByFirstname, rejectedByLastname); - return LoanRescheduleRequestData.instance(id, loanId, statusEnum, rescheduleFromInstallment, graceOnPrincipal, - graceOnInterest, rescheduleFromDate, adjustedDueDate, extraTerms, interestRate, rescheduleReasonCodeValue, - rescheduleReasonComment, timeline, clientName, loanAccountNumber, clientId, recalculateInterest, rescheduleReasons); - } - - } - - @Override - public List readLoanRescheduleRequests(Long loanId) { - final Loan loan = this.loanRepository.findOne(loanId); - - if(loan == null) { - throw new LoanNotFoundException(loanId); + return LoanRescheduleRequestData.instance(id, loanId, statusEnum, rescheduleFromInstallment, graceOnPrincipal, graceOnInterest, + rescheduleFromDate, adjustedDueDate, extraTerms, interestRate, rescheduleReasonCodeValue, rescheduleReasonComment, + timeline, clientName, loanAccountNumber, clientId, recalculateInterest, rescheduleReasons); } - - final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.loan_id = ?"; - - return this.jdbcTemplate.query(sql, this.loanRescheduleRequestRowMapper, new Object[] { loanId }); - } - @Override - public LoanRescheduleRequestData readLoanRescheduleRequest(Long requestId) { - - try { - final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.id = ?"; - - return this.jdbcTemplate.queryForObject(sql, this.loanRescheduleRequestRowMapper, new Object[] { requestId }); - } - - catch(final EmptyResultDataAccessException e) { - return null; - } - } + } - @Override - public List readLoanRescheduleRequests(Long loanId, Integer statusEnum) { - final Loan loan = this.loanRepository.findOne(loanId); - - if(loan == null) { - throw new LoanNotFoundException(loanId); + @Override + public List readLoanRescheduleRequests(Long loanId) { + final Loan loan = this.loanRepository.findOne(loanId); + + if (loan == null) { throw new LoanNotFoundException(loanId); } + + final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.loan_id = ?"; + + return this.jdbcTemplate.query(sql, this.loanRescheduleRequestRowMapper, new Object[] { loanId }); + } + + @Override + public LoanRescheduleRequestData readLoanRescheduleRequest(Long requestId) { + + try { + final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.id = ?"; + + return this.jdbcTemplate.queryForObject(sql, this.loanRescheduleRequestRowMapper, new Object[] { requestId }); } - - final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.loan_id = ?" - + " and lr.status_enum = ?"; - - return this.jdbcTemplate.query(sql, this.loanRescheduleRequestRowMapper, new Object[] { loanId, statusEnum }); - } + + catch (final EmptyResultDataAccessException e) { + return null; + } + } + + @Override + public List readLoanRescheduleRequests(Long loanId, Integer statusEnum) { + final Loan loan = this.loanRepository.findOne(loanId); + + if (loan == null) { throw new LoanNotFoundException(loanId); } + + final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.loan_id = ?" + " and lr.status_enum = ?"; + + return this.jdbcTemplate.query(sql, this.loanRescheduleRequestRowMapper, new Object[] { loanId, statusEnum }); + } @Override public LoanRescheduleRequestData retrieveAllRescheduleReasons(String loanRescheduleReason) { final List rescheduleReasons = new ArrayList<>( this.codeValueReadPlatformService.retrieveCodeValuesByCode(loanRescheduleReason)); - - return LoanRescheduleRequestData.instance(null, null, null, null, null, null, - null, null, null, null, null, null, - null, null, null, null, null,rescheduleReasons); + final Long id = null; + final Long loanId = null; + final LoanRescheduleRequestStatusEnumData statusEnum = null; + final Integer rescheduleFromInstallment = null; + final Integer graceOnPrincipal = null; + final Integer graceOnInterest = null; + final LocalDate rescheduleFromDate = null; + final LocalDate adjustedDueDate = null; + final Integer extraTerms = null; + final BigDecimal interestRate = null; + final CodeValueData rescheduleReasonCodeValue = null; + final String rescheduleReasonComment = null; + final LoanRescheduleRequestTimelineData timeline = null; + final String clientName = null; + final String loanAccountNumber = null; + final Long clientId = null; + final Boolean recalculateInterest = null; + + return LoanRescheduleRequestData.instance(id, loanId, statusEnum, rescheduleFromInstallment, graceOnPrincipal, graceOnInterest, + rescheduleFromDate, adjustedDueDate, extraTerms, interestRate, rescheduleReasonCodeValue, rescheduleReasonComment, + timeline, clientName, loanAccountNumber, clientId, recalculateInterest, rescheduleReasons); } }