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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+