Merge pull request #549 from hungnguyen2712/recommit-create-approve-loan-on-batch-mode

FINERACT-684
This commit is contained in:
Vishwas Babu A J
2019-03-14 15:23:22 -07:00
committed by GitHub
4 changed files with 96 additions and 10 deletions
@@ -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;
@@ -422,4 +423,51 @@ public class BatchApiTest {
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());
}
}
@@ -155,6 +155,38 @@ public class BatchHelper {
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}
@@ -6497,16 +6497,21 @@ public class Loan extends AbstractPersistableCustom<Long> {
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() ;
}
@@ -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;
@@ -181,7 +182,7 @@ public class LoanAssembler {
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);