You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by co...@apache.org on 2018/08/21 20:45:40 UTC
[1/3] fineract git commit: FINERACT-642 Include Guarantor Accounts in
Client Accounts Overview
Repository: fineract
Updated Branches:
refs/heads/develop e29e37ebb -> 9398afda4
FINERACT-642 Include Guarantor Accounts in Client Accounts Overview
Project: http://git-wip-us.apache.org/repos/asf/fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/fineract/commit/fbf9d1e7
Tree: http://git-wip-us.apache.org/repos/asf/fineract/tree/fbf9d1e7
Diff: http://git-wip-us.apache.org/repos/asf/fineract/diff/fbf9d1e7
Branch: refs/heads/develop
Commit: fbf9d1e7d0fe2d3b9519f2e9ffe1785c04009473
Parents: d2b3411
Author: tonic889 <to...@github.com>
Authored: Sat Apr 28 20:26:56 2018 -0400
Committer: tonic889 <to...@github.com>
Committed: Mon Aug 6 22:54:31 2018 -0400
----------------------------------------------------------------------
.../data/AccountSummaryCollectionData.java | 22 +++-
.../data/GuarantorAccountSummaryData.java | 70 +++++++++++
...ilsReadPlatformServiceJpaRepositoryImpl.java | 117 ++++++++++++++++++-
3 files changed, 202 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/fineract/blob/fbf9d1e7/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/AccountSummaryCollectionData.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/AccountSummaryCollectionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/AccountSummaryCollectionData.java
index f4faaca..80de9a5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/AccountSummaryCollectionData.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/AccountSummaryCollectionData.java
@@ -29,27 +29,34 @@ public class AccountSummaryCollectionData {
private final Collection<LoanAccountSummaryData> loanAccounts;
private final Collection<SavingsAccountSummaryData> savingsAccounts;
private final Collection<ShareAccountSummaryData> shareAccounts ;
+ private final Collection<GuarantorAccountSummaryData> guarantorAccounts;
private final Collection<LoanAccountSummaryData> memberLoanAccounts;
private final Collection<SavingsAccountSummaryData> memberSavingsAccounts;
-
+ private final Collection<GuarantorAccountSummaryData> memberGuarantorAccounts;
+
public AccountSummaryCollectionData(final Collection<LoanAccountSummaryData> loanAccounts,
- final Collection<SavingsAccountSummaryData> savingsAccounts, final Collection<ShareAccountSummaryData> shareAccounts) {
+ final Collection<SavingsAccountSummaryData> savingsAccounts, final Collection<ShareAccountSummaryData> shareAccounts,
+ final Collection<GuarantorAccountSummaryData> guarantorAccounts) {
this.loanAccounts = defaultLoanAccountsIfEmpty(loanAccounts);
this.savingsAccounts = defaultSavingsAccountsIfEmpty(savingsAccounts);
this.shareAccounts = defaultShareAccountsIfEmpty(shareAccounts) ;
+ this.guarantorAccounts = guarantorAccounts;
this.memberLoanAccounts = null;
this.memberSavingsAccounts = null;
+ this.memberGuarantorAccounts = null;
}
public AccountSummaryCollectionData(final Collection<LoanAccountSummaryData> loanAccounts,
- final Collection<SavingsAccountSummaryData> savingsAccounts, final Collection<LoanAccountSummaryData> memberLoanAccounts,
- final Collection<SavingsAccountSummaryData> memberSavingsAccounts) {
+ final Collection<SavingsAccountSummaryData> savingsAccounts, final Collection<GuarantorAccountSummaryData> guarantorAccounts, final Collection<LoanAccountSummaryData> memberLoanAccounts,
+ final Collection<SavingsAccountSummaryData> memberSavingsAccounts, final Collection<GuarantorAccountSummaryData> memberGuarantorAccounts) {
this.loanAccounts = defaultLoanAccountsIfEmpty(loanAccounts);
this.savingsAccounts = defaultSavingsAccountsIfEmpty(savingsAccounts);
+ this.guarantorAccounts = guarantorAccounts;
this.shareAccounts = null ;
this.memberLoanAccounts = defaultLoanAccountsIfEmpty(memberLoanAccounts);
this.memberSavingsAccounts = defaultSavingsAccountsIfEmpty(memberSavingsAccounts);
+ this.memberGuarantorAccounts = defaultGuarantorAccountsIfEmpty(memberGuarantorAccounts);
}
private Collection<LoanAccountSummaryData> defaultLoanAccountsIfEmpty(final Collection<LoanAccountSummaryData> collection) {
@@ -76,4 +83,11 @@ public class AccountSummaryCollectionData {
return returnCollection;
}
+ private Collection<GuarantorAccountSummaryData> defaultGuarantorAccountsIfEmpty(final Collection<GuarantorAccountSummaryData> collection) {
+ Collection<GuarantorAccountSummaryData> returnCollection = null;
+ if (collection != null && !collection.isEmpty()) {
+ returnCollection = collection;
+ }
+ return returnCollection;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/fineract/blob/fbf9d1e7/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/GuarantorAccountSummaryData.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/GuarantorAccountSummaryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/GuarantorAccountSummaryData.java
new file mode 100644
index 0000000..64f444e
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/GuarantorAccountSummaryData.java
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.accountdetails.data;
+
+import java.math.BigDecimal;
+
+import org.apache.fineract.infrastructure.core.data.EnumOptionData;
+import org.apache.fineract.portfolio.loanaccount.data.LoanApplicationTimelineData;
+import org.apache.fineract.portfolio.loanaccount.data.LoanStatusEnumData;
+
+/**
+ * Immutable data object for loan accounts.
+ */
+@SuppressWarnings("unused")
+public class GuarantorAccountSummaryData {
+
+ private final Long id;
+ private final String accountNo;
+ private final String externalId;
+ private final Long productId;
+ private final String productName;
+ private final String shortProductName;
+ private final LoanStatusEnumData status;
+ private final EnumOptionData loanType;
+ private final Integer loanCycle;
+ private final Boolean inArrears;
+ private final BigDecimal originalLoan;
+ private final BigDecimal loanBalance;
+ private final BigDecimal amountPaid;
+ private final Boolean isActive;
+ private final String relationship;
+ private final BigDecimal onHoldAmount;
+ public GuarantorAccountSummaryData(final Long id, final String accountNo, final String externalId, final Long productId,
+ final String loanProductName, final String shortLoanProductName, final LoanStatusEnumData loanStatus, final EnumOptionData loanType, final Integer loanCycle,
+ final Boolean inArrears,final BigDecimal originalLoan,final BigDecimal loanBalance,final BigDecimal amountPaid,
+ final Boolean isActive, final String relationship, final BigDecimal onHoldAmount) {
+ this.id = id;
+ this.accountNo = accountNo;
+ this.externalId = externalId;
+ this.productId = productId;
+ this.productName = loanProductName;
+ this.shortProductName = shortLoanProductName;
+ this.status = loanStatus;
+ this.loanType = loanType;
+ this.loanCycle = loanCycle;
+ this.inArrears = inArrears;
+ this.loanBalance = loanBalance;
+ this.originalLoan = originalLoan;
+ this.amountPaid = amountPaid;
+ this.isActive = isActive;
+ this.relationship = relationship;
+ this.onHoldAmount = onHoldAmount;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/fineract/blob/fbf9d1e7/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java
index 0fc9103..b4b1bb7 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java
@@ -30,6 +30,7 @@ import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.apache.fineract.infrastructure.security.utils.ColumnValidator;
import org.apache.fineract.organisation.monetary.data.CurrencyData;
import org.apache.fineract.portfolio.accountdetails.data.AccountSummaryCollectionData;
+import org.apache.fineract.portfolio.accountdetails.data.GuarantorAccountSummaryData;
import org.apache.fineract.portfolio.accountdetails.data.LoanAccountSummaryData;
import org.apache.fineract.portfolio.accountdetails.data.SavingsAccountSummaryData;
import org.apache.fineract.portfolio.accountdetails.data.ShareAccountSummaryData;
@@ -75,10 +76,14 @@ public class AccountDetailsReadPlatformServiceJpaRepositoryImpl implements Accou
this.clientReadPlatformService.retrieveOne(clientId);
final String loanwhereClause = " where l.client_id = ?";
final String savingswhereClause = " where sa.client_id = ? order by sa.status_enum ASC, sa.account_no ASC";
+ final String guarantorWhereClause = " where g.entity_id = ? and g.is_active = 1 order by l.account_no ASC";
+
final List<LoanAccountSummaryData> loanAccounts = retrieveLoanAccountDetails(loanwhereClause, new Object[] { clientId });
final List<SavingsAccountSummaryData> savingsAccounts = retrieveAccountDetails(savingswhereClause, new Object[] { clientId });
final List<ShareAccountSummaryData> shareAccounts = retrieveShareAccountDetails(clientId) ;
- return new AccountSummaryCollectionData(loanAccounts, savingsAccounts, shareAccounts);
+ final List<GuarantorAccountSummaryData> guarantorloanAccounts = retrieveGuarantorLoanAccountDetails(
+ guarantorWhereClause, new Object[] { clientId });
+ return new AccountSummaryCollectionData(loanAccounts, savingsAccounts, shareAccounts, guarantorloanAccounts);
}
@Override
@@ -89,14 +94,21 @@ public class AccountDetailsReadPlatformServiceJpaRepositoryImpl implements Accou
final String loanWhereClauseForMembers = " where l.group_id = ? and l.client_id is not null";
final String savingswhereClauseForGroup = " where sa.group_id = ? and sa.client_id is null order by sa.status_enum ASC, sa.account_no ASC";
final String savingswhereClauseForMembers = " where sa.group_id = ? and sa.client_id is not null order by sa.status_enum ASC, sa.account_no ASC";
+ final String guarantorWhereClauseForGroup = " where l.group_id = ? and l.client_id is null and g.is_active = 1 order by l.account_no ASC";
+ final String guarantorWhereClauseForMembers = " where l.group_id = ? and l.client_id is not null and g.is_active = 1 order by l.account_no ASC";
+
final List<LoanAccountSummaryData> groupLoanAccounts = retrieveLoanAccountDetails(loanWhereClauseForGroup, new Object[] { groupId });
final List<SavingsAccountSummaryData> groupSavingsAccounts = retrieveAccountDetails(savingswhereClauseForGroup,
new Object[] { groupId });
+ final List<GuarantorAccountSummaryData> groupGuarantorloanAccounts = retrieveGuarantorLoanAccountDetails(
+ guarantorWhereClauseForGroup, new Object[] { groupId });
final List<LoanAccountSummaryData> memberLoanAccounts = retrieveLoanAccountDetails(loanWhereClauseForMembers,
new Object[] { groupId });
final List<SavingsAccountSummaryData> memberSavingsAccounts = retrieveAccountDetails(savingswhereClauseForMembers,
new Object[] { groupId });
- return new AccountSummaryCollectionData(groupLoanAccounts, groupSavingsAccounts, memberLoanAccounts, memberSavingsAccounts);
+ final List<GuarantorAccountSummaryData> memberGuarantorloanAccounts = retrieveGuarantorLoanAccountDetails(
+ guarantorWhereClauseForMembers, new Object[] { groupId });
+ return new AccountSummaryCollectionData(groupLoanAccounts, groupSavingsAccounts, groupGuarantorloanAccounts, memberLoanAccounts, memberSavingsAccounts, memberGuarantorloanAccounts);
}
@Override
@@ -144,6 +156,14 @@ public class AccountDetailsReadPlatformServiceJpaRepositoryImpl implements Accou
return this.jdbcTemplate.query(query, mapper, new Object [] {clientId});
}
+ private List<GuarantorAccountSummaryData> retrieveGuarantorLoanAccountDetails(
+ final String loanwhereClause, final Object[] inputs) {
+ final GuarantorLoanAccountSummaryDataMapper rm = new GuarantorLoanAccountSummaryDataMapper();
+ final String sql = "select " + rm.guarantorLoanAccountSummarySchema()
+ + loanwhereClause;
+ return this.jdbcTemplate.query(sql, rm, inputs);
+ }
+
private final static class ShareAccountSummaryDataMapper implements RowMapper<ShareAccountSummaryData> {
private final String schema ;
@@ -493,6 +513,97 @@ public class AccountDetailsReadPlatformServiceJpaRepositoryImpl implements Accou
return new LoanAccountSummaryData(id, accountNo, externalId, productId, loanProductName, shortLoanProductName, loanStatus, loanType, loanCycle,
timeline, inArrears,originalLoan,loanBalance,amountPaid);
}
+
+ }
+ private static final class GuarantorLoanAccountSummaryDataMapper implements
+ RowMapper<GuarantorAccountSummaryData> {
+
+ public String guarantorLoanAccountSummarySchema() {
+
+ final StringBuilder accountsSummary = new StringBuilder(
+ "l.id as id, l.account_no as accountNo, l.external_id as externalId,");
+ accountsSummary
+ .append(" l.product_id as productId, lp.name as productName, lp.short_name as shortProductName,")
+ .append(" l.loan_status_id as statusId, l.loan_type_enum as loanType,")
+
+ .append("l.principal_disbursed_derived as originalLoan,")
+ .append("l.total_outstanding_derived as loanBalance,")
+ .append("l.total_repayment_derived as amountPaid,")
+
+ .append(" l.loan_product_counter as loanCycle,")
+
+ .append(" l.submittedon_date as submittedOnDate,")
+
+ .append(" l.rejectedon_date as rejectedOnDate,")
+ .append(" l.withdrawnon_date as withdrawnOnDate,")
+ .append(" l.approvedon_date as approvedOnDate,")
+ .append(" l.expected_disbursedon_date as expectedDisbursementDate, l.disbursedon_date as actualDisbursementDate,")
+ .append(" l.closedon_date as closedOnDate,")
+ .append(" la.overdue_since_date_derived as overdueSinceDate,")
+ .append(" l.writtenoffon_date as writtenOffOnDate, l.expected_maturedon_date as expectedMaturityDate,")
+ .append(" g.is_active as isActive,")
+ .append(" cv.code_value as relationship,")
+ .append(" sa.on_hold_funds_derived")
+ .append(" from m_loan l ")
+ .append(" join m_guarantor as g on g.loan_id = l.id ")
+ .append(" join m_client as c on c.id = g.entity_id ")
+ .append(" LEFT JOIN m_product_loan AS lp ON lp.id = l.product_id")
+ .append(" left join m_loan_arrears_aging la on la.loan_id = l.id")
+ .append(" left join m_code_value cv ON cv.id = g.client_reln_cv_id")
+ .append(" left join m_savings_account sa on sa.client_id = c.id")
+
+ ;
+
+ return accountsSummary.toString();
+ }
+
+ @Override
+ public GuarantorAccountSummaryData mapRow(final ResultSet rs,
+ @SuppressWarnings("unused") final int rowNum)
+ throws SQLException {
+
+ final Long id = JdbcSupport.getLong(rs, "id");
+ final String accountNo = rs.getString("accountNo");
+ final String externalId = rs.getString("externalId");
+ final Long productId = JdbcSupport.getLong(rs, "productId");
+ final String loanProductName = rs.getString("productName");
+ final String shortLoanProductName = rs
+ .getString("shortProductName");
+ final Integer loanStatusId = JdbcSupport.getInteger(rs, "statusId");
+ final LoanStatusEnumData loanStatus = LoanEnumerations
+ .status(loanStatusId);
+ final Integer loanTypeId = JdbcSupport.getInteger(rs, "loanType");
+ final EnumOptionData loanType = AccountEnumerations
+ .loanType(loanTypeId);
+ final Integer loanCycle = JdbcSupport.getInteger(rs, "loanCycle");
+
+ final BigDecimal originalLoan = JdbcSupport
+ .getBigDecimalDefaultToNullIfZero(rs, "originalLoan");
+ final BigDecimal loanBalance = JdbcSupport
+ .getBigDecimalDefaultToNullIfZero(rs, "loanBalance");
+ final BigDecimal amountPaid = JdbcSupport
+ .getBigDecimalDefaultToNullIfZero(rs, "amountPaid");
+ final BigDecimal onHoldAmount = JdbcSupport
+ .getBigDecimalDefaultToNullIfZero(rs,
+ "on_hold_funds_derived");
+
+ final LocalDate overdueSinceDate = JdbcSupport.getLocalDate(rs,
+ "overdueSinceDate");
+ Boolean inArrears = true;
+ if (overdueSinceDate == null) {
+ inArrears = false;
+ }
+
+ final Boolean isActive = rs.getBoolean("isActive");
+
+ final String relationship = rs.getString("relationship");
+ return new GuarantorAccountSummaryData(id, accountNo, externalId,
+ productId, loanProductName, shortLoanProductName,
+ loanStatus, loanType, loanCycle, inArrears, originalLoan,
+ loanBalance, amountPaid, isActive, relationship,
+ onHoldAmount);
+ }
+
}
-}
+}
\ No newline at end of file
[3/3] fineract git commit: Merge branch 'tonic889-community-app-1863'
into develop
Posted by co...@apache.org.
Merge branch 'tonic889-community-app-1863' into develop
Project: http://git-wip-us.apache.org/repos/asf/fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/fineract/commit/9398afda
Tree: http://git-wip-us.apache.org/repos/asf/fineract/tree/9398afda
Diff: http://git-wip-us.apache.org/repos/asf/fineract/diff/9398afda
Branch: refs/heads/develop
Commit: 9398afda4d4996ab35ccf5d18316e24fa315e8b7
Parents: e29e37e 9642e0e
Author: conradsp <sc...@gmail.com>
Authored: Tue Aug 21 15:45:27 2018 -0500
Committer: conradsp <sc...@gmail.com>
Committed: Tue Aug 21 15:45:27 2018 -0500
----------------------------------------------------------------------
.../data/AccountSummaryCollectionData.java | 22 +++-
.../data/GuarantorAccountSummaryData.java | 70 +++++++++++
...ilsReadPlatformServiceJpaRepositoryImpl.java | 117 ++++++++++++++++++-
3 files changed, 202 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
[2/3] fineract git commit: Merge branch 'community-app-1863' of
https://github.com/tonic889/incubator-fineract into
tonic889-community-app-1863
Posted by co...@apache.org.
Merge branch 'community-app-1863' of https://github.com/tonic889/incubator-fineract into tonic889-community-app-1863
Project: http://git-wip-us.apache.org/repos/asf/fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/fineract/commit/9642e0e3
Tree: http://git-wip-us.apache.org/repos/asf/fineract/tree/9642e0e3
Diff: http://git-wip-us.apache.org/repos/asf/fineract/diff/9642e0e3
Branch: refs/heads/develop
Commit: 9642e0e38384efd12d5e8ef868512dc59102bf21
Parents: e29e37e fbf9d1e
Author: conradsp <sc...@gmail.com>
Authored: Tue Aug 21 15:24:06 2018 -0500
Committer: conradsp <sc...@gmail.com>
Committed: Tue Aug 21 15:24:06 2018 -0500
----------------------------------------------------------------------
.../data/AccountSummaryCollectionData.java | 22 +++-
.../data/GuarantorAccountSummaryData.java | 70 +++++++++++
...ilsReadPlatformServiceJpaRepositoryImpl.java | 117 ++++++++++++++++++-
3 files changed, 202 insertions(+), 7 deletions(-)
----------------------------------------------------------------------