You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ar...@apache.org on 2023/02/06 09:20:17 UTC

[fineract] branch develop updated: FINERACT-1694: Add submittedOnDate and externalLoanId to LoanChargeData event

This is an automated email from the ASF dual-hosted git repository.

arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new e08675ed5 FINERACT-1694: Add submittedOnDate and externalLoanId to LoanChargeData event
e08675ed5 is described below

commit e08675ed54430ac43819fee73022193cbef73578
Author: Adam Saghy <ad...@gmail.com>
AuthorDate: Fri Feb 3 14:24:58 2023 +0100

    FINERACT-1694: Add submittedOnDate and externalLoanId to LoanChargeData event
---
 .../src/main/avro/loan/v1/LoanChargeDataV1.avsc    | 16 +++++++++
 .../portfolio/loanaccount/data/LoanChargeData.java | 39 ++++++++++++++--------
 .../service/LoanChargeReadPlatformServiceImpl.java | 26 ++++++++++-----
 3 files changed, 59 insertions(+), 22 deletions(-)

diff --git a/fineract-avro-schemas/src/main/avro/loan/v1/LoanChargeDataV1.avsc b/fineract-avro-schemas/src/main/avro/loan/v1/LoanChargeDataV1.avsc
index a11601ef7..4c2143f6f 100644
--- a/fineract-avro-schemas/src/main/avro/loan/v1/LoanChargeDataV1.avsc
+++ b/fineract-avro-schemas/src/main/avro/loan/v1/LoanChargeDataV1.avsc
@@ -232,6 +232,22 @@
                 "null",
                 "string"
             ]
+        },
+        {
+            "default": null,
+            "name": "externalLoanId",
+            "type": [
+                "null",
+                "string"
+            ]
+        },
+        {
+            "default": null,
+            "name": "submittedOnDate",
+            "type": [
+                "null",
+                "string"
+            ]
         }
     ]
 }
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanChargeData.java
index c8c542e0a..5ed0085b5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanChargeData.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanChargeData.java
@@ -92,9 +92,11 @@ public class LoanChargeData {
 
     private final ExternalId externalId;
 
+    private final ExternalId externalLoanId;
+
     public static LoanChargeData template(final Collection<ChargeData> chargeOptions) {
-        return new LoanChargeData(null, null, null, null, null, null, null, null, chargeOptions, false, null, false, false, null, null,
-                null, null, null, ExternalId.empty());
+        return new LoanChargeData(null, null, null, null, null, null, null, null, chargeOptions, false, null, false, false, null,
+                ExternalId.empty(), null, null, null, null, ExternalId.empty());
     }
 
     /**
@@ -105,7 +107,7 @@ public class LoanChargeData {
             final EnumOptionData chargeCalculationType, final boolean penalty, final EnumOptionData chargePaymentMode,
             final BigDecimal minCap, final BigDecimal maxCap, final ExternalId externalId) {
         return new LoanChargeData(null, chargeId, name, currency, amount, percentage, chargeTimeType, chargeCalculationType, null, penalty,
-                chargePaymentMode, false, false, null, minCap, maxCap, null, null, externalId);
+                chargePaymentMode, false, false, null, ExternalId.empty(), minCap, maxCap, null, null, externalId);
     }
 
     public LoanChargeData(final Long id, final Long chargeId, final String name, final CurrencyData currency, final BigDecimal amount,
@@ -113,8 +115,8 @@ public class LoanChargeData {
             final BigDecimal amountOutstanding, final EnumOptionData chargeTimeType, final LocalDate submittedOnDate,
             final LocalDate dueDate, final EnumOptionData chargeCalculationType, final BigDecimal percentage,
             final BigDecimal amountPercentageAppliedTo, final boolean penalty, final EnumOptionData chargePaymentMode, final boolean paid,
-            final boolean waived, final Long loanId, final BigDecimal minCap, final BigDecimal maxCap, final BigDecimal amountOrPercentage,
-            Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
+            final boolean waived, final Long loanId, final ExternalId externalLoanId, final BigDecimal minCap, final BigDecimal maxCap,
+            final BigDecimal amountOrPercentage, Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
         this.id = id;
         this.chargeId = chargeId;
         this.name = name;
@@ -153,13 +155,14 @@ public class LoanChargeData {
         this.amountAccrued = null;
         this.amountUnrecognized = null;
         this.externalId = externalId;
+        this.externalLoanId = externalLoanId;
     }
 
     private LoanChargeData(final Long id, final Long chargeId, final String name, final CurrencyData currency, final BigDecimal amount,
             final BigDecimal percentage, final EnumOptionData chargeTimeType, final EnumOptionData chargeCalculationType,
             final Collection<ChargeData> chargeOptions, final boolean penalty, final EnumOptionData chargePaymentMode, final boolean paid,
-            final boolean waived, final Long loanId, final BigDecimal minCap, final BigDecimal maxCap, final BigDecimal amountOrPercentage,
-            Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
+            final boolean waived, final Long loanId, final ExternalId externalLoanId, final BigDecimal minCap, final BigDecimal maxCap,
+            final BigDecimal amountOrPercentage, Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
         this.id = id;
         this.chargeId = chargeId;
         this.name = name;
@@ -193,6 +196,7 @@ public class LoanChargeData {
         this.chargeOptions = chargeOptions;
         this.chargePayable = isChargePayable();
         this.loanId = loanId;
+        this.externalLoanId = externalLoanId;
         this.minCap = minCap;
         this.maxCap = maxCap;
         this.installmentChargeData = installmentChargeData;
@@ -201,8 +205,9 @@ public class LoanChargeData {
         this.externalId = externalId;
     }
 
-    public LoanChargeData(final Long id, final LocalDate dueAsOfDate, final BigDecimal amountOutstanding, EnumOptionData chargeTimeType,
-            final Long loanId, Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
+    public LoanChargeData(final Long id, final LocalDate dueAsOfDate, final LocalDate submittedOnDate, final BigDecimal amountOutstanding,
+            EnumOptionData chargeTimeType, final Long loanId, final ExternalId externalLoanId,
+            Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
         this.id = id;
         this.chargeId = null;
         this.name = null;
@@ -213,7 +218,7 @@ public class LoanChargeData {
         this.amountWrittenOff = null;
         this.amountOutstanding = amountOutstanding;
         this.chargeTimeType = chargeTimeType;
-        this.submittedOnDate = null;
+        this.submittedOnDate = submittedOnDate;
         this.dueDate = dueAsOfDate;
         this.chargeCalculationType = null;
         this.percentage = null;
@@ -232,11 +237,12 @@ public class LoanChargeData {
         this.amountAccrued = null;
         this.amountUnrecognized = null;
         this.externalId = externalId;
+        this.externalLoanId = externalLoanId;
     }
 
-    public LoanChargeData(final Long id, final Long chargeId, final LocalDate dueAsOfDate, EnumOptionData chargeTimeType,
-            final BigDecimal amount, final BigDecimal amountAccrued, final BigDecimal amountWaived, final boolean penalty,
-            final ExternalId externalId) {
+    public LoanChargeData(final Long id, final Long chargeId, final LocalDate dueAsOfDate, final LocalDate submittedOnDate,
+            EnumOptionData chargeTimeType, final BigDecimal amount, final BigDecimal amountAccrued, final BigDecimal amountWaived,
+            final boolean penalty, final ExternalId externalId) {
         this.id = id;
         this.chargeId = chargeId;
         this.name = null;
@@ -247,7 +253,7 @@ public class LoanChargeData {
         this.amountWrittenOff = null;
         this.amountOutstanding = null;
         this.chargeTimeType = chargeTimeType;
-        this.submittedOnDate = null;
+        this.submittedOnDate = submittedOnDate;
         this.dueDate = dueAsOfDate;
         this.chargeCalculationType = null;
         this.percentage = null;
@@ -260,6 +266,7 @@ public class LoanChargeData {
         this.chargeOptions = null;
         this.chargePayable = false;
         this.loanId = null;
+        this.externalLoanId = ExternalId.empty();
         this.minCap = null;
         this.maxCap = null;
         this.installmentChargeData = null;
@@ -292,6 +299,7 @@ public class LoanChargeData {
         this.chargeOptions = null;
         this.chargePayable = false;
         this.loanId = null;
+        this.externalLoanId = ExternalId.empty();
         this.minCap = null;
         this.maxCap = null;
         this.installmentChargeData = null;
@@ -326,6 +334,7 @@ public class LoanChargeData {
         this.chargeOptions = chargeData.chargeOptions;
         this.chargePayable = chargeData.chargePayable;
         this.loanId = chargeData.loanId;
+        this.externalLoanId = chargeData.externalLoanId;
         this.installmentChargeData = installmentChargeData;
         this.amountAccrued = chargeData.amountAccrued;
         this.amountUnrecognized = chargeData.amountUnrecognized;
@@ -357,6 +366,7 @@ public class LoanChargeData {
         this.chargeOptions = null;
         this.chargePayable = false;
         this.loanId = null;
+        this.externalLoanId = ExternalId.empty();
         this.minCap = null;
         this.maxCap = null;
         this.installmentChargeData = null;
@@ -389,6 +399,7 @@ public class LoanChargeData {
         this.chargeOptions = null;
         this.chargePayable = false;
         this.loanId = null;
+        this.externalLoanId = ExternalId.empty();
         this.minCap = null;
         this.maxCap = null;
         this.installmentChargeData = null;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java
index b7e38e592..f61c454ff 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java
@@ -76,9 +76,10 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform
                     + "lc.loan_id as loanId, c.currency_code as currencyCode, oc.name as currencyName, " //
                     + "date(coalesce(dd.disbursedon_date,dd.expected_disburse_date)) as disbursementDate, " //
                     + "oc.decimal_places as currencyDecimalPlaces, oc.currency_multiplesof as inMultiplesOf, oc.display_symbol as currencyDisplaySymbol, " //
-                    + "oc.internationalized_name_code as currencyNameCode from m_charge c " //
+                    + "oc.internationalized_name_code as currencyNameCode, l.external_id as externalLoanId from m_charge c " //
                     + "join m_organisation_currency oc on c.currency_code = oc.code join m_loan_charge lc on lc.charge_id = c.id " //
-                    + "left join m_loan_tranche_disbursement_charge dc on dc.loan_charge_id=lc.id left join m_loan_disbursement_detail dd on dd.id=dc.disbursement_detail_id ";
+                    + "left join m_loan_tranche_disbursement_charge dc on dc.loan_charge_id=lc.id left join m_loan_disbursement_detail dd on dd.id=dc.disbursement_detail_id " //
+                    + " join m_loan l on lc.loan_id = l.id";
         }
 
         @Override
@@ -130,10 +131,12 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform
             }
             final String externalIdStr = rs.getString("externalId");
             final ExternalId externalId = ExternalIdFactory.produce(externalIdStr);
+            final String externalLoanIdStr = rs.getString("externalLoanId");
+            final ExternalId externalLoanId = ExternalIdFactory.produce(externalLoanIdStr);
 
             return new LoanChargeData(id, chargeId, name, currency, amount, amountPaid, amountWaived, amountWrittenOff, amountOutstanding,
                     chargeTimeType, submittedOnDate, dueAsOfDate, chargeCalculationType, percentageOf, amountPercentageAppliedTo, penalty,
-                    paymentMode, paid, waived, loanId, minCap, maxCap, amountOrPercentage, null, externalId);
+                    paymentMode, paid, waived, loanId, externalLoanId, minCap, maxCap, amountOrPercentage, null, externalId);
         }
     }
 
@@ -199,8 +202,8 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform
     private static final class LoanChargeMapperWithLoanId implements RowMapper<LoanChargeData> {
 
         public String schema() {
-            return " lc.id as id, lc.due_for_collection_as_of_date as dueAsOfDate, lc.amount_outstanding_derived as amountOutstanding, "
-                    + " lc.charge_time_enum as chargeTime, loan.id as loanId, lc.external_id as externalId from  m_loan_charge lc "
+            return " lc.id as id, lc.due_for_collection_as_of_date as dueAsOfDate, lc.amount_outstanding_derived as amountOutstanding, lc.submitted_on_date as submittedOnDate, "
+                    + " lc.charge_time_enum as chargeTime, loan.id as loanId, loan.external_id as externalLoanId, lc.external_id as externalId from  m_loan_charge lc "
                     + " join m_loan loan on loan.id = lc.loan_id ";
         }
 
@@ -209,14 +212,18 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform
 
             final Long id = rs.getLong("id");
             final LocalDate dueAsOfDate = JdbcSupport.getLocalDate(rs, "dueAsOfDate");
+            final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate");
             final Long loanId = rs.getLong("loanId");
             final BigDecimal amountOutstanding = rs.getBigDecimal("amountOutstanding");
             final int chargeTime = rs.getInt("chargeTime");
             final EnumOptionData chargeTimeType = ChargeEnumerations.chargeTimeType(chargeTime);
             final String externalIdStr = rs.getString("externalId");
             final ExternalId externalId = ExternalIdFactory.produce(externalIdStr);
+            final String externalLoanIdStr = rs.getString("externalLoanId");
+            final ExternalId externalLoanId = ExternalIdFactory.produce(externalLoanIdStr);
 
-            return new LoanChargeData(id, dueAsOfDate, amountOutstanding, chargeTimeType, loanId, null, externalId);
+            return new LoanChargeData(id, dueAsOfDate, submittedOnDate, amountOutstanding, chargeTimeType, loanId, externalLoanId, null,
+                    externalId);
         }
     }
 
@@ -313,7 +320,8 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform
             sb.append(" lc.charge_time_enum as chargeTime, ");
             sb.append(" sum(cp.amount) as amountAccrued, ");
             sb.append(" lc.is_penalty as penalty, ");
-            sb.append(" lc.due_for_collection_as_of_date as dueAsOfDate ");
+            sb.append(" lc.due_for_collection_as_of_date as dueAsOfDate, ");
+            sb.append(" lc.submitted_on_date as submittedOnDate ");
             sb.append(" from m_loan_charge lc ");
             sb.append(" left join ( ");
             sb.append(" select lcp.loan_charge_id, lcp.amount ");
@@ -342,12 +350,14 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform
             final EnumOptionData chargeTimeType = ChargeEnumerations.chargeTimeType(chargeTime);
 
             final LocalDate dueAsOfDate = JdbcSupport.getLocalDate(rs, "dueAsOfDate");
+            final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate");
             final boolean penalty = rs.getBoolean("penalty");
 
             final String externalIdStr = rs.getString("externalId");
             final ExternalId externalId = ExternalIdFactory.produce(externalIdStr);
 
-            return new LoanChargeData(id, chargeId, dueAsOfDate, chargeTimeType, amount, amountAccrued, amountWaived, penalty, externalId);
+            return new LoanChargeData(id, chargeId, dueAsOfDate, submittedOnDate, chargeTimeType, amount, amountAccrued, amountWaived,
+                    penalty, externalId);
         }
     }