From cb57df866cbaf059cbf83ce5c9c3b0d500715bd3 Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Thu, 25 Jul 2013 14:27:23 +0100 Subject: [PATCH] MIFOSX-565: written off loans reverse their write off transaction when undoing or adjusting transaction on closed-written off loan, closed-rescheduled loans switch to active when transactions is undone. --- .../portfolio/loanaccount/domain/Loan.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java index ef902a2aa..ba498e484 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java @@ -1753,6 +1753,17 @@ public class Loan extends AbstractPersistable { } transactionForAdjustment.reverse(); + + if (isClosedWrittenOff()) { + // find write off transaction and reverse it + LoanTransaction writeOffTransaction = findWriteOffTransaction(); + writeOffTransaction.reverse(); + } + + if (isClosedObligationsMet() || isClosedWrittenOff() || isClosedWithOutsandingAmountMarkedForReschedule()) { + this.loanStatus = LoanStatus.ACTIVE.getValue(); + } + if (newTransactionDetail.isRepayment() || newTransactionDetail.isInterestWaiver()) { changedTransactionDetail = handleRepaymentOrWaiverTransaction(newTransactionDetail, loanLifecycleStateMachine, transactionForAdjustment); @@ -1761,6 +1772,18 @@ public class Loan extends AbstractPersistable { return changedTransactionDetail; } + private LoanTransaction findWriteOffTransaction() { + + LoanTransaction writeOff = null; + for (LoanTransaction transaction : this.loanTransactions) { + if (!transaction.isReversed() && transaction.isWriteOff()) { + writeOff = transaction; + } + } + + return writeOff; + } + private boolean isOverPaid() { return calculateTotalOverpayment().isGreaterThanZero(); } @@ -1984,6 +2007,18 @@ public class Loan extends AbstractPersistable { return status().isClosed() || this.isCancelled(); } + private boolean isClosedObligationsMet() { + return status().isClosedObligationsMet(); + } + + private boolean isClosedWrittenOff() { + return status().isClosedWrittenOff(); + } + + private boolean isClosedWithOutsandingAmountMarkedForReschedule() { + return status().isClosedWithOutsandingAmountMarkedForReschedule(); + } + private boolean isCancelled() { return this.isRejected() || this.isWithdrawn(); }