MIFOSX-1481 : changed the validation to allow writeoff on last repayment date
This commit is contained in:
+51
@@ -7,6 +7,7 @@ package org.mifosplatform.integrationtests;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mifosplatform.integrationtests.common.ClientHelper;
|
import org.mifosplatform.integrationtests.common.ClientHelper;
|
||||||
@@ -116,6 +117,56 @@ public class LoanWithWaiveInterestAndWriteOffIntegrationTest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void checkClientLoan_WRITTEN_OFF() {
|
||||||
|
// CREATE CLIENT
|
||||||
|
final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, this.DATE_OF_JOINING);
|
||||||
|
ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID);
|
||||||
|
|
||||||
|
// CREATE LOAN PRODUCT
|
||||||
|
final Integer loanProductID = createLoanProduct();
|
||||||
|
// APPLY FOR LOAN
|
||||||
|
final Integer loanID = applyForLoanApplication(clientID, loanProductID);
|
||||||
|
|
||||||
|
HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
|
||||||
|
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||||
|
|
||||||
|
System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------");
|
||||||
|
loanStatusHashMap = this.loanTransactionHelper.approveLoan("28 September 2010", loanID);
|
||||||
|
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||||
|
LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
|
||||||
|
|
||||||
|
// DISBURSE
|
||||||
|
loanStatusHashMap = this.loanTransactionHelper.disburseLoan(this.DISBURSEMENT_DATE, loanID);
|
||||||
|
System.out.println("DISBURSE " + loanStatusHashMap);
|
||||||
|
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||||
|
|
||||||
|
// MAKE REPAYMENTS
|
||||||
|
final float repayment_with_interest = 680.0f;
|
||||||
|
|
||||||
|
this.loanTransactionHelper.verifyRepaymentScheduleEntryFor(1, 4000.0F, loanID);
|
||||||
|
this.loanTransactionHelper.makeRepayment("1 January 2011", repayment_with_interest, loanID);
|
||||||
|
|
||||||
|
HashMap toLoanSummaryAfter = this.loanTransactionHelper.getLoanSummary(requestSpec, responseSpec, loanID);
|
||||||
|
Assert.assertTrue("Checking for Principal paid ",
|
||||||
|
new Float("500.0").compareTo(new Float(String.valueOf(toLoanSummaryAfter.get("principalPaid")))) == 0);
|
||||||
|
Assert.assertTrue("Checking for interestPaid paid ",
|
||||||
|
new Float("180.0").compareTo(new Float(String.valueOf(toLoanSummaryAfter.get("interestPaid")))) == 0);
|
||||||
|
Assert.assertTrue("Checking for total paid ",
|
||||||
|
new Float("680.0").compareTo(new Float(String.valueOf(toLoanSummaryAfter.get("totalRepayment")))) == 0);
|
||||||
|
|
||||||
|
// WRITE OFF LOAN AND CHECK ACCOUNT IS CLOSED
|
||||||
|
LoanStatusChecker.verifyLoanAccountIsClosed(this.loanTransactionHelper.writeOffLoan("1 January 2011", loanID));
|
||||||
|
toLoanSummaryAfter = this.loanTransactionHelper.getLoanSummary(requestSpec, responseSpec, loanID);
|
||||||
|
Assert.assertTrue("Checking for Principal written off ",
|
||||||
|
new Float("4000.0").compareTo(new Float(String.valueOf(toLoanSummaryAfter.get("principalWrittenOff")))) == 0);
|
||||||
|
Assert.assertTrue("Checking for interestPaid written off ",
|
||||||
|
new Float("1440.0").compareTo(new Float(String.valueOf(toLoanSummaryAfter.get("interestWrittenOff")))) == 0);
|
||||||
|
Assert.assertTrue("Checking for total written off ",
|
||||||
|
new Float("5440.0").compareTo(new Float(String.valueOf(toLoanSummaryAfter.get("totalWrittenOff")))) == 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private Integer createLoanProduct() {
|
private Integer createLoanProduct() {
|
||||||
System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
|
System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
|
||||||
final String loanProductJSON = new LoanProductTestBuilder().withPrincipal(this.LP_PRINCIPAL).withRepaymentTypeAsMonth()
|
final String loanProductJSON = new LoanProductTestBuilder().withPrincipal(this.LP_PRINCIPAL).withRepaymentTypeAsMonth()
|
||||||
|
|||||||
+2
-2
@@ -3142,8 +3142,8 @@ public class Loan extends AbstractPersistable<Long> {
|
|||||||
|
|
||||||
LocalDateTime createdDate = DateUtils.getLocalDateTimeOfTenant();
|
LocalDateTime createdDate = DateUtils.getLocalDateTimeOfTenant();
|
||||||
loanTransaction = LoanTransaction.writeoff(this, getOffice(), writtenOffOnLocalDate, txnExternalId, createdDate, currentUser);
|
loanTransaction = LoanTransaction.writeoff(this, getOffice(), writtenOffOnLocalDate, txnExternalId, createdDate, currentUser);
|
||||||
final boolean isLastTransaction = isChronologicallyLatestTransaction(loanTransaction, this.loanTransactions);
|
LocalDate lastTransactionDate = getLastUserTransactionDate();
|
||||||
if (!isLastTransaction) {
|
if (lastTransactionDate.isAfter(writtenOffOnLocalDate)) {
|
||||||
final String errorMessage = "The date of the writeoff transaction must occur on or before previous transactions.";
|
final String errorMessage = "The date of the writeoff transaction must occur on or before previous transactions.";
|
||||||
throw new InvalidLoanStateTransitionException("writeoff", "must.occur.on.or.after.other.transaction.dates", errorMessage,
|
throw new InvalidLoanStateTransitionException("writeoff", "must.occur.on.or.after.other.transaction.dates", errorMessage,
|
||||||
writtenOffOnLocalDate);
|
writtenOffOnLocalDate);
|
||||||
|
|||||||
Reference in New Issue
Block a user