From 652059c24693f9c10ddcc025de49e45f4cf18fbc Mon Sep 17 00:00:00 2001 From: satish-conflux Date: Fri, 24 Feb 2017 15:51:56 +0530 Subject: [PATCH] FINERACT-365 : The 'Transactions' tab showing wrong balance in RD account --- .../DepositAccountDomainServiceJpa.java | 21 +++++++++++++++---- .../domain/RecurringDepositAccount.java | 12 ++++++++++- .../SavingsAccountDomainServiceJpa.java | 2 +- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java index 32d12bec3..ac277fb08 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java @@ -149,16 +149,29 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi transactionAmount, paymentDetail, isAccountTransfer, isRegularTransaction); final Set existingTransactionIds = new HashSet<>(); final Set existingReversedTransactionIds = new HashSet<>(); - updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds); - account.processAccountUponActivation(isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth, user); - this.savingsAccountRepository.saveAndFlush(account); + final boolean isAnyActivationChargesDue = isAnyActivationChargesDue(account); + if(isAnyActivationChargesDue){ + updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds); + account.processAccountUponActivation(isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth, user); + this.savingsAccountRepository.saveAndFlush(account); + } account.handleScheduleInstallments(deposit); account.updateMaturityDateAndAmount(mc, isPreMatureClosure, isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth); account.updateOverduePayments(DateUtils.getLocalDateOfTenant()); - postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds, isAccountTransfer); + if(isAnyActivationChargesDue){ + postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds, isAccountTransfer); + } return deposit; } + private boolean isAnyActivationChargesDue(final RecurringDepositAccount account) { + for (final SavingsAccountCharge savingsAccountCharge : account.charges()) { + if (savingsAccountCharge.isSavingsActivation() && savingsAccountCharge.amoutOutstanding() != null + && savingsAccountCharge.amoutOutstanding().compareTo(BigDecimal.ZERO) > 0) { return true; } + } + return false; + } + @Transactional @Override public Long handleFDAccountClosure(final FixedDepositAccount account, final PaymentDetail paymentDetail, final AppUser user, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java index 76668a4e4..9b020279e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java @@ -370,11 +370,21 @@ public class RecurringDepositAccount extends SavingsAccount { List allTransactions = new ArrayList<>(); // add existing transactions allTransactions.addAll(retreiveOrderedNonInterestPostingTransactions()); + LocalDate latestTransactionDate = null; + for (final SavingsAccountTransaction installment : allTransactions) { + if(latestTransactionDate == null || latestTransactionDate.isBefore(installment.getTransactionLocalDate())){ + latestTransactionDate = installment.getTransactionLocalDate(); + } + } if (generateFutureTransactions) { for (RecurringDepositScheduleInstallment installment : depositScheduleInstallments()) { if (installment.isPrincipalNotCompleted(getCurrency())) { + LocalDate dueDate = installment.dueDate(); + if(latestTransactionDate != null && dueDate.isBefore(latestTransactionDate)){ + dueDate = latestTransactionDate; + } final SavingsAccountTransaction transaction = SavingsAccountTransaction.deposit(null, office(), null, - installment.dueDate(), installment.getDepositAmountOutstanding(getCurrency()), installment.dueDate().toDate(), + dueDate, installment.getDepositAmountOutstanding(getCurrency()), installment.dueDate().toDate(), null); allTransactions.add(transaction); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java index 5646d73ad..dd72aea8d 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java @@ -174,7 +174,7 @@ public class SavingsAccountDomainServiceJpa implements SavingsAccountDomainServi saveTransactionToGenerateTransactionId(deposit); - this.savingsAccountRepository.save(account); + this.savingsAccountRepository.saveAndFlush(account); postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds, isAccountTransfer); this.businessEventNotifierService.notifyBusinessEventWasExecuted(BUSINESS_EVENTS.SAVINGS_DEPOSIT,