diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java index a61a3eb41..ebc0a3b81 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java @@ -20,7 +20,6 @@ package org.apache.fineract.infrastructure.businessdate.api; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -33,19 +32,16 @@ import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.UriInfo; import java.util.List; import lombok.RequiredArgsConstructor; import org.apache.fineract.commands.domain.CommandWrapper; import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService; import org.apache.fineract.infrastructure.businessdate.data.BusinessDateData; +import org.apache.fineract.infrastructure.businessdate.data.request.BusinessDateRequest; import org.apache.fineract.infrastructure.businessdate.service.BusinessDateReadPlatformService; -import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; -import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.springframework.stereotype.Component; @@ -56,7 +52,8 @@ import org.springframework.stereotype.Component; @Tag(name = "Business Date Management", description = "Business date management enables you to set up, fetch and adjust organisation business dates") public class BusinessDateApiResource { - private final ApiRequestParameterHelper parameterHelper; + private static final String BUSINESS_DATE = "BUSINESS_DATE"; + private final PlatformSecurityContext securityContext; private final DefaultToApiJsonSerializer jsonSerializer; private final BusinessDateReadPlatformService readPlatformService; @@ -66,13 +63,9 @@ public class BusinessDateApiResource { @Consumes({ MediaType.TEXT_HTML, MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "List all business dates", description = "") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateResponse.class)))) }) - public String getBusinessDates(@Context final UriInfo uriInfo) { - securityContext.authenticatedUser().validateHasReadPermission("BUSINESS_DATE"); - final List foundBusinessDates = this.readPlatformService.findAll(); - ApiRequestJsonSerializationSettings settings = parameterHelper.process(uriInfo.getQueryParameters()); - return this.jsonSerializer.serialize(settings, foundBusinessDates); + public List getBusinessDates() { + securityContext.authenticatedUser().validateHasReadPermission(BUSINESS_DATE); + return this.readPlatformService.findAll(); } @GET @@ -80,28 +73,23 @@ public class BusinessDateApiResource { @Consumes({ MediaType.TEXT_HTML, MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Retrieve a specific Business date", description = "") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateResponse.class))) }) - public String getBusinessDate(@PathParam("type") @Parameter(description = "type") final String type, @Context final UriInfo uriInfo) { - securityContext.authenticatedUser().validateHasReadPermission("BUSINESS_DATE"); - final BusinessDateData businessDate = this.readPlatformService.findByType(type); - ApiRequestJsonSerializationSettings settings = parameterHelper.process(uriInfo.getQueryParameters()); - return this.jsonSerializer.serialize(settings, businessDate); + public BusinessDateData getBusinessDate(@PathParam("type") @Parameter(description = "type") final String type) { + securityContext.authenticatedUser().validateHasReadPermission(BUSINESS_DATE); + return this.readPlatformService.findByType(type); } @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Update Business Date", description = "") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateRequest.class))) + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = BusinessDateRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = BusinessDateApiResourceSwagger.BusinessDateResponse.class))) }) - public String updateBusinessDate(final String jsonRequestBody, @Context UriInfo uriInfo) { - securityContext.authenticatedUser().validateHasUpdatePermission("BUSINESS_DATE"); - final CommandWrapper commandRequest = new CommandWrapperBuilder().updateBusinessDate().withJson(jsonRequestBody).build(); - - CommandProcessingResult result = commandWritePlatformService.logCommandSource(commandRequest); - return jsonSerializer.serialize(result); + public CommandProcessingResult updateBusinessDate(BusinessDateRequest businessDateRequest) { + securityContext.authenticatedUser().validateHasUpdatePermission(BUSINESS_DATE); + final CommandWrapper commandRequest = new CommandWrapperBuilder().updateBusinessDate() + .withJson(jsonSerializer.serialize(businessDateRequest)).build(); + return commandWritePlatformService.logCommandSource(commandRequest); } } diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResourceSwagger.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResourceSwagger.java index 08814c58b..40fea5412 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResourceSwagger.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResourceSwagger.java @@ -19,7 +19,7 @@ package org.apache.fineract.infrastructure.businessdate.api; import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDate; +import java.util.Map; final class BusinessDateApiResourceSwagger { @@ -30,32 +30,12 @@ final class BusinessDateApiResourceSwagger { @Schema(description = "BusinessDateResponse") public static final class BusinessDateResponse { - @Schema(example = "COB date") - public String description; - @Schema(example = "COB_DATE") - public String type; - @Schema(example = "[2015,02,15]") - public LocalDate date; + @Schema(example = "1") + public Long commandId; + public Map changes; private BusinessDateResponse() { } } - - @Schema(description = "BusinessDateRequest") - public static final class BusinessDateRequest { - - @Schema(example = "yyyy-MM-dd") - public String dateFormat; - @Schema(example = "COB_DATE") - public String type; - @Schema(example = "2015-02-15") - public String date; - @Schema(example = "en") - public String locale; - - private BusinessDateRequest() {} - - } - } diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/data/BusinessDateData.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/data/BusinessDateData.java index 0e5999a28..7de861046 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/data/BusinessDateData.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/data/BusinessDateData.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.infrastructure.businessdate.data; +import java.io.Serial; import java.io.Serializable; import java.time.LocalDate; import lombok.Data; @@ -30,6 +31,7 @@ import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType; @Accessors(chain = true) public class BusinessDateData implements Serializable { + @Serial private static final long serialVersionUID = 1L; private String description; private String type; diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/data/request/BusinessDateRequest.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/data/request/BusinessDateRequest.java new file mode 100644 index 000000000..a3a5b5d27 --- /dev/null +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/data/request/BusinessDateRequest.java @@ -0,0 +1,32 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.businessdate.data.request; + +import java.io.Serial; +import java.io.Serializable; + +public record BusinessDateRequest(String dateFormat, String type, String date, String locale) implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + public static BusinessDateRequest ofNull() { + return new BusinessDateRequest(null, null, null, null); + } +} diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/BusinessDateStepDef.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/BusinessDateStepDef.java index 0bc536b6d..7b2aa99a0 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/BusinessDateStepDef.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/BusinessDateStepDef.java @@ -25,7 +25,7 @@ import io.cucumber.java.en.When; import java.io.IOException; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import org.apache.fineract.client.models.BusinessDateResponse; +import org.apache.fineract.client.models.BusinessDateData; import org.apache.fineract.client.services.BusinessDateManagementApi; import org.apache.fineract.test.helper.BusinessDateHelper; import org.apache.fineract.test.helper.ErrorHelper; @@ -53,7 +53,7 @@ public class BusinessDateStepDef extends AbstractStepDef { @Then("Admin checks that the business date is correctly set to {string}") public void checkBusinessDate(String businessDate) throws IOException { - Response businessDateResponse = businessDateManagementApi.getBusinessDate(BusinessDateHelper.BUSINESS_DATE) + Response businessDateResponse = businessDateManagementApi.getBusinessDate(BusinessDateHelper.BUSINESS_DATE) .execute(); ErrorHelper.checkSuccessfulApiCall(businessDateResponse); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d MMMM yyyy"); diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanChargeAdjustmentStepDef.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanChargeAdjustmentStepDef.java index 8b0663939..3d9650fcd 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanChargeAdjustmentStepDef.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanChargeAdjustmentStepDef.java @@ -29,7 +29,7 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; -import org.apache.fineract.client.models.BusinessDateResponse; +import org.apache.fineract.client.models.BusinessDateData; import org.apache.fineract.client.models.GetLoansLoanIdLoanChargeData; import org.apache.fineract.client.models.GetLoansLoanIdResponse; import org.apache.fineract.client.models.GetLoansLoanIdTransactions; @@ -132,7 +132,7 @@ public class LoanChargeAdjustmentStepDef extends AbstractStepDef { Long transactionId = getTransactionIdForTransactionMetConditions(transactionDate, transactionAmount, loanDetailsResponse); - Response> businessDateResponse = businessDateManagementApi.getBusinessDates().execute(); + Response> businessDateResponse = businessDateManagementApi.getBusinessDates().execute(); LocalDate businessDate = businessDateResponse.body().get(0).getDate(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMAT); String businessDateActual = formatter.format(businessDate); diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiTest.java index 1cf44628a..7ffa686da 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiTest.java @@ -23,21 +23,16 @@ import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; -import jakarta.servlet.ServletException; -import jakarta.ws.rs.core.UriInfo; -import java.io.IOException; import java.util.List; import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService; import org.apache.fineract.infrastructure.businessdate.data.BusinessDateData; +import org.apache.fineract.infrastructure.businessdate.data.request.BusinessDateRequest; import org.apache.fineract.infrastructure.businessdate.service.BusinessDateReadPlatformService; -import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; -import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer; import org.apache.fineract.infrastructure.security.exception.NoAuthorizationException; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.useradministration.domain.AppUser; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -51,15 +46,9 @@ import org.mockito.quality.Strictness; @MockitoSettings(strictness = Strictness.LENIENT) class BusinessDateApiTest { - @Mock - private ApiRequestParameterHelper parameterHelper; - @Mock private BusinessDateReadPlatformService readPlatformService; - @Mock - private UriInfo uriInfo; - @Mock private PlatformSecurityContext securityContext; @@ -72,16 +61,8 @@ class BusinessDateApiTest { @InjectMocks private BusinessDateApiResource underTest; - private ApiRequestJsonSerializationSettings apiRequestJsonSerializationSettings; - - @BeforeEach - void setUp() throws IOException { - apiRequestJsonSerializationSettings = new ApiRequestJsonSerializationSettings(false, null, false, false, false); - given(parameterHelper.process(Mockito.any())).willReturn(apiRequestJsonSerializationSettings); - } - @Test - void getBusinessDatesAPIHasPermission() throws ServletException, IOException { + void getBusinessDatesAPIHasPermission() { AppUser appUser = Mockito.mock(AppUser.class); List response = Mockito.mock(List.class); given(readPlatformService.findAll()).willReturn(response); @@ -89,26 +70,25 @@ class BusinessDateApiTest { Mockito.doNothing().when(appUser).validateHasReadPermission("BUSINESS_DATE"); given(securityContext.authenticatedUser()).willReturn(appUser); // when - underTest.getBusinessDates(uriInfo); + underTest.getBusinessDates(); // then verify(readPlatformService, Mockito.times(1)).findAll(); - verify(jsonSerializer, Mockito.times(1)).serialize(apiRequestJsonSerializationSettings, response); } @Test - void getBusinessDatesAPIHasNoPermission() throws ServletException, IOException { + void getBusinessDatesAPIHasNoPermission() { AppUser appUser = Mockito.mock(AppUser.class); // given Mockito.doThrow(NoAuthorizationException.class).when(appUser).validateHasReadPermission("BUSINESS_DATE"); given(securityContext.authenticatedUser()).willReturn(appUser); // when - assertThatThrownBy(() -> underTest.getBusinessDates(uriInfo)).isInstanceOf(NoAuthorizationException.class); + assertThatThrownBy(() -> underTest.getBusinessDates()).isInstanceOf(NoAuthorizationException.class); // then verifyNoInteractions(readPlatformService); } @Test - void getBusinessDateByTypeAPIHasPermission() throws ServletException, IOException { + void getBusinessDateByTypeAPIHasPermission() { AppUser appUser = Mockito.mock(AppUser.class); BusinessDateData response = Mockito.mock(BusinessDateData.class); given(readPlatformService.findByType("type")).willReturn(response); @@ -116,26 +96,25 @@ class BusinessDateApiTest { Mockito.doNothing().when(appUser).validateHasReadPermission("BUSINESS_DATE"); given(securityContext.authenticatedUser()).willReturn(appUser); // when - underTest.getBusinessDate("type", uriInfo); + underTest.getBusinessDate("type"); // then verify(readPlatformService, Mockito.times(1)).findByType("type"); - verify(jsonSerializer, Mockito.times(1)).serialize(apiRequestJsonSerializationSettings, response); } @Test - void getBusinessDateByTypeAPIHasNoPermission() throws ServletException, IOException { + void getBusinessDateByTypeAPIHasNoPermission() { AppUser appUser = Mockito.mock(AppUser.class); // given Mockito.doThrow(NoAuthorizationException.class).when(appUser).validateHasReadPermission("BUSINESS_DATE"); given(securityContext.authenticatedUser()).willReturn(appUser); // when - assertThatThrownBy(() -> underTest.getBusinessDate("type", uriInfo)).isInstanceOf(NoAuthorizationException.class); + assertThatThrownBy(() -> underTest.getBusinessDate("type")).isInstanceOf(NoAuthorizationException.class); // then verifyNoInteractions(readPlatformService); } @Test - void postBusinessDateAPIHasPermission() throws ServletException, IOException { + void postBusinessDateAPIHasPermission() { AppUser appUser = Mockito.mock(AppUser.class); CommandProcessingResult response = Mockito.mock(CommandProcessingResult.class); // given @@ -143,20 +122,19 @@ class BusinessDateApiTest { given(securityContext.authenticatedUser()).willReturn(appUser); given(commandWritePlatformService.logCommandSource(Mockito.any())).willReturn(response); // when - underTest.updateBusinessDate("{}", uriInfo); + underTest.updateBusinessDate(BusinessDateRequest.ofNull()); // then verify(commandWritePlatformService, Mockito.times(1)).logCommandSource(Mockito.any()); - verify(jsonSerializer, Mockito.times(1)).serialize(response); } @Test - void postBusinessDateAPIHasNoPermission() throws ServletException, IOException { + void postBusinessDateAPIHasNoPermission() { AppUser appUser = Mockito.mock(AppUser.class); // given Mockito.doThrow(NoAuthorizationException.class).when(appUser).validateHasUpdatePermission("BUSINESS_DATE"); given(securityContext.authenticatedUser()).willReturn(appUser); // when - assertThatThrownBy(() -> underTest.updateBusinessDate("{}", uriInfo)).isInstanceOf(NoAuthorizationException.class); + assertThatThrownBy(() -> underTest.updateBusinessDate(BusinessDateRequest.ofNull())).isInstanceOf(NoAuthorizationException.class); // then verifyNoInteractions(readPlatformService); } diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java index 9ca4457d3..098ff63dc 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java @@ -41,7 +41,7 @@ import java.util.HashMap; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.Pair; -import org.apache.fineract.client.models.BusinessDateResponse; +import org.apache.fineract.client.models.BusinessDateData; import org.apache.fineract.client.models.DeleteDelinquencyBucketResponse; import org.apache.fineract.client.models.DeleteDelinquencyRangeResponse; import org.apache.fineract.client.models.GetDelinquencyBucketsResponse; @@ -321,7 +321,7 @@ public class DelinquencyBucketsIntegrationTest extends BaseLoanIntegrationTest { final LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 March 2012"); log.info("Current date {}", bussinesLocalDate); BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate); - final BusinessDateResponse businessDateResponse = this.businessDateHelper.getBusinessDateByType(requestSpec, responseSpec, + final BusinessDateData businessDateResponse = this.businessDateHelper.getBusinessDateByType(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE); ArrayList rangeIds = new ArrayList<>(); diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessDateHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessDateHelper.java index 918d2d7e2..d94eb3e9b 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessDateHelper.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessDateHelper.java @@ -25,6 +25,7 @@ import java.time.LocalDate; import java.util.HashMap; import java.util.List; import lombok.extern.slf4j.Slf4j; +import org.apache.fineract.client.models.BusinessDateData; import org.apache.fineract.client.models.BusinessDateRequest; import org.apache.fineract.client.models.BusinessDateResponse; import org.apache.fineract.client.util.Calls; @@ -60,19 +61,19 @@ public final class BusinessDateHelper { // Example: org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper.disburseLoan(java.lang.Long, // org.apache.fineract.client.models.PostLoansLoanIdRequest) @Deprecated(forRemoval = true) - public BusinessDateResponse getBusinessDateByType(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + public BusinessDateData getBusinessDateByType(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, final BusinessDateType type) { final String BUSINESS_DATE_API = "/fineract-provider/api/v1/businessdate/" + type.name() + "?" + Utils.TENANT_IDENTIFIER; final String response = Utils.performServerGet(requestSpec, responseSpec, BUSINESS_DATE_API); log.info("{}", response); - return GSON.fromJson(response, BusinessDateResponse.class); + return GSON.fromJson(response, BusinessDateData.class); } - public BusinessDateResponse getBusinessDate(final String type) { + public BusinessDateData getBusinessDate(final String type) { return Calls.ok(FineractClientHelper.getFineractClient().businessDateManagement.getBusinessDate(type)); } - public List getBusinessDates() { + public List getBusinessDates() { return Calls.ok(FineractClientHelper.getFineractClient().businessDateManagement.getBusinessDates()); }