Skip to content

Commit

Permalink
Merge pull request apache#549 from hungnguyen2712/recommit-create-app…
Browse files Browse the repository at this point in the history
…rove-loan-on-batch-mode

FINERACT-684
  • Loading branch information
vishwasbabu authored Mar 14, 2019
2 parents eb5ad44 + b921e3e commit 201cbf8
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package org.apache.fineract.integrationtests;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.fineract.batch.domain.BatchRequest;
Expand Down Expand Up @@ -422,4 +423,51 @@ public void shouldReturnOkStatusOnSuccessfulLoanApprovalAndDisburse() {
Assert.assertEquals("Verify Status Code 200 for Approve Loan", 200L, (long) response.get(3).getStatusCode());
Assert.assertEquals("Verify Status Code 200 for Disburse Loan", 200L, (long) response.get(4).getStatusCode());
}

/**
* Test for the successful create client, apply loan,approval and disbursal of a loan using
* Batch API with enclosingTransaction. A '200' status code is expected on successful activation.
*
* @see org.apache.fineract.batch.command.internal.ApproveLoanCommandStrategy
* @see org.apache.fineract.batch.command.internal.DisburseLoanCommandStrategy
*/
@Test
public void shouldReturnOkStatusOnSuccessfulLoanApprovalAndDisburseWithTransaction(){
final String loanProductJSON = new LoanProductTestBuilder() //
.withPrincipal("10000000.00") //
.withNumberOfRepayments("24") //
.withRepaymentAfterEvery("1") //
.withRepaymentTypeAsMonth() //
.withinterestRatePerPeriod("2") //
.withInterestRateFrequencyTypeAsMonths() //
.withAmortizationTypeAsEqualPrincipalPayment() //
.withInterestTypeAsDecliningBalance() //
.currencyDetails("0", "100").build(null);

final Integer productId = new LoanTransactionHelper(this.requestSpec, this.responseSpec).getLoanProductId(loanProductJSON);

// Create a createClient Request
final BatchRequest br1 = BatchHelper.createActiveClientRequest(4740L, "");

// Create a ApplyLoan Request
final BatchRequest br2 = BatchHelper.applyLoanRequest(4742L, 4740L, productId);

// Create a approveLoan Request
final BatchRequest br3 = BatchHelper.approveLoanRequest(4743L, 4742L);

// Create a disburseLoan Request
final BatchRequest br4 = BatchHelper.disburseLoanRequest(4744L, 4743L);

final List<BatchRequest> batchRequests = Arrays.asList(br1,br2,br3,br4);

final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);

final List<BatchResponse> response = BatchHelper.postBatchRequestsWithEnclosingTransaction(this.requestSpec, this.responseSpec,
jsonifiedRequest);

Assert.assertEquals("Verify Status Code 200 for create client", 200L, (long) response.get(0).getStatusCode());
Assert.assertEquals("Verify Status Code 200 for apply Loan", 200L, (long) response.get(1).getStatusCode());
Assert.assertEquals("Verify Status Code 200 for approve Loan", 200L, (long) response.get(2).getStatusCode());
Assert.assertEquals("Verify Status Code 200 for disburse Loan", 200L, (long) response.get(3).getStatusCode());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,38 @@ public static BatchRequest createClientRequest(final Long requestId, final Strin
return br;
}

/**
* Creates and returns a
* {@link org.apache.fineract.batch.command.internal.CreateClientCommandStrategy}
* Request as one of the request in Batch.
*
* @param reqId
* @param externalId
* @return BatchRequest
*/
public static BatchRequest createActiveClientRequest(final Long requestId, final String externalId) {

final BatchRequest br = new BatchRequest();
br.setRequestId(requestId);
br.setRelativeUrl("clients");
br.setMethod("POST");

final String extId;
if (externalId.equals("")) {
extId = "ext" + String.valueOf((10000 * Math.random())) + String.valueOf((10000 * Math.random()));
} else {
extId = externalId;
}

final String body = "{ \"officeId\": 1, \"firstname\": \"Petra\", \"lastname\": \"Yton\"," + "\"externalId\": \"" + externalId
+ "\", \"dateFormat\": \"dd MMMM yyyy\", \"locale\": \"en\"," + "\"active\": true, \"activationDate\": \"04 March 2010\", \"submittedOnDate\": \"04 March 2010\"}";

br.setBody(body);

return br;
}


/**
* Creates and returns a
* {@link org.apache.fineract.batch.command.internal.UpdateClientCommandStrategy}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6497,16 +6497,21 @@ public Collection<LoanCharge> getLoanCharges() {
return this.charges;
}
public void initializeLazyCollections() {
this.charges.size() ;
this.trancheCharges.size() ;
this.repaymentScheduleInstallments.size() ;
this.loanTransactions.size() ;
this.disbursementDetails.size() ;
this.loanTermVariations.size() ;
this.collateral.size() ;
this.loanOfficerHistory.size() ;
checkAndFetchLazyCollection(this.charges);
checkAndFetchLazyCollection(this.trancheCharges);
checkAndFetchLazyCollection(this.repaymentScheduleInstallments);
checkAndFetchLazyCollection(this.loanTransactions);
checkAndFetchLazyCollection(this.disbursementDetails);
checkAndFetchLazyCollection(this.loanTermVariations);
checkAndFetchLazyCollection(this.collateral);
checkAndFetchLazyCollection(this.loanOfficerHistory);
}

private void checkAndFetchLazyCollection(Collection lazyCollection){
if (lazyCollection != null) {
lazyCollection.size();
}
}

public void initializeLoanOfficerHistory() {
this.loanOfficerHistory.size() ;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package org.apache.fineract.portfolio.loanaccount.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -181,7 +182,7 @@ private Loan assembleApplication(final JsonElement element, final Long clientId,
if (loanPurposeId != null) {
loanPurpose = this.codeValueRepository.findOneWithNotFoundDetection(loanPurposeId);
}
List<LoanDisbursementDetails> disbursementDetails = null;
List<LoanDisbursementDetails> disbursementDetails = new ArrayList<>();
BigDecimal fixedEmiAmount = null;
if (loanProduct.isMultiDisburseLoan() || loanProduct.canDefineInstallmentAmount()) {
fixedEmiAmount = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(LoanApiConstants.emiAmountParameterName, element);
Expand Down

0 comments on commit 201cbf8

Please sign in to comment.