FINERACT-2169: Refactor collection sheet api;
This commit is contained in:
committed by
Adam Saghy
parent
a72a919562
commit
a9fe523eae
+2
@@ -22,6 +22,8 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
|
|
||||||
public final class CommandParameterUtil {
|
public final class CommandParameterUtil {
|
||||||
|
|
||||||
|
public static final String GENERATE_COLLECTION_SHEET_COMMAND_VALUE = "generateCollectionSheet";
|
||||||
|
public static final String SAVE_COLLECTION_SHEET_COMMAND_VALUE = "saveCollectionSheet";
|
||||||
public static final String INTERMEDIARY_SALE_COMMAND_VALUE = "intermediarySale";
|
public static final String INTERMEDIARY_SALE_COMMAND_VALUE = "intermediarySale";
|
||||||
public static final String SALE_COMMAND_VALUE = "sale";
|
public static final String SALE_COMMAND_VALUE = "sale";
|
||||||
public static final String BUY_BACK_COMMAND_VALUE = "buyback";
|
public static final String BUY_BACK_COMMAND_VALUE = "buyback";
|
||||||
|
|||||||
+18
-28
@@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.fineract.portfolio.collectionsheet.api;
|
package org.apache.fineract.portfolio.collectionsheet.api;
|
||||||
|
|
||||||
|
import static org.apache.fineract.infrastructure.core.service.CommandParameterUtil.GENERATE_COLLECTION_SHEET_COMMAND_VALUE;
|
||||||
|
import static org.apache.fineract.infrastructure.core.service.CommandParameterUtil.SAVE_COLLECTION_SHEET_COMMAND_VALUE;
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
@@ -32,23 +35,19 @@ import jakarta.ws.rs.POST;
|
|||||||
import jakarta.ws.rs.Path;
|
import jakarta.ws.rs.Path;
|
||||||
import jakarta.ws.rs.Produces;
|
import jakarta.ws.rs.Produces;
|
||||||
import jakarta.ws.rs.QueryParam;
|
import jakarta.ws.rs.QueryParam;
|
||||||
import jakarta.ws.rs.core.Context;
|
|
||||||
import jakarta.ws.rs.core.MediaType;
|
import jakarta.ws.rs.core.MediaType;
|
||||||
import jakarta.ws.rs.core.UriInfo;
|
import jakarta.ws.rs.core.Response;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.apache.fineract.commands.domain.CommandWrapper;
|
import org.apache.fineract.commands.domain.CommandWrapper;
|
||||||
import org.apache.fineract.commands.service.CommandWrapperBuilder;
|
import org.apache.fineract.commands.service.CommandWrapperBuilder;
|
||||||
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
|
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
|
||||||
import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper;
|
|
||||||
import org.apache.fineract.infrastructure.core.api.JsonQuery;
|
import org.apache.fineract.infrastructure.core.api.JsonQuery;
|
||||||
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
|
|
||||||
import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
|
|
||||||
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||||
import org.apache.fineract.infrastructure.core.serialization.ToApiJsonSerializer;
|
import org.apache.fineract.infrastructure.core.serialization.ToApiJsonSerializer;
|
||||||
|
import org.apache.fineract.infrastructure.core.service.CommandParameterUtil;
|
||||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||||
import org.apache.fineract.portfolio.collectionsheet.CollectionSheetConstants;
|
import org.apache.fineract.portfolio.collectionsheet.CollectionSheetConstants;
|
||||||
import org.apache.fineract.portfolio.collectionsheet.data.IndividualCollectionSheetData;
|
import org.apache.fineract.portfolio.collectionsheet.data.CollectionSheetRequest;
|
||||||
import org.apache.fineract.portfolio.collectionsheet.service.CollectionSheetReadPlatformService;
|
import org.apache.fineract.portfolio.collectionsheet.service.CollectionSheetReadPlatformService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -61,7 +60,6 @@ public class CollectionSheetApiResource {
|
|||||||
private final CollectionSheetReadPlatformService collectionSheetReadPlatformService;
|
private final CollectionSheetReadPlatformService collectionSheetReadPlatformService;
|
||||||
private final ToApiJsonSerializer<Object> toApiJsonSerializer;
|
private final ToApiJsonSerializer<Object> toApiJsonSerializer;
|
||||||
private final FromJsonHelper fromJsonHelper;
|
private final FromJsonHelper fromJsonHelper;
|
||||||
private final ApiRequestParameterHelper apiRequestPrameterHelper;
|
|
||||||
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
|
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
|
||||||
private final PlatformSecurityContext context;
|
private final PlatformSecurityContext context;
|
||||||
|
|
||||||
@@ -72,31 +70,23 @@ public class CollectionSheetApiResource {
|
|||||||
+ "This Api retrieves repayment details of all individual loans under a office as on a specified meeting date.\n\n"
|
+ "This Api retrieves repayment details of all individual loans under a office as on a specified meeting date.\n\n"
|
||||||
+ "Save Collection Sheet:\n\n"
|
+ "Save Collection Sheet:\n\n"
|
||||||
+ "This Api allows the loan officer to perform bulk repayments of individual loans and deposit of mandatory savings on a given meeting date.")
|
+ "This Api allows the loan officer to perform bulk repayments of individual loans and deposit of mandatory savings on a given meeting date.")
|
||||||
@RequestBody(required = true, content = @Content(schema = @Schema(implementation = CollectionSheetApiResourceSwagger.PostCollectionSheetRequest.class)))
|
@RequestBody(required = true, content = @Content(schema = @Schema(implementation = CollectionSheetRequest.class)))
|
||||||
@ApiResponses({
|
@ApiResponses({
|
||||||
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = CollectionSheetApiResourceSwagger.PostCollectionSheetResponse.class))) })
|
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = CollectionSheetApiResourceSwagger.PostCollectionSheetResponse.class))) })
|
||||||
public String generateCollectionSheet(@QueryParam("command") @Parameter(description = "command") final String commandParam,
|
public Response generateCollectionSheet(@QueryParam("command") @Parameter(description = "command") final String commandParam,
|
||||||
@Parameter(hidden = true) final String apiRequestBodyAsJson, @Context final UriInfo uriInfo) {
|
@Parameter(hidden = true) CollectionSheetRequest collectionSheetRequest) {
|
||||||
final CommandWrapperBuilder builder = new CommandWrapperBuilder().withJson(apiRequestBodyAsJson);
|
final String payload = toApiJsonSerializer.serialize(collectionSheetRequest);
|
||||||
CommandProcessingResult result = null;
|
final CommandWrapperBuilder builder = new CommandWrapperBuilder().withJson(payload);
|
||||||
|
|
||||||
if (is(commandParam, "generateCollectionSheet")) {
|
if (CommandParameterUtil.is(commandParam, GENERATE_COLLECTION_SHEET_COMMAND_VALUE)) {
|
||||||
this.context.authenticatedUser().validateHasReadPermission(CollectionSheetConstants.COLLECTIONSHEET_RESOURCE_NAME);
|
this.context.authenticatedUser().validateHasReadPermission(CollectionSheetConstants.COLLECTIONSHEET_RESOURCE_NAME);
|
||||||
final JsonElement parsedQuery = this.fromJsonHelper.parse(apiRequestBodyAsJson);
|
final JsonElement parsedQuery = this.fromJsonHelper.parse(payload);
|
||||||
final JsonQuery query = JsonQuery.from(apiRequestBodyAsJson, parsedQuery, this.fromJsonHelper);
|
final JsonQuery query = JsonQuery.from(payload, parsedQuery, this.fromJsonHelper);
|
||||||
final IndividualCollectionSheetData collectionSheet = this.collectionSheetReadPlatformService
|
return Response.ok(this.collectionSheetReadPlatformService.generateIndividualCollectionSheet(query)).build();
|
||||||
.generateIndividualCollectionSheet(query);
|
} else if (CommandParameterUtil.is(commandParam, SAVE_COLLECTION_SHEET_COMMAND_VALUE)) {
|
||||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestPrameterHelper.process(uriInfo.getQueryParameters());
|
|
||||||
return this.toApiJsonSerializer.serialize(settings, collectionSheet);
|
|
||||||
} else if (is(commandParam, "saveCollectionSheet")) {
|
|
||||||
final CommandWrapper commandRequest = builder.saveIndividualCollectionSheet().build();
|
final CommandWrapper commandRequest = builder.saveIndividualCollectionSheet().build();
|
||||||
result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
|
return Response.ok(this.commandsSourceWritePlatformService.logCommandSource(commandRequest)).build();
|
||||||
return this.toApiJsonSerializer.serialize(result);
|
|
||||||
}
|
}
|
||||||
return null;
|
return Response.ok().build();
|
||||||
}
|
|
||||||
|
|
||||||
private boolean is(final String commandParam, final String commandValue) {
|
|
||||||
return StringUtils.isNotBlank(commandParam) && commandParam.trim().equalsIgnoreCase(commandValue);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
* 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.portfolio.collectionsheet.data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.FieldNameConstants;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@FieldNameConstants
|
||||||
|
public class CollectionSheetRequest implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private Long officeId;
|
||||||
|
private String dateFormat;
|
||||||
|
private String locale;
|
||||||
|
private String actualDisbursementDate;
|
||||||
|
private String transactionDate;
|
||||||
|
private DisbursementTransactionsRequest bulkDisbursementTransactions;
|
||||||
|
|
||||||
|
}
|
||||||
+42
@@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* 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.portfolio.collectionsheet.data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.FieldNameConstants;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@FieldNameConstants
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class DisbursementTransactionsRequest implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private List<RepaymentTransactionRequest> bulkRepaymentTransactions;
|
||||||
|
private List<SavingDueTransactionRequest> bulkSavingsDueTransactions;
|
||||||
|
}
|
||||||
+10
-13
@@ -18,14 +18,23 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.fineract.portfolio.collectionsheet.data;
|
package org.apache.fineract.portfolio.collectionsheet.data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData;
|
import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Immutable data object for collection sheet.
|
* Immutable data object for collection sheet.
|
||||||
*/
|
*/
|
||||||
public final class IndividualCollectionSheetData {
|
@Getter
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public final class IndividualCollectionSheetData implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final LocalDate dueDate;
|
private final LocalDate dueDate;
|
||||||
@@ -35,16 +44,4 @@ public final class IndividualCollectionSheetData {
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final Collection<PaymentTypeData> paymentTypeOptions;
|
private final Collection<PaymentTypeData> paymentTypeOptions;
|
||||||
|
|
||||||
public static IndividualCollectionSheetData instance(final LocalDate date, final Collection<IndividualClientData> clients,
|
|
||||||
final Collection<PaymentTypeData> paymentTypeOptions) {
|
|
||||||
return new IndividualCollectionSheetData(date, clients, paymentTypeOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
private IndividualCollectionSheetData(final LocalDate dueDate, final Collection<IndividualClientData> clients,
|
|
||||||
final Collection<PaymentTypeData> paymentTypeOptions) {
|
|
||||||
this.dueDate = dueDate;
|
|
||||||
this.clients = clients;
|
|
||||||
this.paymentTypeOptions = paymentTypeOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/**
|
||||||
|
* 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.portfolio.collectionsheet.data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.FieldNameConstants;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@FieldNameConstants
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class RepaymentTransactionRequest implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private Long loanId;
|
||||||
|
private BigDecimal transactionAmount;
|
||||||
|
private Long paymentTypeId;
|
||||||
|
private String accountNumber;
|
||||||
|
private String checkNumber;
|
||||||
|
private String routingCode;
|
||||||
|
private String receiptNumber;
|
||||||
|
private String bankNumber;
|
||||||
|
}
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
* 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.portfolio.collectionsheet.data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.FieldNameConstants;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@FieldNameConstants
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class SavingDueTransactionRequest implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private Long savingsId;
|
||||||
|
private BigDecimal transactionAmount;
|
||||||
|
private Long depositAccountType;
|
||||||
|
private Long paymentTypeId;
|
||||||
|
private String accountNumber;
|
||||||
|
private String checkNumber;
|
||||||
|
private String routingCode;
|
||||||
|
private String receiptNumber;
|
||||||
|
private String bankNumber;
|
||||||
|
}
|
||||||
+1
-1
@@ -713,7 +713,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
|
|||||||
|
|
||||||
final Collection<PaymentTypeData> paymentOptions = this.paymentTypeReadPlatformService.retrieveAllPaymentTypes();
|
final Collection<PaymentTypeData> paymentOptions = this.paymentTypeReadPlatformService.retrieveAllPaymentTypes();
|
||||||
|
|
||||||
return IndividualCollectionSheetData.instance(transactionDate, clientData, paymentOptions);
|
return new IndividualCollectionSheetData(transactionDate, clientData, paymentOptions);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user