Repository: incubator-fineract Updated Branches: refs/heads/develop 025ff9c70 -> 8d3f7af16
[MIFOSX-2784] Including all transactions in Teller Cashier transaction list Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/8d3f7af1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/8d3f7af1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/8d3f7af1 Branch: refs/heads/develop Commit: 8d3f7af16f7dbd1e8607e4fd78f400054e8f0dc4 Parents: 025ff9c Author: Adi Narayana Raju <adi.r...@confluxtechnologies.com> Authored: Wed Sep 21 17:07:55 2016 +0530 Committer: Adi Narayana Raju <adi.r...@confluxtechnologies.com> Committed: Wed Sep 21 17:07:55 2016 +0530 ---------------------------------------------------------------------- .../teller/api/TellerApiResource.java | 21 ++- .../CashierTransactionsWithSummaryData.java | 11 +- .../TellerManagementReadPlatformService.java | 8 +- ...TellerManagementReadPlatformServiceImpl.java | 159 ++++++++++++++++--- 4 files changed, 162 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/8d3f7af1/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java index 0ea3d8b..a69dc1f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java @@ -37,6 +37,8 @@ import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer; +import org.apache.fineract.infrastructure.core.service.Page; +import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.organisation.teller.data.CashierData; import org.apache.fineract.organisation.teller.data.CashierTransactionData; @@ -248,15 +250,16 @@ public class TellerApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) public String getTransactionsForCashier(@PathParam("tellerId") final Long tellerId, @PathParam("cashierId") final Long cashierId, - @QueryParam("currencyCode") final String currencyCode) { + @QueryParam("currencyCode") final String currencyCode, @QueryParam("offset") final Integer offset, @QueryParam("limit") final Integer limit, + @QueryParam("orderBy") final String orderBy, @QueryParam("sortOrder") final String sortOrder) { final TellerData teller = this.readPlatformService.findTeller(tellerId); final CashierData cashier = this.readPlatformService.findCashier(cashierId); final Date fromDate = null; final Date toDate = null; - - final Collection<CashierTransactionData> cashierTxns = this.readPlatformService.retrieveCashierTransactions(cashierId, false, - fromDate, toDate, currencyCode); + final SearchParameters searchParameters = SearchParameters.forPagination(offset, limit, orderBy, sortOrder); + final Page<CashierTransactionData> cashierTxns = this.readPlatformService.retrieveCashierTransactions(cashierId, false, + fromDate, toDate, currencyCode, searchParameters); return this.jsonSerializer.serialize(cashierTxns); } @@ -266,15 +269,19 @@ public class TellerApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) public String getTransactionsWtihSummaryForCashier(@PathParam("tellerId") final Long tellerId, - @PathParam("cashierId") final Long cashierId, @QueryParam("currencyCode") final String currencyCode) { + @PathParam("cashierId") final Long cashierId, @QueryParam("currencyCode") final String currencyCode, + @QueryParam("offset") final Integer offset, @QueryParam("limit") final Integer limit, + @QueryParam("orderBy") final String orderBy, @QueryParam("sortOrder") final String sortOrder) { final TellerData teller = this.readPlatformService.findTeller(tellerId); final CashierData cashier = this.readPlatformService.findCashier(cashierId); final Date fromDate = null; final Date toDate = null; + + final SearchParameters searchParameters = SearchParameters.forPagination(offset, limit, orderBy, sortOrder); - final CashierTransactionsWithSummaryData cashierTxnWithSummary = this.readPlatformService - .retrieveCashierTransactionsWithSummary(cashierId, false, fromDate, toDate, currencyCode); + final CashierTransactionsWithSummaryData cashierTxnWithSummary = this.readPlatformService.retrieveCashierTransactionsWithSummary( + cashierId, false, fromDate, toDate, currencyCode, searchParameters); return this.jsonSerializer.serialize(cashierTxnWithSummary); } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/8d3f7af1/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionsWithSummaryData.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionsWithSummaryData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionsWithSummaryData.java index fcdc23d..10baa83 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionsWithSummaryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionsWithSummaryData.java @@ -20,7 +20,8 @@ package org.apache.fineract.organisation.teller.data; import java.io.Serializable; import java.math.BigDecimal; -import java.util.Collection; + +import org.apache.fineract.infrastructure.core.service.Page; public final class CashierTransactionsWithSummaryData implements Serializable { @@ -35,10 +36,10 @@ public final class CashierTransactionsWithSummaryData implements Serializable { private final long cashierId; private final String cashierName; - private final Collection<CashierTransactionData> cashierTransactions; + private final Page<CashierTransactionData> cashierTransactions; private CashierTransactionsWithSummaryData( - final Collection<CashierTransactionData> cashierTransactions, + final Page<CashierTransactionData> cashierTransactions, final BigDecimal sumCashAllocation, final BigDecimal sumInwardCash, final BigDecimal sumOutwardCash, @@ -64,7 +65,7 @@ public final class CashierTransactionsWithSummaryData implements Serializable { } public static CashierTransactionsWithSummaryData instance( - final Collection<CashierTransactionData> cashierTransactions, + final Page<CashierTransactionData> cashierTransactions, final BigDecimal sumCashAllocation, final BigDecimal sumInwardCash, final BigDecimal sumOutwardCash, @@ -128,7 +129,7 @@ public final class CashierTransactionsWithSummaryData implements Serializable { public String getCashierName() { return cashierName; } - public Collection<CashierTransactionData> getCashierTransactions() { + public Page<CashierTransactionData> getCashierTransactions() { return cashierTransactions; } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/8d3f7af1/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformService.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformService.java index 57ce7fa..6265636 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformService.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.organisation.teller.service; +import org.apache.fineract.infrastructure.core.service.Page; +import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.organisation.teller.data.CashierData; import org.apache.fineract.organisation.teller.data.CashierTransactionData; import org.apache.fineract.organisation.teller.data.CashierTransactionsWithSummaryData; @@ -60,10 +62,10 @@ public interface TellerManagementReadPlatformService { public Collection<CashierData> retrieveCashiersForTellers(String sqlSearch, Long tellerId); - public Collection<CashierTransactionData> retrieveCashierTransactions(Long cashierId, boolean includeAllTellers, Date fromDate, - Date toDate, String currencyCode); + public Page<CashierTransactionData> retrieveCashierTransactions(Long cashierId, boolean includeAllTellers, Date fromDate, + Date toDate, String currencyCode, final SearchParameters searchParameters); public CashierTransactionsWithSummaryData retrieveCashierTransactionsWithSummary(Long cashierId, boolean includeAllTellers, - Date fromDate, Date toDate, String currencyCode); + Date fromDate, Date toDate, String currencyCode, final SearchParameters searchParameters); } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/8d3f7af1/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java index c52cb04..75488a3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java @@ -28,7 +28,10 @@ import java.util.Iterator; import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.exception.UnrecognizedQueryParamException; +import org.apache.fineract.infrastructure.core.service.Page; +import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; +import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.monetary.service.CurrencyReadPlatformService; @@ -66,6 +69,7 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement private final OfficeReadPlatformService officeReadPlatformService; private final StaffReadPlatformService staffReadPlatformService; private final CurrencyReadPlatformService currencyReadPlatformService; + private final PaginationHelper<CashierTransactionData> paginationHelper = new PaginationHelper<>(); @Autowired public TellerManagementReadPlatformServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource, @@ -439,7 +443,7 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement @Override public CashierTransactionsWithSummaryData retrieveCashierTransactionsWithSummary(final Long cashierId, final boolean includeAllTellers, - final Date fromDate, final Date toDate, final String currencyCode) { + final Date fromDate, final Date toDate, final String currencyCode, final SearchParameters searchParameters) { CashierData cashierData = findCashier(cashierId); Long staffId = cashierData.getStaffId(); StaffData staffData = staffReadPlatformService.retrieveStaff(staffId); @@ -456,7 +460,7 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement Collection<CashierTransactionTypeTotalsData> cashierTxnTypeTotals = this.jdbcTemplate.query(sql, ctsm, new Object[] { cashierId, currencyCode, hierarchySearchString, cashierId, currencyCode, hierarchySearchString, cashierId, currencyCode, - hierarchySearchString }); + hierarchySearchString, cashierId, currencyCode, hierarchySearchString }); Iterator<CashierTransactionTypeTotalsData> itr = cashierTxnTypeTotals.iterator(); BigDecimal allocAmount = new BigDecimal(0); @@ -479,8 +483,8 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement } } - final Collection<CashierTransactionData> cashierTransactions = retrieveCashierTransactions(cashierId, includeAllTellers, fromDate, - toDate, currencyCode); + final Page<CashierTransactionData> cashierTransactions = retrieveCashierTransactions(cashierId, includeAllTellers, fromDate, + toDate, currencyCode, searchParameters); CashierTransactionData cashierTxnTemplate = retrieveCashierTxnTemplate(cashierId); @@ -491,8 +495,8 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement } @Override - public Collection<CashierTransactionData> retrieveCashierTransactions(final Long cashierId, final boolean includeAllTellers, - final Date fromDate, final Date toDate, final String currencyCode) { + public Page<CashierTransactionData> retrieveCashierTransactions(final Long cashierId, final boolean includeAllTellers, + final Date fromDate, final Date toDate, final String currencyCode, final SearchParameters searchParameters) { CashierData cashierData = findCashier(cashierId); Long staffId = cashierData.getStaffId(); StaffData staffData = staffReadPlatformService.retrieveStaff(staffId); @@ -507,20 +511,41 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement final CashierTransactionMapper ctm = new CashierTransactionMapper(); - final String sql = "select * from (select " + ctm.cashierTxnSchema() + String sql = "select * from (select " + ctm.cashierTxnSchema() + " where txn.cashier_id = ? and txn.currency_code = ? and o.hierarchy like ? ) cashier_txns " + " union (select " + ctm.savingsTxnSchema() + " where sav_txn.is_reversed = 0 and c.id = ? and sav.currency_code = ? and o.hierarchy like ? and " + " sav_txn.transaction_date between c.start_date and date_add(c.end_date, interval 1 day) " - + " and renum.enum_value in ('deposit','withdrawal fee', 'Pay Charge', 'withdrawal') ) " + " union (select " + + " and renum.enum_value in ('deposit','withdrawal fee', 'Pay Charge', 'withdrawal', 'Annual Fee', 'Waive Charge', 'Interest Posting', 'Overdraft Interest') " + + " and (sav_txn.payment_detail_id IS NULL OR payType.is_cash_payment = 1) " + + " AND acnttrans.id IS NULL ) " + + " union (select " + ctm.loansTxnSchema() + " where loan_txn.is_reversed = 0 and c.id = ? and loan.currency_code = ? and o.hierarchy like ? and " + " loan_txn.transaction_date between c.start_date and date_add(c.end_date, interval 1 day) " - + " and renum.enum_value in ('Repayment At Disbursement','Repayment', 'Recovery Payment','Disbursement') ) " + + " and renum.enum_value in ('REPAYMENT_AT_DISBURSEMENT','REPAYMENT', 'RECOVERY_REPAYMENT','DISBURSEMENT', 'CHARGE_PAYMENT', 'WAIVE_CHARGES', 'WAIVE_INTEREST', 'WRITEOFF') " + + " and (loan_txn.payment_detail_id IS NULL OR payType.is_cash_payment = 1) " + + " AND acnttrans.id IS NULL ) " + + " union (select " + + ctm.clientTxnSchema() + + " where cli_txn.is_reversed = 0 and c.id = ? and cli_txn.currency_code = ? and o.hierarchy like ? and cli_txn.transaction_date " + + " between c.start_date and date_add(c.end_date, interval 1 day) " + + " and renum.enum_value in ('PAY_CHARGE', 'WAIVE_CHARGE') " + + " and (cli_txn.payment_detail_id IS NULL OR payType.is_cash_payment = 1) ) " + " order by created_date "; - - return this.jdbcTemplate.query(sql, ctm, new Object[] { cashierId, currencyCode, hierarchySearchString, cashierId, currencyCode, - hierarchySearchString, cashierId, currencyCode, hierarchySearchString }); + + if (searchParameters.isLimited()) { + sql = sql + " limit " + searchParameters.getLimit(); + if (searchParameters.isOffset()) { + sql = sql + " offset " + searchParameters.getOffset(); + } + } + final String sqlCountRows = "SELECT FOUND_ROWS()"; +// return this.jdbcTemplate.query(sql, ctm, new Object[] { cashierId, currencyCode, hierarchySearchString, cashierId, currencyCode, +// hierarchySearchString, cashierId, currencyCode, hierarchySearchString, cashierId, currencyCode, hierarchySearchString }); + Object[] params = new Object[] {cashierId, currencyCode, hierarchySearchString, cashierId, currencyCode, + hierarchySearchString, cashierId, currencyCode, hierarchySearchString, cashierId, currencyCode, hierarchySearchString }; + return this.paginationHelper.fetchPage(this.jdbcTemplate, sqlCountRows, sql, params, ctm); } private static final class CashierMapper implements RowMapper<CashierData> { @@ -592,9 +617,9 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement sqlBuilder.append(" sav_txn.id as txn_id, null as cashier_id, "); sqlBuilder.append(" case "); - sqlBuilder.append(" when renum.enum_value in ('deposit','withdrawal fee', 'Pay Charge') "); + sqlBuilder.append(" when renum.enum_value in ('deposit','withdrawal fee', 'Pay Charge', 'Annual Fee') "); sqlBuilder.append(" then 103 "); - sqlBuilder.append(" when renum.enum_value in ('withdrawal', '') "); + sqlBuilder.append(" when renum.enum_value in ('withdrawal', 'Waive Charge', 'Interest Posting', 'Overdraft Interest', '') "); sqlBuilder.append(" then 104 "); sqlBuilder.append(" else "); sqlBuilder.append(" 105 "); @@ -614,6 +639,11 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement sqlBuilder.append(" left join m_appuser user on sav_txn.appuser_id = user.id "); sqlBuilder.append(" left join m_staff staff on user.staff_id = staff.id "); sqlBuilder.append(" left join m_cashiers c on c.staff_id = staff.id "); + sqlBuilder.append(" left join m_payment_detail payDetails on payDetails.id = sav_txn.payment_detail_id "); + sqlBuilder.append(" left join m_payment_type payType on payType.id = payDetails.payment_type_id "); + sqlBuilder.append(" left join m_account_transfer_transaction acnttrans "); + sqlBuilder.append(" on (acnttrans.from_savings_transaction_id = sav_txn.id "); + sqlBuilder.append(" or acnttrans.to_savings_transaction_id = sav_txn.id) "); return sqlBuilder.toString(); } @@ -624,9 +654,9 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement sqlBuilder.append(" loan_txn.id as txn_id, c.id as cashier_id, "); sqlBuilder.append(" case "); - sqlBuilder.append(" when renum.enum_value in ('Repayment At Disbursement','Repayment', 'Recovery Payment') "); + sqlBuilder.append(" when renum.enum_value in ('REPAYMENT_AT_DISBURSEMENT','REPAYMENT', 'RECOVERY_REPAYMENT', 'CHARGE_PAYMENT') "); sqlBuilder.append(" then 103 "); - sqlBuilder.append(" when renum.enum_value in ('Disbursement') "); + sqlBuilder.append(" when renum.enum_value in ('DISBURSEMENT', 'WAIVE_INTEREST', 'WRITEOFF', 'WAIVE_CHARGES') "); sqlBuilder.append(" then 104 "); sqlBuilder.append(" else "); sqlBuilder.append(" 105 "); @@ -639,13 +669,51 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement .append(" o.id as office_id, o.name as office_name, null as teller_id, null as teller_name, staff.display_name as cashier_name "); sqlBuilder.append(" from m_loan_transaction loan_txn "); sqlBuilder - .append(" left join r_enum_value renum on loan_txn.transaction_type_enum = renum.enum_id and renum.enum_name = 'transaction_type_enum' "); + .append(" left join r_enum_value renum on loan_txn.transaction_type_enum = renum.enum_id and renum.enum_name = 'loan_transaction_type_enum' "); sqlBuilder.append(" left join m_loan loan on loan_txn.loan_id = loan.id "); sqlBuilder.append(" left join m_client cl on loan.client_id = cl.id "); sqlBuilder.append(" left join m_office o on cl.office_id = o.id "); sqlBuilder.append(" left join m_appuser user on loan_txn.appuser_id = user.id "); sqlBuilder.append(" left join m_staff staff on user.staff_id = staff.id "); sqlBuilder.append(" left join m_cashiers c on c.staff_id = staff.id "); + sqlBuilder.append(" left join m_payment_detail payDetails on payDetails.id = loan_txn.payment_detail_id "); + sqlBuilder.append(" left join m_payment_type payType on payType.id = payDetails.payment_type_id "); + sqlBuilder.append(" left join m_account_transfer_transaction acnttrans "); + sqlBuilder.append(" on (acnttrans.from_loan_transaction_id = loan_txn.id "); + sqlBuilder.append(" or acnttrans.to_loan_transaction_id = loan_txn.id) "); + + return sqlBuilder.toString(); + } + + public String clientTxnSchema() { + + final StringBuilder sqlBuilder = new StringBuilder(400); + + sqlBuilder.append(" cli_txn.id AS txn_id, c.id AS cashier_id, "); + sqlBuilder.append(" case "); + sqlBuilder.append(" when renum.enum_value in ('PAY_CHARGE') "); + sqlBuilder.append(" then 103 "); + sqlBuilder.append(" when renum.enum_value in ('WAIVE_CHARGE') "); + sqlBuilder.append(" then 104 "); + sqlBuilder.append(" else "); + sqlBuilder.append(" 105 "); + sqlBuilder.append(" end as cash_txn_type, "); + sqlBuilder.append(" cli_txn.amount as txn_amount, cli_txn.transaction_date as txn_date, "); + sqlBuilder + .append(" concat (renum.enum_value, ', Client:', cl.id, '-', cl.account_no, ',Client:', cl.id, '-',cl.display_name) as txn_note, "); + sqlBuilder.append(" 'client' as entity_type, cl.id as entity_id, cli_txn.created_date as created_date, "); + sqlBuilder + .append(" o.id as office_id, o.name as office_name, null as teller_id, null as teller_name, staff.display_name as cashier_name "); + sqlBuilder.append(" from m_client_transaction cli_txn "); + sqlBuilder + .append(" left join r_enum_value renum on cli_txn.transaction_type_enum = renum.enum_id AND renum.enum_name = 'client_transaction_type_enum' "); + sqlBuilder.append(" left join m_client cl on cli_txn.client_id = cl.id "); + sqlBuilder.append(" left join m_office o on cl.office_id = o.id "); + sqlBuilder.append(" left join m_appuser user on cli_txn.appuser_id = user.id "); + sqlBuilder.append(" left join m_staff staff on user.staff_id = staff.id "); + sqlBuilder.append(" left join m_cashiers c on c.staff_id = staff.id "); + sqlBuilder.append(" left join m_payment_detail payDetails on payDetails.id = cli_txn.payment_detail_id "); + sqlBuilder.append(" left join m_payment_type payType on payType.id = payDetails.payment_type_id "); return sqlBuilder.toString(); } @@ -709,9 +777,9 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement sqlBuilder.append(" UNION "); sqlBuilder.append(" (select sav_txn.id as txn_id, c.id as cashier_id, "); sqlBuilder.append(" case "); - sqlBuilder.append(" when renum.enum_value in ('deposit','withdrawal fee', 'Pay Charge') "); + sqlBuilder.append(" when renum.enum_value in ('deposit','withdrawal fee', 'Pay Charge', 'Annual Fee') "); sqlBuilder.append(" then 103 "); - sqlBuilder.append(" when renum.enum_value in ('withdrawal') "); + sqlBuilder.append(" when renum.enum_value in ('withdrawal', 'Waive Charge', 'Interest Posting', 'Overdraft Interest') "); sqlBuilder.append(" then 104 "); sqlBuilder.append(" else "); sqlBuilder.append(" 105 "); @@ -731,18 +799,25 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement sqlBuilder.append(" left join m_appuser user on sav_txn.appuser_id = user.id "); sqlBuilder.append(" left join m_staff staff on user.staff_id = staff.id "); sqlBuilder.append(" left join m_cashiers c on c.staff_id = staff.id "); + sqlBuilder.append(" left join m_payment_detail payDetails on payDetails.id = sav_txn.payment_detail_id "); + sqlBuilder.append(" left join m_payment_type payType on payType.id = payDetails.payment_type_id "); + sqlBuilder.append(" left join m_account_transfer_transaction acnttrans "); + sqlBuilder.append(" on (acnttrans.from_savings_transaction_id = sav_txn.id "); + sqlBuilder.append(" or acnttrans.to_savings_transaction_id = sav_txn.id) "); sqlBuilder.append(" where sav_txn.is_reversed = 0 and c.id = ? "); sqlBuilder.append(" and sav.currency_code = ? "); sqlBuilder.append(" and o.hierarchy like ? "); sqlBuilder.append(" and sav_txn.transaction_date between c.start_date and date_add(c.end_date, interval 1 day) "); + sqlBuilder.append(" and (sav_txn.payment_detail_id IS NULL OR payType.is_cash_payment = 1) "); + sqlBuilder.append(" AND acnttrans.id IS NULL "); sqlBuilder.append(" ) "); sqlBuilder.append(" UNION "); sqlBuilder.append(" ( "); sqlBuilder.append(" select loan_txn.id as txn_id, c.id as cashier_id, "); sqlBuilder.append(" case "); - sqlBuilder.append(" when renum.enum_value in ('Repayment At Disbursement','Repayment', 'Recovery Payment') "); + sqlBuilder.append(" when renum.enum_value in ('REPAYMENT_AT_DISBURSEMENT','REPAYMENT', 'RECOVERY_REPAYMENT', 'CHARGE_PAYMENT') "); sqlBuilder.append(" then 103 "); - sqlBuilder.append(" when renum.enum_value in ('Disbursement') "); + sqlBuilder.append(" when renum.enum_value in ('DISBURSEMENT', 'WAIVE_INTEREST', 'WRITEOFF', 'WAIVE_CHARGES') "); sqlBuilder.append(" then 104 "); sqlBuilder.append(" else "); sqlBuilder.append(" 105 "); @@ -755,17 +830,57 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement .append(" o.id as office_id, o.name as office_name, null as teller_id, null as teller_name, staff.display_name as cashier_name "); sqlBuilder.append(" from m_loan_transaction loan_txn "); sqlBuilder - .append(" left join r_enum_value renum on loan_txn.transaction_type_enum = renum.enum_id and renum.enum_name = 'transaction_type_enum' "); + .append(" left join r_enum_value renum on loan_txn.transaction_type_enum = renum.enum_id and renum.enum_name = 'loan_transaction_type_enum' "); sqlBuilder.append(" left join m_loan loan on loan_txn.loan_id = loan.id "); sqlBuilder.append(" left join m_client cl on loan.client_id = cl.id "); sqlBuilder.append(" left join m_office o on cl.office_id = o.id "); sqlBuilder.append(" left join m_appuser user on loan_txn.appuser_id = user.id "); sqlBuilder.append(" left join m_staff staff on user.staff_id = staff.id "); sqlBuilder.append(" left join m_cashiers c on c.staff_id = staff.id "); + sqlBuilder.append(" left join m_payment_detail payDetails on payDetails.id = loan_txn.payment_detail_id "); + sqlBuilder.append(" left join m_payment_type payType on payType.id = payDetails.payment_type_id "); + sqlBuilder.append(" left join m_account_transfer_transaction acnttrans "); + sqlBuilder.append(" on (acnttrans.from_loan_transaction_id = loan_txn.id "); + sqlBuilder.append(" or acnttrans.to_loan_transaction_id = loan_txn.id) "); sqlBuilder.append(" where loan_txn.is_reversed = 0 and c.id = ? "); sqlBuilder.append(" and loan.currency_code = ? "); sqlBuilder.append(" and o.hierarchy like ? "); sqlBuilder.append(" and loan_txn.transaction_date between c.start_date and date_add(c.end_date, interval 1 day) "); + sqlBuilder.append(" and (loan_txn.payment_detail_id IS NULL OR payType.is_cash_payment = 1) "); + sqlBuilder.append(" AND acnttrans.id IS NULL "); + sqlBuilder.append(" ) "); + sqlBuilder.append(" UNION "); + sqlBuilder.append(" ( "); + sqlBuilder.append(" SELECT cli_txn.id AS txn_id, c.id AS cashier_id, "); + sqlBuilder.append(" case "); + sqlBuilder.append(" WHEN renum.enum_value IN ('PAY_CHARGE') "); + sqlBuilder.append(" then 103 "); + sqlBuilder.append(" WHEN renum.enum_value IN ('WAIVE_CHARGE') "); + sqlBuilder.append(" then 104 "); + sqlBuilder.append(" else "); + sqlBuilder.append(" 105 "); + sqlBuilder.append(" end as cash_txn_type, "); + sqlBuilder.append(" cli_txn.amount as txn_amount, cli_txn.transaction_date as txn_date, "); + sqlBuilder + .append(" concat (renum.enum_value, ', Client:', cl.id, '-', cl.account_no, ',Client:', cl.id, '-',cl.display_name) as txn_note, "); + sqlBuilder.append(" 'client' as entity_type, cl.id as entity_id, cli_txn.created_date as created_date, "); + sqlBuilder + .append(" o.id as office_id, o.name as office_name, null as teller_id, null as teller_name, staff.display_name as cashier_name "); + sqlBuilder.append(" from m_client_transaction cli_txn "); + sqlBuilder + .append(" left join r_enum_value renum ON cli_txn.transaction_type_enum = renum.enum_id AND renum.enum_name = 'client_transaction_type_enum' "); + sqlBuilder.append(" left join m_client cl ON cli_txn.client_id = cl.id "); + sqlBuilder.append(" left join m_office o ON cl.office_id = o.id "); + sqlBuilder.append(" left join m_appuser user ON cli_txn.appuser_id = user.id "); + sqlBuilder.append(" left join m_staff staff ON user.staff_id = staff.id "); + sqlBuilder.append(" left join m_cashiers c ON c.staff_id = staff.id "); + sqlBuilder.append(" left join m_payment_detail payDetails on payDetails.id = cli_txn.payment_detail_id "); + sqlBuilder.append(" left join m_payment_type payType on payType.id = payDetails.payment_type_id "); + sqlBuilder.append(" where cli_txn.is_reversed = 0 AND c.id = ? "); + sqlBuilder.append(" and cli_txn.currency_code = ? "); + sqlBuilder.append(" and o.hierarchy LIKE ? "); + sqlBuilder.append(" and cli_txn.transaction_date between c.start_date and date_add(c.end_date, interval 1 day) "); + sqlBuilder.append(" and (cli_txn.payment_detail_id IS NULL OR payType.is_cash_payment = 1) "); sqlBuilder.append(" ) "); sqlBuilder.append(" ) txns "); sqlBuilder.append(" group by cash_txn_type ");