Skip to content

Commit

Permalink
Apply transfer validations in the undo activate deposits command
Browse files Browse the repository at this point in the history
  • Loading branch information
Jose Alberto Hernandez committed Feb 25, 2024
1 parent 7739856 commit cdd0303
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ public CommandProcessingResult executeCommand(final CommandWrapper wrapper, fina
result = commandSourceService.processCommand(findCommandHandler(wrapper), command, commandSource, user, isApprovedByChecker,
isMakerChecker);
} catch (Throwable t) { // NOSONAR
t.printStackTrace();
RuntimeException mappable = ErrorHandler.getMappable(t);
ErrorInfo errorInfo = commandSourceService.generateErrorInfo(mappable);
Integer statusCode = errorInfo.getStatusCode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,8 @@ public interface AccountTransferRepository

@Query("select att from AccountTransferTransaction att where att.fromLoanTransaction.id IN :loanTransactions and att.reversed=false")
List<AccountTransferTransaction> findByFromLoanTransactions(@Param("loanTransactions") Collection<Long> loanTransactions);

@Query("select count(att.id) from AccountTransferTransaction att where att.accountTransferDetails.fromSavingsAccount.id = :savingsId and att.reversed=false")
Long countByFromSavingsAccountId(@Param("savingsId") Long savingsId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
Expand Down Expand Up @@ -74,6 +75,7 @@
import org.apache.fineract.portfolio.savings.service.SavingsEnumerations;
import org.apache.fineract.useradministration.domain.AppUser;

@Slf4j
@Entity
@DiscriminatorValue("300")
public class RecurringDepositAccount extends SavingsAccount {
Expand Down Expand Up @@ -1010,6 +1012,10 @@ private void validateDomainRules(final DataValidatorBuilder baseDataValidator) {
final boolean isValidDepositPeriod = this.accountTermAndPreClosure.depositTermDetail()
.isDepositBetweenMinAndMax(depositStartDate(), calculateMaturityDate());
if (!isValidDepositPeriod) {
final Integer depositPeriodInDays = this.accountTermAndPreClosure.depositTermDetail().getDepositPeriodInDays(depositPeriod,
depositPeriodFrequencyType);
log.error("Recurring Deposit account with invalid deposit period {} {} : {} to {}", depositPeriodInDays,
depositPeriodFrequencyType.getCode(), depositStartDate(), calculateMaturityDate());
baseDataValidator.reset().parameter(depositPeriodParamName).value(depositPeriod)
.failWithCodeNoParameterAddedToErrorCode("deposit.period.not.between.min.and.max.deposit.term");
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import java.util.Set;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.accounting.journalentry.service.JournalEntryWritePlatformService;
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
Expand All @@ -61,6 +60,7 @@
import org.apache.fineract.portfolio.account.PortfolioAccountType;
import org.apache.fineract.portfolio.account.data.AccountTransferDTO;
import org.apache.fineract.portfolio.account.data.PortfolioAccountData;
import org.apache.fineract.portfolio.account.domain.AccountTransferRepository;
import org.apache.fineract.portfolio.account.domain.AccountTransferType;
import org.apache.fineract.portfolio.account.service.AccountAssociationsReadPlatformService;
import org.apache.fineract.portfolio.account.service.AccountTransfersReadPlatformService;
Expand Down Expand Up @@ -111,7 +111,6 @@
import org.apache.fineract.useradministration.domain.AppUser;
import org.springframework.transaction.annotation.Transactional;

@Slf4j
@Transactional
@RequiredArgsConstructor
public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements DepositAccountWritePlatformService {
Expand All @@ -137,6 +136,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo
private final WorkingDaysRepositoryWrapper workingDaysRepository;
private final DepositAccountOnHoldTransactionRepository depositAccountOnHoldTransactionRepository;
private final SavingsAccountDomainService savingsAccountDomainService;
private final AccountTransferRepository accountTransferRepository;

@Transactional
@Override
Expand Down Expand Up @@ -234,6 +234,11 @@ public CommandProcessingResult undoActivateFDAccount(Long savingsId, JsonCommand
DepositAccountType.FIXED_DEPOSIT);
checkClientOrGroupActive(account);

if (accountTransferRepository.countByFromSavingsAccountId(account.getId()) > 0) {
throw new PlatformServiceUnavailableException("error.msg.deposit.account.undo.activate.not.allowed", "Fixed deposit account "
+ account.getAccountNumber() + " undo activate not allowed as it involves some account transfers", savingsId);
}

final Set<Long> existingTransactionIds = new HashSet<>();
final Set<Long> existingReversedTransactionIds = new HashSet<>();
updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds);
Expand Down Expand Up @@ -261,6 +266,13 @@ public CommandProcessingResult undoActivateRDAccount(final Long savingsId, final
DepositAccountType.RECURRING_DEPOSIT);
checkClientOrGroupActive(account);

if (accountTransferRepository.countByFromSavingsAccountId(account.getId()) > 0) {
throw new PlatformServiceUnavailableException("error.msg.deposit.account.undo.activate.not.allowed",
"Recurring deposit account " + account.getAccountNumber()
+ " undo activate not allowed as it involves some account transfers",
savingsId);
}

final Map<String, Object> changes = account.undoActivate();

return new CommandProcessingResultBuilder() //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.apache.fineract.organisation.staff.service.StaffReadPlatformService;
import org.apache.fineract.organisation.workingdays.domain.WorkingDaysRepositoryWrapper;
import org.apache.fineract.portfolio.account.domain.AccountAssociationsRepository;
import org.apache.fineract.portfolio.account.domain.AccountTransferRepository;
import org.apache.fineract.portfolio.account.domain.StandingInstructionRepository;
import org.apache.fineract.portfolio.account.service.AccountAssociationsReadPlatformService;
import org.apache.fineract.portfolio.account.service.AccountTransfersReadPlatformService;
Expand Down Expand Up @@ -229,7 +230,7 @@ public DepositAccountWritePlatformService depositAccountWritePlatformService(Pla
ConfigurationDomainService configurationDomainService, HolidayRepositoryWrapper holidayRepository,
WorkingDaysRepositoryWrapper workingDaysRepository,
DepositAccountOnHoldTransactionRepository depositAccountOnHoldTransactionRepository,
SavingsAccountDomainService savingsAccountDomainService
SavingsAccountDomainService savingsAccountDomainService, AccountTransferRepository accountTransferRepository

) {
return new DepositAccountWritePlatformServiceJpaRepositoryImpl(context, savingAccountRepositoryWrapper,
Expand All @@ -238,7 +239,7 @@ public DepositAccountWritePlatformService depositAccountWritePlatformService(Pla
depositAccountDomainService, noteRepository, accountTransfersReadPlatformService, chargeRepository,
savingsAccountChargeRepository, accountAssociationsReadPlatformService, accountTransfersWritePlatformService,
calendarInstanceRepository, configurationDomainService, holidayRepository, workingDaysRepository,
depositAccountOnHoldTransactionRepository, savingsAccountDomainService);
depositAccountOnHoldTransactionRepository, savingsAccountDomainService, accountTransferRepository);
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,10 @@ public Integer inMultiplesOfDepositTermType() {
return this.inMultiplesOfDepositTermType;
}

public Integer getDepositPeriodInDays(final Integer depositPeriod, final SavingsPeriodFrequencyType depositPeriodFrequencyType) {
return this.convertToSafeDays(depositPeriod, depositPeriodFrequencyType);
}

public boolean isDepositBetweenMinAndMax(LocalDate depositStartDate, LocalDate depositEndDate) {
return isEqualOrGreaterThanMin(depositStartDate, depositEndDate) && isEqualOrLessThanMax(depositStartDate, depositEndDate);
}
Expand Down Expand Up @@ -263,4 +267,5 @@ public DepositTermDetail copy() {
return DepositTermDetail.createFrom(minDepositTerm, maxDepositTerm, minDepositTermType, maxDepositTermType,
inMultiplesOfDepositTerm, inMultiplesOfDepositTermType);
}

}

0 comments on commit cdd0303

Please sign in to comment.