diff --git a/fineract-current-product/src/main/java/org/apache/fineract/portfolio/currentaccount/domain/CurrentAccount.java b/fineract-current-product/src/main/java/org/apache/fineract/portfolio/currentaccount/domain/CurrentAccount.java index 9ec8a520c..1a013ee43 100644 --- a/fineract-current-product/src/main/java/org/apache/fineract/portfolio/currentaccount/domain/CurrentAccount.java +++ b/fineract-current-product/src/main/java/org/apache/fineract/portfolio/currentaccount/domain/CurrentAccount.java @@ -304,6 +304,9 @@ public class CurrentAccount extends AbstractAuditableCustom { @Column(name = "od_account_closed_zero_balance_in_day_closing") private boolean odAccountClosedZeroBalanceInDayClosing = false; + @Column(name = "is_linking_enable", nullable = false) + private boolean shareLinkingEnabled = false; + // Relationships @OneToMany(mappedBy = "currentAccount", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @@ -406,4 +409,7 @@ public class CurrentAccount extends AbstractAuditableCustom { public void setNominalAnnualInterestRateOverdraft(java.math.BigDecimal val) { this.nominalAnnualInterestRateOverdraft = val; } public void setWithdrawalFeeForTransfer(boolean val) { this.withdrawalFeeForTransfer = val; } public void setMinOverdraftForInterestCalculation(java.math.BigDecimal val) { this.minOverdraftForInterestCalculation = val; } + + public boolean isShareLinkingEnabled() { return shareLinkingEnabled; } + public void setShareLinkingEnabled(boolean shareLinkingEnabled) { this.shareLinkingEnabled = shareLinkingEnabled; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountAssembler.java index 3199914b7..571ad5d98 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountAssembler.java @@ -42,6 +42,8 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.specialC import static org.apache.fineract.portfolio.savings.SavingsApiConstants.weakerSectionParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.nominationFacilityParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.autoDebitFacilityParamName; +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.introducerRequiredParamName; +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.shareLinkingEnabledParamName; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.isSeniorCitizenParamName; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.seniorCitizenInterestRateParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.allowOverdraftParamName; @@ -395,6 +397,16 @@ public class SavingsAccountAssembler { if (command.parameterExists(autoDebitFacilityParamName)) { account.setAutoDebitFacility(this.fromApiJsonHelper.extractBooleanNamed(autoDebitFacilityParamName, element)); } + if (command.parameterExists(introducerRequiredParamName)) { + account.setIntroducerRequired(this.fromApiJsonHelper.extractBooleanNamed(introducerRequiredParamName, element)); + } else if (account.savingsProduct() != null) { + account.setIntroducerRequired(account.savingsProduct().isIntroducerRequired()); + } + if (command.parameterExists(shareLinkingEnabledParamName)) { + account.setShareLinkingEnabled(this.fromApiJsonHelper.extractBooleanNamed(shareLinkingEnabledParamName, element)); + } else if (account.savingsProduct() != null) { + account.setShareLinkingEnabled(account.savingsProduct().isShareLinkingEnabled()); + } // Senior citizen rate — runs after validateDomainRules so it is the final persisted value if (command.parameterExists(isSeniorCitizenParamName)) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/CurrentAccountReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/CurrentAccountReadPlatformServiceImpl.java index 64dc5ec48..37d489877 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/CurrentAccountReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/CurrentAccountReadPlatformServiceImpl.java @@ -443,6 +443,7 @@ public class CurrentAccountReadPlatformServiceImpl implements CurrentAccountRead out.put("msme", row.get("msme")); out.put("autoDebitFacility", row.get("auto_debit_facility")); out.put("balanceSwapOption", row.get("balance_swap_option")); + out.put("shareLinkingEnabled", row.get("is_linking_enable")); out.put("establishmentDate", row.get("establishment_date")); out.put("startOperationDate", row.get("start_operation_date")); out.put("nonIndividualClient", row.get("is_non_individual_client")); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/CurrentAccountWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/CurrentAccountWritePlatformServiceImpl.java index 3f87c8cf1..fe636ce74 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/CurrentAccountWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/CurrentAccountWritePlatformServiceImpl.java @@ -140,6 +140,10 @@ public class CurrentAccountWritePlatformServiceImpl implements CurrentAccountWri product.getInterestCalculateSelector(), product.getAveragePeriod(), product.getAvgBalanceCalcPeriod()); + boolean shareLinkingEnabled = json.has("shareLinkingEnabled") && !json.get("shareLinkingEnabled").isJsonNull() + ? json.get("shareLinkingEnabled").getAsBoolean() : product.isShareLinkingEnabled(); + account.setShareLinkingEnabled(shareLinkingEnabled); + // Save CBS account type (descriptive name: "Standard Account", "Basic Account", etc.) if (cbsAccountType != null) account.setCbsAccountType(cbsAccountType); @@ -422,6 +426,8 @@ public class CurrentAccountWritePlatformServiceImpl implements CurrentAccountWri account.setBalanceSwapOption(json.get("balanceSwapOption").getAsBoolean()); if (json.has("autoDebitFacility") && !json.get("autoDebitFacility").isJsonNull()) account.setAutoDebitFacility(json.get("autoDebitFacility").getAsBoolean()); + if (json.has("shareLinkingEnabled") && !json.get("shareLinkingEnabled").isJsonNull()) + account.setShareLinkingEnabled(json.get("shareLinkingEnabled").getAsBoolean()); if (json.has("introducerClientId") && !json.get("introducerClientId").isJsonNull()) account.setIntroducerClientId(json.get("introducerClientId").getAsLong()); if (json.has("introducerName") && !json.get("introducerName").isJsonNull()) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java index 886b7b959..50ca2d653 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java @@ -863,6 +863,8 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead sqlBuilder.append("sp.msme as msme, "); sqlBuilder.append("COALESCE(sa.nomination_facility, sp.nomination_facility) as nominationFacility, "); sqlBuilder.append("COALESCE(sa.auto_debit_facility, sp.auto_debit_facility) as autoDebitFacility, "); + sqlBuilder.append("COALESCE(sa.introducer_required, sp.introducer_required) as introducerRequired, "); + sqlBuilder.append("COALESCE(sa.share_linking_enabled, sp.share_linking_enabled) as shareLinkingEnabled, "); // Facility config fields sqlBuilder.append("safc.atm_facility as atmFacility, "); sqlBuilder.append("safc.atm_withdrawal_facility as atmWithdrawalFacility, "); @@ -1118,6 +1120,8 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead accountData.setMsme(rs.getObject("msme") != null ? rs.getBoolean("msme") : null); accountData.setNominationFacility(rs.getObject("nominationFacility") != null ? rs.getBoolean("nominationFacility") : null); accountData.setAutoDebitFacility(rs.getObject("autoDebitFacility") != null ? rs.getBoolean("autoDebitFacility") : null); + accountData.setIntroducerRequired(rs.getObject("introducerRequired") != null ? rs.getBoolean("introducerRequired") : null); + accountData.setShareLinkingEnabled(rs.getObject("shareLinkingEnabled") != null ? rs.getBoolean("shareLinkingEnabled") : null); // Nominee as parsed map final String nomineeDataStr = rs.getString("nomineeData"); diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml index b25b0f775..14d4ccb1f 100644 --- a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml +++ b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml @@ -366,4 +366,5 @@ + diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0339_add_share_linking_enabled_to_current_account.xml b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0339_add_share_linking_enabled_to_current_account.xml new file mode 100644 index 000000000..0f70ede28 --- /dev/null +++ b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0339_add_share_linking_enabled_to_current_account.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountConstant.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountConstant.java index 85b32925e..599ac65c7 100644 --- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountConstant.java +++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountConstant.java @@ -48,7 +48,7 @@ public class SavingsAccountConstant extends SavingsApiConstants { introducerIdParamName, introducerNameParamName, introducerCifNumberParamName, nomineeParamName, "nominees", linkedAccountIdParamName, linkedAccountTypeParamName, linkedAccountNoParamName, accountFacilityConfigParamName, jointHoldersParamName, - balanceSwapOptionParamName, msmeParamName, autoDebitFacilityParamName)); + balanceSwapOptionParamName, msmeParamName, autoDebitFacilityParamName, introducerRequiredParamName, shareLinkingEnabledParamName)); /** * These parameters will match the class level parameters of {@link SavingsAccountData}. Where possible, we try to diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java index aa728ff7f..3e9f3d31d 100644 --- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java +++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java @@ -34,6 +34,8 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.nominalA import static org.apache.fineract.portfolio.savings.SavingsApiConstants.overdraftLimitParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withHoldTaxParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withdrawalFeeForTransfersParamName; +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.introducerRequiredParamName; +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.shareLinkingEnabledParamName; import com.google.gson.JsonArray; import jakarta.persistence.CascadeType; @@ -1852,6 +1854,18 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom baseDataValidator.reset().parameter(withHoldTaxParamName).failWithCode("not.supported.for.this.account"); } } + + if (command.isChangeInBooleanParameterNamed(introducerRequiredParamName, this.introducerRequired)) { + final boolean newValue = command.booleanPrimitiveValueOfParameterNamed(introducerRequiredParamName); + actualChanges.put(introducerRequiredParamName, newValue); + this.introducerRequired = newValue; + } + + if (command.isChangeInBooleanParameterNamed(shareLinkingEnabledParamName, this.shareLinkingEnabled)) { + final boolean newValue = command.booleanPrimitiveValueOfParameterNamed(shareLinkingEnabledParamName); + actualChanges.put(shareLinkingEnabledParamName, newValue); + this.shareLinkingEnabled = newValue; + } validateLockinDetails(baseDataValidator); esnureOverdraftLimitsSetForOverdraftAccounts(); } @@ -3972,6 +3986,12 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom @Column(name = "linked_account_no", length = 50) private String linkedAccountNo; + @Column(name = "introducer_required", nullable = false, columnDefinition = "boolean default false") + private Boolean introducerRequired = false; + + @Column(name = "share_linking_enabled", nullable = false, columnDefinition = "boolean default false") + private Boolean shareLinkingEnabled = false; + @Column(name = "nomination_facility", nullable = false, columnDefinition = "boolean default false") private Boolean nominationFacility = false; @@ -4057,6 +4077,12 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom public Boolean getAutoDebitFacility() { return autoDebitFacility; } public void setAutoDebitFacility(Boolean v) { this.autoDebitFacility = v; } + public Boolean getIntroducerRequired() { return introducerRequired; } + public void setIntroducerRequired(Boolean v) { this.introducerRequired = v; } + + public Boolean getShareLinkingEnabled() { return shareLinkingEnabled; } + public void setShareLinkingEnabled(Boolean v) { this.shareLinkingEnabled = v; } + public boolean isSeniorCitizen() { return isSeniorCitizen; } public void setSeniorCitizen(boolean v) { this.isSeniorCitizen = v; } diff --git a/fineract-savings/src/main/resources/db/changelog/tenant/module/savings/parts/module-changelog-master.xml b/fineract-savings/src/main/resources/db/changelog/tenant/module/savings/parts/module-changelog-master.xml index f8c193c0b..2a50be19e 100644 --- a/fineract-savings/src/main/resources/db/changelog/tenant/module/savings/parts/module-changelog-master.xml +++ b/fineract-savings/src/main/resources/db/changelog/tenant/module/savings/parts/module-changelog-master.xml @@ -38,4 +38,5 @@ + diff --git a/fineract-savings/src/main/resources/db/changelog/tenant/module/savings/parts/parts/2016_add_share_linking_enabled_to_savings_account.xml b/fineract-savings/src/main/resources/db/changelog/tenant/module/savings/parts/parts/2016_add_share_linking_enabled_to_savings_account.xml new file mode 100644 index 000000000..54f7cdbb2 --- /dev/null +++ b/fineract-savings/src/main/resources/db/changelog/tenant/module/savings/parts/parts/2016_add_share_linking_enabled_to_savings_account.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + +