diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java index 622a17b6b..88beda174 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/AccrualBasedAccountingProcessorForLoan.java @@ -55,6 +55,11 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess .getTransactionType().isRepaymentAtDisbursement() || loanTransactionDTO.getTransactionType().isChargePayment()); } + /** Logic for handling recovery payments **/ + else if (loanTransactionDTO.getTransactionType().isRecoveryRepayment()) { + createJournalEntriesForRecoveryRepayments(loanDTO, loanTransactionDTO, office); + } + /** Handle Write Offs, waivers and their reversals **/ else if ((loanTransactionDTO.getTransactionType().isWriteOff() || loanTransactionDTO.getTransactionType().isWaiveInterest() || loanTransactionDTO .getTransactionType().isWaiveCharges())) { @@ -201,6 +206,33 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess } } + /** + * Create a single Debit to fund source and a single credit to + * "Income from Recovery" + * + * In case the loan transaction is a reversal, all debits are turned into + * credits and vice versa + */ + private void createJournalEntriesForRecoveryRepayments(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 amount = loanTransactionDTO.getAmount(); + final boolean isReversal = loanTransactionDTO.isReversed(); + final Long paymentTypeId = loanTransactionDTO.getPaymentTypeId(); + + this.helper.createAccrualBasedJournalEntriesAndReversalsForLoan(office, currencyCode, ACCRUAL_ACCOUNTS_FOR_LOAN.FUND_SOURCE, + ACCRUAL_ACCOUNTS_FOR_LOAN.INCOME_FROM_RECOVERY, loanProductId, paymentTypeId, loanId, transactionId, transactionDate, + amount, isReversal); + + } + /** * Recognize the receivable interest
* Debit "Interest Receivable" and Credit "Income from Interest"