Skip to content

Commit d782e65

Browse files
sayhaedadamsaghy
authored andcommitted
FINERACT-2376: Unable to re-invest maturity amount or principal for fixed deposit at closing
1 parent cb7ead2 commit d782e65

File tree

10 files changed

+324
-7
lines changed

10 files changed

+324
-7
lines changed

fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ public Long handleFDAccountClosure(final FixedDepositAccount account, final Paym
212212
final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName);
213213
Long savingsTransactionId = null;
214214
account.postMaturityInterest(isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth);
215+
account.setClosedOnDate(closedDate);
215216
final Integer onAccountClosureId = command.integerValueOfParameterNamed(onAccountClosureIdParamName);
216217
final DepositAccountOnClosureType onClosureType = DepositAccountOnClosureType.fromInt(onAccountClosureId);
217218
if (onClosureType.isReinvest()) {
@@ -272,6 +273,7 @@ public Long handleFDAccountMaturityClosure(final FixedDepositAccount account, fi
272273
final MathContext mc = MathContext.DECIMAL64;
273274
Long savingsTransactionId = null;
274275
account.postMaturityInterest(isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth);
276+
account.setClosedOnDate(closedDate);
275277
final DepositAccountOnClosureType onClosureType = DepositAccountOnClosureType.fromInt(onAccountClosureId);
276278
if (onClosureType.isReinvest()) {
277279
BigDecimal reInvestAmount;
@@ -367,10 +369,11 @@ public Long handleRDAccountClosure(final RecurringDepositAccount account, final
367369
this.calendarInstanceRepository.save(calendarInstance);
368370
final Calendar calendar = calendarInstance.getCalendar();
369371
final PeriodFrequencyType frequencyType = CalendarFrequencyType.from(CalendarUtils.getFrequency(calendar.getRecurrence()));
372+
final Long relaxingDaysConfigForPivotDate = this.configurationDomainService.retrieveRelaxingDaysConfigForPivotDate();
370373
Integer frequency = CalendarUtils.getInterval(calendar.getRecurrence());
371374
frequency = frequency == -1 ? 1 : frequency;
372375
reinvestedDeposit.generateSchedule(frequencyType, frequency, calendar);
373-
reinvestedDeposit.processAccountUponActivation(fmt, postReversals);
376+
reinvestedDeposit.processAccountUponActivation(fmt, postReversals, relaxingDaysConfigForPivotDate);
374377
reinvestedDeposit.updateMaturityDateAndAmount(mc, isPreMatureClosure, isSavingsInterestPostingAtCurrentPeriodEnd,
375378
financialYearBeginningMonth);
376379
this.savingsAccountRepository.save(reinvestedDeposit);

fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -882,4 +882,7 @@ public boolean isMatured() {
882882
return SavingsAccountStatusType.MATURED.getValue().equals(this.status);
883883
}
884884

885+
public void setClosedOnDate(final LocalDate closedOnDate) {
886+
this.closedOnDate = closedOnDate;
887+
}
885888
}

fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -536,11 +536,11 @@ public Money activateWithBalance() {
536536
return Money.of(this.currency, this.minRequiredOpeningBalance);
537537
}
538538

539-
protected void processAccountUponActivation(final DateTimeFormatter fmt, final boolean postReversals) {
539+
protected void processAccountUponActivation(final DateTimeFormatter fmt, final boolean postReversals,
540+
final Long relaxingDaysConfigForPivotDate) {
540541
final Money minRequiredOpeningBalance = Money.of(this.currency, this.minRequiredOpeningBalance);
541542
final boolean backdatedTxnsAllowedTill = false;
542543
String refNo = null;
543-
final Long relaxingDaysConfigForPivotDate = this.configurationDomainService.retrieveRelaxingDaysConfigForPivotDate();
544544
if (minRequiredOpeningBalance.isGreaterThanZero()) {
545545
final SavingsAccountTransactionDTO transactionDTO = new SavingsAccountTransactionDTO(fmt, getActivationDate(),
546546
minRequiredOpeningBalance.getAmount(), null, null, accountType);

fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccrualWritePlatformServiceImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
3333
import org.apache.fineract.infrastructure.core.domain.LocalDateInterval;
3434
import org.apache.fineract.infrastructure.core.service.DateUtils;
35+
import org.apache.fineract.infrastructure.core.service.MathUtil;
3536
import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException;
3637
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
3738
import org.apache.fineract.organisation.monetary.domain.Money;
@@ -177,7 +178,9 @@ private void addAccrualTransactions(SavingsAccount savingsAccount, final LocalDa
177178
savingsAccount.office(), period.getPeriodInterval().endDate(), period.getInterestEarned().abs(), false, refNo);
178179
savingsAccountTransaction.setRunningBalance(period.getClosingBalance());
179180
savingsAccountTransaction.setOverdraftAmount(period.getInterestEarned());
180-
savingsAccount.addTransaction(savingsAccountTransaction);
181+
if (!MathUtil.isZero(savingsAccountTransaction.getAmount())) {
182+
savingsAccount.addTransaction(savingsAccountTransaction);
183+
}
181184
}
182185
}
183186

fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ protected void recalculateDailyBalances(final Money openingAccountBalance, final
10421042
if (MathUtil.isEmpty(overdraftAmount) && runningBalance.isLessThanZero() && !transaction.isAmountOnHold()) {
10431043
overdraftAmount = runningBalance.negated();
10441044
}
1045-
if (!calculateInterest || transaction.getId() == null) {
1045+
if (!calculateInterest || transaction.getId() == null || transaction.getOverdraftAmount(this.currency).isZero()) {
10461046
transaction.setOverdraftAmount(overdraftAmount);
10471047
} else if (!MathUtil.isEqualTo(overdraftAmount, transaction.getOverdraftAmount(this.currency))
10481048
&& !transaction.isAccrual()) {

fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularInterestPoster.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import lombok.extern.slf4j.Slf4j;
3737
import org.apache.fineract.accounting.journalentry.domain.JournalEntryType;
3838
import org.apache.fineract.infrastructure.core.service.DateUtils;
39+
import org.apache.fineract.infrastructure.core.service.MathUtil;
3940
import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException;
4041
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
4142
import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
@@ -106,7 +107,7 @@ private void batchUpdateJournalEntries(final List<SavingsAccountData> savingsAcc
106107

107108
List<SavingsAccountTransactionData> savingsAccountTransactionDataList = savingsAccountData.getSavingsAccountTransactionData();
108109
for (SavingsAccountTransactionData savingsAccountTransactionData : savingsAccountTransactionDataList) {
109-
if (savingsAccountTransactionData.getId() == null) {
110+
if (savingsAccountTransactionData.getId() == null && !MathUtil.isZero(savingsAccountTransactionData.getAmount())) {
110111
final String key = savingsAccountTransactionData.getRefNo();
111112
final Boolean isOverdraft = savingsAccountTransactionData.getIsOverdraft();
112113
final SavingsAccountTransactionData dataFromFetch = savingsAccountTransactionDataHashMap.get(key);
@@ -183,7 +184,7 @@ private void batchUpdate(final List<SavingsAccountData> savingsAccountDataList)
183184
auditTime, userId, savingsAccountData.getId() });
184185
List<SavingsAccountTransactionData> savingsAccountTransactionDataList = savingsAccountData.getSavingsAccountTransactionData();
185186
for (SavingsAccountTransactionData savingsAccountTransactionData : savingsAccountTransactionDataList) {
186-
if (savingsAccountTransactionData.getId() == null) {
187+
if (savingsAccountTransactionData.getId() == null && !MathUtil.isZero(savingsAccountTransactionData.getAmount())) {
187188
UUID uuid = UUID.randomUUID();
188189
savingsAccountTransactionData.setRefNo(uuid.toString());
189190
transRefNo.add(uuid.toString());

0 commit comments

Comments
 (0)