diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index 936b6173c..6b2cd40ce 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -16408,7 +16408,7 @@ Content-Type: application/json
Mandatory Fields |
| name, shortName, description, currencyCode, digitsAfterDecimal,inMultiplesOf,
- interestCompoundingPeriodType, interestCalculationType, interestCalculationDaysInYearType, minDepositTerm, minDepositTermTypeId, recurringDepositFrequency, recurringDepositFrequencyTypeId, accountingRule |
+ interestCompoundingPeriodType, interestCalculationType, interestCalculationDaysInYearType, minDepositTerm, minDepositTermTypeId, recurringDepositFrequency, recurringDepositFrequencyTypeId, accountingRule, depositAmount
@@ -16421,7 +16421,7 @@ Content-Type: application/json
Optional Fields |
- | lockinPeriodFrequency, lockinPeriodFrequencyType, maxDepositTerm, maxDepositTermTypeId, inMultiplesOfDepositTerm, inMultiplesOfDepositTermTypeId, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnTypeId, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, charges, charts |
+ | lockinPeriodFrequency, lockinPeriodFrequencyType, maxDepositTerm, maxDepositTermTypeId, inMultiplesOfDepositTerm, inMultiplesOfDepositTermTypeId, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnTypeId, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, charges, charts, minDepositAmount, maxDepositAmount |
@@ -16451,6 +16451,9 @@ Request Body:
"minDepositTermTypeId":1,
"maxDepositTerm":5,
"maxDepositTermTypeId":3,
+ depositAmount: "10000",
+ minDepositAmount: "100",
+ maxDepositAmount: "1000000",
"charts":[
{
"fromDate": "01 Jan 2014",
@@ -16593,6 +16596,9 @@ Request Body:
"code": "recurring.deposit.savingsPeriodFrequencyType.months",
"value": "Months"
},
+ "minDepositAmount":100.00,
+ "depositAmount":10000.00,
+ "maxDepositAmount":1000000.00,
"preClosurePenalApplicable":"true",
"preClosurePenalInterest":"1.75",
"preClosurePenalInterestOnType": {
@@ -20733,7 +20739,7 @@ No Request Body:
Mandatory Fields |
- | clientId or groupId, productId, submittedOnDate, recurringDepositAmount, depositPeriod, depositPeriodFrequencyId, recurringDepositFrequency, recurringDepositFrequencyTypeId |
+ | clientId or groupId, productId, submittedOnDate, recurringDepositAmount, depositPeriod, depositPeriodFrequencyId, recurringDepositFrequency, recurringDepositFrequencyTypeId, expectedFirstDepositOnDate |
@@ -20782,7 +20788,8 @@ Request Body:
"depositPeriod":"6",
"depositPeriodFrequencyId":"2",
"accountNo": "RD000023",
- "externalId": "RD-23"
+ "externalId": "RD-23",
+ expectedFirstDepositOnDate: "02 April 2014"
}
Full request: accountNo provided (must be unique), remaining details override details from recurring deposit product (except currency).
@@ -21615,6 +21622,11 @@ Request Body:
},
"recurringDepositAmount": 100,
"recurringDepositFrequency": 1,
+ "expectedFirstDepositOnDate": [
+ 2014,
+ 4,
+ 2
+ ],
"recurringDepositFrequencyType": {
"id": 2,
"code": "recurring.deposit.savingsPeriodFrequencyType.months",
diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/RecurringDepositTest.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/RecurringDepositTest.java
index 5c5e535f7..9cc084fe6 100644
--- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/RecurringDepositTest.java
+++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/RecurringDepositTest.java
@@ -9,8 +9,6 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
-import org.joda.time.DateTime;
-import org.joda.time.Months;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -85,6 +83,7 @@ public class RecurringDepositTest {
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
@@ -96,7 +95,7 @@ public class RecurringDepositTest {
Assert.assertNotNull(recurringDepositProductId);
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
HashMap recurringDepositAccountStatusHashMap = RecurringDepositAccountStatusChecker.getStatusOfRecurringDepositAccount(
@@ -157,6 +156,7 @@ public class RecurringDepositTest {
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
@@ -183,7 +183,7 @@ public class RecurringDepositTest {
Assert.assertNotNull(recurringDepositProductId);
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
HashMap recurringDepositAccountStatusHashMap = RecurringDepositAccountStatusChecker.getStatusOfRecurringDepositAccount(
@@ -261,6 +261,7 @@ public class RecurringDepositTest {
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
@@ -277,7 +278,7 @@ public class RecurringDepositTest {
this.responseSpec, recurringDepositProductId.toString());
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
HashMap recurringDepositAccountStatusHashMap = RecurringDepositAccountStatusChecker.getStatusOfRecurringDepositAccount(
@@ -327,8 +328,9 @@ public class RecurringDepositTest {
todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -1);
+ final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
- String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
Assert.assertNotNull(clientId);
@@ -337,14 +339,14 @@ public class RecurringDepositTest {
Assert.assertNotNull(recurringDepositProductId);
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
-
+
todaysDate.add(Calendar.DATE, -1);
- SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
HashMap modificationsHashMap = this.recurringDepositAccountHelper.updateRecurringDepositAccount(clientId.toString(),
- recurringDepositProductId.toString(), recurringDepositAccountId.toString(), VALID_FROM, VALID_TO, WHOLE_TERM, SUBMITTED_ON_DATE);
+ recurringDepositProductId.toString(), recurringDepositAccountId.toString(), VALID_FROM, VALID_TO, WHOLE_TERM,
+ SUBMITTED_ON_DATE);
Assert.assertTrue(modificationsHashMap.containsKey("submittedOnDate"));
}
@@ -367,6 +369,7 @@ public class RecurringDepositTest {
todaysDate.add(Calendar.MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
@@ -376,7 +379,7 @@ public class RecurringDepositTest {
Assert.assertNotNull(recurringDepositProductId);
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
HashMap recurringDepositAccountStatusHashMap = RecurringDepositAccountStatusChecker.getStatusOfRecurringDepositAccount(
@@ -410,6 +413,7 @@ public class RecurringDepositTest {
todaysDate.add(Calendar.MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String REJECTED_ON_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
@@ -419,7 +423,7 @@ public class RecurringDepositTest {
Assert.assertNotNull(recurringDepositProductId);
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
HashMap recurringDepositAccountStatusHashMap = RecurringDepositAccountStatusChecker.getStatusOfRecurringDepositAccount(
@@ -451,6 +455,7 @@ public class RecurringDepositTest {
todaysDate.add(Calendar.MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String WITHDRAWN_ON_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
@@ -460,7 +465,7 @@ public class RecurringDepositTest {
Assert.assertNotNull(recurringDepositProductId);
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
HashMap recurringDepositAccountStatusHashMap = RecurringDepositAccountStatusChecker.getStatusOfRecurringDepositAccount(
@@ -490,6 +495,7 @@ public class RecurringDepositTest {
todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
@@ -499,7 +505,7 @@ public class RecurringDepositTest {
Assert.assertNotNull(recurringDepositProductId);
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
HashMap recurringDepositAccountStatusHashMap = RecurringDepositAccountStatusChecker.getStatusOfRecurringDepositAccount(
@@ -536,6 +542,7 @@ public class RecurringDepositTest {
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
+ final String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
final String DEPOSIT_DATE = dateFormat.format(todaysDate.getTime());
@@ -547,7 +554,7 @@ public class RecurringDepositTest {
Assert.assertNotNull(recurringDepositProductId);
Integer recurringDepositAccountId = applyForRecurringDepositApplication(clientId.toString(), recurringDepositProductId.toString(),
- VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM);
+ VALID_FROM, VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(recurringDepositAccountId);
HashMap recurringDepositAccountStatusHashMap = RecurringDepositAccountStatusChecker.getStatusOfRecurringDepositAccount(
@@ -584,10 +591,12 @@ public class RecurringDepositTest {
}
private Integer applyForRecurringDepositApplication(final String clientID, final String productID, final String validFrom,
- final String validTo, final String submittedOnDate, final String penalInterestType) {
+ final String validTo, final String submittedOnDate, final String penalInterestType, final String expectedFirstDepositOnDate) {
System.out.println("--------------------------------APPLYING FOR RECURRING DEPOSIT ACCOUNT --------------------------------");
- final String recurringDepositApplicationJSON = new RecurringDepositAccountHelper(this.requestSpec, this.responseSpec) //
- .withSubmittedOnDate(submittedOnDate).build(clientID, productID, validFrom, validTo, penalInterestType);
+ final String recurringDepositApplicationJSON = new RecurringDepositAccountHelper(this.requestSpec, this.responseSpec)
+ //
+ .withSubmittedOnDate(submittedOnDate).withExpectedFirstDepositOnDate(expectedFirstDepositOnDate)
+ .build(clientID, productID, validFrom, validTo, penalInterestType);
return this.recurringDepositAccountHelper.applyRecurringDepositApplication(recurringDepositApplicationJSON, this.requestSpec,
this.responseSpec);
}
diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/recurringdeposit/RecurringDepositAccountHelper.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/recurringdeposit/RecurringDepositAccountHelper.java
index 3e24c6ea8..4cd32968c 100644
--- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/recurringdeposit/RecurringDepositAccountHelper.java
+++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/recurringdeposit/RecurringDepositAccountHelper.java
@@ -1,21 +1,14 @@
package org.mifosplatform.integrationtests.common.recurringdeposit;
-import static org.junit.Assert.assertEquals;
-
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.mifosplatform.integrationtests.common.CommonConstants;
import org.mifosplatform.integrationtests.common.Utils;
-import org.mifosplatform.integrationtests.common.accounting.Account;
-import org.mifosplatform.integrationtests.common.accounting.Account.AccountType;
-import org.mifosplatform.integrationtests.common.savings.SavingsApplicationTestBuilder;
import com.google.gson.Gson;
import com.jayway.restassured.specification.RequestSpecification;
@@ -63,18 +56,18 @@ public class RecurringDepositAccountHelper {
private static final String DAYS_360 = "360";
private static final String DAYS_365 = "365";
- private String interestCompoundingPeriodType = MONTHLY;
- private String interestPostingPeriodType = MONTHLY;
- private String interestCalculationType = INTEREST_CALCULATION_USING_DAILY_BALANCE;
- private String lockinPeriodFrequency = "6";
- private String lockingPeriodFrequencyType = MONTHS;
- private String minDepositTerm = "6";
- private String minDepositTermTypeId = MONTHS;
- private String maxDepositTerm = "10";
- private String maxDepositTermTypeId = YEARS;
- private String inMultiplesOfDepositTerm = "2";
- private String inMultiplesOfDepositTermTypeId = MONTHS;
- private String preClosurePenalInterest = "2";
+ private final String interestCompoundingPeriodType = MONTHLY;
+ private final String interestPostingPeriodType = MONTHLY;
+ private final String interestCalculationType = INTEREST_CALCULATION_USING_DAILY_BALANCE;
+ private final String lockinPeriodFrequency = "6";
+ private final String lockingPeriodFrequencyType = MONTHS;
+ private final String minDepositTerm = "6";
+ private final String minDepositTermTypeId = MONTHS;
+ private final String maxDepositTerm = "10";
+ private final String maxDepositTermTypeId = YEARS;
+ private final String inMultiplesOfDepositTerm = "2";
+ private final String inMultiplesOfDepositTermTypeId = MONTHS;
+ private final String preClosurePenalInterest = "2";
private final boolean preClosurePenalApplicable = true;
private final boolean isActiveChart = true;
private final String currencyCode = USD;
@@ -86,6 +79,7 @@ public class RecurringDepositAccountHelper {
private final String recurringDepositFrequencyTypeId = MONTHS;
private final String recurringDepositAmount = "2000";
private String submittedOnDate = "";
+ private String expectedFirstDepositOnDate = "";
public String build(final String clientId, final String productId, final String validFrom, final String validTo,
final String penalInterestType) {
@@ -167,6 +161,7 @@ public class RecurringDepositAccountHelper {
map.put("recurringDepositFrequency", this.recurringDepositFrequency);
map.put("recurringDepositFrequencyTypeId", this.recurringDepositFrequencyTypeId);
map.put("recurringDepositAmount", this.recurringDepositAmount);
+ map.put("expectedFirstDepositOnDate", this.expectedFirstDepositOnDate);
String recurringDepositAccountJson = new Gson().toJson(map);
System.out.println(recurringDepositAccountJson);
@@ -215,8 +210,9 @@ public class RecurringDepositAccountHelper {
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DATE, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
- final String recurringDepositApplicationJSON = new RecurringDepositAccountHelper(this.requestSpec, this.responseSpec) //
- .withSubmittedOnDate(submittedOnDate) //
+ final String EXPECTED_FIRST_DEPOSIT_ON_ON_DATE = SUBMITTED_ON_DATE;
+ final String recurringDepositApplicationJSON = new RecurringDepositAccountHelper(this.requestSpec, this.responseSpec)
+ .withSubmittedOnDate(SUBMITTED_ON_DATE).withExpectedFirstDepositOnDate(EXPECTED_FIRST_DEPOSIT_ON_ON_DATE)
.build(clientID, productID, validFrom, validTo, penalInterestType);
return Utils.performServerPut(this.requestSpec, this.responseSpec, RECURRING_DEPOSIT_ACCOUNT_URL + "/" + accountID + "?"
@@ -425,4 +421,9 @@ public class RecurringDepositAccountHelper {
return this;
}
+ public RecurringDepositAccountHelper withExpectedFirstDepositOnDate(final String recurringDepositApplicationExpectedFirstDepositOnDate) {
+ this.expectedFirstDepositOnDate = recurringDepositApplicationExpectedFirstDepositOnDate;
+ return this;
+ }
+
}
\ No newline at end of file
diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/recurringdeposit/RecurringDepositProductHelper.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/recurringdeposit/RecurringDepositProductHelper.java
index 5a592a716..b4e2ca1a4 100644
--- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/recurringdeposit/RecurringDepositProductHelper.java
+++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/recurringdeposit/RecurringDepositProductHelper.java
@@ -1,18 +1,12 @@
package org.mifosplatform.integrationtests.common.recurringdeposit;
-import static org.junit.Assert.assertEquals;
-
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.mifosplatform.integrationtests.common.CommonConstants;
import org.mifosplatform.integrationtests.common.Utils;
import org.mifosplatform.integrationtests.common.accounting.Account;
-import org.mifosplatform.integrationtests.common.accounting.Account.AccountType;
-import org.mifosplatform.integrationtests.common.savings.SavingsProductHelper;
import com.google.gson.Gson;
import com.jayway.restassured.specification.RequestSpecification;
@@ -56,23 +50,23 @@ public class RecurringDepositProductHelper {
private static final String VOLUNTARY = "1";
private static final String MANDATORY = "2";
- private String name = Utils.randomNameGenerator("RECURRING_DEPOSIT_PRODUCT_", 6);
- private String shortName = Utils.randomNameGenerator("", 4);
- private String description = Utils.randomNameGenerator("", 20);
- private String interestCompoundingPeriodType = MONTHLY;
- private String interestPostingPeriodType = MONTHLY;
- private String interestCalculationType = INTEREST_CALCULATION_USING_DAILY_BALANCE;
+ private final String name = Utils.randomNameGenerator("RECURRING_DEPOSIT_PRODUCT_", 6);
+ private final String shortName = Utils.randomNameGenerator("", 4);
+ private final String description = Utils.randomNameGenerator("", 20);
+ private final String interestCompoundingPeriodType = MONTHLY;
+ private final String interestPostingPeriodType = MONTHLY;
+ private final String interestCalculationType = INTEREST_CALCULATION_USING_DAILY_BALANCE;
private String accountingRule = NONE;
- private String lockinPeriodFrequency = "6";
- private String lockingPeriodFrequencyType = MONTHS;
- private String minDepositTerm = "6";
- private String minDepositTermTypeId = MONTHS;
- private String maxDepositTerm = "10";
- private String maxDepositTermTypeId = YEARS;
- private String inMultiplesOfDepositTerm = "2";
- private String inMultiplesOfDepositTermTypeId = MONTHS;
- private String preClosurePenalInterest = "2";
- private String preClosurePenalInterestOnTypeId = WHOLE_TERM;
+ private final String lockinPeriodFrequency = "6";
+ private final String lockingPeriodFrequencyType = MONTHS;
+ private final String minDepositTerm = "6";
+ private final String minDepositTermTypeId = MONTHS;
+ private final String maxDepositTerm = "10";
+ private final String maxDepositTermTypeId = YEARS;
+ private final String inMultiplesOfDepositTerm = "2";
+ private final String inMultiplesOfDepositTermTypeId = MONTHS;
+ private final String preClosurePenalInterest = "2";
+ private final String preClosurePenalInterestOnTypeId = WHOLE_TERM;
private final boolean preClosurePenalApplicable = true;
private final String currencyCode = USD;
private final String interestCalculationDaysInYearType = DAYS_365;
@@ -80,6 +74,8 @@ public class RecurringDepositProductHelper {
private final String recurringDepositFrequencyTypeId = MONTHS;
private final String recurringDepositFrequency = "1";
private final String depositAmount = "100000";
+ private final String minDepositAmount = "100";
+ private final String maxDepositAmount = "1000000";
private Account[] accountList = null;
public String build(final String validFrom, final String validTo) {
@@ -160,6 +156,9 @@ public class RecurringDepositProductHelper {
map.put("recurringDepositFrequencyTypeId", this.recurringDepositFrequencyTypeId);
map.put("depositAmount", this.depositAmount);
map.put("recurringDepositFrequency", this.recurringDepositFrequency);
+ map.put("depositAmount", this.depositAmount);
+ map.put("minDepositAmount", this.minDepositAmount);
+ map.put("maxDepositAmount", this.maxDepositAmount);
if (this.accountingRule.equals(CASH_BASED)) {
map.putAll(getAccountMappingForCashBased());
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingWritePlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingWritePlatformService.java
index 45fe3a200..2dea582eb 100755
--- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingWritePlatformService.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingWritePlatformService.java
@@ -8,17 +8,18 @@ package org.mifosplatform.accounting.producttoaccountmapping.service;
import java.util.Map;
import org.mifosplatform.infrastructure.core.api.JsonCommand;
+import org.mifosplatform.portfolio.savings.DepositAccountType;
public interface ProductToGLAccountMappingWritePlatformService {
void createLoanProductToGLAccountMapping(Long loanProductId, JsonCommand command);
- void createSavingProductToGLAccountMapping(Long savingProductId, JsonCommand command);
+ void createSavingProductToGLAccountMapping(Long savingProductId, JsonCommand command, DepositAccountType accountType);
Map updateLoanProductToGLAccountMapping(Long loanProductId, JsonCommand command, boolean accountingRuleChanged,
int accountingRuleTypeId);
Map updateSavingsProductToGLAccountMapping(Long savingsProductId, JsonCommand command, boolean accountingRuleChanged,
- int accountingRuleTypeId);
+ int accountingRuleTypeId, DepositAccountType accountType);
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingWritePlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingWritePlatformServiceImpl.java
index 55e28825a..956172f4c 100755
--- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingWritePlatformServiceImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingWritePlatformServiceImpl.java
@@ -20,6 +20,7 @@ import org.mifosplatform.accounting.common.AccountingRuleType;
import org.mifosplatform.accounting.producttoaccountmapping.serialization.ProductToGLAccountMappingFromApiJsonDeserializer;
import org.mifosplatform.infrastructure.core.api.JsonCommand;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
+import org.mifosplatform.portfolio.savings.DepositAccountType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -151,7 +152,7 @@ public class ProductToGLAccountMappingWritePlatformServiceImpl implements Produc
@Override
@Transactional
- public void createSavingProductToGLAccountMapping(final Long savingProductId, final JsonCommand command) {
+ public void createSavingProductToGLAccountMapping(final Long savingProductId, final JsonCommand command, DepositAccountType accountType) {
final JsonElement element = this.fromApiJsonHelper.parse(command.json());
final Integer accountingRuleTypeId = this.fromApiJsonHelper.extractIntegerNamed(accountingRuleParamName, element,
Locale.getDefault());
@@ -165,9 +166,12 @@ public class ProductToGLAccountMappingWritePlatformServiceImpl implements Produc
this.savingsProductToGLAccountMappingHelper.saveSavingsToAssetAccountMapping(element,
SAVINGS_PRODUCT_ACCOUNTING_PARAMS.SAVINGS_REFERENCE.getValue(), savingProductId,
CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE.getValue());
- this.savingsProductToGLAccountMappingHelper.saveSavingsToAssetAccountMapping(element,
- SAVINGS_PRODUCT_ACCOUNTING_PARAMS.OVERDRAFT_PORTFOLIO_CONTROL.getValue(), savingProductId,
- CASH_ACCOUNTS_FOR_SAVINGS.OVERDRAFT_PORTFOLIO_CONTROL.getValue());
+
+ if (!accountType.equals(DepositAccountType.RECURRING_DEPOSIT) && !accountType.equals(DepositAccountType.FIXED_DEPOSIT)) {
+ this.savingsProductToGLAccountMappingHelper.saveSavingsToAssetAccountMapping(element,
+ SAVINGS_PRODUCT_ACCOUNTING_PARAMS.OVERDRAFT_PORTFOLIO_CONTROL.getValue(), savingProductId,
+ CASH_ACCOUNTS_FOR_SAVINGS.OVERDRAFT_PORTFOLIO_CONTROL.getValue());
+ }
// income
this.savingsProductToGLAccountMappingHelper.saveSavingsToIncomeAccountMapping(element,
@@ -187,9 +191,11 @@ public class ProductToGLAccountMappingWritePlatformServiceImpl implements Produc
SAVINGS_PRODUCT_ACCOUNTING_PARAMS.INTEREST_ON_SAVINGS.getValue(), savingProductId,
CASH_ACCOUNTS_FOR_SAVINGS.INTEREST_ON_SAVINGS.getValue());
- this.savingsProductToGLAccountMappingHelper.saveSavingsToExpenseAccountMapping(element,
- SAVINGS_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue(), savingProductId,
- CASH_ACCOUNTS_FOR_SAVINGS.LOSSES_WRITTEN_OFF.getValue());
+ if (!accountType.equals(DepositAccountType.RECURRING_DEPOSIT) && !accountType.equals(DepositAccountType.FIXED_DEPOSIT)) {
+ this.savingsProductToGLAccountMappingHelper.saveSavingsToExpenseAccountMapping(element,
+ SAVINGS_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue(), savingProductId,
+ CASH_ACCOUNTS_FOR_SAVINGS.LOSSES_WRITTEN_OFF.getValue());
+ }
// liability
this.savingsProductToGLAccountMappingHelper.saveSavingsToLiabilityAccountMapping(element,
@@ -243,7 +249,7 @@ public class ProductToGLAccountMappingWritePlatformServiceImpl implements Produc
@Override
public Map updateSavingsProductToGLAccountMapping(final Long savingsProductId, final JsonCommand command,
- final boolean accountingRuleChanged, final int accountingRuleTypeId) {
+ final boolean accountingRuleChanged, final int accountingRuleTypeId, final DepositAccountType accountType) {
/***
* Variable tracks all accounting mapping properties that have been
* updated
@@ -259,7 +265,7 @@ public class ProductToGLAccountMappingWritePlatformServiceImpl implements Produc
if (accountingRuleChanged) {
this.deserializer.validateForSavingsProductCreate(command.json());
this.savingsProductToGLAccountMappingHelper.deleteSavingsProductToGLAccountMapping(savingsProductId);
- createSavingProductToGLAccountMapping(savingsProductId, command);
+ createSavingProductToGLAccountMapping(savingsProductId, command, accountType);
changes = this.savingsProductToGLAccountMappingHelper.populateChangesForNewSavingsProductToGLAccountMappingCreation(element,
accountingRuleType);
}/*** else examine and update individual changes ***/
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/interestratechart/domain/InterestRateChartSlabFields.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/interestratechart/domain/InterestRateChartSlabFields.java
index 8dd42a168..bd6c13df5 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/interestratechart/domain/InterestRateChartSlabFields.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/interestratechart/domain/InterestRateChartSlabFields.java
@@ -211,11 +211,13 @@ public class InterestRateChartSlabFields {
}
public boolean isAmountBetween(final BigDecimal depositAmount) {
+ boolean returnValue = true;
if (amountRangeFrom != null && amountRangeTo != null) {
- return depositAmount.compareTo(amountRangeFrom) >= 0 && depositAmount.compareTo(amountRangeTo) <= 0;
+ returnValue = depositAmount.compareTo(amountRangeFrom) >= 0 && depositAmount.compareTo(amountRangeTo) <= 0;
} else if (amountRangeFrom != null) {
- return depositAmount.compareTo(amountRangeFrom) >= 0;
+ returnValue = depositAmount.compareTo(amountRangeFrom) >= 0;
} else if (amountRangeTo != null) { return depositAmount.compareTo(amountRangeTo) <= 0; }
- return true;
+ return returnValue;
}
+
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/DepositAccountDomainServiceJpa.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/DepositAccountDomainServiceJpa.java
index 3b4e873ea..4be91950c 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/DepositAccountDomainServiceJpa.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/DepositAccountDomainServiceJpa.java
@@ -217,9 +217,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi
}
this.savingsAccountRepository.save(account);
- if (withdrawal != null) {
- saveTransactionToGenerateTransactionId(withdrawal);
- }
+
postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds);
return withdrawal;
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/DepositAccountTermAndPreClosure.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/DepositAccountTermAndPreClosure.java
index e315ac03d..46149de9e 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/DepositAccountTermAndPreClosure.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/DepositAccountTermAndPreClosure.java
@@ -8,6 +8,7 @@ package org.mifosplatform.portfolio.savings.domain;
import static org.mifosplatform.portfolio.savings.DepositsApiConstants.depositAmountParamName;
import static org.mifosplatform.portfolio.savings.DepositsApiConstants.depositPeriodFrequencyIdParamName;
import static org.mifosplatform.portfolio.savings.DepositsApiConstants.depositPeriodParamName;
+import static org.mifosplatform.portfolio.savings.DepositsApiConstants.expectedFirstDepositOnDateParamName;
import java.math.BigDecimal;
import java.util.Date;
@@ -32,6 +33,7 @@ import org.mifosplatform.infrastructure.core.api.JsonCommand;
import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder;
import org.mifosplatform.organisation.monetary.domain.Money;
import org.mifosplatform.portfolio.savings.DepositAccountOnClosureType;
+import org.mifosplatform.portfolio.savings.SavingsApiConstants;
import org.mifosplatform.portfolio.savings.SavingsPeriodFrequencyType;
import org.mifosplatform.portfolio.savings.service.SavingsEnumerations;
import org.springframework.data.jpa.domain.AbstractPersistable;
@@ -122,6 +124,18 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistable {
actualChanges.put(depositPeriodFrequencyIdParamName, SavingsEnumerations.depositTermFrequencyType(newValue));
this.depositPeriodFrequency = newValue;
}
+
+ final String localeAsInput = command.locale();
+ final String dateFormat = command.dateFormat();
+
+ if (command.isChangeInLocalDateParameterNamed(expectedFirstDepositOnDateParamName, getExpectedFirstDepositOnDate())) {
+ final LocalDate newValue = command.localDateValueOfParameterNamed(expectedFirstDepositOnDateParamName);
+ final String newValueAsString = command.stringValueOfParameterNamed(expectedFirstDepositOnDateParamName);
+ actualChanges.put(expectedFirstDepositOnDateParamName, newValueAsString);
+ actualChanges.put(SavingsApiConstants.localeParamName, localeAsInput);
+ actualChanges.put(SavingsApiConstants.dateFormatParamName, dateFormat);
+ this.expectedFirstDepositOnDate = newValue.toDate();
+ }
if (this.preClosureDetail != null) {
actualChanges.putAll(this.preClosureDetail.update(command, baseDataValidator));
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java
index 713af76da..9c7dc3e14 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java
@@ -584,7 +584,7 @@ public class SavingsAccount extends AbstractPersistable {
LocalDate endOfBalanceDate = interestPostingUpToDate;
for (int i = accountTransactionsSorted.size() - 1; i >= 0; i--) {
final SavingsAccountTransaction transaction = accountTransactionsSorted.get(i);
- if (transaction.isNotReversed()) {
+ if (transaction.isNotReversed() && !transaction.isInterestPostingAndNotReversed()) {
transaction.updateCumulativeBalanceAndDates(this.currency, endOfBalanceDate);
// this transactions transaction date is end of balance date for
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/FixedDepositProductWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/FixedDepositProductWritePlatformServiceJpaRepositoryImpl.java
index 3b6a485fe..04ed826dd 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/FixedDepositProductWritePlatformServiceJpaRepositoryImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/FixedDepositProductWritePlatformServiceJpaRepositoryImpl.java
@@ -19,6 +19,7 @@ import org.mifosplatform.infrastructure.core.exception.PlatformDataIntegrityExce
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.charge.domain.Charge;
import org.mifosplatform.portfolio.interestratechart.service.InterestRateChartAssembler;
+import org.mifosplatform.portfolio.savings.DepositAccountType;
import org.mifosplatform.portfolio.savings.data.DepositProductDataValidator;
import org.mifosplatform.portfolio.savings.domain.DepositProductAssembler;
import org.mifosplatform.portfolio.savings.domain.FixedDepositProduct;
@@ -70,7 +71,7 @@ public class FixedDepositProductWritePlatformServiceJpaRepositoryImpl implements
this.fixedDepositProductRepository.save(product);
// save accounting mappings
- this.accountMappingWritePlatformService.createSavingProductToGLAccountMapping(product.getId(), command);
+ this.accountMappingWritePlatformService.createSavingProductToGLAccountMapping(product.getId(), command, DepositAccountType.FIXED_DEPOSIT);
return new CommandProcessingResultBuilder() //
.withEntityId(product.getId()) //
@@ -107,7 +108,7 @@ public class FixedDepositProductWritePlatformServiceJpaRepositoryImpl implements
// accounting related changes
final boolean accountingTypeChanged = changes.containsKey(accountingRuleParamName);
final Map accountingMappingChanges = this.accountMappingWritePlatformService
- .updateSavingsProductToGLAccountMapping(product.getId(), command, accountingTypeChanged, product.getAccountingType());
+ .updateSavingsProductToGLAccountMapping(product.getId(), command, accountingTypeChanged, product.getAccountingType(), DepositAccountType.FIXED_DEPOSIT);
changes.putAll(accountingMappingChanges);
if (!changes.isEmpty()) {
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/RecurringDepositProductWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/RecurringDepositProductWritePlatformServiceJpaRepositoryImpl.java
index 65d32f7ba..380b57cef 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/RecurringDepositProductWritePlatformServiceJpaRepositoryImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/RecurringDepositProductWritePlatformServiceJpaRepositoryImpl.java
@@ -19,6 +19,7 @@ import org.mifosplatform.infrastructure.core.exception.PlatformDataIntegrityExce
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.charge.domain.Charge;
import org.mifosplatform.portfolio.interestratechart.service.InterestRateChartAssembler;
+import org.mifosplatform.portfolio.savings.DepositAccountType;
import org.mifosplatform.portfolio.savings.data.DepositProductDataValidator;
import org.mifosplatform.portfolio.savings.domain.DepositProductAssembler;
import org.mifosplatform.portfolio.savings.domain.RecurringDepositProduct;
@@ -70,7 +71,7 @@ public class RecurringDepositProductWritePlatformServiceJpaRepositoryImpl implem
this.recurringDepositProductRepository.save(product);
// save accounting mappings
- this.accountMappingWritePlatformService.createSavingProductToGLAccountMapping(product.getId(), command);
+ this.accountMappingWritePlatformService.createSavingProductToGLAccountMapping(product.getId(), command, DepositAccountType.RECURRING_DEPOSIT);
return new CommandProcessingResultBuilder() //
.withEntityId(product.getId()) //
@@ -107,7 +108,7 @@ public class RecurringDepositProductWritePlatformServiceJpaRepositoryImpl implem
// accounting related changes
final boolean accountingTypeChanged = changes.containsKey(accountingRuleParamName);
final Map accountingMappingChanges = this.accountMappingWritePlatformService
- .updateSavingsProductToGLAccountMapping(product.getId(), command, accountingTypeChanged, product.getAccountingType());
+ .updateSavingsProductToGLAccountMapping(product.getId(), command, accountingTypeChanged, product.getAccountingType(), DepositAccountType.RECURRING_DEPOSIT);
changes.putAll(accountingMappingChanges);
if (!changes.isEmpty()) {
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsProductWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsProductWritePlatformServiceJpaRepositoryImpl.java
index 1f41ed907..a6e951ae0 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsProductWritePlatformServiceJpaRepositoryImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsProductWritePlatformServiceJpaRepositoryImpl.java
@@ -18,6 +18,7 @@ import org.mifosplatform.infrastructure.core.data.CommandProcessingResultBuilder
import org.mifosplatform.infrastructure.core.exception.PlatformDataIntegrityException;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.charge.domain.Charge;
+import org.mifosplatform.portfolio.savings.DepositAccountType;
import org.mifosplatform.portfolio.savings.data.SavingsProductDataValidator;
import org.mifosplatform.portfolio.savings.domain.SavingsProduct;
import org.mifosplatform.portfolio.savings.domain.SavingsProductAssembler;
@@ -93,7 +94,7 @@ public class SavingsProductWritePlatformServiceJpaRepositoryImpl implements Savi
this.savingProductRepository.save(product);
// save accounting mappings
- this.accountMappingWritePlatformService.createSavingProductToGLAccountMapping(product.getId(), command);
+ this.accountMappingWritePlatformService.createSavingProductToGLAccountMapping(product.getId(), command, DepositAccountType.SAVINGS_DEPOSIT);
return new CommandProcessingResultBuilder() //
.withEntityId(product.getId()) //
@@ -129,7 +130,7 @@ public class SavingsProductWritePlatformServiceJpaRepositoryImpl implements Savi
// accounting related changes
final boolean accountingTypeChanged = changes.containsKey(accountingRuleParamName);
final Map accountingMappingChanges = this.accountMappingWritePlatformService
- .updateSavingsProductToGLAccountMapping(product.getId(), command, accountingTypeChanged, product.getAccountingType());
+ .updateSavingsProductToGLAccountMapping(product.getId(), command, accountingTypeChanged, product.getAccountingType(), DepositAccountType.SAVINGS_DEPOSIT);
changes.putAll(accountingMappingChanges);
if (!changes.isEmpty()) {