Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,30 @@
package org.apache.fineract.integrationtests.client.feign;

import java.time.LocalDate;
import java.util.List;
import java.util.function.Function;
import org.apache.fineract.client.feign.FineractFeignClient;
import org.apache.fineract.client.models.DeleteLoansLoanIdChargesChargeIdResponse;
import org.apache.fineract.client.models.GetLoansLoanIdChargesChargeIdResponse;
import org.apache.fineract.client.models.GetLoansLoanIdResponse;
import org.apache.fineract.client.models.GetLoansLoanIdStatus;
import org.apache.fineract.client.models.GetLoansLoanIdTransactionsTemplateResponse;
import org.apache.fineract.client.models.PostCreateRescheduleLoansRequest;
import org.apache.fineract.client.models.PostLoanProductsRequest;
import org.apache.fineract.client.models.PostLoansLoanIdChargesChargeIdRequest;
import org.apache.fineract.client.models.PostLoansLoanIdChargesChargeIdResponse;
import org.apache.fineract.client.models.PostLoansLoanIdChargesRequest;
import org.apache.fineract.client.models.PostLoansLoanIdChargesResponse;
import org.apache.fineract.client.models.PostLoansLoanIdRequest;
import org.apache.fineract.client.models.PostLoansLoanIdResponse;
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsResponse;
import org.apache.fineract.client.models.PostLoansRequest;
import org.apache.fineract.client.models.PostUpdateRescheduleLoansRequest;
import org.apache.fineract.integrationtests.client.FeignIntegrationTest;
import org.apache.fineract.integrationtests.client.feign.helpers.FeignAccountHelper;
import org.apache.fineract.integrationtests.client.feign.helpers.FeignBusinessDateHelper;
import org.apache.fineract.integrationtests.client.feign.helpers.FeignChargesHelper;
import org.apache.fineract.integrationtests.client.feign.helpers.FeignClientHelper;
import org.apache.fineract.integrationtests.client.feign.helpers.FeignJournalEntryHelper;
import org.apache.fineract.integrationtests.client.feign.helpers.FeignLoanHelper;
Expand All @@ -56,6 +66,7 @@ public abstract class FeignLoanTestBase extends FeignIntegrationTest implements
protected static FeignJournalEntryHelper journalHelper;
protected static FeignBusinessDateHelper businessDateHelper;
protected static FeignClientHelper clientHelper;
protected static FeignChargesHelper chargesHelper;
protected static LoanTestAccounts accounts;

@BeforeAll
Expand All @@ -67,6 +78,7 @@ public static void setupHelpers() {
journalHelper = new FeignJournalEntryHelper(client);
businessDateHelper = new FeignBusinessDateHelper(client);
clientHelper = new FeignClientHelper(client);
chargesHelper = new FeignChargesHelper(client);
}

protected LoanTestAccounts getAccounts() {
Expand Down Expand Up @@ -112,11 +124,11 @@ protected Long applyForLoan(PostLoansRequest request) {
return loanHelper.applyForLoan(request);
}

protected Long approveLoan(Long loanId, PostLoansLoanIdRequest request) {
protected PostLoansLoanIdResponse approveLoan(Long loanId, PostLoansLoanIdRequest request) {
return loanHelper.approveLoan(loanId, request);
}

protected Long disburseLoan(Long loanId, PostLoansLoanIdRequest request) {
protected PostLoansLoanIdResponse disburseLoan(Long loanId, PostLoansLoanIdRequest request) {
return loanHelper.disburseLoan(loanId, request);
}

Expand All @@ -132,6 +144,60 @@ protected void undoDisbursement(Long loanId) {
loanHelper.undoDisbursement(loanId);
}

protected PostLoansLoanIdResponse disburseToSavings(Long loanId, PostLoansLoanIdRequest request) {
return loanHelper.disburseToSavings(loanId, request);
}

protected PostLoansLoanIdResponse rejectLoan(Long loanId, PostLoansLoanIdRequest request) {
return loanHelper.rejectLoan(loanId, request);
}

protected PostLoansLoanIdResponse withdrawLoan(Long loanId, PostLoansLoanIdRequest request) {
return loanHelper.withdrawLoan(loanId, request);
}

protected PostLoansLoanIdTransactionsResponse closeLoan(Long loanId, PostLoansLoanIdTransactionsRequest request) {
return loanHelper.closeLoan(loanId, request);
}

protected PostLoansLoanIdTransactionsResponse forecloseLoan(Long loanId, PostLoansLoanIdTransactionsRequest request) {
return loanHelper.forecloseLoan(loanId, request);
}

protected PostLoansLoanIdChargesResponse addLoanCharge(Long loanId, PostLoansLoanIdChargesRequest request) {
return loanHelper.addLoanCharge(loanId, request);
}

protected List<GetLoansLoanIdChargesChargeIdResponse> getLoanCharges(Long loanId) {
return loanHelper.getLoanCharges(loanId);
}

protected GetLoansLoanIdChargesChargeIdResponse getLoanCharge(Long loanId, Long loanChargeId) {
return loanHelper.getLoanCharge(loanId, loanChargeId);
}

protected DeleteLoansLoanIdChargesChargeIdResponse deleteLoanCharge(Long loanId, Long loanChargeId) {
return loanHelper.deleteLoanCharge(loanId, loanChargeId);
}

protected PostLoansLoanIdChargesChargeIdResponse waiveLoanCharge(Long loanId, Long loanChargeId,
PostLoansLoanIdChargesChargeIdRequest request) {
return loanHelper.waiveLoanCharge(loanId, loanChargeId, request);
}

protected PostLoansLoanIdChargesChargeIdResponse payLoanCharge(Long loanId, Long loanChargeId,
PostLoansLoanIdChargesChargeIdRequest request) {
return loanHelper.payLoanCharge(loanId, loanChargeId, request);
}

protected Long createLoanSpecifiedDueDateCharge(double amount) {
return chargesHelper.createLoanSpecifiedDueDateCharge(amount);
}

protected Long createLoanDisbursementCharge(double amount) {
return chargesHelper.createLoanDisbursementCharge(amount);
}

protected Long addRepayment(Long loanId, PostLoansLoanIdTransactionsRequest request) {
return transactionHelper.addRepayment(loanId, request);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,33 @@
import java.util.Map;
import org.apache.fineract.client.feign.FineractFeignClient;
import org.apache.fineract.client.feign.util.CallFailedRuntimeException;
import org.apache.fineract.client.models.CommandProcessingResult;
import org.apache.fineract.client.models.DeleteLoansLoanIdChargesChargeIdResponse;
import org.apache.fineract.client.models.GetLoansLoanIdChargesChargeIdResponse;
import org.apache.fineract.client.models.GetLoansLoanIdChargesTemplateResponse;
import org.apache.fineract.client.models.GetLoansLoanIdResponse;
import org.apache.fineract.client.models.PostAddAndDeleteDisbursementDetailRequest;
import org.apache.fineract.client.models.PostCreateRescheduleLoansRequest;
import org.apache.fineract.client.models.PostCreateRescheduleLoansResponse;
import org.apache.fineract.client.models.PostLoanProductsRequest;
import org.apache.fineract.client.models.PostLoanProductsResponse;
import org.apache.fineract.client.models.PostLoansLoanIdChargesChargeIdRequest;
import org.apache.fineract.client.models.PostLoansLoanIdChargesChargeIdResponse;
import org.apache.fineract.client.models.PostLoansLoanIdChargesRequest;
import org.apache.fineract.client.models.PostLoansLoanIdChargesResponse;
import org.apache.fineract.client.models.PostLoansLoanIdRequest;
import org.apache.fineract.client.models.PostLoansLoanIdResponse;
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsResponse;
import org.apache.fineract.client.models.PostLoansOriginatorData;
import org.apache.fineract.client.models.PostLoansRequest;
import org.apache.fineract.client.models.PostLoansResponse;
import org.apache.fineract.client.models.PostUpdateRescheduleLoansRequest;
import org.apache.fineract.client.models.PostUpdateRescheduleLoansResponse;
import org.apache.fineract.client.models.PutLoansAvailableDisbursementAmountRequest;
import org.apache.fineract.client.models.PutLoansAvailableDisbursementAmountResponse;
import org.apache.fineract.client.models.PutLoansLoanIdChargesChargeIdRequest;
import org.apache.fineract.client.models.PutLoansLoanIdChargesChargeIdResponse;
import org.apache.fineract.integrationtests.common.Utils;

public class FeignLoanHelper {
Expand Down Expand Up @@ -84,15 +99,48 @@ public Long applyForLoan(PostLoansRequest request) {
return response.getLoanId();
}

public Long approveLoan(Long loanId, PostLoansLoanIdRequest request) {
PostLoansLoanIdResponse response = ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "approve")));
return response.getLoanId();
public PostLoansLoanIdResponse approveLoan(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "approve")));
}

public Long disburseLoan(Long loanId, PostLoansLoanIdRequest request) {
PostLoansLoanIdResponse response = ok(
() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "disburse")));
return response.getLoanId();
public PostLoansLoanIdResponse disburseLoan(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "disburse")));
}

public PostLoansLoanIdResponse disburseToSavings(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "disburseToSavings")));
}

public PostLoansLoanIdResponse rejectLoan(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "reject")));
}

public PostLoansLoanIdResponse withdrawLoan(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "withdrawnByApplicant")));
}

public PostLoansLoanIdTransactionsResponse closeLoan(Long loanId, PostLoansLoanIdTransactionsRequest request) {
return ok(() -> fineractClient.loanTransactions().executeLoanTransaction(loanId, request, Map.of("command", "close")));
}

public PostLoansLoanIdResponse closeAsRescheduled(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "closeAsRescheduled")));
}

public PostLoansLoanIdTransactionsResponse forecloseLoan(Long loanId, PostLoansLoanIdTransactionsRequest request) {
return ok(() -> fineractClient.loanTransactions().executeLoanTransaction(loanId, request, Map.of("command", "foreclosure")));
}

public PostLoansLoanIdResponse assignLoanOfficer(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "assignLoanOfficer")));
}

public PostLoansLoanIdResponse unassignLoanOfficer(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "unassignLoanOfficer")));
}

public PostLoansLoanIdResponse recoverGuarantee(Long loanId, PostLoansLoanIdRequest request) {
return ok(() -> fineractClient.loans().stateTransitions(loanId, request, Map.of("command", "recoverFromGuarantor")));
}

public GetLoansLoanIdResponse getLoanDetails(Long loanId) {
Expand Down Expand Up @@ -205,6 +253,82 @@ private PostLoansRequest buildSubmittedLoanRequest(Long clientId) {
return buildSubmittedLoanRequest(clientId, createSimpleLoanProduct());
}

public PostLoansLoanIdChargesResponse addLoanCharge(Long loanId, PostLoansLoanIdChargesRequest request) {
return ok(() -> fineractClient.loanCharges().executeLoanCharge(loanId, request, (String) null));
}

public List<GetLoansLoanIdChargesChargeIdResponse> getLoanCharges(Long loanId) {
return ok(() -> fineractClient.loanCharges().retrieveAllLoanCharges(loanId));
}

public GetLoansLoanIdChargesChargeIdResponse getLoanCharge(Long loanId, Long loanChargeId) {
return ok(() -> fineractClient.loanCharges().retrieveLoanCharge(loanId, loanChargeId));
}

public PutLoansLoanIdChargesChargeIdResponse updateLoanCharge(Long loanId, Long loanChargeId,
PutLoansLoanIdChargesChargeIdRequest request) {
return ok(() -> fineractClient.loanCharges().updateLoanCharge(loanId, loanChargeId, request));
}

public DeleteLoansLoanIdChargesChargeIdResponse deleteLoanCharge(Long loanId, Long loanChargeId) {
return ok(() -> fineractClient.loanCharges().deleteLoanCharge(loanId, loanChargeId));
}

public GetLoansLoanIdChargesTemplateResponse getLoanChargeTemplate(Long loanId) {
return ok(() -> fineractClient.loanCharges().retrieveTemplateLoanCharge(loanId));
}

public PostLoansLoanIdChargesChargeIdResponse waiveLoanCharge(Long loanId, Long loanChargeId,
PostLoansLoanIdChargesChargeIdRequest request) {
return ok(() -> fineractClient.loanCharges().executeLoanChargeOnExistingCharge(loanId, loanChargeId, request, "waive"));
}

public PostLoansLoanIdChargesChargeIdResponse payLoanCharge(Long loanId, Long loanChargeId,
PostLoansLoanIdChargesChargeIdRequest request) {
return ok(() -> fineractClient.loanCharges().executeLoanChargeOnExistingCharge(loanId, loanChargeId, request, "pay"));
}

public PostLoansLoanIdChargesChargeIdResponse adjustLoanCharge(Long loanId, Long loanChargeId,
PostLoansLoanIdChargesChargeIdRequest request) {
return ok(() -> fineractClient.loanCharges().executeLoanChargeOnExistingCharge(loanId, loanChargeId, request, "adjustment"));
}

public Long addSpecifiedDueDateCharge(Long loanId, Long chargeId, double amount, String dueDate) {
PostLoansLoanIdChargesRequest request = new PostLoansLoanIdChargesRequest()//
.chargeId(chargeId)//
.amount(amount)//
.dueDate(dueDate)//
.locale("en")//
.dateFormat("dd MMMM yyyy");
return addLoanCharge(loanId, request).getResourceId();
}

public Long addDisbursementCharge(Long loanId, Long chargeId, double amount) {
PostLoansLoanIdChargesRequest request = new PostLoansLoanIdChargesRequest()//
.chargeId(chargeId)//
.amount(amount)//
.locale("en")//
.dateFormat("dd MMMM yyyy");
return addLoanCharge(loanId, request).getResourceId();
}

public CommandProcessingResult addAndDeleteDisbursementDetail(Long loanId, PostAddAndDeleteDisbursementDetailRequest request) {
return ok(() -> fineractClient.loanDisbursementDetails().addAndDeleteDisbursementDetail(loanId, request));
}

public String getDisbursementDetail(Long loanId, Long disbursementId) {
return ok(() -> fineractClient.loanDisbursementDetails().retriveDetail(loanId, disbursementId));
}

public CommandProcessingResult updateDisbursementDate(Long loanId, Long disbursementId, String body) {
return ok(() -> fineractClient.loanDisbursementDetails().updateDisbursementDate(loanId, disbursementId, body));
}

public PutLoansAvailableDisbursementAmountResponse modifyAvailableDisbursementAmount(Long loanId,
PutLoansAvailableDisbursementAmountRequest request) {
return ok(() -> fineractClient.loans().modifyLoanAvailableDisbursementAmount(loanId, request));
}

public Long createRescheduleRequest(PostCreateRescheduleLoansRequest request) {
PostCreateRescheduleLoansResponse response = ok(() -> fineractClient.rescheduleLoans().createLoanRescheduleRequest(request));
return response.getResourceId();
Expand Down
Loading