From bee14387f41f483d97e9ce52756a295c6b2041c0 Mon Sep 17 00:00:00 2001 From: BLasan Date: Fri, 28 May 2021 22:52:08 +0530 Subject: [PATCH 1/3] Fix: Advanced Account Rule for Fees under Accrual Periodic type (Fineract-1031) --- ...ccrualBasedAccountingProcessorForLoan.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java index 5836042ab..620979f3e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java @@ -211,21 +211,29 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess } else { accountMap.put(account, interestAmount); } + for (Map.Entry entry : accountMap.entrySet()) { + this.helper.createCreditJournalEntryOrReversalForLoan(office, currencyCode, loanId, transactionId, transactionDate, + entry.getValue(), isReversal, entry.getKey()); + } } // handle fees payment of writeOff (and reversals) if (feesAmount != null && !(feesAmount.compareTo(BigDecimal.ZERO) == 0)) { + totalDebitAmount = totalDebitAmount.add(feesAmount); if (isIncomeFromFee) { - GLAccount account = this.helper.getLinkedGLAccountForLoanProduct(loanProductId, - AccrualAccountsForLoan.INCOME_FROM_FEES.getValue(), paymentTypeId); - if (accountMap.containsKey(account)) { - BigDecimal amount = accountMap.get(account).add(feesAmount); - accountMap.put(account, amount); - } else { - accountMap.put(account, feesAmount); - } + this.helper.createCreditJournalEntryOrReversalForLoanCharges(office, currencyCode, + AccrualAccountsForLoan.INCOME_FROM_FEES.getValue(), loanProductId, loanId, transactionId, transactionDate, + feesAmount, isReversal, loanTransactionDTO.getFeePayments()); + // GLAccount account = this.helper.getLinkedGLAccountForLoanProduct(loanProductId, + // AccrualAccountsForLoan.INCOME_FROM_FEES.getValue(), paymentTypeId); + // if (accountMap.containsKey(account)) { + // BigDecimal amount = accountMap.get(account).add(feesAmount); + // accountMap.put(account, amount); + // } else { + // accountMap.put(account, feesAmount); + // } } else { GLAccount account = this.helper.getLinkedGLAccountForLoanProduct(loanProductId, AccrualAccountsForLoan.FEES_RECEIVABLE.getValue(), paymentTypeId); @@ -260,6 +268,11 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess accountMap.put(account, penaltiesAmount); } } + for (Map.Entry entry : accountMap.entrySet()) { + this.helper.createCreditJournalEntryOrReversalForLoan(office, currencyCode, loanId, transactionId, transactionDate, + entry.getValue(), isReversal, entry.getKey()); + } + } if (overPaymentAmount != null && !(overPaymentAmount.compareTo(BigDecimal.ZERO) == 0)) { @@ -272,11 +285,10 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess } else { accountMap.put(account, overPaymentAmount); } - } - - for (Map.Entry entry : accountMap.entrySet()) { - this.helper.createCreditJournalEntryOrReversalForLoan(office, currencyCode, loanId, transactionId, transactionDate, - entry.getValue(), isReversal, entry.getKey()); + for (Map.Entry entry : accountMap.entrySet()) { + this.helper.createCreditJournalEntryOrReversalForLoan(office, currencyCode, loanId, transactionId, transactionDate, + entry.getValue(), isReversal, entry.getKey()); + } } /** From 2cae5521269fbd33d6f5b07f6887cefc8790b633 Mon Sep 17 00:00:00 2001 From: BLasan Date: Sun, 30 May 2021 16:24:10 +0530 Subject: [PATCH 2/3] Fix: Integration test - loanWithChargesOfTypeAmountPercentageAndPeriodicAccrualAccountingEnabled --- ...AccrualBasedAccountingProcessorForLoan.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java index 620979f3e..eb232595d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java @@ -211,10 +211,6 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess } else { accountMap.put(account, interestAmount); } - for (Map.Entry entry : accountMap.entrySet()) { - this.helper.createCreditJournalEntryOrReversalForLoan(office, currencyCode, loanId, transactionId, transactionDate, - entry.getValue(), isReversal, entry.getKey()); - } } // handle fees payment of writeOff (and reversals) @@ -268,11 +264,6 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess accountMap.put(account, penaltiesAmount); } } - for (Map.Entry entry : accountMap.entrySet()) { - this.helper.createCreditJournalEntryOrReversalForLoan(office, currencyCode, loanId, transactionId, transactionDate, - entry.getValue(), isReversal, entry.getKey()); - } - } if (overPaymentAmount != null && !(overPaymentAmount.compareTo(BigDecimal.ZERO) == 0)) { @@ -285,10 +276,11 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess } else { accountMap.put(account, overPaymentAmount); } - for (Map.Entry entry : accountMap.entrySet()) { - this.helper.createCreditJournalEntryOrReversalForLoan(office, currencyCode, loanId, transactionId, transactionDate, - entry.getValue(), isReversal, entry.getKey()); - } + } + + for (Map.Entry entry : accountMap.entrySet()) { + this.helper.createCreditJournalEntryOrReversalForLoan(office, currencyCode, loanId, transactionId, transactionDate, + entry.getValue(), isReversal, entry.getKey()); } /** From 768404035b05ab27c578b92a497caf2e6ae21666 Mon Sep 17 00:00:00 2001 From: BLasan Date: Tue, 1 Jun 2021 23:47:34 +0530 Subject: [PATCH 3/3] Remove: unwanted comments --- .../service/AccrualBasedAccountingProcessorForLoan.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java index eb232595d..72ce62cad 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java @@ -222,14 +222,6 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess this.helper.createCreditJournalEntryOrReversalForLoanCharges(office, currencyCode, AccrualAccountsForLoan.INCOME_FROM_FEES.getValue(), loanProductId, loanId, transactionId, transactionDate, feesAmount, isReversal, loanTransactionDTO.getFeePayments()); - // GLAccount account = this.helper.getLinkedGLAccountForLoanProduct(loanProductId, - // AccrualAccountsForLoan.INCOME_FROM_FEES.getValue(), paymentTypeId); - // if (accountMap.containsKey(account)) { - // BigDecimal amount = accountMap.get(account).add(feesAmount); - // accountMap.put(account, amount); - // } else { - // accountMap.put(account, feesAmount); - // } } else { GLAccount account = this.helper.getLinkedGLAccountForLoanProduct(loanProductId, AccrualAccountsForLoan.FEES_RECEIVABLE.getValue(), paymentTypeId);