Skip to content
Draft
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 @@ -183,6 +183,7 @@ private CommandWrapperConstants() {}
public static final String ENTITY_LOANPRODUCT = "LOANPRODUCT";
public static final String ENTITY_WORKINGCAPITALLOANPRODUCT = "WORKINGCAPITALLOANPRODUCT";
public static final String ENTITY_WORKINGCAPITALLOAN = "WORKINGCAPITALLOAN";
public static final String ENTITY_WORKINGCAPITALLOANTRANSACTION = "ENTITY_WORKINGCAPITALLOANTRANSACTION";
public static final String ENTITY_CLIENTIDENTIFIER = "CLIENTIDENTIFIER";
public static final String ENTITY_CLIENT = "CLIENT";
public static final String ENTITY_DATATABLE = "DATATABLE";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@
import static org.apache.fineract.commands.domain.CommandWrapperConstants.ENTITY_WORKINGCAPITALLOAN;
import static org.apache.fineract.commands.domain.CommandWrapperConstants.ENTITY_WORKINGCAPITALLOANCHARGE;
import static org.apache.fineract.commands.domain.CommandWrapperConstants.ENTITY_WORKINGCAPITALLOANPRODUCT;
import static org.apache.fineract.commands.domain.CommandWrapperConstants.ENTITY_WORKINGCAPITALLOANTRANSACTION;
import static org.apache.fineract.useradministration.service.AppUserConstants.PASSWORD;
import static org.apache.fineract.useradministration.service.AppUserConstants.REPEAT_PASSWORD;

Expand Down Expand Up @@ -865,7 +866,7 @@ public CommandWrapperBuilder discountFeeAdjustmentWorkingCapitalLoanTransaction(

public CommandWrapperBuilder undoWorkingCapitalLoanTransaction(final Long loanId, final Long transactionId) {
this.actionName = ACTION_UNDO;
this.entityName = ENTITY_WORKINGCAPITALLOAN;
this.entityName = ENTITY_WORKINGCAPITALLOANTRANSACTION;
this.entityId = transactionId;
this.loanId = loanId;
this.href = "/working-capital-loans/" + loanId + "/transactions/" + transactionId + "?command=undo";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,12 @@ public void verifyRetrievedSummaryFields(final DataTable dataTable) {

@Then("The retrieved amortization schedule has payments with the following details:")
public void verifyRetrievedPaymentDetails(final DataTable dataTable) {
verifyPaymentDetails(dataTable);
verifyPaymentDetails(dataTable, null);
}

@Then("The retrieved amortization schedule has payments with the following details in first {string} lines:")
public void verifyRetrievedPaymentDetailsFirstNLines(final String firstNLines, final DataTable dataTable) {
verifyPaymentDetails(dataTable, Integer.valueOf(firstNLines));
}

private void verifySummaryFields(final DataTable dataTable) {
Expand All @@ -105,11 +110,13 @@ private void verifySummaryFields(final DataTable dataTable) {
assertions.assertAll();
}

private void verifyPaymentDetails(final DataTable dataTable) {
private void verifyPaymentDetails(final DataTable dataTable, final Integer firstNLines) {
final ProjectedAmortizationScheduleData response = TestContext.INSTANCE.get(WC_AMORT_SCHEDULE_KEY);
assertThat(response).as("Amortization schedule response").isNotNull();

final List<ProjectedAmortizationSchedulePaymentData> actualPayments = response.getPayments();
final List<ProjectedAmortizationSchedulePaymentData> actualPayments = firstNLines != null
? response.getPayments().subList(0, firstNLines)
: response.getPayments();
assertThat(actualPayments).as("payments list").isNotNull();

final List<Map<String, String>> expectedRows = dataTable.asMaps();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.apache.fineract.client.models.ChargeData;
import org.apache.fineract.client.models.ChargeRequest;
import org.apache.fineract.client.models.EnumOptionData;
import org.apache.fineract.client.models.ExecuteWorkingCapitalLoanTransactionCommandRequest;
import org.apache.fineract.client.models.GetBalance;
import org.apache.fineract.client.models.GetChargesResponse;
import org.apache.fineract.client.models.GetWorkingCapitalLoanTransactionIdResponse;
Expand All @@ -47,7 +48,6 @@
import org.apache.fineract.client.models.PostChargesResponse;
import org.apache.fineract.client.models.PostLoansLoanIdChargesRequest;
import org.apache.fineract.client.models.PostLoansLoanIdChargesResponse;
import org.apache.fineract.client.models.PostWorkingCapitalLoanTransactionsRequest;
import org.apache.fineract.client.models.PostWorkingCapitalLoansLoanIdChargesChargeIdRequest;
import org.apache.fineract.client.models.PostWorkingCapitalLoansLoanIdChargesChargeIdResponse;
import org.apache.fineract.client.models.PostWorkingCapitalLoansResponse;
Expand Down Expand Up @@ -490,8 +490,8 @@ public void makeWcChargeAdjustmentFails(final Double amount, final DataTable tab
public void revertLastWcChargeAdjustment() {
final Long loanId = getLoanId();
final GetWorkingCapitalLoanTransactionIdResponse adjustmentTxn = getLastChargeAdjustmentTransaction(loanId, false);
final PostWorkingCapitalLoanTransactionsRequest request = new PostWorkingCapitalLoanTransactionsRequest();
ok(() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionCommandById(loanId,
ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest();
ok(() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(loanId,
adjustmentTxn.getId(), "undo", request));
log.debug("Reverted WC charge adjustment transaction id={} on loan {}", adjustmentTxn.getId(), loanId);
}
Expand All @@ -500,12 +500,12 @@ public void revertLastWcChargeAdjustment() {
public void revertAlreadyRevertedWcChargeAdjustmentFails(final DataTable table) {
final Long loanId = getLoanId();
final GetWorkingCapitalLoanTransactionIdResponse adjustmentTxn = getLastChargeAdjustmentTransaction(loanId, null);
final PostWorkingCapitalLoanTransactionsRequest request = new PostWorkingCapitalLoanTransactionsRequest();
final Map<String, String> expectedData = table.asMaps().get(0);
final int expectedHttpCode = Integer.parseInt(expectedData.get("httpCode"));
final String expectedErrorMessage = expectedData.get("errorMessage").trim();
ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest();
final CallFailedRuntimeException exception = fail(() -> fineractClient.workingCapitalLoanTransactions()
.executeWorkingCapitalLoanTransactionCommandById(loanId, adjustmentTxn.getId(), "undo", request));
.executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(loanId, adjustmentTxn.getId(), "undo", request));
assertHttpStatus(exception, expectedHttpCode);
assertErrorMessage(exception, expectedErrorMessage);
log.info("Verified reverting already reversed WC charge adjustment failed with status {} and message: {}", expectedHttpCode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@
import org.apache.fineract.client.feign.util.CallFailedRuntimeException;
import org.apache.fineract.client.models.CommandProcessingResult;
import org.apache.fineract.client.models.DeleteWorkingCapitalLoansLoanIdResponse;
import org.apache.fineract.client.models.ExecuteWorkingCapitalLoanTransactionCommandRequest;
import org.apache.fineract.client.models.ExecuteWorkingCapitalLoanTransactionCommandResponse;
import org.apache.fineract.client.models.GetBalance;
import org.apache.fineract.client.models.GetCodeValuesDataResponse;
import org.apache.fineract.client.models.GetDisbursementDetail;
Expand Down Expand Up @@ -1549,9 +1551,8 @@ public void undoLastDiscountFeeAdjustmentWCLoan() {
.filter(t -> !Boolean.TRUE.equals(t.getReversed()))
.max(Comparator.comparing(GetWorkingCapitalLoanTransactionIdResponse::getId))
.orElseThrow(() -> new IllegalStateException("Active discount fee adjustment transaction not found on loan"));
final PostWorkingCapitalLoanTransactionsRequest request = workingCapitalProductRequestFactory
.defaultWorkingCapitalLoanRepaymentRequest();
ok(() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionCommandById(loanId,
final ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest();
ok(() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(loanId,
adjustmentTxn.getId(), "undo", request));
}

Expand All @@ -1572,10 +1573,8 @@ public void undoDiscountFeeAdjustmentByAmountWCLoan(final String adjustmentAmoun
.max(Comparator.comparing(GetWorkingCapitalLoanTransactionIdResponse::getId)).orElseThrow(() -> new IllegalStateException(
"Active discount fee adjustment transaction with amount " + adjustmentAmount + " not found on loan"));

final PostWorkingCapitalLoanTransactionsRequest request = workingCapitalProductRequestFactory
.defaultWorkingCapitalLoanRepaymentRequest();

ok(() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionCommandById(loanId,
ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest();
ok(() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(loanId,
adjustmentTxn.getId(), "undo", request));
}

Expand All @@ -1593,13 +1592,11 @@ public void undoLastDiscountFeeAdjustmentAlreadyReversedFailure(final int expect
.max(Comparator.comparing(GetWorkingCapitalLoanTransactionIdResponse::getId))
.orElseThrow(() -> new IllegalStateException("Discount fee adjustment transaction not found on loan"));

final PostWorkingCapitalLoanTransactionsRequest request = workingCapitalProductRequestFactory
.defaultWorkingCapitalLoanRepaymentRequest();

final String errorMessage = ErrorMessageHelper.discountAdjustmentUndoAlreadyReversedFailure();

ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest();
final CallFailedRuntimeException exception = fail(() -> fineractClient.workingCapitalLoanTransactions()
.executeWorkingCapitalLoanTransactionCommandById(loanId, adjustmentTxn.getId(), "undo", request));
.executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(loanId, adjustmentTxn.getId(), "undo", request));

assertThat(exception.getStatus()).as(errorMessage).isEqualTo(expectedStatus);

Expand All @@ -1614,13 +1611,13 @@ public void undoDiscountFeeAdjustmentInvalidTypeFailure(final int expectedStatus

Assertions.assertNotNull(lastDiscountResponse);

final PostWorkingCapitalLoanTransactionsRequest request = workingCapitalProductRequestFactory
.defaultWorkingCapitalLoanRepaymentRequest();
ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest();

final String errorMessage = ErrorMessageHelper.discountAdjustmentUndoInvalidTypeFailure();

final CallFailedRuntimeException exception = fail(() -> fineractClient.workingCapitalLoanTransactions()
.executeWorkingCapitalLoanTransactionCommandById(loanId, lastDiscountResponse.getResourceId(), "undo", request));
final CallFailedRuntimeException exception = fail(
() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(
loanId, lastDiscountResponse.getResourceId(), "undo", request));

assertThat(exception.getStatus()).as(errorMessage).isEqualTo(expectedStatus);

Expand All @@ -1630,13 +1627,12 @@ public void undoDiscountFeeAdjustmentInvalidTypeFailure(final int expectedStatus
@Then("Undo discount fee adjustment with a non-existent transaction id on Working Capital loan account failed as not found with status code {int}")
public void undoDiscountFeeAdjustmentNotFoundFailure(final int expectedStatus) {
final Long loanId = getCreatedLoanId();
final PostWorkingCapitalLoanTransactionsRequest request = workingCapitalProductRequestFactory
.defaultWorkingCapitalLoanRepaymentRequest();
ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest();

final String errorMessage = ErrorMessageHelper.discountAdjustmentUndoTransactionNotFoundFailure();

final CallFailedRuntimeException exception = fail(() -> fineractClient.workingCapitalLoanTransactions()
.executeWorkingCapitalLoanTransactionCommandById(loanId, 999999999L, "undo", request));
.executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(loanId, 999999999L, "undo", request));

assertThat(exception.getStatus()).as(errorMessage).isEqualTo(expectedStatus);

Expand All @@ -1658,13 +1654,12 @@ public void undoLastDiscountFeeAdjustmentNotActiveLoanFailure(final int expected
.max(Comparator.comparing(GetWorkingCapitalLoanTransactionIdResponse::getId))
.orElseThrow(() -> new IllegalStateException("Active discount fee adjustment transaction not found on loan"));

final PostWorkingCapitalLoanTransactionsRequest request = workingCapitalProductRequestFactory
.defaultWorkingCapitalLoanRepaymentRequest();
ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest();

final String errorMessage = ErrorMessageHelper.discountAdjustmentUndoNotActiveLoanFailure();

final CallFailedRuntimeException exception = fail(() -> fineractClient.workingCapitalLoanTransactions()
.executeWorkingCapitalLoanTransactionCommandById(loanId, adjustmentTxn.getId(), "undo", request));
.executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(loanId, adjustmentTxn.getId(), "undo", request));

assertThat(exception.getStatus()).as(errorMessage).isEqualTo(expectedStatus);

Expand Down Expand Up @@ -3162,6 +3157,29 @@ public void verifyReversedWorkingCapitalLoanTransactionJournalEntries(final Stri
verifyTransactionsJournalEntries(transactionType, transactionDate, true, null, table);
}

@When("Customer undo {string}th working capital transaction made on {string}")
public void undoNthTransaction(String nthItemStr, String transactionDate) throws IOException {
final GetWorkingCapitalLoanTransactionsResponse getWorkingCapitalLoansLoanIdResponse = retrieveLoanTransactions(getCreatedLoanId());
final List<GetWorkingCapitalLoanTransactionIdResponse> actualTransactions = getWorkingCapitalLoansLoanIdResponse.getContent();

int nthItem = Integer.parseInt(nthItemStr) - 1;

GetWorkingCapitalLoanTransactionIdResponse transactionIdResponse = actualTransactions.stream()
.filter(t -> transactionDate.equals(FORMATTER.format(t.getTransactionDate()))).toList().get(nthItem);

String reversalExternalId = Utils.randomStringGenerator("wcl-reversal-ext-id", 8);
ExecuteWorkingCapitalLoanTransactionCommandRequest request = new ExecuteWorkingCapitalLoanTransactionCommandRequest()
.reversalExternalId(reversalExternalId);

ExecuteWorkingCapitalLoanTransactionCommandResponse undo = ok(
() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionCommandByLoanIdTransactionId(
getCreatedLoanId(), transactionIdResponse.getId(), "undo", request));
Assertions.assertNotNull(undo);

// testContext().set(TestContextKey.LOAN_TRANSACTION_UNDO_RESPONSE, transactionUndoResponse);

}

private void verifyTransactionsJournalEntries(final String transactionType, final String transactionDate, final boolean reversed,
final Integer expectedCount, final DataTable table) {
final Long loanId = getCreatedLoanId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.UUID;
Expand All @@ -49,7 +48,6 @@
import org.apache.fineract.client.models.GetWorkingCapitalLoanProductsProductIdResponse;
import org.apache.fineract.client.models.GetWorkingCapitalLoanProductsResponse;
import org.apache.fineract.client.models.GetWorkingCapitalLoanProductsTemplateResponse;
import org.apache.fineract.client.models.InternalWorkingCapitalLoanPaymentRequest;
import org.apache.fineract.client.models.PaymentTypeToGLAccountMapper;
import org.apache.fineract.client.models.PostAllowAttributeOverrides;
import org.apache.fineract.client.models.PostPaymentAllocation;
Expand Down Expand Up @@ -1055,13 +1053,6 @@ private Long getWorkingCapitalLoanResourceId() {
return response.getResourceId();
}

@When("Admin makes Internal Payment {string} on {string}")
public void internalPayWCLoan(String amount, String transactionDate) {
Long resourceId = getWorkingCapitalLoanResourceId();
fineractFeignClient.workingCapitalLoans().payment(resourceId, new InternalWorkingCapitalLoanPaymentRequest()
.amount(BigDecimal.valueOf(Double.parseDouble(amount))).transactionDate(LocalDate.parse(transactionDate)));
}

@Then("Delinquency Tag History for Working Capital loan has lines:")
public void checkDelinquencyHistory(final DataTable table) {
Long resourceId = getWorkingCapitalLoanResourceId();
Expand Down
Loading
Loading