From a33c8f943913aa275bdaa4562d7f427502505428 Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Wed, 27 Apr 2022 23:48:51 +0100 Subject: [PATCH] FINERACT-1573 Credit Balance Refund - cater for cash accounting --- .../CashBasedAccountingProcessorForLoan.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/CashBasedAccountingProcessorForLoan.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/CashBasedAccountingProcessorForLoan.java index f0441fc2d..67a5024e3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/CashBasedAccountingProcessorForLoan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/CashBasedAccountingProcessorForLoan.java @@ -77,6 +77,12 @@ public class CashBasedAccountingProcessorForLoan implements AccountingProcessorF else if (loanTransactionDTO.getTransactionType().isRefund()) { createJournalEntriesForRefund(loanDTO, loanTransactionDTO, office); } + + /** Logic for Credit Balance Refunds **/ + else if (loanTransactionDTO.getTransactionType().isCreditBalanceRefund()) { + createJournalEntriesForCreditBalanceRefund(loanDTO, loanTransactionDTO, office); + } + /*** * Only principal write off affects cash based accounting (interest and fee write off need not be * considered). Debit losses written off and credit Loan Portfolio @@ -307,6 +313,25 @@ public class CashBasedAccountingProcessorForLoan implements AccountingProcessorF } } + private void createJournalEntriesForCreditBalanceRefund(final LoanDTO loanDTO, final LoanTransactionDTO loanTransactionDTO, + final Office office) { + // loan properties + final Long loanProductId = loanDTO.getLoanProductId(); + final Long loanId = loanDTO.getLoanId(); + final String currencyCode = loanDTO.getCurrencyCode(); + + // transaction properties + final String transactionId = loanTransactionDTO.getTransactionId(); + final Date transactionDate = loanTransactionDTO.getTransactionDate(); + final BigDecimal refundAmount = loanTransactionDTO.getAmount(); + final boolean isReversal = loanTransactionDTO.isReversed(); + final Long paymentTypeId = loanTransactionDTO.getPaymentTypeId(); + + this.helper.createCashBasedJournalEntriesAndReversalsForLoan(office, currencyCode, CashAccountsForLoan.LOAN_PORTFOLIO.getValue(), + CashAccountsForLoan.OVERPAYMENT.getValue(), loanProductId, paymentTypeId, loanId, transactionId, transactionDate, + refundAmount, isReversal); + } + private void createJournalEntriesForRefundForActiveLoan(LoanDTO loanDTO, LoanTransactionDTO loanTransactionDTO, Office office) { // loan properties final Long loanProductId = loanDTO.getLoanProductId();