Mifosx 1523 - Loan Rescheduling modification

This commit is contained in:
unknown
2015-09-15 12:37:18 +05:30
parent 928dbccfc4
commit f094d13058
2 changed files with 144 additions and 137 deletions
@@ -72,16 +72,14 @@ public class RescheduleLoansApiResource {
@Path("template") @Path("template")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ 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); this.platformSecurityContext.authenticatedUser().validateHasReadPermission(RescheduleLoansApiConstants.ENTITY_NAME);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
LoanRescheduleRequestData loanRescheduleReasons = null; LoanRescheduleRequestData loanRescheduleReasons = null;
if (compareIgnoreCase(commandParam, "rescheduleReason")) { loanRescheduleReasons = this.loanRescheduleRequestReadPlatformService
loanRescheduleReasons = this.loanRescheduleRequestReadPlatformService .retrieveAllRescheduleReasons(RescheduleLoansApiConstants.LOAN_RESCHEDULE_REASON);
.retrieveAllRescheduleReasons(RescheduleLoansApiConstants.LOAN_RESCHEDULE_REASON);
}
return this.loanRescheduleRequestToApiJsonSerializer.serialize(settings, loanRescheduleReasons); return this.loanRescheduleRequestToApiJsonSerializer.serialize(settings, loanRescheduleReasons);
} }
@@ -33,84 +33,83 @@ import org.springframework.stereotype.Service;
@Service @Service
public class LoanRescheduleRequestReadPlatformServiceImpl implements LoanRescheduleRequestReadPlatformService { public class LoanRescheduleRequestReadPlatformServiceImpl implements LoanRescheduleRequestReadPlatformService {
private final JdbcTemplate jdbcTemplate; private final JdbcTemplate jdbcTemplate;
private final LoanRepository loanRepository; private final LoanRepository loanRepository;
private final LoanRescheduleRequestRowMapper loanRescheduleRequestRowMapper = new LoanRescheduleRequestRowMapper(); private final LoanRescheduleRequestRowMapper loanRescheduleRequestRowMapper = new LoanRescheduleRequestRowMapper();
private final CodeValueReadPlatformService codeValueReadPlatformService; private final CodeValueReadPlatformService codeValueReadPlatformService;
@Autowired @Autowired
public LoanRescheduleRequestReadPlatformServiceImpl(final RoutingDataSource dataSource, public LoanRescheduleRequestReadPlatformServiceImpl(final RoutingDataSource dataSource, LoanRepository loanRepository,
LoanRepository loanRepository, final CodeValueReadPlatformService codeValueReadPlatformService) { final CodeValueReadPlatformService codeValueReadPlatformService) {
this.jdbcTemplate = new JdbcTemplate(dataSource); this.jdbcTemplate = new JdbcTemplate(dataSource);
this.loanRepository = loanRepository; this.loanRepository = loanRepository;
this.codeValueReadPlatformService = codeValueReadPlatformService ; this.codeValueReadPlatformService = codeValueReadPlatformService;
} }
private static final class LoanRescheduleRequestRowMapper implements RowMapper<LoanRescheduleRequestData> { private static final class LoanRescheduleRequestRowMapper implements RowMapper<LoanRescheduleRequestData> {
private final String schema; private final String schema;
public LoanRescheduleRequestRowMapper() { public LoanRescheduleRequestRowMapper() {
final StringBuilder sqlBuilder = new StringBuilder(200); final StringBuilder sqlBuilder = new StringBuilder(200);
sqlBuilder.append("lr.id as id, lr.loan_id as loanId, lr.status_enum as statusEnum, "); 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.display_name as clientName, ");
sqlBuilder.append("mc.id as clientId, "); sqlBuilder.append("mc.id as clientId, ");
sqlBuilder.append("ml.account_no as loanAccountNumber, "); sqlBuilder.append("ml.account_no as loanAccountNumber, ");
sqlBuilder.append("lr.reschedule_from_installment as rescheduleFromInstallment, "); sqlBuilder.append("lr.reschedule_from_installment as rescheduleFromInstallment, ");
sqlBuilder.append("lr.grace_on_principal as graceOnPrincipal, "); sqlBuilder.append("lr.grace_on_principal as graceOnPrincipal, ");
sqlBuilder.append("lr.grace_on_interest as graceOnInterest, "); sqlBuilder.append("lr.grace_on_interest as graceOnInterest, ");
sqlBuilder.append("lr.reschedule_from_date as rescheduleFromDate, "); sqlBuilder.append("lr.reschedule_from_date as rescheduleFromDate, ");
sqlBuilder.append("lr.adjusted_due_date as adjustedDueDate, "); sqlBuilder.append("lr.adjusted_due_date as adjustedDueDate, ");
sqlBuilder.append("lr.extra_terms as extraTerms, "); sqlBuilder.append("lr.extra_terms as extraTerms, ");
sqlBuilder.append("lr.recalculate_interest as recalculateInterest, "); sqlBuilder.append("lr.recalculate_interest as recalculateInterest, ");
sqlBuilder.append("lr.interest_rate as interestRate, "); sqlBuilder.append("lr.interest_rate as interestRate, ");
sqlBuilder.append("lr.reschedule_reason_cv_id as rescheduleReasonCvId, "); sqlBuilder.append("lr.reschedule_reason_cv_id as rescheduleReasonCvId, ");
sqlBuilder.append("cv.code_value as rescheduleReasonCvValue, "); sqlBuilder.append("cv.code_value as rescheduleReasonCvValue, ");
sqlBuilder.append("lr.reschedule_reason_comment as rescheduleReasonComment, "); sqlBuilder.append("lr.reschedule_reason_comment as rescheduleReasonComment, ");
sqlBuilder.append("lr.submitted_on_date as submittedOnDate, "); sqlBuilder.append("lr.submitted_on_date as submittedOnDate, ");
sqlBuilder.append("sbu.username as submittedByUsername, "); sqlBuilder.append("sbu.username as submittedByUsername, ");
sqlBuilder.append("sbu.firstname as submittedByFirstname, "); sqlBuilder.append("sbu.firstname as submittedByFirstname, ");
sqlBuilder.append("sbu.lastname as submittedByLastname, "); sqlBuilder.append("sbu.lastname as submittedByLastname, ");
sqlBuilder.append("lr.approved_on_date as approvedOnDate, "); sqlBuilder.append("lr.approved_on_date as approvedOnDate, ");
sqlBuilder.append("abu.username as approvedByUsername, "); sqlBuilder.append("abu.username as approvedByUsername, ");
sqlBuilder.append("abu.firstname as approvedByFirstname, "); sqlBuilder.append("abu.firstname as approvedByFirstname, ");
sqlBuilder.append("abu.lastname as approvedByLastname, "); sqlBuilder.append("abu.lastname as approvedByLastname, ");
sqlBuilder.append("lr.rejected_on_date as rejectedOnDate, "); sqlBuilder.append("lr.rejected_on_date as rejectedOnDate, ");
sqlBuilder.append("rbu.username as rejectedByUsername, "); sqlBuilder.append("rbu.username as rejectedByUsername, ");
sqlBuilder.append("rbu.firstname as rejectedByFirstname, "); sqlBuilder.append("rbu.firstname as rejectedByFirstname, ");
sqlBuilder.append("rbu.lastname as rejectedByLastname "); sqlBuilder.append("rbu.lastname as rejectedByLastname ");
sqlBuilder.append("from " + loanRescheduleRequestTableName() + " lr "); 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_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 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 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_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_loan ml on ml.id = lr.loan_id ");
sqlBuilder.append("left join m_client mc on mc.id = ml.client_id "); sqlBuilder.append("left join m_client mc on mc.id = ml.client_id ");
this.schema = sqlBuilder.toString(); this.schema = sqlBuilder.toString();
} }
public String schema() { public String schema() {
return this.schema; return this.schema;
} }
public String loanRescheduleRequestTableName() { public String loanRescheduleRequestTableName() {
return "m_loan_reschedule_request"; return "m_loan_reschedule_request";
} }
@Override @Override
@SuppressWarnings("unused") @SuppressWarnings("unused")
public LoanRescheduleRequestData mapRow(final ResultSet rs, final int rowNum) throws SQLException { public LoanRescheduleRequestData mapRow(final ResultSet rs, final int rowNum) throws SQLException {
final Long id = rs.getLong("id"); final Long id = rs.getLong("id");
final Long loanId = rs.getLong("loanId"); final Long loanId = rs.getLong("loanId");
final Integer statusEnumId = JdbcSupport.getInteger(rs, "statusEnum"); final Integer statusEnumId = JdbcSupport.getInteger(rs, "statusEnum");
final LoanRescheduleRequestStatusEnumData statusEnum = LoanRescheduleRequestEnumerations final LoanRescheduleRequestStatusEnumData statusEnum = LoanRescheduleRequestEnumerations.status(statusEnumId);
.status(statusEnumId);
final String clientName = rs.getString("clientName"); final String clientName = rs.getString("clientName");
final String loanAccountNumber = rs.getString("loanAccountNumber"); final String loanAccountNumber = rs.getString("loanAccountNumber");
final Long clientId = rs.getLong("clientId"); final Long clientId = rs.getLong("clientId");
@@ -123,8 +122,7 @@ public class LoanRescheduleRequestReadPlatformServiceImpl implements LoanResched
final BigDecimal interestRate = rs.getBigDecimal("interestRate"); final BigDecimal interestRate = rs.getBigDecimal("interestRate");
final Long rescheduleReasonCvId = JdbcSupport.getLong(rs, "rescheduleReasonCvId"); final Long rescheduleReasonCvId = JdbcSupport.getLong(rs, "rescheduleReasonCvId");
final String rescheduleReasonCvValue = rs.getString("rescheduleReasonCvValue"); final String rescheduleReasonCvValue = rs.getString("rescheduleReasonCvValue");
final CodeValueData rescheduleReasonCodeValue = CodeValueData final CodeValueData rescheduleReasonCodeValue = CodeValueData.instance(rescheduleReasonCvId, rescheduleReasonCvValue);
.instance(rescheduleReasonCvId, rescheduleReasonCvValue);
final String rescheduleReasonComment = rs.getString("rescheduleReasonComment"); final String rescheduleReasonComment = rs.getString("rescheduleReasonComment");
final Boolean recalculateInterest = rs.getBoolean("recalculateInterest"); final Boolean recalculateInterest = rs.getBoolean("recalculateInterest");
@@ -142,67 +140,78 @@ public class LoanRescheduleRequestReadPlatformServiceImpl implements LoanResched
final String rejectedByUsername = rs.getString("rejectedByUsername"); final String rejectedByUsername = rs.getString("rejectedByUsername");
final String rejectedByFirstname = rs.getString("rejectedByFirstname"); final String rejectedByFirstname = rs.getString("rejectedByFirstname");
final String rejectedByLastname = rs.getString("rejectedByLastname"); final String rejectedByLastname = rs.getString("rejectedByLastname");
final Collection<CodeValueData> rescheduleReasons = null ; final Collection<CodeValueData> rescheduleReasons = null;
final LoanRescheduleRequestTimelineData timeline = new LoanRescheduleRequestTimelineData(submittedOnDate, final LoanRescheduleRequestTimelineData timeline = new LoanRescheduleRequestTimelineData(submittedOnDate, submittedByUsername,
submittedByUsername, submittedByFirstname, submittedByLastname, approvedOnDate, approvedByUsername, submittedByFirstname, submittedByLastname, approvedOnDate, approvedByUsername, approvedByFirstname, approvedByLastname,
approvedByFirstname, approvedByLastname, rejectedOnDate, rejectedByUsername, rejectedByFirstname, rejectedOnDate, rejectedByUsername, rejectedByFirstname, rejectedByLastname);
rejectedByLastname);
return LoanRescheduleRequestData.instance(id, loanId, statusEnum, rescheduleFromInstallment, graceOnPrincipal, return LoanRescheduleRequestData.instance(id, loanId, statusEnum, rescheduleFromInstallment, graceOnPrincipal, graceOnInterest,
graceOnInterest, rescheduleFromDate, adjustedDueDate, extraTerms, interestRate, rescheduleReasonCodeValue, rescheduleFromDate, adjustedDueDate, extraTerms, interestRate, rescheduleReasonCodeValue, rescheduleReasonComment,
rescheduleReasonComment, timeline, clientName, loanAccountNumber, clientId, recalculateInterest, rescheduleReasons); timeline, clientName, loanAccountNumber, clientId, recalculateInterest, rescheduleReasons);
}
}
@Override
public List<LoanRescheduleRequestData> 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 List<LoanRescheduleRequestData> readLoanRescheduleRequests(Long loanId) {
final Loan loan = this.loanRepository.findOne(loanId);
@Override if (loan == null) { throw new LoanNotFoundException(loanId); }
public LoanRescheduleRequestData readLoanRescheduleRequest(Long requestId) {
try { final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.loan_id = ?";
final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.id = ?";
return this.jdbcTemplate.queryForObject(sql, this.loanRescheduleRequestRowMapper, new Object[] { requestId }); return this.jdbcTemplate.query(sql, this.loanRescheduleRequestRowMapper, new Object[] { loanId });
} }
catch(final EmptyResultDataAccessException e) { @Override
return null; public LoanRescheduleRequestData readLoanRescheduleRequest(Long requestId) {
}
}
@Override try {
public List<LoanRescheduleRequestData> readLoanRescheduleRequests(Long loanId, Integer statusEnum) { final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.id = ?";
final Loan loan = this.loanRepository.findOne(loanId);
if(loan == null) { return this.jdbcTemplate.queryForObject(sql, this.loanRescheduleRequestRowMapper, new Object[] { requestId });
throw new LoanNotFoundException(loanId);
} }
final String sql = "select " + this.loanRescheduleRequestRowMapper.schema() + " where lr.loan_id = ?" catch (final EmptyResultDataAccessException e) {
+ " and lr.status_enum = ?"; return null;
}
}
return this.jdbcTemplate.query(sql, this.loanRescheduleRequestRowMapper, new Object[] { loanId, statusEnum }); @Override
} public List<LoanRescheduleRequestData> 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 @Override
public LoanRescheduleRequestData retrieveAllRescheduleReasons(String loanRescheduleReason) { public LoanRescheduleRequestData retrieveAllRescheduleReasons(String loanRescheduleReason) {
final List<CodeValueData> rescheduleReasons = new ArrayList<>( final List<CodeValueData> rescheduleReasons = new ArrayList<>(
this.codeValueReadPlatformService.retrieveCodeValuesByCode(loanRescheduleReason)); this.codeValueReadPlatformService.retrieveCodeValuesByCode(loanRescheduleReason));
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(null, null, null, null, null, null, return LoanRescheduleRequestData.instance(id, loanId, statusEnum, rescheduleFromInstallment, graceOnPrincipal, graceOnInterest,
null, null, null, null, null, null, rescheduleFromDate, adjustedDueDate, extraTerms, interestRate, rescheduleReasonCodeValue, rescheduleReasonComment,
null, null, null, null, null,rescheduleReasons); timeline, clientName, loanAccountNumber, clientId, recalculateInterest, rescheduleReasons);
} }
} }