FINERACT-1429:FD Interest Transfer on a backdated account (#1956)

This commit is contained in:
Shreyas S Kumar
2021-11-05 12:34:16 +05:30
committed by GitHub
parent 0d2f102c5a
commit a716dbb6f9
5 changed files with 55 additions and 5 deletions
@@ -102,4 +102,6 @@ public interface ConfigurationDomainService {
String getAccountMappingForPaymentType(); String getAccountMappingForPaymentType();
String getAccountMappingForCharge(); String getAccountMappingForCharge();
boolean isNextDayFixedDepositInterestTransferEnabledForPeriodEnd();
} }
@@ -393,4 +393,11 @@ public class ConfigurationDomainServiceJpa implements ConfigurationDomainService
return defaultValue; return defaultValue;
} }
@Override
public boolean isNextDayFixedDepositInterestTransferEnabledForPeriodEnd() {
final String propertyName = "fixed-deposit-transfer-interest-next-day-for-period-end-posting";
final GlobalConfigurationPropertyData property = getGlobalConfigurationPropertyData(propertyName);
return property.isEnabled();
}
} }
@@ -31,6 +31,7 @@ import java.time.format.DateTimeFormatter;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder;
@@ -80,6 +81,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer
private final AccountTransferDetailRepository accountTransferDetailRepository; private final AccountTransferDetailRepository accountTransferDetailRepository;
private final LoanReadPlatformService loanReadPlatformService; private final LoanReadPlatformService loanReadPlatformService;
private final GSIMRepositoy gsimRepository; private final GSIMRepositoy gsimRepository;
private final ConfigurationDomainService configurationDomainService;
@Autowired @Autowired
public AccountTransfersWritePlatformServiceImpl(final AccountTransfersDataValidator accountTransfersDataValidator, public AccountTransfersWritePlatformServiceImpl(final AccountTransfersDataValidator accountTransfersDataValidator,
@@ -88,7 +90,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer
final LoanAssembler loanAssembler, final LoanAccountDomainService loanAccountDomainService, final LoanAssembler loanAssembler, final LoanAccountDomainService loanAccountDomainService,
final SavingsAccountWritePlatformService savingsAccountWritePlatformService, final SavingsAccountWritePlatformService savingsAccountWritePlatformService,
final AccountTransferDetailRepository accountTransferDetailRepository, final LoanReadPlatformService loanReadPlatformService, final AccountTransferDetailRepository accountTransferDetailRepository, final LoanReadPlatformService loanReadPlatformService,
final GSIMRepositoy gsimRepository) { final GSIMRepositoy gsimRepository, ConfigurationDomainService configurationDomainService) {
this.accountTransfersDataValidator = accountTransfersDataValidator; this.accountTransfersDataValidator = accountTransfersDataValidator;
this.accountTransferAssembler = accountTransferAssembler; this.accountTransferAssembler = accountTransferAssembler;
this.accountTransferRepository = accountTransferRepository; this.accountTransferRepository = accountTransferRepository;
@@ -100,6 +102,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer
this.accountTransferDetailRepository = accountTransferDetailRepository; this.accountTransferDetailRepository = accountTransferDetailRepository;
this.loanReadPlatformService = loanReadPlatformService; this.loanReadPlatformService = loanReadPlatformService;
this.gsimRepository = gsimRepository; this.gsimRepository = gsimRepository;
this.configurationDomainService = configurationDomainService;
} }
@Transactional @Transactional
@@ -371,12 +374,19 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer
AccountTransferType.fromInt(accountTransferDTO.getTransferType()).isInterestTransfer(), AccountTransferType.fromInt(accountTransferDTO.getTransferType()).isInterestTransfer(),
accountTransferDTO.isExceptionForBalanceCheck()); accountTransferDTO.isExceptionForBalanceCheck());
LocalDate transactionDate = accountTransferDTO.getTransactionDate();
if (configurationDomainService.isSavingsInterestPostingAtCurrentPeriodEnd()
&& configurationDomainService.isNextDayFixedDepositInterestTransferEnabledForPeriodEnd()
&& AccountTransferType.fromInt(accountTransferDTO.getTransferType()).isInterestTransfer()) {
transactionDate = transactionDate.plusDays(1);
}
final SavingsAccountTransaction withdrawal = this.savingsAccountDomainService.handleWithdrawal(fromSavingsAccount, final SavingsAccountTransaction withdrawal = this.savingsAccountDomainService.handleWithdrawal(fromSavingsAccount,
accountTransferDTO.getFmt(), accountTransferDTO.getTransactionDate(), accountTransferDTO.getTransactionAmount(), accountTransferDTO.getFmt(), transactionDate, accountTransferDTO.getTransactionAmount(),
accountTransferDTO.getPaymentDetail(), transactionBooleanValues); accountTransferDTO.getPaymentDetail(), transactionBooleanValues);
final SavingsAccountTransaction deposit = this.savingsAccountDomainService.handleDeposit(toSavingsAccount, final SavingsAccountTransaction deposit = this.savingsAccountDomainService.handleDeposit(toSavingsAccount,
accountTransferDTO.getFmt(), accountTransferDTO.getTransactionDate(), accountTransferDTO.getTransactionAmount(), accountTransferDTO.getFmt(), transactionDate, accountTransferDTO.getTransactionAmount(),
accountTransferDTO.getPaymentDetail(), isAccountTransfer, isRegularTransaction); accountTransferDTO.getPaymentDetail(), isAccountTransfer, isRegularTransaction);
accountTransferDetails = this.accountTransferAssembler.assembleSavingsToSavingsTransfer(accountTransferDTO, fromSavingsAccount, accountTransferDetails = this.accountTransferAssembler.assembleSavingsToSavingsTransfer(accountTransferDTO, fromSavingsAccount,
@@ -0,0 +1,22 @@
--
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.
--
INSERT INTO `c_configuration` (`id`, `name`, `enabled`, `description`)
VALUES (NULL, 'fixed-deposit-transfer-interest-next-day-for-period-end-posting', '0', "Transfer fixed transfer interest next day(t+1) for period end posting");
@@ -89,8 +89,8 @@ public class GlobalConfigurationHelper {
ArrayList<HashMap> actualGlobalConfigurations = getAllGlobalConfigurations(requestSpec, responseSpec); ArrayList<HashMap> actualGlobalConfigurations = getAllGlobalConfigurations(requestSpec, responseSpec);
// There are currently 32 global configurations. // There are currently 32 global configurations.
Assertions.assertEquals(32, expectedGlobalConfigurations.size()); Assertions.assertEquals(33, expectedGlobalConfigurations.size());
Assertions.assertEquals(32, actualGlobalConfigurations.size()); Assertions.assertEquals(33, actualGlobalConfigurations.size());
for (int i = 0; i < expectedGlobalConfigurations.size(); i++) { for (int i = 0; i < expectedGlobalConfigurations.size(); i++) {
@@ -380,6 +380,15 @@ public class GlobalConfigurationHelper {
isAccountMappedForCharge.put("string_value", "Income"); isAccountMappedForCharge.put("string_value", "Income");
defaults.add(isAccountMappedForCharge); defaults.add(isAccountMappedForCharge);
HashMap<String, Object> isNextDayFixedDepositInterestTransferEnabledForPeriodEnd = new HashMap<>();
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("id", 37);
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("name",
"fixed-deposit-transfer-interest-next-day-for-period-end-posting");
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("value", 0);
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("enabled", false);
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("trapDoor", false);
defaults.add(isNextDayFixedDepositInterestTransferEnabledForPeriodEnd);
return defaults; return defaults;
} }