diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java deleted file mode 100644 index e3c3b6d..0000000 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.mfsys.aconnect.client.controller; - -import com.mfsys.aconnect.client.dto.InProcessApplicationsRequestDTO; -import com.mfsys.aconnect.client.service.InProcessApplicationsService; -import com.mfsys.common.configuration.constant.AconnectURI; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -@RestController -public class InProcessApplicationsController { - - private final InProcessApplicationsService service; - - public InProcessApplicationsController( - InProcessApplicationsService service) { - this.service = service; - } - - @PostMapping(AconnectURI.CHECK_PENDING_APPLICATIONS_URI) - public ResponseEntity getInProcessApplications(@RequestBody InProcessApplicationsRequestDTO request, - @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode) { - return service.getInProcessApplications(request, token, susUserCode); - } - - @GetMapping(AconnectURI.CHECK_INDIVIDUAL_APPLICATIONS_URI) - public ResponseEntitygetIndividualApplication( - @RequestParam("POR_ORGACODE") String porOrgacode,@RequestParam("formId") String formId, - @RequestParam(value = "includeFields", required = false) String includeFields, - @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode){ - return service.getPendingIndividualApplication(porOrgacode, formId, includeFields, token, susUserCode); - } -} diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/PendingCRMApplicationsController.java b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/PendingCRMApplicationsController.java new file mode 100644 index 0000000..8dc2ece --- /dev/null +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/PendingCRMApplicationsController.java @@ -0,0 +1,38 @@ +package com.mfsys.aconnect.client.controller; + +import com.mfsys.aconnect.client.dto.InProcessApplicationsRequestDTO; +import com.mfsys.aconnect.client.service.InProcessApplicationsService; +import com.mfsys.common.configuration.constant.AconnectURI; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class PendingCRMApplicationsController { + + private final InProcessApplicationsService inProcessApplicationsService; + + public PendingCRMApplicationsController( + InProcessApplicationsService inProcessApplicationsService) { + this.inProcessApplicationsService = inProcessApplicationsService; + } + + @PostMapping(AconnectURI.GET_INDIVIDUAL_PENDING_APPLICATIONS_URI) + public ResponseEntity getIndividualPendingCRMs(@RequestBody InProcessApplicationsRequestDTO request, + @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode) { + return inProcessApplicationsService.getIndividualPendingCRM(request, token, susUserCode); + } + + @PostMapping(AconnectURI.GET_BUSINESS_PENDING_APPLICATIONS_URI) + public ResponseEntity getBusinessPendingCRMs(@RequestBody InProcessApplicationsRequestDTO request, + @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode) { + return inProcessApplicationsService.getBusinessPendingCRM(request, token, susUserCode); + } + + @GetMapping(AconnectURI.CHECK_INDIVIDUAL_APPLICATIONS_URI) + public ResponseEntitygetIndividualApplication( + @RequestParam("POR_ORGACODE") String porOrgacode,@RequestParam("formId") String formId, + @RequestParam(value = "includeFields", required = false) String includeFields, + @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode){ + return inProcessApplicationsService.getPendingIndividualApplication(porOrgacode, formId, includeFields, token, susUserCode); + } +} diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessApplicationsService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessApplicationsService.java index e51c148..f57b85e 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessApplicationsService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessApplicationsService.java @@ -64,7 +64,42 @@ public class InProcessApplicationsService { ); } - private LazyListRequestDTO buildLazyListPayload(InProcessApplicationsRequestDTO req) { + private Map businessBuildWorkflowFilter(InProcessApplicationsRequestDTO req) { + List workflowQueries = new ArrayList<>(); + + if (req.isIncludeRegistrationPending()) { + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_WF_BP_REGISTRATION", "text", "="), + param("applicationStatus", "Pending", "text", "=") + ), + "operator", "$and" + )); + } + if (req.isIncludeAuthorizationApproved()) { + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_WF_BP_AUTHORIZATION", "text", "="), + param("applicationStatus", "Approved", "text", "="), + param("postProcessCompleted", true, "boolean", "!=") + ), + "operator", "$and" + )); + } + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_WF_BP_REGISTRATION", "text", "="), + param("applicationStatus", "[\"Rejected\",\"Hold\"]", "text", "in") + ), + "operator", "$and" + )); + return Map.of( + "nestedQuery", workflowQueries, + "operator", "$or" + ); + } + + private LazyListRequestDTO indivdualBuildLazyListPayload(InProcessApplicationsRequestDTO req) { List rootQueries = new ArrayList<>(); @@ -105,12 +140,76 @@ public class InProcessApplicationsService { return dto; } - public ResponseEntity getInProcessApplications( + private LazyListRequestDTO BusinessBuildLazyListPayload(InProcessApplicationsRequestDTO req) { + + List rootQueries = new ArrayList<>(); + + rootQueries.add(Map.of( + "params", List.of( + param("POR_ORGACODE", req.getPorOrgacode(), "text", "="), + param("POR_ORGACODE_ENTRY", req.getPorOrgacode(), "text", "=") + ), + "operator", "$or" + )); + + rootQueries.add(Map.of( + "params", List.of( + param("PLC_LOCACODE", "[\"" + req.getPlclocacode() + "\"]", "text", "in"), + param("PLC_LOCACODE_ENTRY", "[\"" + req.getPlclocacode() + "\"]", "text", "in") + ), + "operator", "$or" + )); + + rootQueries.add(businessBuildWorkflowFilter(req)); + + LazyListRequestDTO dto = new LazyListRequestDTO(); + dto.setCollection("BN_WF_BP_BUSINESSPROFILE"); + dto.setFilter(Map.of( + "nestedQuery", rootQueries, + "operator", "$and" + )); + if (req.getLimit() != null) { + dto.setLimit(req.getLimit()); + } + dto.setSortBy("{\"workFlowRefNum\":-1}"); + dto.setIncludeFields(List.of( + "CMP_CUSTCODE", "CMP_COMPANYNAME", "workFlowRefNum", "applicationStatus", "workFlowStage", + "workFlowStage", "workFlowLog", "postProcessCompleted", "failureCause", + "postProcessInProgress" + )); + + return dto; + } + + public ResponseEntity getIndividualPendingCRM( + InProcessApplicationsRequestDTO request, String token, String susUserCode) { + + String url = crmURI + "/crm" + "/mongodb/lazylist"; + + LazyListRequestDTO payload = indivdualBuildLazyListPayload(request); + + HttpHeaders headers = new HttpHeaders(); + headers.set("Authorization", token); + headers.set("POR_ORGACODE", request.getPorOrgacode()); + headers.set("SUS_USERCODE", susUserCode); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity entity = new HttpEntity<>(payload, headers); + + return restTemplate.exchange( + url, + HttpMethod.POST, + entity, + String.class + ); + } + + public ResponseEntity getBusinessPendingCRM( InProcessApplicationsRequestDTO request, String token, String susUserCode) { String url = crmURI + "/crm" + "/mongodb/lazylist"; - LazyListRequestDTO payload = buildLazyListPayload(request); + LazyListRequestDTO payload = BusinessBuildLazyListPayload(request); HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", token); diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java b/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java index f2f73c2..ee3f57e 100644 --- a/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java +++ b/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java @@ -30,8 +30,11 @@ public interface AconnectURI { String GL_TO_ACCOUNT_TRANSACTION_URI = TRANSACTION_URI + "/gl-account"; String INDIVIDUAL_CRM_CREATION_URI = CRM + INDIVIDUAL + "/create"; String APPROVE_INDIVIDUAL_CRM_URI = CRM + INDIVIDUAL + "/approve"; - String CHECK_PENDING_APPLICATIONS_URI = CRM + "/inprocess"; + String GET_INDIVIDUAL_PENDING_APPLICATIONS_URI = CRM + INDIVIDUAL + "/pending-workflow"; + String CHECK_INDIVIDUAL_PENDING_APPLICATIONS_URI = CRM + INDIVIDUAL + "/inprocess"; String CHECK_INDIVIDUAL_APPLICATIONS_URI = CRM + INDIVIDUAL + "/inprocess"; + String GET_BUSINESS_PENDING_APPLICATIONS_URI = CRM + BUSINESS + "/pending-workflow"; + String CHECK_BUSINESS_APPLICATIONS_URI = CRM + BUSINESS + "/inprocess"; String BUSINESS_CRM_CREATION_URI = CRM + BUSINESS + "/create"; String INDIVIDUAL_DEPOSIT_CREATION_URI = DEPOSIT + INDIVIDUAL + "/create"; String UPDATE_DEPOSIT_CREATION_URI = DEPOSIT + INDIVIDUAL + "/approval"; diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java b/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java index 01b165b..25a4821 100644 --- a/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java +++ b/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java @@ -13,6 +13,8 @@ public interface TokenBypassURI { "/aconnect/transactions/accounttogl", "/aconnect/crm/individual/approve", "/aconnect/crm/inprocess", + "/aconnect/crm/individual/pending-workflow", + "/aconnect/crm/business/pending-workflow", "/aconnect/crm/individual/inprocess", "/aconnect/account/miscDetails", "/deposit/account/miscDetails",