Repository: incubator-fineract
Updated Branches:
  refs/heads/develop c49956c15 -> cdbcf7501


FINERACT-365 : The 'Transactions' tab showing wrong balance in RD account


Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/652059c2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/652059c2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/652059c2

Branch: refs/heads/develop
Commit: 652059c24693f9c10ddcc025de49e45f4cf18fbc
Parents: b36ba8e
Author: satish-conflux <[email protected]>
Authored: Fri Feb 24 15:51:56 2017 +0530
Committer: satish-conflux <[email protected]>
Committed: Fri Feb 24 15:51:56 2017 +0530

----------------------------------------------------------------------
 .../domain/DepositAccountDomainServiceJpa.java  | 21 ++++++++++++++++----
 .../savings/domain/RecurringDepositAccount.java | 12 ++++++++++-
 .../domain/SavingsAccountDomainServiceJpa.java  |  2 +-
 3 files changed, 29 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/652059c2/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java
----------------------------------------------------------------------
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 32d12be..ac277fb 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<Long> existingTransactionIds = new HashSet<>();
         final Set<Long> 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,

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/652059c2/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java
----------------------------------------------------------------------
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 76668a4..9b02027 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<SavingsAccountTransaction> 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);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/652059c2/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java
----------------------------------------------------------------------
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 5646d73..dd72aea 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,

Reply via email to