FINERACT-1694: Add submittedOnDate and externalLoanId to LoanChargeData event

This commit is contained in:
Adam Saghy
2023-02-06 10:20:11 +01:00
committed by Arnold Gálovics
parent 3f800ab3ad
commit e08675ed54
3 changed files with 59 additions and 22 deletions
@@ -232,6 +232,22 @@
"null", "null",
"string" "string"
] ]
},
{
"default": null,
"name": "externalLoanId",
"type": [
"null",
"string"
]
},
{
"default": null,
"name": "submittedOnDate",
"type": [
"null",
"string"
]
} }
] ]
} }
@@ -92,9 +92,11 @@ public class LoanChargeData {
private final ExternalId externalId; private final ExternalId externalId;
private final ExternalId externalLoanId;
public static LoanChargeData template(final Collection<ChargeData> chargeOptions) { 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, return new LoanChargeData(null, null, null, null, null, null, null, null, chargeOptions, false, null, false, false, null,
null, null, null, ExternalId.empty()); 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 EnumOptionData chargeCalculationType, final boolean penalty, final EnumOptionData chargePaymentMode,
final BigDecimal minCap, final BigDecimal maxCap, final ExternalId externalId) { final BigDecimal minCap, final BigDecimal maxCap, final ExternalId externalId) {
return new LoanChargeData(null, chargeId, name, currency, amount, percentage, chargeTimeType, chargeCalculationType, null, penalty, 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, 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 BigDecimal amountOutstanding, final EnumOptionData chargeTimeType, final LocalDate submittedOnDate,
final LocalDate dueDate, final EnumOptionData chargeCalculationType, final BigDecimal percentage, final LocalDate dueDate, final EnumOptionData chargeCalculationType, final BigDecimal percentage,
final BigDecimal amountPercentageAppliedTo, final boolean penalty, final EnumOptionData chargePaymentMode, final boolean paid, 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, final boolean waived, final Long loanId, final ExternalId externalLoanId, final BigDecimal minCap, final BigDecimal maxCap,
Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) { final BigDecimal amountOrPercentage, Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
this.id = id; this.id = id;
this.chargeId = chargeId; this.chargeId = chargeId;
this.name = name; this.name = name;
@@ -153,13 +155,14 @@ public class LoanChargeData {
this.amountAccrued = null; this.amountAccrued = null;
this.amountUnrecognized = null; this.amountUnrecognized = null;
this.externalId = externalId; this.externalId = externalId;
this.externalLoanId = externalLoanId;
} }
private LoanChargeData(final Long id, final Long chargeId, final String name, final CurrencyData currency, final BigDecimal amount, 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 BigDecimal percentage, final EnumOptionData chargeTimeType, final EnumOptionData chargeCalculationType,
final Collection<ChargeData> chargeOptions, final boolean penalty, final EnumOptionData chargePaymentMode, final boolean paid, 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, final boolean waived, final Long loanId, final ExternalId externalLoanId, final BigDecimal minCap, final BigDecimal maxCap,
Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) { final BigDecimal amountOrPercentage, Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
this.id = id; this.id = id;
this.chargeId = chargeId; this.chargeId = chargeId;
this.name = name; this.name = name;
@@ -193,6 +196,7 @@ public class LoanChargeData {
this.chargeOptions = chargeOptions; this.chargeOptions = chargeOptions;
this.chargePayable = isChargePayable(); this.chargePayable = isChargePayable();
this.loanId = loanId; this.loanId = loanId;
this.externalLoanId = externalLoanId;
this.minCap = minCap; this.minCap = minCap;
this.maxCap = maxCap; this.maxCap = maxCap;
this.installmentChargeData = installmentChargeData; this.installmentChargeData = installmentChargeData;
@@ -201,8 +205,9 @@ public class LoanChargeData {
this.externalId = externalId; this.externalId = externalId;
} }
public LoanChargeData(final Long id, final LocalDate dueAsOfDate, final BigDecimal amountOutstanding, EnumOptionData chargeTimeType, public LoanChargeData(final Long id, final LocalDate dueAsOfDate, final LocalDate submittedOnDate, final BigDecimal amountOutstanding,
final Long loanId, Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) { EnumOptionData chargeTimeType, final Long loanId, final ExternalId externalLoanId,
Collection<LoanInstallmentChargeData> installmentChargeData, final ExternalId externalId) {
this.id = id; this.id = id;
this.chargeId = null; this.chargeId = null;
this.name = null; this.name = null;
@@ -213,7 +218,7 @@ public class LoanChargeData {
this.amountWrittenOff = null; this.amountWrittenOff = null;
this.amountOutstanding = amountOutstanding; this.amountOutstanding = amountOutstanding;
this.chargeTimeType = chargeTimeType; this.chargeTimeType = chargeTimeType;
this.submittedOnDate = null; this.submittedOnDate = submittedOnDate;
this.dueDate = dueAsOfDate; this.dueDate = dueAsOfDate;
this.chargeCalculationType = null; this.chargeCalculationType = null;
this.percentage = null; this.percentage = null;
@@ -232,11 +237,12 @@ public class LoanChargeData {
this.amountAccrued = null; this.amountAccrued = null;
this.amountUnrecognized = null; this.amountUnrecognized = null;
this.externalId = externalId; this.externalId = externalId;
this.externalLoanId = externalLoanId;
} }
public LoanChargeData(final Long id, final Long chargeId, final LocalDate dueAsOfDate, EnumOptionData chargeTimeType, public LoanChargeData(final Long id, final Long chargeId, final LocalDate dueAsOfDate, final LocalDate submittedOnDate,
final BigDecimal amount, final BigDecimal amountAccrued, final BigDecimal amountWaived, final boolean penalty, EnumOptionData chargeTimeType, final BigDecimal amount, final BigDecimal amountAccrued, final BigDecimal amountWaived,
final ExternalId externalId) { final boolean penalty, final ExternalId externalId) {
this.id = id; this.id = id;
this.chargeId = chargeId; this.chargeId = chargeId;
this.name = null; this.name = null;
@@ -247,7 +253,7 @@ public class LoanChargeData {
this.amountWrittenOff = null; this.amountWrittenOff = null;
this.amountOutstanding = null; this.amountOutstanding = null;
this.chargeTimeType = chargeTimeType; this.chargeTimeType = chargeTimeType;
this.submittedOnDate = null; this.submittedOnDate = submittedOnDate;
this.dueDate = dueAsOfDate; this.dueDate = dueAsOfDate;
this.chargeCalculationType = null; this.chargeCalculationType = null;
this.percentage = null; this.percentage = null;
@@ -260,6 +266,7 @@ public class LoanChargeData {
this.chargeOptions = null; this.chargeOptions = null;
this.chargePayable = false; this.chargePayable = false;
this.loanId = null; this.loanId = null;
this.externalLoanId = ExternalId.empty();
this.minCap = null; this.minCap = null;
this.maxCap = null; this.maxCap = null;
this.installmentChargeData = null; this.installmentChargeData = null;
@@ -292,6 +299,7 @@ public class LoanChargeData {
this.chargeOptions = null; this.chargeOptions = null;
this.chargePayable = false; this.chargePayable = false;
this.loanId = null; this.loanId = null;
this.externalLoanId = ExternalId.empty();
this.minCap = null; this.minCap = null;
this.maxCap = null; this.maxCap = null;
this.installmentChargeData = null; this.installmentChargeData = null;
@@ -326,6 +334,7 @@ public class LoanChargeData {
this.chargeOptions = chargeData.chargeOptions; this.chargeOptions = chargeData.chargeOptions;
this.chargePayable = chargeData.chargePayable; this.chargePayable = chargeData.chargePayable;
this.loanId = chargeData.loanId; this.loanId = chargeData.loanId;
this.externalLoanId = chargeData.externalLoanId;
this.installmentChargeData = installmentChargeData; this.installmentChargeData = installmentChargeData;
this.amountAccrued = chargeData.amountAccrued; this.amountAccrued = chargeData.amountAccrued;
this.amountUnrecognized = chargeData.amountUnrecognized; this.amountUnrecognized = chargeData.amountUnrecognized;
@@ -357,6 +366,7 @@ public class LoanChargeData {
this.chargeOptions = null; this.chargeOptions = null;
this.chargePayable = false; this.chargePayable = false;
this.loanId = null; this.loanId = null;
this.externalLoanId = ExternalId.empty();
this.minCap = null; this.minCap = null;
this.maxCap = null; this.maxCap = null;
this.installmentChargeData = null; this.installmentChargeData = null;
@@ -389,6 +399,7 @@ public class LoanChargeData {
this.chargeOptions = null; this.chargeOptions = null;
this.chargePayable = false; this.chargePayable = false;
this.loanId = null; this.loanId = null;
this.externalLoanId = ExternalId.empty();
this.minCap = null; this.minCap = null;
this.maxCap = null; this.maxCap = null;
this.installmentChargeData = null; this.installmentChargeData = null;
@@ -76,9 +76,10 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform
+ "lc.loan_id as loanId, c.currency_code as currencyCode, oc.name as currencyName, " // + "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, " // + "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.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 " // + "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 @Override
@@ -130,10 +131,12 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform
} }
final String externalIdStr = rs.getString("externalId"); final String externalIdStr = rs.getString("externalId");
final ExternalId externalId = ExternalIdFactory.produce(externalIdStr); 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, return new LoanChargeData(id, chargeId, name, currency, amount, amountPaid, amountWaived, amountWrittenOff, amountOutstanding,
chargeTimeType, submittedOnDate, dueAsOfDate, chargeCalculationType, percentageOf, amountPercentageAppliedTo, penalty, 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> { private static final class LoanChargeMapperWithLoanId implements RowMapper<LoanChargeData> {
public String schema() { public String schema() {
return " lc.id as id, lc.due_for_collection_as_of_date as dueAsOfDate, lc.amount_outstanding_derived as amountOutstanding, " 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, lc.external_id as externalId from m_loan_charge lc " + " 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 "; + " 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 Long id = rs.getLong("id");
final LocalDate dueAsOfDate = JdbcSupport.getLocalDate(rs, "dueAsOfDate"); final LocalDate dueAsOfDate = JdbcSupport.getLocalDate(rs, "dueAsOfDate");
final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate");
final Long loanId = rs.getLong("loanId"); final Long loanId = rs.getLong("loanId");
final BigDecimal amountOutstanding = rs.getBigDecimal("amountOutstanding"); final BigDecimal amountOutstanding = rs.getBigDecimal("amountOutstanding");
final int chargeTime = rs.getInt("chargeTime"); final int chargeTime = rs.getInt("chargeTime");
final EnumOptionData chargeTimeType = ChargeEnumerations.chargeTimeType(chargeTime); final EnumOptionData chargeTimeType = ChargeEnumerations.chargeTimeType(chargeTime);
final String externalIdStr = rs.getString("externalId"); final String externalIdStr = rs.getString("externalId");
final ExternalId externalId = ExternalIdFactory.produce(externalIdStr); 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(" lc.charge_time_enum as chargeTime, ");
sb.append(" sum(cp.amount) as amountAccrued, "); sb.append(" sum(cp.amount) as amountAccrued, ");
sb.append(" lc.is_penalty as penalty, "); 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(" from m_loan_charge lc ");
sb.append(" left join ( "); sb.append(" left join ( ");
sb.append(" select lcp.loan_charge_id, lcp.amount "); 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 EnumOptionData chargeTimeType = ChargeEnumerations.chargeTimeType(chargeTime);
final LocalDate dueAsOfDate = JdbcSupport.getLocalDate(rs, "dueAsOfDate"); final LocalDate dueAsOfDate = JdbcSupport.getLocalDate(rs, "dueAsOfDate");
final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate");
final boolean penalty = rs.getBoolean("penalty"); final boolean penalty = rs.getBoolean("penalty");
final String externalIdStr = rs.getString("externalId"); final String externalIdStr = rs.getString("externalId");
final ExternalId externalId = ExternalIdFactory.produce(externalIdStr); 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);
} }
} }