/** * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mifosplatform.portfolio.self.account.service; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import org.mifosplatform.infrastructure.core.service.RoutingDataSource; import org.mifosplatform.portfolio.self.account.data.SelfAccountTemplateData; import org.mifosplatform.useradministration.domain.AppUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; @Service public class SelfAccountTransferReadServiceImpl implements SelfAccountTransferReadService { private final JdbcTemplate jdbcTemplate; @Autowired public SelfAccountTransferReadServiceImpl(final RoutingDataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } @Override public Collection<SelfAccountTemplateData> retrieveSelfAccountTemplateData( AppUser user) { SelfAccountTemplateMapper mapper = new SelfAccountTemplateMapper(); StringBuffer sql = new StringBuffer() .append("select s.id as accountId, ") .append("s.account_no as accountNo, ") .append("2 as accountType, ") .append("c.id as clientId, ") .append("c.display_name as clientName, ") .append("o.id as officeId, ") .append("o.name as officeName ") .append("from m_appuser as u ") .append("inner join m_selfservice_user_client_mapping as map on u.id = map.appuser_id ") .append("inner join m_client as c on map.client_id = c.id ") .append("inner join m_office as o on c.office_id = o.id ") .append("inner join m_savings_account as s on s.client_id = c.id ") .append("where u.id = ? ") .append("and s.status_enum = 300 ") .append("union ") .append("select l.id as accountId, ") .append("l.account_no as accountNo, ") .append("1 as accountType, ") .append("c.id as clientId, ") .append("c.display_name as clientName, ") .append("o.id as officeId, ") .append("o.name as officeName ") .append("from m_appuser as u ") .append("inner join m_selfservice_user_client_mapping as map on u.id = map.appuser_id ") .append("inner join m_client as c on map.client_id = c.id ") .append("inner join m_office as o on c.office_id = o.id ") .append("inner join m_loan as l on l.client_id = c.id ") .append("where u.id = ? ") .append("and l.loan_status_id = 300 "); return this.jdbcTemplate.query(sql.toString(), mapper, new Object[] { user.getId(), user.getId() }); } private final class SelfAccountTemplateMapper implements RowMapper<SelfAccountTemplateData> { @Override public SelfAccountTemplateData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { final Long accountId = rs.getLong("accountId"); final String accountNo = rs.getString("accountNo"); final Integer accountType = rs.getInt("accountType"); final Long clientId = rs.getLong("clientId"); final String clientName = rs.getString("clientName"); final Long officeId = rs.getLong("officeId"); final String officeName = rs.getString("officeName"); return new SelfAccountTemplateData(accountId, accountNo, accountType, clientId, clientName, officeId, officeName); } } }