saving , current and RD account code update

This commit is contained in:
Nitesh Yadav
2026-04-22 18:15:46 +05:30
parent 05c5adb034
commit 691a3fc471
8 changed files with 27487 additions and 13413 deletions
@@ -140,7 +140,7 @@ public class CurrentAccountTemplateReadPlatformServiceImpl implements CurrentAcc
final Collection<EnumOptionData> withdrawalFeeTypeOptions = this.dropdownReadPlatformService.retrievewithdrawalFeeTypeOptions();
final Collection<SavingsAccountTransactionData> transactions = null;
final Collection<ChargeData> productCharges = this.chargeReadPlatformService.retrieveSavingsProductCharges(productId);
final Collection<ChargeData> productCharges = this.chargeReadPlatformService.retrieveCurrentProductCharges(productId);
final Collection<SavingsAccountChargeData> charges = fromChargesToSavingsCharges(productCharges);
final boolean feeChargesOnly = false;
@@ -170,6 +170,44 @@ public class CurrentAccountTemplateReadPlatformServiceImpl implements CurrentAcc
interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions,
interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, transactions,
charges, chargeOptions);
// Re-apply CBS fields from full product data (withTemplateOptions creates a new object and loses setter fields)
final SavingsProductData productData = this.currentProductReadPlatformService.retrieveOne(productId);
if (productData != null) {
// Feature flags
template.setDormancyAlert(productData.getDormancyAlert() != null && productData.getDormancyAlert());
template.setBalanceSwapOption(productData.getBalanceSwapOption() != null && productData.getBalanceSwapOption());
template.setMsme(productData.getMsme() != null && productData.getMsme());
template.setNominationFacility(productData.getNominationFacility() != null && productData.getNominationFacility());
template.setAutoDebitFacility(productData.getAutoDebitFacility() != null && productData.getAutoDebitFacility());
template.setAutoPost(productData.getAutoPost() != null && productData.getAutoPost());
template.setFrequencyFixDay(productData.getFrequencyFixDay());
template.setLastInterestDate(productData.getLastInterestDate());
template.setInterestCalculateSelector(productData.getInterestCalculateSelector());
template.setAveragePeriod(productData.getAveragePeriod());
template.setAccountClosedZeroBalanceInDayClosing(
productData.getAccountClosedZeroBalanceInDayClosing() != null && productData.getAccountClosedZeroBalanceInDayClosing());
// Facility data
template.setAccountFacilityConfig(productData.getAccountFacilityConfig());
template.setAccountFacilityLimits(productData.getAccountFacilityLimits());
template.setDepositLimitKyc(productData.getDepositLimitKyc());
// Classification fields
template.setAccountType(productData.getAccountType());
template.setCustomerSegment(productData.getCustomerSegment());
template.setProductCode(productData.getProductCode());
template.setEffectiveDate(productData.getEffectiveDate());
template.setEffectiveTo(productData.getEffectiveTo());
template.setEndDate(productData.getEndDate());
template.setIntroducerRequired(productData.getIntroducerRequired());
template.setShareLinkingEnabled(productData.getShareLinkingEnabled());
// Settings fields
template.setEnableLockinPeriod(productData.getEnableLockinPeriod());
template.setBalanceFrequency(productData.getBalanceFrequency());
template.setAvgBalanceCalcPeriod(productData.getAvgBalanceCalcPeriod());
template.setValidForPeriod(productData.getValidForPeriod());
template.setOdAccountClosedZeroBalanceInDayClosing(
productData.getOdAccountClosedZeroBalanceInDayClosing() != null && productData.getOdAccountClosedZeroBalanceInDayClosing());
}
} else {
String clientName = null;
@@ -247,7 +285,22 @@ public class CurrentAccountTemplateReadPlatformServiceImpl implements CurrentAcc
sqlBuilder.append("cp.min_required_balance as minRequiredBalance, ");
sqlBuilder.append("cp.enforce_min_required_balance as enforceMinRequiredBalance, ");
sqlBuilder.append("0 as maxAllowedLienLimit, ");
sqlBuilder.append("0 as lienAllowed ");
sqlBuilder.append("0 as lienAllowed, ");
sqlBuilder.append("cp.dormancy_alert as dormancyAlert, ");
sqlBuilder.append("cp.balance_swap_option as balanceSwapOption, ");
sqlBuilder.append("cp.msme as msme, ");
sqlBuilder.append("cp.nomination_facility as nominationFacility, ");
sqlBuilder.append("cp.auto_debit_facility as autoDebitFacility, ");
sqlBuilder.append("cp.auto_post as autoPost, ");
sqlBuilder.append("cp.frequency_fix_day as frequencyFixDay, ");
sqlBuilder.append("cp.last_interest_date as lastInterestDate, ");
sqlBuilder.append("cp.interest_calculate_selector as interestCalculateSelector, ");
sqlBuilder.append("cp.average_period as averagePeriod, ");
sqlBuilder.append("cp.account_closed_zero_balance_in_day_closing as accountClosedZeroBalanceInDayClosing, ");
sqlBuilder.append("cp.is_dormancy_tracking_active as isDormancyTrackingActive, ");
sqlBuilder.append("cp.days_to_inactive as daysToInactive, ");
sqlBuilder.append("cp.days_to_dormancy as daysToDormancy, ");
sqlBuilder.append("cp.days_to_escheat as daysToEscheat ");
sqlBuilder.append("from m_current_product cp ");
sqlBuilder.append("join m_currency curr on curr.code = cp.currency_code ");
sqlBuilder.append("left join m_tax_group tg on tg.id = cp.tax_group_id ");
@@ -346,14 +399,26 @@ public class CurrentAccountTemplateReadPlatformServiceImpl implements CurrentAcc
final SavingsAccountSubStatusEnumData subStatus = null;
final String reasonForBlock = null;
final LocalDate lastActiveTransactionDate = null;
final boolean isDormancyTrackingActive = false;
final Integer daysToInactive = null;
final Integer daysToDormancy = null;
final Integer daysToEscheat = null;
final boolean isDormancyTrackingActive = rs.getBoolean("isDormancyTrackingActive");
final Integer daysToInactive = JdbcSupport.getInteger(rs, "daysToInactive");
final Integer daysToDormancy = JdbcSupport.getInteger(rs, "daysToDormancy");
final Integer daysToEscheat = JdbcSupport.getInteger(rs, "daysToEscheat");
final boolean dormancyAlert = rs.getBoolean("dormancyAlert");
final boolean balanceSwapOption = rs.getBoolean("balanceSwapOption");
final boolean msme = rs.getBoolean("msme");
final boolean nominationFacility = rs.getBoolean("nominationFacility");
final boolean autoDebitFacility = rs.getBoolean("autoDebitFacility");
final boolean autoPost = rs.getBoolean("autoPost");
final Integer frequencyFixDay = JdbcSupport.getInteger(rs, "frequencyFixDay");
final LocalDate lastInterestDate = JdbcSupport.getLocalDate(rs, "lastInterestDate");
final Integer interestCalculateSelector = JdbcSupport.getInteger(rs, "interestCalculateSelector");
final String averagePeriod = rs.getString("averagePeriod");
final boolean accountClosedZeroBalanceInDayClosing = rs.getBoolean("accountClosedZeroBalanceInDayClosing");
final SavingsAccountApplicationTimelineData timeline = SavingsAccountApplicationTimelineData.templateDefault();
final EnumOptionData depositType = null;
return SavingsAccountData.instance(null, null, depositType, null, groupId, groupName, clientId, clientName, productId,
final SavingsAccountData accountData = SavingsAccountData.instance(null, null, depositType, null, groupId, groupName, clientId, clientName, productId,
productName, fieldOfficerId, fieldOfficerName, status, subStatus, reasonForBlock, timeline, currency,
nominalAnnualIterestRate, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType,
interestCalculationDaysInYearType, minRequiredOpeningBalance, lockinPeriodFrequency, lockinPeriodFrequencyType,
@@ -361,6 +426,19 @@ public class CurrentAccountTemplateReadPlatformServiceImpl implements CurrentAcc
maxAllowedLienLimit, lienAllowed, minBalanceForInterestCalculation, onHoldFunds, nominalAnnualInterestRateOverdraft,
minOverdraftForInterestCalculation, withHoldTax, taxGroupData, lastActiveTransactionDate, isDormancyTrackingActive,
daysToInactive, daysToDormancy, daysToEscheat, savingsAmountOnHold);
accountData.setDormancyAlert(dormancyAlert);
accountData.setBalanceSwapOption(balanceSwapOption);
accountData.setMsme(msme);
accountData.setNominationFacility(nominationFacility);
accountData.setAutoDebitFacility(autoDebitFacility);
accountData.setAutoPost(autoPost);
accountData.setFrequencyFixDay(frequencyFixDay);
accountData.setLastInterestDate(lastInterestDate);
accountData.setInterestCalculateSelector(interestCalculateSelector);
accountData.setAveragePeriod(averagePeriod);
accountData.setAccountClosedZeroBalanceInDayClosing(accountClosedZeroBalanceInDayClosing);
return accountData;
}
}
@@ -396,13 +396,17 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead
template = FixedDepositAccountData.withInterestChart((FixedDepositAccountData) template, accountChart);
} else if (depositAccountType.isRecurringDeposit()) {
template = RecurringDepositAccountData.withTemplateOptions((RecurringDepositAccountData) template, productOptions,
// Save CBS fields from mapper result before factory methods create new objects
final RecurringDepositAccountData rdTemplateWithCbs = (RecurringDepositAccountData) template;
template = RecurringDepositAccountData.withTemplateOptions(rdTemplateWithCbs, productOptions,
fieldOfficerOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions,
interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions,
withdrawalFeeTypeOptions, transactions, charges, chargeOptions, preClosurePenalInterestOnTypeOptions,
periodFrequencyTypeOptions);
template = RecurringDepositAccountData.withInterestChartAndRecurringDetails((RecurringDepositAccountData) template,
accountChart, null, null);
// Re-apply CBS product fields lost during factory method object creation
((RecurringDepositAccountData) template).copyCbsFieldsFrom(rdTemplateWithCbs);
}
@@ -1475,10 +1479,33 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead
sqlBuilder.append("dptp.min_deposit_term_type_enum as minDepositTermTypeId, ");
sqlBuilder.append("dptp.max_deposit_term_type_enum as maxDepositTermTypeId, ");
sqlBuilder.append("dptp.in_multiples_of_deposit_term as inMultiplesOfDepositTerm, ");
sqlBuilder.append("dptp.in_multiples_of_deposit_term_type_enum as inMultiplesOfDepositTermTypeId ");
sqlBuilder.append("dptp.in_multiples_of_deposit_term_type_enum as inMultiplesOfDepositTermTypeId, ");
sqlBuilder.append("sa.account_type as accountType, sa.customer_segment as customerSegment, ");
sqlBuilder.append("sa.product_code as productCode, ");
sqlBuilder.append("sa.effective_date as effectiveDate, sa.effective_to as effectiveTo, sa.end_date as endDate, ");
sqlBuilder.append("sa.introducer_required as introducerRequired, sa.share_linking_enabled as shareLinkingEnabled, ");
sqlBuilder.append("sa.nomination_facility as nominationFacility, sa.dormancy_alert as dormancyAlert, ");
sqlBuilder.append("sa.interest_calculate_selector as interestCalculateSelector, ");
sqlBuilder.append("icv.code_value as interestCalculationTypeName, ");
sqlBuilder.append("sa.average_period as averagePeriod, ");
sqlBuilder.append("sa.auto_post as autoPost, sa.frequency_fix_day as frequencyFixDay, ");
sqlBuilder.append("sa.last_interest_date as lastInterestDate, sa.enable_lockin_period as enableLockinPeriod, ");
sqlBuilder.append("sa.balance_frequency as balanceFrequency, ");
sqlBuilder.append("sa.account_closed_zero_balance_in_day_closing as accountClosedZeroBalanceInDayClosing, ");
sqlBuilder.append("sa.balance_swap_option as balanceSwapOption, sa.msme as msme, ");
sqlBuilder.append("sa.auto_debit_facility as autoDebitFacility, sa.loan_facility as loanFacility, ");
sqlBuilder.append("sa.premature_withdrawal_option as prematureWithdrawalOption, sa.tenure_flexibility as tenureFlexibility, ");
sqlBuilder.append("sa.lien_marked as lienMarked, sa.maturity_instructions as maturityInstructions, ");
sqlBuilder.append("sa.credit_maturity_proceeds as creditMaturityProceeds, ");
sqlBuilder.append("sa.penalty_grace_period_missed_installments as penaltyGracePeriodMissedInstallments, ");
sqlBuilder.append("sa.panel_request_applicable as panelRequestApplicable, ");
sqlBuilder.append("sa.no_penalty_nominee_heir_closure as noPenaltyNomineeHeirClosure, ");
sqlBuilder.append("sa.deceased_settlement as deceasedSettlement, ");
sqlBuilder.append("sa.allow_debit_txn_after_due_date as allowDebitTxnAfterDueDate ");
sqlBuilder.append(this.selectTablesSql());
sqlBuilder.append("left join m_deposit_product_recurring_detail dprd on sa.id = dprd.savings_product_id ");
sqlBuilder.append("left join m_code_value icv on icv.id = sa.interest_calculate_selector ");
this.schemaSql = sqlBuilder.toString();
}
@@ -1527,12 +1554,52 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead
final BigDecimal totalOverdueAmount = null;
final Integer noOfOverdueInstallments = null;
return RecurringDepositAccountData.instance(depositAccountData, preClosurePenalApplicable, preClosurePenalInterest,
final RecurringDepositAccountData result = RecurringDepositAccountData.instance(depositAccountData,
preClosurePenalApplicable, preClosurePenalInterest,
preClosurePenalInterestOnType, minDepositTerm, maxDepositTerm, minDepositTermType, maxDepositTermType,
inMultiplesOfDepositTerm, inMultiplesOfDepositTermType, depositAmount, maturityAmount, maturityDate, depositPeriod,
depositPeriodFrequencyType, mandatoryRecommendedDepositAmount, onAccountClosureType, expectedFirstDepositOnDate,
totalOverdueAmount, noOfOverdueInstallments, isMandatoryDeposit, allowWithdrawal, adjustAdvanceTowardsFuturePayments,
isCalendarInherited);
// CBS product fields
result.setCbsProductFields(
rs.getString("accountType"),
rs.getString("customerSegment"),
rs.getString("productCode"),
JdbcSupport.getLocalDate(rs, "effectiveDate"),
JdbcSupport.getLocalDate(rs, "effectiveTo"),
JdbcSupport.getLocalDate(rs, "endDate"),
rs.getBoolean("introducerRequired"),
rs.getBoolean("shareLinkingEnabled"),
rs.getBoolean("nominationFacility"),
rs.getBoolean("dormancyAlert"),
JdbcSupport.getInteger(rs, "interestCalculateSelector"),
rs.getString("interestCalculationTypeName"),
rs.getString("averagePeriod"),
rs.getBoolean("autoPost"),
JdbcSupport.getInteger(rs, "frequencyFixDay"),
JdbcSupport.getLocalDate(rs, "lastInterestDate"),
rs.getBoolean("enableLockinPeriod"),
rs.getString("balanceFrequency"),
rs.getBoolean("accountClosedZeroBalanceInDayClosing"),
rs.getBoolean("balanceSwapOption"),
rs.getBoolean("msme"),
rs.getBoolean("autoDebitFacility"),
rs.getBoolean("loanFacility"),
rs.getBoolean("prematureWithdrawalOption"),
rs.getBoolean("tenureFlexibility"),
rs.getBoolean("lienMarked"),
rs.getBoolean("maturityInstructions"),
rs.getBoolean("creditMaturityProceeds"),
rs.getBoolean("penaltyGracePeriodMissedInstallments"),
rs.getBoolean("panelRequestApplicable"),
rs.getBoolean("noPenaltyNomineeHeirClosure"),
rs.getBoolean("deceasedSettlement"),
rs.getBoolean("allowDebitTxnAfterDueDate")
);
return result;
}
}