From c7111f2028f4efa08402d2f52c26d2e14857b689 Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Tue, 9 Jul 2024 10:25:36 +0100 Subject: [PATCH 01/15] DFPL-2427 POC controllers for FPL API gateway (#5481) * add dummy controller for API gateway POC * update CafcassCasesController for POC * update CafcassCasesController for POC * Update CafcassCasesController.java * Update CafcassCasesControllerTest.java * Update CafcassCasesController.java * add all endpoint for POC * remove unused import * Update CafcassCasesControllerTest.java * Update CafcassCasesController.java * Update CafcassCasesController.java * update CafcassCasesController --- .../cafcass/CafcassCasesControllerTest.java | 283 ++++++++++++++++++ .../cafcass/CafcassCasesController.java | 119 ++++++++ 2 files changed, 402 insertions(+) create mode 100644 service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java new file mode 100644 index 00000000000..ae877c3c3d9 --- /dev/null +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java @@ -0,0 +1,283 @@ +package uk.gov.hmcts.reform.fpl.controllers.cafcass; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import uk.gov.hmcts.reform.fpl.controllers.AbstractTest; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@WebMvcTest(CafcassCasesController.class) +@OverrideAutoConfiguration(enabled = true) +public class CafcassCasesControllerTest extends AbstractTest { + private static final UUID CASE_ID = UUID.randomUUID(); + private static final byte[] FILE_BYTES = "This is a file. Trust me!".getBytes(); + private static final MockMultipartFile FILE = new MockMultipartFile( + "file", "MOCK_FILE.pdf", MediaType.TEXT_PLAIN_VALUE, FILE_BYTES); + + @Autowired + private MockMvc mockMvc; + + @Test + void searchCases() throws Exception { + MvcResult response = mockMvc + .perform(get("/cases") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(",")) + .queryParam("startDate", "2023-03-28T12:32:54.541") + .queryParam("endDate", "2024-03-27T12:32:54.542")) + .andExpect(status().is(200)) + .andReturn(); + + assertEquals("searchCases - Start date: [2023-03-28], End date: [2024-03-27]", + response.getResponse().getContentAsString()); + } + + @Test + void searchCasesInvalidFormat400() throws Exception { + MvcResult response = mockMvc + .perform(get("/cases") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(",")) + .queryParam("startDate", "123") + .queryParam("endDate", "321")) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + } + + @Test + void searchCasesEmptyParam400() throws Exception { + MvcResult response = mockMvc + .perform(get("/cases")) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + + response = mockMvc + .perform(get("/cases") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(",")) + .queryParam("startDate", "2023-03-28T12:32:54.541")) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + + response = mockMvc + .perform(get("/cases") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(",")) + .queryParam("endDate", "2024-03-27T12:32:54.542")) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + } + + @Test + void searchCases500() throws Exception { + MvcResult response = mockMvc + .perform(get("/cases") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(",")) + .queryParam("startDate", "2024-03-28T12:32:54.541") + .queryParam("endDate", "2023-03-27T12:32:54.542")) + .andExpect(status().is(500)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 500); + } + + @Test + void getDocumentBinary() throws Exception { + UUID docId = UUID.randomUUID(); + MvcResult response = mockMvc + .perform(get("/cases/documents/%s/binary".formatted(docId)) + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(200)) + .andReturn(); + + assertEquals("getDocumentBinary - document id: [%s]".formatted(docId), + response.getResponse().getContentAsString()); + } + + @Test + void getDocumentBinary400() throws Exception { + MvcResult response = mockMvc + .perform(get("/cases/documents/123/binary") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + + response = mockMvc + .perform(get("/cases/documents/ /binary") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + } + + @Test + void uploadDocument() throws Exception { + + MvcResult response = mockMvc + .perform(MockMvcRequestBuilders.multipart("/cases/%s/document".formatted(CASE_ID)) + .file(FILE) + .param("typeOfDocument", "type Of Document") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(200)) + .andReturn(); + + assertEquals("uploadDocument - caseId: [%s], file length: [%s], typeOfDocument: [%s]" + .formatted(CASE_ID, FILE_BYTES.length, "type Of Document"), + response.getResponse().getContentAsString()); + } + + @Test + void uploadDocument400() throws Exception { + UUID caseId = UUID.randomUUID(); + + MvcResult response = mockMvc + .perform(MockMvcRequestBuilders.multipart("/cases/%s/document".formatted(caseId)) + .param("typeOfDocument", "type Of Document") + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + + + byte[] fileBytes = "This is a file. Trust me!".getBytes(); + MockMultipartFile file = new MockMultipartFile( + "file", "MOCK_FILE.pdf", MediaType.TEXT_PLAIN_VALUE, fileBytes); + + response = mockMvc + .perform(MockMvcRequestBuilders.multipart("/cases/%s/document".formatted(caseId)) + .file(file) + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + } + + @Test + void uploadGuardians() throws Exception { + UUID caseId = UUID.randomUUID(); + + MvcResult response = mockMvc.perform(post("/cases/%s/guardians".formatted(caseId)) + .content("[\n" + + " {\n" + + " \"guardianName\": \"John Smith\",\n" + + " \"telephoneNumber\": \"01234567890\",\n" + + " \"email\": \"john.smith@example.com\",\n" + + " \"children\": [\n" + + " \"Joe Bloggs\"\n" + + " ]\n" + + " }\n" + + "]") + .contentType(MediaType.APPLICATION_JSON) + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(200)) + .andReturn(); + + assertEquals("uploadGuardians - caseId: [%s], no of guardians: [%s]\nguardianName: [%s], children: [%s]\n" + .formatted(caseId, 1, "John Smith", "Joe Bloggs"), + response.getResponse().getContentAsString()); + } + + @Test + void uploadGuardians400() throws Exception { + UUID caseId = UUID.randomUUID(); + + MvcResult response = mockMvc.perform(post("/cases/%s/guardians".formatted(caseId)) + .content("[]") + .contentType(MediaType.APPLICATION_JSON) + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + + response = mockMvc.perform(post("/cases/%s/guardians".formatted(" ")) + .content("[\n" + + " {\n" + + " \"guardianName\": \"John Smith\",\n" + + " \"telephoneNumber\": \"01234567890\",\n" + + " \"email\": \"john.smith@example.com\",\n" + + " \"children\": [\n" + + " \"Joe Bloggs\"\n" + + " ]\n" + + " }\n" + + "]") + .contentType(MediaType.APPLICATION_JSON) + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(400)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 400); + } + + @Test + void uploadGuardians500() throws Exception { + UUID caseId = UUID.randomUUID(); + + MvcResult response = mockMvc.perform(post("/cases/%s/guardians".formatted(caseId)) + .content("[\n" + + " {\n" + + " \"guardianName\": \"John Smith\",\n" + + " \"telephoneNumber\": \"01234567890\",\n" + + " \"email\": \"john.smith@example.com\",\n" + + " \"children\": \"12313\"" + + " }\n" + + "]") + .contentType(MediaType.APPLICATION_JSON) + .header("authorization", USER_AUTH_TOKEN) + .header("user-id", USER_ID) + .header("user-roles", String.join(","))) + .andExpect(status().is(500)) + .andReturn(); + + assertEquals(response.getResponse().getStatus(), 500); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java new file mode 100644 index 00000000000..ce54fad3020 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java @@ -0,0 +1,119 @@ +package uk.gov.hmcts.reform.fpl.controllers.cafcass; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import uk.gov.hmcts.reform.fpl.utils.DateFormatterHelper; + +import java.time.DateTimeException; +import java.time.LocalDate; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import static org.apache.commons.lang3.ObjectUtils.isEmpty; + +@Slf4j +@RestController +@RequestMapping("/cases") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class CafcassCasesController { + private static final String DATE_TIME_FORMAT_IN = "yyyy-MM-dd'T'hh:mm:ss.SSS"; + private static final String DATE_TIME_FORMAT_OUT = "yyyy-MM-dd"; + + @GetMapping("") + public ResponseEntity searchCases(@RequestParam(name = "startDate") String startDate, + @RequestParam(name = "endDate") String endDate) { + log.info("searchCases request received"); + try { + log.info("searchCases, " + startDate + ", " + endDate); + LocalDate startLocalDateTime = + DateFormatterHelper.parseLocalDateFromStringUsingFormat(startDate, DATE_TIME_FORMAT_IN); + LocalDate endLocalDateTime = + DateFormatterHelper.parseLocalDateFromStringUsingFormat(endDate, DATE_TIME_FORMAT_IN); + + if (startLocalDateTime.isAfter(endLocalDateTime)) { + throw new Exception("startDate after endDate"); + } + + return ResponseEntity.ok(String.format("searchCases - Start date: [%s], End date: [%s]", + DateFormatterHelper.formatLocalDateToString(startLocalDateTime, DATE_TIME_FORMAT_OUT), + DateFormatterHelper.formatLocalDateToString(endLocalDateTime, DATE_TIME_FORMAT_OUT) + )); + } catch (DateTimeException e) { + return ResponseEntity.status(400).body("bad input parameter - " + e.getMessage()); + } catch (Exception e) { + return ResponseEntity.status(500).body("Internal server error - " + e.getMessage()); + } + } + + @GetMapping("documents/{documentId}/binary") + public ResponseEntity getDocumentBinary(@PathVariable String documentId) { + log.info("getDocumentBinary request received"); + try { + return ResponseEntity.ok(String.format("getDocumentBinary - document id: [%s]", + UUID.fromString(documentId))); + + } catch (IllegalArgumentException e) { + return ResponseEntity.status(400).body("bad input parameter - " + e.getMessage()); + } catch (Exception e) { + return ResponseEntity.status(500).body("Internal server error"); + } + } + + @PostMapping("{caseId}/document") + public ResponseEntity uploadDocument(@PathVariable String caseId, + @RequestParam(value = "file") MultipartFile file, + @RequestParam(value = "typeOfDocument") String typeOfDocument) { + log.info("uploadDocument request received"); + + try { + return ResponseEntity.ok(String.format( + "uploadDocument - caseId: [%s], file length: [%s], typeOfDocument: [%s]", + UUID.fromString(caseId), file.getSize(), typeOfDocument)); + } catch (IllegalArgumentException e) { + return ResponseEntity.status(400).body("bad input parameter - " + e.getMessage()); + } catch (Exception e) { + return ResponseEntity.status(500).body("Internal server error"); + } + } + + @SuppressWarnings("unchecked") + @PostMapping("{caseId}/guardians") + public ResponseEntity uploadGuardians(@PathVariable String caseId, + @RequestBody List> guardians) { + log.info("uploadGuardians request received"); + try { + if (isEmpty(guardians)) { + throw new IllegalArgumentException("list empty"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("uploadGuardians - caseId: [%s], no of guardians: [%s]\n" + .formatted(UUID.fromString(caseId), guardians.size())); + log.info("uploadGuardians guardians size " + guardians.size()); + + guardians.forEach(guardian -> { + sb.append("guardianName: [%s], ".formatted(guardian.get("guardianName"))); + sb.append("children: [%s]".formatted(String.join(", ", + ((List) guardian.get("children"))))); + sb.append("\n"); + }); + + return ResponseEntity.ok(sb); + } catch (IllegalArgumentException e) { + return ResponseEntity.status(400).body("bad input parameter - " + e.getMessage()); + } catch (Exception e) { + return ResponseEntity.status(500).body("Internal server error"); + } + } +} From 04f551eae794597feef3b58bd83f2d9644a4c4f3 Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:33:24 +0100 Subject: [PATCH 02/15] DFPL-1761 Build GET /searchCases endpoint (#5495) * add dummy controller for API gateway POC * update CafcassCasesController for POC * update CafcassCasesController for POC * Update CafcassCasesController.java * Update CafcassCasesControllerTest.java * Update CafcassCasesController.java * add all endpoint for POC * remove unused import * Update CafcassCasesControllerTest.java * Update CafcassCasesController.java * Update CafcassCasesController.java * update CafcassCasesController * DFPL-2449 Add interceptor and exception handling for Cafcass API (#5493) * Fix ES/logstash configuration in preview (#5488) * Copy adoption configuration to attempt to persist ES a bit more between pipeline runs * fix template variable in ES * fix template variable in ES * DFPL-2427 POC controllers for FPL API gateway (#5481) * add dummy controller for API gateway POC * update CafcassCasesController for POC * update CafcassCasesController for POC * Update CafcassCasesController.java * Update CafcassCasesControllerTest.java * Update CafcassCasesController.java * add all endpoint for POC * remove unused import * Update CafcassCasesControllerTest.java * Update CafcassCasesController.java * Update CafcassCasesController.java * update CafcassCasesController * add interceptor for verifying user role * add other exception * add unit test * fix check style --------- Co-authored-by: Daniel Catchpole * fix unit test * implement es search * search case response object * response field child and other * remove converters chain * other application details * refactor to chain pattern * orders document and manage document * case documents * fix category * CafcassApiHelperTest and CafcassApiCaseServiceTest * applicantConverter test * CafcassApiChildrenConverterTest * refactor CafcassApiCaseDocumentsConverter to more FP style * Create CafcassApiFactorsParentingConverterTest.java * Create CafcassApiHearingDetailsConverterTest.java * add CafcassApiInternationalElementConverterTest * Create CafcassApiMetaDataConverterTest.java * Create CafcassApiOthersConverterTest.java * add CafcassApiPreviousProceedingsConverterTest * refactor and add CafcassApiRespondentsConverterTest * Create CafcassApiRisksConverterTest.java * add sdo and udo converter test * add draft oder converting test * refactor to service * original application test * add managed doc test * update controller test * fix style check * fix unit test * fix code check * rename to CafcassApiSearchCaseService * Update AmendOrderToDownloadPrePopulatorTest.java * Update CafcassApiInterceptor.java * use cafcass role until new role is set up * Update CafcassApiInterceptor.java * use object provider * remove comment --------- Co-authored-by: Daniel Catchpole --- .../fpl/controllers/RootControllerTest.java | 5 + .../TestingSupportControllerTest.java | 4 + .../cafcass/CafcassApiControllerBaseTest.java | 62 ++ .../CafcassApiSearchCaseControllerTest.java | 82 +++ .../cafcass/CafcassCasesControllerTest.java | 154 +---- .../cafcass/CafcassApiConfiguration.java | 18 + .../cafcass/CafcassCasesController.java | 45 +- .../gov/hmcts/reform/fpl/enums/UserRole.java | 1 + .../reform/fpl/enums/cfv/DocumentType.java | 78 +-- .../api/AuthorizationException.java | 15 + .../fpl/exceptions/api/BadInputException.java | 15 + .../fpl/exceptions/api/NotFoundException.java | 15 + ...ionalApplicationsUploadedEventHandler.java | 13 +- .../cmo/DraftOrdersApprovedEventHandler.java | 5 +- .../interceptors/CafcassApiInterceptor.java | 36 ++ .../model/cafcass/api/CafcassApiAddress.java | 16 + .../cafcass/api/CafcassApiApplicant.java | 18 + .../fpl/model/cafcass/api/CafcassApiCase.java | 19 + .../model/cafcass/api/CafcassApiCaseData.java | 32 + .../cafcass/api/CafcassApiCaseDocument.java | 15 + .../api/CafcassApiCaseManagementLocation.java | 11 + .../model/cafcass/api/CafcassApiChild.java | 29 + .../cafcass/api/CafcassApiColleague.java | 16 + .../api/CafcassApiFactorsParenting.java | 15 + .../model/cafcass/api/CafcassApiHearing.java | 26 + .../api/CafcassApiInternationalElement.java | 19 + .../model/cafcass/api/CafcassApiOther.java | 22 + .../cafcass/api/CafcassApiProceeding.java | 19 + .../cafcass/api/CafcassApiRespondent.java | 26 + .../fpl/model/cafcass/api/CafcassApiRisk.java | 15 + .../api/CafcassApiSearchCasesResponse.java | 13 + .../cafcass/api/CafcassApiSolicitor.java | 14 + .../common/AdditionalApplicationsBundle.java | 12 + .../reform/fpl/model/order/HearingOrder.java | 6 + .../model/order/generated/GeneratedOrder.java | 5 + .../fpl/service/SecureDocStoreService.java | 8 +- .../api/CafcassApiApplicantsConverter.java | 53 ++ .../api/CafcassApiCaseDataConverter.java | 9 + .../api/CafcassApiCaseDocumentsConverter.java | 255 ++++++++ ...assApiCaseManagementLocationConverter.java | 27 + .../api/CafcassApiChildrenConverter.java | 55 ++ .../CafcassApiFactorsParentingConverter.java | 33 + .../CafcassApiHearingDetailsConverter.java | 40 ++ ...fcassApiInternationalElementConverter.java | 40 ++ .../api/CafcassApiMetaDataConverter.java | 23 + .../api/CafcassApiOthersConverter.java | 49 ++ ...afcassApiPreviousProceedingsConverter.java | 38 ++ .../api/CafcassApiRespondentsConverter.java | 51 ++ .../cafcass/api/CafcassApiRisksConverter.java | 30 + .../api/CafcassApiSearchCaseService.java | 61 ++ .../document/ManageDocumentService.java | 4 +- .../AmendOrderToDownloadPrePopulator.java | 2 +- .../reform/fpl/utils/CafcassApiHelper.java | 54 ++ .../reform/fpl/utils/DocumentsHelper.java | 9 + .../CafcassApiInterceptorTest.java | 67 ++ .../CafcassApiApplicantsConverterTest.java | 80 +++ .../CafcassApiCaseDocumentsConverterTest.java | 597 ++++++++++++++++++ ...piCaseManagementLocationConverterTest.java | 37 ++ .../api/CafcassApiChildrenConverterTest.java | 104 +++ .../api/CafcassApiConverterTestBase.java | 149 +++++ ...fcassApiFactorsParentingConverterTest.java | 48 ++ ...CafcassApiHearingDetailsConverterTest.java | 92 +++ ...sApiInternationalElementConverterTest.java | 59 ++ .../api/CafcassApiMetaDataConverterTest.java | 73 +++ .../api/CafcassApiOthersConverterTest.java | 97 +++ ...ssApiPreviousProceedingsConverterTest.java | 76 +++ .../CafcassApiRespondentsConverterTest.java | 96 +++ .../api/CafcassApiRisksConverterTest.java | 49 ++ .../api/CafcassApiSearchCaseServiceTest.java | 123 ++++ .../AmendOrderToDownloadPrePopulatorTest.java | 2 +- .../fpl/utils/CafcassApiHelperTest.java | 82 +++ 71 files changed, 3344 insertions(+), 224 deletions(-) create mode 100644 service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiControllerBaseTest.java create mode 100644 service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiSearchCaseControllerTest.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/config/cafcass/CafcassApiConfiguration.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/AuthorizationException.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/BadInputException.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/NotFoundException.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiAddress.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiApplicant.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCase.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseData.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseDocument.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseManagementLocation.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiChild.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiColleague.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiFactorsParenting.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiHearing.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiInternationalElement.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiOther.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiProceeding.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiRespondent.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiRisk.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiSearchCasesResponse.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiSolicitor.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiApplicantsConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDataConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDocumentsConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseManagementLocationConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiFactorsParentingConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiHearingDetailsConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiInternationalElementConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiMetaDataConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiPreviousProceedingsConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRisksConverter.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseService.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelper.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptorTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiApplicantsConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDocumentsConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseManagementLocationConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiConverterTestBase.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiFactorsParentingConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiHearingDetailsConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiInternationalElementConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiMetaDataConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiPreviousProceedingsConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRisksConverterTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseServiceTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelperTest.java diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/RootControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/RootControllerTest.java index ad067b9bb7e..9eee83ab92d 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/RootControllerTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/RootControllerTest.java @@ -4,9 +4,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; +import uk.gov.hmcts.reform.idam.client.IdamClient; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -20,6 +22,9 @@ class RootControllerTest { @Autowired private MockMvc mockMvc; + @MockBean + private IdamClient idamClient; + @Test void shouldWelcomeUponRootRequestWith200ResponseCode() throws Exception { MvcResult response = mockMvc diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/TestingSupportControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/TestingSupportControllerTest.java index 27204d97fff..636fda7cfdc 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/TestingSupportControllerTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/TestingSupportControllerTest.java @@ -32,6 +32,7 @@ import uk.gov.hmcts.reform.fpl.service.ccd.CoreCaseDataService; import uk.gov.hmcts.reform.fpl.testingsupport.controllers.TestingSupportController; import uk.gov.hmcts.reform.fpl.utils.ResourceReader; +import uk.gov.hmcts.reform.idam.client.IdamClient; import java.util.List; import java.util.Map; @@ -93,6 +94,9 @@ class TestingSupportControllerTest { @MockBean private DocumentUploadClientApi uploadClient; + @MockBean + private IdamClient idamClient; + @BeforeEach void init() { when(requestData.authorisation()).thenReturn(USER_AUTH_TOKEN); diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiControllerBaseTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiControllerBaseTest.java new file mode 100644 index 00000000000..036750aa1b0 --- /dev/null +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiControllerBaseTest.java @@ -0,0 +1,62 @@ +package uk.gov.hmcts.reform.fpl.controllers.cafcass; + +import org.junit.jupiter.api.BeforeEach; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import uk.gov.hmcts.reform.fpl.controllers.AbstractTest; +import uk.gov.hmcts.reform.fpl.interceptors.CafcassApiInterceptor; +import uk.gov.hmcts.reform.idam.client.models.UserInfo; + +import java.io.IOException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static uk.gov.hmcts.reform.fpl.enums.UserRole.CAFCASS_SYSTEM_UPDATE; + +@WebMvcTest(CafcassCasesController.class) +@OverrideAutoConfiguration(enabled = true) +public abstract class CafcassApiControllerBaseTest extends AbstractTest { + private static final UserInfo CAFCASS_SYSTEM_UPDATE_USER_INFO = UserInfo.builder() + .roles(List.of(CAFCASS_SYSTEM_UPDATE.getRoleName())) + .build(); + + @Autowired + protected MockMvc mockMvc; + + @MockBean + private CafcassApiInterceptor cafcassApiInterceptor; + + @BeforeEach + void setUp() throws Exception { + givenCurrentUser(CAFCASS_SYSTEM_UPDATE_USER_INFO); + when(cafcassApiInterceptor.preHandle(any(), any(), any())).thenReturn(true); + } + + protected MvcResult sendRequest(MockHttpServletRequestBuilder request, int expectedStatus) throws Exception { + MvcResult response = mockMvc.perform(request).andExpect(status().is(expectedStatus)).andReturn(); + assertEquals(response.getResponse().getStatus(), expectedStatus); + return response; + } + + protected T readResponseContent(MvcResult response, Class responseType) throws IOException { + return mapper.readValue(response.getResponse().getContentAsByteArray(), responseType); + } + + protected MockHttpServletRequestBuilder buildGetRequest(String url) { + return get(url).header("authorization", USER_AUTH_TOKEN); + } + + protected MockHttpServletRequestBuilder buildPostRequest(String url) { + return post(url).header("authorization", USER_AUTH_TOKEN); + } +} diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiSearchCaseControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiSearchCaseControllerTest.java new file mode 100644 index 00000000000..04d1a136d28 --- /dev/null +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiSearchCaseControllerTest.java @@ -0,0 +1,82 @@ +package uk.gov.hmcts.reform.fpl.controllers.cafcass; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MvcResult; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCase; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSearchCasesResponse; +import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiSearchCaseService; + +import java.time.LocalDateTime; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +public class CafcassApiSearchCaseControllerTest extends CafcassApiControllerBaseTest { + @MockBean + private CafcassApiSearchCaseService cafcassApiSearchCaseService; + + @Test + void searchCases() throws Exception { + List responseCases = List.of( + CafcassApiCase.builder() + .caseId(1L).jurisdiction("jurisdiction").state("state").caseTypeId("caseTypeId") + .createdDate(LocalDateTime.of(2023, 1, 1, 10, 0, 0)) + .lastModified(LocalDateTime.of(2024, 3, 28, 12,32,0)) + .caseData(CafcassApiCaseData.builder().build()) + .build(), + CafcassApiCase.builder() + .caseId(2L).jurisdiction("jurisdiction").state("state").caseTypeId("caseTypeId") + .createdDate(LocalDateTime.of(2024, 1, 1, 10, 0, 0)) + .lastModified(LocalDateTime.of(2024, 3, 28, 12,40,0)) + .caseData(CafcassApiCaseData.builder().build()) + .build()); + + when(cafcassApiSearchCaseService.searchCaseByDateRange( + LocalDateTime.of(2024, 3, 28, 12,30,1,541000000), + LocalDateTime.of(2024, 3, 28, 12,45,1,540000000)) + ).thenReturn(responseCases); + + MvcResult response = sendRequest(buildGetRequest("/cases") + .queryParam("startDate", "2024-03-28T12:30:01.541") + .queryParam("endDate", "2024-03-28T12:45:01.540"), 200); + + assertEquals( + CafcassApiSearchCasesResponse.builder().total(2).cases(responseCases).build(), + readResponseContent(response, CafcassApiSearchCasesResponse.class)); + } + + @Test + void searchCasesInvalidFormat400() throws Exception { + sendRequest(buildGetRequest("/cases") + .queryParam("startDate", "123").queryParam("endDate", "321"), + 400); + } + + @Test + void shouldReturn400IfEmptyParam() throws Exception { + sendRequest(buildGetRequest("/cases"), 400); + + sendRequest(buildGetRequest("/cases") + .queryParam("startDate", "2023-03-28T12:32:54.541"), 400); + + sendRequest(buildGetRequest("/cases") + .queryParam("endDate", "2024-03-27T12:32:54.542"), 400); + } + + @Test + void searchCasesInvalidTimeRange() throws Exception { + sendRequest(buildGetRequest("/cases") + .queryParam("startDate", "2024-03-28T12:32:54.541") + .queryParam("endDate", "2023-03-27T12:32:54.542"), 400); + } + + @Test + void shouldReturn400IfSearchRangeMoreThan15Minutes() throws Exception { + sendRequest(buildGetRequest("/cases") + .queryParam("startDate", "2024-03-28T12:32:54.541") + .queryParam("endDate", "2024-03-28T12:47:54.542"), 400); + } +} diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java index ae877c3c3d9..1500f4c332a 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java @@ -1,5 +1,6 @@ package uk.gov.hmcts.reform.fpl.controllers.cafcass; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration; @@ -10,17 +11,23 @@ import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import uk.gov.hmcts.reform.fpl.controllers.AbstractTest; +import uk.gov.hmcts.reform.idam.client.models.UserInfo; +import java.util.List; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static uk.gov.hmcts.reform.fpl.enums.UserRole.CAFCASS_SYSTEM_UPDATE; +@Deprecated @WebMvcTest(CafcassCasesController.class) @OverrideAutoConfiguration(enabled = true) public class CafcassCasesControllerTest extends AbstractTest { + private static final UserInfo CAFCASS_SYSTEM_UPDATE_USER_INFO = UserInfo.builder() + .roles(List.of(CAFCASS_SYSTEM_UPDATE.getRoleName())) + .build(); private static final UUID CASE_ID = UUID.randomUUID(); private static final byte[] FILE_BYTES = "This is a file. Trust me!".getBytes(); private static final MockMultipartFile FILE = new MockMultipartFile( @@ -29,120 +36,9 @@ public class CafcassCasesControllerTest extends AbstractTest { @Autowired private MockMvc mockMvc; - @Test - void searchCases() throws Exception { - MvcResult response = mockMvc - .perform(get("/cases") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(",")) - .queryParam("startDate", "2023-03-28T12:32:54.541") - .queryParam("endDate", "2024-03-27T12:32:54.542")) - .andExpect(status().is(200)) - .andReturn(); - - assertEquals("searchCases - Start date: [2023-03-28], End date: [2024-03-27]", - response.getResponse().getContentAsString()); - } - - @Test - void searchCasesInvalidFormat400() throws Exception { - MvcResult response = mockMvc - .perform(get("/cases") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(",")) - .queryParam("startDate", "123") - .queryParam("endDate", "321")) - .andExpect(status().is(400)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 400); - } - - @Test - void searchCasesEmptyParam400() throws Exception { - MvcResult response = mockMvc - .perform(get("/cases")) - .andExpect(status().is(400)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 400); - - response = mockMvc - .perform(get("/cases") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(",")) - .queryParam("startDate", "2023-03-28T12:32:54.541")) - .andExpect(status().is(400)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 400); - - response = mockMvc - .perform(get("/cases") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(",")) - .queryParam("endDate", "2024-03-27T12:32:54.542")) - .andExpect(status().is(400)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 400); - } - - @Test - void searchCases500() throws Exception { - MvcResult response = mockMvc - .perform(get("/cases") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(",")) - .queryParam("startDate", "2024-03-28T12:32:54.541") - .queryParam("endDate", "2023-03-27T12:32:54.542")) - .andExpect(status().is(500)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 500); - } - - @Test - void getDocumentBinary() throws Exception { - UUID docId = UUID.randomUUID(); - MvcResult response = mockMvc - .perform(get("/cases/documents/%s/binary".formatted(docId)) - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) - .andExpect(status().is(200)) - .andReturn(); - - assertEquals("getDocumentBinary - document id: [%s]".formatted(docId), - response.getResponse().getContentAsString()); - } - - @Test - void getDocumentBinary400() throws Exception { - MvcResult response = mockMvc - .perform(get("/cases/documents/123/binary") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) - .andExpect(status().is(400)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 400); - - response = mockMvc - .perform(get("/cases/documents/ /binary") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) - .andExpect(status().is(400)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 400); + @BeforeEach + void setUp() { + givenCurrentUser(CAFCASS_SYSTEM_UPDATE_USER_INFO); } @Test @@ -152,9 +48,7 @@ void uploadDocument() throws Exception { .perform(MockMvcRequestBuilders.multipart("/cases/%s/document".formatted(CASE_ID)) .file(FILE) .param("typeOfDocument", "type Of Document") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) + .header("authorization", USER_AUTH_TOKEN)) .andExpect(status().is(200)) .andReturn(); @@ -170,9 +64,7 @@ void uploadDocument400() throws Exception { MvcResult response = mockMvc .perform(MockMvcRequestBuilders.multipart("/cases/%s/document".formatted(caseId)) .param("typeOfDocument", "type Of Document") - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) + .header("authorization", USER_AUTH_TOKEN)) .andExpect(status().is(400)) .andReturn(); @@ -186,9 +78,7 @@ void uploadDocument400() throws Exception { response = mockMvc .perform(MockMvcRequestBuilders.multipart("/cases/%s/document".formatted(caseId)) .file(file) - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) + .header("authorization", USER_AUTH_TOKEN)) .andExpect(status().is(400)) .andReturn(); @@ -211,9 +101,7 @@ void uploadGuardians() throws Exception { + " }\n" + "]") .contentType(MediaType.APPLICATION_JSON) - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) + .header("authorization", USER_AUTH_TOKEN)) .andExpect(status().is(200)) .andReturn(); @@ -229,9 +117,7 @@ void uploadGuardians400() throws Exception { MvcResult response = mockMvc.perform(post("/cases/%s/guardians".formatted(caseId)) .content("[]") .contentType(MediaType.APPLICATION_JSON) - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) + .header("authorization", USER_AUTH_TOKEN)) .andExpect(status().is(400)) .andReturn(); @@ -249,9 +135,7 @@ void uploadGuardians400() throws Exception { + " }\n" + "]") .contentType(MediaType.APPLICATION_JSON) - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) + .header("authorization", USER_AUTH_TOKEN)) .andExpect(status().is(400)) .andReturn(); @@ -272,9 +156,7 @@ void uploadGuardians500() throws Exception { + " }\n" + "]") .contentType(MediaType.APPLICATION_JSON) - .header("authorization", USER_AUTH_TOKEN) - .header("user-id", USER_ID) - .header("user-roles", String.join(","))) + .header("authorization", USER_AUTH_TOKEN)) .andExpect(status().is(500)) .andReturn(); diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/config/cafcass/CafcassApiConfiguration.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/config/cafcass/CafcassApiConfiguration.java new file mode 100644 index 00000000000..03e192d7cb3 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/config/cafcass/CafcassApiConfiguration.java @@ -0,0 +1,18 @@ +package uk.gov.hmcts.reform.fpl.config.cafcass; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import uk.gov.hmcts.reform.fpl.interceptors.CafcassApiInterceptor; + +@Configuration +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class CafcassApiConfiguration implements WebMvcConfigurer { + private final CafcassApiInterceptor cafcassApiInterceptor; + + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(cafcassApiInterceptor).addPathPatterns("/cases"); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java index ce54fad3020..6223c6aa3b2 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java @@ -3,6 +3,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -12,10 +13,12 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import uk.gov.hmcts.reform.fpl.utils.DateFormatterHelper; +import uk.gov.hmcts.reform.fpl.exceptions.api.BadInputException; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCase; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSearchCasesResponse; +import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiSearchCaseService; -import java.time.DateTimeException; -import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.UUID; @@ -30,30 +33,24 @@ public class CafcassCasesController { private static final String DATE_TIME_FORMAT_IN = "yyyy-MM-dd'T'hh:mm:ss.SSS"; private static final String DATE_TIME_FORMAT_OUT = "yyyy-MM-dd"; + private final CafcassApiSearchCaseService cafcassApiSearchCaseService; + @GetMapping("") - public ResponseEntity searchCases(@RequestParam(name = "startDate") String startDate, - @RequestParam(name = "endDate") String endDate) { - log.info("searchCases request received"); - try { - log.info("searchCases, " + startDate + ", " + endDate); - LocalDate startLocalDateTime = - DateFormatterHelper.parseLocalDateFromStringUsingFormat(startDate, DATE_TIME_FORMAT_IN); - LocalDate endLocalDateTime = - DateFormatterHelper.parseLocalDateFromStringUsingFormat(endDate, DATE_TIME_FORMAT_IN); - - if (startLocalDateTime.isAfter(endLocalDateTime)) { - throw new Exception("startDate after endDate"); - } + public CafcassApiSearchCasesResponse searchCases( + @RequestParam(name = "startDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate, + @RequestParam(name = "endDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endDate) { + log.info("searchCases, " + startDate + ", " + endDate); - return ResponseEntity.ok(String.format("searchCases - Start date: [%s], End date: [%s]", - DateFormatterHelper.formatLocalDateToString(startLocalDateTime, DATE_TIME_FORMAT_OUT), - DateFormatterHelper.formatLocalDateToString(endLocalDateTime, DATE_TIME_FORMAT_OUT) - )); - } catch (DateTimeException e) { - return ResponseEntity.status(400).body("bad input parameter - " + e.getMessage()); - } catch (Exception e) { - return ResponseEntity.status(500).body("Internal server error - " + e.getMessage()); + if (startDate.isAfter(endDate) || startDate.plusMinutes(15).isBefore(endDate)) { + throw new BadInputException(); } + + List caseDetails = cafcassApiSearchCaseService.searchCaseByDateRange(startDate, endDate); + + return CafcassApiSearchCasesResponse.builder() + .total(caseDetails.size()) + .cases(caseDetails) + .build(); } @GetMapping("documents/{documentId}/binary") diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java index dcbcd5b72e5..d93fc104bc8 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java @@ -8,6 +8,7 @@ public enum UserRole { LOCAL_AUTHORITY("caseworker-publiclaw-solicitor"), HMCTS_ADMIN("caseworker-publiclaw-courtadmin"), CAFCASS("caseworker-publiclaw-cafcass"), + CAFCASS_SYSTEM_UPDATE("caseworker-publiclaw-cafcass"), // TODO set up new system-update role GATEKEEPER("caseworker-publiclaw-gatekeeper"), JUDICIARY("caseworker-publiclaw-judiciary"), HMCTS_SUPERUSER("caseworker-publiclaw-superuser"); diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java index e7a7d786bc6..8e4a3576672 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java @@ -50,7 +50,7 @@ public enum DocumentType { .courtBundle(List.of(courtBundleElement)) .build(); }, - null, 10, COURT_BUNDLE_NOTIFICATION_CONFIG), + null, 10, COURT_BUNDLE_NOTIFICATION_CONFIG, "bundle"), CASE_SUMMARY("Case Summary", standardResolver("hearingDocuments.caseSummaryList"), false, false, false, (bundle) -> CaseSummary.builder().document(bundle.getDocument()) @@ -59,24 +59,24 @@ public enum DocumentType { .markAsConfidential(YesNo.from(bundle.isConfidential()).getValue()) .translationRequirements(bundle.getTranslationRequirement()) .build(), - null,20, CASE_SUMMARY_NOTIFICATION_CONFIG), + null,20, CASE_SUMMARY_NOTIFICATION_CONFIG, "caseSummary"), POSITION_STATEMENTS("Position Statements", standardResolver("hearingDocuments.posStmtList"), false, false, false, defaultWithDocumentBuilder(), - null, 30, POSITION_STATEMENT_NOTIFICATION_CONFIG), + null, 30, POSITION_STATEMENT_NOTIFICATION_CONFIG, "positionStatements"), POSITION_STATEMENTS_CHILD("Position Statements (Child)", standardResolver("hearingDocuments.posStmtChildList"), true, true, true, null, - null, 31, null), + null, 31, null, "positionStatements"), POSITION_STATEMENTS_RESPONDENT("Position Statements (Respondent)", standardResolver("hearingDocuments.posStmtRespList"), true, true, true, null, - null, 32, null), + null, 32, null, "positionStatements"), THRESHOLD("Threshold", standardResolver("thresholdList"), false, false, false, defaultWithDocumentBuilder(), - null, 40, DEFAULT_NOTIFICATION_CONFIG), + null, 40, DEFAULT_NOTIFICATION_CONFIG, "threshold"), SKELETON_ARGUMENTS("Skeleton arguments", standardResolver("hearingDocuments.skeletonArgumentList"), false, false, false, (bundle) -> SkeletonArgument.builder() @@ -86,71 +86,71 @@ public enum DocumentType { .markAsConfidential(YesNo.from(bundle.isConfidential()).getValue()) .translationRequirements(bundle.getTranslationRequirement()) .build(), - null, 50, SKELETON_ARGUMENT_NOTIFICATION_CONFIG), + null, 50, SKELETON_ARGUMENT_NOTIFICATION_CONFIG, "skeletonArguments"), AA_PARENT_ORDERS("Orders", null, false, false, false, null, - null, 60, null), + null, 60, null, "orders"), JUDGEMENTS("└─ Judgements/facts and reasons", standardResolver("judgementList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_ORDERS, 70, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_ORDERS, 70, DEFAULT_NOTIFICATION_CONFIG, "judgementsFactsAndReasons"), TRANSCRIPTS("└─ Transcripts", standardResolver("transcriptList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_ORDERS, 80, NO_TRANSLATION_NOTIFICATION_CONFIG), + AA_PARENT_ORDERS, 80, NO_TRANSLATION_NOTIFICATION_CONFIG, "transcripts"), AA_PARENT_APPLICANTS_DOCUMENTS("Applicant's documents", null, false, false, false, null, - null, 90, null), + null, 90, null, "applicantsDocuments"), DOCUMENTS_FILED_ON_ISSUE("└─ Documents filed on issue", standardResolver("documentsFiledOnIssueList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICANTS_DOCUMENTS, 100, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_APPLICANTS_DOCUMENTS, 100, DEFAULT_NOTIFICATION_CONFIG, "documentsFiledOnIssue"), APPLICANTS_WITNESS_STATEMENTS("└─ Witness statements", standardResolver("applicantWitnessStmtList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICANTS_DOCUMENTS, 110, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_APPLICANTS_DOCUMENTS, 110, DEFAULT_NOTIFICATION_CONFIG, "applicantWitnessStatements"), CARE_PLAN("└─ Care plan", standardResolver("carePlanList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICANTS_DOCUMENTS, 120, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_APPLICANTS_DOCUMENTS, 120, DEFAULT_NOTIFICATION_CONFIG, "carePlan"), PARENT_ASSESSMENTS("└─ Parent assessments", standardResolver("parentAssessmentList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICANTS_DOCUMENTS, 130, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_APPLICANTS_DOCUMENTS, 130, DEFAULT_NOTIFICATION_CONFIG, "parentAssessments "), FAMILY_AND_VIABILITY_ASSESSMENTS("└─ Family and viability assessments", standardResolver("famAndViabilityList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICANTS_DOCUMENTS, 140, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_APPLICANTS_DOCUMENTS, 140, DEFAULT_NOTIFICATION_CONFIG, "familyAndViabilityAssessments"), APPLICANTS_OTHER_DOCUMENTS("└─ Applicant's other documents", standardResolver("applicantOtherDocList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICANTS_DOCUMENTS, 150, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_APPLICANTS_DOCUMENTS, 150, DEFAULT_NOTIFICATION_CONFIG, "applicantsOtherDocuments"), MEETING_NOTES("└─ Meeting notes", standardResolver("meetingNoteList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICANTS_DOCUMENTS, 160, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_APPLICANTS_DOCUMENTS, 160, DEFAULT_NOTIFICATION_CONFIG, "meetingNotes"), CONTACT_NOTES("└─ Contact notes", standardResolver("contactNoteList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICANTS_DOCUMENTS, 170, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_APPLICANTS_DOCUMENTS, 170, DEFAULT_NOTIFICATION_CONFIG, "contactNotes"), AA_PARENT_APPLICATIONS("Applications", null, false, false, false, null, - null, 180, null), + null, 180, null, "applications"), C1_APPLICATION_DOCUMENTS("└─ C1 application supporting documents", standardResolver("c1ApplicationDocList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICATIONS, 190, ADDITIONAL_APPLCIATION_NOTIFICAITON_CONFIG), + AA_PARENT_APPLICATIONS, 190, ADDITIONAL_APPLCIATION_NOTIFICAITON_CONFIG, "c1AndOtherApplications"), C2_APPLICATION_DOCUMENTS("└─ C2 application supporting documents", standardResolver("c2ApplicationDocList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_APPLICATIONS, 200, ADDITIONAL_APPLCIATION_NOTIFICAITON_CONFIG), + AA_PARENT_APPLICATIONS, 200, ADDITIONAL_APPLCIATION_NOTIFICAITON_CONFIG, "c2Applications"), AA_PARENT_RESPONDENTS_STATEMENTS("Respondent statements", null, false, false, false, null, - null, 210, null), + null, 210, null, "parent_respondentsStatements"), RESPONDENTS_STATEMENTS("└─ Respondent statements", standardResolver("respStmtList"), false, false, false, (bundle) -> RespondentStatementV2.builder() @@ -160,59 +160,59 @@ public enum DocumentType { .markAsConfidential(YesNo.from(bundle.isConfidential()).getValue()) .translationRequirements(bundle.getTranslationRequirement()) .build(), - AA_PARENT_RESPONDENTS_STATEMENTS, 220, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_RESPONDENTS_STATEMENTS, 220, DEFAULT_NOTIFICATION_CONFIG, "parent_respondentsStatements"), RESPONDENTS_WITNESS_STATEMENTS("└─ Witness statements", standardResolver("respWitnessStmtList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_RESPONDENTS_STATEMENTS, 230, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_RESPONDENTS_STATEMENTS, 230, DEFAULT_NOTIFICATION_CONFIG, "respondentWitnessStatements"), GUARDIAN_EVIDENCE("Guardian's evidence", standardResolver("guardianEvidenceList"), false, false, false, defaultWithDocumentBuilder(), - null, 240, NO_CAFCASS_NOTIFICATION_CONFIG), + null, 240, NO_CAFCASS_NOTIFICATION_CONFIG, "guardiansEvidence"), AA_PARENT_EXPERT_REPORTS("Expert Reports", null, false, false, false, null, - null, 250, null), + null, 250, null, "parent_expertReports"), EXPERT_REPORTS("└─ Expert Reports", standardResolver("expertReportList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_EXPERT_REPORTS, 260, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_EXPERT_REPORTS, 260, DEFAULT_NOTIFICATION_CONFIG, "expertReports"), DRUG_AND_ALCOHOL_REPORTS("└─ Drug and alcohol reports", standardResolver("drugAndAlcoholReportList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_EXPERT_REPORTS, 270, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_EXPERT_REPORTS, 270, DEFAULT_NOTIFICATION_CONFIG, "drugAndAlcoholReports"), LETTER_OF_INSTRUCTION("└─ Letters of instruction / referrals", standardResolver("lettersOfInstructionList"), false, false, false, defaultWithDocumentBuilder(), - AA_PARENT_EXPERT_REPORTS, 280, DEFAULT_NOTIFICATION_CONFIG), + AA_PARENT_EXPERT_REPORTS, 280, DEFAULT_NOTIFICATION_CONFIG, "lettersOfInstructionReferrals"), POLICE_DISCLOSURE("Police disclosure", standardResolver("policeDisclosureList"), false, false, false, defaultWithDocumentBuilder(), - null, 290, DEFAULT_NOTIFICATION_CONFIG), + null, 290, DEFAULT_NOTIFICATION_CONFIG, "policeDisclosure"), MEDICAL_RECORDS("Medical records", standardResolver("medicalRecordList"), false, false, false, defaultWithDocumentBuilder(), - null, 300, DEFAULT_NOTIFICATION_CONFIG), + null, 300, DEFAULT_NOTIFICATION_CONFIG, "medicalRecords"), COURT_CORRESPONDENCE("Court correspondence", standardResolver("correspondenceDocList"), false, false, false, defaultWithDocumentBuilder(), - null, 310, COURT_CORRESPONDENCE_NOTIFICATION_CONFIG), + null, 310, COURT_CORRESPONDENCE_NOTIFICATION_CONFIG, "courtCorrespondence"), NOTICE_OF_ACTING_OR_ISSUE("Notice of acting / notice of issue", standardResolver("noticeOfActingOrIssueList"), false, false, false, defaultWithDocumentBuilder(), - null, 320, DEFAULT_NOTIFICATION_CONFIG), + null, 320, DEFAULT_NOTIFICATION_CONFIG, "hearingNotices"), PREVIOUS_PROCEEDING("Previous Proceeding", standardResolver("previousProceedingList"), - false, false, false, + false, false, false, defaultWithDocumentBuilder(), - null, 330, NO_CAFCASS_NOTIFICATION_CONFIG), + null, 330, NO_CAFCASS_NOTIFICATION_CONFIG, "previousProceedings"), PLACEMENT_RESPONSES("Placement responses", null, false, false, false, null, - null, 340, null), + null, 340, null, "placementApplicationsAndResponses"), ARCHIVED_DOCUMENTS("Archived migrated data", standardResolver("archivedDocumentsList"), true, true, true, defaultWithDocumentBuilder(), - null, 999, DEFAULT_NOTIFICATION_CONFIG); + null, 999, DEFAULT_NOTIFICATION_CONFIG, "archivedDocuments"); @Getter private String description; @@ -232,6 +232,8 @@ public enum DocumentType { private final int displayOrder; @Getter private final DocumentUploadedNotificationConfiguration notificationConfiguration; + @Getter + private final String category; public boolean isUploadable() { if (isHiddenFromSolicitorUpload() || isHiddenFromLAUpload() || isHiddenFromCTSCUpload()) { diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/AuthorizationException.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/AuthorizationException.java new file mode 100644 index 00000000000..b9e306545ca --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/AuthorizationException.java @@ -0,0 +1,15 @@ +package uk.gov.hmcts.reform.fpl.exceptions.api; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(value = HttpStatus.FORBIDDEN) +public class AuthorizationException extends RuntimeException { + public AuthorizationException() { + super("Auth error"); + } + + public AuthorizationException(String message) { + super(message); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/BadInputException.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/BadInputException.java new file mode 100644 index 00000000000..ca5aba80339 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/BadInputException.java @@ -0,0 +1,15 @@ +package uk.gov.hmcts.reform.fpl.exceptions.api; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(value = HttpStatus.BAD_REQUEST) +public class BadInputException extends RuntimeException { + public BadInputException() { + super("Bad input parameter"); + } + + public BadInputException(String message) { + super(message); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/NotFoundException.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/NotFoundException.java new file mode 100644 index 00000000000..97de571656b --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/exceptions/api/NotFoundException.java @@ -0,0 +1,15 @@ +package uk.gov.hmcts.reform.fpl.exceptions.api; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(value = HttpStatus.NOT_FOUND) +public class NotFoundException extends RuntimeException { + public NotFoundException() { + super("Not found"); + } + + public NotFoundException(String message) { + super(message); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/AdditionalApplicationsUploadedEventHandler.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/AdditionalApplicationsUploadedEventHandler.java index 9a8e5cc642b..c3bcc2b2a00 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/AdditionalApplicationsUploadedEventHandler.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/AdditionalApplicationsUploadedEventHandler.java @@ -100,7 +100,7 @@ public void sendDocumentsToCafcass(final AdditionalApplicationsUploadedEvent eve AdditionalApplicationsBundle uploadedBundle = getUploadedBundle(caseData); if (!isConfidentialC2UploadedOnly(uploadedBundle) - || isConfidentialC2UploadedByChildSolicitor(uploadedBundle)) { + || uploadedBundle.isConfidentialC2UploadedByChildSolicitor()) { final CaseData caseDataBefore = event.getCaseDataBefore(); AdditionalApplicationsBundle oldBundle = Optional.ofNullable(caseDataBefore.getAdditionalApplicationsBundle()) @@ -345,15 +345,4 @@ private AdditionalApplicationsBundle getUploadedBundle(CaseData caseData) { private boolean isConfidentialC2UploadedOnly(AdditionalApplicationsBundle bundle) { return bundle.getC2DocumentBundle() == null && bundle.getOtherApplicationsBundle() == null; } - - private boolean isConfidentialC2UploadedByChildSolicitor(AdditionalApplicationsBundle bundle) { - return isNotEmpty(bundle.getC2DocumentBundleChild0()) || isNotEmpty(bundle.getC2DocumentBundleChild1()) - || isNotEmpty(bundle.getC2DocumentBundleChild2()) || isNotEmpty(bundle.getC2DocumentBundleChild3()) - || isNotEmpty(bundle.getC2DocumentBundleChild4()) || isNotEmpty(bundle.getC2DocumentBundleChild5()) - || isNotEmpty(bundle.getC2DocumentBundleChild6()) || isNotEmpty(bundle.getC2DocumentBundleChild7()) - || isNotEmpty(bundle.getC2DocumentBundleChild8()) || isNotEmpty(bundle.getC2DocumentBundleChild9()) - || isNotEmpty(bundle.getC2DocumentBundleChild10()) || isNotEmpty(bundle.getC2DocumentBundleChild11()) - || isNotEmpty(bundle.getC2DocumentBundleChild12()) || isNotEmpty(bundle.getC2DocumentBundleChild13()) - || isNotEmpty(bundle.getC2DocumentBundleChild14()); - } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/cmo/DraftOrdersApprovedEventHandler.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/cmo/DraftOrdersApprovedEventHandler.java index 24d8b9e5870..b6bd9e1857e 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/cmo/DraftOrdersApprovedEventHandler.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/cmo/DraftOrdersApprovedEventHandler.java @@ -214,8 +214,7 @@ public void sendNotificationToCafcassViaSendGrid(final DraftOrdersApproved event approvedOrders.forEach(hearingOrder -> cafcassNotificationService.sendEmail(caseData, - Set.of(hearingOrder.isConfidentialOrder() ? hearingOrder.getOrderConfidential() - : hearingOrder.getOrder()), + Set.of(hearingOrder.getOrderOrOrderConfidential()), ORDER, OrderCafcassData.builder() .documentName(hearingOrder.getTitle()) @@ -367,7 +366,7 @@ public void notifyTranslationTeam(DraftOrdersApproved event) { approvedOrders.forEach( order -> translationRequestService.sendRequest(event.getCaseData(), Optional.ofNullable(order.getTranslationRequirements()), - (order.isConfidentialOrder()) ? order.getOrderConfidential() : order.getOrder(), + order.getOrderOrOrderConfidential(), String.format("%s - %s", defaultIfEmpty(order.getTitle(), "Blank order (C21)"), formatLocalDateTimeBaseUsingFormat(order.getDateIssued().atStartOfDay(), DATE) ) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java new file mode 100644 index 00000000000..c89a623f014 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java @@ -0,0 +1,36 @@ +package uk.gov.hmcts.reform.fpl.interceptors; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.servlet.HandlerInterceptor; +import uk.gov.hmcts.reform.fpl.exceptions.api.AuthorizationException; +import uk.gov.hmcts.reform.idam.client.IdamClient; +import uk.gov.hmcts.reform.idam.client.models.UserInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import static org.apache.commons.lang3.ObjectUtils.isNotEmpty; +import static uk.gov.hmcts.reform.fpl.enums.UserRole.CAFCASS_SYSTEM_UPDATE; + +@Slf4j +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class CafcassApiInterceptor implements HandlerInterceptor { + private final ObjectProvider idamClient; + + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, + Object handler) throws Exception { + String authToken = request.getHeader("Authorization"); + if (isNotEmpty(authToken)) { + UserInfo userInfo = idamClient.getIfAvailable().getUserInfo(authToken); + if (userInfo != null && userInfo.getRoles().contains(CAFCASS_SYSTEM_UPDATE.getRoleName())) { + return true; + } + } + throw new AuthorizationException(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiAddress.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiAddress.java new file mode 100644 index 00000000000..d5e45a8d92f --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiAddress.java @@ -0,0 +1,16 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiAddress { + private final String addressLine1; + private final String addressLine2; + private final String addressLine3; + private final String postTown; + private final String county; + private final String postcode; + private final String country; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiApplicant.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiApplicant.java new file mode 100644 index 00000000000..edadc7ac491 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiApplicant.java @@ -0,0 +1,18 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class CafcassApiApplicant { + private String id; + private String name; + private String email; + private String phone; + private CafcassApiAddress address; + private List colleagues; + private boolean designated; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCase.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCase.java new file mode 100644 index 00000000000..9c2d8a7daf5 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCase.java @@ -0,0 +1,19 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Builder(toBuilder = true) +public class CafcassApiCase { + private Long caseId; + private String jurisdiction; + private String state; + private String caseTypeId; + private LocalDateTime createdDate; + private LocalDateTime lastModified; + private String lastStateModifiedDate; + private CafcassApiCaseData caseData; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseData.java new file mode 100644 index 00000000000..04ddcd4e965 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseData.java @@ -0,0 +1,32 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; +import uk.gov.hmcts.reform.fpl.enums.OrderType; + +import java.time.LocalDate; +import java.util.List; + +@Data +@Builder +public class CafcassApiCaseData { + private String familyManCaseNumber; + private LocalDate dateSubmitted; + private String applicationType; + private List ordersSought; + private LocalDate dateOfCourtIssue; + private boolean citizenIsApplicant; + private String applicantLA; + private String respondentLA; + private List applicants; + private List respondents; + private List children; + private List others; + private List hearingDetails; + private CafcassApiInternationalElement internationalElement; + private List previousProceedings; + private CafcassApiRisk risks; + private CafcassApiFactorsParenting factorsParenting; + private CafcassApiCaseManagementLocation caseManagementLocation; + private List caseDocuments; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseDocument.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseDocument.java new file mode 100644 index 00000000000..c05b09680a3 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseDocument.java @@ -0,0 +1,15 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiCaseDocument { + @JsonProperty("document_filename") + private String documentFileName; + private boolean removed; + private String documentCategory; + private String documentId; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseManagementLocation.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseManagementLocation.java new file mode 100644 index 00000000000..3abb87002af --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiCaseManagementLocation.java @@ -0,0 +1,11 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiCaseManagementLocation { + private String region; + private String baseLocation; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiChild.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiChild.java new file mode 100644 index 00000000000..e4ac3090704 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiChild.java @@ -0,0 +1,29 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDate; + +@Data +@Builder +public class CafcassApiChild { + private String firstName; + private String lastName; + private LocalDate dateOfBirth; + private String gender; + private String genderIdentification; + private String livingSituation; + private String livingSituationDetails; + private CafcassApiAddress address; + private String careAndContactPlan; + private boolean detailsHidden; + private String socialWorkerName; + private String socialWorkerTelephoneNumber; + private boolean additionalNeeds; + private String additionalNeedsDetails; + private String litigationIssues; + private String litigationIssuesDetails; + private CafcassApiSolicitor solicitor; + private String fathersResponsibility; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiColleague.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiColleague.java new file mode 100644 index 00000000000..754614e6b58 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiColleague.java @@ -0,0 +1,16 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiColleague { + private String role; + private String title; + private String email; + private String phone; + private String fullName; + private boolean mainContact; + private boolean notificationRecipient; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiFactorsParenting.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiFactorsParenting.java new file mode 100644 index 00000000000..b9450b3cd29 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiFactorsParenting.java @@ -0,0 +1,15 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiFactorsParenting { + private boolean alcoholDrugAbuse; + private String alcoholDrugAbuseReason; + private boolean domesticViolence; + private String domesticViolenceReason; + private boolean anythingElse; + private String anythingElseReason; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiHearing.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiHearing.java new file mode 100644 index 00000000000..ec1f8ad301c --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiHearing.java @@ -0,0 +1,26 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; +import uk.gov.hmcts.reform.fpl.enums.HearingStatus; +import uk.gov.hmcts.reform.fpl.enums.HearingType; +import uk.gov.hmcts.reform.fpl.enums.hearing.HearingAttendance; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@Builder +public class CafcassApiHearing { + private String id; + private HearingType type; + private String typeDetails; + private String venue; + private HearingStatus status; + private LocalDateTime startDate; + private LocalDateTime endDate; + private List attendance; + private String cancellationReason; + private String preAttendanceDetails; + private String attendanceDetails; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiInternationalElement.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiInternationalElement.java new file mode 100644 index 00000000000..6e660997a73 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiInternationalElement.java @@ -0,0 +1,19 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiInternationalElement { + private boolean possibleCarer; + private String possibleCarerReason; + private boolean significantEvents; + private String significantEventsReason; + private boolean issues; + private String issuesReason; + private boolean proceedings; + private String proceedingsReason; + private boolean internationalAuthorityInvolvement; + private String internationalAuthorityInvolvementDetails; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiOther.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiOther.java new file mode 100644 index 00000000000..278e440de7a --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiOther.java @@ -0,0 +1,22 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiOther { + private String name; + private String dateOfBirth; + private String gender; + private String genderIdentification; + private String birthPlace; + private boolean addressKnown; + private String addressUnknownReason; + private CafcassApiAddress address; + private String telephone; + private String litigationIssues; + private String litigationIssuesDetails; + private boolean detailsHidden; + private String detailsHiddenReason; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiProceeding.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiProceeding.java new file mode 100644 index 00000000000..73ae4c93971 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiProceeding.java @@ -0,0 +1,19 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiProceeding { + private String proceedingStatus; + private String caseNumber; + private String started; + private String ended; + private String ordersMade; + private String judge; + private String children; + private String guardian; + private boolean sameGuardianNeeded; + private String sameGuardianDetails; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiRespondent.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiRespondent.java new file mode 100644 index 00000000000..78e91815741 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiRespondent.java @@ -0,0 +1,26 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDate; + +@Data +@Builder +public class CafcassApiRespondent { + private String firstName; + private String lastName; + private String gender; + private String genderIdentification; + private boolean addressKnown; + private String addressUnknownReason; + private CafcassApiAddress address; + private LocalDate dateOfBirth; + private String telephoneNumber; + private String litigationIssues; + private String litigationIssuesDetails; + private boolean contactDetailsHidden; + private String contactDetailsHiddenReason; + private String relationshipToChild; + private CafcassApiSolicitor solicitor; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiRisk.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiRisk.java new file mode 100644 index 00000000000..b2b057e10a7 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiRisk.java @@ -0,0 +1,15 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class CafcassApiRisk { + private List neglectOccurrences; + private List sexualAbuseOccurrences; + private List physicalHarmOccurrences; + private List emotionalHarmOccurrences; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiSearchCasesResponse.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiSearchCasesResponse.java new file mode 100644 index 00000000000..ce3596f864a --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiSearchCasesResponse.java @@ -0,0 +1,13 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class CafcassApiSearchCasesResponse { + private int total; + private List cases; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiSolicitor.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiSolicitor.java new file mode 100644 index 00000000000..964c39be707 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/cafcass/api/CafcassApiSolicitor.java @@ -0,0 +1,14 @@ +package uk.gov.hmcts.reform.fpl.model.cafcass.api; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CafcassApiSolicitor { + private String email; + private String firstName; + private String lastName; + private String organisationId; + private String organisationName; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/common/AdditionalApplicationsBundle.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/common/AdditionalApplicationsBundle.java index 05cc834540e..393756ef712 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/common/AdditionalApplicationsBundle.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/common/AdditionalApplicationsBundle.java @@ -103,4 +103,16 @@ && isNotEmpty(((C2DocumentBundle) field).getApplicantName())) { public YesNo getHasConfidentialC2() { return YesNo.from(isNotEmpty(c2DocumentBundleConfidential)); } + + @JsonIgnore + public boolean isConfidentialC2UploadedByChildSolicitor() { + return isNotEmpty(c2DocumentBundleChild0) || isNotEmpty(c2DocumentBundleChild1) + || isNotEmpty(c2DocumentBundleChild2) || isNotEmpty(c2DocumentBundleChild3) + || isNotEmpty(c2DocumentBundleChild4) || isNotEmpty(c2DocumentBundleChild5) + || isNotEmpty(c2DocumentBundleChild6) || isNotEmpty(c2DocumentBundleChild7) + || isNotEmpty(c2DocumentBundleChild8) || isNotEmpty(c2DocumentBundleChild9) + || isNotEmpty(c2DocumentBundleChild10) || isNotEmpty(c2DocumentBundleChild11) + || isNotEmpty(c2DocumentBundleChild12) || isNotEmpty(c2DocumentBundleChild13) + || isNotEmpty(c2DocumentBundleChild14); + } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/HearingOrder.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/HearingOrder.java index 65caf61a01e..61947ca9aaf 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/HearingOrder.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/HearingOrder.java @@ -212,4 +212,10 @@ public List getDocumentAcknowledge() { public boolean isConfidentialOrder() { return isNotEmpty(orderConfidential); } + + @JsonIgnore + public DocumentReference getOrderOrOrderConfidential() { + return (isConfidentialOrder()) ? orderConfidential : order; + } + } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java index db2dbcd597b..359b43c4124 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java @@ -192,4 +192,9 @@ public List> getSelectedOthers() { public boolean isConfidential() { return isNotEmpty(documentConfidential); } + + @JsonIgnore + public DocumentReference getDocumentOrDocumentConfidential() { + return (isConfidential()) ? documentConfidential : document; + } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/SecureDocStoreService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/SecureDocStoreService.java index 4d297b296fd..2803a629953 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/SecureDocStoreService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/SecureDocStoreService.java @@ -25,6 +25,7 @@ import static com.launchdarkly.shaded.com.google.common.collect.Lists.newArrayList; import static org.apache.commons.lang3.ObjectUtils.isNotEmpty; +import static uk.gov.hmcts.reform.fpl.utils.DocumentsHelper.getDocumentIdFromUrl; @Service @Slf4j @@ -80,11 +81,4 @@ public Document getDocumentMetadata(final String documentUrlString) { documentId ); } - - private UUID getDocumentIdFromUrl(final String documentUrlString) { - String selfHref = documentUrlString.replace("/binary", ""); - UUID documentId = UUID.fromString(selfHref.substring(selfHref.length() - 36)); - - return documentId; - } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiApplicantsConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiApplicantsConverter.java new file mode 100644 index 00000000000..fdf362083f0 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiApplicantsConverter.java @@ -0,0 +1,53 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.LocalAuthority; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiApplicant; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiColleague; +import uk.gov.hmcts.reform.fpl.model.common.Element; + +import java.util.List; +import java.util.Optional; + +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiAddress; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; + +@Service +public class CafcassApiApplicantsConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.applicants(getCafcassApiApplicant(caseData)); + } + + private List getCafcassApiApplicant(CaseData caseData) { + return Optional.ofNullable(caseData.getLocalAuthorities()).orElse(List.of()).stream() + .map(applicantElement -> { + LocalAuthority applicant = applicantElement.getValue(); + + return CafcassApiApplicant.builder() + .id(applicantElement.getId().toString()) + .name(applicant.getName()) + .email(applicant.getEmail()) + .phone(applicant.getPhone()) + .address(getCafcassApiAddress(applicant.getAddress())) + .designated(isYes(applicant.getDesignated())) + .colleagues(applicant.getColleagues().stream() + .map(Element::getValue) + .map(colleague -> CafcassApiColleague.builder() + .role(colleague.getRole().toString()) + .title(colleague.getTitle()) + .email(colleague.getEmail()) + .phone(colleague.getPhone()) + .fullName(colleague.getFullName()) + .mainContact(isYes(colleague.getMainContact())) + .notificationRecipient(isYes(colleague.getNotificationRecipient())) + .build()) + .toList()) + .build(); + }) + .toList(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDataConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDataConverter.java new file mode 100644 index 00000000000..3ea47479709 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDataConverter.java @@ -0,0 +1,9 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; + +public interface CafcassApiCaseDataConverter { + CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder); +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDocumentsConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDocumentsConverter.java new file mode 100644 index 00000000000..989fcba967d --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDocumentsConverter.java @@ -0,0 +1,255 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.enums.cfv.ConfidentialLevel; +import uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.PlacementConfidentialDocument; +import uk.gov.hmcts.reform.fpl.model.PlacementNoticeDocument; +import uk.gov.hmcts.reform.fpl.model.PlacementSupportingDocument; +import uk.gov.hmcts.reform.fpl.model.Supplement; +import uk.gov.hmcts.reform.fpl.model.SupportingEvidenceBundle; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseDocument; +import uk.gov.hmcts.reform.fpl.model.common.C2DocumentBundle; +import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; +import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.model.common.OtherApplicationsBundle; +import uk.gov.hmcts.reform.fpl.model.common.SubmittedC1WithSupplementBundle; +import uk.gov.hmcts.reform.fpl.model.group.C110A; +import uk.gov.hmcts.reform.fpl.model.interfaces.WithDocument; +import uk.gov.hmcts.reform.fpl.model.order.DraftOrder; +import uk.gov.hmcts.reform.fpl.model.order.HearingOrder; +import uk.gov.hmcts.reform.fpl.model.order.generated.GeneratedOrder; +import uk.gov.hmcts.reform.fpl.service.document.ManageDocumentService; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; + +import static org.apache.commons.lang3.ObjectUtils.isNotEmpty; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.AA_PARENT_ORDERS; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.C1_APPLICATION_DOCUMENTS; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.C2_APPLICATION_DOCUMENTS; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.NOTICE_OF_ACTING_OR_ISSUE; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.PLACEMENT_RESPONSES; +import static uk.gov.hmcts.reform.fpl.utils.DocumentsHelper.getDocumentIdFromUrl; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class CafcassApiCaseDocumentsConverter implements CafcassApiCaseDataConverter { + private final ManageDocumentService manageDocumentService; + + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.caseDocuments(getCaseDocuments(caseData)); + } + + private List getCaseDocuments(CaseData caseData) { + return Stream.of( + getStandardAndUrgentDirectionOrder(caseData), + getDraftOrders(caseData), + getApprovedOrders(caseData), + getOriginalApplications(caseData), + getPlacementApplications(caseData), + getAdditionalApplications(caseData), + getHearingNotice(caseData), + getManageDocuments(caseData)) + .flatMap(List::stream) + .toList(); + } + + private List getStandardAndUrgentDirectionOrder(CaseData caseData) { + return Stream.of(caseData.getUrgentDirectionsOrder(), caseData.getStandardDirectionOrder()) + .filter(Objects::nonNull) + .map(sdo -> buildCafcassApiCaseDocumentList(AA_PARENT_ORDERS, false, + Stream.of(sdo.getOrderDoc(), sdo.getTranslatedOrderDoc()))) + .flatMap(List::stream) + .toList(); + } + + private List getDraftOrders(CaseData caseData) { + // Remarks: cafcass don't have permission to read draftUploadedCMOs and refusedHearingOrders + return buildCafcassApiCaseDocumentList("draftOrders", false, + Stream.of( + caseData.getHearingOrdersBundlesDrafts(), + caseData.getHearingOrdersBundlesDraftReview()) + .filter(Objects::nonNull) + .flatMap(List::stream) + .map(Element::getValue) + .flatMap(draftOrderBundles -> + Stream.of(draftOrderBundles.getOrders(), draftOrderBundles.getAllChildConfidentialOrders()) + .flatMap(List::stream) + .map(Element::getValue)) + .map(HearingOrder::getOrderOrOrderConfidential)); + } + + private List getApprovedOrders(CaseData caseData) { + // Remarks: cafcass don't have permission to read refusedHearingOrders + return buildCafcassApiCaseDocumentList(AA_PARENT_ORDERS, false, + Stream.concat( + // approved CMOs + unwrapElements(caseData.getSealedCMOs()).stream().map(HearingOrder::getOrderOrOrderConfidential), + // approved orders (only those can be read by cafcass) + Stream.of(caseData.getOrderCollection(), + caseData.getConfidentialOrders().getAllChildConfidentialOrders()) + .filter(Objects::nonNull) + .flatMap(List::stream) + .map(Element::getValue) + .map(GeneratedOrder::getDocumentOrDocumentConfidential))); + } + + private List getOriginalApplications(CaseData caseData) { + List documentReferences = new ArrayList<>(); + + SubmittedC1WithSupplementBundle submittedC1 = caseData.getSubmittedC1WithSupplement(); + if (isNotEmpty(submittedC1)) { + documentReferences.add(submittedC1.getDocument()); + documentReferences.addAll(getAllDocumentsFromSupplements(submittedC1.getSupplementsBundle())); + documentReferences.addAll( + getAllDocumentsFromSupportingEvidenceBundles(submittedC1.getSupportingEvidenceBundle())); + } + + C110A c110a = caseData.getC110A(); + if (isNotEmpty(c110a)) { + documentReferences.addAll(Stream.of(c110a.getDocument(), c110a.getTranslatedDocument(), + c110a.getSupplementDocument()) + .toList()); + } + + return buildCafcassApiCaseDocumentList("originalApplications", false, documentReferences); + } + + private List getPlacementApplications(CaseData caseData) { + return buildCafcassApiCaseDocumentList(PLACEMENT_RESPONSES, false, + unwrapElements(caseData.getPlacementEventData().getPlacements()).stream() + .map(placement -> { + List documentReferences = new ArrayList<>(); + + documentReferences.add(placement.getApplication()); + documentReferences.add(placement.getPlacementNotice()); + documentReferences.addAll(unwrapElements(placement.getConfidentialDocuments()).stream() + .map(PlacementConfidentialDocument::getDocument).toList()); + documentReferences.addAll(unwrapElements(placement.getSupportingDocuments()).stream() + .map(PlacementSupportingDocument::getDocument).toList()); + documentReferences.addAll(unwrapElements(placement.getNoticeDocuments()).stream() + .map(PlacementNoticeDocument::getDocument).toList()); + + return documentReferences; + }) + .flatMap(List::stream)); + } + + private List getAdditionalApplications(CaseData caseData) { + final List resultList = new ArrayList<>(); + + // additional application + unwrapElements(caseData.getAdditionalApplicationsBundle()).forEach(additionalApplicationsBundle -> { + C2DocumentBundle c2Bundle = (additionalApplicationsBundle.isConfidentialC2UploadedByChildSolicitor()) + ? additionalApplicationsBundle.getC2DocumentBundleConfidential() + : additionalApplicationsBundle.getC2DocumentBundle(); + if (isNotEmpty(c2Bundle)) { + List c2DocRef = new ArrayList<>(); + c2DocRef.add(c2Bundle.getDocument()); + + c2DocRef.addAll(getAllDocumentsFromSupplements(c2Bundle.getSupplementsBundle())); + c2DocRef.addAll(getAllDocumentsFromSupportingEvidenceBundles( + c2Bundle.getSupportingEvidenceBundle())); + c2DocRef.addAll(unwrapElements(c2Bundle.getDraftOrdersBundle()).stream() + .map(DraftOrder::getDocument).toList()); + + resultList.addAll(buildCafcassApiCaseDocumentList(C2_APPLICATION_DOCUMENTS, false, c2DocRef)); + } + + OtherApplicationsBundle otherBundle = additionalApplicationsBundle.getOtherApplicationsBundle(); + if (isNotEmpty(otherBundle)) { + List otherDocRef = new ArrayList<>(); + + otherDocRef.add(otherBundle.getDocument()); + otherDocRef.addAll(getAllDocumentsFromSupplements(otherBundle.getSupplementsBundle())); + otherDocRef.addAll(getAllDocumentsFromSupportingEvidenceBundles( + otherBundle.getSupportingEvidenceBundle())); + + resultList.addAll(buildCafcassApiCaseDocumentList(C1_APPLICATION_DOCUMENTS, false, otherDocRef)); + } + }); + + return resultList; + } + + private List getAllDocumentsFromSupportingEvidenceBundles(List> + bundles) { + return unwrapElements(bundles).stream() + .flatMap(supportingEvidenceBundleElement -> Stream.of( + supportingEvidenceBundleElement.getDocument(), + supportingEvidenceBundleElement.getTranslatedDocument())) + .toList(); + } + + private List getAllDocumentsFromSupplements(List> bundles) { + return unwrapElements(bundles).stream().map(Supplement::getDocument).toList(); + } + + private List getHearingNotice(CaseData caseData) { + return buildCafcassApiCaseDocumentList(NOTICE_OF_ACTING_OR_ISSUE, false, + unwrapElements(caseData.getHearingDetails()).stream() + .flatMap(hearingBooking -> Stream.of( + hearingBooking.getNoticeOfHearing(), + hearingBooking.getTranslatedNoticeOfHearing()))); + } + + private List getManageDocuments(CaseData caseData) { + return Arrays.stream(DocumentType.values()) + .filter(documentType -> isNotEmpty(documentType.getBaseFieldNameResolver())) + .map(documentType -> buildCafcassApiCaseDocumentList(documentType, false, + Stream.of(ConfidentialLevel.NON_CONFIDENTIAL, ConfidentialLevel.LA) + .map(confidentialLevel -> manageDocumentService + .toFieldNameToListOfElementMap(caseData, documentType, confidentialLevel).values()) + .flatMap(Collection::stream).flatMap(List::stream) + .map(Element::getValue) + .map(object -> (WithDocument) object) + .map(WithDocument::getDocument))) + .flatMap(List::stream) + .toList(); + } + + private CafcassApiCaseDocument buildCafcassApiCaseDocument(String category, boolean removed, + DocumentReference docRef) { + return CafcassApiCaseDocument.builder() + .documentId(getDocumentIdFromUrl(docRef.getUrl()).toString()) + .documentFileName(docRef.getFilename()) + .documentCategory(category) + .removed(removed) + .build(); + } + + private List buildCafcassApiCaseDocumentList(DocumentType docType, boolean removed, + List docRefList) { + return buildCafcassApiCaseDocumentList(docType.getCategory(), removed, docRefList); + } + + private List buildCafcassApiCaseDocumentList(String category, boolean removed, + List docRefList) { + return buildCafcassApiCaseDocumentList(category, removed, docRefList.stream()); + } + + private List buildCafcassApiCaseDocumentList(DocumentType category, boolean removed, + Stream docRefList) { + return buildCafcassApiCaseDocumentList(category.getCategory(), removed, docRefList); + } + + private List buildCafcassApiCaseDocumentList(String category, boolean removed, + Stream docRefList) { + return docRefList + .filter(Objects::nonNull) + .map(docRef -> buildCafcassApiCaseDocument(category, removed, docRef)) + .toList(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseManagementLocationConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseManagementLocationConverter.java new file mode 100644 index 00000000000..1ad1d21c3dd --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseManagementLocationConverter.java @@ -0,0 +1,27 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.ccd.model.CaseLocation; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseManagementLocation; + +@Service +public class CafcassApiCaseManagementLocationConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.caseManagementLocation(getCafcassApiCaseManagementLocation(caseData)); + } + + private CafcassApiCaseManagementLocation getCafcassApiCaseManagementLocation(CaseData caseData) { + CafcassApiCaseManagementLocation.CafcassApiCaseManagementLocationBuilder builder = + CafcassApiCaseManagementLocation.builder(); + + CaseLocation caseLocation = caseData.getCaseManagementLocation(); + if (caseLocation != null) { + builder = builder.region(caseLocation.getRegion()).baseLocation(caseLocation.getBaseLocation()); + } + return builder.build(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverter.java new file mode 100644 index 00000000000..7bef6661fbb --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverter.java @@ -0,0 +1,55 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.ChildParty; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiChild; + +import java.util.List; + +import static org.apache.commons.lang3.ObjectUtils.isNotEmpty; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiAddress; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiSolicitor; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getTelephoneNumber; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements; + +@Service +public class CafcassApiChildrenConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.children(getCafcassApiChild(caseData)); + } + + private List getCafcassApiChild(CaseData caseData) { + return unwrapElements(caseData.getChildren1()).stream() + .map(child -> { + CafcassApiChild.CafcassApiChildBuilder builder = CafcassApiChild.builder() + .solicitor(getCafcassApiSolicitor(child.getSolicitor())); + ChildParty childParty = child.getParty(); + if (isNotEmpty(childParty)) { + builder = builder.firstName(childParty.getFirstName()) + .lastName(childParty.getLastName()) + .dateOfBirth(childParty.getDateOfBirth()) + .gender(childParty.getGender().toString()) + .genderIdentification(childParty.getGenderIdentification()) + .livingSituation(childParty.getLivingSituation()) + .livingSituationDetails(childParty.getLivingSituationDetails()) + .address(getCafcassApiAddress(childParty.getAddress())) + .careAndContactPlan(childParty.getCareAndContactPlan()) + .detailsHidden(isYes(childParty.getDetailsHidden())) + .socialWorkerName(childParty.getSocialWorkerName()) + .socialWorkerTelephoneNumber(getTelephoneNumber(childParty.getSocialWorkerTelephoneNumber())) + .additionalNeeds(isYes(childParty.getAdditionalNeeds())) + .additionalNeedsDetails(childParty.getAdditionalNeedsDetails()) + .litigationIssues(childParty.getLitigationIssues()) + .litigationIssuesDetails(childParty.getLitigationIssuesDetails()) + .fathersResponsibility(childParty.getFathersResponsibility()); + } + return builder.build(); + }) + .toList(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiFactorsParentingConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiFactorsParentingConverter.java new file mode 100644 index 00000000000..54f522a38a8 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiFactorsParentingConverter.java @@ -0,0 +1,33 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.FactorsParenting; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiFactorsParenting; + +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; + +@Service +public class CafcassApiFactorsParentingConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.factorsParenting(getCafcassApiFactorsParenting(caseData)); + } + + private CafcassApiFactorsParenting getCafcassApiFactorsParenting(CaseData caseData) { + CafcassApiFactorsParenting.CafcassApiFactorsParentingBuilder builder = CafcassApiFactorsParenting.builder(); + + FactorsParenting factorsParenting = caseData.getFactorsParenting(); + if (factorsParenting != null) { + builder = builder.alcoholDrugAbuse(isYes(factorsParenting.getAlcoholDrugAbuse())) + .alcoholDrugAbuseReason(factorsParenting.getAlcoholDrugAbuseReason()) + .domesticViolence(isYes(factorsParenting.getDomesticViolence())) + .domesticViolenceReason(factorsParenting.getDomesticViolenceReason()) + .anythingElse(isYes(factorsParenting.getAnythingElse())) + .anythingElseReason(factorsParenting.getAnythingElseReason()); + } + return builder.build(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiHearingDetailsConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiHearingDetailsConverter.java new file mode 100644 index 00000000000..edc15aa85a8 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiHearingDetailsConverter.java @@ -0,0 +1,40 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.HearingBooking; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiHearing; + +import java.util.List; +import java.util.Optional; + +@Service +public class CafcassApiHearingDetailsConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.hearingDetails(getCafcassApiHearing(caseData)); + } + + private List getCafcassApiHearing(CaseData caseData) { + return Optional.ofNullable(caseData.getHearingDetails()).orElse(List.of()).stream() + .map(hearingBookingElement -> { + HearingBooking hearingBooking = hearingBookingElement.getValue(); + return CafcassApiHearing.builder() + .id(hearingBookingElement.getId().toString()) + .type(hearingBooking.getType()) + .typeDetails(hearingBooking.getTypeDetails()) + .venue(hearingBooking.getVenue()) + .status(hearingBooking.getStatus()) + .startDate(hearingBooking.getStartDate()) + .endDate(hearingBooking.getEndDate()) + .attendance(hearingBooking.getAttendance()) + .cancellationReason(hearingBooking.getCancellationReason()) + .preAttendanceDetails(hearingBooking.getPreAttendanceDetails()) + .attendanceDetails(hearingBooking.getAttendanceDetails()) + .build(); + }) + .toList(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiInternationalElementConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiInternationalElementConverter.java new file mode 100644 index 00000000000..f546364bb1e --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiInternationalElementConverter.java @@ -0,0 +1,40 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.InternationalElement; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiInternationalElement; + +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; + +@Service +public class CafcassApiInternationalElementConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.internationalElement(getCafcassApiInternationalElement(caseData)); + } + + private CafcassApiInternationalElement getCafcassApiInternationalElement(CaseData caseData) { + CafcassApiInternationalElement.CafcassApiInternationalElementBuilder builder = + CafcassApiInternationalElement.builder(); + + final InternationalElement internationalElement = caseData.getInternationalElement(); + if (internationalElement != null) { + builder = builder.possibleCarer(isYes(internationalElement.getPossibleCarer())) + .possibleCarerReason(internationalElement.getPossibleCarerReason()) + .significantEvents(isYes(internationalElement.getSignificantEvents())) + .significantEventsReason(internationalElement.getSignificantEventsReason()) + .issues(isYes(internationalElement.getIssues())) + .issuesReason(internationalElement.getIssuesReason()) + .proceedings(isYes(internationalElement.getProceedings())) + .proceedingsReason(internationalElement.getProceedingsReason()) + .internationalAuthorityInvolvement(isYes(internationalElement.getInternationalAuthorityInvolvement())) + .internationalAuthorityInvolvementDetails(internationalElement + .getInternationalAuthorityInvolvementDetails()); + } + + return builder.build(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiMetaDataConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiMetaDataConverter.java new file mode 100644 index 00000000000..2c989b3979a --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiMetaDataConverter.java @@ -0,0 +1,23 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; + +@Service +public class CafcassApiMetaDataConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder + .familyManCaseNumber(caseData.getFamilyManCaseNumber()) + .dateSubmitted(caseData.getDateSubmitted()) + .applicationType(caseData.isC1Application() ? "C1" : "C110A") + .ordersSought(caseData.getOrders().getOrderType()) + .dateOfCourtIssue(caseData.getDateOfIssue()) + .citizenIsApplicant(YesNo.NO.equals(caseData.getIsLocalAuthority())) + .applicantLA(caseData.getCaseLocalAuthority()) + .respondentLA(caseData.getRelatingLA()); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverter.java new file mode 100644 index 00000000000..4b9f9035b91 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverter.java @@ -0,0 +1,49 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiOther; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Stream; + +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiAddress; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements; + +@Service +public class CafcassApiOthersConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.others(getCafcassApiOthers(caseData)); + } + + private List getCafcassApiOthers(CaseData caseData) { + return Optional.ofNullable(caseData.getOthers()) + .map(others -> Stream.concat(Optional.ofNullable(others.getFirstOther()).stream(), + unwrapElements(others.getAdditionalOthers()).stream()) + .filter(Objects::nonNull) + .map(other -> CafcassApiOther.builder() + .name(other.getName()) + .dateOfBirth(other.getDateOfBirth()) + .gender(other.getGender()) + .genderIdentification(other.getGenderIdentification()) + .birthPlace(other.getBirthPlace()) + .addressKnown(isYes(other.getAddressKnow())) + .addressUnknownReason(other.getAddressNotKnowReason()) + .address(getCafcassApiAddress(other.getAddress())) + .telephone(other.getTelephone()) + .litigationIssues(other.getLitigationIssues()) + .litigationIssuesDetails(other.getLitigationIssuesDetails()) + .detailsHidden(isYes(other.getDetailsHidden())) + .detailsHiddenReason(other.getDetailsHiddenReason()) + .build()) + .toList() + ) + .orElse(List.of()); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiPreviousProceedingsConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiPreviousProceedingsConverter.java new file mode 100644 index 00000000000..6004e171c94 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiPreviousProceedingsConverter.java @@ -0,0 +1,38 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiProceeding; +import uk.gov.hmcts.reform.fpl.model.common.Element; + +import java.util.List; + +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; + +@Service +public class CafcassApiPreviousProceedingsConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.previousProceedings(getCafcassApiProceeding(caseData)); + } + + private List getCafcassApiProceeding(CaseData caseData) { + return caseData.getAllProceedings().stream() + .map(Element::getValue) + .map(proceeding -> CafcassApiProceeding.builder() + .proceedingStatus(proceeding.getProceedingStatus()) + .caseNumber(proceeding.getCaseNumber()) + .started(proceeding.getStarted()) + .ended(proceeding.getEnded()) + .ordersMade(proceeding.getOrdersMade()) + .judge(proceeding.getJudge()) + .children(proceeding.getChildren()) + .guardian(proceeding.getGuardian()) + .sameGuardianNeeded(isYes(proceeding.getSameGuardianNeeded())) + .sameGuardianDetails(proceeding.getSameGuardianDetails()) + .build()) + .toList(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java new file mode 100644 index 00000000000..9c2a5e5ea16 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java @@ -0,0 +1,51 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.RespondentParty; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiRespondent; + +import java.util.List; + +import static org.apache.commons.lang3.ObjectUtils.isNotEmpty; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiAddress; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiSolicitor; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getTelephoneNumber; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements; + +@Service +public class CafcassApiRespondentsConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.respondents(getCafcassApiRespondents(caseData)); + } + + private List getCafcassApiRespondents(CaseData caseData) { + return unwrapElements(caseData.getRespondents1()).stream() + .map(respondent -> { + CafcassApiRespondent.CafcassApiRespondentBuilder builder = CafcassApiRespondent.builder() + .solicitor(getCafcassApiSolicitor(respondent.getSolicitor())); + RespondentParty respondentParty = respondent.getParty(); + if (isNotEmpty(respondentParty)) { + builder = builder.firstName(respondentParty.getFirstName()) + .lastName(respondentParty.getLastName()) + .gender(respondentParty.getGender()) + .addressKnown(isYes(respondentParty.getAddressKnow())) + .addressUnknownReason(respondentParty.getAddressNotKnowReason()) + .address(getCafcassApiAddress(respondentParty.getAddress())) + .dateOfBirth(respondentParty.getDateOfBirth()) + .telephoneNumber(getTelephoneNumber(respondentParty.getTelephoneNumber())) + .litigationIssues(respondentParty.getLitigationIssues()) + .litigationIssuesDetails(respondentParty.getLitigationIssuesDetails()) + .contactDetailsHidden(isYes(respondentParty.getContactDetailsHidden())) + .contactDetailsHiddenReason(respondentParty.getContactDetailsHiddenReason()) + .relationshipToChild(respondentParty.getRelationshipToChild()); + } + return builder.build(); + }) + .toList(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRisksConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRisksConverter.java new file mode 100644 index 00000000000..90e49ae4c3e --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRisksConverter.java @@ -0,0 +1,30 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Risks; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiRisk; + +@Service +public class CafcassApiRisksConverter implements CafcassApiCaseDataConverter { + @Override + public CafcassApiCaseData.CafcassApiCaseDataBuilder convert(CaseData caseData, + CafcassApiCaseData.CafcassApiCaseDataBuilder builder) { + return builder.risks(getCafcassApiRisk(caseData)); + } + + private CafcassApiRisk getCafcassApiRisk(CaseData caseData) { + CafcassApiRisk.CafcassApiRiskBuilder builder = CafcassApiRisk.builder(); + + Risks risk = caseData.getRisks(); + if (risk != null) { + builder = builder + .neglectOccurrences(risk.getNeglectOccurrences()) + .sexualAbuseOccurrences(risk.getSexualAbuseOccurrences()) + .physicalHarmOccurrences(risk.getPhysicalHarmOccurrences()) + .emotionalHarmOccurrences(risk.getEmotionalHarmOccurrences()); + } + return builder.build(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseService.java new file mode 100644 index 00000000000..d6b05216323 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseService.java @@ -0,0 +1,61 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCase; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.service.CaseConverter; +import uk.gov.hmcts.reform.fpl.service.search.SearchService; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.RangeQuery; + +import java.time.LocalDateTime; +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class CafcassApiSearchCaseService { + private final CaseConverter caseConverter; + private final SearchService searchService; + private final List cafcassApiCaseDataConverters; + + public List searchCaseByDateRange(LocalDateTime startDate, LocalDateTime endDate) { + + final RangeQuery searchRange = RangeQuery.builder() + .field("last_modified") + .greaterThanOrEqual(startDate) + .lessThanOrEqual(endDate).build(); + + List caseDetails = searchService.search(searchRange, 10000, 0); + + return caseDetails.stream() + .map(this::convertToCafcassApiCase) + .toList(); + } + + private CafcassApiCase convertToCafcassApiCase(CaseDetails caseDetails) { + return CafcassApiCase.builder() + .caseId(caseDetails.getId()) + .jurisdiction(caseDetails.getJurisdiction()) + .state(caseDetails.getState()) + .caseTypeId(caseDetails.getCaseTypeId()) + .createdDate(caseDetails.getCreatedDate()) + .lastModified(caseDetails.getLastModified()) + .caseData(getCafcassApiCaseData(caseConverter.convert(caseDetails))) + .build(); + } + + private CafcassApiCaseData getCafcassApiCaseData(CaseData caseData) { + CafcassApiCaseData.CafcassApiCaseDataBuilder builder = CafcassApiCaseData.builder(); + + for (CafcassApiCaseDataConverter converter : cafcassApiCaseDataConverters) { + builder = converter.convert(caseData, builder); + } + + return builder.build(); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/document/ManageDocumentService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/document/ManageDocumentService.java index a7314cc5d57..dd4e7da4788 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/document/ManageDocumentService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/document/ManageDocumentService.java @@ -464,7 +464,7 @@ private Element handleGeneralDocumentTypeRemoval(Documen } } - private List> getListOfRemovedElement(CaseData caseData, DocumentType documentType) { + public List> getListOfRemovedElement(CaseData caseData, DocumentType documentType) { return Optional.ofNullable(readFromFieldName(caseData, documentType.getFieldNameOfRemovedList())).orElse(new ArrayList<>()); } @@ -701,7 +701,7 @@ private Element mimicAdditionalApplicationsBundle( .build()); } - private Map>> toFieldNameToListOfElementMap(CaseData caseData, DocumentType documentType, + public Map>> toFieldNameToListOfElementMap(CaseData caseData, DocumentType documentType, ConfidentialLevel level) { Map>> ret = new LinkedHashMap<>(); if (documentType.getBaseFieldNameResolver() != null) { diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/AmendOrderToDownloadPrePopulator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/AmendOrderToDownloadPrePopulator.java index 4fe3aab2bd4..fce35f7a26e 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/AmendOrderToDownloadPrePopulator.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/AmendOrderToDownloadPrePopulator.java @@ -54,7 +54,7 @@ private DocumentReference getSelectedOrder(CaseData caseData) { if (foundOrder.isPresent()) { GeneratedOrder order = foundOrder.get().getValue(); - return (order.isConfidential()) ? order.getDocumentConfidential() : order.getDocument(); + return order.getDocumentOrDocumentConfidential(); } Optional> foundCMO = caseData.getSealedCMOs() diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelper.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelper.java new file mode 100644 index 00000000000..61df4b1c448 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelper.java @@ -0,0 +1,54 @@ +package uk.gov.hmcts.reform.fpl.utils; + +import uk.gov.hmcts.reform.fpl.model.Address; +import uk.gov.hmcts.reform.fpl.model.RespondentSolicitor; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiAddress; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSolicitor; +import uk.gov.hmcts.reform.fpl.model.common.Telephone; + +import java.util.Optional; + +import static uk.gov.hmcts.reform.fpl.enums.YesNo.YES; + +public class CafcassApiHelper { + public static CafcassApiAddress getCafcassApiAddress(Address address) { + return Optional.ofNullable(address) + .map(add -> CafcassApiAddress.builder() + .addressLine1(add.getAddressLine1()) + .addressLine2(add.getAddressLine2()) + .addressLine3(add.getAddressLine3()) + .postTown(add.getPostTown()) + .county(add.getCounty()) + .postcode(add.getPostcode()) + .country(add.getCountry()) + .build()) + .orElse(null); + } + + public static boolean isYes(String yesNo) { + return YES.getValue().equalsIgnoreCase(yesNo); + } + + public static String getTelephoneNumber(Telephone telephone) { + return Optional.ofNullable(telephone) + .map(Telephone::getTelephoneNumber) + .orElse(null); + } + + public static CafcassApiSolicitor getCafcassApiSolicitor(RespondentSolicitor respondentSolicitor) { + return Optional.ofNullable(respondentSolicitor) + .map(solicitor -> { + CafcassApiSolicitor.CafcassApiSolicitorBuilder builder = CafcassApiSolicitor.builder() + .email(solicitor.getEmail()) + .firstName(solicitor.getFirstName()) + .lastName(solicitor.getLastName()); + + if (solicitor.getOrganisation() != null) { + builder = builder.organisationId(solicitor.getOrganisation().getOrganisationID()) + .organisationName(solicitor.getOrganisation().getOrganisationName()); + } + return builder.build(); + }) + .orElse(null); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/DocumentsHelper.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/DocumentsHelper.java index 56242718e80..e575c297789 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/DocumentsHelper.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/DocumentsHelper.java @@ -6,6 +6,8 @@ import uk.gov.hmcts.reform.fpl.model.common.Document; import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; +import java.util.UUID; + @Slf4j public class DocumentsHelper { @@ -43,4 +45,11 @@ public static String updateExtension(String filename, String newExtension) { } return filename; } + + public static UUID getDocumentIdFromUrl(final String documentUrlString) { + String selfHref = documentUrlString.replace("/binary", ""); + UUID documentId = UUID.fromString(selfHref.substring(selfHref.length() - 36)); + + return documentId; + } } diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptorTest.java new file mode 100644 index 00000000000..2b831c7e583 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptorTest.java @@ -0,0 +1,67 @@ +package uk.gov.hmcts.reform.fpl.interceptors; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.ObjectProvider; +import uk.gov.hmcts.reform.fpl.exceptions.api.AuthorizationException; +import uk.gov.hmcts.reform.idam.client.IdamClient; +import uk.gov.hmcts.reform.idam.client.models.UserInfo; + +import java.util.List; +import javax.servlet.http.HttpServletRequest; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.fpl.enums.UserRole.CAFCASS_SYSTEM_UPDATE; +import static uk.gov.hmcts.reform.fpl.enums.UserRole.LOCAL_AUTHORITY; + +@ExtendWith(MockitoExtension.class) +public class CafcassApiInterceptorTest { + private static final String AUTH_TOKEN_TEST = "bearerToken"; + private static final UserInfo CAFCASS_SYSTEM_UPDATE_USER = + UserInfo.builder().roles(List.of(CAFCASS_SYSTEM_UPDATE.getRoleName())).build(); + private static final UserInfo LOCAL_AUTHORITY_UPDATE_USER = + UserInfo.builder().roles(List.of(LOCAL_AUTHORITY.getRoleName())).build(); + + @Mock + private IdamClient idamClient; + @Mock + private ObjectProvider idamClientObjectProvider; + @InjectMocks + private CafcassApiInterceptor underTest; + + @Test + public void shouldReturnTrueIfCafcassSystemUpdateUser() throws Exception { + HttpServletRequest request = mock(HttpServletRequest.class); + when(request.getHeader("Authorization")).thenReturn(AUTH_TOKEN_TEST); + when(idamClientObjectProvider.getIfAvailable()).thenReturn(idamClient); + when(idamClient.getUserInfo(AUTH_TOKEN_TEST)).thenReturn(CAFCASS_SYSTEM_UPDATE_USER); + + assertTrue(underTest.preHandle(request, null, null)); + } + + @Test + public void shouldThrowAuthExceptionIfNotCafcassSystemUpdateUser() throws Exception { + HttpServletRequest request = mock(HttpServletRequest.class); + when(request.getHeader("Authorization")).thenReturn(AUTH_TOKEN_TEST); + when(idamClientObjectProvider.getIfAvailable()).thenReturn(idamClient); + when(idamClient.getUserInfo(AUTH_TOKEN_TEST)).thenReturn(LOCAL_AUTHORITY_UPDATE_USER); + + assertThrows(AuthorizationException.class, + () -> underTest.preHandle(request, null, null)); + } + + @Test + public void shouldThrowAuthExceptionWhenNoAuthorizationToken() throws Exception { + HttpServletRequest request = mock(HttpServletRequest.class); + when(request.getHeader("Authorization")).thenReturn(null); + + assertThrows(AuthorizationException.class, + () -> underTest.preHandle(request, null, null)); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiApplicantsConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiApplicantsConverterTest.java new file mode 100644 index 00000000000..164f45521c3 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiApplicantsConverterTest.java @@ -0,0 +1,80 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.LocalAuthority; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiApplicant; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.common.Element; + +import java.util.List; + +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.element; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + +public class CafcassApiApplicantsConverterTest extends CafcassApiConverterTestBase { + + CafcassApiApplicantsConverterTest() { + super(new CafcassApiApplicantsConverter()); + } + + @Test + void shouldConvertAllApplicant() { + LocalAuthority la1 = LocalAuthority.builder() + .name("Applicant 1 name") + .email("applicant1@test.com") + .phone("0123456789") + .address(getTestAddress("applicant 1 address")) + .designated(YesNo.YES.getValue()) + .colleagues(wrapElements(getTestColleague(1))) + .build(); + Element la1Element = element(la1); + + LocalAuthority la2 = LocalAuthority.builder() + .name("Applicant 2 name") + .email("applicant2@test.com") + .phone("0123456789") + .address(getTestAddress("applicant 2 address")) + .designated(YesNo.NO.getValue()) + .colleagues(wrapElements(getTestColleague(2))) + .build(); + Element la2Element = element(la2); + + CaseData caseData = CaseData.builder() + .localAuthorities(List.of(la1Element, la2Element)) + .build(); + + CafcassApiCaseData expected = CafcassApiCaseData.builder() + .applicants(List.of( + CafcassApiApplicant.builder() + .id(la1Element.getId().toString()) + .name("Applicant 1 name") + .email("applicant1@test.com") + .phone("0123456789") + .address(getExpectedAddress("applicant 1 address")) + .designated(true) + .colleagues(List.of(getExpectedColleague(1))) + .build(), + CafcassApiApplicant.builder() + .id(la2Element.getId().toString()) + .name("Applicant 2 name") + .email("applicant2@test.com") + .phone("0123456789") + .address(getExpectedAddress("applicant 2 address")) + .designated(false) + .colleagues(List.of(getExpectedColleague(2))) + .build())) + .build(); + + testConvert(caseData, expected); + } + + @Test + void shouldBuildEmptyListIfNoApplicant() { + CafcassApiCaseData expected = CafcassApiCaseData.builder().applicants(List.of()).build(); + + testConvert(CaseData.builder().localAuthorities(null).build(), expected); + testConvert(CaseData.builder().localAuthorities(List.of()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDocumentsConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDocumentsConverterTest.java new file mode 100644 index 00000000000..235b5ad156b --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseDocumentsConverterTest.java @@ -0,0 +1,597 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.mockito.Mockito; +import org.springframework.test.annotation.DirtiesContext; +import uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.ConfidentialGeneratedOrders; +import uk.gov.hmcts.reform.fpl.model.ManagedDocument; +import uk.gov.hmcts.reform.fpl.model.Placement; +import uk.gov.hmcts.reform.fpl.model.PlacementConfidentialDocument; +import uk.gov.hmcts.reform.fpl.model.PlacementNoticeDocument; +import uk.gov.hmcts.reform.fpl.model.PlacementSupportingDocument; +import uk.gov.hmcts.reform.fpl.model.StandardDirectionOrder; +import uk.gov.hmcts.reform.fpl.model.Supplement; +import uk.gov.hmcts.reform.fpl.model.SupportingEvidenceBundle; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseDocument; +import uk.gov.hmcts.reform.fpl.model.common.AdditionalApplicationsBundle; +import uk.gov.hmcts.reform.fpl.model.common.C2DocumentBundle; +import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; +import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.model.common.OtherApplicationsBundle; +import uk.gov.hmcts.reform.fpl.model.common.SubmittedC1WithSupplementBundle; +import uk.gov.hmcts.reform.fpl.model.event.PlacementEventData; +import uk.gov.hmcts.reform.fpl.model.group.C110A; +import uk.gov.hmcts.reform.fpl.model.order.DraftOrder; +import uk.gov.hmcts.reform.fpl.model.order.HearingOrder; +import uk.gov.hmcts.reform.fpl.model.order.HearingOrdersBundle; +import uk.gov.hmcts.reform.fpl.model.order.generated.GeneratedOrder; +import uk.gov.hmcts.reform.fpl.service.document.ManageDocumentService; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.apache.commons.lang3.ObjectUtils.isNotEmpty; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.fpl.enums.cfv.ConfidentialLevel.CTSC; +import static uk.gov.hmcts.reform.fpl.enums.cfv.ConfidentialLevel.LA; +import static uk.gov.hmcts.reform.fpl.enums.cfv.ConfidentialLevel.NON_CONFIDENTIAL; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.AA_PARENT_ORDERS; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.C1_APPLICATION_DOCUMENTS; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.C2_APPLICATION_DOCUMENTS; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.PLACEMENT_RESPONSES; +import static uk.gov.hmcts.reform.fpl.utils.DocumentsHelper.getDocumentIdFromUrl; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.element; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + +public class CafcassApiCaseDocumentsConverterTest extends CafcassApiConverterTestBase { + private static final ManageDocumentService manageDocumentService = mock(ManageDocumentService.class); + + CafcassApiCaseDocumentsConverterTest() { + super(new CafcassApiCaseDocumentsConverter(manageDocumentService)); + } + + private List getExpectedCafcassApiCaseDocuments(String category, boolean removed, + List docRefs) { + return docRefs.stream().map(docRef -> CafcassApiCaseDocument.builder() + .documentId(getDocumentIdFromUrl(docRef.getUrl()).toString()) + .documentFileName(docRef.getFilename()) + .documentCategory(category) + .removed(removed) + .build()) + .toList(); + } + + private void testCaseDocument(CaseData caseData, List documentReferences, + DocumentType documentType) { + testCaseDocument(caseData, documentReferences, documentType.getCategory()); + } + + private void testCaseDocument(CaseData caseData, List documentReferences, String category) { + CafcassApiCaseData actual = testConvert(caseData); + assertThat(actual.getCaseDocuments()) + .containsOnlyOnceElementsOf(getExpectedCafcassApiCaseDocuments(category, false, documentReferences)); + + } + + @Nested + class StandardAndUrgentDirectionOrder { + @Test + void shouldConvertStandardAndUrgentDirectionOrder() { + DocumentReference sdoOrder = getTestDocumentReference(); + DocumentReference sdoTranslatedOrder = getTestDocumentReference(); + DocumentReference udoOrder = getTestDocumentReference(); + DocumentReference udoTranslatedOrder = getTestDocumentReference(); + + CaseData caseData = CaseData.builder() + .standardDirectionOrder(StandardDirectionOrder.builder() + .orderDoc(sdoOrder) + .translatedOrderDoc(sdoTranslatedOrder) + .build()) + .urgentDirectionsOrder(StandardDirectionOrder.builder() + .orderDoc(udoOrder) + .translatedOrderDoc(udoTranslatedOrder) + .build()) + .build(); + + testCaseDocument(caseData, List.of(sdoOrder, sdoTranslatedOrder, udoOrder, udoTranslatedOrder), + AA_PARENT_ORDERS); + } + + @Test + void shouldReturnEmptyListIfDocumentNotExist() { + testCaseDocument( + CaseData.builder() + .standardDirectionOrder(StandardDirectionOrder.builder().build()) + .urgentDirectionsOrder(StandardDirectionOrder.builder().build()).build(), + List.of(), "draftOrders"); + } + + @Test + void shouldReturnEmptyListIfNull() { + testCaseDocument( + CaseData.builder().standardDirectionOrder(null).urgentDirectionsOrder(null).build(), + List.of(), "draftOrders"); + } + } + + @Nested + class DraftOrders { + private static final DocumentReference DRAFT_ORDER = getTestDocumentReference(); + private static final DocumentReference DRAFT_ORDER_CONFIDENTIAL = getTestDocumentReference(); + + @Test + void shouldConvertDraftOrdersAndConfidentialOrdersUploadedByChildSolicitor() { + List> hearingOrdersBundlesDrafts = wrapElements( + HearingOrdersBundle.builder() + .orders(wrapElements(HearingOrder.builder().order(DRAFT_ORDER).build())) + .build(), + HearingOrdersBundle.builder() + .ordersChild0(wrapElements(HearingOrder.builder() + .orderConfidential(DRAFT_ORDER_CONFIDENTIAL).build())) + .build()); + + CaseData caseData = CaseData.builder() + .hearingOrdersBundlesDrafts(hearingOrdersBundlesDrafts) + .build(); + + testCaseDocument(caseData, List.of(DRAFT_ORDER, DRAFT_ORDER_CONFIDENTIAL), "draftOrders"); + } + + @Test + void shouldConvertDraftOrdersReviewAndConfidentialOrdersUploadedByChildSolicitor() { + List> hearingOrdersBundlesDraftReview = wrapElements( + HearingOrdersBundle.builder() + .orders(wrapElements(HearingOrder.builder().order(DRAFT_ORDER).build())) + .build(), + HearingOrdersBundle.builder() + .ordersChild0(wrapElements(HearingOrder.builder() + .orderConfidential(DRAFT_ORDER_CONFIDENTIAL).build())) + .build()); + CaseData caseData = CaseData.builder() + .hearingOrdersBundlesDraftReview(hearingOrdersBundlesDraftReview) + .build(); + testCaseDocument(caseData, List.of(DRAFT_ORDER, DRAFT_ORDER_CONFIDENTIAL), "draftOrders"); + } + + @Test + void shouldNotConvertConfidentialOrdersNotUploadedByChildSolicitor() { + List> hearingOrdersBundlesDrafts = wrapElements( + HearingOrdersBundle.builder() + .ordersCTSC(wrapElements(HearingOrder.builder() + .orderConfidential(DRAFT_ORDER_CONFIDENTIAL).build())) + .build(), + HearingOrdersBundle.builder() + .ordersLA(wrapElements(HearingOrder.builder() + .orderConfidential(DRAFT_ORDER_CONFIDENTIAL).build())) + .build()); + + List> hearingOrdersBundlesDraftReview = wrapElements( + HearingOrdersBundle.builder() + .ordersResp0(wrapElements(HearingOrder.builder() + .orderConfidential(DRAFT_ORDER_CONFIDENTIAL).build())) + .build()); + CaseData caseData = CaseData.builder() + .hearingOrdersBundlesDrafts(hearingOrdersBundlesDrafts) + .hearingOrdersBundlesDraftReview(hearingOrdersBundlesDraftReview) + .build(); + + testCaseDocument(caseData, List.of(), "draftOrders"); + } + + @Test + void shouldReturnEmptyListIfNullOrEmpty() { + testCaseDocument( + CaseData.builder().hearingOrdersBundlesDrafts(null).hearingOrdersBundlesDraftReview(null).build(), + List.of(), "draftOrders"); + testCaseDocument( + CaseData.builder() + .hearingOrdersBundlesDrafts(List.of()) + .hearingOrdersBundlesDraftReview(List.of()).build(), + List.of(), "draftOrders"); + } + } + + @Nested + class ApprovedOrder { + private static final DocumentReference SEALED_CMO = getTestDocumentReference(); + private static final DocumentReference SEALED_CMO_CONFIDENTIAL = getTestDocumentReference(); + private static final DocumentReference APPROVED_ORDER = getTestDocumentReference(); + private static final DocumentReference APPROVED_ORDER_CONFIDENTIAL = getTestDocumentReference(); + + @Test + void shouldConvertSealedCmosAndOrders() { + CaseData caseData = CaseData.builder() + .sealedCMOs(wrapElements( + HearingOrder.builder() + .order(SEALED_CMO) + .build(), + HearingOrder.builder() + .orderConfidential(SEALED_CMO_CONFIDENTIAL) + .build() + )) + .orderCollection(wrapElements(GeneratedOrder.builder().document(APPROVED_ORDER).build())) + .confidentialOrders(ConfidentialGeneratedOrders.builder() + .orderCollectionChild0(wrapElements( + GeneratedOrder.builder().document(APPROVED_ORDER_CONFIDENTIAL).build())) + .build()) + .build(); + + testCaseDocument(caseData, + List.of(SEALED_CMO, SEALED_CMO_CONFIDENTIAL, APPROVED_ORDER, APPROVED_ORDER_CONFIDENTIAL), + AA_PARENT_ORDERS); + } + + @Test + void shouldNotConvertConfidentialOrderNotUploadedByChildSolicitor() { + CaseData caseData = CaseData.builder() + .confidentialOrders(ConfidentialGeneratedOrders.builder() + .orderCollectionCTSC(wrapElements( + GeneratedOrder.builder().document(APPROVED_ORDER_CONFIDENTIAL).build())) + .orderCollectionLA(wrapElements( + GeneratedOrder.builder().document(APPROVED_ORDER_CONFIDENTIAL).build())) + .orderCollectionResp0(wrapElements( + GeneratedOrder.builder().document(APPROVED_ORDER_CONFIDENTIAL).build())) + .build()) + .build(); + testCaseDocument(caseData, List.of(), AA_PARENT_ORDERS); + } + + @Test + void shouldReturnEmptyListIfNullOrEmpty() { + testCaseDocument(CaseData.builder().build(), List.of(), AA_PARENT_ORDERS); + + testCaseDocument( + CaseData.builder() + .sealedCMOs(List.of()).orderCollection(List.of()) + .confidentialOrders(ConfidentialGeneratedOrders.builder().build()) + .build(), + List.of(), AA_PARENT_ORDERS); + + testCaseDocument( + CaseData.builder() + .confidentialOrders(ConfidentialGeneratedOrders.builder() + .orderCollectionResp0(List.of()) + .orderCollectionChild0(List.of()) + .build()) + .build(), + List.of(), AA_PARENT_ORDERS); + } + } + + @Nested + class OriginalApplications { + private static final DocumentReference APPLICATION_DOC = getTestDocumentReference(); + private static final DocumentReference APPLICATION_TRANSLATED_DOC = getTestDocumentReference(); + private static final DocumentReference SUPPLEMENT_DOC = getTestDocumentReference(); + private static final Supplement SUPPLEMENT = Supplement.builder().document(SUPPLEMENT_DOC).build(); + private static final DocumentReference SUPPORTING_EVIDENCE_DOC = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_EVIDENCE_TRANSLATED_DOC = getTestDocumentReference(); + private static final SupportingEvidenceBundle SUPPORTING_EVIDENCE_BUNDLE = SupportingEvidenceBundle.builder() + .document(SUPPORTING_EVIDENCE_DOC) + .translatedDocument(SUPPORTING_EVIDENCE_TRANSLATED_DOC) + .build(); + + @Test + void shouldConvertC1OriginalApplicationDocument() { + CaseData caseData = CaseData.builder() + .submittedC1WithSupplement(SubmittedC1WithSupplementBundle.builder() + .document(APPLICATION_DOC) + .supplementsBundle(wrapElements(SUPPLEMENT)) + .supportingEvidenceBundle(wrapElements(SUPPORTING_EVIDENCE_BUNDLE)) + .build()) + .build(); + + testCaseDocument( + caseData, + List.of(APPLICATION_DOC, SUPPLEMENT_DOC, SUPPORTING_EVIDENCE_DOC, SUPPORTING_EVIDENCE_TRANSLATED_DOC), + "originalApplications"); + } + + @Test + void shouldConvertC110AOriginalApplicationDocument() { + CaseData caseData = CaseData.builder() + .c110A(C110A.builder() + .submittedForm(APPLICATION_DOC) + .translatedSubmittedForm(APPLICATION_TRANSLATED_DOC) + .supplementDocument(SUPPLEMENT_DOC) + .build()) + .build(); + + testCaseDocument( + caseData, + List.of(APPLICATION_DOC, APPLICATION_TRANSLATED_DOC, SUPPLEMENT_DOC), + "originalApplications"); + } + + @Test + void shouldReturnEmptyListIfNullOrEmpty() { + testCaseDocument( + CaseData.builder().c110A(null).submittedC1WithSupplement(null).build(), + List.of(), + "originalApplications"); + + testCaseDocument( + CaseData.builder().c110A( + C110A.builder().build()) + .submittedC1WithSupplement(SubmittedC1WithSupplementBundle.builder().build()).build(), + List.of(), + "originalApplications"); + } + } + + @Nested + class PlacementApplications { + private static final DocumentReference PLACEMENT_APPLICATION_1 = getTestDocumentReference(); + private static final DocumentReference PLACEMENT_APPLICATION_2 = getTestDocumentReference(); + private static final DocumentReference PLACEMENT_NOTICE_DOCUMENT_1 = getTestDocumentReference(); + private static final DocumentReference PLACEMENT_NOTICE_DOCUMENT_2 = getTestDocumentReference(); + private static final DocumentReference CONFIDENTIAL_DOCUMENT_1 = getTestDocumentReference(); + private static final DocumentReference CONFIDENTIAL_DOCUMENT_2 = getTestDocumentReference(); + private static final DocumentReference CONFIDENTIAL_DOCUMENT_3 = getTestDocumentReference(); + private static final DocumentReference CONFIDENTIAL_DOCUMENT_4 = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_DOCUMENT_1 = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_DOCUMENT_2 = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_DOCUMENT_3 = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_DOCUMENT_4 = getTestDocumentReference(); + private static final DocumentReference NOTICE_DOCUMENT_1 = getTestDocumentReference(); + private static final DocumentReference NOTICE_DOCUMENT_2 = getTestDocumentReference(); + private static final DocumentReference NOTICE_DOCUMENT_3 = getTestDocumentReference(); + private static final DocumentReference NOTICE_DOCUMENT_4 = getTestDocumentReference(); + + @Test + void shouldConvertAllPlacementApplications() { + final Placement placement1 = Placement.builder() + .application(PLACEMENT_APPLICATION_1) + .placementNotice(PLACEMENT_NOTICE_DOCUMENT_1) + .confidentialDocuments(wrapElements( + PlacementConfidentialDocument.builder().document(CONFIDENTIAL_DOCUMENT_1).build(), + PlacementConfidentialDocument.builder().document(CONFIDENTIAL_DOCUMENT_3).build() + )) + .supportingDocuments(wrapElements( + PlacementSupportingDocument.builder().document(SUPPORTING_DOCUMENT_1).build(), + PlacementSupportingDocument.builder().document(SUPPORTING_DOCUMENT_3).build() + )) + .noticeDocuments(wrapElements( + PlacementNoticeDocument.builder().response(NOTICE_DOCUMENT_1).build(), + PlacementNoticeDocument.builder().response(NOTICE_DOCUMENT_3).build() + )) + .build(); + + + final Placement placement2 = Placement.builder() + .application(PLACEMENT_APPLICATION_2) + .placementNotice(PLACEMENT_NOTICE_DOCUMENT_2) + .confidentialDocuments(wrapElements( + PlacementConfidentialDocument.builder().document(CONFIDENTIAL_DOCUMENT_2).build(), + PlacementConfidentialDocument.builder().document(CONFIDENTIAL_DOCUMENT_4).build() + )) + .supportingDocuments(wrapElements( + PlacementSupportingDocument.builder().document(SUPPORTING_DOCUMENT_2).build(), + PlacementSupportingDocument.builder().document(SUPPORTING_DOCUMENT_4).build() + )) + .noticeDocuments(wrapElements( + PlacementNoticeDocument.builder().response(NOTICE_DOCUMENT_2).build(), + PlacementNoticeDocument.builder().response(NOTICE_DOCUMENT_4).build() + )) + .build(); + + CaseData caseData = CaseData.builder() + .placementEventData(PlacementEventData.builder() + .placements(wrapElements(placement1, placement2)) + .build()) + .build(); + + testCaseDocument(caseData, List.of(PLACEMENT_APPLICATION_1, PLACEMENT_APPLICATION_2, + PLACEMENT_NOTICE_DOCUMENT_1, PLACEMENT_NOTICE_DOCUMENT_2, + CONFIDENTIAL_DOCUMENT_1, CONFIDENTIAL_DOCUMENT_3, CONFIDENTIAL_DOCUMENT_2, CONFIDENTIAL_DOCUMENT_4, + SUPPORTING_DOCUMENT_1, SUPPORTING_DOCUMENT_3, SUPPORTING_DOCUMENT_2, SUPPORTING_DOCUMENT_4, + NOTICE_DOCUMENT_1, NOTICE_DOCUMENT_3, NOTICE_DOCUMENT_2, NOTICE_DOCUMENT_4), PLACEMENT_RESPONSES); + } + + @Test + void shouldConvertPlacementApplicationIfOnlyApplicationDocumentExist() { + final Placement placement = Placement.builder().application(PLACEMENT_APPLICATION_1).build(); + + CaseData caseData = CaseData.builder() + .placementEventData(PlacementEventData.builder() + .placements(wrapElements(placement)) + .build()) + .build(); + + testCaseDocument(caseData, List.of(PLACEMENT_APPLICATION_1), PLACEMENT_RESPONSES); + } + + @Test + void shouldReturnEmptyListIfNoPlacementExist() { + testCaseDocument(CaseData.builder().build(), List.of(), PLACEMENT_RESPONSES); + testCaseDocument(CaseData.builder() + .placementEventData(PlacementEventData.builder() + .placements(wrapElements(Placement.builder().build())) + .build()).build(), List.of(), PLACEMENT_RESPONSES); + } + } + + @Nested + class AdditionalApplications { + private static final DocumentReference C2 = getTestDocumentReference(); + private static final DocumentReference C2_2 = getTestDocumentReference(); + private static final DocumentReference OTHER_APPLICATION = getTestDocumentReference(); + private static final DocumentReference OTHER_APPLICATION_2 = getTestDocumentReference(); + private static final DocumentReference SUPPLEMENT_1 = getTestDocumentReference(); + private static final DocumentReference SUPPLEMENT_2 = getTestDocumentReference(); + private static final DocumentReference SUPPLEMENT_3 = getTestDocumentReference(); + private static final DocumentReference SUPPLEMENT_4 = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_EVIDENCE_1 = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_EVIDENCE_2 = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_EVIDENCE_3 = getTestDocumentReference(); + private static final DocumentReference SUPPORTING_EVIDENCE_4 = getTestDocumentReference(); + private static final DocumentReference DRAFT_ORDER_1 = getTestDocumentReference(); + private static final DocumentReference DRAFT_ORDER_2 = getTestDocumentReference(); + + @Test + void shouldConvertBothC2AndOtherAdditionalApplications() { + AdditionalApplicationsBundle additionalApplicationsBundle = AdditionalApplicationsBundle.builder() + .c2DocumentBundle(C2DocumentBundle.builder() + .document(C2) + .supplementsBundle(wrapElements( + Supplement.builder().document(SUPPLEMENT_1).build(), + Supplement.builder().document(SUPPLEMENT_2).build() + )) + .supportingEvidenceBundle(wrapElements( + SupportingEvidenceBundle.builder().document(SUPPORTING_EVIDENCE_1).build(), + SupportingEvidenceBundle.builder().document(SUPPORTING_EVIDENCE_2).build())) + .draftOrdersBundle(wrapElements( + DraftOrder.builder().document(DRAFT_ORDER_1).build(), + DraftOrder.builder().document(DRAFT_ORDER_2).build())) + .build()) + .otherApplicationsBundle(OtherApplicationsBundle.builder() + .document(OTHER_APPLICATION) + .supplementsBundle(wrapElements( + Supplement.builder().document(SUPPLEMENT_3).build(), + Supplement.builder().document(SUPPLEMENT_4).build())) + .supportingEvidenceBundle(wrapElements( + SupportingEvidenceBundle.builder().document(SUPPORTING_EVIDENCE_3).build(), + SupportingEvidenceBundle.builder().document(SUPPORTING_EVIDENCE_4).build())) + .build()) + .build(); + + CaseData caseData = CaseData.builder() + .additionalApplicationsBundle(wrapElements(additionalApplicationsBundle)).build(); + + testAdditionalApplications(caseData, + List.of(C2, SUPPLEMENT_1, SUPPLEMENT_2, SUPPORTING_EVIDENCE_1, SUPPORTING_EVIDENCE_2, + DRAFT_ORDER_1, DRAFT_ORDER_2), + List.of( + OTHER_APPLICATION, SUPPLEMENT_3, SUPPLEMENT_4, SUPPORTING_EVIDENCE_3, SUPPORTING_EVIDENCE_4)); + } + + @Test + void shouldConvertAllAdditionalApplications() { + AdditionalApplicationsBundle additionalApplicationsBundle1 = AdditionalApplicationsBundle.builder() + .c2DocumentBundle(C2DocumentBundle.builder().document(C2).build()) + .otherApplicationsBundle(OtherApplicationsBundle.builder().document(OTHER_APPLICATION).build()) + .build(); + AdditionalApplicationsBundle additionalApplicationsBundle2 = AdditionalApplicationsBundle.builder() + .c2DocumentBundle(C2DocumentBundle.builder().document(C2_2).build()) + .otherApplicationsBundle(OtherApplicationsBundle.builder().document(OTHER_APPLICATION_2).build()) + .build(); + CaseData caseData = CaseData.builder() + .additionalApplicationsBundle(wrapElements( + additionalApplicationsBundle1, additionalApplicationsBundle2)) + .build(); + + testAdditionalApplications(caseData, + List.of(C2, C2_2), + List.of(OTHER_APPLICATION, OTHER_APPLICATION_2)); + } + + @Test + void shouldConvertConfidentialC2UploadedByChildSolicitorOnly() { + AdditionalApplicationsBundle c2ByChildSolicitor = AdditionalApplicationsBundle.builder() + .c2DocumentBundleConfidential(C2DocumentBundle.builder().document(C2).build()) + .c2DocumentBundleChild0(C2DocumentBundle.builder().document(C2).build()) + .build(); + AdditionalApplicationsBundle c2ByLa = AdditionalApplicationsBundle.builder() + .c2DocumentBundleConfidential(C2DocumentBundle.builder().document(C2_2).build()) + .c2DocumentBundleLA(C2DocumentBundle.builder().document(C2_2).build()) + .build(); + AdditionalApplicationsBundle c2ByRespondentSolicitor = AdditionalApplicationsBundle.builder() + .c2DocumentBundleConfidential(C2DocumentBundle.builder().document(C2_2).build()) + .c2DocumentBundleResp0(C2DocumentBundle.builder().document(C2_2).build()) + .build(); + testAdditionalApplications(CaseData.builder() + .additionalApplicationsBundle(wrapElements( + c2ByChildSolicitor, c2ByLa, c2ByRespondentSolicitor)).build(), + List.of(C2), List.of()); + } + + @Test + void shouldReturnEmptyListIfNoAdditionalApplication() { + testAdditionalApplications(CaseData.builder().build(), List.of(), List.of()); + testAdditionalApplications(CaseData.builder() + .additionalApplicationsBundle(wrapElements(AdditionalApplicationsBundle.builder().build())).build(), + List.of(), List.of()); + } + + private void testAdditionalApplications(CaseData caseData, List c2Docs, + List c1Docs) { + CafcassApiCaseData actual = testConvert(caseData); + List expectedDocs = new ArrayList<>(); + expectedDocs.addAll(getExpectedCafcassApiCaseDocuments(C2_APPLICATION_DOCUMENTS.getCategory(), + false, c2Docs)); + expectedDocs.addAll(getExpectedCafcassApiCaseDocuments(C1_APPLICATION_DOCUMENTS.getCategory(), + false, c1Docs)); + + assertThat(actual.getCaseDocuments()).containsOnlyOnceElementsOf(expectedDocs); + } + } + + @Nested + @DirtiesContext + class ManagedDocuments { + private static final DocumentReference NON_CONFIDENTIAL_DOC_1 = getTestDocumentReference(); + private static final DocumentReference NON_CONFIDENTIAL_DOC_2 = getTestDocumentReference(); + private static final DocumentReference CONFIDENTIAL_DOC_LA_1 = getTestDocumentReference(); + private static final DocumentReference CONFIDENTIAL_DOC_LA_2 = getTestDocumentReference(); + + private static final List> NON_CONFIDENTIAL_DOCS = List.of( + element(ManagedDocument.builder().document(NON_CONFIDENTIAL_DOC_1).build()), + element(ManagedDocument.builder().document(NON_CONFIDENTIAL_DOC_2).build())); + private static final List> CONFIDENTIAL_DOC_LA = List.of( + element(ManagedDocument.builder().document(CONFIDENTIAL_DOC_LA_1).build()), + element(ManagedDocument.builder().document(CONFIDENTIAL_DOC_LA_2).build())); + private static final List> CONFIDENTIAL_DOC_CTSC = List.of( + element(ManagedDocument.builder().document(getTestDocumentReference()).build()), + element(ManagedDocument.builder().document(getTestDocumentReference()).build())); + + @ParameterizedTest + @EnumSource(DocumentType.class) + void shouldConvertAllManagedDocuments(DocumentType documentType) { + Mockito.reset(manageDocumentService); + if (isNotEmpty(documentType.getBaseFieldNameResolver())) { + when( + manageDocumentService.toFieldNameToListOfElementMap(any(), eq(documentType), eq(NON_CONFIDENTIAL)) + ).thenReturn( + Map.of(documentType.getBaseFieldNameResolver().apply(NON_CONFIDENTIAL), NON_CONFIDENTIAL_DOCS) + ); + + when( + manageDocumentService.toFieldNameToListOfElementMap(any(), eq(documentType), eq(LA)) + ).thenReturn(Map.of(documentType.getBaseFieldNameResolver().apply(LA), CONFIDENTIAL_DOC_LA)); + + when( + manageDocumentService.toFieldNameToListOfElementMap(any(), eq(documentType), eq(CTSC)) + ).thenReturn(Map.of(documentType.getBaseFieldNameResolver().apply(CTSC), CONFIDENTIAL_DOC_CTSC)); + + testCaseDocument(CaseData.builder().build(), + List.of(NON_CONFIDENTIAL_DOC_1, NON_CONFIDENTIAL_DOC_2, CONFIDENTIAL_DOC_LA_1, + CONFIDENTIAL_DOC_LA_2), + documentType); + } else { + testCaseDocument(CaseData.builder().build(), List.of(), documentType); + } + Mockito.reset(manageDocumentService); + } + + @Test + void shouldReturnEmptyListIfNoDocumentFound() { + when(manageDocumentService.toFieldNameToListOfElementMap(any(), any(), any())).thenReturn(Map.of()); + testCaseDocument(CaseData.builder().build(), List.of(), ""); + + when(manageDocumentService.toFieldNameToListOfElementMap(any(), any(), any())) + .thenReturn(Map.of("", List.of())); + testCaseDocument(CaseData.builder().build(), List.of(), ""); + } + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseManagementLocationConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseManagementLocationConverterTest.java new file mode 100644 index 00000000000..63da832f3da --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiCaseManagementLocationConverterTest.java @@ -0,0 +1,37 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.ccd.model.CaseLocation; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseManagementLocation; + +public class CafcassApiCaseManagementLocationConverterTest extends CafcassApiConverterTestBase { + + CafcassApiCaseManagementLocationConverterTest() { + super(new CafcassApiCaseManagementLocationConverter()); + } + + @Test + void shouldConvertCaseManagementLocation() { + CaseData caseData = CaseData.builder() + .caseManagementLocation(CaseLocation.builder() + .region("region").baseLocation("baseLocation").build()) + .build(); + + testConvert(caseData, CafcassApiCaseData.builder() + .caseManagementLocation(CafcassApiCaseManagementLocation.builder() + .region("region").baseLocation("baseLocation").build()) + .build()); + } + + @Test + void shouldReturnEmptyObjectIfNullOrEmpty() { + CafcassApiCaseData expected = CafcassApiCaseData.builder() + .caseManagementLocation(CafcassApiCaseManagementLocation.builder().build()) + .build(); + + testConvert(CaseData.builder().caseManagementLocation(null).build(), expected); + testConvert(CaseData.builder().caseManagementLocation(CaseLocation.builder().build()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverterTest.java new file mode 100644 index 00000000000..2cfa9396a7c --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverterTest.java @@ -0,0 +1,104 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.ChildGender; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Child; +import uk.gov.hmcts.reform.fpl.model.ChildParty; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiChild; + +import java.time.LocalDate; +import java.util.List; + +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + +public class CafcassApiChildrenConverterTest extends CafcassApiConverterTestBase { + + CafcassApiChildrenConverterTest() { + super(new CafcassApiChildrenConverter()); + } + + @Test + void shouldConvertAllChildren() { + Child childWithAllFields = Child.builder() + .party(ChildParty.builder() + .firstName("Child") + .lastName("One") + .dateOfBirth(LocalDate.of(2024, 1, 1)) + .gender(ChildGender.BOY) + .genderIdentification("genderIdentification") + .livingSituation("livingSituation") + .livingSituationDetails("livingSituationDetails") + .address(getTestAddress()) + .careAndContactPlan("careAndContactPlan") + .detailsHidden(YesNo.YES.toString()) + .detailsHiddenReason("detailsHiddenReason") + .socialWorkerName("socialWorkerName") + .socialWorkerTelephoneNumber(getTestTelephone()) + .additionalNeeds(YesNo.YES.toString()) + .additionalNeedsDetails("additionalNeedsDetails") + .litigationIssues("litigationIssues") + .litigationIssuesDetails("litigationIssuesDetails") + .fathersResponsibility("fathersResponsibility") + .build()) + .solicitor(getTestRespondentSolicitor()) + .build(); + + Child childWithMandatoryFieldOnly = Child.builder() + .party(ChildParty.builder() + .firstName("Child") + .lastName("Two") + .dateOfBirth(LocalDate.of(2023, 1, 1)) + .gender(ChildGender.GIRL) + .build()) + .build(); + + Child emptyChild = Child.builder().build(); + + CaseData caseData = CaseData.builder() + .children1(wrapElements(childWithAllFields, childWithMandatoryFieldOnly, emptyChild)) + .build(); + + testConvert(caseData, CafcassApiCaseData.builder() + .children(List.of( + CafcassApiChild.builder() + .firstName("Child") + .lastName("One") + .dateOfBirth(LocalDate.of(2024, 1, 1)) + .gender(ChildGender.BOY.toString()) + .genderIdentification("genderIdentification") + .livingSituation("livingSituation") + .livingSituationDetails("livingSituationDetails") + .address(getExpectedAddress()) + .careAndContactPlan("careAndContactPlan") + .detailsHidden(true) + .socialWorkerName("socialWorkerName") + .socialWorkerTelephoneNumber(getExpectedTelephone()) + .additionalNeeds(true) + .additionalNeedsDetails("additionalNeedsDetails") + .litigationIssues("litigationIssues") + .litigationIssuesDetails("litigationIssuesDetails") + .fathersResponsibility("fathersResponsibility") + .solicitor(getExpectedSolicitor()) + .build(), + CafcassApiChild.builder() + .firstName("Child") + .lastName("Two") + .dateOfBirth(LocalDate.of(2023, 1, 1)) + .gender(ChildGender.GIRL.toString()) + .build(), + CafcassApiChild.builder().build() + )).build()); + } + + + @Test + void shouldReturnEmptyLis() { + CafcassApiCaseData expected = CafcassApiCaseData.builder().children(List.of()).build(); + + testConvert(CaseData.builder().children1(null).build(), expected); + testConvert(CaseData.builder().children1(List.of()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiConverterTestBase.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiConverterTestBase.java new file mode 100644 index 00000000000..08a6c198388 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiConverterTestBase.java @@ -0,0 +1,149 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import uk.gov.hmcts.reform.ccd.model.Organisation; +import uk.gov.hmcts.reform.fpl.enums.ColleagueRole; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.Address; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Colleague; +import uk.gov.hmcts.reform.fpl.model.RespondentSolicitor; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiAddress; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiColleague; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSolicitor; +import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; +import uk.gov.hmcts.reform.fpl.model.common.Telephone; +import uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper; + +import java.util.UUID; + +import static org.apache.commons.lang3.RandomStringUtils.randomAlphanumeric; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + +public abstract class CafcassApiConverterTestBase { + CafcassApiCaseDataConverter underTest; + + private CafcassApiConverterTestBase() { + } + + CafcassApiConverterTestBase(CafcassApiCaseDataConverter converterUnderTest) { + underTest = converterUnderTest; + } + + public CafcassApiCaseData testConvert(CaseData caseData, CafcassApiCaseData expected) { + CafcassApiCaseData actual = underTest.convert(caseData, CafcassApiCaseData.builder()).build(); + assertEquals(actual, expected); + return actual; + } + + public CafcassApiCaseData testConvert(CaseData caseData) { + return underTest.convert(caseData, CafcassApiCaseData.builder()).build(); + } + + public static Address getTestAddress() { + return getTestAddress("address line 1"); + } + + public static Address getTestAddress(String line1) { + return Address.builder().addressLine1(line1).build(); + } + + public static CafcassApiAddress getExpectedAddress() { + return getExpectedAddress("address line 1"); + } + + public static CafcassApiAddress getExpectedAddress(String line1) { + return CafcassApiHelper.getCafcassApiAddress(getTestAddress(line1)); + } + + public static Colleague getTestColleague() { + return getTestColleague(1); + } + + public static Colleague getTestColleague(int colleagueNo) { + return Colleague.builder() + .role(ColleagueRole.SOLICITOR) + .title("Colleague" + colleagueNo + "'s title'") + .email("colleague@test.com") + .fullName("Colleague " + colleagueNo) + .mainContact(YesNo.YES.getValue()) + .notificationRecipient(YesNo.YES.getValue()) + .build(); + } + + public static CafcassApiColleague getExpectedColleague() { + return getExpectedColleague(1); + } + + public static CafcassApiColleague getExpectedColleague(int colleagueNo) { + return CafcassApiColleague.builder() + .role(ColleagueRole.SOLICITOR.toString()) + .title("Colleague" + colleagueNo + "'s title'") + .email("colleague@test.com") + .fullName("Colleague " + colleagueNo) + .mainContact(true) + .notificationRecipient(true) + .build(); + } + + public static Telephone getTestTelephone() { + return Telephone.builder() + .telephoneNumber("0123456789") + .contactDirection("contactDirection") + .telephoneUsageType("telephoneUsageType") + .build(); + } + + public static String getExpectedTelephone() { + return "0123456789"; + } + + public static Organisation getTestOrganisation() { + return Organisation.builder() + .organisationID("ORGID") + .organisationName("organisationName") + .build(); + } + + public static RespondentSolicitor getTestRespondentSolicitor() { + return getTestRespondentSolicitor(1); + } + + public static RespondentSolicitor getTestRespondentSolicitor(int solicitorNo) { + return RespondentSolicitor.builder() + .firstName("Solicitor" + solicitorNo + "FirstName") + .lastName("Solicitor" + solicitorNo + "LastName") + .email("respondentSolicitor" + solicitorNo + "@test.com") + .telephoneNumber(getTestTelephone()) + .regionalOfficeAddress(getTestAddress("Solicitor " + solicitorNo + "'s address")) + .organisation(getTestOrganisation()) + .colleaguesToBeNotified(wrapElements(getTestColleague(1), + getTestColleague(2))) + .build(); + } + + public static CafcassApiSolicitor getExpectedSolicitor() { + return getExpectedSolicitor(1); + } + + public static CafcassApiSolicitor getExpectedSolicitor(int solicitorNo) { + Organisation testOrg = getTestOrganisation(); + return CafcassApiSolicitor.builder() + .firstName("Solicitor" + solicitorNo + "FirstName") + .lastName("Solicitor" + solicitorNo + "LastName") + .email("respondentSolicitor" + solicitorNo + "@test.com") + .organisationId(testOrg.getOrganisationID()) + .organisationName(testOrg.getOrganisationName()) + .build(); + } + + public static DocumentReference getTestDocumentReference() { + UUID docId = UUID.randomUUID(); + return DocumentReference.builder() + .filename(randomAlphanumeric(10)) + .url("test.link/" + docId) + .binaryUrl("test.link/" + docId + "/binary") + .build(); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiFactorsParentingConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiFactorsParentingConverterTest.java new file mode 100644 index 00000000000..43f4ce668f2 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiFactorsParentingConverterTest.java @@ -0,0 +1,48 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.FactorsParenting; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiFactorsParenting; + +public class CafcassApiFactorsParentingConverterTest extends CafcassApiConverterTestBase { + CafcassApiFactorsParentingConverterTest() { + super(new CafcassApiFactorsParentingConverter()); + } + + @Test + void shouldConvertFactorsParenting() { + CaseData caseData = CaseData.builder() + .factorsParenting(FactorsParenting.builder() + .alcoholDrugAbuse(YesNo.YES.getValue()) + .alcoholDrugAbuseReason("alcoholDrugAbuseReason") + .domesticViolence(YesNo.YES.getValue()) + .domesticViolenceReason("domesticViolenceReason") + .anythingElse(YesNo.YES.getValue()) + .anythingElseReason("anythingElseReason") + .build()) + .build(); + + testConvert(caseData, CafcassApiCaseData.builder() + .factorsParenting(CafcassApiFactorsParenting.builder() + .alcoholDrugAbuse(true) + .alcoholDrugAbuseReason("alcoholDrugAbuseReason") + .domesticViolence(true) + .domesticViolenceReason("domesticViolenceReason") + .anythingElse(true) + .anythingElseReason("anythingElseReason") + .build()) + .build()); + } + + @Test + void shouldReturnEmptyIfNullOrEmpty() { + CafcassApiCaseData expected = CafcassApiCaseData.builder() + .factorsParenting(CafcassApiFactorsParenting.builder().build()) + .build(); + testConvert(CaseData.builder().factorsParenting(null).build(), expected); + testConvert(CaseData.builder().factorsParenting(FactorsParenting.builder().build()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiHearingDetailsConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiHearingDetailsConverterTest.java new file mode 100644 index 00000000000..88b3da3dd1c --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiHearingDetailsConverterTest.java @@ -0,0 +1,92 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.HearingStatus; +import uk.gov.hmcts.reform.fpl.enums.HearingType; +import uk.gov.hmcts.reform.fpl.enums.hearing.HearingAttendance; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.HearingBooking; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiHearing; +import uk.gov.hmcts.reform.fpl.model.common.Element; + +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.List; + +import static uk.gov.hmcts.reform.fpl.service.ManageHearingsService.DEFAULT_PRE_ATTENDANCE; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.element; + +public class CafcassApiHearingDetailsConverterTest extends CafcassApiConverterTestBase { + CafcassApiHearingDetailsConverterTest() { + super(new CafcassApiHearingDetailsConverter()); + } + + @Test + void shouldConvertHearingDetails() { + HearingBooking vacatedHearing = HearingBooking.builder() + .type(HearingType.OTHER) + .typeDetails("typeDetails") + .venue("venue") + .status(HearingStatus.VACATED) + .startDate(LocalDateTime.of(2024, 1, 1, 10, 0, 0)) + .endDate(LocalDateTime.of(2024, 1, 1, 15, 0, 0)) + .attendance(Arrays.asList(HearingAttendance.values())) + .cancellationReason("cancellationReason") + .preAttendanceDetails("preAttendanceDetails") + .attendanceDetails("attendanceDetails") + .build(); + Element vacatedHearingElement = element(vacatedHearing); + + HearingBooking caseManagementHearing = HearingBooking.builder() + .type(HearingType.CASE_MANAGEMENT) + .venue("venue") + .startDate(LocalDateTime.of(2024, 1, 1, 10, 0, 0)) + .endDate(LocalDateTime.of(2024, 1, 1, 15, 0, 0)) + .attendance(Arrays.asList(HearingAttendance.values())) + .build(); + Element caseManagementHearingElement = element(caseManagementHearing); + + CaseData caseData = CaseData.builder() + .hearingDetails(List.of(vacatedHearingElement, caseManagementHearingElement)) + .build(); + + CafcassApiHearing expectedVacatedHearing = CafcassApiHearing.builder() + .id(vacatedHearingElement.getId().toString()) + .type(HearingType.OTHER) + .typeDetails("typeDetails") + .venue("venue") + .status(HearingStatus.VACATED) + .startDate(LocalDateTime.of(2024, 1, 1, 10, 0, 0)) + .endDate(LocalDateTime.of(2024, 1, 1, 15, 0, 0)) + .attendance(Arrays.asList(HearingAttendance.values())) + .cancellationReason("cancellationReason") + .preAttendanceDetails("preAttendanceDetails") + .attendanceDetails("attendanceDetails") + .build(); + + CafcassApiHearing expectedCaseManagementHearing = CafcassApiHearing.builder() + .id(caseManagementHearingElement.getId().toString()) + .type(HearingType.CASE_MANAGEMENT) + .venue("venue") + .startDate(LocalDateTime.of(2024, 1, 1, 10, 0, 0)) + .endDate(LocalDateTime.of(2024, 1, 1, 15, 0, 0)) + .preAttendanceDetails(DEFAULT_PRE_ATTENDANCE) + .attendance(Arrays.asList(HearingAttendance.values())) + .build(); + + CafcassApiCaseData expected = CafcassApiCaseData.builder() + .hearingDetails(List.of(expectedVacatedHearing, expectedCaseManagementHearing)) + .build(); + + testConvert(caseData, expected); + } + + @Test + void shouldReturnEmptyListIfNullOrEmpty() { + CafcassApiCaseData expected = CafcassApiCaseData.builder().hearingDetails(List.of()).build(); + + testConvert(CaseData.builder().hearingDetails(null).build(), expected); + testConvert(CaseData.builder().hearingDetails(List.of()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiInternationalElementConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiInternationalElementConverterTest.java new file mode 100644 index 00000000000..1c7ed110e34 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiInternationalElementConverterTest.java @@ -0,0 +1,59 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.InternationalElement; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiInternationalElement; + +public class CafcassApiInternationalElementConverterTest extends CafcassApiConverterTestBase { + CafcassApiInternationalElementConverterTest() { + super(new CafcassApiInternationalElementConverter()); + } + + @Test + void shouldConvertInternationalElement() { + CaseData caseData = CaseData.builder() + .internationalElement(InternationalElement.builder() + .possibleCarer(YesNo.YES.getValue()) + .possibleCarerReason("possibleCarerReason") + .significantEvents(YesNo.YES.getValue()) + .significantEventsReason("significantEventsReason") + .issues(YesNo.YES.getValue()) + .issuesReason("issuesReason") + .proceedings(YesNo.YES.getValue()) + .proceedingsReason("proceedingsReason") + .internationalAuthorityInvolvement(YesNo.YES.getValue()) + .internationalAuthorityInvolvementDetails("internationalAuthorityInvolvementDetails") + .build()) + .build(); + + CafcassApiCaseData expected = CafcassApiCaseData.builder() + .internationalElement(CafcassApiInternationalElement.builder() + .possibleCarer(true) + .possibleCarerReason("possibleCarerReason") + .significantEvents(true) + .significantEventsReason("significantEventsReason") + .issues(true) + .issuesReason("issuesReason") + .proceedings(true) + .proceedingsReason("proceedingsReason") + .internationalAuthorityInvolvement(true) + .internationalAuthorityInvolvementDetails("internationalAuthorityInvolvementDetails") + .build()) + .build(); + + testConvert(caseData, expected); + } + + @Test + void shouldReturnEmptyObjectIfNull() { + CafcassApiCaseData expected = CafcassApiCaseData.builder() + .internationalElement(CafcassApiInternationalElement.builder().build()) + .build(); + + testConvert(CaseData.builder().internationalElement(null).build(), expected); + testConvert(CaseData.builder().internationalElement(InternationalElement.builder().build()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiMetaDataConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiMetaDataConverterTest.java new file mode 100644 index 00000000000..e83923885f2 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiMetaDataConverterTest.java @@ -0,0 +1,73 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Orders; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; + +import java.time.LocalDate; +import java.util.List; + +import static uk.gov.hmcts.reform.fpl.enums.OrderType.CARE_ORDER; +import static uk.gov.hmcts.reform.fpl.enums.OrderType.CONTACT_WITH_CHILD_IN_CARE; + +public class CafcassApiMetaDataConverterTest extends CafcassApiConverterTestBase { + CafcassApiMetaDataConverterTest() { + super(new CafcassApiMetaDataConverter()); + } + + @Test + void shouldConvertC1MetaData() { + CaseData caseData = CaseData.builder() + .familyManCaseNumber("familyManCaseNumber") + .dateSubmitted(LocalDate.of(2024, 1, 1)) + .orders(Orders.builder() + .orderType(List.of(CONTACT_WITH_CHILD_IN_CARE)) + .build()) + .dateOfIssue(LocalDate.of(2024, 2, 1)) + .isLocalAuthority(YesNo.NO) + .relatingLA("LA1") + .build(); + + CafcassApiCaseData expected = CafcassApiCaseData.builder() + .familyManCaseNumber("familyManCaseNumber") + .dateSubmitted(LocalDate.of(2024, 1, 1)) + .applicationType("C1") + .ordersSought(List.of(CONTACT_WITH_CHILD_IN_CARE)) + .dateOfCourtIssue(LocalDate.of(2024, 2, 1)) + .citizenIsApplicant(true) + .applicantLA(null) + .respondentLA("LA1") + .build(); + + testConvert(caseData, expected); + } + + @Test + void shouldConvertC110aMetaData() { + CaseData caseData = CaseData.builder() + .familyManCaseNumber("familyManCaseNumber") + .dateSubmitted(LocalDate.of(2024, 1, 1)) + .orders(Orders.builder() + .orderType(List.of(CARE_ORDER)) + .build()) + .dateOfIssue(LocalDate.of(2024, 2, 1)) + .isLocalAuthority(YesNo.YES) + .caseLocalAuthority("LA1") + .build(); + + CafcassApiCaseData expected = CafcassApiCaseData.builder() + .familyManCaseNumber("familyManCaseNumber") + .dateSubmitted(LocalDate.of(2024, 1, 1)) + .applicationType("C110A") + .ordersSought(List.of(CARE_ORDER)) + .dateOfCourtIssue(LocalDate.of(2024, 2, 1)) + .citizenIsApplicant(false) + .applicantLA("LA1") + .respondentLA(null) + .build(); + + testConvert(caseData, expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverterTest.java new file mode 100644 index 00000000000..d0d378c31bb --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverterTest.java @@ -0,0 +1,97 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Other; +import uk.gov.hmcts.reform.fpl.model.Others; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiOther; +import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.model.robotics.Gender; + +import java.util.List; + +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.element; + +public class CafcassApiOthersConverterTest extends CafcassApiConverterTestBase { + CafcassApiOthersConverterTest() { + super(new CafcassApiOthersConverter()); + } + + @Test + void shouldConvertOthers() { + Other firstOthers = Other.builder() + .name("First Other") + .dateOfBirth("2000-01-01") + .gender(Gender.OTHER.toString()) + .genderIdentification("genderIdentification") + .birthPlace("birthPlace") + .addressKnow(YesNo.YES.getValue()) + .address(getTestAddress()) + .telephone(getTestTelephone().getTelephoneNumber()) + .litigationIssues("litigationIssues") + .litigationIssuesDetails("litigationIssuesDetails") + .detailsHidden(YesNo.YES.toString()) + .detailsHiddenReason("detailsHiddenReason") + .build(); + + Other secondOther = Other.builder() + .name("Second Other") + .dateOfBirth("2000-01-01") + .gender(Gender.MALE.toString()) + .birthPlace("birthPlace") + .addressKnow(YesNo.NO.getValue()) + .addressNotKnowReason("addressNotKnowReason") + .detailsHidden(YesNo.NO.toString()) + .build(); + Element secondOtherElement = element(secondOther); + + Other emptyOther = Other.builder().build(); + Element emptyOtherElement = element(emptyOther); + + CaseData caseData = CaseData.builder() + .others(Others.builder() + .firstOther(firstOthers) + .additionalOthers(List.of(secondOtherElement, emptyOtherElement)) + .build()) + .build(); + + List expectedOthers = List.of( + CafcassApiOther.builder() + .name("First Other") + .dateOfBirth("2000-01-01") + .gender(Gender.OTHER.toString()) + .genderIdentification("genderIdentification") + .birthPlace("birthPlace") + .addressKnown(true) + .address(getExpectedAddress()) + .telephone(getExpectedTelephone()) + .litigationIssues("litigationIssues") + .litigationIssuesDetails("litigationIssuesDetails") + .detailsHidden(true) + .detailsHiddenReason("detailsHiddenReason") + .build(), + CafcassApiOther.builder() + .name("Second Other") + .dateOfBirth("2000-01-01") + .gender(Gender.MALE.toString()) + .birthPlace("birthPlace") + .addressKnown(false) + .addressUnknownReason("addressNotKnowReason") + .detailsHidden(false) + .build(), + CafcassApiOther.builder().build() + ); + + testConvert(caseData, CafcassApiCaseData.builder().others(expectedOthers).build()); + } + + @Test + void shouldReturnEmptyListIfNullOrEmpty() { + CafcassApiCaseData expected = CafcassApiCaseData.builder().others(List.of()).build(); + + testConvert(CaseData.builder().others(null).build(), expected); + testConvert(CaseData.builder().others(Others.builder().build()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiPreviousProceedingsConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiPreviousProceedingsConverterTest.java new file mode 100644 index 00000000000..d9ef7218b0a --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiPreviousProceedingsConverterTest.java @@ -0,0 +1,76 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Proceeding; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiProceeding; + +import java.util.List; + +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + +public class CafcassApiPreviousProceedingsConverterTest extends CafcassApiConverterTestBase { + CafcassApiPreviousProceedingsConverterTest() { + super(new CafcassApiPreviousProceedingsConverter()); + } + + @Test + void shouldConvertPreviousProceedings() { + Proceeding additionalProceeding = Proceeding.builder() + .proceedingStatus("Previous") + .caseNumber("123") + .sameGuardianNeeded(YesNo.NO.toString()) + .build(); + Proceeding additionalEmptyProceeding = Proceeding.builder().build(); + + Proceeding proceeding = Proceeding.builder() + .proceedingStatus("Ongoing") + .caseNumber("1234567898765432") + .started("2023-05-24") + .ended("2023-05-24") + .ordersMade("C20, C8, etc.") + .judge("District Judge Martin Brown") + .children("Joe Bloggs, Jane Bloggs") + .guardian("John Smith") + .sameGuardianNeeded(YesNo.YES.toString()) + .sameGuardianDetails("Do not need the same guardian for x and y reasons.") + .additionalProceedings(wrapElements(additionalProceeding, additionalEmptyProceeding)) + .build(); + + + CaseData caseData = CaseData.builder() + .proceeding(proceeding) + .build(); + + List expectedList = List.of( + CafcassApiProceeding.builder() + .proceedingStatus("Ongoing") + .caseNumber("1234567898765432") + .started("2023-05-24") + .ended("2023-05-24") + .ordersMade("C20, C8, etc.") + .judge("District Judge Martin Brown") + .children("Joe Bloggs, Jane Bloggs") + .guardian("John Smith") + .sameGuardianNeeded(true) + .sameGuardianDetails("Do not need the same guardian for x and y reasons.") + .build(), + CafcassApiProceeding.builder() + .proceedingStatus("Previous") + .caseNumber("123") + .sameGuardianNeeded(false) + .build(), + CafcassApiProceeding.builder().build() + ); + + testConvert(caseData, CafcassApiCaseData.builder().previousProceedings(expectedList).build()); + } + + @Test + void shouldReturnEmptyListIfNull() { + CafcassApiCaseData expected = CafcassApiCaseData.builder().previousProceedings(List.of()).build(); + testConvert(CaseData.builder().proceeding(null).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java new file mode 100644 index 00000000000..b8c0f6fc965 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java @@ -0,0 +1,96 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Respondent; +import uk.gov.hmcts.reform.fpl.model.RespondentParty; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiRespondent; +import uk.gov.hmcts.reform.fpl.model.robotics.Gender; + +import java.time.LocalDate; +import java.util.List; + +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + +public class CafcassApiRespondentsConverterTest extends CafcassApiConverterTestBase { + CafcassApiRespondentsConverterTest() { + super(new CafcassApiRespondentsConverter()); + } + + @Test + void shouldConvertAllRespondents() { + Respondent respondentWithAddressHidden = Respondent.builder() + .solicitor(getTestRespondentSolicitor()) + .party(RespondentParty.builder() + .firstName("Respondent1") + .lastName("LastName") + .gender(Gender.MALE.toString()) + .addressKnow(YesNo.YES.toString()) + .address(getTestAddress()) + .dateOfBirth(LocalDate.of(2000, 1, 1)) + .telephoneNumber(getTestTelephone()) + .litigationIssues("litigationIssues") + .litigationIssuesDetails("litigationIssuesDetails") + .contactDetailsHidden(YesNo.YES.toString()) + .contactDetailsHiddenReason("contactDetailsHiddenReason") + .relationshipToChild("relationshipToChild") + .build()) + .build(); + + Respondent respondentWithMandatoryFieldOnly = Respondent.builder() + .party(RespondentParty.builder() + .firstName("Respondent2") + .lastName("LastName") + .gender(Gender.MALE.toString()) + .addressKnow(YesNo.NO.toString()) + .addressNotKnowReason("addressUnknownReason") + .relationshipToChild("relationshipToChild") + .build()) + .build(); + + Respondent emptyRespondent = Respondent.builder().build(); + + CaseData caseData = CaseData.builder() + .respondents1(wrapElements(respondentWithAddressHidden, respondentWithMandatoryFieldOnly, emptyRespondent)) + .build(); + + List expectedList = List.of( + CafcassApiRespondent.builder() + .firstName("Respondent1") + .lastName("LastName") + .gender(Gender.MALE.toString()) + .addressKnown(true) + .address(getExpectedAddress()) + .dateOfBirth(LocalDate.of(2000, 1, 1)) + .telephoneNumber(getExpectedTelephone()) + .litigationIssues("litigationIssues") + .litigationIssuesDetails("litigationIssuesDetails") + .contactDetailsHidden(true) + .contactDetailsHiddenReason("contactDetailsHiddenReason") + .relationshipToChild("relationshipToChild") + .solicitor(getExpectedSolicitor()) + .build(), + CafcassApiRespondent.builder() + .firstName("Respondent2") + .lastName("LastName") + .gender(Gender.MALE.toString()) + .addressKnown(false) + .addressUnknownReason("addressUnknownReason") + .relationshipToChild("relationshipToChild") + .build(), + CafcassApiRespondent.builder().build() + ); + + testConvert(caseData, CafcassApiCaseData.builder().respondents(expectedList).build()); + } + + @Test + void shouldReturnEmptyListIfNullOrEmpty() { + CafcassApiCaseData expected = CafcassApiCaseData.builder().respondents(List.of()).build(); + + testConvert(CaseData.builder().respondents1(null).build(), expected); + testConvert(CaseData.builder().respondents1(List.of()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRisksConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRisksConverterTest.java new file mode 100644 index 00000000000..80b6c3e0cea --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRisksConverterTest.java @@ -0,0 +1,49 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.enums.YesNo; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Risks; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiRisk; + +import java.util.List; + +public class CafcassApiRisksConverterTest extends CafcassApiConverterTestBase { + CafcassApiRisksConverterTest() { + super(new CafcassApiRisksConverter()); + } + + @Test + void shouldConvertRisk() { + CaseData caseData = CaseData.builder() + .risks(Risks.builder() + .neglect(YesNo.YES.toString()) + .neglectOccurrences(List.of("Future risk of harm")) + .sexualAbuse(YesNo.YES.toString()) + .sexualAbuseOccurrences(List.of("Past harm")) + .physicalHarm(YesNo.YES.toString()) + .physicalHarmOccurrences(List.of("Future risk of harm", "Past harm")) + .emotionalHarm(YesNo.YES.toString()) + .emotionalHarmOccurrences(List.of("Future risk of harm", "Past harm")) + .build()) + .build(); + + testConvert(caseData, CafcassApiCaseData.builder() + .risks(CafcassApiRisk.builder() + .neglectOccurrences(List.of("Future risk of harm")) + .sexualAbuseOccurrences(List.of("Past harm")) + .physicalHarmOccurrences(List.of("Future risk of harm", "Past harm")) + .emotionalHarmOccurrences(List.of("Future risk of harm", "Past harm")) + .build()) + .build()); + } + + @Test + void shouldReturnEmptyObjectIfNullOrEmpty() { + CafcassApiCaseData expected = CafcassApiCaseData.builder().risks(CafcassApiRisk.builder().build()).build(); + + testConvert(CaseData.builder().risks(null).build(), expected); + testConvert(CaseData.builder().risks(Risks.builder().build()).build(), expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseServiceTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseServiceTest.java new file mode 100644 index 00000000000..24362ca5d52 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseServiceTest.java @@ -0,0 +1,123 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; +import uk.gov.hmcts.reform.fpl.CaseDefinitionConstants; +import uk.gov.hmcts.reform.fpl.enums.State; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCase; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; +import uk.gov.hmcts.reform.fpl.service.CaseConverter; +import uk.gov.hmcts.reform.fpl.service.search.SearchService; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.RangeQuery; + +import java.time.LocalDateTime; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class CafcassApiSearchCaseServiceTest { + private static final LocalDateTime SEARCH_END_DATE = LocalDateTime.now(); + private static final LocalDateTime SEARCH_START_DATE = SEARCH_END_DATE.minusDays(1); + private static final RangeQuery SEARCH_RANGE = RangeQuery.builder().field("last_modified") + .greaterThanOrEqual(SEARCH_START_DATE).lessThanOrEqual(SEARCH_END_DATE).build(); + + private static final CaseData MOCK_CASE_DATA_1 = mock(CaseData.class); + private static final CaseDetails MOCK_CASE_DETAILS_1 = CaseDetails.builder() + .id(1L) + .jurisdiction(CaseDefinitionConstants.JURISDICTION) + .state(State.CASE_MANAGEMENT.getValue()) + .caseTypeId(CaseDefinitionConstants.CASE_TYPE) + .createdDate(LocalDateTime.MIN) + .lastModified(LocalDateTime.now().minusHours(1)) + .build(); + private static final CaseData MOCK_CASE_DATA_2 = mock(CaseData.class); + private static final CaseDetails MOCK_CASE_DETAILS_2 = MOCK_CASE_DETAILS_1.toBuilder().id(2L).build(); + + private static final CafcassApiCaseData MOCK_CONVERTED_CAFCASSAPICASEDATA = mock(CafcassApiCaseData.class); + + @Mock + private CaseConverter caseConverter; + @Mock + private SearchService searchService; + @Mock + private CafcassApiCaseDataConverter cafcassApiCaseDataConverter1; + @Mock + private CafcassApiCaseDataConverter cafcassApiCaseDataConverter2; + @Mock + private CafcassApiCaseDataConverter cafcassApiCaseDataConverter3; + + private CafcassApiSearchCaseService underTest; + + @BeforeEach + void setUpWithMockConverters() { + underTest = new CafcassApiSearchCaseService(caseConverter, searchService, + List.of(cafcassApiCaseDataConverter1, cafcassApiCaseDataConverter2, cafcassApiCaseDataConverter3)); + } + + @Test + void shouldReturnSearchResultAndBuildCafcassApiCaseByInvokingAllConverter() { + final CafcassApiCaseData.CafcassApiCaseDataBuilder mockBuilder = + mock(CafcassApiCaseData.CafcassApiCaseDataBuilder.class); + when(mockBuilder.build()).thenReturn(MOCK_CONVERTED_CAFCASSAPICASEDATA); + when(cafcassApiCaseDataConverter1.convert(any(), any())).thenReturn(mockBuilder); + when(cafcassApiCaseDataConverter2.convert(any(), any())).thenReturn(mockBuilder); + when(cafcassApiCaseDataConverter3.convert(any(), any())).thenReturn(mockBuilder); + + final List caseDetails = List.of(MOCK_CASE_DETAILS_1, MOCK_CASE_DETAILS_2); + when(searchService.search(eq(SEARCH_RANGE), anyInt(), anyInt())).thenReturn(caseDetails); + when(caseConverter.convert(MOCK_CASE_DETAILS_1)).thenReturn(MOCK_CASE_DATA_1); + when(caseConverter.convert(MOCK_CASE_DETAILS_2)).thenReturn(MOCK_CASE_DATA_2); + + + CafcassApiCase expectedCafcassApiCase1 = CafcassApiCase.builder() + .caseId(1L) + .jurisdiction(CaseDefinitionConstants.JURISDICTION) + .state(State.CASE_MANAGEMENT.getValue()) + .caseTypeId(CaseDefinitionConstants.CASE_TYPE) + .createdDate(MOCK_CASE_DETAILS_1.getCreatedDate()) + .lastModified(MOCK_CASE_DETAILS_1.getLastModified()) + .caseData(MOCK_CONVERTED_CAFCASSAPICASEDATA) + .build(); + CafcassApiCase expectedCafcassApiCase2 = expectedCafcassApiCase1.toBuilder() + .caseId(2L) + .caseData(MOCK_CONVERTED_CAFCASSAPICASEDATA) + .build(); + + List actual = underTest.searchCaseByDateRange(SEARCH_START_DATE, SEARCH_END_DATE); + List expected = List.of(expectedCafcassApiCase1, expectedCafcassApiCase2); + + assertEquals(expected, actual); + + // verify calling all converters to build CafcassApiCaseData + verify(cafcassApiCaseDataConverter1).convert(eq(MOCK_CASE_DATA_1), any()); + verify(cafcassApiCaseDataConverter2).convert(eq(MOCK_CASE_DATA_1), any()); + verify(cafcassApiCaseDataConverter3).convert(eq(MOCK_CASE_DATA_1), any()); + verify(cafcassApiCaseDataConverter1).convert(eq(MOCK_CASE_DATA_2), any()); + verify(cafcassApiCaseDataConverter2).convert(eq(MOCK_CASE_DATA_2), any()); + verify(cafcassApiCaseDataConverter3).convert(eq(MOCK_CASE_DATA_2), any()); + verifyNoMoreInteractions(cafcassApiCaseDataConverter1); + verifyNoMoreInteractions(cafcassApiCaseDataConverter2); + verifyNoMoreInteractions(cafcassApiCaseDataConverter3); + } + + @Test + void shouldReturnEmptyListIfNoCaseFound() { + when(searchService.search(eq(SEARCH_RANGE), anyInt(), anyInt())).thenReturn(List.of()); + List actual = underTest.searchCaseByDateRange(SEARCH_START_DATE, SEARCH_END_DATE); + + assertEquals(List.of(), actual); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/AmendOrderToDownloadPrePopulatorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/AmendOrderToDownloadPrePopulatorTest.java index 2f37ef58b3a..acf7d4d71d1 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/AmendOrderToDownloadPrePopulatorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/AmendOrderToDownloadPrePopulatorTest.java @@ -129,7 +129,7 @@ void getSelectedOrderForOrder() { .build(); when(amendedOrderList.getValueCodeAsUUID()).thenReturn(ORDER_ID); - when(order.getDocument()).thenReturn(orderDocument); + when(order.getDocumentOrDocumentConfidential()).thenReturn(orderDocument); assertThat(underTest.prePopulate(caseData)).isEqualTo(Map.of("manageOrdersOrderToAmend", orderDocument)); } diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelperTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelperTest.java new file mode 100644 index 00000000000..0a6523a6634 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelperTest.java @@ -0,0 +1,82 @@ +package uk.gov.hmcts.reform.fpl.utils; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.ccd.model.Organisation; +import uk.gov.hmcts.reform.fpl.model.Address; +import uk.gov.hmcts.reform.fpl.model.RespondentSolicitor; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiAddress; +import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSolicitor; +import uk.gov.hmcts.reform.fpl.model.common.Telephone; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class CafcassApiHelperTest { + @Test + public void testGetCafcassApiAddress() { + Address address = Address.builder() + .addressLine1("Address Line 1") + .addressLine2("Address Line 2") + .addressLine3("Address Line 3") + .postTown("Post Town") + .county("County") + .postcode("A123 B123") + .country("UK") + .build(); + + CafcassApiAddress expected = CafcassApiAddress.builder() + .addressLine1(address.getAddressLine1()) + .addressLine2(address.getAddressLine2()) + .addressLine3(address.getAddressLine3()) + .postTown(address.getPostTown()) + .county(address.getCounty()) + .postcode(address.getPostcode()) + .country(address.getCountry()) + .build(); + + CafcassApiAddress actual = CafcassApiHelper.getCafcassApiAddress(address); + assertEquals(expected, actual); + assertNull(CafcassApiHelper.getCafcassApiAddress(null)); + } + + @Test + public void testIsYes() { + assertTrue(CafcassApiHelper.isYes("yes")); + assertFalse(CafcassApiHelper.isYes("no")); + assertFalse(CafcassApiHelper.isYes(null)); + assertFalse(CafcassApiHelper.isYes("")); + } + + @Test + public void testGetTelephoneNumber() { + Telephone telephone = TestDataHelper.testTelephone(); + assertEquals(telephone.getTelephoneNumber(), CafcassApiHelper.getTelephoneNumber(telephone)); + assertNull(CafcassApiHelper.getTelephoneNumber(null)); + } + + @Test + public void testGetCafcassApiSolicitor() { + RespondentSolicitor solicitor = RespondentSolicitor.builder() + .email("solicitor@test.com") + .firstName("SolicitorFirstName") + .lastName("SolicitorLastName") + .organisation(Organisation.builder() + .organisationID("organisation ID") + .organisationName("organisation name") + .build()) + .build(); + + CafcassApiSolicitor expected = CafcassApiSolicitor.builder() + .email(solicitor.getEmail()) + .firstName(solicitor.getFirstName()) + .lastName(solicitor.getLastName()) + .organisationId(solicitor.getOrganisation().getOrganisationID()) + .organisationName(solicitor.getOrganisation().getOrganisationName()) + .build(); + + assertEquals(expected, CafcassApiHelper.getCafcassApiSolicitor(solicitor)); + assertNull(CafcassApiHelper.getCafcassApiSolicitor(null)); + } +} From 90b65d1d097f6adb39dfd119a46ab5b2dabbc4f0 Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Thu, 1 Aug 2024 11:09:26 +0100 Subject: [PATCH 03/15] update CAFCASS_SYSTEM_UPDATE value (#5523) --- .../src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java index d93fc104bc8..4da3be2e3b7 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/UserRole.java @@ -8,7 +8,7 @@ public enum UserRole { LOCAL_AUTHORITY("caseworker-publiclaw-solicitor"), HMCTS_ADMIN("caseworker-publiclaw-courtadmin"), CAFCASS("caseworker-publiclaw-cafcass"), - CAFCASS_SYSTEM_UPDATE("caseworker-publiclaw-cafcass"), // TODO set up new system-update role + CAFCASS_SYSTEM_UPDATE("caseworker-publiclaw-cafcasssystemupdate"), GATEKEEPER("caseworker-publiclaw-gatekeeper"), JUDICIARY("caseworker-publiclaw-judiciary"), HMCTS_SUPERUSER("caseworker-publiclaw-superuser"); From cdbcbe7cfa68a6a5e9933d1b8b8c0d2081da6b80 Mon Sep 17 00:00:00 2001 From: "Chak Shing, Lo" Date: Thu, 1 Aug 2024 11:58:32 +0100 Subject: [PATCH 04/15] fix code style --- .../hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java index c89a623f014..f563f4e634b 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/interceptors/CafcassApiInterceptor.java @@ -10,6 +10,7 @@ import uk.gov.hmcts.reform.idam.client.IdamClient; import uk.gov.hmcts.reform.idam.client.models.UserInfo; +import java.util.Objects; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -26,7 +27,7 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons Object handler) throws Exception { String authToken = request.getHeader("Authorization"); if (isNotEmpty(authToken)) { - UserInfo userInfo = idamClient.getIfAvailable().getUserInfo(authToken); + UserInfo userInfo = Objects.requireNonNull(idamClient.getIfAvailable()).getUserInfo(authToken); if (userInfo != null && userInfo.getRoles().contains(CAFCASS_SYSTEM_UPDATE.getRoleName())) { return true; } From 50e3c3ff632946e9497167e2b958d6dcf3029e24 Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Fri, 2 Aug 2024 15:37:47 +0100 Subject: [PATCH 05/15] Dfpl 1761 ES query fix (#5524) * update es search query * fix and update test * query close case as well * Update CafcassApiSearchCaseServiceTest.java --- .../api/CafcassApiSearchCaseService.java | 21 ++++++++++++-- .../api/CafcassApiSearchCaseServiceTest.java | 28 ++++++++++++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseService.java index d6b05216323..d4385282f8a 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseService.java @@ -10,6 +10,10 @@ import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; import uk.gov.hmcts.reform.fpl.service.CaseConverter; import uk.gov.hmcts.reform.fpl.service.search.SearchService; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.BooleanQuery; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.Filter; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.MatchQuery; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.MustNot; import uk.gov.hmcts.reform.fpl.utils.elasticsearch.RangeQuery; import java.time.LocalDateTime; @@ -19,18 +23,31 @@ @Service @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class CafcassApiSearchCaseService { + private static final MustNot CASE_STATES = MustNot.builder() + .clauses(List.of( + MatchQuery.of("state", "Open"), + MatchQuery.of("state", "Deleted"), + MatchQuery.of("state", "RETURNED"))) + .build(); + private final CaseConverter caseConverter; private final SearchService searchService; private final List cafcassApiCaseDataConverters; public List searchCaseByDateRange(LocalDateTime startDate, LocalDateTime endDate) { - final RangeQuery searchRange = RangeQuery.builder() .field("last_modified") .greaterThanOrEqual(startDate) .lessThanOrEqual(endDate).build(); - List caseDetails = searchService.search(searchRange, 10000, 0); + final BooleanQuery searchCaseQuery = BooleanQuery.builder() + .mustNot(CASE_STATES) + .filter(Filter.builder() + .clauses(List.of(searchRange)) + .build()) + .build(); + + List caseDetails = searchService.search(searchCaseQuery, 10000, 0); return caseDetails.stream() .map(this::convertToCafcassApiCase) diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseServiceTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseServiceTest.java index 24362ca5d52..984b36163a0 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseServiceTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiSearchCaseServiceTest.java @@ -3,6 +3,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; @@ -13,6 +15,11 @@ import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; import uk.gov.hmcts.reform.fpl.service.CaseConverter; import uk.gov.hmcts.reform.fpl.service.search.SearchService; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.BooleanQuery; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.ESQuery; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.Filter; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.MatchQuery; +import uk.gov.hmcts.reform.fpl.utils.elasticsearch.MustNot; import uk.gov.hmcts.reform.fpl.utils.elasticsearch.RangeQuery; import java.time.LocalDateTime; @@ -31,8 +38,18 @@ public class CafcassApiSearchCaseServiceTest { private static final LocalDateTime SEARCH_END_DATE = LocalDateTime.now(); private static final LocalDateTime SEARCH_START_DATE = SEARCH_END_DATE.minusDays(1); - private static final RangeQuery SEARCH_RANGE = RangeQuery.builder().field("last_modified") - .greaterThanOrEqual(SEARCH_START_DATE).lessThanOrEqual(SEARCH_END_DATE).build(); + private static final BooleanQuery SEARCH_QUERY = BooleanQuery.builder() + .mustNot(MustNot.builder() + .clauses(List.of( + MatchQuery.of("state", "Open"), + MatchQuery.of("state", "Deleted"), + MatchQuery.of("state", "RETURNED"))) + .build()) + .filter(Filter.builder() + .clauses(List.of(RangeQuery.builder().field("last_modified") + .greaterThanOrEqual(SEARCH_START_DATE).lessThanOrEqual(SEARCH_END_DATE).build())) + .build()) + .build(); private static final CaseData MOCK_CASE_DATA_1 = mock(CaseData.class); private static final CaseDetails MOCK_CASE_DETAILS_1 = CaseDetails.builder() @@ -58,6 +75,8 @@ public class CafcassApiSearchCaseServiceTest { private CafcassApiCaseDataConverter cafcassApiCaseDataConverter2; @Mock private CafcassApiCaseDataConverter cafcassApiCaseDataConverter3; + @Captor + private ArgumentCaptor searchQueryCaptor; private CafcassApiSearchCaseService underTest; @@ -77,7 +96,7 @@ void shouldReturnSearchResultAndBuildCafcassApiCaseByInvokingAllConverter() { when(cafcassApiCaseDataConverter3.convert(any(), any())).thenReturn(mockBuilder); final List caseDetails = List.of(MOCK_CASE_DETAILS_1, MOCK_CASE_DETAILS_2); - when(searchService.search(eq(SEARCH_RANGE), anyInt(), anyInt())).thenReturn(caseDetails); + when(searchService.search(searchQueryCaptor.capture(), anyInt(), anyInt())).thenReturn(caseDetails); when(caseConverter.convert(MOCK_CASE_DETAILS_1)).thenReturn(MOCK_CASE_DATA_1); when(caseConverter.convert(MOCK_CASE_DETAILS_2)).thenReturn(MOCK_CASE_DATA_2); @@ -100,6 +119,7 @@ void shouldReturnSearchResultAndBuildCafcassApiCaseByInvokingAllConverter() { List expected = List.of(expectedCafcassApiCase1, expectedCafcassApiCase2); assertEquals(expected, actual); + assertEquals(SEARCH_QUERY.toMap(), searchQueryCaptor.getValue().toMap()); // verify calling all converters to build CafcassApiCaseData verify(cafcassApiCaseDataConverter1).convert(eq(MOCK_CASE_DATA_1), any()); @@ -115,7 +135,7 @@ void shouldReturnSearchResultAndBuildCafcassApiCaseByInvokingAllConverter() { @Test void shouldReturnEmptyListIfNoCaseFound() { - when(searchService.search(eq(SEARCH_RANGE), anyInt(), anyInt())).thenReturn(List.of()); + when(searchService.search(any(), anyInt(), anyInt())).thenReturn(List.of()); List actual = underTest.searchCaseByDateRange(SEARCH_START_DATE, SEARCH_END_DATE); assertEquals(List.of(), actual); From 8d404e79c48837589605253b82f3a134d5826b68 Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Thu, 8 Aug 2024 10:04:12 +0100 Subject: [PATCH 06/15] DFPL 1760 (#5525) * document download endpoint * update user role crud * update use role * Update add-ccd-user-roles.sh * fix profile * Create CafcassApiDocumentServiceTest.java --- bin/add-ccd-user-roles.sh | 2 +- .../CareSupervision/cafcass-systemupdate.json | 484 ++++++++++++++++++ .../orderCollectionConfidential.json | 15 + .../AuthorisationCaseState.json | 18 +- .../AuthorisationCaseType-nonshuttered.json | 3 +- .../AuthorisationCaseType-shuttered.json | 3 +- .../AdditionalApplicationsBundle.json | 129 ++++- ...earingOrdersBundlesDraftsConfidential.json | 30 +- .../caseDocuments/orderCollection.json | 3 +- .../caseDocuments/sealedCMOs.json | 3 +- .../RoleToAccessProfiles.json | 7 + .../uk/gov/hmcts/reform/fpl/CftlibConfig.java | 3 +- ...cassApiDocumentDownloadControllerTest.java | 44 ++ .../cafcass/CafcassCasesController.java | 22 +- .../api/CafcassApiDocumentService.java | 17 + .../api/CafcassApiDocumentServiceTest.java | 31 ++ 16 files changed, 785 insertions(+), 29 deletions(-) create mode 100644 ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json create mode 100644 service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiDocumentDownloadControllerTest.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiDocumentService.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiDocumentServiceTest.java diff --git a/bin/add-ccd-user-roles.sh b/bin/add-ccd-user-roles.sh index c155657bfcf..97e29b6414a 100755 --- a/bin/add-ccd-user-roles.sh +++ b/bin/add-ccd-user-roles.sh @@ -14,7 +14,7 @@ done ${dir}/utils/ccd-add-role.sh "prd-aac-system" # publiclaw jurisdiction caseworkers -roles=("solicitor" "courtadmin" "cafcass" "magistrate" "gatekeeper" "systemupdate" "judiciary" "bulkscan" "bulkscansystemupdate" "localAuthority" "superuser") +roles=("solicitor" "courtadmin" "cafcass" "magistrate" "gatekeeper" "systemupdate" "judiciary" "bulkscan" "bulkscansystemupdate" "localAuthority" "superuser" "cafcasssystemupdate") for role in "${roles[@]}" do ${dir}/utils/ccd-add-role.sh "caseworker-publiclaw-${role}" diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json new file mode 100644 index 00000000000..6907a2921be --- /dev/null +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json @@ -0,0 +1,484 @@ +[ + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "urgentDirectionsOrder", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "standardDirectionOrder", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "hearingOrdersBundlesDrafts", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "CR" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "hearingOrdersBundlesDraftReview", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "sealedCMOs", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "orderCollection", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submittedC1WithSupplement", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submittedForm", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "translatedSubmittedForm", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "placements", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "CR" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "additionalApplicationsBundle", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "courtBundleListV2", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "courtBundleListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "caseSummaryList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "caseSummaryListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + },{ + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "posStmtList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" +}, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "posStmtListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "posStmtChildList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "posStmtChildListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "posStmtRespList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "posStmtRespListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "thresholdList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "thresholdListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "skeletonArgumentList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "skeletonArgumentListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "judgementList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "judgementListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "transcriptList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "transcriptListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "documentsFiledOnIssueList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "documentsFiledOnIssueListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "applicantWitnessStmtList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "applicantWitnessStmtListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "carePlanList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "carePlanListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "parentAssessmentList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "parentAssessmentListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "famAndViabilityList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "famAndViabilityListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "applicantOtherDocList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "applicantOtherDocListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "meetingNoteList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "meetingNoteListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "contactNoteList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "contactNoteListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "c1ApplicationDocList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "c2ApplicationDocList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "respStmtList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "respStmtListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "respWitnessStmtList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "respWitnessStmtListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianEvidenceList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianEvidenceListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "expertReportList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "expertReportListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "drugAndAlcoholReportList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "drugAndAlcoholReportListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "lettersOfInstructionList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "lettersOfInstructionListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "policeDisclosureList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "policeDisclosureListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "medicalRecordList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "medicalRecordListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "correspondenceDocList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "correspondenceDocListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "noticeOfActingOrIssueList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "noticeOfActingOrIssueListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "previousProceedingList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "previousProceedingListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" + } +] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/orderCollectionConfidential.json b/ccd-definition/AuthorisationCaseField/CareSupervision/orderCollectionConfidential.json index 9780fb9daf2..168d8e45ca9 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/orderCollectionConfidential.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/orderCollectionConfidential.json @@ -291,6 +291,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORA]" ], "CRUD": "R" @@ -315,6 +316,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORB]" ], "CRUD": "R" @@ -339,6 +341,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORC]" ], "CRUD": "R" @@ -363,6 +366,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORD]" ], "CRUD": "R" @@ -387,6 +391,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORE]" ], "CRUD": "R" @@ -411,6 +416,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORF]" ], "CRUD": "R" @@ -435,6 +441,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORG]" ], "CRUD": "R" @@ -459,6 +466,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORH]" ], "CRUD": "R" @@ -483,6 +491,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORI]" ], "CRUD": "R" @@ -507,6 +516,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORJ]" ], "CRUD": "R" @@ -531,6 +541,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORK]" ], "CRUD": "R" @@ -555,6 +566,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORL]" ], "CRUD": "R" @@ -579,6 +591,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORM]" ], "CRUD": "R" @@ -603,6 +616,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORN]" ], "CRUD": "R" @@ -627,6 +641,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[CHILDSOLICITORO]" ], "CRUD": "R" diff --git a/ccd-definition/AuthorisationCaseState/CareSupervision/AuthorisationCaseState.json b/ccd-definition/AuthorisationCaseState/CareSupervision/AuthorisationCaseState.json index 464c9eee6c8..2c75d2cddfc 100644 --- a/ccd-definition/AuthorisationCaseState/CareSupervision/AuthorisationCaseState.json +++ b/ccd-definition/AuthorisationCaseState/CareSupervision/AuthorisationCaseState.json @@ -30,7 +30,8 @@ "caseworker-caa", "caseworker-approver", "caseworker-ras-validation", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "CRU" }, @@ -51,7 +52,8 @@ "caseworker-caa", "caseworker-approver", "caseworker-ras-validation", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "CRU" }, @@ -72,7 +74,8 @@ "caseworker-caa", "caseworker-approver", "caseworker-ras-validation", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "CRU" }, @@ -93,7 +96,8 @@ "caseworker-approver", "caseworker-publiclaw-cafcass", "caseworker-ras-validation", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "CRU" }, @@ -130,7 +134,8 @@ "caseworker-caa", "caseworker-approver", "caseworker-ras-validation", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "CRU" }, @@ -151,7 +156,8 @@ "caseworker-caa", "caseworker-approver", "caseworker-ras-validation", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "CRU" }, diff --git a/ccd-definition/AuthorisationCaseType/AuthorisationCaseType-nonshuttered.json b/ccd-definition/AuthorisationCaseType/AuthorisationCaseType-nonshuttered.json index a047fce5658..1a77da27e86 100644 --- a/ccd-definition/AuthorisationCaseType/AuthorisationCaseType-nonshuttered.json +++ b/ccd-definition/AuthorisationCaseType/AuthorisationCaseType-nonshuttered.json @@ -15,7 +15,8 @@ "caseworker-caa", "caseworker-approver", "caseworker-ras-validation", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "CRU" }, diff --git a/ccd-definition/AuthorisationCaseType/AuthorisationCaseType-shuttered.json b/ccd-definition/AuthorisationCaseType/AuthorisationCaseType-shuttered.json index 15c5bde794b..571f24119a4 100644 --- a/ccd-definition/AuthorisationCaseType/AuthorisationCaseType-shuttered.json +++ b/ccd-definition/AuthorisationCaseType/AuthorisationCaseType-shuttered.json @@ -13,7 +13,8 @@ "caseworker-publiclaw-bulkscansystemupdate", "caseworker-caa", "caseworker-approver", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "D" }, diff --git a/ccd-definition/AuthorisationComplexType/caseDocuments/AdditionalApplicationsBundle.json b/ccd-definition/AuthorisationComplexType/caseDocuments/AdditionalApplicationsBundle.json index ad48f3e58e5..e882df60f60 100644 --- a/ccd-definition/AuthorisationComplexType/caseDocuments/AdditionalApplicationsBundle.json +++ b/ccd-definition/AuthorisationComplexType/caseDocuments/AdditionalApplicationsBundle.json @@ -117,6 +117,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundle", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "[CAFCASSSOLICITOR]", @@ -174,6 +180,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "otherApplicationsBundle", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "[CAFCASSSOLICITOR]", @@ -561,7 +573,8 @@ "UserRoles": [ "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-magistrate" + "caseworker-publiclaw-magistrate", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" } @@ -793,7 +806,8 @@ "UserRoles": [ "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-magistrate" + "caseworker-publiclaw-magistrate", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" }, @@ -1073,7 +1087,8 @@ "UserRoles": [ "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-magistrate" + "caseworker-publiclaw-magistrate", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" } @@ -1232,7 +1247,8 @@ "UserRoles": [ "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-magistrate" + "caseworker-publiclaw-magistrate", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" } @@ -1293,7 +1309,8 @@ "UserRoles": [ "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-magistrate" + "caseworker-publiclaw-magistrate", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" }, @@ -1395,7 +1412,8 @@ "UserRoles": [ "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-magistrate" + "caseworker-publiclaw-magistrate", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" } @@ -1744,7 +1762,8 @@ "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-judiciary", "caseworker-publiclaw-magistrate", - "[BARRISTER]" + "[BARRISTER]", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" } @@ -2031,6 +2050,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleConfidential", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-courtadmin", @@ -2708,6 +2733,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild0", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -2764,6 +2795,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild1", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -2820,6 +2857,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild2", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -2876,6 +2919,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild3", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -2932,6 +2981,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild4", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -2988,6 +3043,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild5", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3044,6 +3105,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild6", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3100,6 +3167,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild7", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3156,6 +3229,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild8", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3212,6 +3291,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild9", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3268,6 +3353,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild10", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3324,6 +3415,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild11", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3380,6 +3477,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild12", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3436,6 +3539,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild13", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", @@ -3492,6 +3601,12 @@ "CaseFieldID": "additionalApplicationsBundle", "ListElementCode": "c2DocumentBundleChild14", "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "R" + }, { "UserRoles": [ "caseworker-publiclaw-cafcass", diff --git a/ccd-definition/AuthorisationComplexType/caseDocuments/hearingOrdersBundlesDraftsConfidential.json b/ccd-definition/AuthorisationComplexType/caseDocuments/hearingOrdersBundlesDraftsConfidential.json index d59d712796d..57bf37e0174 100644 --- a/ccd-definition/AuthorisationComplexType/caseDocuments/hearingOrdersBundlesDraftsConfidential.json +++ b/ccd-definition/AuthorisationComplexType/caseDocuments/hearingOrdersBundlesDraftsConfidential.json @@ -15,7 +15,8 @@ "UserRoles": [ "[BARRISTER]", "[CAFCASSSOLICITOR]", - "caseworker-publiclaw-cafcass" + "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "CR" }, @@ -72,6 +73,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -140,6 +142,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -199,6 +202,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORB]", @@ -262,6 +266,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -325,6 +330,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -388,6 +394,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -451,6 +458,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -514,6 +522,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -577,6 +586,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -640,6 +650,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -703,6 +714,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -766,6 +778,7 @@ { "UserRoles": [ "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "[BARRISTER]", "[SOLICITOR]", "[SOLICITORA]", @@ -823,6 +836,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -886,6 +900,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -949,6 +964,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1012,6 +1028,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1075,6 +1092,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1138,6 +1156,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1201,6 +1220,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1264,6 +1284,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1327,6 +1348,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1390,6 +1412,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1453,6 +1476,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1516,6 +1540,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1579,6 +1604,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1642,6 +1668,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" @@ -1705,6 +1732,7 @@ "caseworker-publiclaw-courtadmin", "caseworker-publiclaw-gatekeeper", "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-cafcasssystemupdate", "caseworker-publiclaw-magistrate" ], "CRUD": "R" diff --git a/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json b/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json index d9edda37c66..10a7630f722 100644 --- a/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json +++ b/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json @@ -252,7 +252,8 @@ "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", "caseworker-publiclaw-cafcass", - "caseworker-publiclaw-magistrate" + "caseworker-publiclaw-magistrate", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" } diff --git a/ccd-definition/AuthorisationComplexType/caseDocuments/sealedCMOs.json b/ccd-definition/AuthorisationComplexType/caseDocuments/sealedCMOs.json index 272a9ca3ac6..8b4f8a22f29 100644 --- a/ccd-definition/AuthorisationComplexType/caseDocuments/sealedCMOs.json +++ b/ccd-definition/AuthorisationComplexType/caseDocuments/sealedCMOs.json @@ -145,7 +145,8 @@ "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", - "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]" + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", + "caseworker-publiclaw-cafcasssystemupdate" ], "CRUD": "R" }, diff --git a/ccd-definition/RoleToAccessProfiles/RoleToAccessProfiles.json b/ccd-definition/RoleToAccessProfiles/RoleToAccessProfiles.json index 210c02795fe..7c123954dcd 100644 --- a/ccd-definition/RoleToAccessProfiles/RoleToAccessProfiles.json +++ b/ccd-definition/RoleToAccessProfiles/RoleToAccessProfiles.json @@ -467,5 +467,12 @@ "RoleName": "idam:caseworker-publiclaw-judiciary", "ReadOnly": "N", "AccessProfiles": "caseworker-publiclaw-judiciary" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "RoleName": "idam:caseworker-publiclaw-cafcasssystemupdate", + "ReadOnly": "N", + "AccessProfiles": "caseworker-publiclaw-cafcasssystemupdate" } ] diff --git a/service/src/cftlib/java/uk/gov/hmcts/reform/fpl/CftlibConfig.java b/service/src/cftlib/java/uk/gov/hmcts/reform/fpl/CftlibConfig.java index 0d377ff401e..d27165ff999 100644 --- a/service/src/cftlib/java/uk/gov/hmcts/reform/fpl/CftlibConfig.java +++ b/service/src/cftlib/java/uk/gov/hmcts/reform/fpl/CftlibConfig.java @@ -28,7 +28,8 @@ public void configure(CFTLib lib) throws Exception { "caseworker-caa", "caseworker-ras-validation", "GS_profile", - "caseworker-wa-task-configuration" + "caseworker-wa-task-configuration", + "caseworker-publiclaw-cafcasssystemupdate" }; lib.createRoles(roles); diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiDocumentDownloadControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiDocumentDownloadControllerTest.java new file mode 100644 index 00000000000..5c86a923edb --- /dev/null +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiDocumentDownloadControllerTest.java @@ -0,0 +1,44 @@ +package uk.gov.hmcts.reform.fpl.controllers.cafcass; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MvcResult; +import uk.gov.hmcts.reform.fpl.exceptions.EmptyFileException; +import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiDocumentService; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.mockito.Mockito.when; + +public class CafcassApiDocumentDownloadControllerTest extends CafcassApiControllerBaseTest { + @MockBean + private CafcassApiDocumentService cafcassApiDocumentService; + + @Test + void shouldReturnDocumentBinary() throws Exception { + UUID docId = UUID.randomUUID(); + byte[] docBinary = "This is a document".getBytes(); + + when(cafcassApiDocumentService.downloadDocumentByDocumentId(docId.toString())).thenReturn(docBinary); + + MvcResult rsp = sendRequest(buildGetRequest(String.format("/cases/documents/%s/binary", docId)), 200); + assertArrayEquals(rsp.getResponse().getContentAsByteArray(), docBinary); + } + + @Test + void shouldReturn400IfDocIdInvalid() throws Exception { + sendRequest(buildGetRequest("/cases/documents/test/binary"), 400); + sendRequest(buildGetRequest("/cases/documents/s/binary"), 400); + } + + @Test + void shouldReturn404IfDocumentNotFound() throws Exception { + UUID docId = UUID.randomUUID(); + + when(cafcassApiDocumentService.downloadDocumentByDocumentId(docId.toString())) + .thenThrow(new EmptyFileException()); + + sendRequest(buildGetRequest(String.format("/cases/documents/%s/binary", docId)), 404); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java index 6223c6aa3b2..7755e961e0a 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java @@ -13,9 +13,12 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import uk.gov.hmcts.reform.fpl.exceptions.EmptyFileException; import uk.gov.hmcts.reform.fpl.exceptions.api.BadInputException; +import uk.gov.hmcts.reform.fpl.exceptions.api.NotFoundException; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCase; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSearchCasesResponse; +import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiDocumentService; import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiSearchCaseService; import java.time.LocalDateTime; @@ -30,10 +33,8 @@ @RequestMapping("/cases") @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class CafcassCasesController { - private static final String DATE_TIME_FORMAT_IN = "yyyy-MM-dd'T'hh:mm:ss.SSS"; - private static final String DATE_TIME_FORMAT_OUT = "yyyy-MM-dd"; - private final CafcassApiSearchCaseService cafcassApiSearchCaseService; + private final CafcassApiDocumentService cafcassApiDocumentService; @GetMapping("") public CafcassApiSearchCasesResponse searchCases( @@ -56,14 +57,17 @@ public CafcassApiSearchCasesResponse searchCases( @GetMapping("documents/{documentId}/binary") public ResponseEntity getDocumentBinary(@PathVariable String documentId) { log.info("getDocumentBinary request received"); - try { - return ResponseEntity.ok(String.format("getDocumentBinary - document id: [%s]", - UUID.fromString(documentId))); - } catch (IllegalArgumentException e) { - return ResponseEntity.status(400).body("bad input parameter - " + e.getMessage()); + try { + UUID validatedUid = UUID.fromString(documentId); } catch (Exception e) { - return ResponseEntity.status(500).body("Internal server error"); + throw new BadInputException("Case document Id is not valid"); + } + + try { + return ResponseEntity.ok(cafcassApiDocumentService.downloadDocumentByDocumentId(documentId)); + } catch (EmptyFileException e) { + throw new NotFoundException("Case document not found"); } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiDocumentService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiDocumentService.java new file mode 100644 index 00000000000..a97fc6d378f --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiDocumentService.java @@ -0,0 +1,17 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.exceptions.EmptyFileException; +import uk.gov.hmcts.reform.fpl.service.SecureDocStoreService; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class CafcassApiDocumentService { + private final SecureDocStoreService secureDocStoreService; + + public byte[] downloadDocumentByDocumentId(String documentId) throws IllegalArgumentException, EmptyFileException { + return secureDocStoreService.downloadDocument(documentId); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiDocumentServiceTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiDocumentServiceTest.java new file mode 100644 index 00000000000..e8468586ea1 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiDocumentServiceTest.java @@ -0,0 +1,31 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.service.SecureDocStoreService; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class CafcassApiDocumentServiceTest { + private SecureDocStoreService secureDocStoreService = mock(SecureDocStoreService.class); + + private CafcassApiDocumentService underTest; + + @BeforeEach + void setUpWithMockConverters() { + underTest = new CafcassApiDocumentService(secureDocStoreService); + } + + @Test + void shouldReturnDocumentBinary() { + UUID docId = UUID.randomUUID(); + byte[] docBinary = "This is a document".getBytes(); + when(secureDocStoreService.downloadDocument(docId.toString())).thenReturn(docBinary); + + assertArrayEquals(docBinary, underTest.downloadDocumentByDocumentId(docId.toString())); + } +} From d4b16fc542836a1d328f4e6c5ef7ae575756ee4f Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:41:58 +0100 Subject: [PATCH 07/15] Cafcass api fix conflict (#5538) * Async test verifications (fixing flaky async tests) (#5519) * fix running tests locally without the env vars * Add timeouts for async tests * DFPL-1269 Non-molestation order (FL404A) (#5455) * git dfpl1269 * fix test * fix check style * fix manageOrdersRecitalsAndPreamblesOptional and add unit test * allow selecting appllicant and respondent * fix test * Update OrderTest.java * update notification * fix check style * fix code check * Update NotifyTemplates.java * Update NonMolestationOrderEventHandler.java * Upped timeout to 110 seconds (#5528) * Update statement of truth wording - DFPL-2458 (#5502) * Update statement of truth wording at case submission and on C1 and C110a applications. * Update wording for tests. * Update wording to be two separated statements * Update Welsh C110a template and update order of wording in statement of truth. * Remove sentence * Remove sentence in welsh --------- Co-authored-by: Qasim Nawaz Co-authored-by: Qasim Nawaz <96177697+qasimnawaz-moj@users.noreply.github.com> Co-authored-by: Braimah101 <41795070+Braimah101@users.noreply.github.com> * Rename CFV Category - Judgments/facts and reasons (#5530) * NightlyUiTestFix (#5536) * FixCaseFlagAPICaseCreationAssertion * FixGatekeepingJudgesSearchListAndShareCase * FixGatekeepingJudgesSearchListAndShareCase --------- Co-authored-by: Daniel Catchpole Co-authored-by: gavinkeys <72936463+gavinkeys@users.noreply.github.com> Co-authored-by: jamesrferguson1 <94848497+jamesrferguson1@users.noreply.github.com> Co-authored-by: Qasim Nawaz Co-authored-by: Qasim Nawaz <96177697+qasimnawaz-moj@users.noreply.github.com> Co-authored-by: Braimah101 <41795070+Braimah101@users.noreply.github.com> Co-authored-by: prabhamuthu15 <78162288+prabhamuthu15@users.noreply.github.com> --- .../CareSupervision/court-admin.json | 28 + .../CareSupervision/eps-managing.json | 7 + .../CareSupervision/gatekeeper.json | 28 + .../CareSupervision/judiciary.json | 28 + .../CareSupervision/la-barrister.json | 7 + .../CareSupervision/la-managing.json | 7 + .../CareSupervision/la-shared.json | 7 + .../CareSupervision/la-solicitor.json | 7 + .../CareSupervision/solicitor.json | 9 + .../CareSupervision/system-update.json | 35 + .../manageOrders/5_orderDetailsSection.json | 54 +- .../CareSupervision/submitApplication.json | 22 +- .../CaseField/CareSupervision/caseField.json | 11 +- .../manageOrders/manageOrdersFields.json | 36 + .../CareSupervision/orderDocument.json | 8 +- ccd-definition/Categories.json | 2 +- .../CareSupervision/OrderTempQuestions.json | 9 + .../CareSupervision/ManageOrdersType.json | 7 + playwright-e2e/pages/gatekeeping-listing.ts | 4 +- playwright-e2e/pages/share-case.ts | 4 +- playwright.config.ts | 2 +- .../case-submission/application-draft.txt | 2 + .../resources/case-submission/application.txt | 2 + .../ChildControllerSubmittedTest.java | 59 +- ...sControllerInitialSectionMidEventTest.java | 2 + .../ManageOrdersMidEventControllerTest.java | 11 +- ...LocalAuthorityControllerSubmittedTest.java | 5 +- .../application-integration-test.yaml | 4 +- .../integrationTest/resources/c110a-Welsh.txt | 1 + .../src/integrationTest/resources/c110a.txt | 2 + .../gov/hmcts/reform/fpl/NotifyTemplates.java | 1 + .../controllers/ManageOrdersController.java | 5 +- .../reform/fpl/enums/DocmosisTemplates.java | 5 +- .../reform/fpl/enums/cfv/DocumentType.java | 4 +- .../order/NonMolestationOrderEvent.java | 16 + .../NonMolestationOrderEventHandler.java | 101 ++ .../model/event/ManageOrdersEventData.java | 5 + .../hmcts/reform/fpl/model/order/Order.java | 17 + .../fpl/model/order/OrderQuestionBlock.java | 3 + .../fpl/model/order/OrderTempQuestions.java | 1 + .../ApplicantsListGenerator.java | 12 +- .../service/email/RepresentativesInbox.java | 17 +- .../orders/ManageOrdersEventBuilder.java | 12 +- ...NonMolestationOrderDocumentParameters.java | 22 + ...tationOrderDocumentParameterGenerator.java | 73 ++ .../OrderDocumentGeneratorHolder.java | 2 + ...SectionAndQuestionsPrePopulatorHolder.java | 5 +- .../NonMolestationOrderPrePopulator.java | 32 + .../NonMolestationOrderEventHandlerTest.java | 220 +++++ .../reform/fpl/model/order/OrderTest.java | 8 + .../ApplicantsListGeneratorTest.java | 13 + ...derDocumentScopedFieldsCalculatorTest.java | 4 + .../orders/ManageOrdersEventBuilderTest.java | 23 +- .../OrderShowHideQuestionsCalculatorTest.java | 930 ++---------------- ...onOrderDocumentParameterGeneratorTest.java | 145 +++ .../OrderDocumentGeneratorHolderTest.java | 7 +- ...ionAndQuestionsPrePopulatorHolderTest.java | 10 +- .../test/resources/empty-form-pdf-content.txt | 2 + .../resources/submitted-form-pdf-content.txt | 1 + 59 files changed, 1197 insertions(+), 909 deletions(-) create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/events/order/NonMolestationOrderEvent.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/NonMolestationOrderEventHandler.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/NonMolestationOrderDocumentParameters.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/NonMolestationOrderDocumentParameterGenerator.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/NonMolestationOrderPrePopulator.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/handlers/NonMolestationOrderEventHandlerTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/NonMolestationOrderDocumentParameterGeneratorTest.java diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json index b59a267162c..df761e1dc95 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json @@ -3674,6 +3674,13 @@ "UserRole": "caseworker-publiclaw-courtadmin", "CRUD": "CRUD" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersRecitalsAndPreamblesOptional", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRUD" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", @@ -5879,6 +5886,27 @@ "UserRole": "caseworker-publiclaw-courtadmin", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrder", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrderApplicant", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrderRespondent", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/eps-managing.json b/ccd-definition/AuthorisationCaseField/CareSupervision/eps-managing.json index c38cd2f3428..aa5ef610b6e 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/eps-managing.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/eps-managing.json @@ -440,6 +440,13 @@ "UserRole": "[EPSMANAGING]", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submissionDeclaration", + "UserRole": "[EPSMANAGING]", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json b/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json index ba3365f3cc0..aab26006284 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json @@ -3688,6 +3688,13 @@ "UserRole": "caseworker-publiclaw-gatekeeper", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersRecitalsAndPreamblesOptional", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", @@ -4829,6 +4836,27 @@ "UserRole": "caseworker-publiclaw-gatekeeper", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrder", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrderApplicant", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrderRespondent", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json index 9b3ed95e3aa..0bbb7681c98 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json @@ -3954,6 +3954,13 @@ "UserRole": "caseworker-publiclaw-judiciary", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersRecitalsAndPreamblesOptional", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", @@ -5480,6 +5487,27 @@ "UserRole": "caseworker-publiclaw-judiciary", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrder", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrderApplicant", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrderRespondent", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-barrister.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-barrister.json index efc913a1785..e6efc9ba0d3 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-barrister.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-barrister.json @@ -230,6 +230,13 @@ "UserRole": "[LABARRISTER]", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submissionDeclaration", + "UserRole": "[LABARRISTER]", + "CRUD": "R" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json index 5072ecf9309..4865ee0b298 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json @@ -538,6 +538,13 @@ "UserRole": "[LAMANAGING]", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submissionDeclaration", + "UserRole": "[LAMANAGING]", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json index 473536fff70..c8b37247be3 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json @@ -230,6 +230,13 @@ "UserRole": "[LASHARED]", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submissionDeclaration", + "UserRole": "[LASHARED]", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json index c6b5a2f8c95..2e7262ee03d 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json @@ -748,6 +748,13 @@ "UserRole": "[LASOLICITOR]", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submissionDeclaration", + "UserRole": "[LASOLICITOR]", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json b/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json index 35a75f47882..63c5a001ed9 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json @@ -1967,6 +1967,15 @@ ], "CRUD": "R" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submissionDeclaration", + "UserRoles": [ + "[SOLICITORA]", "[CHILDSOLICITORA]" + ], + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json index d7253be1d9a..d9ce4a73ec1 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json @@ -727,6 +727,13 @@ "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRUD" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "submissionDeclaration", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRUD" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", @@ -2499,6 +2506,13 @@ "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersRecitalsAndPreamblesOptional", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", @@ -3213,6 +3227,27 @@ "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrder", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrderApplicant", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersNonMolestationOrderRespondent", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json b/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json index bf23169b756..131b702e132 100644 --- a/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json +++ b/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json @@ -9,7 +9,7 @@ "PageID": "OrderDetails", "PageDisplayOrder": 6, "PageColumnNumber": 1, - "PageShowCondition": "orderTempQuestions.furtherDirections=\"YES\" OR orderTempQuestions.orderDetails=\"YES\" OR orderTempQuestions.needSealing=\"YES\" OR orderTempQuestions.uploadOrderFile=\"YES\" OR orderTempQuestions.childPlacementQuestions=\"YES\" OR orderTempQuestions.childPlacementQuestionsForBlankOrder=\"YES\" OR orderTempQuestions.manageOrdersEducationSupervision=\"YES\" OR orderTempQuestions.manageOrdersVaryOrExtendSupervisionOrder=\"YES\" OR orderTempQuestions.refuseContactQuestions=\"YES\" OR orderTempQuestions.manageOrdersChildAssessment=\"YES\" OR orderTempQuestions.leaveToChangeChildSurname=\"YES\" OR orderTempQuestions.partyAllowedContactsAndConditions=\"YES\" OR orderTempQuestions.declarationOfParentage=\"YES\" OR orderTempQuestions.partyAllowedContactsAndConditions=\"YES\" OR orderTempQuestions.manageOrdersTransparencyOrder=\"YES\"", + "PageShowCondition": "orderTempQuestions.furtherDirections=\"YES\" OR orderTempQuestions.orderDetails=\"YES\" OR orderTempQuestions.needSealing=\"YES\" OR orderTempQuestions.uploadOrderFile=\"YES\" OR orderTempQuestions.childPlacementQuestions=\"YES\" OR orderTempQuestions.childPlacementQuestionsForBlankOrder=\"YES\" OR orderTempQuestions.manageOrdersEducationSupervision=\"YES\" OR orderTempQuestions.manageOrdersVaryOrExtendSupervisionOrder=\"YES\" OR orderTempQuestions.refuseContactQuestions=\"YES\" OR orderTempQuestions.manageOrdersChildAssessment=\"YES\" OR orderTempQuestions.leaveToChangeChildSurname=\"YES\" OR orderTempQuestions.partyAllowedContactsAndConditions=\"YES\" OR orderTempQuestions.declarationOfParentage=\"YES\" OR orderTempQuestions.partyAllowedContactsAndConditions=\"YES\" OR orderTempQuestions.nonMolestationOrder=\"YES\" OR orderTempQuestions.manageOrdersTransparencyOrder=\"YES\"", "FieldShowCondition": "manageOrdersOperation=\"CREATE\"", "CallBackURLMidEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/manage-orders/order-details/mid-event", "ShowSummaryChangeOption": "N" @@ -1416,5 +1416,57 @@ "PageColumnNumber": 1, "FieldShowCondition": "orderTempQuestions.manageOrdersTransparencyOrder=\"YES\"", "ShowSummaryChangeOption": "Y" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageOrders", + "CaseFieldID": "manageOrdersNonMolestationOrderApplicant", + "PageFieldDisplayOrder": 69, + "DisplayContext": "MANDATORY", + "PageID": "OrderDetails", + "PageDisplayOrder": 6, + "PageColumnNumber": 1, + "FieldShowCondition": "orderTempQuestions.nonMolestationOrder=\"YES\"", + "ShowSummaryChangeOption": "Y" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageOrders", + "CaseFieldID": "manageOrdersNonMolestationOrderRespondent", + "PageFieldDisplayOrder": 70, + "DisplayContext": "MANDATORY", + "PageID": "OrderDetails", + "PageDisplayOrder": 6, + "PageColumnNumber": 1, + "FieldShowCondition": "orderTempQuestions.nonMolestationOrder=\"YES\"", + "ShowSummaryChangeOption": "Y" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageOrders", + "CaseFieldID": "manageOrdersRecitalsAndPreamblesOptional", + "PageFieldDisplayOrder": 71, + "DisplayContext": "OPTIONAL", + "PageID": "OrderDetails", + "PageDisplayOrder": 6, + "PageColumnNumber": 1, + "FieldShowCondition": "orderTempQuestions.nonMolestationOrder=\"YES\"", + "ShowSummaryChangeOption": "Y" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageOrders", + "CaseFieldID": "manageOrdersNonMolestationOrder", + "PageFieldDisplayOrder": 72, + "DisplayContext": "MANDATORY", + "PageID": "OrderDetails", + "PageDisplayOrder": 6, + "PageColumnNumber": 1, + "FieldShowCondition": "orderTempQuestions.nonMolestationOrder=\"YES\"", + "ShowSummaryChangeOption": "Y" } ] diff --git a/ccd-definition/CaseEventToFields/CareSupervision/submitApplication.json b/ccd-definition/CaseEventToFields/CareSupervision/submitApplication.json index d5d0a74b6d9..53606363bcf 100644 --- a/ccd-definition/CaseEventToFields/CareSupervision/submitApplication.json +++ b/ccd-definition/CaseEventToFields/CareSupervision/submitApplication.json @@ -35,12 +35,24 @@ "PageColumnNumber": 1, "ShowSummaryChangeOption": "Y" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "submitApplication", + "CaseFieldID": "submissionDeclaration", + "PageFieldDisplayOrder": 5, + "DisplayContext": "READONLY", + "PageID": 1, + "PageDisplayOrder": 1, + "PageColumnNumber": 1, + "ShowSummaryChangeOption": "Y" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "submitApplication", "CaseFieldID": "submissionConsentLabel", - "PageFieldDisplayOrder": 4, + "PageFieldDisplayOrder": 6, "DisplayContext": "READONLY", "PageID": 1, "PageDisplayOrder": 1, @@ -52,7 +64,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "submitApplication", "CaseFieldID": "submissionConsent", - "PageFieldDisplayOrder": 5, + "PageFieldDisplayOrder": 7, "DisplayContext": "MANDATORY", "PageID": 1, "PageDisplayOrder": 1, @@ -64,7 +76,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "submitApplication", "CaseFieldID": "displayAmountToPay", - "PageFieldDisplayOrder": 6, + "PageFieldDisplayOrder": 8, "DisplayContext": "READONLY", "PageID": 1, "PageDisplayOrder": 1, @@ -77,7 +89,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "submitApplication", "CaseFieldID": "amountToPay", - "PageFieldDisplayOrder": 7, + "PageFieldDisplayOrder": 9, "DisplayContext": "READONLY", "PageID": 1, "PageDisplayOrder": 1, @@ -90,7 +102,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "submitApplication", "CaseFieldID": "hearing", - "PageFieldDisplayOrder": 8, + "PageFieldDisplayOrder": 10, "DisplayContext": "READONLY", "PageID": 1, "PageDisplayOrder": 1, diff --git a/ccd-definition/CaseField/CareSupervision/caseField.json b/ccd-definition/CaseField/CareSupervision/caseField.json index 93915815001..2a59e864d0c 100644 --- a/ccd-definition/CaseField/CareSupervision/caseField.json +++ b/ccd-definition/CaseField/CareSupervision/caseField.json @@ -703,11 +703,20 @@ "SecurityClassification": "Public", "Searchable": "N" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "submissionDeclaration", + "Label": "**Declaration**
The applicant understands that proceedings for contempt of court may be brought against anyone who makes, or causes to be made, a false statement in a document verified by a statement of truth without an honest belief in its truth.", + "FieldType": "Label", + "SecurityClassification": "Public", + "Searchable": "N" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", "ID": "submissionConsentLabel", - "Label": "Declaration", + "Label": " ", "FieldType": "Text", "SecurityClassification": "Public", "Searchable": "N" diff --git a/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json b/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json index 7feca6bc2b9..4f8e60871b2 100644 --- a/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json +++ b/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json @@ -195,6 +195,15 @@ "SecurityClassification": "PUBLIC", "Searchable": "N" }, + { + "LiveFrom": "01/01/2017", + "ID": "manageOrdersRecitalsAndPreamblesOptional", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "FieldType": "TextArea", + "Label": "Add recitals or preamble", + "SecurityClassification": "PUBLIC", + "Searchable": "N" + }, { "LiveFrom": "01/01/2017", "ID": "manageOrdersEpoType", @@ -1172,5 +1181,32 @@ "Label": "Permission to report is not effective until:", "SecurityClassification": "Public", "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "manageOrdersNonMolestationOrder", + "FieldType": "TextArea", + "Label": "The Court Orders", + "SecurityClassification": "Public", + "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "manageOrdersNonMolestationOrderApplicant", + "FieldType": "DynamicList", + "Label": "Applicant of this order", + "SecurityClassification": "Public", + "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "manageOrdersNonMolestationOrderRespondent", + "FieldType": "DynamicList", + "Label": "Respondent of this order", + "SecurityClassification": "Public", + "Searchable": "N" } ] diff --git a/ccd-definition/CaseField/CareSupervision/orderDocument.json b/ccd-definition/CaseField/CareSupervision/orderDocument.json index 1c31a2dd341..df3dfe356f8 100644 --- a/ccd-definition/CaseField/CareSupervision/orderDocument.json +++ b/ccd-definition/CaseField/CareSupervision/orderDocument.json @@ -5,7 +5,7 @@ "ID": "judgementList", "FieldType": "Collection", "FieldTypeParameter": "JudgementFactsAndReasons", - "Label": "Judgements/facts and reasons", + "Label": "Judgments/facts and reasons", "SecurityClassification": "Public", "Searchable": "N" }, @@ -15,7 +15,7 @@ "ID": "judgementListLA", "FieldType": "Collection", "FieldTypeParameter": "JudgementFactsAndReasons", - "Label": "Judgements/facts and reasons", + "Label": "Judgments/facts and reasons", "SecurityClassification": "Public", "Searchable": "N" }, @@ -25,7 +25,7 @@ "ID": "judgementListCTSC", "FieldType": "Collection", "FieldTypeParameter": "JudgementFactsAndReasons", - "Label": "Judgements/facts and reasons", + "Label": "Judgments/facts and reasons", "SecurityClassification": "Public", "Searchable": "N" }, @@ -35,7 +35,7 @@ "ID": "judgementListRemoved", "FieldType": "Collection", "FieldTypeParameter": "JudgementFactsAndReasons", - "Label": "Judgements/facts and reasons", + "Label": "Judgments/facts and reasons", "SecurityClassification": "Public", "Searchable": "N" }, diff --git a/ccd-definition/Categories.json b/ccd-definition/Categories.json index 9d433a113ab..f87282f6dd2 100644 --- a/ccd-definition/Categories.json +++ b/ccd-definition/Categories.json @@ -139,7 +139,7 @@ "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", "CategoryID": "judgementsFactsAndReasons", - "CategoryLabel": "Judgements/facts and reasons", + "CategoryLabel": "Judgments/facts and reasons", "ParentCategoryID": "orders", "DisplayOrder": "800" }, diff --git a/ccd-definition/ComplexTypes/CareSupervision/OrderTempQuestions.json b/ccd-definition/ComplexTypes/CareSupervision/OrderTempQuestions.json index d019bbe6724..8f6c0a07137 100644 --- a/ccd-definition/ComplexTypes/CareSupervision/OrderTempQuestions.json +++ b/ccd-definition/ComplexTypes/CareSupervision/OrderTempQuestions.json @@ -439,5 +439,14 @@ "ElementLabel": " ", "FieldShowCondition": "manageOrdersTransparencyOrder=\"DO_NOT_SHOW\"", "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "OrderTempQuestions", + "ListElementCode": "nonMolestationOrder", + "FieldType": "YesOrNo", + "ElementLabel": " ", + "FieldShowCondition": "nonMolestationOrder=\"DO_NOT_SHOW\"", + "SecurityClassification": "Public" } ] diff --git a/ccd-definition/FixedLists/CareSupervision/ManageOrdersType.json b/ccd-definition/FixedLists/CareSupervision/ManageOrdersType.json index 5c01f4b5df0..8c2dcf159f4 100644 --- a/ccd-definition/FixedLists/CareSupervision/ManageOrdersType.json +++ b/ccd-definition/FixedLists/CareSupervision/ManageOrdersType.json @@ -166,5 +166,12 @@ "ListElementCode": "TRANSPARENCY_ORDER", "ListElement": "Transparency Order", "DisplayOrder": 24 + }, + { + "LiveFrom": "01/01/2017", + "ID": "ManageOrdersType", + "ListElementCode": "FL404A_NON_MOLESTATION_ORDER", + "ListElement": "Non-molestation order (FL404A)", + "DisplayOrder": 25 } ] diff --git a/playwright-e2e/pages/gatekeeping-listing.ts b/playwright-e2e/pages/gatekeeping-listing.ts index 42effb5af63..2f252c2e0be 100644 --- a/playwright-e2e/pages/gatekeeping-listing.ts +++ b/playwright-e2e/pages/gatekeeping-listing.ts @@ -61,10 +61,8 @@ export class GatekeepingListing extends HearingDetailsMixin(BasePage) } async addHighCourtJudgeAndCompleteGatekeepingListing() { - await this.page.getByLabel('Search for Judge (Optional)').click(); await this.page.getByLabel('Search for Judge (Optional)').fill('Arthur Ramirez'); - await this.page.waitForSelector('span:text("His Honour Judge Arthur Ramirez (HHJ.Arthur.Ramirez@ejudiciary.net)")'); - await this.page.getByText('His Honour Judge Arthur Ramirez (HHJ.Arthur.Ramirez@ejudiciary.net)').click(); + await this.page.getByText('Mr Arthur Ramirez (HHJ.Arthur').click(); await this.clickContinue(); await this.completeHearingDetails(); await this.page.getByRole('radio', { name: 'Yes' }).check(); diff --git a/playwright-e2e/pages/share-case.ts b/playwright-e2e/pages/share-case.ts index df8c344a181..1a51b1ef233 100644 --- a/playwright-e2e/pages/share-case.ts +++ b/playwright-e2e/pages/share-case.ts @@ -11,7 +11,7 @@ export class ShareCase extends BasePage { public constructor(page: Page) { super(page); - this.selectCaseChckBox = page.getByLabel('Select all'); + this.selectCaseChckBox = page.getByRole('row', { name: 'Case name ▼ FamilyMan case' }); this.shareCaseButton = page.getByRole('button', {name: 'Share Case'}); this.orgUserEmailText = page.getByLabel('Search by name or email'); this.addButton = page.getByRole('button', {name: 'Add user'}); @@ -20,7 +20,7 @@ export class ShareCase extends BasePage { } async shareCaseWithinOrg(userEmail: string) { - await this.selectCaseChckBox.check(); + await this.selectCaseChckBox.getByLabel('').check(); await this.shareCaseButton.click(); await this.orgUserEmailText.click(); await this.orgUserEmailText.pressSequentially(`${userEmail}`,{delay: 800}) diff --git a/playwright.config.ts b/playwright.config.ts index 3fc6210898c..856a756bf91 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -16,7 +16,7 @@ export default defineConfig({ /* Run tests in files in parallel */ fullyParallel: true, timeout: 3*60*1000, //each test execution time is set to 3 min - expect: { timeout: 1*45*1000 }, //wait time for the assertion to be true 45 sec + expect: { timeout: 1*110*1000 }, //wait time for the assertion to be true 110 sec /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, diff --git a/service/src/functionalTest/resources/case-submission/application-draft.txt b/service/src/functionalTest/resources/case-submission/application-draft.txt index ee7175420fb..1cb2d5697ab 100644 --- a/service/src/functionalTest/resources/case-submission/application-draft.txt +++ b/service/src/functionalTest/resources/case-submission/application-draft.txt @@ -153,4 +153,6 @@ Other relevant proceedings - Annex documents +The applicant understands that proceedings for contempt of court may be brought against anyone who makes, or causes to be made, a false statement in a document verified by a statement of truth without an honest belief in its truth. + I, james@swansea.gov.uk (local-authority), believe that the facts stated in this application are true. diff --git a/service/src/functionalTest/resources/case-submission/application.txt b/service/src/functionalTest/resources/case-submission/application.txt index 06c7cf06ba9..8d309f7996c 100644 --- a/service/src/functionalTest/resources/case-submission/application.txt +++ b/service/src/functionalTest/resources/case-submission/application.txt @@ -153,4 +153,6 @@ Other relevant proceedings - Annex documents +The applicant understands that proceedings for contempt of court may be brought against anyone who makes, or causes to be made, a false statement in a document verified by a statement of truth without an honest belief in its truth. + I, james@swansea.gov.uk (local-authority), believe that the facts stated in this application are true. diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ChildControllerSubmittedTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ChildControllerSubmittedTest.java index e594fc1382b..90fc53b7e86 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ChildControllerSubmittedTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ChildControllerSubmittedTest.java @@ -56,7 +56,6 @@ import static uk.gov.hmcts.reform.fpl.enums.SolicitorRole.CHILDSOLICITORA; import static uk.gov.hmcts.reform.fpl.enums.State.SUBMITTED; import static uk.gov.hmcts.reform.fpl.service.ccd.CoreCaseDataService.UPDATE_CASE_EVENT; -import static uk.gov.hmcts.reform.fpl.utils.AssertionHelper.checkUntil; import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; @WebMvcTest(ChildController.class) @@ -206,7 +205,7 @@ void shouldUpdateRepresentativeAccess() { } @Test - void shouldSendNotificationsToRegisteredRepresentatives() { + void shouldSendNotificationsToRegisteredRepresentatives() throws NotificationClientException { CaseData caseData = CaseData.builder() .id(CASE_ID) .state(NON_RESTRICTED_STATE) @@ -251,26 +250,24 @@ void shouldSendNotificationsToRegisteredRepresentatives() { postSubmittedEvent(toCallBackRequest(caseData, caseDataBefore)); - checkUntil(() -> - verify(notificationClient).sendEmail( - REGISTERED_RESPONDENT_SOLICITOR_TEMPLATE, - MAIN_SOLICITOR_EMAIL, - Map.of( - "salutation", format("Dear %s %s", MAIN_SOLICITOR_FIRST_NAME, MAIN_SOLICITOR_LAST_NAME), - "clientFullName", format("%s %s", CHILD_NAME_1, CHILD_SURNAME_1), - "localAuthority", LOCAL_AUTHORITY_1_NAME, - "ccdNumber", CASE_ID.toString(), - "caseName", CASE_NAME, - "manageOrgLink", "https://manage-org.platform.hmcts.net", - "childLastName", CHILD_SURNAME_1 - ), - "localhost/" + CASE_ID - ) + verify(notificationClient, timeout(ASYNC_METHOD_CALL_TIMEOUT)).sendEmail( + REGISTERED_RESPONDENT_SOLICITOR_TEMPLATE, + MAIN_SOLICITOR_EMAIL, + Map.of( + "salutation", format("Dear %s %s", MAIN_SOLICITOR_FIRST_NAME, MAIN_SOLICITOR_LAST_NAME), + "clientFullName", format("%s %s", CHILD_NAME_1, CHILD_SURNAME_1), + "localAuthority", LOCAL_AUTHORITY_1_NAME, + "ccdNumber", CASE_ID.toString(), + "caseName", CASE_NAME, + "manageOrgLink", "https://manage-org.platform.hmcts.net", + "childLastName", CHILD_SURNAME_1 + ), + "localhost/" + CASE_ID ); } @Test - void shouldSendNotificationsToUnregisteredRepresentatives() { + void shouldSendNotificationsToUnregisteredRepresentatives() throws NotificationClientException { CaseData caseData = CaseData.builder() .id(CASE_ID) .state(NON_RESTRICTED_STATE) @@ -315,19 +312,17 @@ void shouldSendNotificationsToUnregisteredRepresentatives() { postSubmittedEvent(toCallBackRequest(caseData, caseDataBefore)); - checkUntil(() -> - verify(notificationClient).sendEmail( - UNREGISTERED_RESPONDENT_SOLICITOR_TEMPLATE, - MAIN_SOLICITOR_EMAIL, - Map.of( - "ccdNumber", "1234-5678-9012-3456", - "localAuthority", LOCAL_AUTHORITY_1_NAME, - "clientFullName", format("%s %s", CHILD_NAME_1, CHILD_SURNAME_1), - "caseName", CASE_NAME, - "childLastName", CHILD_SURNAME_1 - ), - "localhost/" + CASE_ID - ) + verify(notificationClient, timeout(ASYNC_METHOD_CALL_TIMEOUT)).sendEmail( + UNREGISTERED_RESPONDENT_SOLICITOR_TEMPLATE, + MAIN_SOLICITOR_EMAIL, + Map.of( + "ccdNumber", "1234-5678-9012-3456", + "localAuthority", LOCAL_AUTHORITY_1_NAME, + "clientFullName", format("%s %s", CHILD_NAME_1, CHILD_SURNAME_1), + "caseName", CASE_NAME, + "childLastName", CHILD_SURNAME_1 + ), + "localhost/" + CASE_ID ); } @@ -412,7 +407,7 @@ void shouldRevokeAccessAndSendNotificationsWhenLegalCounselRemoved() throws Noti "salutation", "Dear first last" ); - verify(notificationClient).sendEmail( + verify(notificationClient, timeout(ASYNC_METHOD_CALL_TIMEOUT)).sendEmail( LEGAL_COUNSELLOR_REMOVED_EMAIL_TEMPLATE, legalCounsellorEmail, notifyData, "localhost/" + CASE_ID ); } diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersControllerInitialSectionMidEventTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersControllerInitialSectionMidEventTest.java index 88bb1ec2fb3..af11712a14a 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersControllerInitialSectionMidEventTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersControllerInitialSectionMidEventTest.java @@ -123,6 +123,7 @@ void shouldPrePopulateDocumentToAmendWhenUsingAmendOperation(UUID selectedId, Do .familyAssistanceOrder(NO) .partyAllowedContactsAndConditions(NO) .manageOrdersTransparencyOrder(NO) + .nonMolestationOrder(NO) .build() ); } @@ -193,6 +194,7 @@ void shouldPrePopulateIssueDetailsSectionDataWhenCreatingBlankOrderForClosedCase .partyAllowedContactsAndConditions(NO) .familyAssistanceOrder(NO) .manageOrdersTransparencyOrder(NO) + .nonMolestationOrder(NO) .build() ); } diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersMidEventControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersMidEventControllerTest.java index 3a29dfe7eb5..7b81487f6f2 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersMidEventControllerTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersMidEventControllerTest.java @@ -129,7 +129,8 @@ class ManageOrdersMidEventControllerTest extends AbstractCallbackTest { Map.entry("leaveToChangeChildSurname", "NO"), Map.entry("partyAllowedContactsAndConditions", "NO"), Map.entry("familyAssistanceOrder", "NO"), - Map.entry("manageOrdersTransparencyOrder", "NO") + Map.entry("manageOrdersTransparencyOrder", "NO"), + Map.entry("nonMolestationOrder", "NO") )); private static final String FAMILY_MAN_CASE_NUMBER = "CASE_NUMBER"; @@ -436,7 +437,7 @@ void shouldNotReturnErrorsWhenEPOOrderDetailsAreValidForRemoveToAccommodation() @Test void shouldNotReturnErrorsWhenEPOOrderDetailsAreValidForPreventRemoval() { CaseData caseData = buildCaseData().toBuilder().manageOrdersEventData( - buildPreventRemovalEventData(Address.builder().addressLine1("test").postcode("SW").build())) + buildPreventRemovalEventData(Address.builder().addressLine1("test").postcode("SW").build())) .build(); when(docmosisGenerationService.generateDocmosisDocument(anyMap(), eq(EPO_V2), eq(PDF), eq(ENGLISH))) @@ -595,7 +596,8 @@ void orderSelectionShouldPopulateQuestionConditionHolderForC35a() { Map.entry("leaveToChangeChildSurname", "NO"), Map.entry("partyAllowedContactsAndConditions", "NO"), Map.entry("familyAssistanceOrder", "NO"), - Map.entry("manageOrdersTransparencyOrder", "NO") + Map.entry("manageOrdersTransparencyOrder", "NO"), + Map.entry("nonMolestationOrder", "NO") ); assertThat(response.getData().get("orderTempQuestions")).isEqualTo(expectedQuestions); @@ -658,7 +660,8 @@ void orderSelectionShouldPopulateQuestionConditionHolderForC33() { Map.entry("leaveToChangeChildSurname", "NO"), Map.entry("partyAllowedContactsAndConditions", "NO"), Map.entry("familyAssistanceOrder", "NO"), - Map.entry("manageOrdersTransparencyOrder", "NO") + Map.entry("manageOrdersTransparencyOrder", "NO"), + Map.entry("nonMolestationOrder", "NO") ); assertThat(response.getData().get("orderTempQuestions")).isEqualTo(expectedQuestions); diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/applicant/ApplicantLocalAuthorityControllerSubmittedTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/applicant/ApplicantLocalAuthorityControllerSubmittedTest.java index 170101512e8..b60433b4610 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/applicant/ApplicantLocalAuthorityControllerSubmittedTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/applicant/ApplicantLocalAuthorityControllerSubmittedTest.java @@ -15,6 +15,7 @@ import static org.apache.commons.lang3.RandomUtils.nextLong; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; import static uk.gov.hmcts.reform.fpl.Constants.LOCAL_AUTHORITY_1_CODE; import static uk.gov.hmcts.reform.fpl.enums.ColleagueRole.SOLICITOR; @@ -55,7 +56,7 @@ void shouldUpdateTaskListWhenCaseInOpenState() { postSubmittedEvent(toCallBackRequest(caseData, caseDataBefore)); - verify(coreCaseDataService).performPostSubmitCallback( + verify(coreCaseDataService, timeout(ASYNC_METHOD_CALL_TIMEOUT)).performPostSubmitCallback( eq(caseData.getId()), eq("internal-update-task-list"), any()); @@ -78,7 +79,7 @@ void shouldUpdateCaseSummaryWhenCaseNotInOpenState() { postSubmittedEvent(toCallBackRequest(caseData, caseDataBefore)); - verify(coreCaseDataService).performPostSubmitCallback( + verify(coreCaseDataService, timeout(ASYNC_METHOD_CALL_TIMEOUT)).performPostSubmitCallback( eq(caseData.getId()), eq("internal-update-case-summary"), any()); diff --git a/service/src/integrationTest/resources/application-integration-test.yaml b/service/src/integrationTest/resources/application-integration-test.yaml index 0f283ee1d7a..1e354753d37 100644 --- a/service/src/integrationTest/resources/application-integration-test.yaml +++ b/service/src/integrationTest/resources/application-integration-test.yaml @@ -115,8 +115,8 @@ fpl: mla_to_local_authorities: mapping: 'ORG-LA-2=>test1' system_update: - username: ${SYSTEM_UPDATE_USER_USERNAME} - password: ${SYSTEM_UPDATE_USER_PASSWORD} + username: ${SYSTEM_UPDATE_USER_USERNAME:} + password: ${SYSTEM_UPDATE_USER_PASSWORD:} ctsc_inbox: 'FamilyPublicLaw+ctsc@gmail.com' court_to_court_admin: mapping: "344=>FamilyPublicLaw+ctsc@gmail.com;332=>FamilyPublicLaw+PublicLawEmail@gmail.com" diff --git a/service/src/integrationTest/resources/c110a-Welsh.txt b/service/src/integrationTest/resources/c110a-Welsh.txt index 4c87a858657..2908a79124e 100644 --- a/service/src/integrationTest/resources/c110a-Welsh.txt +++ b/service/src/integrationTest/resources/c110a-Welsh.txt @@ -310,4 +310,5 @@ French authorities were involved Achosion eraill Achosion perthnasol eraill Ie Dogfennau Ategol +Mae’r ceisydd yn deall y gellir dwyn achos dirmyg llys yn erbyn unrhyw un sy’n gwneud datganiad anwir, neu sy’n achosi i ddatganiad anwir gael ei wneud mewn dogfen a ddilysir gan ddatganiad gwirionedd heb gredu’n onest ei fod yn wir. Rwyf i, user name, yn credu bod y ffeithiau a nodir yn y cais hwn yn wir. diff --git a/service/src/integrationTest/resources/c110a.txt b/service/src/integrationTest/resources/c110a.txt index 5d092748742..c15ecb4e823 100644 --- a/service/src/integrationTest/resources/c110a.txt +++ b/service/src/integrationTest/resources/c110a.txt @@ -222,4 +222,6 @@ Same guardian needed No Some guardian not needed Annex documents +The applicant understands that proceedings for contempt of court may be brought against anyone who makes, or causes to be made, a false statement in a document verified by a statement of truth without an honest belief in its truth. + I, user name, believe that the facts stated in this application are true. diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/NotifyTemplates.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/NotifyTemplates.java index 57389827314..5bcebc7718e 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/NotifyTemplates.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/NotifyTemplates.java @@ -23,6 +23,7 @@ private NotifyTemplates() { public static final String PLACEMENT_ORDER_GENERATED_NOTIFICATION_TEMPLATE = "673ff6f1-2a1f-4f0a-8e3b-d2044047304d"; public static final String ORDER_ISSUED_NOTIFICATION_TEMPLATE_FOR_ADMIN = "bb40930c-a583-4868-a1f6-1e398e7554d3"; + public static final String NON_MOLESTATION_ORDER_NOTIFICATION_TEMPLATE = "f3757b68-2c94-44df-8a70-5af6a8c8fb71"; public static final String URGENT_ORDER_ISSUED_NOTIFICATION_TEMPLATE_FOR_ADMIN = "49b46d30-f719-4351-b634-9a75e700d9cb"; public static final String ORDER_ISSUED_NOTIFICATION_TEMPLATE_FOR_REPRESENTATIVES = diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersController.java index 39cc4d17445..31fcfed8dab 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageOrdersController.java @@ -12,6 +12,7 @@ import uk.gov.hmcts.reform.ccd.client.model.CallbackRequest; import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.event.ManageOrdersEventData; import uk.gov.hmcts.reform.fpl.model.order.Order; import uk.gov.hmcts.reform.fpl.model.order.OrderSection; import uk.gov.hmcts.reform.fpl.service.ccd.CoreCaseDataService; @@ -140,7 +141,7 @@ public AboutToStartOrSubmitCallbackResponse handleAboutToSubmit(@RequestBody Cal @PostMapping("/submitted") public void handleSubmittedEvent(@RequestBody CallbackRequest callbackRequest) { CaseDetails oldCaseDetails = callbackRequest.getCaseDetails(); - + ManageOrdersEventData eventData = getCaseData(oldCaseDetails).getManageOrdersEventData(); // Start event with concurrency controls CaseDetails caseDetails = coreCaseDataService.performPostSubmitCallback(oldCaseDetails.getId(), "internal-change-manage-order", postSubmitHelper::getPostSubmitUpdates, true); @@ -152,7 +153,7 @@ public void handleSubmittedEvent(@RequestBody CallbackRequest callbackRequest) { CaseData caseData = getCaseData(caseDetails); CaseData caseDataBefore = getCaseDataBefore(callbackRequest); - publishEvent(eventBuilder.build(caseData, caseDataBefore)); + publishEvent(eventBuilder.build(caseData, caseDataBefore, eventData)); } @PostMapping("/post-submit-callback/about-to-submit") diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisTemplates.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisTemplates.java index 8a6a416634f..25de410dbe9 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisTemplates.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisTemplates.java @@ -7,8 +7,8 @@ import java.util.Optional; public enum DocmosisTemplates { - C110A("FL-PLW-APP-ENG-00095.doc", "FL-PLW-APP-WEL-00753.doc", "c110a_application_%s"), - C1("FL-PLW-APP-ENG-01084.doc", null, "c1_application_%s"), + C110A("FL-PLW-APP-ENG-00095-V2.doc", "FL-PLW-APP-WEL-00753-V2.doc", "c110a_application_%s"), + C1("FL-PLW-APP-ENG-01084-V2.doc", null, "c1_application_%s"), C14_SUPPLEMENT("FL-PLW-APP-ENG-01086.doc", null, "c14_supplement_%s"), C15_SUPPLEMENT("FL-PLW-APP-ENG-01088.doc", null, "c15_supplement_%s"), C16_SUPPLEMENT("FL-PLW-APP-ENG-01083.doc", null, "c16_supplement_%s"), @@ -32,6 +32,7 @@ public enum DocmosisTemplates { A206("FL-PLW-LET-ENG-00768.doc", null, "placement_order_notification_a206"), A92("FL-PLW-HNO-ENG-notice-of-placement.doc", null, "notice_of_hearing_placement"), HIGH_COURT_SEAL("FL-PLW-ASS-ENG-HIGH-COURT-SEAL.docx", null, "high_court_seal"), + NON_MOLESTATION_ORDER("FL-PLW-GOR-ENG-non-molestation-order.doc", null, "non_molestation_order"), TRANSPARENCY_ORDER("FL-PLW-GOR-ENG-TRANSPARENCY-ORDER-TEMPLATE.doc", null, "transparency_order"); private final String template; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java index 8e4a3576672..eaac02f65ce 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java @@ -90,8 +90,8 @@ public enum DocumentType { AA_PARENT_ORDERS("Orders", null, false, false, false, null, - null, 60, null, "orders"), - JUDGEMENTS("└─ Judgements/facts and reasons", standardResolver("judgementList"), + null, 60, null, "orders"), + JUDGEMENTS("└─ Judgments/facts and reasons", standardResolver("judgementList"), false, false, false, defaultWithDocumentBuilder(), AA_PARENT_ORDERS, 70, DEFAULT_NOTIFICATION_CONFIG, "judgementsFactsAndReasons"), diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/events/order/NonMolestationOrderEvent.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/events/order/NonMolestationOrderEvent.java new file mode 100644 index 00000000000..e9c5d5db95d --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/events/order/NonMolestationOrderEvent.java @@ -0,0 +1,16 @@ +package uk.gov.hmcts.reform.fpl.events.order; + +import lombok.Value; +import uk.gov.hmcts.reform.fpl.enums.LanguageTranslationRequirement; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; +import uk.gov.hmcts.reform.fpl.model.event.ManageOrdersEventData; + +@Value +public class NonMolestationOrderEvent implements ManageOrdersEvent { + CaseData caseData; + ManageOrdersEventData eventData; + String orderTitle; + DocumentReference orderDocument; + LanguageTranslationRequirement languageTranslationRequirement; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/NonMolestationOrderEventHandler.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/NonMolestationOrderEventHandler.java new file mode 100644 index 00000000000..b19ed881dda --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/NonMolestationOrderEventHandler.java @@ -0,0 +1,101 @@ +package uk.gov.hmcts.reform.fpl.handlers; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.fpl.enums.RepresentativeServingPreferences; +import uk.gov.hmcts.reform.fpl.events.order.NonMolestationOrderEvent; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Child; +import uk.gov.hmcts.reform.fpl.model.Respondent; +import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; +import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.model.event.ManageOrdersEventData; +import uk.gov.hmcts.reform.fpl.model.notify.NotifyData; +import uk.gov.hmcts.reform.fpl.model.notify.RecipientsRequest; +import uk.gov.hmcts.reform.fpl.service.LocalAuthorityRecipientsService; +import uk.gov.hmcts.reform.fpl.service.email.NotificationService; +import uk.gov.hmcts.reform.fpl.service.email.RepresentativesInbox; +import uk.gov.hmcts.reform.fpl.service.email.content.OrderIssuedEmailContentProvider; +import uk.gov.hmcts.reform.fpl.service.translations.TranslationRequestService; + +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +import static uk.gov.hmcts.reform.fpl.NotifyTemplates.NON_MOLESTATION_ORDER_NOTIFICATION_TEMPLATE; +import static uk.gov.hmcts.reform.fpl.enums.IssuedOrderType.GENERATED_ORDER; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.findElement; + +@Slf4j +@Component +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class NonMolestationOrderEventHandler { + private final TranslationRequestService translationRequestService; + private final OrderIssuedEmailContentProvider orderIssuedEmailContentProvider; + private final LocalAuthorityRecipientsService localAuthorityRecipients; + private final RepresentativesInbox representativesInbox; + private final NotificationService notificationService; + + @EventListener + public void notifyTranslationTeam(NonMolestationOrderEvent event) { + translationRequestService.sendRequest(event.getCaseData(), + Optional.of(event.getLanguageTranslationRequirement()), + event.getOrderDocument(), event.getOrderTitle()); + } + + @EventListener + public void notifyParties(NonMolestationOrderEvent orderEvent) { + final ManageOrdersEventData eventData = orderEvent.getEventData(); + final CaseData caseData = orderEvent.getCaseData(); + final DocumentReference orderDocument = orderEvent.getOrderDocument(); + final String applicantSelected = eventData.getManageOrdersNonMolestationOrderApplicant().getValueCode(); + + Set recipient = new HashSet<>(); + + if ("applicant".equals(applicantSelected)) { + recipient.addAll(localAuthorityRecipients.getRecipients(RecipientsRequest.builder() + .caseData(caseData) + .secondaryLocalAuthorityExcluded(true) + .legalRepresentativesExcluded(true) + .build())); + } else if ("secondaryLocalAuthority".equals(applicantSelected)) { + recipient.addAll(localAuthorityRecipients.getRecipients(RecipientsRequest.builder() + .caseData(caseData) + .designatedLocalAuthorityExcluded(true) + .legalRepresentativesExcluded(true) + .build())); + } else { + UUID uuid = UUID.fromString(applicantSelected); + List> respondentSelected = + findElement(uuid, caseData.getAllRespondents()).stream().toList(); + + if (!respondentSelected.isEmpty()) { + recipient.addAll(representativesInbox.getRespondentSolicitorEmailsFromList(respondentSelected, + RepresentativeServingPreferences.DIGITAL_SERVICE)); + recipient.addAll(representativesInbox.getRespondentSolicitorEmailsFromList(respondentSelected, + RepresentativeServingPreferences.EMAIL)); + } else { + List> childSelected = findElement(uuid, caseData.getAllChildren()).stream().toList(); + recipient.addAll(representativesInbox.getChildrenSolicitorEmailsFromList(childSelected, + RepresentativeServingPreferences.DIGITAL_SERVICE)); + recipient.addAll(representativesInbox.getChildrenSolicitorEmailsFromList(childSelected, + RepresentativeServingPreferences.EMAIL)); + } + } + + if (recipient.isEmpty()) { + log.warn("No valid recipient for Non-molestation order"); + } else { + final NotifyData notifyData = orderIssuedEmailContentProvider.getNotifyDataWithCaseUrl(caseData, + orderDocument, GENERATED_ORDER); + + notificationService.sendEmail(NON_MOLESTATION_ORDER_NOTIFICATION_TEMPLATE, recipient, notifyData, + caseData.getId()); + } + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java index fc49941edeb..a744ec3c0bf 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java @@ -61,6 +61,7 @@ public class ManageOrdersEventData { String manageOrdersIncludePhrase; List manageOrdersMultiSelectListForC43; String manageOrdersRecitalsAndPreambles; + String manageOrdersRecitalsAndPreamblesOptional; String manageOrdersIsByConsent; String manageOrdersChildrenDescription; String manageOrdersCareOrderIssuedCourt; @@ -152,6 +153,10 @@ public class ManageOrdersEventData { String manageOrdersParagraphs; String manageOrdersCostOrders; + String manageOrdersNonMolestationOrder; + DynamicList manageOrdersNonMolestationOrderApplicant; + DynamicList manageOrdersNonMolestationOrderRespondent; + TransparencyOrderExpirationType manageOrdersTransparencyOrderExpiration; LocalDate manageOrdersTransparencyOrderEndDate; String manageOrdersTransparencyOrderPublishInformationDetails; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java index 386de6a67e6..2c8cfcf6fdc 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java @@ -39,6 +39,7 @@ import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.MANAGE_ORDER_END_DATE_WITH_END_OF_PROCEEDINGS; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.MANAGE_ORDER_END_DATE_WITH_MONTH; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.NEED_SEALING; +import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.NON_MOLESTATION_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.ORDER_BY_CONSENT; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.ORDER_PLACED_CHILD_IN_CUSTODY; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.ORDER_TO_AMEND; @@ -528,6 +529,22 @@ public enum Order { REVIEW_DRAFT_ORDER ) ), + FL404A_NON_MOLESTATION_ORDER( + DIGITAL, + "Non-molestation order (FL404A)", + "Section 42 Family Law Act 1996", + "Non-molestation order (FL404A)", + IsFinalOrder.NO, + List.of( + LINKED_TO_HEARING, + APPROVER, + APPROVAL_DATE, + WHICH_CHILDREN, + NON_MOLESTATION_ORDER, + ORDER_BY_CONSENT, + REVIEW_DRAFT_ORDER + ) + ), FL406_POWER_OF_ARREST( MANUAL_UPLOAD, "", diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java index a3ed489b397..91f7402c107 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java @@ -131,6 +131,9 @@ public enum OrderQuestionBlock { FAMILY_ASSISTANCE_ORDER("familyAssistanceOrder", OrderSection.ORDER_DETAILS, List.of("manageOrdersPartyToBeBefriended1", "manageOrdersPartyToBeBefriended2", "manageOrdersPartyToBeBefriended3", "manageOrdersFamilyAssistanceEndDate")), + NON_MOLESTATION_ORDER("nonMolestationOrder", OrderSection.ORDER_DETAILS, + List.of("manageOrdersRecitalsAndPreamblesOptional", "manageOrdersNonMolestationOrder", + "manageOrdersNonMolestationOrderApplicant", "manageOrdersNonMolestationOrderRespondent")), TRANSPARENCY_ORDER_BLOCK("manageOrdersTransparencyOrder", OrderSection.ORDER_DETAILS, List.of("manageOrdersTransparencyOrderExpiration", "manageOrdersTransparencyOrderEndDate", "manageOrdersTransparencyOrderPublishInformationLabel", diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderTempQuestions.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderTempQuestions.java index 3b9876557fa..7667b4cc27f 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderTempQuestions.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderTempQuestions.java @@ -54,5 +54,6 @@ public class OrderTempQuestions { String partyAllowedContactsAndConditions; String declarationOfParentage; String familyAssistanceOrder; + String nonMolestationOrder; String manageOrdersTransparencyOrder; } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/additionalapplications/ApplicantsListGenerator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/additionalapplications/ApplicantsListGenerator.java index 3e57e56b4be..e52f963d31d 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/additionalapplications/ApplicantsListGenerator.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/additionalapplications/ApplicantsListGenerator.java @@ -65,6 +65,10 @@ private String getApplicantNameFromBundle(AdditionalApplicationsBundle bundle) { } public DynamicList buildApplicantsList(CaseData caseData) { + return buildApplicantsList(caseData, true); + } + + public DynamicList buildApplicantsList(CaseData caseData, boolean withOthersOption) { List applicantsFullNames = new ArrayList<>(); @@ -84,10 +88,12 @@ public DynamicList buildApplicantsList(CaseData caseData) { applicantsFullNames.addAll(buildRespondentNameElements(caseData.getAllRespondents())); applicantsFullNames.addAll(buildChildNameElements(caseData.getAllChildren())); - applicantsFullNames.addAll(buildOthersElements(caseData.getAllOthers())); // Others to give notice - applicantsFullNames.add( - InterlocutoryApplicant.builder().code(APPLICANT_SOMEONE_ELSE).name("Someone else").build()); + if (withOthersOption) { + applicantsFullNames.addAll(buildOthersElements(caseData.getAllOthers())); // Others to give notice + applicantsFullNames.add( + InterlocutoryApplicant.builder().code(APPLICANT_SOMEONE_ELSE).name("Someone else").build()); + } return dynamicLists.asDynamicList( applicantsFullNames, diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/email/RepresentativesInbox.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/email/RepresentativesInbox.java index 65102bc9586..f3fea99d02d 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/email/RepresentativesInbox.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/email/RepresentativesInbox.java @@ -9,6 +9,7 @@ import uk.gov.hmcts.reform.fpl.enums.RepresentativeServingPreferences; import uk.gov.hmcts.reform.fpl.enums.SolicitorRole; import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Child; import uk.gov.hmcts.reform.fpl.model.Colleague; import uk.gov.hmcts.reform.fpl.model.Recipient; import uk.gov.hmcts.reform.fpl.model.Representative; @@ -66,8 +67,13 @@ public Set getRepresentativeEmailsFilteredByRole(CaseData caseData, } public Set getRespondentSolicitorEmails(CaseData caseData, - RepresentativeServingPreferences preference) { - return caseData.getAllRespondents().stream() + RepresentativeServingPreferences preference) { + return getRespondentSolicitorEmailsFromList(caseData.getAllRespondents(), preference); + } + + public Set getRespondentSolicitorEmailsFromList(List> respondents, + RepresentativeServingPreferences preference) { + return respondents.stream() .filter(respondent -> shouldSend(preference, respondent)) .map(this::extractEmailsForSolicitorAndColleagues) .flatMap(Collection::stream).toList() @@ -99,7 +105,12 @@ public Set getRepresentedSolicitorEmails(CaseData caseData, CaseRole cas public Set getChildrenSolicitorEmails(CaseData caseData, RepresentativeServingPreferences preference) { - return caseData.getAllChildren().stream() + return getChildrenSolicitorEmailsFromList(caseData.getAllChildren(), preference); + } + + public Set getChildrenSolicitorEmailsFromList(List> children, + RepresentativeServingPreferences preference) { + return children.stream() .filter(child -> shouldSend(preference, child)) .map(this::extractEmailsForSolicitorAndColleagues) .flatMap(Collection::stream).toList() diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrdersEventBuilder.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrdersEventBuilder.java index d805d4600d8..f88b5e161f6 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrdersEventBuilder.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrdersEventBuilder.java @@ -7,8 +7,10 @@ import uk.gov.hmcts.reform.fpl.events.order.GeneratedOrderEvent; import uk.gov.hmcts.reform.fpl.events.order.GeneratedPlacementOrderEvent; import uk.gov.hmcts.reform.fpl.events.order.ManageOrdersEvent; +import uk.gov.hmcts.reform.fpl.events.order.NonMolestationOrderEvent; import uk.gov.hmcts.reform.fpl.model.CaseData; import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.model.event.ManageOrdersEventData; import uk.gov.hmcts.reform.fpl.model.interfaces.AmendableOrder; import uk.gov.hmcts.reform.fpl.model.order.generated.GeneratedOrder; import uk.gov.hmcts.reform.fpl.service.orders.amendment.find.AmendedOrderFinder; @@ -18,6 +20,7 @@ import java.util.Optional; import static uk.gov.hmcts.reform.fpl.model.order.Order.A70_PLACEMENT_ORDER; +import static uk.gov.hmcts.reform.fpl.model.order.Order.FL404A_NON_MOLESTATION_ORDER; @Component @RequiredArgsConstructor(onConstructor_ = {@Autowired}) @@ -25,7 +28,7 @@ public class ManageOrdersEventBuilder { private final SealedOrderHistoryService historyService; private final List> finders; - public ManageOrdersEvent build(CaseData caseData, CaseData caseDataBefore) { + public ManageOrdersEvent build(CaseData caseData, CaseData caseDataBefore, ManageOrdersEventData eventData) { List> currentOrders = caseData.getOrderCollection(); List> oldOrders = caseDataBefore.getOrderCollection(); @@ -36,6 +39,13 @@ public ManageOrdersEvent build(CaseData caseData, CaseData caseDataBefore) { return new GeneratedPlacementOrderEvent(caseData, lastGeneratedOrder.getDocument(), lastGeneratedOrder.getNotificationDocument()); + } else if (FL404A_NON_MOLESTATION_ORDER.name().equals(lastGeneratedOrder.getOrderType())) { + return new NonMolestationOrderEvent(caseData, + eventData, + lastGeneratedOrder.asLabel(), + lastGeneratedOrder.getDocument(), + lastGeneratedOrder.getTranslationRequirements() + ); } else { return new GeneratedOrderEvent( caseData, diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/NonMolestationOrderDocumentParameters.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/NonMolestationOrderDocumentParameters.java new file mode 100644 index 00000000000..9fbc856e0a3 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/NonMolestationOrderDocumentParameters.java @@ -0,0 +1,22 @@ +package uk.gov.hmcts.reform.fpl.service.orders.docmosis; + +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.Value; +import lombok.experimental.SuperBuilder; +import uk.gov.hmcts.reform.fpl.model.docmosis.DocmosisRespondent; + +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Value +@SuperBuilder(toBuilder = true) +public class NonMolestationOrderDocumentParameters extends DocmosisParameters { + String applicantName; + List respondents; + String recitalsOrPreamble; + String orderByConsent; + String courtOrder; +} + diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/NonMolestationOrderDocumentParameterGenerator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/NonMolestationOrderDocumentParameterGenerator.java new file mode 100644 index 00000000000..10be3890e4b --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/NonMolestationOrderDocumentParameterGenerator.java @@ -0,0 +1,73 @@ +package uk.gov.hmcts.reform.fpl.service.orders.generator; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.fpl.enums.DocmosisTemplates; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.common.dynamic.DynamicList; +import uk.gov.hmcts.reform.fpl.model.docmosis.DocmosisRespondent; +import uk.gov.hmcts.reform.fpl.model.event.ManageOrdersEventData; +import uk.gov.hmcts.reform.fpl.model.order.Order; +import uk.gov.hmcts.reform.fpl.service.orders.docmosis.DocmosisParameters; +import uk.gov.hmcts.reform.fpl.service.orders.docmosis.NonMolestationOrderDocumentParameters; +import uk.gov.hmcts.reform.fpl.service.orders.generator.common.OrderMessageGenerator; + +import static java.time.format.FormatStyle.LONG; +import static java.util.stream.Collectors.toList; +import static org.apache.commons.lang3.StringUtils.defaultIfEmpty; +import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase; +import static uk.gov.hmcts.reform.fpl.enums.DocmosisTemplates.NON_MOLESTATION_ORDER; +import static uk.gov.hmcts.reform.fpl.enums.YesNo.YES; +import static uk.gov.hmcts.reform.fpl.model.order.Order.FL404A_NON_MOLESTATION_ORDER; +import static uk.gov.hmcts.reform.fpl.utils.DateFormatterHelper.formatLocalDateToString; + +@Component +@RequiredArgsConstructor(onConstructor_ = {@Autowired}) +public class NonMolestationOrderDocumentParameterGenerator implements DocmosisParameterGenerator { + private final OrderMessageGenerator orderMessageGenerator; + + @Override + public Order accept() { + return FL404A_NON_MOLESTATION_ORDER; + } + + @Override + public DocmosisParameters generate(CaseData caseData) { + ManageOrdersEventData eventData = caseData.getManageOrdersEventData(); + return NonMolestationOrderDocumentParameters.builder() + .orderTitle(FL404A_NON_MOLESTATION_ORDER.getTitle()) + .applicantName(getSelectedApplicantName(eventData.getManageOrdersNonMolestationOrderApplicant())) + .respondents(caseData.getRespondents1().stream() + .filter(respondentElement -> respondentElement.getId() + .equals(eventData.getManageOrdersNonMolestationOrderRespondent().getValueCodeAsUUID())) + .map(element -> element.getValue().getParty()) + .map(respondent -> { + final boolean isConfidential = + equalsIgnoreCase(respondent.getContactDetailsHidden(), YES.getValue()); + return DocmosisRespondent.builder() + .name(respondent.getFullName()) + .dateOfBirth(respondent.getDateOfBirth() != null + ? formatLocalDateToString(respondent.getDateOfBirth(), LONG) : "") + .address(!isConfidential && respondent.getAddress() != null + ? defaultIfEmpty(respondent.getAddress().getAddressAsString(", "), "") + : "") + .build(); + }) + .collect(toList())) + .recitalsOrPreamble(eventData.getManageOrdersRecitalsAndPreamblesOptional()) + .orderByConsent(orderMessageGenerator.getOrderByConsentMessage(eventData)) + .courtOrder(eventData.getManageOrdersNonMolestationOrder()) + .build(); + } + + @Override + public DocmosisTemplates template() { + return NON_MOLESTATION_ORDER; + } + + private String getSelectedApplicantName(DynamicList applicantsList) { + String labelSelected = applicantsList.getValueLabel(); + return labelSelected.substring(0, labelSelected.lastIndexOf(",")); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/OrderDocumentGeneratorHolder.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/OrderDocumentGeneratorHolder.java index 681a981aa29..9d52a861ac4 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/OrderDocumentGeneratorHolder.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/OrderDocumentGeneratorHolder.java @@ -47,6 +47,7 @@ public class OrderDocumentGeneratorHolder { c36VariationOrExtensionOfSupervisionOrdersParameterGenerator; private final A206PlacementOrderNotificationParameterGenerator a206PlacementOrderNotificationParameterGenerator; private final C42FamilyAssistanceOrderDocumentParameterGenerator c42FamilyAssistanceOrderDocumentParameterGenerator; + private final NonMolestationOrderDocumentParameterGenerator nonMolestationOrderDocumentParameterGenerator; private final TransparencyOrderParameterGenerator transparencyOrderParameterGenerator; // additional document collectors @@ -82,6 +83,7 @@ public Map getTypeToGenerator() { c34aContactWithAChildInCareOrderDocumentParameterGenerator, c63aDeclarationOfParentageDocumentParameterGenerator, c42FamilyAssistanceOrderDocumentParameterGenerator, + nonMolestationOrderDocumentParameterGenerator, transparencyOrderParameterGenerator ).stream().collect(Collectors.toMap(DocmosisParameterGenerator::accept, Function.identity())); } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/OrderSectionAndQuestionsPrePopulatorHolder.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/OrderSectionAndQuestionsPrePopulatorHolder.java index db71d108d11..44128f46ff6 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/OrderSectionAndQuestionsPrePopulatorHolder.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/OrderSectionAndQuestionsPrePopulatorHolder.java @@ -18,6 +18,7 @@ import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.FamilyAssistancePrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.LinkApplicationBlockPrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.LinkedToHearingBlockPrePopulator; +import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.NonMolestationOrderPrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.ParentalResponsibilityPrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.QuestionBlockOrderPrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.RespondentsRefusedBlockPrePopulator; @@ -61,6 +62,7 @@ public class OrderSectionAndQuestionsPrePopulatorHolder { private final ChildPlacementOrderPrePopulator childPlacementOrderPrePopulator; private final AllowedContactPrePopulator allowedContactPrePopulator; private final FamilyAssistancePrePopulator familyAssistancePrePopulator; + private final NonMolestationOrderPrePopulator nonMolestationOrderPrePopulator; // Sections private final HearingDetailsSectionPrePopulator hearingDetailsSectionPrePopulator; @@ -96,7 +98,8 @@ public Map questionBlockToPo parentalResponsibilityPrePopulator, allowedContactPrePopulator, declarationOfParentagePrePopulator, - familyAssistancePrePopulator + familyAssistancePrePopulator, + nonMolestationOrderPrePopulator ).stream().collect(Collectors.toMap( QuestionBlockOrderPrePopulator::accept, Function.identity() diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/NonMolestationOrderPrePopulator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/NonMolestationOrderPrePopulator.java new file mode 100644 index 00000000000..76bb91912e3 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/question/NonMolestationOrderPrePopulator.java @@ -0,0 +1,32 @@ +package uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock; +import uk.gov.hmcts.reform.fpl.service.additionalapplications.ApplicantsListGenerator; + +import java.util.Map; + +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.asDynamicList; + +@Component +public class NonMolestationOrderPrePopulator implements QuestionBlockOrderPrePopulator { + @Autowired + private ApplicantsListGenerator applicantsListGenerator; + + @Override + public OrderQuestionBlock accept() { + return OrderQuestionBlock.NON_MOLESTATION_ORDER; + } + + @Override + public Map prePopulate(CaseData caseData) { + return Map.of( + "manageOrdersNonMolestationOrderApplicant", + applicantsListGenerator.buildApplicantsList(caseData, false), + "manageOrdersNonMolestationOrderRespondent", + asDynamicList(caseData.getRespondents1(), respondent -> respondent.getParty().getFullName()) + ); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/handlers/NonMolestationOrderEventHandlerTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/handlers/NonMolestationOrderEventHandlerTest.java new file mode 100644 index 00000000000..e15665776b8 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/handlers/NonMolestationOrderEventHandlerTest.java @@ -0,0 +1,220 @@ +package uk.gov.hmcts.reform.fpl.handlers; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.fpl.enums.LanguageTranslationRequirement; +import uk.gov.hmcts.reform.fpl.enums.RepresentativeServingPreferences; +import uk.gov.hmcts.reform.fpl.events.order.NonMolestationOrderEvent; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Child; +import uk.gov.hmcts.reform.fpl.model.Respondent; +import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; +import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.model.common.dynamic.DynamicList; +import uk.gov.hmcts.reform.fpl.model.common.dynamic.DynamicListElement; +import uk.gov.hmcts.reform.fpl.model.event.ManageOrdersEventData; +import uk.gov.hmcts.reform.fpl.model.notify.OrderIssuedNotifyData; +import uk.gov.hmcts.reform.fpl.model.notify.RecipientsRequest; +import uk.gov.hmcts.reform.fpl.service.LocalAuthorityRecipientsService; +import uk.gov.hmcts.reform.fpl.service.email.NotificationService; +import uk.gov.hmcts.reform.fpl.service.email.RepresentativesInbox; +import uk.gov.hmcts.reform.fpl.service.email.content.OrderIssuedEmailContentProvider; +import uk.gov.hmcts.reform.fpl.service.translations.TranslationRequestService; + +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.fpl.NotifyTemplates.NON_MOLESTATION_ORDER_NOTIFICATION_TEMPLATE; +import static uk.gov.hmcts.reform.fpl.enums.IssuedOrderType.GENERATED_ORDER; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.element; + +@ExtendWith(MockitoExtension.class) +public class NonMolestationOrderEventHandlerTest { + @Mock + private TranslationRequestService translationRequestService; + @Mock + private OrderIssuedEmailContentProvider orderIssuedEmailContentProvider; + @Mock + private LocalAuthorityRecipientsService localAuthorityRecipients; + @Mock + private RepresentativesInbox representativesInbox; + @Mock + private NotificationService notificationService; + @InjectMocks + private NonMolestationOrderEventHandler underTest; + + private final DocumentReference orderDocument = mock(DocumentReference.class); + private final OrderIssuedNotifyData notifyData = mock(OrderIssuedNotifyData.class); + + private void init() { + + } + + @Test + void shouldSendTranslationRequest() { + CaseData caseData = CaseData.builder().build(); + ManageOrdersEventData manageOrdersEventData = ManageOrdersEventData.builder().build(); + NonMolestationOrderEvent event = new NonMolestationOrderEvent(caseData, manageOrdersEventData, + "Non molestation order", + orderDocument, + LanguageTranslationRequirement.ENGLISH_TO_WELSH + ); + + underTest.notifyTranslationTeam(event); + + verify(translationRequestService).sendRequest(caseData, + Optional.of(LanguageTranslationRequirement.ENGLISH_TO_WELSH), + orderDocument, "Non molestation order"); + } + + @Test + void shouldNotifyDesignatedLaIfSelectedAsApplicant() { + CaseData caseData = mock(CaseData.class); + when(caseData.getId()).thenReturn(1L); + + ManageOrdersEventData manageOrdersEventData = ManageOrdersEventData.builder() + .manageOrdersNonMolestationOrderApplicant(DynamicList.builder() + .value(DynamicListElement.builder() + .code("applicant") + .build()).build()) + .build(); + NonMolestationOrderEvent event = new NonMolestationOrderEvent(caseData, manageOrdersEventData, + "Non molestation order", + orderDocument, + LanguageTranslationRequirement.ENGLISH_TO_WELSH + ); + + when(localAuthorityRecipients.getRecipients(RecipientsRequest.builder() + .caseData(caseData) + .secondaryLocalAuthorityExcluded(true) + .legalRepresentativesExcluded(true) + .build())).thenReturn(Set.of("la@test.com")); + + when(orderIssuedEmailContentProvider.getNotifyDataWithCaseUrl(caseData, + orderDocument, GENERATED_ORDER)).thenReturn(notifyData); + + underTest.notifyParties(event); + + verify(notificationService).sendEmail(NON_MOLESTATION_ORDER_NOTIFICATION_TEMPLATE, Set.of("la@test.com"), + notifyData,caseData.getId()); + } + + @Test + void shouldNotifySecondaryLaIfSelectedAsApplicant() { + CaseData caseData = mock(CaseData.class); + when(caseData.getId()).thenReturn(1L); + + ManageOrdersEventData manageOrdersEventData = ManageOrdersEventData.builder() + .manageOrdersNonMolestationOrderApplicant(DynamicList.builder() + .value(DynamicListElement.builder() + .code("secondaryLocalAuthority") + .build()).build()) + .build(); + NonMolestationOrderEvent event = new NonMolestationOrderEvent(caseData, manageOrdersEventData, + "Non molestation order", + orderDocument, + LanguageTranslationRequirement.ENGLISH_TO_WELSH + ); + + when(localAuthorityRecipients.getRecipients(RecipientsRequest.builder() + .caseData(caseData) + .designatedLocalAuthorityExcluded(true) + .legalRepresentativesExcluded(true) + .build())).thenReturn(Set.of("la2@test.com")); + + when(orderIssuedEmailContentProvider.getNotifyDataWithCaseUrl(caseData, + orderDocument, GENERATED_ORDER)).thenReturn(notifyData); + + underTest.notifyParties(event); + + verify(notificationService).sendEmail(NON_MOLESTATION_ORDER_NOTIFICATION_TEMPLATE, Set.of("la2@test.com"), + notifyData,caseData.getId()); + } + + @Test + void shouldNotifyRespondentSolicitorIfSelectedAsApplicant() { + UUID selectedUuid = UUID.randomUUID(); + Respondent selectedRespondent = mock(Respondent.class); + List> respondents = List.of(element(selectedUuid, selectedRespondent)); + + CaseData caseData = mock(CaseData.class); + when(caseData.getId()).thenReturn(1L); + when(caseData.getAllRespondents()).thenReturn(respondents); + + ManageOrdersEventData manageOrdersEventData = ManageOrdersEventData.builder() + .manageOrdersNonMolestationOrderApplicant(DynamicList.builder() + .value(DynamicListElement.builder() + .code(selectedUuid.toString()) + .build()).build()) + .build(); + + when(orderIssuedEmailContentProvider.getNotifyDataWithCaseUrl(caseData, + orderDocument, GENERATED_ORDER)).thenReturn(notifyData); + when(representativesInbox.getRespondentSolicitorEmailsFromList(respondents, + RepresentativeServingPreferences.DIGITAL_SERVICE)) + .thenReturn(new HashSet<>(Set.of("respondent_digital@test.com"))); + when(representativesInbox.getRespondentSolicitorEmailsFromList(respondents, + RepresentativeServingPreferences.EMAIL)) + .thenReturn(new HashSet<>(Set.of("respondent_email@test.com"))); + + NonMolestationOrderEvent event = new NonMolestationOrderEvent(caseData, manageOrdersEventData, + "Non molestation order", + orderDocument, + LanguageTranslationRequirement.ENGLISH_TO_WELSH + ); + + underTest.notifyParties(event); + + verify(notificationService).sendEmail(NON_MOLESTATION_ORDER_NOTIFICATION_TEMPLATE, + Set.of("respondent_digital@test.com", "respondent_email@test.com"), + notifyData,caseData.getId()); + } + + @Test + void shouldNotifyChildSolicitorIfSelectedAsApplicant() { + UUID selectedUuid = UUID.randomUUID(); + Child selectedChild = mock(Child.class); + List> children = List.of(element(selectedUuid, selectedChild)); + + CaseData caseData = mock(CaseData.class); + when(caseData.getId()).thenReturn(1L); + when(caseData.getAllChildren()).thenReturn(children); + + ManageOrdersEventData manageOrdersEventData = ManageOrdersEventData.builder() + .manageOrdersNonMolestationOrderApplicant(DynamicList.builder() + .value(DynamicListElement.builder() + .code(selectedUuid.toString()) + .build()).build()) + .build(); + + when(orderIssuedEmailContentProvider.getNotifyDataWithCaseUrl(caseData, + orderDocument, GENERATED_ORDER)).thenReturn(notifyData); + when(representativesInbox.getChildrenSolicitorEmailsFromList(children, + RepresentativeServingPreferences.DIGITAL_SERVICE)) + .thenReturn(new HashSet<>(Set.of("child_digital@test.com"))); + when(representativesInbox.getChildrenSolicitorEmailsFromList(children, + RepresentativeServingPreferences.EMAIL)) + .thenReturn(new HashSet<>(Set.of("child_email@test.com"))); + + NonMolestationOrderEvent event = new NonMolestationOrderEvent(caseData, manageOrdersEventData, + "Non molestation order", + orderDocument, + LanguageTranslationRequirement.ENGLISH_TO_WELSH + ); + + underTest.notifyParties(event); + + verify(notificationService).sendEmail(NON_MOLESTATION_ORDER_NOTIFICATION_TEMPLATE, + Set.of("child_digital@test.com", "child_email@test.com"), + notifyData,caseData.getId()); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/model/order/OrderTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/model/order/OrderTest.java index 38c502421e3..3922fbf1a97 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/model/order/OrderTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/model/order/OrderTest.java @@ -42,6 +42,7 @@ import static uk.gov.hmcts.reform.fpl.model.order.Order.C45A_PARENTAL_RESPONSIBILITY_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.Order.C47A_APPOINTMENT_OF_A_CHILDRENS_GUARDIAN; import static uk.gov.hmcts.reform.fpl.model.order.Order.C63A_DECLARATION_OF_PARENTAGE; +import static uk.gov.hmcts.reform.fpl.model.order.Order.FL404A_NON_MOLESTATION_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.Order.TRANSPARENCY_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.OrderSection.CHILDREN_DETAILS; import static uk.gov.hmcts.reform.fpl.model.order.OrderSection.HEARING_DETAILS; @@ -101,6 +102,8 @@ void fileExtension() { .isEqualTo("c63a_declaration_of_parentage.pdf"); assertThat(C42_FAMILY_ASSISTANCE_ORDER.fileName(RenderFormat.PDF)) .isEqualTo("c42_family_assistance_order.pdf"); + assertThat(FL404A_NON_MOLESTATION_ORDER.fileName(RenderFormat.PDF)) + .isEqualTo("fl404a_non_molestation_order.pdf"); } @ParameterizedTest @@ -137,6 +140,7 @@ void firstSection() { assertThat(C34A_CONTACT_WITH_A_CHILD_IN_CARE.firstSection()).isEqualTo(HEARING_DETAILS); assertThat(C63A_DECLARATION_OF_PARENTAGE.firstSection()).isEqualTo(HEARING_DETAILS); assertThat(C42_FAMILY_ASSISTANCE_ORDER.firstSection()).isEqualTo(ISSUING_DETAILS); + assertThat(FL404A_NON_MOLESTATION_ORDER.firstSection()).isEqualTo(HEARING_DETAILS); } @ParameterizedTest @@ -286,6 +290,10 @@ private static Stream sectionsWithNext() { Arguments.of(C44A_LEAVE_TO_CHANGE_A_SURNAME, REVIEW, Optional.empty()), Arguments.of(C34A_CONTACT_WITH_A_CHILD_IN_CARE, REVIEW, Optional.empty()), Arguments.of(C63A_DECLARATION_OF_PARENTAGE, REVIEW, Optional.empty()), + Arguments.of(FL404A_NON_MOLESTATION_ORDER, HEARING_DETAILS, Optional.of(ISSUING_DETAILS)), + Arguments.of(FL404A_NON_MOLESTATION_ORDER, ISSUING_DETAILS, Optional.of(CHILDREN_DETAILS)), + Arguments.of(FL404A_NON_MOLESTATION_ORDER, CHILDREN_DETAILS, Optional.of(ORDER_DETAILS)), + Arguments.of(FL404A_NON_MOLESTATION_ORDER, ORDER_DETAILS, Optional.of(REVIEW)), Arguments.of(TRANSPARENCY_ORDER, ISSUING_DETAILS, Optional.of(ORDER_DETAILS)), Arguments.of(TRANSPARENCY_ORDER, ORDER_DETAILS, Optional.of(REVIEW)), Arguments.of(TRANSPARENCY_ORDER, REVIEW, Optional.empty()) diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/additionalapplications/ApplicantsListGeneratorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/additionalapplications/ApplicantsListGeneratorTest.java index 81b9149c573..adb66b1401f 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/additionalapplications/ApplicantsListGeneratorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/additionalapplications/ApplicantsListGeneratorTest.java @@ -106,6 +106,19 @@ void shouldReturnSomeoneElseWhenLocalAuthorityNameAndRespondentsAndOthersDoNotEx .build()); } + @Test + void shouldReturnWithoutOthers() { + DynamicList actualDynamicList = underTest.buildApplicantsList(caseData, false); + + assertThat(actualDynamicList.getListItems()) + .extracting(DynamicListElement::getLabel) + .containsExactly("Swansea local authority, Applicant", + RESPONDENT_PARTY_1.getFullName() + ", Respondent 1", + RESPONDENT_PARTY_2.getFullName() + ", Respondent 2", + CHILD_PARTY_1.getFullName() + ", Child 1", + CHILD_PARTY_2.getFullName() + ", Child 2"); + } + @ParameterizedTest @MethodSource("additionalApplicationBundlesData") void shouldReturnApplicantNameAndType(AdditionalApplicationsBundle bundle, String name, ApplicantType type) { diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculatorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculatorTest.java index e0b6b26adfa..154cc957d6e 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculatorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculatorTest.java @@ -57,6 +57,7 @@ void calculate() { "manageOrdersSetMonthsEndDate", "manageOrdersMultiSelectListForC43", "manageOrdersRecitalsAndPreambles", + "manageOrdersRecitalsAndPreamblesOptional", "orderPreview", "manageOrdersIsFinalOrder", "manageOrdersCloseCase", @@ -134,6 +135,9 @@ void calculate() { "manageOrdersParagraphs", "manageOrdersCostOrders", "manageOrdersPreamblesText", + "manageOrdersNonMolestationOrder", + "manageOrdersNonMolestationOrderApplicant", + "manageOrdersNonMolestationOrderRespondent", "manageOrdersTransparencyOrderExpiration", "manageOrdersTransparencyOrderEndDate", "manageOrdersTransparencyOrderPublishInformationLabel", diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrdersEventBuilderTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrdersEventBuilderTest.java index 3f460e5a9f5..b647f639589 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrdersEventBuilderTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrdersEventBuilderTest.java @@ -9,10 +9,12 @@ import uk.gov.hmcts.reform.fpl.events.order.AmendedOrderEvent; import uk.gov.hmcts.reform.fpl.events.order.GeneratedOrderEvent; import uk.gov.hmcts.reform.fpl.events.order.GeneratedPlacementOrderEvent; +import uk.gov.hmcts.reform.fpl.events.order.NonMolestationOrderEvent; import uk.gov.hmcts.reform.fpl.model.CaseData; import uk.gov.hmcts.reform.fpl.model.Other; import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.model.event.ManageOrdersEventData; import uk.gov.hmcts.reform.fpl.model.interfaces.AmendableOrder; import uk.gov.hmcts.reform.fpl.model.order.Order; import uk.gov.hmcts.reform.fpl.model.order.generated.GeneratedOrder; @@ -44,6 +46,7 @@ class ManageOrdersEventBuilderTest { private final DocumentReference orderNotificationDocument = mock(DocumentReference.class); private final GeneratedOrder order = mock(GeneratedOrder.class); private final CaseData caseDataBefore = mock(CaseData.class); + private final ManageOrdersEventData eventData = mock(ManageOrdersEventData.class); @Mock private SealedOrderHistoryService historyService; @@ -74,7 +77,7 @@ void buildAmendedOrder() { when(finder.findOrderIfPresent(caseData, caseDataBefore)).thenReturn(Optional.of(amendableOrder)); - assertThat(underTest.build(caseData, caseDataBefore)).isEqualTo( + assertThat(underTest.build(caseData, caseDataBefore, eventData)).isEqualTo( new AmendedOrderEvent(caseData, expectedDocument, "Care order", selectedOthers) ); @@ -90,7 +93,7 @@ void buildGeneratedGeneralOrder() { when(order.asLabel()).thenReturn(ORDER_TITLE); when(order.getTranslationRequirements()).thenReturn(TRANSLATION_REQUIREMENT); - assertThat(underTest.build(caseData, caseDataBefore)).isEqualTo(new GeneratedOrderEvent(caseData, + assertThat(underTest.build(caseData, caseDataBefore, eventData)).isEqualTo(new GeneratedOrderEvent(caseData, orderDocument, TRANSLATION_REQUIREMENT, ORDER_TITLE, @@ -107,8 +110,22 @@ void buildGeneratedPlacementOrder() { when(order.asLabel()).thenReturn(ORDER_TITLE); when(order.getTranslationRequirements()).thenReturn(TRANSLATION_REQUIREMENT); - assertThat(underTest.build(caseData, caseDataBefore)) + assertThat(underTest.build(caseData, caseDataBefore, eventData)) .isEqualTo(new GeneratedPlacementOrderEvent(caseData, orderDocument, orderNotificationDocument)); } + @Test + void shouldBuildNonMolestationOrderEvent() { + CaseData caseData = CaseData.builder().orderCollection(wrapElements(order)).build(); + when(historyService.lastGeneratedOrder(caseData)).thenReturn(order); + when(order.getOrderType()).thenReturn(Order.FL404A_NON_MOLESTATION_ORDER.name()); + when(order.getDocument()).thenReturn(orderDocument); + when(order.asLabel()).thenReturn(ORDER_TITLE); + when(order.getTranslationRequirements()).thenReturn(TRANSLATION_REQUIREMENT); + + assertThat(underTest.build(caseData, caseDataBefore, eventData)) + .isEqualTo(new NonMolestationOrderEvent(caseData, eventData, ORDER_TITLE, orderDocument, + TRANSLATION_REQUIREMENT)); + } + } diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/OrderShowHideQuestionsCalculatorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/OrderShowHideQuestionsCalculatorTest.java index ead02a7f3d3..59cc5236d30 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/OrderShowHideQuestionsCalculatorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/OrderShowHideQuestionsCalculatorTest.java @@ -36,6 +36,7 @@ import static uk.gov.hmcts.reform.fpl.model.order.Order.C45A_PARENTAL_RESPONSIBILITY_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.Order.C47A_APPOINTMENT_OF_A_CHILDRENS_GUARDIAN; import static uk.gov.hmcts.reform.fpl.model.order.Order.C63A_DECLARATION_OF_PARENTAGE; +import static uk.gov.hmcts.reform.fpl.model.order.Order.FL404A_NON_MOLESTATION_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.Order.TRANSPARENCY_ORDER; class OrderShowHideQuestionsCalculatorTest { @@ -96,6 +97,7 @@ void calculateAmendment() { Map.entry("partyAllowedContactsAndConditions", "NO"), Map.entry("declarationOfParentage", "NO"), Map.entry("familyAssistanceOrder", "NO"), + Map.entry("nonMolestationOrder", "NO"), Map.entry("manageOrdersTransparencyOrder", "NO") )); } @@ -115,1014 +117,278 @@ void calculateManualUpload(Order order, Map expectedShowHideMap) } private static Stream orderWithExpectedMap() { - Map commonQuestions = Map.of( - "hearingDetails", "YES", - "linkApplication", "YES", - "approver", "YES", - "previewOrder", "YES", - "orderToAmend", "NO", - "translationRequirements", "NO", - "uploadAmendedOrder", "NO" - ); - - Map careOrderQuestions = new HashMap<>(commonQuestions); - careOrderQuestions.put("orderTitle", "NO"); + Map allQuestions = new HashMap<>(); + allQuestions.put("hearingDetails", "YES"); + allQuestions.put("linkApplication", "YES"); + allQuestions.put("approver", "YES"); + allQuestions.put("previewOrder", "YES"); + allQuestions.put("orderToAmend", "NO"); + allQuestions.put("translationRequirements", "NO"); + allQuestions.put("uploadAmendedOrder", "NO"); + allQuestions.put("orderTitle", "NO"); + allQuestions.put("furtherDirections", "NO"); + allQuestions.put("approvalDate", "NO"); + allQuestions.put("approvalDateTime", "NO"); + allQuestions.put("epoIncludePhrase", "NO"); + allQuestions.put("uploadOrderFile", "NO"); + allQuestions.put("needSealing", "NO"); + allQuestions.put("epoChildrenDescription", "NO"); + allQuestions.put("epoExpiryDate", "NO"); + allQuestions.put("epoTypeAndPreventRemoval", "NO"); + allQuestions.put("orderDetails", "NO"); + allQuestions.put("cafcassJurisdictions", "NO"); + allQuestions.put("whichChildren", "NO"); + allQuestions.put("selectSingleChild", "NO"); + allQuestions.put("reasonForSecureAccommodation", "NO"); + allQuestions.put("childLegalRepresentation", "NO"); + allQuestions.put("orderJurisdiction", "NO"); + allQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); + allQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); + allQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); + allQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); + allQuestions.put("isFinalOrder", "NO"); + allQuestions.put("closeCase", "NO"); + allQuestions.put("whichOthers", "NO"); + allQuestions.put("dischargeOfCareDetails", "NO"); + allQuestions.put("orderIsByConsent", "NO"); + allQuestions.put("appointedGuardian", "NO"); + allQuestions.put("respondentsRefused", "NO"); + allQuestions.put("refuseContactQuestions", "NO"); + allQuestions.put("parentResponsible", "NO"); + allQuestions.put("childPlacementApplications", "NO"); + allQuestions.put("childPlacementQuestions", "NO"); + allQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); + allQuestions.put("manageOrdersEducationSupervision", "NO"); + allQuestions.put("orderPlacedChildInCustody", "NO"); + allQuestions.put("manageOrdersChildAssessment", "NO"); + allQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); + allQuestions.put("leaveToChangeChildSurname", "NO"); + allQuestions.put("partyAllowedContactsAndConditions", "NO"); + allQuestions.put("declarationOfParentage", "NO"); + allQuestions.put("familyAssistanceOrder", "NO"); + allQuestions.put("nonMolestationOrder", "NO"); + allQuestions.put("manageOrdersTransparencyOrder", "NO"); + + Map careOrderQuestions = new HashMap<>(allQuestions); careOrderQuestions.put("furtherDirections", "YES"); careOrderQuestions.put("approvalDate", "YES"); - careOrderQuestions.put("approvalDateTime", "NO"); - careOrderQuestions.put("epoIncludePhrase", "NO"); - careOrderQuestions.put("uploadOrderFile", "NO"); - careOrderQuestions.put("needSealing", "NO"); - careOrderQuestions.put("epoChildrenDescription", "NO"); - careOrderQuestions.put("epoExpiryDate", "NO"); - careOrderQuestions.put("epoTypeAndPreventRemoval", "NO"); - careOrderQuestions.put("orderDetails", "NO"); - careOrderQuestions.put("cafcassJurisdictions", "NO"); careOrderQuestions.put("whichChildren", "YES"); - careOrderQuestions.put("selectSingleChild", "NO"); - careOrderQuestions.put("reasonForSecureAccommodation", "NO"); - careOrderQuestions.put("childLegalRepresentation", "NO"); - careOrderQuestions.put("orderJurisdiction", "NO"); - careOrderQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - careOrderQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - careOrderQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - careOrderQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - careOrderQuestions.put("isFinalOrder", "NO"); careOrderQuestions.put("closeCase", "YES"); - careOrderQuestions.put("whichOthers", "NO"); - careOrderQuestions.put("dischargeOfCareDetails", "NO"); - careOrderQuestions.put("orderIsByConsent", "NO"); - careOrderQuestions.put("appointedGuardian", "NO"); - careOrderQuestions.put("respondentsRefused", "NO"); - careOrderQuestions.put("refuseContactQuestions", "NO"); - careOrderQuestions.put("parentResponsible", "NO"); - careOrderQuestions.put("childPlacementApplications", "NO"); - careOrderQuestions.put("childPlacementQuestions", "NO"); - careOrderQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - careOrderQuestions.put("manageOrdersEducationSupervision", "NO"); - careOrderQuestions.put("orderPlacedChildInCustody", "NO"); - careOrderQuestions.put("manageOrdersChildAssessment", "NO"); - careOrderQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - careOrderQuestions.put("leaveToChangeChildSurname", "NO"); - careOrderQuestions.put("partyAllowedContactsAndConditions", "NO"); - careOrderQuestions.put("declarationOfParentage", "NO"); - careOrderQuestions.put("familyAssistanceOrder", "NO"); - careOrderQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map dischargeOfCareQuestions = new HashMap<>(commonQuestions); - dischargeOfCareQuestions.put("orderTitle", "NO"); + Map dischargeOfCareQuestions = new HashMap<>(allQuestions); dischargeOfCareQuestions.put("furtherDirections", "YES"); dischargeOfCareQuestions.put("approvalDate", "YES"); - dischargeOfCareQuestions.put("approvalDateTime", "NO"); - dischargeOfCareQuestions.put("epoIncludePhrase", "NO"); - dischargeOfCareQuestions.put("uploadOrderFile", "NO"); - dischargeOfCareQuestions.put("needSealing", "NO"); - dischargeOfCareQuestions.put("epoChildrenDescription", "NO"); - dischargeOfCareQuestions.put("epoExpiryDate", "NO"); - dischargeOfCareQuestions.put("epoTypeAndPreventRemoval", "NO"); - dischargeOfCareQuestions.put("orderDetails", "NO"); - dischargeOfCareQuestions.put("cafcassJurisdictions", "NO"); dischargeOfCareQuestions.put("whichChildren", "YES"); - dischargeOfCareQuestions.put("selectSingleChild", "NO"); - dischargeOfCareQuestions.put("reasonForSecureAccommodation", "NO"); - dischargeOfCareQuestions.put("childLegalRepresentation", "NO"); - dischargeOfCareQuestions.put("orderJurisdiction", "NO"); dischargeOfCareQuestions.put("dischargeOfCareDetails", "YES"); - dischargeOfCareQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - dischargeOfCareQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - dischargeOfCareQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - dischargeOfCareQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); dischargeOfCareQuestions.put("isFinalOrder", "YES"); - dischargeOfCareQuestions.put("whichOthers", "NO"); dischargeOfCareQuestions.put("closeCase", "YES"); - dischargeOfCareQuestions.put("orderIsByConsent", "NO"); - dischargeOfCareQuestions.put("appointedGuardian", "NO"); - dischargeOfCareQuestions.put("respondentsRefused", "NO"); - dischargeOfCareQuestions.put("refuseContactQuestions", "NO"); - dischargeOfCareQuestions.put("parentResponsible", "NO"); - dischargeOfCareQuestions.put("childPlacementApplications", "NO"); - dischargeOfCareQuestions.put("childPlacementQuestions", "NO"); - dischargeOfCareQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - dischargeOfCareQuestions.put("manageOrdersEducationSupervision", "NO"); - dischargeOfCareQuestions.put("orderPlacedChildInCustody", "NO"); - dischargeOfCareQuestions.put("manageOrdersChildAssessment", "NO"); - dischargeOfCareQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - dischargeOfCareQuestions.put("leaveToChangeChildSurname", "NO"); - dischargeOfCareQuestions.put("partyAllowedContactsAndConditions", "NO"); - dischargeOfCareQuestions.put("declarationOfParentage", "NO"); - dischargeOfCareQuestions.put("familyAssistanceOrder", "NO"); - dischargeOfCareQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map epoQuestions = new HashMap<>(commonQuestions); - epoQuestions.put("orderTitle", "NO"); + + Map epoQuestions = new HashMap<>(allQuestions); epoQuestions.put("furtherDirections", "YES"); - epoQuestions.put("approvalDate", "NO"); epoQuestions.put("approvalDateTime", "YES"); epoQuestions.put("epoIncludePhrase", "YES"); - epoQuestions.put("uploadOrderFile", "NO"); - epoQuestions.put("needSealing", "NO"); epoQuestions.put("epoChildrenDescription", "YES"); epoQuestions.put("epoExpiryDate", "YES"); epoQuestions.put("epoTypeAndPreventRemoval", "YES"); - epoQuestions.put("orderDetails", "NO"); - epoQuestions.put("cafcassJurisdictions", "NO"); epoQuestions.put("whichChildren", "YES"); - epoQuestions.put("selectSingleChild", "NO"); - epoQuestions.put("reasonForSecureAccommodation", "NO"); - epoQuestions.put("childLegalRepresentation", "NO"); - epoQuestions.put("orderJurisdiction", "NO"); - epoQuestions.put("dischargeOfCareDetails", "NO"); - epoQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - epoQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - epoQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - epoQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); epoQuestions.put("closeCase", "YES"); - epoQuestions.put("whichOthers", "NO"); epoQuestions.put("isFinalOrder", "YES"); - epoQuestions.put("orderIsByConsent", "NO"); - epoQuestions.put("appointedGuardian", "NO"); - epoQuestions.put("respondentsRefused", "NO"); - epoQuestions.put("refuseContactQuestions", "NO"); - epoQuestions.put("parentResponsible", "NO"); - epoQuestions.put("childPlacementApplications", "NO"); - epoQuestions.put("childPlacementQuestions", "NO"); - epoQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - epoQuestions.put("manageOrdersEducationSupervision", "NO"); - epoQuestions.put("orderPlacedChildInCustody", "NO"); - epoQuestions.put("manageOrdersChildAssessment", "NO"); - epoQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - epoQuestions.put("leaveToChangeChildSurname", "NO"); - epoQuestions.put("partyAllowedContactsAndConditions", "NO"); - epoQuestions.put("declarationOfParentage", "NO"); - epoQuestions.put("familyAssistanceOrder", "NO"); - epoQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map blankOrderQuestions = new HashMap<>(commonQuestions); + + Map blankOrderQuestions = new HashMap<>(allQuestions); blankOrderQuestions.put("orderTitle", "YES"); blankOrderQuestions.put("approvalDate", "YES"); - blankOrderQuestions.put("furtherDirections", "NO"); blankOrderQuestions.put("orderDetails", "YES"); - blankOrderQuestions.put("approvalDateTime", "NO"); - blankOrderQuestions.put("epoIncludePhrase", "NO"); - blankOrderQuestions.put("uploadOrderFile", "NO"); - blankOrderQuestions.put("needSealing", "NO"); - blankOrderQuestions.put("epoChildrenDescription", "NO"); - blankOrderQuestions.put("epoExpiryDate", "NO"); - blankOrderQuestions.put("epoTypeAndPreventRemoval", "NO"); blankOrderQuestions.put("whichChildren", "YES"); - blankOrderQuestions.put("selectSingleChild", "NO"); - blankOrderQuestions.put("reasonForSecureAccommodation", "NO"); - blankOrderQuestions.put("childLegalRepresentation", "NO"); - blankOrderQuestions.put("orderJurisdiction", "NO"); - blankOrderQuestions.put("dischargeOfCareDetails", "NO"); - blankOrderQuestions.put("cafcassJurisdictions", "NO"); - blankOrderQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - blankOrderQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - blankOrderQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - blankOrderQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - blankOrderQuestions.put("closeCase", "NO"); - blankOrderQuestions.put("whichOthers", "NO"); - blankOrderQuestions.put("isFinalOrder", "NO"); - blankOrderQuestions.put("orderIsByConsent", "NO"); - blankOrderQuestions.put("appointedGuardian", "NO"); - blankOrderQuestions.put("respondentsRefused", "NO"); - blankOrderQuestions.put("refuseContactQuestions", "NO"); - blankOrderQuestions.put("parentResponsible", "NO"); - blankOrderQuestions.put("childPlacementApplications", "NO"); - blankOrderQuestions.put("childPlacementQuestions", "NO"); - blankOrderQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - blankOrderQuestions.put("manageOrdersEducationSupervision", "NO"); - blankOrderQuestions.put("orderPlacedChildInCustody", "NO"); - blankOrderQuestions.put("manageOrdersChildAssessment", "NO"); - blankOrderQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - blankOrderQuestions.put("leaveToChangeChildSurname", "NO"); - blankOrderQuestions.put("partyAllowedContactsAndConditions", "NO"); - blankOrderQuestions.put("declarationOfParentage", "NO"); - blankOrderQuestions.put("familyAssistanceOrder", "NO"); - blankOrderQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map placementBlankOrderQuestions = new HashMap<>(commonQuestions); - placementBlankOrderQuestions.put("orderTitle", "NO"); + + Map placementBlankOrderQuestions = new HashMap<>(allQuestions); placementBlankOrderQuestions.put("hearingDetails", "NO"); placementBlankOrderQuestions.put("linkApplication", "NO"); placementBlankOrderQuestions.put("approvalDate", "YES"); - placementBlankOrderQuestions.put("orderDetails", "NO"); - placementBlankOrderQuestions.put("approvalDateTime", "NO"); - placementBlankOrderQuestions.put("epoIncludePhrase", "NO"); - placementBlankOrderQuestions.put("uploadOrderFile", "NO"); - placementBlankOrderQuestions.put("needSealing", "NO"); - placementBlankOrderQuestions.put("epoChildrenDescription", "NO"); - placementBlankOrderQuestions.put("epoExpiryDate", "NO"); - placementBlankOrderQuestions.put("epoTypeAndPreventRemoval", "NO"); - placementBlankOrderQuestions.put("cafcassJurisdictions", "NO"); - placementBlankOrderQuestions.put("selectSingleChild", "NO"); - placementBlankOrderQuestions.put("reasonForSecureAccommodation", "NO"); - placementBlankOrderQuestions.put("childLegalRepresentation", "NO"); - placementBlankOrderQuestions.put("orderJurisdiction", "NO"); - placementBlankOrderQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - placementBlankOrderQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - placementBlankOrderQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - placementBlankOrderQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - placementBlankOrderQuestions.put("whichOthers", "NO"); - placementBlankOrderQuestions.put("dischargeOfCareDetails", "NO"); - placementBlankOrderQuestions.put("closeCase", "NO"); - placementBlankOrderQuestions.put("whichChildren", "NO"); - placementBlankOrderQuestions.put("orderIsByConsent", "NO"); - placementBlankOrderQuestions.put("furtherDirections", "NO"); placementBlankOrderQuestions.put("isFinalOrder", "YES"); - placementBlankOrderQuestions.put("appointedGuardian", "NO"); - placementBlankOrderQuestions.put("respondentsRefused", "NO"); - placementBlankOrderQuestions.put("refuseContactQuestions", "NO"); - placementBlankOrderQuestions.put("parentResponsible", "NO"); placementBlankOrderQuestions.put("childPlacementApplications", "YES"); - placementBlankOrderQuestions.put("childPlacementQuestions", "NO"); placementBlankOrderQuestions.put("childPlacementQuestionsForBlankOrder", "YES"); - placementBlankOrderQuestions.put("manageOrdersEducationSupervision", "NO"); - placementBlankOrderQuestions.put("orderPlacedChildInCustody", "NO"); - placementBlankOrderQuestions.put("manageOrdersChildAssessment", "NO"); - placementBlankOrderQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - placementBlankOrderQuestions.put("leaveToChangeChildSurname", "NO"); - placementBlankOrderQuestions.put("partyAllowedContactsAndConditions", "NO"); - placementBlankOrderQuestions.put("declarationOfParentage", "NO"); - placementBlankOrderQuestions.put("familyAssistanceOrder", "NO"); - placementBlankOrderQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map supervisionOrderQuestions = new HashMap<>(commonQuestions); - supervisionOrderQuestions.put("orderTitle", "NO"); + + Map supervisionOrderQuestions = new HashMap<>(allQuestions); supervisionOrderQuestions.put("approvalDate", "YES"); supervisionOrderQuestions.put("furtherDirections", "YES"); - supervisionOrderQuestions.put("orderDetails", "NO"); - supervisionOrderQuestions.put("approvalDateTime", "NO"); - supervisionOrderQuestions.put("epoIncludePhrase", "NO"); - supervisionOrderQuestions.put("uploadOrderFile", "NO"); - supervisionOrderQuestions.put("needSealing", "NO"); - supervisionOrderQuestions.put("epoChildrenDescription", "NO"); - supervisionOrderQuestions.put("epoExpiryDate", "NO"); - supervisionOrderQuestions.put("epoTypeAndPreventRemoval", "NO"); - supervisionOrderQuestions.put("cafcassJurisdictions", "NO"); supervisionOrderQuestions.put("whichChildren", "YES"); - supervisionOrderQuestions.put("selectSingleChild", "NO"); - supervisionOrderQuestions.put("reasonForSecureAccommodation", "NO"); - supervisionOrderQuestions.put("childLegalRepresentation", "NO"); - supervisionOrderQuestions.put("orderJurisdiction", "NO"); - supervisionOrderQuestions.put("dischargeOfCareDetails", "NO"); supervisionOrderQuestions.put("manageOrdersExpiryDateWithMonth", "YES"); - supervisionOrderQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - supervisionOrderQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - supervisionOrderQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); supervisionOrderQuestions.put("closeCase", "YES"); - supervisionOrderQuestions.put("whichOthers", "NO"); - supervisionOrderQuestions.put("isFinalOrder", "NO"); - supervisionOrderQuestions.put("orderIsByConsent", "NO"); - supervisionOrderQuestions.put("appointedGuardian", "NO"); - supervisionOrderQuestions.put("respondentsRefused", "NO"); - supervisionOrderQuestions.put("refuseContactQuestions", "NO"); - supervisionOrderQuestions.put("parentResponsible", "NO"); - supervisionOrderQuestions.put("childPlacementApplications", "NO"); - supervisionOrderQuestions.put("childPlacementQuestions", "NO"); - supervisionOrderQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - supervisionOrderQuestions.put("manageOrdersEducationSupervision", "NO"); - supervisionOrderQuestions.put("orderPlacedChildInCustody", "NO"); - supervisionOrderQuestions.put("manageOrdersChildAssessment", "NO"); - supervisionOrderQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - supervisionOrderQuestions.put("leaveToChangeChildSurname", "NO"); - supervisionOrderQuestions.put("partyAllowedContactsAndConditions", "NO"); - supervisionOrderQuestions.put("declarationOfParentage", "NO"); - supervisionOrderQuestions.put("familyAssistanceOrder", "NO"); - supervisionOrderQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map specialGuardianshipOrderQuestions = new HashMap<>(commonQuestions); - specialGuardianshipOrderQuestions.put("orderTitle", "NO"); - specialGuardianshipOrderQuestions.put("approvalDate", "NO"); + + Map specialGuardianshipOrderQuestions = new HashMap<>(allQuestions); specialGuardianshipOrderQuestions.put("furtherDirections", "YES"); - specialGuardianshipOrderQuestions.put("orderDetails", "NO"); specialGuardianshipOrderQuestions.put("approvalDateTime", "YES"); - specialGuardianshipOrderQuestions.put("epoIncludePhrase", "NO"); - specialGuardianshipOrderQuestions.put("epoChildrenDescription", "NO"); - specialGuardianshipOrderQuestions.put("uploadOrderFile", "NO"); - specialGuardianshipOrderQuestions.put("needSealing", "NO"); - specialGuardianshipOrderQuestions.put("epoExpiryDate", "NO"); - specialGuardianshipOrderQuestions.put("epoTypeAndPreventRemoval", "NO"); - specialGuardianshipOrderQuestions.put("cafcassJurisdictions", "NO"); specialGuardianshipOrderQuestions.put("whichChildren", "YES"); - specialGuardianshipOrderQuestions.put("selectSingleChild", "NO"); - specialGuardianshipOrderQuestions.put("reasonForSecureAccommodation", "NO"); - specialGuardianshipOrderQuestions.put("childLegalRepresentation", "NO"); - specialGuardianshipOrderQuestions.put("orderJurisdiction", "NO"); - specialGuardianshipOrderQuestions.put("dischargeOfCareDetails", "NO"); - specialGuardianshipOrderQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - specialGuardianshipOrderQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - specialGuardianshipOrderQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - specialGuardianshipOrderQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); specialGuardianshipOrderQuestions.put("closeCase", "YES"); specialGuardianshipOrderQuestions.put("isFinalOrder", "YES"); specialGuardianshipOrderQuestions.put("orderIsByConsent", "YES"); - specialGuardianshipOrderQuestions.put("whichOthers", "NO"); specialGuardianshipOrderQuestions.put("appointedGuardian", "YES"); - specialGuardianshipOrderQuestions.put("respondentsRefused", "NO"); - specialGuardianshipOrderQuestions.put("refuseContactQuestions", "NO"); - specialGuardianshipOrderQuestions.put("parentResponsible", "NO"); - specialGuardianshipOrderQuestions.put("childPlacementApplications", "NO"); - specialGuardianshipOrderQuestions.put("childPlacementQuestions", "NO"); - specialGuardianshipOrderQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - specialGuardianshipOrderQuestions.put("manageOrdersEducationSupervision", "NO"); - specialGuardianshipOrderQuestions.put("orderPlacedChildInCustody", "NO"); - specialGuardianshipOrderQuestions.put("manageOrdersChildAssessment", "NO"); - specialGuardianshipOrderQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - specialGuardianshipOrderQuestions.put("leaveToChangeChildSurname", "NO"); - specialGuardianshipOrderQuestions.put("partyAllowedContactsAndConditions", "NO"); - specialGuardianshipOrderQuestions.put("declarationOfParentage", "NO"); - specialGuardianshipOrderQuestions.put("familyAssistanceOrder", "NO"); - specialGuardianshipOrderQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map appointmentOfChildrensGuardianQuestions = new HashMap<>(commonQuestions); - appointmentOfChildrensGuardianQuestions.put("orderTitle", "NO"); + + Map appointmentOfChildrensGuardianQuestions = new HashMap<>(allQuestions); appointmentOfChildrensGuardianQuestions.put("approvalDate", "YES"); appointmentOfChildrensGuardianQuestions.put("furtherDirections", "YES"); - appointmentOfChildrensGuardianQuestions.put("orderDetails", "NO"); - appointmentOfChildrensGuardianQuestions.put("approvalDateTime", "NO"); - appointmentOfChildrensGuardianQuestions.put("epoIncludePhrase", "NO"); - appointmentOfChildrensGuardianQuestions.put("uploadOrderFile", "NO"); - appointmentOfChildrensGuardianQuestions.put("needSealing", "NO"); - appointmentOfChildrensGuardianQuestions.put("epoChildrenDescription", "NO"); - appointmentOfChildrensGuardianQuestions.put("epoExpiryDate", "NO"); - appointmentOfChildrensGuardianQuestions.put("epoTypeAndPreventRemoval", "NO"); appointmentOfChildrensGuardianQuestions.put("cafcassJurisdictions", "YES"); - appointmentOfChildrensGuardianQuestions.put("whichChildren", "NO"); - appointmentOfChildrensGuardianQuestions.put("selectSingleChild", "NO"); - appointmentOfChildrensGuardianQuestions.put("reasonForSecureAccommodation", "NO"); - appointmentOfChildrensGuardianQuestions.put("childLegalRepresentation", "NO"); - appointmentOfChildrensGuardianQuestions.put("orderJurisdiction", "NO"); - appointmentOfChildrensGuardianQuestions.put("dischargeOfCareDetails", "NO"); - appointmentOfChildrensGuardianQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - appointmentOfChildrensGuardianQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - appointmentOfChildrensGuardianQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - appointmentOfChildrensGuardianQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - appointmentOfChildrensGuardianQuestions.put("closeCase", "NO"); - appointmentOfChildrensGuardianQuestions.put("isFinalOrder", "NO"); - appointmentOfChildrensGuardianQuestions.put("orderIsByConsent", "NO"); - appointmentOfChildrensGuardianQuestions.put("appointedGuardian", "NO"); - appointmentOfChildrensGuardianQuestions.put("respondentsRefused", "NO"); - appointmentOfChildrensGuardianQuestions.put("refuseContactQuestions", "NO"); - appointmentOfChildrensGuardianQuestions.put("whichOthers", "NO"); - appointmentOfChildrensGuardianQuestions.put("parentResponsible", "NO"); - appointmentOfChildrensGuardianQuestions.put("childPlacementApplications", "NO"); - appointmentOfChildrensGuardianQuestions.put("childPlacementQuestions", "NO"); - appointmentOfChildrensGuardianQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - appointmentOfChildrensGuardianQuestions.put("manageOrdersEducationSupervision", "NO"); - appointmentOfChildrensGuardianQuestions.put("orderPlacedChildInCustody", "NO"); - appointmentOfChildrensGuardianQuestions.put("manageOrdersChildAssessment", "NO"); - appointmentOfChildrensGuardianQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - appointmentOfChildrensGuardianQuestions.put("leaveToChangeChildSurname", "NO"); - appointmentOfChildrensGuardianQuestions.put("partyAllowedContactsAndConditions", "NO"); - appointmentOfChildrensGuardianQuestions.put("declarationOfParentage", "NO"); - appointmentOfChildrensGuardianQuestions.put("familyAssistanceOrder", "NO"); - appointmentOfChildrensGuardianQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map childArrangementSpecificOrder = new HashMap<>(commonQuestions); - childArrangementSpecificOrder.put("orderTitle", "NO"); + + Map childArrangementSpecificOrder = new HashMap<>(allQuestions); childArrangementSpecificOrder.put("approvalDate", "YES"); childArrangementSpecificOrder.put("furtherDirections", "YES"); childArrangementSpecificOrder.put("orderDetails", "YES"); - childArrangementSpecificOrder.put("approvalDateTime", "NO"); - childArrangementSpecificOrder.put("epoIncludePhrase", "NO"); - childArrangementSpecificOrder.put("uploadOrderFile", "NO"); - childArrangementSpecificOrder.put("needSealing", "NO"); - childArrangementSpecificOrder.put("epoChildrenDescription", "NO"); - childArrangementSpecificOrder.put("epoExpiryDate", "NO"); - childArrangementSpecificOrder.put("epoTypeAndPreventRemoval", "NO"); - childArrangementSpecificOrder.put("cafcassJurisdictions", "NO"); childArrangementSpecificOrder.put("whichChildren", "YES"); - childArrangementSpecificOrder.put("selectSingleChild", "NO"); - childArrangementSpecificOrder.put("reasonForSecureAccommodation", "NO"); - childArrangementSpecificOrder.put("childLegalRepresentation", "NO"); - childArrangementSpecificOrder.put("orderJurisdiction", "NO"); - childArrangementSpecificOrder.put("dischargeOfCareDetails", "NO"); - childArrangementSpecificOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - childArrangementSpecificOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - childArrangementSpecificOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); childArrangementSpecificOrder.put("childArrangementSpecificIssueProhibitedSteps", "YES"); childArrangementSpecificOrder.put("closeCase", "YES"); childArrangementSpecificOrder.put("isFinalOrder", "YES"); childArrangementSpecificOrder.put("orderIsByConsent", "YES"); - childArrangementSpecificOrder.put("appointedGuardian", "NO"); - childArrangementSpecificOrder.put("respondentsRefused", "NO"); - childArrangementSpecificOrder.put("refuseContactQuestions", "NO"); - childArrangementSpecificOrder.put("whichOthers", "NO"); - childArrangementSpecificOrder.put("parentResponsible", "NO"); - childArrangementSpecificOrder.put("childPlacementApplications", "NO"); - childArrangementSpecificOrder.put("childPlacementQuestions", "NO"); - childArrangementSpecificOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - childArrangementSpecificOrder.put("manageOrdersEducationSupervision", "NO"); - childArrangementSpecificOrder.put("orderPlacedChildInCustody", "NO"); - childArrangementSpecificOrder.put("manageOrdersChildAssessment", "NO"); - childArrangementSpecificOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - childArrangementSpecificOrder.put("leaveToChangeChildSurname", "NO"); - childArrangementSpecificOrder.put("partyAllowedContactsAndConditions", "NO"); - childArrangementSpecificOrder.put("declarationOfParentage", "NO"); - childArrangementSpecificOrder.put("familyAssistanceOrder", "NO"); - childArrangementSpecificOrder.put("manageOrdersTransparencyOrder", "NO"); - Map refusedContactOrderQuestions = new HashMap<>(commonQuestions); + + Map refusedContactOrderQuestions = new HashMap<>(allQuestions); refusedContactOrderQuestions.put("hearingDetails", "NO"); refusedContactOrderQuestions.put("linkApplication", "NO"); - refusedContactOrderQuestions.put("furtherDirections", "NO"); - refusedContactOrderQuestions.put("orderTitle", "NO"); refusedContactOrderQuestions.put("approvalDate", "YES"); - refusedContactOrderQuestions.put("orderDetails", "NO"); - refusedContactOrderQuestions.put("approvalDateTime", "NO"); - refusedContactOrderQuestions.put("epoIncludePhrase", "NO"); - refusedContactOrderQuestions.put("uploadOrderFile", "NO"); - refusedContactOrderQuestions.put("needSealing", "NO"); - refusedContactOrderQuestions.put("epoChildrenDescription", "NO"); - refusedContactOrderQuestions.put("epoExpiryDate", "NO"); - refusedContactOrderQuestions.put("epoTypeAndPreventRemoval", "NO"); - refusedContactOrderQuestions.put("cafcassJurisdictions", "NO"); refusedContactOrderQuestions.put("whichChildren", "YES"); - refusedContactOrderQuestions.put("selectSingleChild", "NO"); - refusedContactOrderQuestions.put("reasonForSecureAccommodation", "NO"); - refusedContactOrderQuestions.put("childLegalRepresentation", "NO"); - refusedContactOrderQuestions.put("orderJurisdiction", "NO"); - refusedContactOrderQuestions.put("dischargeOfCareDetails", "NO"); - refusedContactOrderQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - refusedContactOrderQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - refusedContactOrderQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - refusedContactOrderQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); refusedContactOrderQuestions.put("closeCase", "YES"); refusedContactOrderQuestions.put("isFinalOrder", "YES"); refusedContactOrderQuestions.put("orderIsByConsent", "YES"); - refusedContactOrderQuestions.put("appointedGuardian", "NO"); refusedContactOrderQuestions.put("respondentsRefused", "YES"); refusedContactOrderQuestions.put("refuseContactQuestions", "YES"); - refusedContactOrderQuestions.put("whichOthers", "NO"); - refusedContactOrderQuestions.put("parentResponsible", "NO"); - refusedContactOrderQuestions.put("childPlacementApplications", "NO"); - refusedContactOrderQuestions.put("childPlacementQuestions", "NO"); - refusedContactOrderQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - refusedContactOrderQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - refusedContactOrderQuestions.put("manageOrdersEducationSupervision", "NO"); - refusedContactOrderQuestions.put("orderPlacedChildInCustody","NO"); - refusedContactOrderQuestions.put("manageOrdersChildAssessment", "NO"); - refusedContactOrderQuestions.put("leaveToChangeChildSurname", "NO"); - refusedContactOrderQuestions.put("partyAllowedContactsAndConditions", "NO"); - refusedContactOrderQuestions.put("declarationOfParentage", "NO"); - refusedContactOrderQuestions.put("familyAssistanceOrder", "NO"); - refusedContactOrderQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map secureAccommodationOrderQuestions = new HashMap<>(commonQuestions); - secureAccommodationOrderQuestions.put("orderTitle", "NO"); - secureAccommodationOrderQuestions.put("approvalDate", "NO"); + + Map secureAccommodationOrderQuestions = new HashMap<>(allQuestions); secureAccommodationOrderQuestions.put("furtherDirections", "YES"); - secureAccommodationOrderQuestions.put("orderDetails", "NO"); secureAccommodationOrderQuestions.put("approvalDateTime", "YES"); - secureAccommodationOrderQuestions.put("epoIncludePhrase", "NO"); - secureAccommodationOrderQuestions.put("uploadOrderFile", "NO"); - secureAccommodationOrderQuestions.put("needSealing", "NO"); - secureAccommodationOrderQuestions.put("epoChildrenDescription", "NO"); - secureAccommodationOrderQuestions.put("epoExpiryDate", "NO"); - secureAccommodationOrderQuestions.put("epoTypeAndPreventRemoval", "NO"); - secureAccommodationOrderQuestions.put("cafcassJurisdictions", "NO"); - secureAccommodationOrderQuestions.put("whichChildren", "NO"); secureAccommodationOrderQuestions.put("selectSingleChild", "YES"); secureAccommodationOrderQuestions.put("reasonForSecureAccommodation", "YES"); secureAccommodationOrderQuestions.put("childLegalRepresentation", "YES"); secureAccommodationOrderQuestions.put("orderIsByConsent", "YES"); secureAccommodationOrderQuestions.put("orderJurisdiction", "YES"); secureAccommodationOrderQuestions.put("manageOrdersExpiryDateWithMonth", "YES"); - secureAccommodationOrderQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - secureAccommodationOrderQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - secureAccommodationOrderQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - secureAccommodationOrderQuestions.put("dischargeOfCareDetails", "NO"); secureAccommodationOrderQuestions.put("closeCase", "YES"); secureAccommodationOrderQuestions.put("isFinalOrder", "YES"); - secureAccommodationOrderQuestions.put("appointedGuardian", "NO"); - secureAccommodationOrderQuestions.put("respondentsRefused", "NO"); - secureAccommodationOrderQuestions.put("refuseContactQuestions", "NO"); - secureAccommodationOrderQuestions.put("whichOthers", "NO"); - secureAccommodationOrderQuestions.put("parentResponsible", "NO"); - secureAccommodationOrderQuestions.put("childPlacementApplications", "NO"); - secureAccommodationOrderQuestions.put("childPlacementQuestions", "NO"); - secureAccommodationOrderQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); - secureAccommodationOrderQuestions.put("manageOrdersEducationSupervision", "NO"); - secureAccommodationOrderQuestions.put("orderPlacedChildInCustody", "NO"); - secureAccommodationOrderQuestions.put("manageOrdersChildAssessment", "NO"); - secureAccommodationOrderQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - secureAccommodationOrderQuestions.put("leaveToChangeChildSurname", "NO"); - secureAccommodationOrderQuestions.put("partyAllowedContactsAndConditions", "NO"); - secureAccommodationOrderQuestions.put("declarationOfParentage", "NO"); - secureAccommodationOrderQuestions.put("familyAssistanceOrder", "NO"); - secureAccommodationOrderQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map contactWithAChildOrderInCareOrder = new HashMap<>(commonQuestions); - contactWithAChildOrderInCareOrder.put("orderTitle", "NO"); + + Map contactWithAChildOrderInCareOrder = new HashMap<>(allQuestions); contactWithAChildOrderInCareOrder.put("hearingDetails", "YES"); contactWithAChildOrderInCareOrder.put("linkApplication", "YES"); contactWithAChildOrderInCareOrder.put("approvalDate", "YES"); - contactWithAChildOrderInCareOrder.put("orderDetails", "NO"); - contactWithAChildOrderInCareOrder.put("approvalDateTime", "NO"); - contactWithAChildOrderInCareOrder.put("epoIncludePhrase", "NO"); - contactWithAChildOrderInCareOrder.put("uploadOrderFile", "NO"); - contactWithAChildOrderInCareOrder.put("needSealing", "NO"); - contactWithAChildOrderInCareOrder.put("epoChildrenDescription", "NO"); - contactWithAChildOrderInCareOrder.put("epoExpiryDate", "NO"); - contactWithAChildOrderInCareOrder.put("epoTypeAndPreventRemoval", "NO"); - contactWithAChildOrderInCareOrder.put("cafcassJurisdictions", "NO"); - contactWithAChildOrderInCareOrder.put("selectSingleChild", "NO"); - contactWithAChildOrderInCareOrder.put("reasonForSecureAccommodation", "NO"); - contactWithAChildOrderInCareOrder.put("childLegalRepresentation", "NO"); - contactWithAChildOrderInCareOrder.put("orderJurisdiction", "NO"); - contactWithAChildOrderInCareOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - contactWithAChildOrderInCareOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - contactWithAChildOrderInCareOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - contactWithAChildOrderInCareOrder.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - contactWithAChildOrderInCareOrder.put("whichOthers", "NO"); - contactWithAChildOrderInCareOrder.put("dischargeOfCareDetails", "NO"); contactWithAChildOrderInCareOrder.put("closeCase", "YES"); contactWithAChildOrderInCareOrder.put("whichChildren", "YES"); contactWithAChildOrderInCareOrder.put("orderIsByConsent", "YES"); - contactWithAChildOrderInCareOrder.put("furtherDirections", "NO"); contactWithAChildOrderInCareOrder.put("isFinalOrder", "YES"); - contactWithAChildOrderInCareOrder.put("appointedGuardian", "NO"); - contactWithAChildOrderInCareOrder.put("parentResponsible", "NO"); - contactWithAChildOrderInCareOrder.put("respondentsRefused", "NO"); - contactWithAChildOrderInCareOrder.put("refuseContactQuestions", "NO"); - contactWithAChildOrderInCareOrder.put("childPlacementApplications", "NO"); - contactWithAChildOrderInCareOrder.put("childPlacementQuestions", "NO"); - contactWithAChildOrderInCareOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - contactWithAChildOrderInCareOrder.put("orderPlacedChildInCustody", "NO"); - contactWithAChildOrderInCareOrder.put("manageOrdersEducationSupervision", "NO"); - contactWithAChildOrderInCareOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - contactWithAChildOrderInCareOrder.put("manageOrdersChildAssessment", "NO"); - contactWithAChildOrderInCareOrder.put("leaveToChangeChildSurname", "NO"); contactWithAChildOrderInCareOrder.put("partyAllowedContactsAndConditions", "YES"); - contactWithAChildOrderInCareOrder.put("declarationOfParentage", "NO"); - contactWithAChildOrderInCareOrder.put("familyAssistanceOrder", "NO"); - contactWithAChildOrderInCareOrder.put("manageOrdersTransparencyOrder", "NO"); - Map parentalResponsibilityOrder = new HashMap<>(commonQuestions); - parentalResponsibilityOrder.put("orderTitle", "NO"); - parentalResponsibilityOrder.put("approvalDate", "NO"); - parentalResponsibilityOrder.put("orderDetails", "NO"); + + Map parentalResponsibilityOrder = new HashMap<>(allQuestions); parentalResponsibilityOrder.put("approvalDateTime", "YES"); - parentalResponsibilityOrder.put("epoIncludePhrase", "NO"); - parentalResponsibilityOrder.put("uploadOrderFile", "NO"); - parentalResponsibilityOrder.put("needSealing", "NO"); - parentalResponsibilityOrder.put("epoChildrenDescription", "NO"); - parentalResponsibilityOrder.put("epoExpiryDate", "NO"); - parentalResponsibilityOrder.put("epoTypeAndPreventRemoval", "NO"); - parentalResponsibilityOrder.put("cafcassJurisdictions", "NO"); - parentalResponsibilityOrder.put("selectSingleChild", "NO"); - parentalResponsibilityOrder.put("reasonForSecureAccommodation", "NO"); - parentalResponsibilityOrder.put("childLegalRepresentation", "NO"); - parentalResponsibilityOrder.put("orderJurisdiction", "NO"); - parentalResponsibilityOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - parentalResponsibilityOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - parentalResponsibilityOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - parentalResponsibilityOrder.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - parentalResponsibilityOrder.put("whichOthers", "NO"); - parentalResponsibilityOrder.put("dischargeOfCareDetails", "NO"); parentalResponsibilityOrder.put("closeCase", "YES"); parentalResponsibilityOrder.put("whichChildren", "YES"); parentalResponsibilityOrder.put("orderIsByConsent", "YES"); parentalResponsibilityOrder.put("furtherDirections", "YES"); parentalResponsibilityOrder.put("isFinalOrder", "YES"); - parentalResponsibilityOrder.put("appointedGuardian", "NO"); - parentalResponsibilityOrder.put("respondentsRefused", "NO"); - parentalResponsibilityOrder.put("refuseContactQuestions", "NO"); parentalResponsibilityOrder.put("parentResponsible", "YES"); - parentalResponsibilityOrder.put("childPlacementApplications", "NO"); - parentalResponsibilityOrder.put("childPlacementQuestions", "NO"); - parentalResponsibilityOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - parentalResponsibilityOrder.put("manageOrdersEducationSupervision", "NO"); - parentalResponsibilityOrder.put("orderPlacedChildInCustody", "NO"); - parentalResponsibilityOrder.put("manageOrdersChildAssessment", "NO"); - parentalResponsibilityOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - parentalResponsibilityOrder.put("leaveToChangeChildSurname", "NO"); - parentalResponsibilityOrder.put("partyAllowedContactsAndConditions", "NO"); - parentalResponsibilityOrder.put("declarationOfParentage", "NO"); - parentalResponsibilityOrder.put("familyAssistanceOrder", "NO"); - parentalResponsibilityOrder.put("manageOrdersTransparencyOrder", "NO"); - Map recoveryOfChildQuestions = new HashMap<>(commonQuestions); - recoveryOfChildQuestions.put("orderTitle", "NO"); + + Map recoveryOfChildQuestions = new HashMap<>(allQuestions); recoveryOfChildQuestions.put("approvalDate", "YES"); - recoveryOfChildQuestions.put("orderDetails", "NO"); - recoveryOfChildQuestions.put("approvalDateTime", "NO"); - recoveryOfChildQuestions.put("epoIncludePhrase", "NO"); - recoveryOfChildQuestions.put("uploadOrderFile", "NO"); - recoveryOfChildQuestions.put("needSealing", "NO"); - recoveryOfChildQuestions.put("epoChildrenDescription", "NO"); - recoveryOfChildQuestions.put("epoExpiryDate", "NO"); - recoveryOfChildQuestions.put("epoTypeAndPreventRemoval", "NO"); - recoveryOfChildQuestions.put("cafcassJurisdictions", "NO"); - recoveryOfChildQuestions.put("selectSingleChild", "NO"); - recoveryOfChildQuestions.put("reasonForSecureAccommodation", "NO"); - recoveryOfChildQuestions.put("childLegalRepresentation", "NO"); - recoveryOfChildQuestions.put("orderJurisdiction", "NO"); - recoveryOfChildQuestions.put("manageOrdersExpiryDateWithMonth", "NO"); - recoveryOfChildQuestions.put("manageOrdersExclusionRequirementDetails", "NO"); - recoveryOfChildQuestions.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - recoveryOfChildQuestions.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - recoveryOfChildQuestions.put("whichOthers", "NO"); - recoveryOfChildQuestions.put("dischargeOfCareDetails", "NO"); recoveryOfChildQuestions.put("closeCase", "YES"); recoveryOfChildQuestions.put("whichChildren", "YES"); - recoveryOfChildQuestions.put("orderIsByConsent", "NO"); recoveryOfChildQuestions.put("furtherDirections", "YES"); recoveryOfChildQuestions.put("isFinalOrder", "YES"); - recoveryOfChildQuestions.put("appointedGuardian", "NO"); - recoveryOfChildQuestions.put("refuseContactQuestions", "NO"); - recoveryOfChildQuestions.put("respondentsRefused", "NO"); - recoveryOfChildQuestions.put("parentResponsible", "NO"); - recoveryOfChildQuestions.put("childPlacementApplications", "NO"); - recoveryOfChildQuestions.put("childPlacementQuestions", "NO"); - recoveryOfChildQuestions.put("childPlacementQuestionsForBlankOrder", "NO"); recoveryOfChildQuestions.put("orderPlacedChildInCustody", "YES"); - recoveryOfChildQuestions.put("manageOrdersChildAssessment", "NO"); - recoveryOfChildQuestions.put("manageOrdersEducationSupervision", "NO"); - recoveryOfChildQuestions.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - recoveryOfChildQuestions.put("leaveToChangeChildSurname", "NO"); - recoveryOfChildQuestions.put("partyAllowedContactsAndConditions", "NO"); - recoveryOfChildQuestions.put("declarationOfParentage", "NO"); - recoveryOfChildQuestions.put("familyAssistanceOrder", "NO"); - recoveryOfChildQuestions.put("manageOrdersTransparencyOrder", "NO"); - Map placementOrder = new HashMap<>(commonQuestions); - placementOrder.put("orderTitle", "NO"); + Map placementOrder = new HashMap<>(allQuestions); placementOrder.put("hearingDetails", "NO"); placementOrder.put("linkApplication", "NO"); placementOrder.put("approvalDate", "YES"); - placementOrder.put("orderDetails", "NO"); - placementOrder.put("approvalDateTime", "NO"); - placementOrder.put("epoIncludePhrase", "NO"); - placementOrder.put("uploadOrderFile", "NO"); - placementOrder.put("needSealing", "NO"); - placementOrder.put("epoChildrenDescription", "NO"); - placementOrder.put("epoExpiryDate", "NO"); - placementOrder.put("epoTypeAndPreventRemoval", "NO"); - placementOrder.put("cafcassJurisdictions", "NO"); - placementOrder.put("selectSingleChild", "NO"); - placementOrder.put("reasonForSecureAccommodation", "NO"); - placementOrder.put("childLegalRepresentation", "NO"); - placementOrder.put("orderJurisdiction", "NO"); - placementOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - placementOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - placementOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - placementOrder.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - placementOrder.put("whichOthers", "NO"); - placementOrder.put("dischargeOfCareDetails", "NO"); placementOrder.put("closeCase", "YES"); - placementOrder.put("whichChildren", "NO"); - placementOrder.put("orderIsByConsent", "NO"); - placementOrder.put("furtherDirections", "NO"); placementOrder.put("isFinalOrder", "YES"); - placementOrder.put("appointedGuardian", "NO"); - placementOrder.put("respondentsRefused", "NO"); - placementOrder.put("refuseContactQuestions", "NO"); - placementOrder.put("parentResponsible", "NO"); placementOrder.put("childPlacementApplications", "YES"); placementOrder.put("childPlacementQuestions", "YES"); - placementOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - placementOrder.put("manageOrdersEducationSupervision", "NO"); - placementOrder.put("orderPlacedChildInCustody", "NO"); - placementOrder.put("manageOrdersChildAssessment", "NO"); placementOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); placementOrder.put("leaveToChangeChildSurname", "NO"); placementOrder.put("partyAllowedContactsAndConditions", "NO"); placementOrder.put("declarationOfParentage", "NO"); placementOrder.put("familyAssistanceOrder", "NO"); - placementOrder.put("manageOrdersTransparencyOrder", "NO"); - Map childAssessmentOrder = new HashMap<>(commonQuestions); - childAssessmentOrder.put("orderTitle", "NO"); + Map childAssessmentOrder = new HashMap<>(allQuestions); childAssessmentOrder.put("hearingDetails", "NO"); childAssessmentOrder.put("linkApplication", "NO"); childAssessmentOrder.put("approvalDate", "YES"); - childAssessmentOrder.put("orderDetails", "NO"); - childAssessmentOrder.put("approvalDateTime", "NO"); - childAssessmentOrder.put("epoIncludePhrase", "NO"); - childAssessmentOrder.put("uploadOrderFile", "NO"); - childAssessmentOrder.put("needSealing", "NO"); - childAssessmentOrder.put("epoChildrenDescription", "NO"); - childAssessmentOrder.put("epoExpiryDate", "NO"); - childAssessmentOrder.put("epoTypeAndPreventRemoval", "NO"); - childAssessmentOrder.put("cafcassJurisdictions", "NO"); childAssessmentOrder.put("selectSingleChild", "YES"); - childAssessmentOrder.put("reasonForSecureAccommodation", "NO"); - childAssessmentOrder.put("childLegalRepresentation", "NO"); - childAssessmentOrder.put("orderJurisdiction", "NO"); - childAssessmentOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - childAssessmentOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - childAssessmentOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - childAssessmentOrder.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - childAssessmentOrder.put("whichOthers", "NO"); - childAssessmentOrder.put("dischargeOfCareDetails", "NO"); childAssessmentOrder.put("closeCase", "YES"); - childAssessmentOrder.put("whichChildren", "NO"); childAssessmentOrder.put("orderIsByConsent", "YES"); - childAssessmentOrder.put("furtherDirections", "NO"); childAssessmentOrder.put("isFinalOrder", "YES"); - childAssessmentOrder.put("appointedGuardian", "NO"); - childAssessmentOrder.put("parentResponsible", "NO"); - childAssessmentOrder.put("childPlacementApplications", "NO"); - childAssessmentOrder.put("childPlacementQuestions", "NO"); - childAssessmentOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - childAssessmentOrder.put("orderPlacedChildInCustody", "NO"); childAssessmentOrder.put("manageOrdersChildAssessment", "YES"); - childAssessmentOrder.put("refuseContactQuestions", "NO"); - childAssessmentOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - childAssessmentOrder.put("manageOrdersEducationSupervision", "NO"); - childAssessmentOrder.put("respondentsRefused", "NO"); - childAssessmentOrder.put("leaveToChangeChildSurname", "NO"); - childAssessmentOrder.put("partyAllowedContactsAndConditions", "NO"); - childAssessmentOrder.put("declarationOfParentage", "NO"); - childAssessmentOrder.put("familyAssistanceOrder", "NO"); - childAssessmentOrder.put("manageOrdersTransparencyOrder", "NO"); - Map supervisionEducationOrder = new HashMap<>(Map.of( - "hearingDetails", "NO", - "linkApplication", "NO", - "approver", "YES", - "previewOrder", "YES", - "orderToAmend", "NO", - "translationRequirements", "NO", - "uploadAmendedOrder", "NO" - )); - supervisionEducationOrder.put("orderTitle", "NO"); + Map supervisionEducationOrder = new HashMap<>(allQuestions); supervisionEducationOrder.put("hearingDetails", "NO"); supervisionEducationOrder.put("linkApplication", "NO"); supervisionEducationOrder.put("approvalDate", "YES"); - supervisionEducationOrder.put("orderDetails", "NO"); - supervisionEducationOrder.put("approvalDateTime", "NO"); - supervisionEducationOrder.put("epoIncludePhrase", "NO"); - supervisionEducationOrder.put("uploadOrderFile", "NO"); - supervisionEducationOrder.put("needSealing", "NO"); - supervisionEducationOrder.put("epoChildrenDescription", "NO"); - supervisionEducationOrder.put("epoExpiryDate", "NO"); - supervisionEducationOrder.put("epoTypeAndPreventRemoval", "NO"); - supervisionEducationOrder.put("cafcassJurisdictions", "NO"); - supervisionEducationOrder.put("selectSingleChild", "NO"); - supervisionEducationOrder.put("reasonForSecureAccommodation", "NO"); - supervisionEducationOrder.put("childLegalRepresentation", "NO"); - supervisionEducationOrder.put("orderJurisdiction", "NO"); - supervisionEducationOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - supervisionEducationOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - supervisionEducationOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - supervisionEducationOrder.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - supervisionEducationOrder.put("whichOthers", "NO"); - supervisionEducationOrder.put("dischargeOfCareDetails", "NO"); supervisionEducationOrder.put("closeCase", "YES"); supervisionEducationOrder.put("whichChildren", "YES"); supervisionEducationOrder.put("orderIsByConsent", "YES"); - supervisionEducationOrder.put("furtherDirections", "NO"); supervisionEducationOrder.put("isFinalOrder", "YES"); - supervisionEducationOrder.put("appointedGuardian", "NO"); - supervisionEducationOrder.put("parentResponsible", "NO"); - supervisionEducationOrder.put("respondentsRefused", "NO"); - supervisionEducationOrder.put("refuseContactQuestions", "NO"); - supervisionEducationOrder.put("childPlacementApplications", "NO"); - supervisionEducationOrder.put("childPlacementQuestions", "NO"); - supervisionEducationOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - supervisionEducationOrder.put("orderPlacedChildInCustody", "NO"); - supervisionEducationOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); supervisionEducationOrder.put("manageOrdersEducationSupervision", "YES"); - supervisionEducationOrder.put("manageOrdersChildAssessment", "NO"); - supervisionEducationOrder.put("leaveToChangeChildSurname", "NO"); - supervisionEducationOrder.put("partyAllowedContactsAndConditions", "NO"); - supervisionEducationOrder.put("declarationOfParentage", "NO"); - supervisionEducationOrder.put("familyAssistanceOrder", "NO"); - supervisionEducationOrder.put("manageOrdersTransparencyOrder", "NO"); - Map varyOrExtendSupervisionOrder = new HashMap<>(commonQuestions); - varyOrExtendSupervisionOrder.put("orderTitle", "NO"); + Map varyOrExtendSupervisionOrder = new HashMap<>(allQuestions); varyOrExtendSupervisionOrder.put("hearingDetails", "NO"); varyOrExtendSupervisionOrder.put("linkApplication", "NO"); varyOrExtendSupervisionOrder.put("approvalDate", "YES"); - varyOrExtendSupervisionOrder.put("orderDetails", "NO"); - varyOrExtendSupervisionOrder.put("approvalDateTime", "NO"); - varyOrExtendSupervisionOrder.put("epoIncludePhrase", "NO"); - varyOrExtendSupervisionOrder.put("uploadOrderFile", "NO"); - varyOrExtendSupervisionOrder.put("needSealing", "NO"); - varyOrExtendSupervisionOrder.put("epoChildrenDescription", "NO"); - varyOrExtendSupervisionOrder.put("epoExpiryDate", "NO"); - varyOrExtendSupervisionOrder.put("epoTypeAndPreventRemoval", "NO"); - varyOrExtendSupervisionOrder.put("cafcassJurisdictions", "NO"); - varyOrExtendSupervisionOrder.put("selectSingleChild", "NO"); - varyOrExtendSupervisionOrder.put("reasonForSecureAccommodation", "NO"); - varyOrExtendSupervisionOrder.put("childLegalRepresentation", "NO"); - varyOrExtendSupervisionOrder.put("orderJurisdiction", "NO"); - varyOrExtendSupervisionOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - varyOrExtendSupervisionOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - varyOrExtendSupervisionOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - varyOrExtendSupervisionOrder.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - varyOrExtendSupervisionOrder.put("whichOthers", "NO"); - varyOrExtendSupervisionOrder.put("dischargeOfCareDetails", "NO"); - varyOrExtendSupervisionOrder.put("closeCase", "NO"); varyOrExtendSupervisionOrder.put("whichChildren", "YES"); varyOrExtendSupervisionOrder.put("orderIsByConsent", "YES"); - varyOrExtendSupervisionOrder.put("furtherDirections", "NO"); varyOrExtendSupervisionOrder.put("isFinalOrder", "YES"); - varyOrExtendSupervisionOrder.put("appointedGuardian", "NO"); - varyOrExtendSupervisionOrder.put("parentResponsible", "NO"); - varyOrExtendSupervisionOrder.put("respondentsRefused", "NO"); - varyOrExtendSupervisionOrder.put("refuseContactQuestions", "NO"); - varyOrExtendSupervisionOrder.put("childPlacementApplications", "NO"); - varyOrExtendSupervisionOrder.put("childPlacementQuestions", "NO"); - varyOrExtendSupervisionOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - varyOrExtendSupervisionOrder.put("orderPlacedChildInCustody", "NO"); - varyOrExtendSupervisionOrder.put("manageOrdersEducationSupervision", "NO"); varyOrExtendSupervisionOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "YES"); - varyOrExtendSupervisionOrder.put("manageOrdersChildAssessment", "NO"); - varyOrExtendSupervisionOrder.put("leaveToChangeChildSurname", "NO"); - varyOrExtendSupervisionOrder.put("partyAllowedContactsAndConditions", "NO"); - varyOrExtendSupervisionOrder.put("declarationOfParentage", "NO"); - varyOrExtendSupervisionOrder.put("familyAssistanceOrder", "NO"); - varyOrExtendSupervisionOrder.put("manageOrdersTransparencyOrder", "NO"); - Map leaveToChangeChildSurname = new HashMap<>(commonQuestions); - leaveToChangeChildSurname.put("orderTitle", "NO"); + Map leaveToChangeChildSurname = new HashMap<>(allQuestions); leaveToChangeChildSurname.put("hearingDetails", "NO"); leaveToChangeChildSurname.put("linkApplication", "NO"); leaveToChangeChildSurname.put("approvalDate", "YES"); - leaveToChangeChildSurname.put("orderDetails", "NO"); - leaveToChangeChildSurname.put("approvalDateTime", "NO"); - leaveToChangeChildSurname.put("epoIncludePhrase", "NO"); - leaveToChangeChildSurname.put("uploadOrderFile", "NO"); - leaveToChangeChildSurname.put("needSealing", "NO"); - leaveToChangeChildSurname.put("epoChildrenDescription", "NO"); - leaveToChangeChildSurname.put("epoExpiryDate", "NO"); - leaveToChangeChildSurname.put("epoTypeAndPreventRemoval", "NO"); - leaveToChangeChildSurname.put("cafcassJurisdictions", "NO"); - leaveToChangeChildSurname.put("selectSingleChild", "NO"); - leaveToChangeChildSurname.put("reasonForSecureAccommodation", "NO"); - leaveToChangeChildSurname.put("childLegalRepresentation", "NO"); - leaveToChangeChildSurname.put("orderJurisdiction", "NO"); - leaveToChangeChildSurname.put("manageOrdersExpiryDateWithMonth", "NO"); - leaveToChangeChildSurname.put("manageOrdersExclusionRequirementDetails", "NO"); - leaveToChangeChildSurname.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - leaveToChangeChildSurname.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - leaveToChangeChildSurname.put("whichOthers", "NO"); - leaveToChangeChildSurname.put("dischargeOfCareDetails", "NO"); - leaveToChangeChildSurname.put("closeCase", "NO"); leaveToChangeChildSurname.put("whichChildren", "YES"); leaveToChangeChildSurname.put("orderIsByConsent", "YES"); - leaveToChangeChildSurname.put("furtherDirections", "NO"); leaveToChangeChildSurname.put("isFinalOrder", "YES"); - leaveToChangeChildSurname.put("appointedGuardian", "NO"); - leaveToChangeChildSurname.put("parentResponsible", "NO"); - leaveToChangeChildSurname.put("respondentsRefused", "NO"); - leaveToChangeChildSurname.put("refuseContactQuestions", "NO"); - leaveToChangeChildSurname.put("childPlacementApplications", "NO"); - leaveToChangeChildSurname.put("childPlacementQuestions", "NO"); - leaveToChangeChildSurname.put("childPlacementQuestionsForBlankOrder", "NO"); - leaveToChangeChildSurname.put("orderPlacedChildInCustody", "NO"); - leaveToChangeChildSurname.put("manageOrdersEducationSupervision", "NO"); - leaveToChangeChildSurname.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - leaveToChangeChildSurname.put("manageOrdersChildAssessment", "NO"); leaveToChangeChildSurname.put("leaveToChangeChildSurname", "YES"); - leaveToChangeChildSurname.put("partyAllowedContactsAndConditions", "NO"); - leaveToChangeChildSurname.put("declarationOfParentage", "NO"); - leaveToChangeChildSurname.put("familyAssistanceOrder", "NO"); - leaveToChangeChildSurname.put("manageOrdersTransparencyOrder", "NO"); - Map declarationOfParentage = new HashMap<>(commonQuestions); - declarationOfParentage.put("orderTitle", "NO"); - declarationOfParentage.put("hearingDetails", "YES"); - declarationOfParentage.put("linkApplication", "YES"); + Map declarationOfParentage = new HashMap<>(allQuestions); declarationOfParentage.put("approvalDate", "YES"); - declarationOfParentage.put("orderDetails", "NO"); - declarationOfParentage.put("approvalDateTime", "NO"); - declarationOfParentage.put("epoIncludePhrase", "NO"); - declarationOfParentage.put("uploadOrderFile", "NO"); - declarationOfParentage.put("needSealing", "NO"); - declarationOfParentage.put("epoChildrenDescription", "NO"); - declarationOfParentage.put("epoExpiryDate", "NO"); - declarationOfParentage.put("epoTypeAndPreventRemoval", "NO"); - declarationOfParentage.put("cafcassJurisdictions", "NO"); declarationOfParentage.put("selectSingleChild", "YES"); - declarationOfParentage.put("reasonForSecureAccommodation", "NO"); - declarationOfParentage.put("childLegalRepresentation", "NO"); - declarationOfParentage.put("orderJurisdiction", "NO"); - declarationOfParentage.put("manageOrdersExpiryDateWithMonth", "NO"); - declarationOfParentage.put("manageOrdersExclusionRequirementDetails", "NO"); - declarationOfParentage.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - declarationOfParentage.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - declarationOfParentage.put("whichOthers", "NO"); - declarationOfParentage.put("dischargeOfCareDetails", "NO"); declarationOfParentage.put("closeCase", "YES"); - declarationOfParentage.put("whichChildren", "NO"); - declarationOfParentage.put("orderIsByConsent", "NO"); - declarationOfParentage.put("furtherDirections", "NO"); declarationOfParentage.put("isFinalOrder", "YES"); - declarationOfParentage.put("appointedGuardian", "NO"); - declarationOfParentage.put("parentResponsible", "NO"); - declarationOfParentage.put("respondentsRefused", "NO"); - declarationOfParentage.put("refuseContactQuestions", "NO"); - declarationOfParentage.put("childPlacementApplications", "NO"); - declarationOfParentage.put("childPlacementQuestions", "NO"); - declarationOfParentage.put("childPlacementQuestionsForBlankOrder", "NO"); - declarationOfParentage.put("orderPlacedChildInCustody", "NO"); - declarationOfParentage.put("manageOrdersEducationSupervision", "NO"); - declarationOfParentage.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - declarationOfParentage.put("manageOrdersChildAssessment", "NO"); - declarationOfParentage.put("leaveToChangeChildSurname", "NO"); - declarationOfParentage.put("partyAllowedContactsAndConditions", "NO"); declarationOfParentage.put("declarationOfParentage", "YES"); - declarationOfParentage.put("familyAssistanceOrder", "NO"); - declarationOfParentage.put("manageOrdersTransparencyOrder", "NO"); - Map familyAssistanceOrder = new HashMap<>(commonQuestions); - familyAssistanceOrder.put("orderTitle", "NO"); + Map familyAssistanceOrder = new HashMap<>(allQuestions); familyAssistanceOrder.put("hearingDetails", "NO"); familyAssistanceOrder.put("linkApplication", "NO"); familyAssistanceOrder.put("approvalDate", "YES"); - familyAssistanceOrder.put("orderDetails", "NO"); - familyAssistanceOrder.put("approvalDateTime", "NO"); - familyAssistanceOrder.put("epoIncludePhrase", "NO"); - familyAssistanceOrder.put("uploadOrderFile", "NO"); - familyAssistanceOrder.put("needSealing", "NO"); - familyAssistanceOrder.put("epoChildrenDescription", "NO"); - familyAssistanceOrder.put("epoExpiryDate", "NO"); - familyAssistanceOrder.put("epoTypeAndPreventRemoval", "NO"); - familyAssistanceOrder.put("cafcassJurisdictions", "NO"); - familyAssistanceOrder.put("selectSingleChild", "NO"); - familyAssistanceOrder.put("reasonForSecureAccommodation", "NO"); - familyAssistanceOrder.put("childLegalRepresentation", "NO"); - familyAssistanceOrder.put("orderJurisdiction", "NO"); - familyAssistanceOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - familyAssistanceOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - familyAssistanceOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - familyAssistanceOrder.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - familyAssistanceOrder.put("whichOthers", "NO"); - familyAssistanceOrder.put("dischargeOfCareDetails", "NO"); familyAssistanceOrder.put("closeCase", "YES"); familyAssistanceOrder.put("whichChildren", "YES"); familyAssistanceOrder.put("orderIsByConsent", "YES"); familyAssistanceOrder.put("furtherDirections", "YES"); familyAssistanceOrder.put("isFinalOrder", "YES"); - familyAssistanceOrder.put("appointedGuardian", "NO"); - familyAssistanceOrder.put("parentResponsible", "NO"); - familyAssistanceOrder.put("respondentsRefused", "NO"); - familyAssistanceOrder.put("refuseContactQuestions", "NO"); - familyAssistanceOrder.put("childPlacementApplications", "NO"); - familyAssistanceOrder.put("childPlacementQuestions", "NO"); - familyAssistanceOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - familyAssistanceOrder.put("orderPlacedChildInCustody", "NO"); - familyAssistanceOrder.put("manageOrdersEducationSupervision", "NO"); - familyAssistanceOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - familyAssistanceOrder.put("manageOrdersChildAssessment", "NO"); - familyAssistanceOrder.put("leaveToChangeChildSurname", "NO"); - familyAssistanceOrder.put("partyAllowedContactsAndConditions", "NO"); - familyAssistanceOrder.put("declarationOfParentage", "NO"); familyAssistanceOrder.put("familyAssistanceOrder", "YES"); familyAssistanceOrder.put("manageOrdersTransparencyOrder", "NO"); - Map transparencyOrder = new HashMap<>(commonQuestions); - transparencyOrder.put("orderTitle", "NO"); + Map transparencyOrder = new HashMap<>(allQuestions); transparencyOrder.put("hearingDetails", "NO"); transparencyOrder.put("linkApplication", "NO"); transparencyOrder.put("approvalDate", "YES"); - transparencyOrder.put("orderDetails", "NO"); - transparencyOrder.put("approvalDateTime", "NO"); - transparencyOrder.put("epoIncludePhrase", "NO"); - transparencyOrder.put("uploadOrderFile", "NO"); - transparencyOrder.put("needSealing", "NO"); - transparencyOrder.put("epoChildrenDescription", "NO"); - transparencyOrder.put("epoExpiryDate", "NO"); - transparencyOrder.put("epoTypeAndPreventRemoval", "NO"); - transparencyOrder.put("cafcassJurisdictions", "NO"); - transparencyOrder.put("selectSingleChild", "NO"); - transparencyOrder.put("reasonForSecureAccommodation", "NO"); - transparencyOrder.put("childLegalRepresentation", "NO"); - transparencyOrder.put("orderJurisdiction", "NO"); - transparencyOrder.put("manageOrdersExpiryDateWithMonth", "NO"); - transparencyOrder.put("manageOrdersExclusionRequirementDetails", "NO"); - transparencyOrder.put("manageOrdersExpiryDateWithEndOfProceedings", "NO"); - transparencyOrder.put("childArrangementSpecificIssueProhibitedSteps", "NO"); - transparencyOrder.put("whichOthers", "NO"); - transparencyOrder.put("dischargeOfCareDetails", "NO"); - transparencyOrder.put("closeCase", "NO"); - transparencyOrder.put("whichChildren", "NO"); transparencyOrder.put("orderIsByConsent", "YES"); - transparencyOrder.put("furtherDirections", "NO"); transparencyOrder.put("isFinalOrder", "YES"); - transparencyOrder.put("appointedGuardian", "NO"); - transparencyOrder.put("parentResponsible", "NO"); - transparencyOrder.put("respondentsRefused", "NO"); - transparencyOrder.put("refuseContactQuestions", "NO"); - transparencyOrder.put("childPlacementApplications", "NO"); - transparencyOrder.put("childPlacementQuestions", "NO"); - transparencyOrder.put("childPlacementQuestionsForBlankOrder", "NO"); - transparencyOrder.put("orderPlacedChildInCustody", "NO"); - transparencyOrder.put("manageOrdersEducationSupervision", "NO"); - transparencyOrder.put("manageOrdersVaryOrExtendSupervisionOrder", "NO"); - transparencyOrder.put("manageOrdersChildAssessment", "NO"); - transparencyOrder.put("leaveToChangeChildSurname", "NO"); - transparencyOrder.put("partyAllowedContactsAndConditions", "NO"); - transparencyOrder.put("declarationOfParentage", "NO"); - transparencyOrder.put("familyAssistanceOrder", "NO"); transparencyOrder.put("manageOrdersTransparencyOrder", "YES"); + + Map nonMolestationOrder = new HashMap<>(allQuestions); + nonMolestationOrder.put("linkApplication", "NO"); + nonMolestationOrder.put("approvalDate", "YES"); + nonMolestationOrder.put("whichChildren", "YES"); + nonMolestationOrder.put("orderIsByConsent", "YES"); + nonMolestationOrder.put("nonMolestationOrder", "YES"); + nonMolestationOrder.put("previewOrder", "YES"); + return Stream.of( Arguments.of(C21_BLANK_ORDER, blankOrderQuestions), Arguments.of(A81_PLACEMENT_BLANK_ORDER, placementBlankOrderQuestions), @@ -1145,6 +411,7 @@ private static Stream orderWithExpectedMap() { Arguments.of(C44A_LEAVE_TO_CHANGE_A_SURNAME, leaveToChangeChildSurname), Arguments.of(C63A_DECLARATION_OF_PARENTAGE, declarationOfParentage), Arguments.of(C42_FAMILY_ASSISTANCE_ORDER, familyAssistanceOrder), + Arguments.of(FL404A_NON_MOLESTATION_ORDER, nonMolestationOrder), Arguments.of(TRANSPARENCY_ORDER, transparencyOrder) ); } @@ -1202,6 +469,7 @@ private static Stream nonFinalManualUploadOrders() { Map.entry("leaveToChangeChildSurname", "NO"), Map.entry("declarationOfParentage", "NO"), Map.entry("familyAssistanceOrder", "NO"), + Map.entry("nonMolestationOrder", "NO"), Map.entry("manageOrdersTransparencyOrder", "NO") ))); } diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/NonMolestationOrderDocumentParameterGeneratorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/NonMolestationOrderDocumentParameterGeneratorTest.java new file mode 100644 index 00000000000..1d29fc7045d --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/NonMolestationOrderDocumentParameterGeneratorTest.java @@ -0,0 +1,145 @@ +package uk.gov.hmcts.reform.fpl.service.orders.generator; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.fpl.enums.DocmosisTemplates; +import uk.gov.hmcts.reform.fpl.model.Address; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Respondent; +import uk.gov.hmcts.reform.fpl.model.RespondentParty; +import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.model.common.dynamic.DynamicList; +import uk.gov.hmcts.reform.fpl.model.common.dynamic.DynamicListElement; +import uk.gov.hmcts.reform.fpl.model.docmosis.DocmosisRespondent; +import uk.gov.hmcts.reform.fpl.model.event.ManageOrdersEventData; +import uk.gov.hmcts.reform.fpl.service.orders.docmosis.DocmosisParameters; +import uk.gov.hmcts.reform.fpl.service.orders.docmosis.NonMolestationOrderDocumentParameters; +import uk.gov.hmcts.reform.fpl.service.orders.generator.common.OrderMessageGenerator; + +import java.time.LocalDate; +import java.util.List; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.fpl.enums.YesNo.NO; +import static uk.gov.hmcts.reform.fpl.enums.YesNo.YES; +import static uk.gov.hmcts.reform.fpl.model.order.Order.FL404A_NON_MOLESTATION_ORDER; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElementsWithUUIDs; + +@ExtendWith({MockitoExtension.class}) +public class NonMolestationOrderDocumentParameterGeneratorTest { + @Mock + private OrderMessageGenerator orderMessageGenerator; + @InjectMocks + private NonMolestationOrderDocumentParameterGenerator underTest; + + @Test + void accept() { + assertThat(underTest.accept()).isEqualTo(FL404A_NON_MOLESTATION_ORDER); + } + + @Test + void template() { + assertThat(underTest.template()).isEqualTo(DocmosisTemplates.NON_MOLESTATION_ORDER); + } + + @Test + void shouldBuildNonMolestationOrderDocumentParameter() { + LocalDate dateOfBirth = LocalDate.of(2024, 06, 17); + when(orderMessageGenerator.getOrderByConsentMessage(any())).thenReturn("By consent"); + + List> respondents = wrapElementsWithUUIDs(Respondent.builder() + .party(RespondentParty.builder() + .contactDetailsHidden(NO.getValue()) + .firstName("First") + .lastName("Last") + .dateOfBirth(dateOfBirth) + .address(Address.builder().addressLine1("First address line").country("UK").build()) + .build()) + .build()); + + CaseData caseData = CaseData.builder() + .respondents1(respondents) + .manageOrdersEventData(ManageOrdersEventData.builder() + .manageOrdersNonMolestationOrderApplicant(DynamicList.builder() + .value(DynamicListElement.builder().code("1").label("Applicant, LastName, Second LA").build()) + .build()) + .manageOrdersNonMolestationOrderRespondent(DynamicList.builder() + .value(DynamicListElement.builder().code(respondents.get(0).getId()) + .label(respondents.get(0).getValue().getParty().getFullName()).build()) + .build()) + .manageOrdersRecitalsAndPreamblesOptional("This is RecitalsAndPreambles") + .manageOrdersNonMolestationOrder("This is details of NonMolestationOrder") + .build()) + .build(); + + DocmosisParameters actual = underTest.generate(caseData); + + NonMolestationOrderDocumentParameters expected = NonMolestationOrderDocumentParameters.builder() + .orderTitle("Non-molestation order (FL404A)") + .applicantName("Applicant, LastName") + .respondents(List.of(DocmosisRespondent.builder() + .name("First Last") + .dateOfBirth("17 June 2024") + .address("First address line, UK") + .build())) + .recitalsOrPreamble("This is RecitalsAndPreambles") + .orderByConsent("By consent") + .courtOrder("This is details of NonMolestationOrder") + .build(); + + assertThat(actual).isEqualTo(expected); + } + + @Test + void shouldBuildNonMolestationOrderDocumentParameterWithConfidential() { + LocalDate dateOfBirth = LocalDate.of(2024, 06, 17); + when(orderMessageGenerator.getOrderByConsentMessage(any())).thenReturn("By consent"); + + List> respondents = wrapElementsWithUUIDs(Respondent.builder() + .party(RespondentParty.builder() + .contactDetailsHidden(YES.getValue()) + .firstName("First") + .lastName("Last") + .dateOfBirth(dateOfBirth) + .address(Address.builder().addressLine1("First address line").country("UK").build()) + .build()) + .build()); + + CaseData caseData = CaseData.builder() + .respondents1(respondents) + .manageOrdersEventData(ManageOrdersEventData.builder() + .manageOrdersNonMolestationOrderApplicant(DynamicList.builder() + .value(DynamicListElement.builder().code("1").label("Applicant, LastName, Second LA").build()) + .build()) + .manageOrdersNonMolestationOrderRespondent(DynamicList.builder() + .value(DynamicListElement.builder().code(respondents.get(0).getId()) + .label(respondents.get(0).getValue().getParty().getFullName()).build()) + .build()) + .manageOrdersRecitalsAndPreamblesOptional("This is RecitalsAndPreambles") + .manageOrdersNonMolestationOrder("This is details of NonMolestationOrder") + .build()) + .build(); + + DocmosisParameters actual = underTest.generate(caseData); + + NonMolestationOrderDocumentParameters expected = NonMolestationOrderDocumentParameters.builder() + .orderTitle("Non-molestation order (FL404A)") + .applicantName("Applicant, LastName") + .respondents(List.of(DocmosisRespondent.builder() + .name("First Last") + .dateOfBirth("17 June 2024") + .address("") + .build())) + .recitalsOrPreamble("This is RecitalsAndPreambles") + .orderByConsent("By consent") + .courtOrder("This is details of NonMolestationOrder") + .build(); + + assertThat(actual).isEqualTo(expected); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/OrderDocumentGeneratorHolderTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/OrderDocumentGeneratorHolderTest.java index 3001e8ef3b8..a6422c3ee4d 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/OrderDocumentGeneratorHolderTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/OrderDocumentGeneratorHolderTest.java @@ -43,6 +43,7 @@ import static uk.gov.hmcts.reform.fpl.model.order.Order.C45A_PARENTAL_RESPONSIBILITY_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.Order.C47A_APPOINTMENT_OF_A_CHILDRENS_GUARDIAN; import static uk.gov.hmcts.reform.fpl.model.order.Order.C63A_DECLARATION_OF_PARENTAGE; +import static uk.gov.hmcts.reform.fpl.model.order.Order.FL404A_NON_MOLESTATION_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.Order.TRANSPARENCY_ORDER; @ExtendWith(MockitoExtension.class) @@ -100,6 +101,8 @@ class OrderDocumentGeneratorHolderTest { @Mock private C42FamilyAssistanceOrderDocumentParameterGenerator c42FamilyAssistanceOrderDocumentParameterGenerator; @Mock + private NonMolestationOrderDocumentParameterGenerator nonMolestationOrderDocumentParameterGenerator; + @Mock private C45aParentalResponsibilityOrderDocumentParameterGenerator c45aParentalResponsibilityOrderDocumentParameterGenerator; @Mock @@ -134,7 +137,8 @@ void setUp() { c34BAuthorityToRefuseContactOrderParameterGenerator, c44aLeaveToChangeTheSurnameOrderParameterGenerator, c34AContactWithAChildInCareOrderDocumentParameterGenerator, c63aDeclarationOfParentageDocumentParameterGenerator, - c42FamilyAssistanceOrderDocumentParameterGenerator, transparencyOrderParameterGenerator + c42FamilyAssistanceOrderDocumentParameterGenerator, nonMolestationOrderDocumentParameterGenerator, + transparencyOrderParameterGenerator ); collectors = List.of(c23EPOAdditionalDocumentsCollector); @@ -165,6 +169,7 @@ void setUp() { put(C34A_CONTACT_WITH_A_CHILD_IN_CARE, c34AContactWithAChildInCareOrderDocumentParameterGenerator); put(C63A_DECLARATION_OF_PARENTAGE, c63aDeclarationOfParentageDocumentParameterGenerator); put(C42_FAMILY_ASSISTANCE_ORDER, c42FamilyAssistanceOrderDocumentParameterGenerator); + put(FL404A_NON_MOLESTATION_ORDER, nonMolestationOrderDocumentParameterGenerator); put(TRANSPARENCY_ORDER, transparencyOrderParameterGenerator); } }; diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/OrderSectionAndQuestionsPrePopulatorHolderTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/OrderSectionAndQuestionsPrePopulatorHolderTest.java index 0b4180d00b2..480f141d0b6 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/OrderSectionAndQuestionsPrePopulatorHolderTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/prepopulator/OrderSectionAndQuestionsPrePopulatorHolderTest.java @@ -21,6 +21,7 @@ import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.FamilyAssistancePrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.LinkApplicationBlockPrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.LinkedToHearingBlockPrePopulator; +import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.NonMolestationOrderPrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.ParentalResponsibilityPrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.QuestionBlockOrderPrePopulator; import uk.gov.hmcts.reform.fpl.service.orders.prepopulator.question.RespondentsRefusedBlockPrePopulator; @@ -52,6 +53,7 @@ import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.FAMILY_ASSISTANCE_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.LINKED_TO_HEARING; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.LINK_APPLICATION; +import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.NON_MOLESTATION_ORDER; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.ORDER_TO_AMEND; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.PARENTAL_RESPONSIBILITY; import static uk.gov.hmcts.reform.fpl.model.order.OrderQuestionBlock.PARTY_ALLOWED_CONTACTS_AND_CONDITIONS; @@ -119,6 +121,8 @@ class OrderSectionAndQuestionsPrePopulatorHolderTest { private TranslationRequirementsBlockPrePopulator translationRequirementsBlockPrePopulator; @Mock private FamilyAssistancePrePopulator familyAssistancePrePopulator; + @Mock + private NonMolestationOrderPrePopulator nonMolestationOrderPrePopulator; @InjectMocks private OrderSectionAndQuestionsPrePopulatorHolder underTest; @@ -150,7 +154,8 @@ void setUp() { parentalResponsibilityPrePopulator, allowedContactPrePopulator, declarationOfParentagePrePopulator, - familyAssistancePrePopulator + familyAssistancePrePopulator, + nonMolestationOrderPrePopulator ); questionBlockPrepopulatorMapping = Map.ofEntries( Map.entry(PARTY_ALLOWED_CONTACTS_AND_CONDITIONS, allowedContactPrePopulator), @@ -171,7 +176,8 @@ void setUp() { Map.entry(ORDER_TO_AMEND, amendOrderToDownloadPrePopulator), Map.entry(PARENTAL_RESPONSIBILITY, parentalResponsibilityPrePopulator), Map.entry(DECLARATION_OF_PARENTAGE, declarationOfParentagePrePopulator), - Map.entry(FAMILY_ASSISTANCE_ORDER, familyAssistancePrePopulator) + Map.entry(FAMILY_ASSISTANCE_ORDER, familyAssistancePrePopulator), + Map.entry(NON_MOLESTATION_ORDER, nonMolestationOrderPrePopulator) ); sectionPrepopulatorMapping = Map.of( diff --git a/service/src/test/resources/empty-form-pdf-content.txt b/service/src/test/resources/empty-form-pdf-content.txt index 1ed7d8adfd3..16e4b4c0cf3 100644 --- a/service/src/test/resources/empty-form-pdf-content.txt +++ b/service/src/test/resources/empty-form-pdf-content.txt @@ -127,3 +127,5 @@ Annex Documents -Threshold document -Checklist document I, Emma Taylor, believe that the facts stated in this application are true. + +The applicant understands that proceedings for contempt of court may be brought against anyone who makes, or causes to be made, a false statement in a document verified by a statement of truth without an honest belief in its truth. diff --git a/service/src/test/resources/submitted-form-pdf-content.txt b/service/src/test/resources/submitted-form-pdf-content.txt index 5307b4ec0bb..e9ff61e4ae0 100644 --- a/service/src/test/resources/submitted-form-pdf-content.txt +++ b/service/src/test/resources/submitted-form-pdf-content.txt @@ -298,3 +298,4 @@ John WatsonGuardian children subject to proceedingsChildren involved Annex Documents I, Emma Taylor, believe that the facts stated in this application are true. +The applicant understands that proceedings for contempt of court may be brought against anyone who makes, or causes to be made, a false statement in a document verified by a statement of truth without an honest belief in its truth. From b6ea8837354762cb28df8554255d6f09f0f0de3a Mon Sep 17 00:00:00 2001 From: Alistair Osborne Date: Mon, 19 Aug 2024 16:26:25 +0100 Subject: [PATCH 08/15] DFPL-1791: Add List for Guardian Report API call (#5531) * Async test verifications (fixing flaky async tests) (#5519) * fix running tests locally without the env vars * Add timeouts for async tests * DFPL-1269 Non-molestation order (FL404A) (#5455) * git dfpl1269 * fix test * fix check style * fix manageOrdersRecitalsAndPreamblesOptional and add unit test * allow selecting appllicant and respondent * fix test * Update OrderTest.java * update notification * fix check style * fix code check * Update NotifyTemplates.java * Update NonMolestationOrderEventHandler.java * Upped timeout to 110 seconds (#5528) * Update statement of truth wording - DFPL-2458 (#5502) * Update statement of truth wording at case submission and on C1 and C110a applications. * Update wording for tests. * Update wording to be two separated statements * Update Welsh C110a template and update order of wording in statement of truth. * Remove sentence * Remove sentence in welsh --------- Co-authored-by: Qasim Nawaz Co-authored-by: Qasim Nawaz <96177697+qasimnawaz-moj@users.noreply.github.com> Co-authored-by: Braimah101 <41795070+Braimah101@users.noreply.github.com> * DFPL-1791: Add List for Position statement API call * add event and guardian report document json for manage docs flow/removal * add standard system update for testing * fix spelling error and test for managedocs * fix tests and exclude guardian report from manage docs flow outside removeable * checkstyle * hidden document test fix * checkstyle * Rename CFV Category - Judgments/facts and reasons (#5530) * NightlyUiTestFix (#5536) * FixCaseFlagAPICaseCreationAssertion * FixGatekeepingJudgesSearchListAndShareCase * FixGatekeepingJudgesSearchListAndShareCase * add correct field type param to guardianReportsList * remove cafcasssystemupdate for now * add to json categories for CFV * add permissions for new cafcass system update user * fix merge conflict issue * add extra permissions * fix perms --------- Co-authored-by: Daniel Catchpole Co-authored-by: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Co-authored-by: gavinkeys <72936463+gavinkeys@users.noreply.github.com> Co-authored-by: jamesrferguson1 <94848497+jamesrferguson1@users.noreply.github.com> Co-authored-by: Qasim Nawaz Co-authored-by: Qasim Nawaz <96177697+qasimnawaz-moj@users.noreply.github.com> Co-authored-by: Braimah101 <41795070+Braimah101@users.noreply.github.com> Co-authored-by: prabhamuthu15 <78162288+prabhamuthu15@users.noreply.github.com> --- .../AuthorisationCaseEvent.json | 14 +++++ .../CareSupervision/cafcass-solicitor.json | 28 ++++++++++ .../CareSupervision/cafcass-systemupdate.json | 28 ++++++++++ .../CareSupervision/cafcass.json | 28 ++++++++++ .../CareSupervision/court-admin.json | 28 ++++++++++ .../CareSupervision/judiciary.json | 28 ++++++++++ .../CareSupervision/la-managing.json | 28 ++++++++++ .../CareSupervision/la-shared.json | 28 ++++++++++ .../CareSupervision/la-solicitor.json | 28 ++++++++++ .../CareSupervision/solicitor.json | 52 ++++++++++++++++++ .../CareSupervision/superuser.json | 28 ++++++++++ .../CareSupervision/system-update.json | 28 ++++++++++ .../CaseEvent/CareSupervision/MultiState.json | 14 +++++ .../CareSupervision/caseDocuments.json | 40 ++++++++++++++ ccd-definition/Categories.json | 16 ++++++ .../ManageDocuments/GuardianReport.json | 54 +++++++++++++++++++ .../GuardianReportConfidential.json | 54 +++++++++++++++++++ .../reform/fpl/enums/cfv/DocumentType.java | 6 ++- .../reform/fpl/model/CaseDataParent.java | 4 ++ .../reform/fpl/enums/DocumentTypeTest.java | 10 ++-- .../service/ManageDocumentServiceTest.java | 2 +- 21 files changed, 541 insertions(+), 5 deletions(-) create mode 100644 ccd-definition/ComplexTypes/CareSupervision/ManageDocuments/GuardianReport.json create mode 100644 ccd-definition/ComplexTypes/CareSupervision/ManageDocuments/GuardianReportConfidential.json diff --git a/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent.json b/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent.json index d111135ab0c..cd1957bec31 100644 --- a/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent.json +++ b/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent.json @@ -1711,5 +1711,19 @@ "CRUD": "CR" } ] + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageGuardianReports", + "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-systemupdate", + "caseworker-publiclaw-cafcasssystemupdate" + ], + "CRUD": "CRUD" + } + ] } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-solicitor.json b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-solicitor.json index 85ffc4bebb2..f6f77586d27 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-solicitor.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-solicitor.json @@ -677,5 +677,33 @@ "CaseFieldID": "thresholdList", "UserRole": "[CAFCASSSOLICITOR]", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "[CAFCASSSOLICITOR]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "[CAFCASSSOLICITOR]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "[CAFCASSSOLICITOR]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "[CAFCASSSOLICITOR]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json index 6907a2921be..4b33d1febd7 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json @@ -480,5 +480,33 @@ "CaseFieldID": "previousProceedingListLA", "UserRole": "caseworker-publiclaw-cafcasssystemupdate", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "CRUD" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass.json b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass.json index eb2061dc20f..6a01f7eabf2 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass.json @@ -1356,5 +1356,33 @@ "CaseFieldID": "thresholdListLA", "UserRole": "caseworker-publiclaw-cafcass", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "caseworker-publiclaw-cafcass", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "caseworker-publiclaw-cafcass", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "caseworker-publiclaw-cafcass", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "caseworker-publiclaw-cafcass", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json index df761e1dc95..2d70c3b4bca 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json @@ -6270,5 +6270,33 @@ "CaseFieldID": "refusedHearingOrders", "UserRole": "caseworker-publiclaw-courtadmin", "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json index 0bbb7681c98..87fd1ab7a45 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json @@ -5836,5 +5836,33 @@ "CaseFieldID": "orderReviewUrgency", "UserRole": "caseworker-publiclaw-judiciary", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json index 4865ee0b298..70acd465126 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json @@ -2119,5 +2119,33 @@ "CaseFieldID": "draftOrderUrgency", "UserRole": "[LAMANAGING]", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "[LAMANAGING]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "[LAMANAGING]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "[LAMANAGING]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "[LAMANAGING]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json index c8b37247be3..a1a382e6e83 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json @@ -2187,5 +2187,33 @@ "CaseFieldID": "draftOrderUrgency", "UserRole": "[LASHARED]", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "[LASHARED]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "[LASHARED]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "[LASHARED]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "[LASHARED]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json index 2e7262ee03d..8d561716aa7 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json @@ -3233,5 +3233,33 @@ "CaseFieldID": "draftOrderUrgency", "UserRole": "[LASOLICITOR]", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "[LASOLICITOR]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "[LASOLICITOR]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "[LASOLICITOR]", + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "[LASOLICITOR]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json b/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json index 63c5a001ed9..771fde74930 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json @@ -2453,5 +2453,57 @@ "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]" ], "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRoles": ["[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]" + ], + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRoles": ["[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]" + ], + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRoles": ["[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]" + ], + "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRoles": ["[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]" + ], + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/superuser.json b/ccd-definition/AuthorisationCaseField/CareSupervision/superuser.json index af9d5114eaa..c48f99ddd43 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/superuser.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/superuser.json @@ -1692,5 +1692,33 @@ "CaseFieldID": "refusedHearingOrders", "UserRole": "caseworker-publiclaw-superuser", "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "caseworker-publiclaw-superuser", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "caseworker-publiclaw-superuser", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "caseworker-publiclaw-superuser", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "caseworker-publiclaw-superuser", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json index d9ce4a73ec1..39cab108c17 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json @@ -3618,5 +3618,33 @@ "CaseFieldID": "extendTimelineHearingDate", "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsList", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListLA", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListCTSC", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardianReportsListRemoved", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRUD" } ] diff --git a/ccd-definition/CaseEvent/CareSupervision/MultiState.json b/ccd-definition/CaseEvent/CareSupervision/MultiState.json index 39a9e9ddeaa..dee7366d9a3 100644 --- a/ccd-definition/CaseEvent/CareSupervision/MultiState.json +++ b/ccd-definition/CaseEvent/CareSupervision/MultiState.json @@ -1107,5 +1107,19 @@ "EndButtonLabel": "Save and continue", "CallBackURLAboutToSubmitEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/manage-documentsv2/about-to-submit", "CallBackURLSubmittedEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/manage-documentsv2/submitted" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "manageGuardianReports", + "Name": "Manage Guardian Report", + "Description": "Manage Guardian Report", + "DisplayOrder": 1000, + "PreConditionState(s)": "Submitted;Gatekeeping;GATEKEEPING_LISTING;PREPARE_FOR_HEARING;FINAL_HEARING;CLOSED;Deleted;RETURNED", + "PostConditionState": "*", + "SecurityClassification": "Public", + "ShowSummary": "N", + "ShowEventNotes": "N", + "EndButtonLabel": "Done" } ] diff --git a/ccd-definition/CaseField/CareSupervision/caseDocuments.json b/ccd-definition/CaseField/CareSupervision/caseDocuments.json index 544536855c7..d5725620961 100644 --- a/ccd-definition/CaseField/CareSupervision/caseDocuments.json +++ b/ccd-definition/CaseField/CareSupervision/caseDocuments.json @@ -358,5 +358,45 @@ "Label": "Previous Proceedings", "SecurityClassification": "Public", "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "guardianReportsList", + "FieldType": "Collection", + "FieldTypeParameter": "GuardianReport", + "Label": "Guardian Report", + "SecurityClassification": "Public", + "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "guardianReportsListLA", + "FieldType": "Collection", + "FieldTypeParameter": "GuardianReportConfidential", + "Label": "Guardian report", + "SecurityClassification": "Public", + "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "guardianReportsListCTSC", + "FieldType": "Collection", + "FieldTypeParameter": "GuardianReportConfidential", + "Label": "Guardian report", + "SecurityClassification": "Public", + "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "guardianReportsListRemoved", + "FieldType": "Collection", + "FieldTypeParameter": "GuardianReport", + "Label": "Guardian report", + "SecurityClassification": "Public", + "Searchable": "N" } ] diff --git a/ccd-definition/Categories.json b/ccd-definition/Categories.json index f87282f6dd2..d67e525d3a1 100644 --- a/ccd-definition/Categories.json +++ b/ccd-definition/Categories.json @@ -364,6 +364,22 @@ "DisplayOrder": "110", "ParentCategoryID": "guardiansEvidence" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CategoryID": "guardianReports", + "CategoryLabel": "Guardian's reports", + "DisplayOrder": "1101", + "ParentCategoryID": "guardiansEvidence" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CategoryID": "guardianReportsConfidential", + "CategoryLabel": "Confidential", + "DisplayOrder": "1110", + "ParentCategoryID": "guardianReports" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/ComplexTypes/CareSupervision/ManageDocuments/GuardianReport.json b/ccd-definition/ComplexTypes/CareSupervision/ManageDocuments/GuardianReport.json new file mode 100644 index 00000000000..6c0b465ed6f --- /dev/null +++ b/ccd-definition/ComplexTypes/CareSupervision/ManageDocuments/GuardianReport.json @@ -0,0 +1,54 @@ +[ + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReport", + "ListElementCode": "document", + "FieldType": "Document", + "ElementLabel": "File", + "SecurityClassification": "Public", + "CategoryID": "guardianReports" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReport", + "ListElementCode": "removalReason", + "FieldType": "TextArea", + "ElementLabel": "Reason for removal", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReport", + "ListElementCode": "uploaderType", + "FieldType": "FixedList", + "FieldTypeParameter": "DocumentUploaderType", + "ElementLabel": "Document Uploader Type", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReport", + "ListElementCode": "uploaderCaseRoles", + "FieldType": "MultiSelectList", + "FieldTypeParameter": "CaseRole", + "ElementLabel": "Document Uploader Case Roles", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReport", + "ListElementCode": "markAsConfidential", + "FieldType": "YesOrNo", + "ElementLabel": "Is confidential?", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReport", + "ListElementCode": "translationRequirements", + "FieldType": "FixedRadioList", + "FieldTypeParameter": "LanguageTranslationRequirement", + "ElementLabel": "Is translation needed?", + "SecurityClassification": "Public" + } +] diff --git a/ccd-definition/ComplexTypes/CareSupervision/ManageDocuments/GuardianReportConfidential.json b/ccd-definition/ComplexTypes/CareSupervision/ManageDocuments/GuardianReportConfidential.json new file mode 100644 index 00000000000..74450af7b2c --- /dev/null +++ b/ccd-definition/ComplexTypes/CareSupervision/ManageDocuments/GuardianReportConfidential.json @@ -0,0 +1,54 @@ +[ + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReportConfidential", + "ListElementCode": "document", + "FieldType": "Document", + "ElementLabel": "File", + "SecurityClassification": "Public", + "CategoryID": "guardianReportsConfidential" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReportConfidential", + "ListElementCode": "removalReason", + "FieldType": "TextArea", + "ElementLabel": "Reason for removal", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReportConfidential", + "ListElementCode": "uploaderType", + "FieldType": "FixedList", + "FieldTypeParameter": "DocumentUploaderType", + "ElementLabel": "Document Uploader Type", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReportConfidential", + "ListElementCode": "uploaderCaseRoles", + "FieldType": "MultiSelectList", + "FieldTypeParameter": "CaseRole", + "ElementLabel": "Document Uploader Case Roles", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReportConfidential", + "ListElementCode": "markAsConfidential", + "FieldType": "YesOrNo", + "ElementLabel": "Is confidential?", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GuardianReportConfidential", + "ListElementCode": "translationRequirements", + "FieldType": "FixedRadioList", + "FieldTypeParameter": "LanguageTranslationRequirement", + "ElementLabel": "Is translation needed?", + "SecurityClassification": "Public" + } +] diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java index eaac02f65ce..42332c09698 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/cfv/DocumentType.java @@ -90,7 +90,7 @@ public enum DocumentType { AA_PARENT_ORDERS("Orders", null, false, false, false, null, - null, 60, null, "orders"), + null, 60, null, "orders"), JUDGEMENTS("└─ Judgments/facts and reasons", standardResolver("judgementList"), false, false, false, defaultWithDocumentBuilder(), @@ -209,6 +209,10 @@ public enum DocumentType { false, false, false, null, null, 340, null, "placementApplicationsAndResponses"), + GUARDIAN_REPORT("Guardian report", standardResolver("guardianReportsList"), + true, true, true, + defaultWithDocumentBuilder(), + GUARDIAN_EVIDENCE, 350, null, "guardianReports"), ARCHIVED_DOCUMENTS("Archived migrated data", standardResolver("archivedDocumentsList"), true, true, true, defaultWithDocumentBuilder(), diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseDataParent.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseDataParent.java index aa1c583f92b..b62f677993e 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseDataParent.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseDataParent.java @@ -21,6 +21,10 @@ @Data public class CaseDataParent { + protected final List> guardianReportsList; + protected final List> guardianReportsListLA; + protected final List> guardianReportsListCTSC; + protected final List> guardianReportsListRemoved; protected final List> respStmtList; protected final List> respStmtListLA; protected final List> respStmtListCTSC; diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/enums/DocumentTypeTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/enums/DocumentTypeTest.java index 04cc39e1cd2..76487d1e11c 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/enums/DocumentTypeTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/enums/DocumentTypeTest.java @@ -7,6 +7,7 @@ import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.ARCHIVED_DOCUMENTS; +import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.GUARDIAN_REPORT; import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.POSITION_STATEMENTS_CHILD; import static uk.gov.hmcts.reform.fpl.enums.cfv.DocumentType.POSITION_STATEMENTS_RESPONDENT; @@ -66,10 +67,13 @@ void testToJsonFieldName() { @Test void shouldHiddenFromUploadNewDocument() { assertThat(Arrays.stream(DocumentType.values()).filter(dt -> dt.isHiddenFromLAUpload())) - .containsExactlyInAnyOrder(ARCHIVED_DOCUMENTS, POSITION_STATEMENTS_CHILD, POSITION_STATEMENTS_RESPONDENT); + .containsExactlyInAnyOrder(ARCHIVED_DOCUMENTS, POSITION_STATEMENTS_CHILD, POSITION_STATEMENTS_RESPONDENT, + GUARDIAN_REPORT); assertThat(Arrays.stream(DocumentType.values()).filter(dt -> dt.isHiddenFromCTSCUpload())) - .containsExactlyInAnyOrder(ARCHIVED_DOCUMENTS, POSITION_STATEMENTS_CHILD, POSITION_STATEMENTS_RESPONDENT); + .containsExactlyInAnyOrder(ARCHIVED_DOCUMENTS, POSITION_STATEMENTS_CHILD, POSITION_STATEMENTS_RESPONDENT, + GUARDIAN_REPORT); assertThat(Arrays.stream(DocumentType.values()).filter(dt -> dt.isHiddenFromSolicitorUpload())) - .containsExactlyInAnyOrder(ARCHIVED_DOCUMENTS, POSITION_STATEMENTS_CHILD, POSITION_STATEMENTS_RESPONDENT); + .containsExactlyInAnyOrder(ARCHIVED_DOCUMENTS, POSITION_STATEMENTS_CHILD, POSITION_STATEMENTS_RESPONDENT, + GUARDIAN_REPORT); } } diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/ManageDocumentServiceTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/ManageDocumentServiceTest.java index 08a9d121604..9c7de4f4f3b 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/ManageDocumentServiceTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/ManageDocumentServiceTest.java @@ -413,7 +413,7 @@ private static Stream buildDocumentTypeDynamicListArgs() { toPair(POLICE_DISCLOSURE), toPair(MEDICAL_RECORDS), toPair(COURT_CORRESPONDENCE), - toPair(NOTICE_OF_ACTING_OR_ISSUE), + toPair(NOTICE_OF_ACTING_OR_ISSUE), toPair(PREVIOUS_PROCEEDING), b == 0 ? toPair(PLACEMENT_RESPONSES) : Pair.of("", "")); args.add(Arguments.of(i, b == 0, expected.stream() From 17255c771d5ac0bec6662017faaad9b3fd6b3a62 Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:29:52 +0100 Subject: [PATCH 09/15] Dfpl 1790 (#5541) * update ccd config * update event name * Update 6_CasePeople.json * grant access to cafcass system user * update field permission * update Guardian fields * fix ccd definition after resolving conflict --- .../AuthorisationCaseEvent.json | 7 ++++ .../CareSupervision/barrister.json | 7 ++++ .../CareSupervision/cafcass-solicitor.json | 7 ++++ .../CareSupervision/cafcass-systemupdate.json | 7 ++++ .../CareSupervision/cafcass.json | 7 ++++ .../CareSupervision/court-admin.json | 7 ++++ .../CareSupervision/eps-managing.json | 7 ++++ .../CareSupervision/gatekeeper.json | 7 ++++ .../CareSupervision/judiciary.json | 7 ++++ .../CareSupervision/la-barrister.json | 7 ++++ .../CareSupervision/la-managing.json | 7 ++++ .../CareSupervision/la-shared.json | 7 ++++ .../CareSupervision/la-solicitor.json | 7 ++++ .../CareSupervision/magistrate.json | 7 ++++ .../CareSupervision/solicitor.json | 13 +++++++ .../CareSupervision/superuser.json | 7 ++++ .../CareSupervision/system-update.json | 7 ++++ .../CaseEvent/CareSupervision/MultiState.json | 9 +++++ .../CaseField/CareSupervision/caseField.json | 10 ++++++ .../CareSupervision/6_CasePeople.json | 24 +++++++++---- .../CareSupervision/Guardian.json | 35 +++++++++++++++++++ .../gov/hmcts/reform/fpl/NotifyTemplates.java | 1 + .../gov/hmcts/reform/fpl/model/Guardian.java | 17 +++++++++ 23 files changed, 214 insertions(+), 7 deletions(-) create mode 100644 ccd-definition/ComplexTypes/CareSupervision/Guardian.json create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/Guardian.java diff --git a/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent.json b/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent.json index cd1957bec31..2d2164720d3 100644 --- a/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent.json +++ b/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent.json @@ -708,6 +708,13 @@ "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "internal-update-guardians", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/barrister.json b/ccd-definition/AuthorisationCaseField/CareSupervision/barrister.json index e5433e1b783..0717f67a287 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/barrister.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/barrister.json @@ -1119,5 +1119,12 @@ "CaseFieldID": "draftOrderUrgency", "UserRole": "[BARRISTER]", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "[BARRISTER]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-solicitor.json b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-solicitor.json index f6f77586d27..6c2487827fd 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-solicitor.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-solicitor.json @@ -705,5 +705,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "[CAFCASSSOLICITOR]", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "[CAFCASSSOLICITOR]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json index 4b33d1febd7..f8c44d98a05 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass-systemupdate.json @@ -508,5 +508,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "caseworker-publiclaw-cafcasssystemupdate", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "caseworker-publiclaw-cafcasssystemupdate", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass.json b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass.json index 6a01f7eabf2..6f6aeac395b 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/cafcass.json @@ -1384,5 +1384,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "caseworker-publiclaw-cafcass", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "caseworker-publiclaw-cafcass", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json index 2d70c3b4bca..a08eb175ed5 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json @@ -6298,5 +6298,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "caseworker-publiclaw-courtadmin", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/eps-managing.json b/ccd-definition/AuthorisationCaseField/CareSupervision/eps-managing.json index aa5ef610b6e..756e7b960ff 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/eps-managing.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/eps-managing.json @@ -2126,5 +2126,12 @@ "CaseFieldID": "draftOrderUrgency", "UserRole": "[EPSMANAGING]", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "[EPSMANAGING]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json b/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json index aab26006284..e1607b9d189 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json @@ -5248,5 +5248,12 @@ "CaseFieldID": "orderReviewUrgency", "UserRole": "caseworker-publiclaw-gatekeeper", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json index 87fd1ab7a45..b79bb68863f 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json @@ -5864,5 +5864,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "caseworker-publiclaw-judiciary", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-barrister.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-barrister.json index e6efc9ba0d3..1dffc1b2c64 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-barrister.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-barrister.json @@ -1510,5 +1510,12 @@ "CaseFieldID": "draftOrderUrgency", "UserRole": "[LABARRISTER]", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "[LABARRISTER]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json index 70acd465126..a49b23165b2 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-managing.json @@ -2147,5 +2147,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "[LAMANAGING]", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "[LAMANAGING]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json index a1a382e6e83..cd70e30b218 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-shared.json @@ -2215,5 +2215,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "[LASHARED]", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "[LASHARED]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json b/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json index 8d561716aa7..6e49e6c73b8 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/la-solicitor.json @@ -3261,5 +3261,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "[LASOLICITOR]", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "[LASOLICITOR]", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/magistrate.json b/ccd-definition/AuthorisationCaseField/CareSupervision/magistrate.json index 9c7cb848af0..e68dbe67619 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/magistrate.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/magistrate.json @@ -2686,5 +2686,12 @@ "CaseFieldID": "orderReviewUrgency", "UserRole": "caseworker-publiclaw-magistrate", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "caseworker-publiclaw-magistrate", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json b/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json index 771fde74930..af7fea57994 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/solicitor.json @@ -2505,5 +2505,18 @@ "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]" ], "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRoles": ["[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]" + ], + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/superuser.json b/ccd-definition/AuthorisationCaseField/CareSupervision/superuser.json index c48f99ddd43..50a51efcaf2 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/superuser.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/superuser.json @@ -1720,5 +1720,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "caseworker-publiclaw-superuser", "CRUD": "R" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "caseworker-publiclaw-superuser", + "CRUD": "R" } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json index 39cab108c17..1ff94758467 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json @@ -3646,5 +3646,12 @@ "CaseFieldID": "guardianReportsListRemoved", "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "guardians", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRUD" } ] diff --git a/ccd-definition/CaseEvent/CareSupervision/MultiState.json b/ccd-definition/CaseEvent/CareSupervision/MultiState.json index dee7366d9a3..a335d8c198b 100644 --- a/ccd-definition/CaseEvent/CareSupervision/MultiState.json +++ b/ccd-definition/CaseEvent/CareSupervision/MultiState.json @@ -87,6 +87,15 @@ "CallBackURLAboutToSubmitEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/approve-draft-orders/post-submit-callback/about-to-submit", "CallBackURLSubmittedEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/approve-draft-orders/post-submit-callback/submitted" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "internal-update-guardians", + "Name": "Cafcass API -Update guardians", + "PreConditionState(s)": "*", + "PostConditionState": "*", + "SecurityClassification": "Public" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/CaseField/CareSupervision/caseField.json b/ccd-definition/CaseField/CareSupervision/caseField.json index 2a59e864d0c..83dc33c87f6 100644 --- a/ccd-definition/CaseField/CareSupervision/caseField.json +++ b/ccd-definition/CaseField/CareSupervision/caseField.json @@ -2719,5 +2719,15 @@ "FieldType": "Date", "SecurityClassification": "Public", "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "guardians", + "Label": "Guardian", + "FieldType": "Collection", + "FieldTypeParameter": "Guardian", + "SecurityClassification": "Public", + "Searchable": "N" } ] diff --git a/ccd-definition/CaseTypeTab/CareSupervision/6_CasePeople.json b/ccd-definition/CaseTypeTab/CareSupervision/6_CasePeople.json index 536352bbd9f..94d243ab22f 100644 --- a/ccd-definition/CaseTypeTab/CareSupervision/6_CasePeople.json +++ b/ccd-definition/CaseTypeTab/CareSupervision/6_CasePeople.json @@ -48,9 +48,19 @@ "TabID": "CasePeopleTab", "TabLabel": "People in the case", "TabDisplayOrder": 6, - "CaseFieldID": "respondents1", + "CaseFieldID": "guardians", "TabFieldDisplayOrder": 3 }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "Channel": "CaseWorker", + "TabID": "CasePeopleTab", + "TabLabel": "People in the case", + "TabDisplayOrder": 6, + "CaseFieldID": "respondents1", + "TabFieldDisplayOrder": 4 + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", @@ -59,7 +69,7 @@ "TabLabel": "People in the case", "TabDisplayOrder": 6, "CaseFieldID": "applicants", - "TabFieldDisplayOrder": 4, + "TabFieldDisplayOrder": 5, "FieldShowCondition": "localAuthorities != \"*\"" }, { @@ -70,7 +80,7 @@ "TabLabel": "People in the case", "TabDisplayOrder": 6, "CaseFieldID": "localAuthorities", - "TabFieldDisplayOrder": 4 + "TabFieldDisplayOrder": 5 }, { "LiveFrom": "01/01/2017", @@ -80,7 +90,7 @@ "TabLabel": "People in the case", "TabDisplayOrder": 6, "CaseFieldID": "legalRepresentatives", - "TabFieldDisplayOrder": 5 + "TabFieldDisplayOrder": 6 }, { "LiveFrom": "01/01/2017", @@ -90,7 +100,7 @@ "TabLabel": "People in the case", "TabDisplayOrder": 6, "CaseFieldID": "solicitor", - "TabFieldDisplayOrder": 6, + "TabFieldDisplayOrder": 7, "FieldShowCondition": "localAuthorities != \"*\"" }, { @@ -101,7 +111,7 @@ "TabLabel": "People in the case", "TabDisplayOrder": 6, "CaseFieldID": "others", - "TabFieldDisplayOrder": 7 + "TabFieldDisplayOrder": 8 }, { "LiveFrom": "01/01/2017", @@ -111,6 +121,6 @@ "TabLabel": "People in the case", "TabDisplayOrder": 6, "CaseFieldID": "representatives", - "TabFieldDisplayOrder": 8 + "TabFieldDisplayOrder": 9 } ] diff --git a/ccd-definition/ComplexTypes/CareSupervision/Guardian.json b/ccd-definition/ComplexTypes/CareSupervision/Guardian.json new file mode 100644 index 00000000000..f5c58374ab5 --- /dev/null +++ b/ccd-definition/ComplexTypes/CareSupervision/Guardian.json @@ -0,0 +1,35 @@ +[ + { + "LiveFrom": "01/01/2017", + "ID": "Guardian", + "ListElementCode": "guardianName", + "FieldType": "Text", + "ElementLabel": "Name of Guardian", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "Guardian", + "ListElementCode": "telephoneNumber", + "FieldType": "Text", + "ElementLabel": "Telephone number", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "Guardian", + "ListElementCode": "email", + "FieldType": "Email", + "ElementLabel": "Email address", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "Guardian", + "ListElementCode": "children", + "FieldType": "Collection", + "FieldTypeParameter": "Text", + "ElementLabel": "Representing", + "SecurityClassification": "Public" + } +] \ No newline at end of file diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/NotifyTemplates.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/NotifyTemplates.java index 5bcebc7718e..fd8ca000eaf 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/NotifyTemplates.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/NotifyTemplates.java @@ -106,4 +106,5 @@ private NotifyTemplates() { public static final String COURT_ADMIN_UDO_LISTING_TEMPLATE = "bae4b7a8-44a2-4337-a720-04cc46607322"; public static final String CHASE_OUTSTANDING_ORDER_LA_TEMPLATE = "a8b9812a-bc54-43f6-84e5-c3f8195320fa"; public static final String VACATE_HEARING = "738d7a28-4699-4b32-a793-25436bf2d19c"; + public static final String GUARDIAN_UPDATED = "efc77c28-c32a-43d3-93f6-d75542d3743b"; } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/Guardian.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/Guardian.java new file mode 100644 index 00000000000..a41b54378ca --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/Guardian.java @@ -0,0 +1,17 @@ +package uk.gov.hmcts.reform.fpl.model; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +import java.util.List; + +@Getter +@EqualsAndHashCode +@Builder +public class Guardian { + private String guardianName; + private String telephoneNumber; + private String email; + private List children; +} From 680da71b222937dd93995c6ae3bea67f9f1785c7 Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:54:04 +0100 Subject: [PATCH 10/15] Update system-update.json (#5544) --- .../CareSupervision/system-update.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json index 1ff94758467..55d6c543fc5 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json @@ -293,6 +293,13 @@ "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRUD" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "proceeding", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRUD" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", From a958078fe131c5a6427386aa7a2f79cb85748f4d Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Wed, 21 Aug 2024 09:05:26 +0100 Subject: [PATCH 11/15] add genderIdentification to response (#5546) --- .../service/cafcass/api/CafcassApiRespondentsConverter.java | 1 + .../cafcass/api/CafcassApiRespondentsConverterTest.java | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java index 9c2a5e5ea16..fcb12802295 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java @@ -33,6 +33,7 @@ private List getCafcassApiRespondents(CaseData caseData) { builder = builder.firstName(respondentParty.getFirstName()) .lastName(respondentParty.getLastName()) .gender(respondentParty.getGender()) + .genderIdentification(respondentParty.getGenderIdentification()) .addressKnown(isYes(respondentParty.getAddressKnow())) .addressUnknownReason(respondentParty.getAddressNotKnowReason()) .address(getCafcassApiAddress(respondentParty.getAddress())) diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java index b8c0f6fc965..e4d00f3b979 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java @@ -43,7 +43,8 @@ void shouldConvertAllRespondents() { .party(RespondentParty.builder() .firstName("Respondent2") .lastName("LastName") - .gender(Gender.MALE.toString()) + .gender(Gender.OTHER.toString()) + .genderIdentification("genderIdentification") .addressKnow(YesNo.NO.toString()) .addressNotKnowReason("addressUnknownReason") .relationshipToChild("relationshipToChild") @@ -75,7 +76,8 @@ void shouldConvertAllRespondents() { CafcassApiRespondent.builder() .firstName("Respondent2") .lastName("LastName") - .gender(Gender.MALE.toString()) + .gender(Gender.OTHER.toString()) + .genderIdentification("genderIdentification") .addressKnown(false) .addressUnknownReason("addressUnknownReason") .relationshipToChild("relationshipToChild") From 9caf2d6287327a248adf7195d9ac52f81e7ff7db Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:49:07 +0100 Subject: [PATCH 12/15] DFPL-1762 (#5540) * update ccd config * update event name * Update 6_CasePeople.json * add guardian logic * grant access to cafcass system user * update field permission * update Guardian fields * update validation * add validation * Update Guardian.java * UpdateGuardianContentProvider * Create UpdateGuardianNotifyData.java * add update guardian notification * fix ccd definition after resolving conflict * update controller test * fix code style * fix guardian * simplify checkIfAnyGuardianUpdated --- .../CareSupervision/Guardian.json | 2 +- ...afcassApiUpdateGuardianControllerTest.java | 125 ++++++++++++++++++ .../cafcass/CafcassCasesControllerTest.java | 79 ----------- .../cafcass/CafcassCasesController.java | 62 +++++---- .../fpl/events/UpdateGuardianEvent.java | 11 ++ .../handlers/UpdateGuardiansEventHandler.java | 65 +++++++++ .../gov/hmcts/reform/fpl/model/CaseData.java | 1 + .../gov/hmcts/reform/fpl/model/Guardian.java | 16 ++- .../notify/UpdateGuardianNotifyData.java | 14 ++ .../api/CafcassApiGuardianService.java | 44 ++++++ .../UpdateGuardianContentProvider.java | 21 +++ .../UpdateGuardiansEventHandlerTest.java | 83 ++++++++++++ .../api/CafcassApiGuardianServiceTest.java | 115 ++++++++++++++++ .../UpdateGuardianContentProviderTest.java | 36 +++++ 14 files changed, 567 insertions(+), 107 deletions(-) create mode 100644 service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiUpdateGuardianControllerTest.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/events/UpdateGuardianEvent.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/UpdateGuardiansEventHandler.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/model/notify/UpdateGuardianNotifyData.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiGuardianService.java create mode 100644 service/src/main/java/uk/gov/hmcts/reform/fpl/service/email/content/UpdateGuardianContentProvider.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/handlers/UpdateGuardiansEventHandlerTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiGuardianServiceTest.java create mode 100644 service/src/test/java/uk/gov/hmcts/reform/fpl/service/email/content/UpdateGuardianContentProviderTest.java diff --git a/ccd-definition/ComplexTypes/CareSupervision/Guardian.json b/ccd-definition/ComplexTypes/CareSupervision/Guardian.json index f5c58374ab5..c79b0a94334 100644 --- a/ccd-definition/ComplexTypes/CareSupervision/Guardian.json +++ b/ccd-definition/ComplexTypes/CareSupervision/Guardian.json @@ -26,7 +26,7 @@ { "LiveFrom": "01/01/2017", "ID": "Guardian", - "ListElementCode": "children", + "ListElementCode": "childrenRepresenting", "FieldType": "Collection", "FieldTypeParameter": "Text", "ElementLabel": "Representing", diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiUpdateGuardianControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiUpdateGuardianControllerTest.java new file mode 100644 index 00000000000..05100aca1e7 --- /dev/null +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassApiUpdateGuardianControllerTest.java @@ -0,0 +1,125 @@ +package uk.gov.hmcts.reform.fpl.controllers.cafcass; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; +import uk.gov.hmcts.reform.fpl.events.UpdateGuardianEvent; +import uk.gov.hmcts.reform.fpl.handlers.UpdateGuardiansEventHandler; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Guardian; +import uk.gov.hmcts.reform.fpl.service.CaseConverter; +import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiGuardianService; +import uk.gov.hmcts.reform.fpl.service.ccd.CoreCaseDataService; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + +public class CafcassApiUpdateGuardianControllerTest extends CafcassApiControllerBaseTest { + private static final String VALID_PAYLOAD = """ + [ + { + "guardianName": "John Smith", + "telephoneNumber": "01234567890", + "email": "john.smith@example.com", + "children": ["Child one"] + } + ]"""; + private static final List VALID_UPDATE_LIST = List.of(Guardian.builder().guardianName("John Smith") + .telephoneNumber("01234567890").email("john.smith@example.com").children(List.of("Child one")).build()); + + private static final String CASE_ID = "1"; + private static final CaseDetails CASE_DETAILS = mock(CaseDetails.class); + private static final CaseData CASE_DATA = CaseData.builder().build(); + private static final CaseDetails CASE_DETAILS_UPDATED = mock(CaseDetails.class); + private static final CaseData CASE_DATA_UPDATED = + CaseData.builder().guardians(wrapElements(VALID_UPDATE_LIST)).build(); + @MockBean + private CaseConverter caseConverter; + @MockBean + private CoreCaseDataService coreCaseDataService; + @MockBean + private UpdateGuardiansEventHandler updateGuardiansEventHandler; + @MockBean + private CafcassApiGuardianService cafcassApiGuardianService; + @Captor + private ArgumentCaptor updateGuardianEventCaptor; + + @BeforeEach + void setup() { + when(coreCaseDataService.findCaseDetailsById(CASE_ID)).thenReturn(CASE_DETAILS); + when(caseConverter.convert(CASE_DETAILS)).thenReturn(CASE_DATA); + } + + @Test + void shouldUpdateGuardiansAndNotifyParties() throws Exception { + when(caseConverter.convert(CASE_DETAILS_UPDATED)).thenReturn(CASE_DATA_UPDATED); + when(cafcassApiGuardianService.validateGuardians(any())).thenCallRealMethod(); + when(cafcassApiGuardianService.checkIfAnyGuardianUpdated(any(), any())).thenCallRealMethod(); + when(cafcassApiGuardianService.updateGuardians(CASE_DATA, VALID_UPDATE_LIST)).thenReturn(CASE_DETAILS_UPDATED); + + sendRequest(buildPostRequest(String.format("/cases/%s/guardians", CASE_ID)) + .contentType(MediaType.APPLICATION_JSON) + .content(VALID_PAYLOAD), + 200); + + verify(updateGuardiansEventHandler).notifyLocalAuthorities(updateGuardianEventCaptor.capture()); + assertEquals(updateGuardianEventCaptor.getValue().getCaseData(), CASE_DATA_UPDATED); + + verify(updateGuardiansEventHandler).notifyChildSolicitors(updateGuardianEventCaptor.capture()); + assertEquals(updateGuardianEventCaptor.getValue().getCaseData(), CASE_DATA_UPDATED); + + verify(updateGuardiansEventHandler).notifyRespondentSolicitors(updateGuardianEventCaptor.capture()); + assertEquals(updateGuardianEventCaptor.getValue().getCaseData(), CASE_DATA_UPDATED); + + verifyNoMoreInteractions(updateGuardiansEventHandler); + } + + @Test + void shouldReturn400IfInputNotValid() throws Exception { + sendRequest(buildPostRequest(String.format("/cases/%s/guardians", CASE_ID)) + .contentType(MediaType.APPLICATION_JSON) + .content(""), + 400); + + + sendRequest(buildPostRequest(String.format("/cases/%s/guardians", CASE_ID)) + .contentType(MediaType.APPLICATION_JSON) + .content(""" + [ + { + "guardianName": "John Smith", + "telephoneNumber": "01234567890", + "email": "john.smith@example.com" + } + ]"""), + 400); + } + + @Test + void shouldNotUpdateGuardianIfNoChanges() throws Exception { + when(caseConverter.convert(CASE_DETAILS)).thenReturn(CASE_DATA_UPDATED); + when(cafcassApiGuardianService.validateGuardians(any())).thenCallRealMethod(); + when(cafcassApiGuardianService.checkIfAnyGuardianUpdated(any(), any())).thenCallRealMethod(); + + sendRequest(buildPostRequest(String.format("/cases/%s/guardians", CASE_ID)) + .contentType(MediaType.APPLICATION_JSON) + .content(VALID_PAYLOAD), + 200); + + verify(cafcassApiGuardianService, times(0)).updateGuardians(any(), any()); + verifyNoInteractions(updateGuardiansEventHandler); + } +} diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java index 1500f4c332a..9a3fee4c353 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesControllerTest.java @@ -17,7 +17,6 @@ import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static uk.gov.hmcts.reform.fpl.enums.UserRole.CAFCASS_SYSTEM_UPDATE; @@ -84,82 +83,4 @@ void uploadDocument400() throws Exception { assertEquals(response.getResponse().getStatus(), 400); } - - @Test - void uploadGuardians() throws Exception { - UUID caseId = UUID.randomUUID(); - - MvcResult response = mockMvc.perform(post("/cases/%s/guardians".formatted(caseId)) - .content("[\n" - + " {\n" - + " \"guardianName\": \"John Smith\",\n" - + " \"telephoneNumber\": \"01234567890\",\n" - + " \"email\": \"john.smith@example.com\",\n" - + " \"children\": [\n" - + " \"Joe Bloggs\"\n" - + " ]\n" - + " }\n" - + "]") - .contentType(MediaType.APPLICATION_JSON) - .header("authorization", USER_AUTH_TOKEN)) - .andExpect(status().is(200)) - .andReturn(); - - assertEquals("uploadGuardians - caseId: [%s], no of guardians: [%s]\nguardianName: [%s], children: [%s]\n" - .formatted(caseId, 1, "John Smith", "Joe Bloggs"), - response.getResponse().getContentAsString()); - } - - @Test - void uploadGuardians400() throws Exception { - UUID caseId = UUID.randomUUID(); - - MvcResult response = mockMvc.perform(post("/cases/%s/guardians".formatted(caseId)) - .content("[]") - .contentType(MediaType.APPLICATION_JSON) - .header("authorization", USER_AUTH_TOKEN)) - .andExpect(status().is(400)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 400); - - response = mockMvc.perform(post("/cases/%s/guardians".formatted(" ")) - .content("[\n" - + " {\n" - + " \"guardianName\": \"John Smith\",\n" - + " \"telephoneNumber\": \"01234567890\",\n" - + " \"email\": \"john.smith@example.com\",\n" - + " \"children\": [\n" - + " \"Joe Bloggs\"\n" - + " ]\n" - + " }\n" - + "]") - .contentType(MediaType.APPLICATION_JSON) - .header("authorization", USER_AUTH_TOKEN)) - .andExpect(status().is(400)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 400); - } - - @Test - void uploadGuardians500() throws Exception { - UUID caseId = UUID.randomUUID(); - - MvcResult response = mockMvc.perform(post("/cases/%s/guardians".formatted(caseId)) - .content("[\n" - + " {\n" - + " \"guardianName\": \"John Smith\",\n" - + " \"telephoneNumber\": \"01234567890\",\n" - + " \"email\": \"john.smith@example.com\",\n" - + " \"children\": \"12313\"" - + " }\n" - + "]") - .contentType(MediaType.APPLICATION_JSON) - .header("authorization", USER_AUTH_TOKEN)) - .andExpect(status().is(500)) - .andReturn(); - - assertEquals(response.getResponse().getStatus(), 500); - } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java index 7755e961e0a..68eddf628a9 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/cafcass/CafcassCasesController.java @@ -13,28 +13,37 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; +import uk.gov.hmcts.reform.fpl.events.UpdateGuardianEvent; import uk.gov.hmcts.reform.fpl.exceptions.EmptyFileException; import uk.gov.hmcts.reform.fpl.exceptions.api.BadInputException; import uk.gov.hmcts.reform.fpl.exceptions.api.NotFoundException; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Guardian; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCase; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSearchCasesResponse; +import uk.gov.hmcts.reform.fpl.service.CaseConverter; +import uk.gov.hmcts.reform.fpl.service.EventService; import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiDocumentService; +import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiGuardianService; import uk.gov.hmcts.reform.fpl.service.cafcass.api.CafcassApiSearchCaseService; +import uk.gov.hmcts.reform.fpl.service.ccd.CoreCaseDataService; import java.time.LocalDateTime; import java.util.List; -import java.util.Map; import java.util.UUID; -import static org.apache.commons.lang3.ObjectUtils.isEmpty; - @Slf4j @RestController @RequestMapping("/cases") @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class CafcassCasesController { + private final EventService eventPublisher; + private final CaseConverter caseConverter; + private final CoreCaseDataService coreCaseDataService; private final CafcassApiSearchCaseService cafcassApiSearchCaseService; private final CafcassApiDocumentService cafcassApiDocumentService; + private final CafcassApiGuardianService cafcassApiGuardianService; @GetMapping("") public CafcassApiSearchCasesResponse searchCases( @@ -88,33 +97,34 @@ public ResponseEntity uploadDocument(@PathVariable String caseId, } } - @SuppressWarnings("unchecked") @PostMapping("{caseId}/guardians") public ResponseEntity uploadGuardians(@PathVariable String caseId, - @RequestBody List> guardians) { - log.info("uploadGuardians request received"); + @RequestBody List guardians) { + log.info("uploadGuardians request received - caseId: [{}]", caseId); + if (!cafcassApiGuardianService.validateGuardians(guardians)) { + throw new BadInputException(); + } + + CaseData caseData = getCaseData(caseId); + + if (cafcassApiGuardianService.checkIfAnyGuardianUpdated(caseData, guardians)) { + CaseData updatedCaseData = getCaseData(cafcassApiGuardianService.updateGuardians(caseData, guardians)); + eventPublisher.publishEvent(UpdateGuardianEvent.builder().caseData(updatedCaseData).build()); + } else { + log.info("uploadGuardians - no changes"); + } + return ResponseEntity.ok().build(); + } + + private CaseData getCaseData(String caseId) { try { - if (isEmpty(guardians)) { - throw new IllegalArgumentException("list empty"); - } - - StringBuilder sb = new StringBuilder(); - sb.append("uploadGuardians - caseId: [%s], no of guardians: [%s]\n" - .formatted(UUID.fromString(caseId), guardians.size())); - log.info("uploadGuardians guardians size " + guardians.size()); - - guardians.forEach(guardian -> { - sb.append("guardianName: [%s], ".formatted(guardian.get("guardianName"))); - sb.append("children: [%s]".formatted(String.join(", ", - ((List) guardian.get("children"))))); - sb.append("\n"); - }); - - return ResponseEntity.ok(sb); - } catch (IllegalArgumentException e) { - return ResponseEntity.status(400).body("bad input parameter - " + e.getMessage()); + return getCaseData(coreCaseDataService.findCaseDetailsById(caseId)); } catch (Exception e) { - return ResponseEntity.status(500).body("Internal server error"); + throw new NotFoundException("Case reference not found"); } } + + private CaseData getCaseData(CaseDetails caseDetails) { + return caseConverter.convert(caseDetails); + } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/events/UpdateGuardianEvent.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/events/UpdateGuardianEvent.java new file mode 100644 index 00000000000..cc3aad3e1bd --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/events/UpdateGuardianEvent.java @@ -0,0 +1,11 @@ +package uk.gov.hmcts.reform.fpl.events; + +import lombok.Builder; +import lombok.Getter; +import uk.gov.hmcts.reform.fpl.model.CaseData; + +@Getter +@Builder +public class UpdateGuardianEvent { + private final CaseData caseData; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/UpdateGuardiansEventHandler.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/UpdateGuardiansEventHandler.java new file mode 100644 index 00000000000..c5943b1d8bc --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/handlers/UpdateGuardiansEventHandler.java @@ -0,0 +1,65 @@ +package uk.gov.hmcts.reform.fpl.handlers; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.fpl.events.UpdateGuardianEvent; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.notify.NotifyData; +import uk.gov.hmcts.reform.fpl.model.notify.RecipientsRequest; +import uk.gov.hmcts.reform.fpl.service.LocalAuthorityRecipientsService; +import uk.gov.hmcts.reform.fpl.service.email.content.UpdateGuardianContentProvider; +import uk.gov.hmcts.reform.fpl.service.email.NotificationService; +import uk.gov.hmcts.reform.fpl.service.email.RepresentativesInbox; + +import java.util.Set; + +import static uk.gov.hmcts.reform.fpl.NotifyTemplates.GUARDIAN_UPDATED; +import static uk.gov.hmcts.reform.fpl.enums.RepresentativeServingPreferences.DIGITAL_SERVICE; + +@Component +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class UpdateGuardiansEventHandler { + private final UpdateGuardianContentProvider updateGuardianContentProvider; + private final LocalAuthorityRecipientsService localAuthorityRecipients; + private final RepresentativesInbox representativesInbox; + private final NotificationService notificationService; + + @Async + @EventListener + public void notifyLocalAuthorities(final UpdateGuardianEvent event) { + final CaseData caseData = event.getCaseData(); + final RecipientsRequest recipientsRequest = RecipientsRequest.builder() + .caseData(caseData) + .secondaryLocalAuthorityExcluded(true) + .legalRepresentativesExcluded(true) + .build(); + + final Set recipients = localAuthorityRecipients.getRecipients(recipientsRequest); + + notificationService.sendEmail(GUARDIAN_UPDATED, recipients, + updateGuardianContentProvider.getUpdateGuardianNotifyData(caseData), caseData.getId()); + } + + @Async + @EventListener + public void notifyRespondentSolicitors(final UpdateGuardianEvent event) { + final CaseData caseData = event.getCaseData(); + final Set recipients = representativesInbox.getRespondentSolicitorEmails(caseData, DIGITAL_SERVICE); + NotifyData notifyData = updateGuardianContentProvider.getUpdateGuardianNotifyData(caseData); + + notificationService.sendEmail(GUARDIAN_UPDATED, recipients, notifyData, caseData.getId()); + } + + @Async + @EventListener + public void notifyChildSolicitors(final UpdateGuardianEvent event) { + final CaseData caseData = event.getCaseData(); + final Set recipients = representativesInbox.getChildrenSolicitorEmails(caseData, DIGITAL_SERVICE); + NotifyData notifyData = updateGuardianContentProvider.getUpdateGuardianNotifyData(caseData); + + notificationService.sendEmail(GUARDIAN_UPDATED, recipients, notifyData, caseData.getId()); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java index 8f6b9671db9..f4c49026626 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java @@ -303,6 +303,7 @@ public void setPastCourtList(List> pastCourtList) { @NotEmpty(message = "Add the child's details") @Valid private final List<@NotNull(message = "Add the child's details") Element> children1; + private final List> guardians; @NotBlank(message = "Enter Familyman case number", groups = {NoticeOfProceedingsGroup.class, ValidateFamilyManCaseNumberGroup.class}) private final String familyManCaseNumber; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/Guardian.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/Guardian.java index a41b54378ca..b27e5aa7639 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/Guardian.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/Guardian.java @@ -3,15 +3,29 @@ import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Getter; +import uk.gov.hmcts.reform.fpl.model.common.Element; import java.util.List; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + @Getter @EqualsAndHashCode -@Builder +@Builder(toBuilder = true) public class Guardian { private String guardianName; private String telephoneNumber; private String email; private List children; + + // getter/setter work around for CCD persisting only + public List> getChildrenRepresenting() { + return wrapElements(children); + } + + // getter/setter work around for CCD persisting only + public void setChildrenRepresenting(List> childrenRepresenting) { + children = unwrapElements(childrenRepresenting); + } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/notify/UpdateGuardianNotifyData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/notify/UpdateGuardianNotifyData.java new file mode 100644 index 00000000000..bac47deaf05 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/notify/UpdateGuardianNotifyData.java @@ -0,0 +1,14 @@ +package uk.gov.hmcts.reform.fpl.model.notify; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@Builder +@EqualsAndHashCode +public class UpdateGuardianNotifyData implements NotifyData { + private final String firstRespondentLastName; + private final String familyManCaseNumber; + private final String caseUrl; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiGuardianService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiGuardianService.java new file mode 100644 index 00000000000..24bb9a3452d --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiGuardianService.java @@ -0,0 +1,44 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Guardian; +import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.service.ccd.CoreCaseDataService; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import static org.apache.commons.lang3.ObjectUtils.isEmpty; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.nullSafeCollection; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElementsWithUUIDs; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class CafcassApiGuardianService { + private final CoreCaseDataService coreCaseDataService; + + public boolean validateGuardians(List guardianUpdateList) { + return guardianUpdateList.stream() + .noneMatch(guardian -> isEmpty(guardian.getGuardianName()) + || isEmpty(guardian.getChildren()) + || guardian.getChildren().stream().anyMatch(String::isEmpty)); + } + + public boolean checkIfAnyGuardianUpdated(CaseData caseData, List guardianUpdateList) { + List> existingGuardians = caseData.getGuardians(); + + return !(new HashSet<>(nullSafeCollection(guardianUpdateList)) + .equals(new HashSet<>(unwrapElements(existingGuardians)))); + } + + public CaseDetails updateGuardians(CaseData caseData, List guardianUpdateList) { + return coreCaseDataService.performPostSubmitCallback(caseData.getId(), "internal-update-guardians", + caseDetails -> Map.of("guardians", wrapElementsWithUUIDs(guardianUpdateList))); + } +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/email/content/UpdateGuardianContentProvider.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/email/content/UpdateGuardianContentProvider.java new file mode 100644 index 00000000000..43dd1434ed1 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/email/content/UpdateGuardianContentProvider.java @@ -0,0 +1,21 @@ +package uk.gov.hmcts.reform.fpl.service.email.content; + +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.notify.UpdateGuardianNotifyData; +import uk.gov.hmcts.reform.fpl.service.email.content.base.AbstractEmailContentProvider; + +import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; +import static uk.gov.hmcts.reform.fpl.utils.PeopleInCaseHelper.getFirstRespondentLastName; + +@Service +public class UpdateGuardianContentProvider extends AbstractEmailContentProvider { + + public UpdateGuardianNotifyData getUpdateGuardianNotifyData(CaseData caseData) { + return UpdateGuardianNotifyData.builder() + .firstRespondentLastName(getFirstRespondentLastName(caseData)) + .familyManCaseNumber(defaultIfNull(caseData.getFamilyManCaseNumber(), "")) + .caseUrl(getCaseUrl(caseData.getId())) + .build(); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/handlers/UpdateGuardiansEventHandlerTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/handlers/UpdateGuardiansEventHandlerTest.java new file mode 100644 index 00000000000..e634b14514a --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/handlers/UpdateGuardiansEventHandlerTest.java @@ -0,0 +1,83 @@ +package uk.gov.hmcts.reform.fpl.handlers; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.events.UpdateGuardianEvent; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.notify.RecipientsRequest; +import uk.gov.hmcts.reform.fpl.model.notify.UpdateGuardianNotifyData; +import uk.gov.hmcts.reform.fpl.service.LocalAuthorityRecipientsService; +import uk.gov.hmcts.reform.fpl.service.email.NotificationService; +import uk.gov.hmcts.reform.fpl.service.email.RepresentativesInbox; +import uk.gov.hmcts.reform.fpl.service.email.content.UpdateGuardianContentProvider; + +import java.util.Set; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.fpl.NotifyTemplates.GUARDIAN_UPDATED; +import static uk.gov.hmcts.reform.fpl.enums.RepresentativeServingPreferences.DIGITAL_SERVICE; + +public class UpdateGuardiansEventHandlerTest { + private static final CaseData CASE_DATA = CaseData.builder().id(1L).build(); + private static final UpdateGuardianEvent EVENT = UpdateGuardianEvent.builder().caseData(CASE_DATA).build(); + private static final UpdateGuardianNotifyData NOTIFY_DATA = UpdateGuardianNotifyData.builder() + .firstRespondentLastName("firstRespondentLastName") + .caseUrl("caseUrl") + .familyManCaseNumber("familyManCaseNumber") + .build(); + private static final Set RECIPIENTS = Set.of("recipient@test.com"); + + private final UpdateGuardianContentProvider updateGuardianContentProvider = + mock(UpdateGuardianContentProvider.class); + private final LocalAuthorityRecipientsService localAuthorityRecipients = + mock(LocalAuthorityRecipientsService.class); + private final RepresentativesInbox representativesInbox = mock(RepresentativesInbox.class); + private final NotificationService notificationService = mock(NotificationService.class); + + private final UpdateGuardiansEventHandler underTest = + new UpdateGuardiansEventHandler(updateGuardianContentProvider, localAuthorityRecipients, representativesInbox, + notificationService); + + @BeforeEach + void setUp() { + when(updateGuardianContentProvider.getUpdateGuardianNotifyData(CASE_DATA)).thenReturn(NOTIFY_DATA); + } + + @Test + void shouldNotifyLocalAuthorities() { + when(localAuthorityRecipients.getRecipients(RecipientsRequest.builder() + .caseData(CASE_DATA) + .secondaryLocalAuthorityExcluded(true) + .legalRepresentativesExcluded(true) + .build())) + .thenReturn(RECIPIENTS); + + underTest.notifyLocalAuthorities(EVENT); + + verify(notificationService).sendEmail(GUARDIAN_UPDATED, RECIPIENTS, NOTIFY_DATA, 1L); + verifyNoMoreInteractions(notificationService); + } + + @Test + void shouldNotifyRespondentSolicitors() { + when(representativesInbox.getRespondentSolicitorEmails(CASE_DATA, DIGITAL_SERVICE)).thenReturn(RECIPIENTS); + + underTest.notifyRespondentSolicitors(EVENT); + + verify(notificationService).sendEmail(GUARDIAN_UPDATED, RECIPIENTS, NOTIFY_DATA, 1L); + verifyNoMoreInteractions(notificationService); + } + + @Test + void shouldNotifyChildSolicitors() { + when(representativesInbox.getChildrenSolicitorEmails(CASE_DATA, DIGITAL_SERVICE)).thenReturn(RECIPIENTS); + + underTest.notifyChildSolicitors(EVENT); + + verify(notificationService).sendEmail(GUARDIAN_UPDATED, RECIPIENTS, NOTIFY_DATA, 1L); + verifyNoMoreInteractions(notificationService); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiGuardianServiceTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiGuardianServiceTest.java new file mode 100644 index 00000000000..ea268838692 --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiGuardianServiceTest.java @@ -0,0 +1,115 @@ +package uk.gov.hmcts.reform.fpl.service.cafcass.api; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Guardian; +import uk.gov.hmcts.reform.fpl.model.common.Element; +import uk.gov.hmcts.reform.fpl.service.ccd.CoreCaseDataService; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElementsWithUUIDs; + +public class CafcassApiGuardianServiceTest { + private static final Guardian EXISTING_GUARDIAN_1 = Guardian.builder() + .guardianName("Guardian 1") + .email("guardian1@test.com") + .telephoneNumber("0123456789") + .children(List.of("Child 1", "Child 2")) + .build(); + private static final Guardian EXISTING_GUARDIAN_2 = Guardian.builder() + .guardianName("Guardian 2") + .email("guardian2@test.com") + .telephoneNumber("0123456789") + .children(List.of("Child 3")) + .build(); + private static final List> EXISTING_GUARDIANS = + wrapElementsWithUUIDs(EXISTING_GUARDIAN_1, EXISTING_GUARDIAN_2); + private static final CaseData CASE_DATA = CaseData.builder().guardians(EXISTING_GUARDIANS).build(); + private final CoreCaseDataService coreCaseDataService = mock(CoreCaseDataService.class); + private CafcassApiGuardianService underTest = new CafcassApiGuardianService(coreCaseDataService); + + @Test + void shouldReturnFalseIfGuardiansIsInvalid() { + assertFalse(underTest.validateGuardians(List.of(Guardian.builder().build()))); + assertFalse(underTest.validateGuardians(List.of(Guardian.builder().guardianName("Guardian Name").build()))); + assertFalse(underTest.validateGuardians(List.of(Guardian.builder() + .guardianName("Guardian Name") + .children(List.of()) + .build()))); + assertFalse(underTest.validateGuardians(List.of(Guardian.builder() + .guardianName("Guardian Name") + .children(List.of("")) + .build()))); + } + + @Test + void shouldReturnTrueIfGuardiansIsValid() { + assertTrue(underTest.validateGuardians(List.of(EXISTING_GUARDIAN_1))); + } + + @Test + void shouldReturnFalseIfGuardianListsAreIdentical() { + List updatedGuardians = List.of(EXISTING_GUARDIAN_1.toBuilder().build(), + EXISTING_GUARDIAN_2.toBuilder().build()); + + List updatedGuardiansInDifferentOrder = List.of(EXISTING_GUARDIAN_2.toBuilder().build(), + EXISTING_GUARDIAN_1.toBuilder().build()); + + assertFalse(underTest.checkIfAnyGuardianUpdated(CASE_DATA, updatedGuardians)); + assertFalse(underTest.checkIfAnyGuardianUpdated(CASE_DATA, updatedGuardiansInDifferentOrder)); + assertFalse(underTest.checkIfAnyGuardianUpdated(CaseData.builder().guardians(null).build(), List.of())); + assertFalse(underTest.checkIfAnyGuardianUpdated(CaseData.builder().guardians(List.of()).build(), List.of())); + assertFalse(underTest.checkIfAnyGuardianUpdated(CaseData.builder().guardians(null).build(), null)); + assertFalse(underTest.checkIfAnyGuardianUpdated(CaseData.builder().guardians(List.of()).build(), null)); + } + + @Test + void shouldReturnTrueIfOnlyEmailUpdated() { + List updatedGuardians = List.of( + EXISTING_GUARDIAN_1.toBuilder().email("guardian_newMail@test.com").build(), + EXISTING_GUARDIAN_2); + assertTrue(underTest.checkIfAnyGuardianUpdated(CASE_DATA, + updatedGuardians)); + } + + @Test + void shouldReturnTrueIfOnlyTelephoneUpdated() { + List updatedGuardians = List.of( + EXISTING_GUARDIAN_1.toBuilder().telephoneNumber("000").build(), + EXISTING_GUARDIAN_2); + assertTrue(underTest.checkIfAnyGuardianUpdated(CASE_DATA, + updatedGuardians)); + } + + @Test + void shouldReturnTrueIfOnlyChildrenRepresentingUpdated() { + List updatedGuardians = List.of( + EXISTING_GUARDIAN_1.toBuilder().children(List.of("Child 123")).build(), + EXISTING_GUARDIAN_2); + assertTrue(underTest.checkIfAnyGuardianUpdated(CASE_DATA, + updatedGuardians)); + } + + @Test + void shouldReturnTrueIfNewGuardianAdded() { + Guardian newGuardian = Guardian.builder().guardianName("New Guardian").build(); + + assertTrue(underTest.checkIfAnyGuardianUpdated(CaseData.builder().guardians(null).build(), + List.of(newGuardian))); + assertTrue(underTest.checkIfAnyGuardianUpdated(CaseData.builder().guardians(List.of()).build(), + List.of(newGuardian))); + assertTrue(underTest.checkIfAnyGuardianUpdated(CASE_DATA, + List.of(EXISTING_GUARDIAN_1, EXISTING_GUARDIAN_2, newGuardian))); + } + + @Test + void shouldReturnTrueIfGuardianRemoved() { + assertTrue(underTest.checkIfAnyGuardianUpdated(CASE_DATA, List.of(EXISTING_GUARDIAN_1))); + assertTrue(underTest.checkIfAnyGuardianUpdated(CASE_DATA, List.of())); + assertTrue(underTest.checkIfAnyGuardianUpdated(CASE_DATA, null)); + } +} diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/email/content/UpdateGuardianContentProviderTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/email/content/UpdateGuardianContentProviderTest.java new file mode 100644 index 00000000000..6ba7f7b7d1b --- /dev/null +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/email/content/UpdateGuardianContentProviderTest.java @@ -0,0 +1,36 @@ +package uk.gov.hmcts.reform.fpl.service.email.content; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.Respondent; +import uk.gov.hmcts.reform.fpl.model.RespondentParty; +import uk.gov.hmcts.reform.fpl.model.notify.UpdateGuardianNotifyData; + +import static org.assertj.core.api.Assertions.assertThat; +import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements; + +@ContextConfiguration(classes = {UpdateGuardianContentProvider.class}) +public class UpdateGuardianContentProviderTest extends AbstractEmailContentProviderTest { + private static final String RESPONDENT_LAST_NAME = "Respondent"; + private static final CaseData CASE_DATA = CaseData.builder() + .id(Long.valueOf(CASE_REFERENCE)) + .familyManCaseNumber(CASE_REFERENCE) + .respondents1(wrapElements(Respondent.builder() + .party(RespondentParty.builder().lastName(RESPONDENT_LAST_NAME).build()) + .build())) + .build(); + + @Autowired + private UpdateGuardianContentProvider underTest; + + @Test + void shouldReturnNotifyData() { + assertThat(underTest.getUpdateGuardianNotifyData(CASE_DATA)) + .isEqualTo(UpdateGuardianNotifyData.builder() + .familyManCaseNumber(CASE_REFERENCE) + .firstRespondentLastName(RESPONDENT_LAST_NAME) + .caseUrl(caseUrl(CASE_REFERENCE)).build()); + } +} From 18b5f9f72c54ed83bab6b4a0e1fe81a035d86d5d Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:12:57 +0100 Subject: [PATCH 13/15] fix gender value in API response (#5548) --- .../api/CafcassApiChildrenConverter.java | 12 +++++++++++- .../cafcass/api/CafcassApiOthersConverter.java | 3 ++- .../api/CafcassApiRespondentsConverter.java | 3 ++- .../reform/fpl/utils/CafcassApiHelper.java | 14 ++++++++++++++ .../api/CafcassApiChildrenConverterTest.java | 5 +++-- .../api/CafcassApiOthersConverterTest.java | 4 ++-- .../api/CafcassApiRespondentsConverterTest.java | 4 ++-- .../reform/fpl/utils/CafcassApiHelperTest.java | 17 +++++++++++++++++ 8 files changed, 53 insertions(+), 9 deletions(-) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverter.java index 7bef6661fbb..31ebf65c60f 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverter.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverter.java @@ -1,10 +1,12 @@ package uk.gov.hmcts.reform.fpl.service.cafcass.api; import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.fpl.enums.ChildGender; import uk.gov.hmcts.reform.fpl.model.CaseData; import uk.gov.hmcts.reform.fpl.model.ChildParty; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiChild; +import uk.gov.hmcts.reform.fpl.model.robotics.Gender; import java.util.List; @@ -33,7 +35,7 @@ private List getCafcassApiChild(CaseData caseData) { builder = builder.firstName(childParty.getFirstName()) .lastName(childParty.getLastName()) .dateOfBirth(childParty.getDateOfBirth()) - .gender(childParty.getGender().toString()) + .gender(getChildGenderForResponse(childParty.getGender())) .genderIdentification(childParty.getGenderIdentification()) .livingSituation(childParty.getLivingSituation()) .livingSituationDetails(childParty.getLivingSituationDetails()) @@ -52,4 +54,12 @@ private List getCafcassApiChild(CaseData caseData) { }) .toList(); } + + private String getChildGenderForResponse(ChildGender childGender) { + return switch (childGender) { + case BOY -> Gender.MALE.toString(); + case GIRL -> Gender.FEMALE.toString(); + case OTHER -> Gender.OTHER.toString(); + }; + } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverter.java index 4b9f9035b91..43e6a9dda24 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverter.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverter.java @@ -11,6 +11,7 @@ import java.util.stream.Stream; import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiAddress; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getGenderForApiResponse; import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements; @@ -30,7 +31,7 @@ private List getCafcassApiOthers(CaseData caseData) { .map(other -> CafcassApiOther.builder() .name(other.getName()) .dateOfBirth(other.getDateOfBirth()) - .gender(other.getGender()) + .gender(getGenderForApiResponse(other.getGender())) .genderIdentification(other.getGenderIdentification()) .birthPlace(other.getBirthPlace()) .addressKnown(isYes(other.getAddressKnow())) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java index fcb12802295..b43adec5e8a 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverter.java @@ -11,6 +11,7 @@ import static org.apache.commons.lang3.ObjectUtils.isNotEmpty; import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiAddress; import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getCafcassApiSolicitor; +import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getGenderForApiResponse; import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.getTelephoneNumber; import static uk.gov.hmcts.reform.fpl.utils.CafcassApiHelper.isYes; import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements; @@ -32,7 +33,7 @@ private List getCafcassApiRespondents(CaseData caseData) { if (isNotEmpty(respondentParty)) { builder = builder.firstName(respondentParty.getFirstName()) .lastName(respondentParty.getLastName()) - .gender(respondentParty.getGender()) + .gender(getGenderForApiResponse(respondentParty.getGender())) .genderIdentification(respondentParty.getGenderIdentification()) .addressKnown(isYes(respondentParty.getAddressKnow())) .addressUnknownReason(respondentParty.getAddressNotKnowReason()) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelper.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelper.java index 61df4b1c448..5d6df36bfcf 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelper.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelper.java @@ -5,9 +5,12 @@ import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiAddress; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSolicitor; import uk.gov.hmcts.reform.fpl.model.common.Telephone; +import uk.gov.hmcts.reform.fpl.model.robotics.Gender; import java.util.Optional; +import java.util.stream.Stream; +import static org.apache.commons.lang3.StringUtils.isEmpty; import static uk.gov.hmcts.reform.fpl.enums.YesNo.YES; public class CafcassApiHelper { @@ -51,4 +54,15 @@ public static CafcassApiSolicitor getCafcassApiSolicitor(RespondentSolicitor res }) .orElse(null); } + + public static String getGenderForApiResponse(String genderStr) { + return (isEmpty(genderStr)) ? null : + Stream.of(Gender.MALE, Gender.FEMALE, Gender.OTHER) + .filter(gender -> gender.toString().equalsIgnoreCase(genderStr) + || gender.getLabel().equalsIgnoreCase(genderStr) + || gender.getValue().equalsIgnoreCase(genderStr)) + .findFirst() + .map(Gender::getValue) + .orElse(Gender.OTHER.getValue()); + } } diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverterTest.java index 2cfa9396a7c..3b474c38c46 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverterTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiChildrenConverterTest.java @@ -8,6 +8,7 @@ import uk.gov.hmcts.reform.fpl.model.ChildParty; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiCaseData; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiChild; +import uk.gov.hmcts.reform.fpl.model.robotics.Gender; import java.time.LocalDate; import java.util.List; @@ -67,7 +68,7 @@ void shouldConvertAllChildren() { .firstName("Child") .lastName("One") .dateOfBirth(LocalDate.of(2024, 1, 1)) - .gender(ChildGender.BOY.toString()) + .gender(Gender.MALE.toString()) .genderIdentification("genderIdentification") .livingSituation("livingSituation") .livingSituationDetails("livingSituationDetails") @@ -87,7 +88,7 @@ void shouldConvertAllChildren() { .firstName("Child") .lastName("Two") .dateOfBirth(LocalDate.of(2023, 1, 1)) - .gender(ChildGender.GIRL.toString()) + .gender(Gender.FEMALE.toString()) .build(), CafcassApiChild.builder().build() )).build()); diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverterTest.java index d0d378c31bb..50d1270d046 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverterTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiOthersConverterTest.java @@ -24,7 +24,7 @@ void shouldConvertOthers() { Other firstOthers = Other.builder() .name("First Other") .dateOfBirth("2000-01-01") - .gender(Gender.OTHER.toString()) + .gender(Gender.OTHER.getLabel()) .genderIdentification("genderIdentification") .birthPlace("birthPlace") .addressKnow(YesNo.YES.getValue()) @@ -39,7 +39,7 @@ void shouldConvertOthers() { Other secondOther = Other.builder() .name("Second Other") .dateOfBirth("2000-01-01") - .gender(Gender.MALE.toString()) + .gender(Gender.MALE.getLabel()) .birthPlace("birthPlace") .addressKnow(YesNo.NO.getValue()) .addressNotKnowReason("addressNotKnowReason") diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java index e4d00f3b979..7b859abf375 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/cafcass/api/CafcassApiRespondentsConverterTest.java @@ -26,7 +26,7 @@ void shouldConvertAllRespondents() { .party(RespondentParty.builder() .firstName("Respondent1") .lastName("LastName") - .gender(Gender.MALE.toString()) + .gender(Gender.MALE.getLabel()) .addressKnow(YesNo.YES.toString()) .address(getTestAddress()) .dateOfBirth(LocalDate.of(2000, 1, 1)) @@ -43,7 +43,7 @@ void shouldConvertAllRespondents() { .party(RespondentParty.builder() .firstName("Respondent2") .lastName("LastName") - .gender(Gender.OTHER.toString()) + .gender(Gender.OTHER.getLabel()) .genderIdentification("genderIdentification") .addressKnow(YesNo.NO.toString()) .addressNotKnowReason("addressUnknownReason") diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelperTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelperTest.java index 0a6523a6634..cb9d6e0c2c1 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelperTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/utils/CafcassApiHelperTest.java @@ -7,6 +7,7 @@ import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiAddress; import uk.gov.hmcts.reform.fpl.model.cafcass.api.CafcassApiSolicitor; import uk.gov.hmcts.reform.fpl.model.common.Telephone; +import uk.gov.hmcts.reform.fpl.model.robotics.Gender; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -79,4 +80,20 @@ public void testGetCafcassApiSolicitor() { assertEquals(expected, CafcassApiHelper.getCafcassApiSolicitor(solicitor)); assertNull(CafcassApiHelper.getCafcassApiSolicitor(null)); } + + @Test + public void testGetGenderForApiResponse() { + assertEquals("MALE", CafcassApiHelper.getGenderForApiResponse(Gender.MALE.getValue())); + assertEquals("MALE", CafcassApiHelper.getGenderForApiResponse(Gender.MALE.toString())); + assertEquals("MALE", CafcassApiHelper.getGenderForApiResponse(Gender.MALE.getLabel())); + assertEquals("FEMALE", CafcassApiHelper.getGenderForApiResponse(Gender.FEMALE.getValue())); + assertEquals("FEMALE", CafcassApiHelper.getGenderForApiResponse(Gender.FEMALE.toString())); + assertEquals("FEMALE", CafcassApiHelper.getGenderForApiResponse(Gender.FEMALE.getLabel())); + assertEquals("OTHER", CafcassApiHelper.getGenderForApiResponse(Gender.OTHER.getValue())); + assertEquals("OTHER", CafcassApiHelper.getGenderForApiResponse(Gender.OTHER.toString())); + assertEquals("OTHER", CafcassApiHelper.getGenderForApiResponse(Gender.OTHER.getLabel())); + assertEquals(null, CafcassApiHelper.getGenderForApiResponse("")); + assertEquals(null, CafcassApiHelper.getGenderForApiResponse(null)); + assertEquals(null, CafcassApiHelper.getGenderForApiResponse(Gender.NONE.getLabel())); + } } From 3515ecfb8296d6833f212df0e2ab389a50638e23 Mon Sep 17 00:00:00 2001 From: Alistair Osborne Date: Wed, 28 Aug 2024 17:33:28 +0100 Subject: [PATCH 14/15] Push Master changes to cafcass api feature branch (#5554) * DFPL-2517: Increase core pool size for async task executor (#5543) * Increase core pool size for async task executor * Fix check style * DFPL-2257: Add updated court seals (#5533) * Add updated court seals * Add updated court seals * Change seal to be Welsh rather than bilingual and update sealed document for tests. * Update docmosis to use new court seal imgages in rdo docmosis. * Fix test failures * Rename seal files to be consistent with their names in docmosis. * DFPL-2488: Use the correct court code + fix caseManagementLocation when transferring LAs (#5527) * DFPL-2488: Use the correct court code + fix caseManagementLocation when transferring LAs * checkstyle * introduce constants for test --------- Co-authored-by: Braimah101 <41795070+Braimah101@users.noreply.github.com> * Update UploadTranslationsSubmittedControllerTest.java (#5551) * DFPL-2325: Add 4 New Details Boxes for C43 (#5499) * DFPL-2325: Add 4 New Details Boxes for C43 * add to order object through question block and fix generator test * add missing fields to test * add additional check * add to object so it persists through to the casedata for MI * fix persisting * fix generator test * checkstyle * fix scoped field test * change to append rather than concat * remove further directions * hide directions in child arrangement flow * fix test * remove very flakey test (for now) * unflakey --------- Co-authored-by: Braimah101 <41795070+Braimah101@users.noreply.github.com> * DFPL-2491: Migrate out of sync caseManagementLocation fields (#5553) * DFPL-2491: Fix caseManagementLocation after bug * correct migration ID * Add populate case - returned event (#5552) --------- Co-authored-by: jamesrferguson1 <94848497+jamesrferguson1@users.noreply.github.com> Co-authored-by: Daniel Catchpole Co-authored-by: Braimah101 <41795070+Braimah101@users.noreply.github.com> Co-authored-by: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> --- .../AuthorisationCaseEvent-testing.json | 19 +++ .../CareSupervision/court-admin.json | 28 ++++ .../CareSupervision/gatekeeper.json | 28 ++++ .../CareSupervision/judiciary.json | 28 ++++ .../CareSupervision/system-update.json | 28 ++++ .../caseDocuments/orderCollection.json | 148 ++++++++++++++++++ .../CareSupervision/StateChange.json | 9 ++ .../manageOrders/5_orderDetailsSection.json | 80 ++++++++-- .../manageOrders/manageOrdersFields.json | 36 +++++ .../CareSupervision/GeneratedOrder.json | 40 +++++ .../FL-PLW-familycourtseal-welshV2.png | Bin 0 -> 10145 bytes .../templates/FL-PLW-familycourtsealV2.png | Bin 0 -> 33938 bytes .../templates/familycourtseal-bilingual.png | Bin 29035 -> 0 bytes docker/docmosis/templates/familycourtseal.png | Bin 24018 -> 0 bytes ...adTranslationsSubmittedControllerTest.java | 4 +- ...uthoritiesControllerAboutToSubmitTest.java | 45 +++--- .../resources/documents/document-sealed.pdf | Bin 39570 -> 50508 bytes .../hmcts/reform/ccd/model/CaseLocation.java | 2 + .../reform/fpl/config/AsyncConfiguration.java | 11 +- .../ManageLocalAuthoritiesController.java | 16 +- .../support/MigrateCaseController.java | 10 +- .../reform/fpl/enums/DocmosisImages.java | 2 +- .../gov/hmcts/reform/fpl/model/CaseData.java | 2 +- .../reform/fpl/model/document/SealType.java | 4 +- .../model/event/ManageOrdersEventData.java | 4 + .../hmcts/reform/fpl/model/order/Order.java | 2 +- .../fpl/model/order/OrderQuestionBlock.java | 4 +- .../model/order/generated/GeneratedOrder.java | 4 + .../ManageLocalAuthoritiesService.java | 32 +++- ...geOrderDocumentScopedFieldsCalculator.java | 3 +- ...ildArrangementOrderDocmosisParameters.java | 4 + ...gementOrderDocumentParameterGenerator.java | 72 +++++++-- .../history/SealedOrderHistoryService.java | 5 + .../TranslatedDocumentGenerator.java | 2 +- .../FL-PLW-familycourtseal-welshV2.png | Bin 0 -> 10145 bytes .../static_data/FL-PLW-familycourtsealV2.png | Bin 0 -> 33938 bytes .../static_data/familycourtseal-bilingual.png | Bin 29035 -> 0 bytes .../resources/static_data/familycourtseal.png | Bin 27790 -> 0 bytes .../hmcts/reform/fpl/model/CaseDataTest.java | 4 +- .../ManageLocalAuthoritiesServiceTest.java | 11 +- ...ingsTemplateDataGenerationServiceTest.java | 2 +- ...GatekeepingOrderGenerationServiceTest.java | 2 +- .../NoticeOfHearingGenerationServiceTest.java | 2 +- ...rdDirectionOrderGenerationServiceTest.java | 2 +- ...derDocumentScopedFieldsCalculatorTest.java | 5 + .../OrderShowHideQuestionsCalculatorTest.java | 2 +- ...ntOrderDocumentParameterGeneratorTest.java | 48 ++++-- .../DocmosisCommonElementDecoratorTest.java | 2 +- .../TranslatedDocumentGeneratorTest.java | 2 +- .../resources/documents/document-sealed.pdf | Bin 39570 -> 50508 bytes 50 files changed, 652 insertions(+), 102 deletions(-) create mode 100644 docker/docmosis/templates/FL-PLW-familycourtseal-welshV2.png create mode 100644 docker/docmosis/templates/FL-PLW-familycourtsealV2.png delete mode 100644 docker/docmosis/templates/familycourtseal-bilingual.png delete mode 100644 docker/docmosis/templates/familycourtseal.png create mode 100644 service/src/main/resources/static_data/FL-PLW-familycourtseal-welshV2.png create mode 100644 service/src/main/resources/static_data/FL-PLW-familycourtsealV2.png delete mode 100644 service/src/main/resources/static_data/familycourtseal-bilingual.png delete mode 100644 service/src/main/resources/static_data/familycourtseal.png diff --git a/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent-testing.json b/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent-testing.json index 9e766e3e596..b696f6b91c5 100644 --- a/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent-testing.json +++ b/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent-testing.json @@ -97,5 +97,24 @@ "CRUD": "R" } ] + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "populateCase-RETURNED", + "AccessControl": [ + { + "UserRoles": ["caseworker-publiclaw-systemupdate"], + "CRUD": "CR" + }, + { + "UserRoles": [ + "caseworker-publiclaw-gatekeeper", + "caseworker-publiclaw-courtadmin", + "caseworker-publiclaw-solicitor" + ], + "CRUD": "R" + } + ] } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json index a08eb175ed5..52c02225867 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json @@ -3667,6 +3667,34 @@ "UserRole": "caseworker-publiclaw-courtadmin", "CRUD": "CRUD" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRUD" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json b/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json index e1607b9d189..b1c3e3e814b 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json @@ -3681,6 +3681,34 @@ "UserRole": "caseworker-publiclaw-gatekeeper", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "CRUD" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", + "UserRole": "caseworker-publiclaw-gatekeeper", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json index b79bb68863f..f79957d5672 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json @@ -3947,6 +3947,34 @@ "UserRole": "caseworker-publiclaw-judiciary", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json index 55d6c543fc5..2bbb00e3bb4 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json @@ -2506,6 +2506,34 @@ "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRU" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", + "UserRole": "caseworker-publiclaw-systemupdate", + "CRUD": "CRU" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json b/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json index 10a7630f722..adf0cf64b55 100644 --- a/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json +++ b/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json @@ -1183,5 +1183,153 @@ "CRUD": "R" } ] + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "orderCollection", + "ListElementCode": "childArrangementsLiveWithDetails", + "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-courtadmin", + "caseworker-publiclaw-gatekeeper", + "caseworker-publiclaw-judiciary", + "caseworker-publiclaw-systemupdate" + ], + "CRUD": "CRU" + }, + { + "UserRoles": [ + "[BARRISTER]", + "[CAFCASSSOLICITOR]", + "[EPSMANAGING]", + "[LABARRISTER]", + "[LAMANAGING]", + "[LASHARED]", + "[LASOLICITOR]", + "[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", + "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-magistrate" + ], + "CRUD": "R" + } + ] + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "orderCollection", + "ListElementCode": "childArrangementsContactWithDetails", + "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-courtadmin", + "caseworker-publiclaw-gatekeeper", + "caseworker-publiclaw-judiciary", + "caseworker-publiclaw-systemupdate" + ], + "CRUD": "CRU" + }, + { + "UserRoles": [ + "[BARRISTER]", + "[CAFCASSSOLICITOR]", + "[EPSMANAGING]", + "[LABARRISTER]", + "[LAMANAGING]", + "[LASHARED]", + "[LASOLICITOR]", + "[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", + "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-magistrate" + ], + "CRUD": "R" + } + ] + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "orderCollection", + "ListElementCode": "specificIssueOrderDetails", + "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-courtadmin", + "caseworker-publiclaw-gatekeeper", + "caseworker-publiclaw-judiciary", + "caseworker-publiclaw-systemupdate" + ], + "CRUD": "CRU" + }, + { + "UserRoles": [ + "[BARRISTER]", + "[CAFCASSSOLICITOR]", + "[EPSMANAGING]", + "[LABARRISTER]", + "[LAMANAGING]", + "[LASHARED]", + "[LASOLICITOR]", + "[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", + "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-magistrate" + ], + "CRUD": "R" + } + ] + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "orderCollection", + "ListElementCode": "prohibitedStepsOrderDetails", + "AccessControl": [ + { + "UserRoles": [ + "caseworker-publiclaw-courtadmin", + "caseworker-publiclaw-gatekeeper", + "caseworker-publiclaw-judiciary", + "caseworker-publiclaw-systemupdate" + ], + "CRUD": "CRU" + }, + { + "UserRoles": [ + "[BARRISTER]", + "[CAFCASSSOLICITOR]", + "[EPSMANAGING]", + "[LABARRISTER]", + "[LAMANAGING]", + "[LASHARED]", + "[LASOLICITOR]", + "[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", + "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", + "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", + "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", + "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", + "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", + "caseworker-publiclaw-cafcass", + "caseworker-publiclaw-magistrate" + ], + "CRUD": "R" + } + ] } ] diff --git a/ccd-definition/CaseEvent/CareSupervision/StateChange.json b/ccd-definition/CaseEvent/CareSupervision/StateChange.json index 5188053d1cf..37f914f0cc5 100644 --- a/ccd-definition/CaseEvent/CareSupervision/StateChange.json +++ b/ccd-definition/CaseEvent/CareSupervision/StateChange.json @@ -121,5 +121,14 @@ "PreConditionState(s)": "*", "PostConditionState": "PREPARE_FOR_HEARING", "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "populateCase-RETURNED", + "Name": "Populate - Returned", + "PreConditionState(s)": "*", + "PostConditionState": "RETURNED", + "SecurityClassification": "Public" } ] diff --git a/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json b/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json index 131b702e132..880359db8a8 100644 --- a/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json +++ b/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json @@ -407,12 +407,64 @@ "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", - "CaseFieldID": "manageOrdersRecitalsAndPreambles", + "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", "PageFieldDisplayOrder": 32, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, "PageColumnNumber": 1, + "FieldShowCondition": "manageOrdersChildArrangementsOrderTypes CONTAINS \"CHILD_LIVE\" AND manageOrdersMultiSelectListForC43 CONTAINS \"CHILD_ARRANGEMENT_ORDER\"", + "ShowSummaryChangeOption": "Y" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageOrders", + "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", + "PageFieldDisplayOrder": 33, + "DisplayContext": "MANDATORY", + "PageID": "OrderDetails", + "PageDisplayOrder": 6, + "PageColumnNumber": 1, + "FieldShowCondition": "manageOrdersChildArrangementsOrderTypes CONTAINS \"CHILD_CONTACT\" AND manageOrdersMultiSelectListForC43 CONTAINS \"CHILD_ARRANGEMENT_ORDER\"", + "ShowSummaryChangeOption": "Y" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageOrders", + "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", + "PageFieldDisplayOrder": 34, + "DisplayContext": "MANDATORY", + "PageID": "OrderDetails", + "PageDisplayOrder": 6, + "PageColumnNumber": 1, + "FieldShowCondition": "manageOrdersMultiSelectListForC43 CONTAINS \"SPECIFIC_ISSUE_ORDER\"", + "ShowSummaryChangeOption": "Y" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageOrders", + "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", + "PageFieldDisplayOrder": 35, + "DisplayContext": "MANDATORY", + "PageID": "OrderDetails", + "PageDisplayOrder": 6, + "PageColumnNumber": 1, + "FieldShowCondition": "manageOrdersMultiSelectListForC43 CONTAINS \"PROHIBITED_STEPS_ORDER\"", + "ShowSummaryChangeOption": "Y" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "manageOrders", + "CaseFieldID": "manageOrdersRecitalsAndPreambles", + "PageFieldDisplayOrder": 36, + "DisplayContext": "OPTIONAL", + "PageID": "OrderDetails", + "PageDisplayOrder": 6, + "PageColumnNumber": 1, "FieldShowCondition": "orderTempQuestions.childArrangementSpecificIssueProhibitedSteps=\"YES\"", "ShowSummaryChangeOption": "Y" }, @@ -421,12 +473,12 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersDirections", - "PageFieldDisplayOrder": 33, + "PageFieldDisplayOrder": 37, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, "PageColumnNumber": 1, - "FieldShowCondition": "orderTempQuestions.orderDetails=\"YES\"", + "FieldShowCondition": "orderTempQuestions.orderDetails=\"YES\" AND orderTempQuestions.childArrangementSpecificIssueProhibitedSteps=\"NO\"", "ShowSummaryChangeOption": "Y" }, { @@ -434,7 +486,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "additionalAppointedSpecialGuardians", - "PageFieldDisplayOrder": 34, + "PageFieldDisplayOrder": 38, "DisplayContext": "OPTIONAL", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -447,7 +499,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersFurtherDirections", - "PageFieldDisplayOrder": 35, + "PageFieldDisplayOrder": 39, "DisplayContext": "OPTIONAL", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -460,7 +512,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersEndDateTime", - "PageFieldDisplayOrder": 36, + "PageFieldDisplayOrder": 40, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -473,7 +525,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersEndDateTypeWithMonth", - "PageFieldDisplayOrder": 37, + "PageFieldDisplayOrder": 41, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -486,7 +538,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersSetMonthsEndDate", - "PageFieldDisplayOrder": 38, + "PageFieldDisplayOrder": 42, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -499,7 +551,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersEndDateTypeWithEndOfProceedings", - "PageFieldDisplayOrder": 39, + "PageFieldDisplayOrder": 43, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -512,7 +564,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersSetDateEndDate", - "PageFieldDisplayOrder": 40, + "PageFieldDisplayOrder": 44, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -525,7 +577,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersSetDateAndTimeEndDate", - "PageFieldDisplayOrder": 41, + "PageFieldDisplayOrder": 45, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -538,7 +590,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersUploadOrderFile", - "PageFieldDisplayOrder": 42, + "PageFieldDisplayOrder": 46, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -551,7 +603,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersNeedSealing", - "PageFieldDisplayOrder": 43, + "PageFieldDisplayOrder": 47, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -564,7 +616,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersIsFinalOrder", - "PageFieldDisplayOrder": 44, + "PageFieldDisplayOrder": 48, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, diff --git a/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json b/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json index 4f8e60871b2..50ca44ca610 100644 --- a/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json +++ b/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json @@ -186,6 +186,42 @@ "SecurityClassification": "PUBLIC", "Searchable": "N" }, + { + "LiveFrom": "01/01/2017", + "ID": "manageOrdersChildArrangementsLiveWithDetails", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "FieldType": "TextArea", + "Label": "Add details for child to live with order", + "SecurityClassification": "PUBLIC", + "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "ID": "manageOrdersChildArrangementsContactWithDetails", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "FieldType": "TextArea", + "Label": "Add details for child to have contact with order", + "SecurityClassification": "PUBLIC", + "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "ID": "manageOrdersSpecificIssueOrderDetails", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "FieldType": "TextArea", + "Label": "Add details for specific issue order", + "SecurityClassification": "PUBLIC", + "Searchable": "N" + }, + { + "LiveFrom": "01/01/2017", + "ID": "manageOrdersProhibitedStepsOrderDetails", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "FieldType": "TextArea", + "Label": "Add details for prohibited steps order", + "SecurityClassification": "PUBLIC", + "Searchable": "N" + }, { "LiveFrom": "01/01/2017", "ID": "manageOrdersRecitalsAndPreambles", diff --git a/ccd-definition/ComplexTypes/CareSupervision/GeneratedOrder.json b/ccd-definition/ComplexTypes/CareSupervision/GeneratedOrder.json index 6469a32443f..9cf7c693c4f 100644 --- a/ccd-definition/ComplexTypes/CareSupervision/GeneratedOrder.json +++ b/ccd-definition/ComplexTypes/CareSupervision/GeneratedOrder.json @@ -50,6 +50,46 @@ "FieldShowCondition": "date!=\"*\"", "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" }, + { + "LiveFrom": "01/01/2017", + "ID": "GeneratedOrder", + "ListElementCode": "childArrangementsLiveWithDetails", + "FieldType": "TextArea", + "ElementLabel": "Child to live with order details (C43)", + "SecurityClassification": "Public", + "FieldShowCondition": "date!=\"*\"", + "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GeneratedOrder", + "ListElementCode": "childArrangementsContactWithDetails", + "FieldType": "TextArea", + "ElementLabel": "Contact with child order details (C43)", + "SecurityClassification": "Public", + "FieldShowCondition": "date!=\"*\"", + "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GeneratedOrder", + "ListElementCode": "specificIssueOrderDetails", + "FieldType": "TextArea", + "ElementLabel": "Specific issue order details (C43)", + "SecurityClassification": "Public", + "FieldShowCondition": "date!=\"*\"", + "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GeneratedOrder", + "ListElementCode": "prohibitedStepsOrderDetails", + "FieldType": "TextArea", + "ElementLabel": "Prohibited steps order details (C43)", + "SecurityClassification": "Public", + "FieldShowCondition": "date!=\"*\"", + "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" + }, { "LiveFrom": "01/01/2017", "ID": "GeneratedOrder", diff --git a/docker/docmosis/templates/FL-PLW-familycourtseal-welshV2.png b/docker/docmosis/templates/FL-PLW-familycourtseal-welshV2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1ebe462d4107006df890e1503a470b9878a2d0 GIT binary patch literal 10145 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 literal 0 HcmV?d00001 diff --git a/docker/docmosis/templates/FL-PLW-familycourtsealV2.png b/docker/docmosis/templates/FL-PLW-familycourtsealV2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5a2780338814b9ef25d076b697d43a8c22c496 GIT binary patch literal 33938 zcmeGEi8~Z}|38k;Vhm#&`_7ClN_MhL%-EHLB*{)pQMPQ6##qK~NQX)#w1}ioNHt?? zIw_RMK9(#YLy0!NFX#TeZ#loe;CEg3xlY%)a?EReE|2Hq`FKs5y`2>gN&*FeKzMAd z%^e{Sn9JrL4jA}}CL3P{_z!1@_0ez$1iNSR4^-Rb`dJ7B1Fp z&CQMSqIGuimCIwvo7n-T1%boi05Jn}{cB@mgV>ctcEEF!oPv>jGD%L+I(HWsaOx+t zBVk~0FsC;gdIC+`po$Ye5D za6$r9^IJCAK?4T;zxn=iC3q5-R|tzq;7DAfCalshD?EN(0&*5HJZ$$xvGD2;e#a+e z>|S2M!F=BKGj{>{PeFQldHrYl`AZLYAR64w%SZLE#!-(f6Od(Z`VEE7LoyVrIbJWG z+4J(QT*FfOX#>c^tGx`0^vKmnelckZD%B4@b>vnSQePB}he~P+&yrzFenc zo3%|k37po}$~2I&#&M*+^Yw<7lUahMXDeaS={IJC3UT{xUm1&y`XhLvJxfwAi1v|SO*rWH5h?B)x5mQyNxx?H>nCty;0?e+ zmY0{!tAvt|q_4sM9vwYjYbk|j5!h~CA#gAhos4k#jS&CwWp#Cjiw*uR(z?#-(;cOu z5Wi#d3kx<{lT3OdBb(rh=EQutOl>P+dukgpqmRWx9p&>TQ@}m4YybBi|FHxOsHmEo zOMS=~8NpTk?LDy6@rj8gb@qfHktB5ute7fw)^L(;(|8Y)+@UYW*CAklXxTU^Sa2nsge=jw=RqAC82Y>mG(fzYndjwc)p?;`b zuc8Lq+;cdRH)yDy|9mH(<3a8f-=j>*1oQqZHojHcC-b&tl4`}v&Q93{Og8xj$9CW8 zf^&(ef=y$mg2dOcMm~S#n2Nl?-+GtgsXh(-ot1XbEj)`&G-F(x92pXlnv-+T+PXOF z3n+JsIsbcn^8*APnmq@+%Z30Gppt}&FgF~jPMjT(pVPZ1hGQ|aH#v{oU*T8K4ws7Y zXZOM-Dv(;vQ|?-tAO3w0d03dAB0l{YVx1idnTQk0?TFiVZ$)qT9Eb@U8}kJO;9wl^ z-57q(i}trKHp}3UvBBcgkjo)w%=K|3g}hjTrZyz+Z+_nOSD&NnmpyZzlb=K>>SwuB znG2A#B=X#KT0;2vA8c83G5hM`=nKOhe-OPYh$GL>n^bAJ6A0dZk?W~Q>S?*&(|gKR zNV~pHbzaY@3%^9AYPd>glj+>+8ykFEqhJvAcWEF9Rvyr1U;qx77g?z}FW6*x}+ z{$)D!eJZ%e`m?b=R~KIlaLL}|wW1dzKy*WHjZh4)zl(QER;g-^s$DNd(GJOvpU9^Q zC4vCQjal2+FxmQ53~X`qxw^74<{>1xBglJqv7mrJ?|n}biJBh7T;Kf{u1{5zmA$T> zYC9|~A|#Y)_ZqAhzJ0yL5HQ3GH(vPBkc7IVwnn_~nWu8nkgB>T^&)DyLN#F4E?E$N zWw&Of!7HVoBqgzp8;M7Ygl57dpo|iQ%Fu*5!&WEm*?rmVoyuY^tc{KH;3NMRit*&% zKUaO#bX#5XK94?^4euN9`s~tlej|Qk{r49-Bu8tFU$6B_oDBD!G0UBhN@-)p8@rBM zoV}5m2?=zfy#N2t)@hJRcQz2o;ui&>?Z_b#S!s0Ii>j17pBoaRWiyLlqbE#+ni|+Wm z{_Fdfv=aiGNzZ8eVM4D$dhhWU?wSqdxx|~-%zrQL#p2F-EjL|szc4n}{Uum$%N1#` zx-*}ReeUsUQt)ZEVw=0>*tTovUfTNapWRASDJiM0zmHeGQkyx10A_!k5pIQjMlyPM z;|4UxCt8>Eip%dv5+h~e(k^M5E1FlM!mM(C(VOcgIk#+qd(;N%qh=u6j0$=R>K`jR z=Y*be9XjgdQ zMX7s>13vIy`{jZ9TWMf0q{1r5uyaz0@RPNQ5wJpqhZfv z`wM1&1*Lz8Zm2=h<2M@6l|txjcQEJyNN+Y~;6Z@P`>q&IjQ^#K7m?9Vlj9myuDuZ% zimJD?SE=Oq`Sa)4u##Ws+Il+SFqbK$7aG!Wdi2N2oYj+*Qj#$fT;P^)xK-aEy`q*s3AxuYDt`E1ZQS%ktJiv4a5BvJmR%P~7*4Wn@7 zBcL_?62US22cm7}9%uw@^B7VLyInuKRJ^2z7)du#lie0FZVy6dg|B_+LgK3~|LK8x$n=^Ot@8 zDm>|CuzF@>^OU*Qd?W5edzH8_KAgE=VazufeEp%;w>+MJKK~%|! z)=zrTm$DB-5AQUcJSQ}n42dT-AlZ5BLu27n)lmAR&RN%0qyZg=rK1R%t?)rfw z9*FMHGyVwi2+nmEq(vc{U*N_DWxCuloKMho$7hr1(kX}kauvodykT07q(RFgK%(Ij zm)xzajL&x48OhV#&Zl8T=yp5q<)tCk{=tfl{+C@}g2W`q^}a=&YRb3NCbNXq@_Uk5 zpQK9oV~)WdIuu?M**qRfI@&|_!kGd=O-Ms-Lf{-MO!d$MwbmkCb4f&7kZ+cqcs6XA zwmq5|KKjafM?{Vyxv%{n^Hl9p1ZdjeTebQ>QNrRKMUE1_xcOFt9hQLyxPLpl1ipVz*(#=Ze>MIXp0D|sW`}CK#H|g3 z0mfoM)8l+c^P0NIYoo%8PdgUHN_!g};E;}Mvi!;DGfi?q9yj!nZXSqiz01$b48%Ne-ci`MG6suwvttp1wIEGb zEaKYOqx9>BNbFrHHr>vjN?yCX^I4f!7OVQ#JPweBHT&9#v&0C6k5{gay_!i=8R~wt zntMdFIWSa5a%`Pkj|`V*Yr5O=$?4ZCZ(xs}_V!E?PjOcGc&LFJk8qzH{nU>5-mG3> z>=aDAw$S2O3+}AOtTIMmyBBzqo;PGEWyDlUltW@xaM$1+Oo$_Y$zg}G-eksA6PSXMw1?0zs$HgzGnC&lQvn;bEz@wIAF2)2KvbmPq_E@l$n=?STMSQ*ii*5uz+ zzZuy~ZVQd!NmQb001vERn<54r4 zCz1;(9*%s)2}hF9d%T|hxLDYT?sR_w(wnS-G?#1Tvl|GSi8Eo?c|cjL{a^PNNpj|r zE08C?>Q})rQTODn+il7i6i;7|RYL%NK?i(bV5VCudOG(?|Dbx`2Or&gb#OQA$GQ;wQaJkD9t=1m!YlX*j8SuiW z*S@fax4pVklr86)9q_pAF&R~SaChp^0%pouh{4}c?>|dbw`(4)z<(Q_IUE@cS(kSl zgS@?ry>*h_^k5UIgk@NqKX0;}&GE1^S^OTC6*T5w+k!Dw)VoBK>_6(LN7toq)DqXm z54!!$jGav_zk>aeTKf1K6UoXa-JZ)VQeaVVVY^cUAyP3(koXDta!5l&@*`5zim8PGgp-#sw;^d&p~%`VQyYn&xcYVD$E-7>a#xMTe7w7E~qWcF2zj zPh02M4Uj<6MzXPCa+2BE*w91AQ>AKJbIh96hiG zNW%`K^X{MTsv_=KFLvM{IVJTBuj-+c*;pw;<*yu>X$i}vr&vKUZ8gI_LYd0jx1okt z<6wUzVlHVZUus-Bd)TU!#0|-@*Rs?fQ%TtQ#4WXw%j%eeyvWw10M01mjR(17&X16K zz!~CPbq!Bx_dtK;!yWe^kRJoulXs z2&B7-%H7Yk43y5kM%z=e-F(qBZIsTP)Ba-87-<>EwGXM4N2r7NTFDYAfuo>c*dArk z_|v@d_qp&g5)#}Nv>C`O3&J{NnKmmV*JsumCHHcs5xWQ3eT$uXgqo!$CvC8Ol_=Wb zE=+LIj*0v%5ZopjFlj*=hIm69q$xb-xd*|n2o%QVdTrkpN7XSHyk%DM(6ZSeF(>ZP z=uGn^e%O{pfvaJ|UxN{L5vf+`j5~<2f%5pjOq#4Ep6Z9pz$S&rE6Y?6h+C!+HYd}u zeOLX0V)1YIiGvhsr?d2_q%5{=wm~tWU3i>}-2ale(Omb=2QR#Fys6ad4x|H~3G&@@ zP*F14sNB|g0wLb%G0+M8M+=aU=}Mh%G0o*695df%xq3#3+kJCXlI5=EF+S?CA;!~P zsKFk_>iaAaky3~W{#twsD)o7x%mPtopL4X_6I25>6{mG@cpPKSeeF!Xup?o$B2tJl@|Wq(MI<~=fY0x!NLWSo&Ixq=GVI|RF)%oK8<3}H z)9TRd4R!lZ@>1@n$+|o5LCvtUhVo4f@G{bL-IH34HzUNhe_}WO+6G=`kRYR~7}0@j z$Vj^_Vry+JHoUP1bq4`T#e;LD4?>Tl{Fb`q8z{T}w0X)7()F*YdWh7DrTyIaD#Vfy zik0xLo9ruO&)dZdyE%+utMV3@Typt)(Mk%DxD8%Yu=pz@B=w3?zmw>r>emufCTCl^ z9l<9#y0Y7E&f4Ruh7#sex`%~Yw&4-*F&QC?k?HKF@$8-m6zhQsZoh5rlN+V)D5az@ zQk;lH`NCZ`4U7#})!>cX={Bnu1}U=J)+~vy%Az7oa<#R~1)~{J4P&k~c9UPnKuJ_~ z%g|Bul-%P%0FZMp7>3CU#4yjCx#L@yui>c=X-&8d%1s0*7Mg8p?6~ofi^tI}?#_Me?GP3qDZ^U- z9g9=!o>~9lfak=^Ow%fZ0hN-|bSBv{ypwT(%&57@co|=tyr*Xytfb&*jSHN{56!>H zg^fdd8__W`p=Wj;7osAmgN}gFpjIq^y^MBsk#PGD{JQzf4>Gy?n@eADw@>}?e}!j? z9$qHayegPVIg`4&S#`o;Fvg6roTvy0tc?9@mM^j`p^9FBRwC}I>4HdqHlQ1}k#LFn zhD^<}?TgaG8!L%@=AX<;RLB~{+X|x5m{LB9o1*-l_muNefbfIY1{P9(ruuR3H*No7 z^Qj#hWt;n0*yr`RQZL4KL)XB6reF&=SifxEwi70Y>^xKwhxnz2iMoK2*sO2MX@Gqa z5D)+bz&HT_I9ytuA1uyTpy7?#8?92&5Z-^{>VK$~%{Gw9HE)W82640ZBqS_s61N5s ze~>W!vc28X8o_yVUv}KM5Mi_7)7;z)sBcWvEcF$yk8Q}AGrw44@G==ij|poCpRBQ4 zJ&}J&rtWdg_zY;M(6SEM+tY^lGq^x!gx1xC&Ks7HkoYt=heb(C zOJlzy9x9yDq4Qa6H8B?Wc@L9@q|HaP5+ZUXZ6K$dQ+jgWf@o``ub=t(elr_juWWR$KR)x|5oTBR6qNUTezj)RkHg;@yq~DGIcRLHM$`TE3G7 z;AyRlpI@2(Ug$s)uTHkGVB6K)TvF2g7u#XTKs5X0SKZ0ok6P7vTI#OC4c>JVufJ6; zR@oM|6!53Vn!m^_|HXM%)i?3$0=1$A^uW4dm&2+<#!PW_OrjNarx%Do#Qj0kL+Wt^ zahnQ%>X9Vx*HNVvEh%!_29u#(Tw>PA3-?uHACq$jd*tPc%h{@XPZ0=omq2=Pv6s$8 zs%yCQ_h=GyDmo=G5kA!&$g-3HBQo7>Dv#!rsZA-1DQpi%GPKKc)ajjf^iw#mixL9e ze0LwUggVnYn(tOtl9j#yAFKS547y?XL$j0fTCV&8d>X6Ltj2wg(o;WGGzlL5cQCPhmSzdTiq}uBA?n4h-t^|)e84|7_ z>nJ~dNqxseubErSsoF#OXSO?r813>X^;o&nJg<+mQFG%DuR^5ZaY(~8GqqfGw|bH@ z|LG6){QXLkm&2^T7mh&s2GpYWQs&fltlbsQ6Djb1eVVbmr~Bs|MP%Da3ef6KXNe3G za21>yeWf{S%589Jh2inz!js=kYr7rl*P4^LE?zuby)O%VANP>-KXLpq*V;j~S-3YtR%k+$P2)rW11Vvtp_Ws)R&ocm;$?S-t%2A*juSkr+i`2Nf-bvutSJhV zIVUl$npS2!wwiuJL2WxnZrWK_d;Q(ovjfFi=t-kn*$Xy<3cvIl50^l?@V}`G7S!} z9TdrUhXTVQ5D2hQ1`lER^ghCyi!RgiR#)=OV1JemV61_Tq$9rhwR?f%<~;g&@@tRz zCs>E;ful!nR^K7Ev}X}Bj_U;txwtqbJ@VMB@KE?;)0y1L2J$j<--lh0!IuAO4N)Mp zv#H8q@&(KN9JLi}FP~hA67oVYR>aF5B~~;a9+cJ(L5CH05G|~CL&`Y-OAO*F(`J}P zBQ-a{uQym-BekAYm{k_5-EJ%p65kP@*Fj)gPD{-*S%Nw+*58#6$~pVl$&#POUi_Wu zoFoLB)KzubBUQ6EeaKpR*v({Zn_nP}Xcx;FPYz{aXt>*`@Zer$3@85NL(tE>abh3v zvkDH)9G5Hlp>M&`0QOoaZtK|7D~_tn>T}T0|My6S9ps2vJz;2a)R%0SAMpK8lk;Sy zH6|Tinc-u}H+)MDe`P}ijV^ApS#o)-;qcq8_TL>6q!CHBC?TScZ6UjH$FkZL2RvHe z;7M^-Ox_tDLBD4qI)yd};;s@NZf;`1*#}cru2OOOC?fRFsDad_)!DMwAkt-vOwK=h z{``98vk6f4=H^sONKfBDk@%v0EDGUer6ea(lci8hj;ak4^lQxh#V7eMcPna}@&0KG zNL~E36Qn1C&$tTL+yz--2~C!ozuMEf1%*`DHoI>{60HO3ty1#Rh*tPyq7vgy5+K3& zPHgZ$??D&`+=7}r!C52`CdR5kdTnTx+YbYc6O{8VP0APWg4oxNliD{ep;zgfQV%s(w#Q$_lQSguoHC6hKfiwcS%Ps?I>YP*7G?Ez3moOtQI*FGpu*>Ha=;cr=J#RXfq*1_nbrC3%`sl^(v;dWr!Yjdf$~|_JEv- z^Ah8IE43)meg+$Y8I$F~N)6O8= zxNsFam6d6+e}&K;H17OYC<8bjqzY}IBMdWUr$`cfX>}0D3<{NI@$7;iNRpJYA^0P zg#ToG)>fzS204=C)k{+UsjxgBRC&ZWt4dn>50BV9KWV)2W3X7hH@JFwSz5!XvtKVkv;MKUY>(3Vq88A@MSZ zB}vp$z(}{M2RYfM6}?;ZiN)R*o<224_p-K-!S1fe^XmCYT^ zJ5}Y<18umbluXx(Mw7Wj^YZep7P(V92il7c73qfxIA4&wayiMu{L)bu0NOOv>9Po7 zF-Rcu-xt9d3HF~$f~;LW1+1kW)1)S~mlSLN$IgNMiPDDj6XIll&!qlc3D$D5d{dBTGw2n==7)WcglV zepz5S2u;3TDfPl{hA&yUdvSzkZfKa&fyYY z=D1Hz{dz)$6}(V#A$Rx-Ypex?yDX&(2{6W$nX#i{*UCW<(P$Jn#rnfEzz+CH0b-kS zFEztx7AA@CO}G@$D%GLyl=vMqeFYC47e0&&2xw^|h#t6e=VA3jf>7W4_s#ET=H>`u zg%vhqa*S|FL|q*fUVqf3-^s~o>_v$0$@6PW?62C>)kf~-=547B^FBgdFq*b1j!RNZ zj7EvGyv>Q^+lo}1i=eqq)3v$j7T-!qmdvph%FCB3tbLz>_KS|a;nG)4o48Y6F7D_c zjf)O>JNfd*j~}c?w4?hNGDJ5frs3PS$O}pbQ_8ZCe6k|K1^6;*>?Ot{Bqga?@GVGU zt=!8SIdw3+}D++o)|^cE7zwVZ%3edsv_QfYV&+ zU3q=)Kql-mtn!km@d4{!cA48`67yFd@W8R$7AkLB*oWAbl&Ycqvu|axvOWP zydn_K;H)@j^r!HBNZs8(71kS5+n16exAOdE zoaZ7geMS6ihmn8@SJVRGR` z!Ko_l+E0Q${)fVA9;B70r=JW9L-qc!#p7wCo$Bi9qI2x#I_I;%8B7*s>`2TZCm^=$ z9!!qFpO$R4va9~a51JSB5{rz?1Gd1Cfy-ddRn|v;RooFRas&U@b%hRg`6$_q|DAH-ju=(;JV2fBH-7+FDvf2%^Woj4yHU?RRRln zII5|y&-T!af9?dNlw?Zk-!L1I(j8Ed;@(0Bz!8NYbNj^C8cG?fJvp$G(Aoq1tQC1c zpM>yt*cfpDi1@oT?Etw@4L%M)cmPHSAQa)U{CS+7qUe zyJj_`p2-IbHi4*_TN4FRC(Xp0Q~YAvCnH8=eDneC&=C-2v5yt9?Zh1sG^FX+Yqz!N z*_rONKM(VtiKkKZzRd9X(p|^zz`D-*Qx9u^(Uetp0w(nuNb&wLNllGxfuhvHCm~Bc z0WMhX#?6)8B>~!dXF1FW4BX0oeNm^oSe*HjEM9##=ERjJmo>)aRlnQKw({ z4nkvq7#`$r+%a~|Ju4FiZT>=NIP<8OLC_evw7`!?e_Q^QVR~vAo|RSq2nn=+J;#Xh zVjiyw3yb{KCOy9{ z>*`)uP>><=2q@EaG&S4KuD`5vpQARO~D=815T9cI3!l-(W^$ zlFG6j`#HG4*(3&SWaRYXwc#&QZ|Jtxpx$+KINUP70GgEqmwWdYDc#}Hh%y-N=oQ8k zL%CRb>i|I5iH78Ot<@UDeeambb9hJxF{Y@<9rHv2Q(+1qW3q*LR^|bXJ#TzH-arU| zGtF23WM+g(DLk%Dyl}amw;n6g1e7K5KD-jmI!zDCZH^wba52|WQ4t^i4U&{8Ec}eL zN(^K~rL|*%v47HXTW=yO5z6keYDX*R#K^wV0sRnSg@s1W83L%y{^H0;1^RprSBumj z)wsdLhYwL<(q@*!Hf8&(s}kFW%2K(zPTK!Uw}LuDOw{99A*frYFSt9kwqcYuiF z#e$sJ$uSZH-f_q$X*N2haEC07Thz9AZbHfk818?l)V4Pe%WONJ_PY%VNW%RSsThr#^i;+^>DRTjZT7P$Ezh+^jP1 zc3&$ymsJW;^tZAiAZ53WE{5?m9>dydu@iFQHrppA08}Dk)?k25;nlIXzZ^1)u!#mU=KMFz6&% zUvk0O!_Vri_eG_t#-o*1R5Kc=x^g?Om&OIY;D8ohl89%Yolz@K_(Sgqsx?DWU5-AA zMFRJYjq>4@!MV7(k;|n5JvEHgPA?4Tew89yezti3zV}(o?@yhJp1~f^O+9F2E&a4p ze`Pm%eI7C(PCxLzs-8p|9~YSXGM$%q$olC@h!_dMB|`m_*1bMjydBwy(ZUf^^+SNf zRM2MbIQM^A0R3o=-){DmQPU!#1zx>mM(Hg$Oz-qS4@j^L(HGx90^JLXipaAl+uJ@V z8!UE^Nvv&c72anQ_KRQpXjRevAN=$n)31|nr$(b%%B|u%^w?#=S{>|{3EJis0+?yV=r7bf-{Wc?O&>md(4TBcHU}@FC`}`d zo}RJ|g5gW!ZE`&-EzreSf|_r$)bqBptAbZ6E&&TF&3d~-@iykjho?{XGC;*1cA|FL zF9a67E>{m_NOSB24nTo!h07WLqtMrO@z6J%FJAJllA9jEs!%-iyiuR~t!s zHL~{!@+Cc@a1Vkv4*-<8W>7bl>@G@Rt7~fd1qyBp^R^;)H-Ln*4%kvcBi2B8E)yWAHQ(&aCb1=s4%tiCYJV`=vnbfb1++21$}}k!KRT zVu;{}fwFn^#+w_bhiW;$c*I(Vvt9GSURj!5aNY^P4zIqUp`M=J=?~S=z>T2s)-=Yr zU%-Rz_m+t~Tkns6tIj~;)TC=(kYq6joA>DH@lI4M&?yW+H}uzs3NG7@nPu8#f@GR& z^%$V`p7-w^A517?XgN|>s5OSbq&lw|>u*B_Apdtb?OYrnJGu>-ND<#Fe=Z~`&Jj|6afdY6a)3ZgNQ3@;fWvMA^@@w zpZC%wcuaAKfKjlYYx<~9GE!)s6- zxgaswUmgRZH)R5ID1{*dyDom9M_|JuLxlc1sV6z=^k|7+n#$A^&oW;2(=CJ}bl_7z z;J1SYYE^iBtuRVmeSP;UDo&j|nes|VxM1!3cS5tdhe!O#kO3=(PSAaAqgQBh-Z+AxdQ=(dx&~e8h8p2a1Y?{WIzxp6OV}F-(=jkD9 zCkqY(bi_pafe`iLWE(fPA`mVn*F6AW91C^*8}wYj14jI>utKC4MAio|ogpD1B&R!@ zg1fC^1)wo&(#l$l+%yNEhJmJQ9kg=x=;#15Lwi=Tibe)c zK!+pvLw&Ak0H5k+{~>0#1$fc`CiHETo|D4%z6#jvqiiFE1*oq4dOA8l*=7Gws)t7N zn&~A2?!jCw1HeShzURgFa-VozlYvtJ2orbQ%Hs)X*l3~Tv`QX5ax7zh zIT1q&gS`QDez&D(Mn-!1_&Su$TrCNl>IXh{fU?YnU&*7lOd2S61W1{UK+$$R(+<07 z9EbD^wNDY{4!lmi?1;xh?#(Mn;y*vzVY4ciS#uW)2`@EtCIwEIsQE5IP7cchaUdxY z1_>i3n$F5M?&eEbgHeI{gG?x(QbRz648*N`6Q`cE$ZVTZ2Jp@#9h0=q*p_0E)<%D} zqik=bh0tiyP~Fd|m0fa=I|bp^Ps4)8O4{m0GEAKdnB9TF!8xx!TC^#0IT+E|pu*~0 znHd?eUw*tFs0$pQ7-wT+>oQD+{hBEcq!x);$$)3LP`dP2s<3A1Y6@?}mO2D%cqcGQ z%riqFNaBsp9~%wx+pdE&6dL+~AqNVa7%(KLz!;KFPPB8PzuLGI)PJ(&4EZcReckee zTewf+$mBig)_g0#9lH9C9a zGYhhfkrAMY{=RVTlR%SU>;0hUB4gAw-@%E+Y0$5el@+DLy<+<%M&$Sj9ufQXh=WJA z^_RJ1jq^0FvLnIfU9LinWu;5(2$3fi`uZa9`C{Nz5x=P zV^1PqgA_U~w@^%hvp%o*2n!!(>2ee>G)H-VKKn@#i`Ci8g&{w97Hm)Yp>qZblHnbJ z!DCa*>tTtuege69!ZMk3Gf>&?+<6z2i-m_Cfm05je$)RXV3k^h7>nv^ftEGI zfOk$E_Y#C2sgIrTJrfrJ`SaB`1&*1DyX76H*hWvJFjq#)Y%a*+;${}7Z{NRfmEur; z7dg3)2#^$*;qRSysglJYqiYttS2+g$wSFyl_hse zO44x(8Ap@NcFR?iyzT4D$jOKWkFLS!W4dy6&hL2zHv4bURy+?y*o~pNR4V?LciE;0 zbt{AoTj^6Fb2kQo@&L_0{#eA@-ww18I`ov5*>8D6fQ+CpKR>fU8?>nkgF43s_Hp#b zuY;xsAR#Irf^=c7hYSnbv;3Ep4x(Ofv9$c3W~P=;_R|#Q#Gr?*AEozwoAo_yDynRV3&2_v9n3rUzJ^Heu01$19)VxGg?89MxX>wr|4>?dw|(rO)#8Z-_9vy-6omRdQFgJKbm65A$jsC;5NL z57U)D_WR{CQ`jd5S!Tpf&B9IC2liE^=Z!~MwH&nQ1pnD`e}Soy#KK=Edky67&1$H_K!sRZMcK!&lJ~90$Jc*T_%L|m;No5&A#}_?zs7`GHf4hSuP`qMYY4a8%NCa? z5ZtpT(Mvv#VSj^CdrXei1)(VXJtE*Xhz7C%P;l%myFaZc0DvHXq1UY2SaEyG?wd&d zwN_U{w1g9ejS^poVr#$2SE&0oks428#q^2Vsc{g68Bf%C zWyop^bld>X9Q(!GLtKu$DKlqF#*o|817b8j>lW3^Y4eRsU%v1qhMU{KiUZ$0xN4U2 zNMIS%7pxJ!WoMJx!KiW$=6=Ja9yYM)h={sPN^K|LM6NY9y87sSe>q`{&Nd~vO`jUz z;KP5NQ>s>KXdD>mc17=^b-ZDznw<4orEPvc$N%&5%`$~Fjgs5d3@)0#9%BS}`0(rS zfrg!oV_ei1@RvsFJmSiXS1(?)egFCWMlvq$K5UA!hk8PrapOHRP&4G(7XTZ$40NRC zl9Zb+(<_4kxB$gpd2EkvSiP`tsar)-|BddxzT4x3=@xEU%@<oZHYdzJH9Rm$bh%no>=fH%3jOxJWqW|qE1L)P+7<=bKXDrZ4h0{uoV&C~Iu zz6_ynm#FGLEuMLz!wmRuon_S76CLZ7RMd;p&FmIi57TK@_TB6Xu@36I3c|EbN(=X9 z$3wB@+gfQ1U52gtdXFKBDJ~w95`X4<2L`$=wR7Q5pUtVdsU%Pwfx>=qQBt~9sHneu zra-nm<{In9e)4UL!NI}O_nNG~#TNcj=19%SXgT|qr|L@lgY@Z-AAJ@k=`ZZMQ*6K~ zgj|*3jnXD2iM;R-T8p{uB3%>GEhorYx=R$sRt=U~LbYg(z9)sa|6r_!?M-NqnD4qn zid3^*)`l-bT46qqB3k%=aR}EAFEz`RFm6|PUAxI?1)42H>~9cMYvGY6YhZ}MK-9Q9 z*8rlG<+=B#Y!CRC25mrrve}8q8?%OgFROe*iVE%eoQW89PMC3eeborr$C`b?H=`N0 zG_DvM8(aDNMt!|Y<bSLl_Ul{@bNg!Ejz1t;?(Zm z5tcFu9&Oofh%z*^`Zq6#3E*Bchm})aW%{8hzW%(sNPL%m{QQpXlPx^PA98VCwA!ut z#q-G5Cv^ynY)c?ZsZ3!$_lbI2X5-Qp`kLk~eYUNxPWGKAB{~@YLt7d@batm22rhoKz zA3FZ7?4`>|6}e4$c6$1Lj=QH$o>p3~im@dH%m}~pq?QfK&c)A;feAdF`=(RWJ3 z1*~okOSFj5fR?qAr*pn^nEq!Y{hvn0GrGuJ)>W4y$1;Hc_R$*R)DiYTL9c zt|`1HgV)t-!KYf!uVAF`cO55JZibMixH^v4mO^-F_m63T()bna%JbIIM|wcewI$sF z*)y6Hae_OJK;vZ zO75lvzQ8(DGgnLEejPc88T>icf~+*cXm;+p-K(Mp4zNaJS;@5Hqc)JJZ80UlRAeyf zS@a?&S@uzw6%>GGM<9O2X$F9LrfVZ75&$VJrIOR|gD4TnD}@5# zSFz3uZ`9O4AY;4D4c0)+oKS%JX`FcLN8VKp>YpEHV>JT_9h`ROG%)S*^5Qf>&UH{- zu%ot0uYWd+ONPjDBnQ{ZUNyxC6lZ0dR$biDsm#Fa%vDxaj@}f)`WAxg7zKsxwXE-c z#XyVfCNd_=s~D{W$)&yQN4!?9JhG7k(}93)U~rMuvn%mu_-Ujqe#Xb#qX4|6Lvf%` zrmm?V&r^?n1)x_TY*IrT zxseo>G4=YY*(b-&l5wAo?kUjodUa^!VTLy+v*9P88K~={Nt}WxE-tI^)jxwU*r5<0 zx?!?VGZ_oc)bpQ>o_AukS_0k|2o+08N?e`X;sC=}yZ#ZBPI(s&0SFheTSwYmeIGXsrwBK=lB1?8 z@$bgGv3zQT9Gy;w#zdYIVnSOhC#AUYo}TAr+Qox`RdSM4)J#%?q!HyQwu}x`L&+r@TUz!o6o3DCUhI}$&ED8Sa zLEusMpQRbFP*q?gGUEc^m8(_XD>NSyYhz$fEf@uzsdcU^;7hRp1j;)9F%=Z@;AVTP z+|7Q4fd*Lu=m?>E1Y|{{0I801w`F|X2e|Y0i1!-er1d~IiZUtSSml1p@ye; zrZK-Dt2K=0akKa=qNy}$0Ge`cO=&ffd1z4q$s-Lykr_QJB=g4`Iu44=-l zSP1xa;C#DNcm4VXY8{AiF;=%~jY&l2-#6)pD8}56B3-;k>M-+4kaCL4t=_V)vWFR# zuFdS3kbE%^0#VOm$S^}PEd`~J=l7krsrkH`XzG!W7-utO#-utUh%tb4teH?tYraJy z@@5rfo$Zm68N_FvKqh=ltGmT*IMThJ&2vU(aHb()|yd_1VaWU?B161ggU|r{Z z2fG`Dt<%4B)CIU-Kr!Qu1(sdTs->08iIoo7nGlGKg&k{2uP4GrZ53ourcCJ95@cp(a!hF%s&d8p2FwAT-)6eNVL6mM(TP+Gtaf&5>to*~P8IjM z!KzJm7FnW_-~%D*g2134d#hg{sJ!@LEH7%CIcF5Lkcms9_Pp%LOH|uK08=h1Z)Ml1 ziu63v4M%{cWb#2zu@;l?-N~v*^(lR zPhS-|$Dbb#e!sL&23)}VXVg_xcosqKaRCvS#U#g791Zr4v9> zv5p@SEi(7QD&Mi=r>0(?kxKbnzUvG4tCxAxb0~CI*8v;x)GC*lR@;Yo6&Ge$$s)!( zpSU0Jdhpfx>nR0skzVm(&f+Wvi3HY++3E-fx|R7pGBL7a*RU5AzUu$ zHwIY)b@rXFIzN*x)p{gLNGZP`&m)7Pu7!fw^#dM?$8~y)$z+9@ojv!CUxW%~j%iRU z=DtJVFm0>9X?uXDifn+AV96vFLti51;ihIley!b!WA_`22_=w>f6!X5_w3dcAP|Et zq$Yd_$D@kZQ|p8s3`suKD)TwrleIY$D|`McF}(3~LH<51Z|NxqGnYHq=`{H(E6*BS&K}*=!XS1|{sjnOqQC8@fwFfDyjW2JO|9 ziIChzy$0)paA~2sp|+@Py?@l2rv`+u-8k5lzUI-X%1YwK8!D1_{U#@mJ+$G?WF~Iz zfh4JCs&8<|poH%uT=q9O5W-dMK7Q=OhgYwhFDPGZsT+Rp)ZV>&*#N9@nQ}}{-Piy+ zrcZb{wLTUdi3L@4sAYrw$1^Ck2#0-5DAZG2vq-U`4Vyqom=%;|JG9Rm(Jhzg)?vqf?9%hTocXCP|1Ko1e$#ri>1)LJ+R9UBEn-8cnD;G zuMSQtwQd?{hsN!&Ui;#un^nfc_DVYYr zmJ|~LDDlzJ5ilIGh9;(pjo&_i?-V)vkyOFG1M|UwI>XEx<<4NgNFN0~_E0=8?(NN) zHO@a((`BL#AhT{u{2@T`5DruxD_CSGW=%YKQuL|H_Y6I=uVTTf6KdL0ETF z((CkNKv8_n%VjujKW%M?J=?H5?EDY}%SG?}vK3`J3ZZZ7Mvrl{vPt_Ax)twY25IZf z`kd=Vgs<&-fBrcogO`^

8p&kE!zBVCTQxP%}bC1Oo{l0|(&JCOv|l9dnJcNW*-E z5v;#A3W8J+N`$5bN-2{U%t%H%OY zGbb|tuE-1<+>^R|AZpzK!>YB<{ksAmG@L#yx)W%J01Bb`fZaGhplOxeUsy`3aMMa2m5nj~u;Wy^WPH@)+z&TVszK#80q1BIxUJhvNXxYXddTC@yZIp46xWOQ!LmT*p;?4;jE)gSc)Jmq3EtGEE!~86{wz`W}S3l zx;-fo01wx9;-qgv!rgZJEk!S8>Jg1v0~G_sdp?bg#E`}U1r;fqpas)B&Z~OhiD%XA zlmKDWP$>Z~Da%g1s~bw%I;k@%Mq{g#cj0kmW|A7@Z?S=|FQ6mqs;iI%=!Z}^hAMk# z6^BTW_v=|wL*06rqLg7IYnf#$(|$_NdvEwpLqh|{)E{9c8t@z_gB7Y>kJkGSaLsh2 zYzFgaK$aof^*v@tYi003kmNoK^#o+(c3zgIiFl6ZND5&4$gfO;S()!uoJlMG)$F(p zS&7TsjHM)!b~S)tAaZS#)&COrT! zrV+6FQNnhw8tPzMQK0Rxtlr3mY8Vo8OGUs>$DE-+dTipANu(QFuc2$&nDfY*D#3Vvh-PM$fVa=Qo;=x{Kylh=WG-MxD^=>zlx2M}+X0rj?m1jYOL z`Q_L_v_Z1r43}$JVgdPNNSA$qbi3a7VU6L;E(bP$02TgmBVe<#BW-L6v11p-9K_0W zNr1A;Od=rLHkxm)CbcKvy;!u2qU$S{EJ0bg`k9b*0w9CTs+P(y;>}Zla)gi!|5x?- z{sRK6BWYgv7zTq3qo8qY5ftjboRxdsTwQrnZvxJNXgP$5^w^s4t=NfZWEiyoU|@;x zFNPjK`+(yD|HiKA$aZFc$7L{SK_Pa(NRobJjLYZQ!KVKe4)sKm>AI5JIq)NICEKD0 zdJ$#59Jbk=`G-H}Xob+h2->BQ%l49w80sbRUEvo}tnlK15I-Gaey6mgpAJGp>tt0G z>6wRLahk=ey!ZnwmH@Jh9rN#tpY{dBKdO=m)1z0J?i&kIznF)PK+m4! zZ2j26X4pc{WAae|-uzV9^EtnQW3=eIbcx8S++(cdLxG*KwYT@Smq0uMjL&J)rcoER z6_|NK6*?VLuCi>twUr}W|fJtvH$(E zhR)xIM=89`*o~%zG#YAKMvcr<=^$8nc=0Ti*d>nv_2PnQtRq3wLCOnbucWLtZ^k_Y zgNWB603c0UHMZBQ8xi3L;41vj+o14p~@O8qW1Iu5? zvk6Uw4drMUo0xRCY+rQ3qrI*UFW4Lt6M8;EDRYjSwOi=-gB>yKsg^a9R?!83Rm6{x zpxIWuMcYcHJu^7LW@AKbeH?+1Eh@1Kl_qmh3oWS0doF_|Vpu4dLa|E<1{Sj2|1Jk` zj?ocLQS|uP^+-ULi&O!kmyjuua)IPwqf(^gRXmM+y*5cNm&QCc%yCc}JZQdt69X`w z8l)Qxhi?`-*2GLxR|b}rUj@VWHVFc41-P~fui?%tWQYTkeG!A8 zlaTYBZE{lWmhRdGV(~025gVMtg7O2#3CqQrfT;?x_B6*}jV)4}=hacZDn?VOBcET? zmY+=Ys@HDnKBTR7YIEk~!mu;??)FQAX3Z@Ki^t7fqlU4kg$3_SW8ACstq1I@Z&_t+ zEQP8U8$?R+wYIa<_6P!5!DpZjV9;C>?W1#9Yc-@&0${+@zI~wuptC})WfB>g2ESml zINa%MuVVXY*4Bm;ijldLDDZ8;SW2Wh0A~&I1G(=kxZyPl)t?5TFSBmWUiY6}uSPR` z(?JiwiqMkAp8w=Asd_FSEC*_VL0<7$SG6oN=7~${MxQcgp7AfX_r0-mqh79}9Crmn zn{YVz4#LBCcz1R~YJWIohwy+k2pA0_^H>`kNAV@<)=dF-sN8TXnIaEh<2~37f35xR zI0SFb;xHeN&6|KB%{3VlUx5j3xpD_ef93UXWIBPzfa;31y^iXU0rik?ix>X;vuKl7 zmrb3hyxLM8z-ZJ5yqg# zWZMw+e1-iy7z6ix44fV*%pkv_(nKj^g1BhJq+AIa8KfKvc1r+GVeFIW8DLTAvE@J? z0&r?HkAw{f=Fvxm6s-Ph`$7<_2$)h9%N*xMo9ZM19LuS1P+(;Ez{KJqci>cb3jRr< z;Bf$?IfLAu;RH@Gk9@`ut!1tl9)Z;&?m}xxtb$VnFfU!ByQAusa2;l#)YBebRw;ZRW=6a%VLm9>yg|AMt>xeNB>#=hW`f zd!R`TJHeXOJqyvRQ+|hW0Gw(7Rsr=sKfL)McPU_7pT=T;F)lCO0i}zBfrH#jVr#03 z+=k-TGN6Xa{oJ7K&ycn8G%n>bCyb#S@6jxuP;WUKDWY*C55&rI_%T@k8ksv|fgu2L zN2%9>MaplpOnGdM0~jogM?Jb(os+ZQ9Bz& z!F7Nvx=NSWRwIb&G*WU@kmt51nB8(pNDC>NK0r`7faM_qgu;gu6=i$UTkjMrc}EiFqW%ebssq z;o;0?ZL3N82+w<#{1=yFZ4rTYE6lq;=ZFF;*Ai_T@l_Say!%!1P1np;iyF6Qnz-&) zS{wct0Qv|cQwl0j0H24^w_xS<2@D4B zm}~uVO2h|C__1LU2c{5M3x6#XwUU+a^6;E|n!;U9(Ed^%h<=y(y|zAS!mL+slT0dx zyA=`&8X#^+ljmqY4}Vubqh{ViSkk(tDPC%iL~n!KGEmWU^Cq@YSebSfmUDy%xJ z4V^S)tN*M@oF}H#i)Kxpg2G+TiLndLp*s$?Iqpbs19dZH+?(i@4j+KbNeSoo z?W@Lz+X3wQ9Y%DkSM?|aoa2qhHVWXQyFq-QY_n{XNI$F;Kg*(4Xj-m4SAqSR82wH` zM`_hL$Fe}%5T*aVRpg{Hyy^aQGGk!`Ke}ENxHJ@dSjb!cwWEl2>(b7MYBdNTjJu_S zgw?EQq$zvGmAfPO&6y1Jg;(Gf^ph^FTS?znKC;NQ!kyR~C$O@IgDtUFx zPM=5BP&#W#CK1Gn(_Lxa3=)}YuG5JrU*7*FHf;0#p#!^CSIqkT>S)$m?@i^u9kgo* zzBa38@@w;mXiaTD-|`qt#T;YywS@`p`aa$<*)2{NRX&|N#WYl_)y=DAl{QJIf(R_#mcnkT|EvVz-cFy-Vao^%yj zpJyn=mwrxRrMR)N@%cj#{d}=BC;Y0=OB*xSz;l?29&!!cb+t03{L-32j^jnUtfJRljfQ?D%}3%VaCGlj%*EoHp3P>q zc)vQc$;NMal0B~GX+P)S{%fNrJa&H4G0z0e`%R(q*#rp5qSRRP6wQY>`AaRmukK+l zdI*lcgs?j!BLjSr+FJLLpU5#UzTj<9BNMojfE`E6O%ksY)I3Jtv@?p{+S#`YE^)H8 zk`0G|b%$dwGHni?8sR@e#eTBs9Ps4BfT)V0egPCV)u=4YKozm<;D_KZdjG9qz$c1# zhK?LE)cN-bFJ{UGhL$Wo^Tja;QPY_QL} z)SCV=r;tBK$a@YUVRH@pJ}Wm&C|C)H6V_}&*kTU%TIuF4$9;LhMJBRb?L1)H65y60 z!Q{I`@83g26Ynr7N<3(k}6@f3z?YqhF^#On%N&=n4#F zIhmz?v?}?+eLwF6P)0WFjVMDWNE}w=oOPgLL2GH3gRB9gP4PM2kQr0NTqdapet%>6 z+Wk1ZX#3saMD`-znuc|KaAQuEi=@_BA tKmu&e#q<}GW&;g{{MO|@KDob@;1HeMF!&Xxqgd$E4;&5{{si5)};Ud literal 0 HcmV?d00001 diff --git a/docker/docmosis/templates/familycourtseal-bilingual.png b/docker/docmosis/templates/familycourtseal-bilingual.png deleted file mode 100644 index cf8f83852394f2ba3fc420f60fd5082c45720fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29035 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 WORCESTER_LIST_ENTRY = Pair.of(WORCESTER.getName(), WORCESTER.getCode()); + private static final Pair WREXHAM_LIST_ENTRY = Pair.of(WREXHAM.getName(), WREXHAM.getCode()); @Autowired private Time time; @@ -281,8 +285,7 @@ void init() { @Test void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { - - when(dfjAreaLookUpService.getDfjArea(COURT_2.getCode())) + when(dfjAreaLookUpService.getDfjArea(WREXHAM.getCode())) .thenReturn(dfjAreaCourtMapping); final Colleague existingSocialWorker = Colleague.builder() @@ -305,8 +308,8 @@ void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER) .courtsToTransfer(dynamicLists.from(1, - Pair.of(COURT_1.getName(), COURT_1.getCode()), - Pair.of(COURT_2.getName(), COURT_2.getCode()))) + WORCESTER_LIST_ENTRY, + WREXHAM_LIST_ENTRY)) .localAuthorityToTransfer(newDesignatedLocalAuthority) .localAuthorityToTransferSolicitor(newDesignatedLocalAuthoritySolicitor) .build(); @@ -329,6 +332,7 @@ void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { .localAuthorityPolicy(organisationPolicy(LOCAL_AUTHORITY_1_ID, LOCAL_AUTHORITY_1_NAME, LASOLICITOR)) .localAuthoritiesEventData(eventData) .localAuthorities(wrapElements(designatedLocalAuthority, secondaryLocalAuthority)) + .caseManagementLocation(new CaseLocation("1111", "1")) .build(); final CaseData updatedCaseData = extractCaseData(postAboutToSubmitEvent(initialCaseData)); @@ -339,7 +343,8 @@ void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { assertThat(updatedCaseData.getSharedLocalAuthorityPolicy()).isNull(); assertThat(updatedCaseData.getCaseLocalAuthority()).isEqualTo(LOCAL_AUTHORITY_2_CODE); assertThat(updatedCaseData.getCaseLocalAuthorityName()).isEqualTo(newDesignatedLocalAuthority.getName()); - assertThat(updatedCaseData.getCourt()).isEqualTo(COURT_2); + assertThat(updatedCaseData.getCourt()).extracting("code", "name") + .containsExactly(WREXHAM.getCode(), "Family Court sitting at Wrexham"); assertThat(updatedCaseData.getLocalAuthorities()).extracting(Element::getValue).containsExactly( LocalAuthority.builder() .id(newDesignatedLocalAuthority.getId()) @@ -359,6 +364,8 @@ void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { .reference(existingSolicitor.getReference()) .build())) .build()); + assertThat(updatedCaseData.getCaseManagementLocation()) + .isEqualTo(new CaseLocation(WREXHAM.getEpimmsId(), WREXHAM.getRegionId())); } @Test @@ -415,14 +422,14 @@ class TransferToAnotherCourt { @Test void shouldTransferToOrdinaryCourt() { - when(dfjAreaLookUpService.getDfjArea("384")) + when(dfjAreaLookUpService.getDfjArea(WREXHAM.getCode())) .thenReturn(dfjAreaCourtMapping); final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER_COURT) .courtsToTransferWithoutTransferLA(dynamicLists.from(1, - Pair.of("Worcester", "380"), - Pair.of("Wrexham", "384"))) + WORCESTER_LIST_ENTRY, + WREXHAM_LIST_ENTRY)) .build(); final CaseData initialCaseData = CaseData.builder() @@ -436,7 +443,7 @@ void shouldTransferToOrdinaryCourt() { final CaseData updatedCaseData = extractCaseData(resp); Court currentCourt = updatedCaseData.getCourt(); - assertThat(currentCourt.getCode()).isEqualTo("384"); + assertThat(currentCourt.getCode()).isEqualTo(WREXHAM.getCode()); assertThat(currentCourt.getName()).isEqualTo("Family Court sitting at Wrexham"); assertThat(currentCourt.getDateTransferred()).isNotNull(); assertThat(updatedCaseData.getPastCourtList()).hasSize(1); @@ -450,19 +457,19 @@ void shouldTransferToOrdinaryCourt() { assertThat(updatedCaseData.getDfjArea()).isEqualTo(dfjAreaCourtMapping.getDfjArea()); assertThat(updatedCaseData.getCourtField()).isNull(); assertThat(resp.getData()).extracting("caseManagementLocation") - .extracting("baseLocation", "region").containsExactly("637145", "7"); + .extracting("baseLocation", "region").containsExactly(WREXHAM.getEpimmsId(), WREXHAM.getRegionId()); } @Test void shouldTransferToOrdinaryCourtAgain() { - when(dfjAreaLookUpService.getDfjArea("384")) + when(dfjAreaLookUpService.getDfjArea(WREXHAM.getCode())) .thenReturn(dfjAreaCourtMapping); final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER_COURT) .courtsToTransferWithoutTransferLA(dynamicLists.from(1, - Pair.of("Worcester", "380"), - Pair.of("Wrexham", "384"))) + WORCESTER_LIST_ENTRY, + WREXHAM_LIST_ENTRY)) .build(); final CaseData initialCaseData = CaseData.builder() @@ -488,7 +495,7 @@ void shouldTransferToOrdinaryCourtAgain() { final CaseData updatedCaseData = extractCaseData(postAboutToSubmitEvent(initialCaseData)); Court currentCourt = updatedCaseData.getCourt(); - assertThat(currentCourt.getCode()).isEqualTo("384"); + assertThat(currentCourt.getCode()).isEqualTo(WREXHAM.getCode()); assertThat(currentCourt.getName()).isEqualTo("Family Court sitting at Wrexham"); assertThat(currentCourt.getDateTransferred()).isNotNull(); assertThat(updatedCaseData.getPastCourtList()).hasSize(2); @@ -510,7 +517,7 @@ void shouldTransferToRcjHighCourt() { final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER_COURT) .courtsToTransferWithoutTransferLA(dynamicLists.from(1, - Pair.of("Worcester", "380"), + WORCESTER_LIST_ENTRY, Pair.of(RCJ_HIGH_COURT_NAME, RCJ_HIGH_COURT_CODE))) .build(); @@ -543,13 +550,13 @@ void shouldTransferToRcjHighCourt() { @Test void shouldTransferOutOfTheHighCourt() { - when(dfjAreaLookUpService.getDfjArea("380")) + when(dfjAreaLookUpService.getDfjArea(WORCESTER.getCode())) .thenReturn(dfjAreaCourtMapping); final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER_COURT) .courtsToTransferWithoutTransferLA(dynamicLists.from(0, - Pair.of("Worcester", "380"), + WORCESTER_LIST_ENTRY, Pair.of(RCJ_HIGH_COURT_NAME, RCJ_HIGH_COURT_CODE))) .build(); @@ -563,7 +570,7 @@ void shouldTransferOutOfTheHighCourt() { final CaseData updatedCaseData = extractCaseData(postAboutToSubmitEvent(initialCaseData)); - assertThat(updatedCaseData.getCourt().getCode()).isEqualTo("380"); + assertThat(updatedCaseData.getCourt().getCode()).isEqualTo(WORCESTER.getCode()); assertThat(updatedCaseData.getCourt().getName()).isEqualTo("Family Court sitting at Worcester"); assertThat(updatedCaseData.getCourt().getDateTransferred()).isNotNull(); assertThat(updatedCaseData.getPastCourtList()).hasSize(1); diff --git a/service/src/integrationTest/resources/documents/document-sealed.pdf b/service/src/integrationTest/resources/documents/document-sealed.pdf index 5a6c8d85a44682f4edc9172908396d9ef8fff869..aba927228f1857c932ec64ec83fd49c75d863487 100644 GIT binary patch delta 34249 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 z

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 hL0$x&) zlX_D-h#WViCp=O;PAb4~xiUM62=!iM`16zgevgX|!VDl^1h5%~1Y%b0Cqs>}e`!5R zk2_CO%G8(j&~lWS-=*ij(fhr*xw**D8{=%$?Xi08VFr2vnR{Ls|d)dg;)S9kv6AHM|&&Mph+}uf$!#8l+kV$ufO4@N7MLhsDB$ z3#m`n+F;bvIOje2iG&;}+cG9e*frFyWe#6PxX`|nMwRLGf(s1w#=jBz@CKfVC3tD* zhW!oY-LuFtvat@-#fHB1PDh7|>->#%a~vXN6B;>Y%ojR>Fs!9aJh2xda&gNixSl~Y z#}sTabSyR%gPu%IBA4QPE@gV?$W0=4vq|;Z%vBt?Snv7xBza+P+7x7hu1XeO*aGkK z{5nrqpXFy3Df750n5ttZPpVumftovPkDTOnplNsR+(~{5O~*c@t41(^aiC1`US3|g zmXLywY&^;3nwFVB0lFRl2~eTe`TAH2Y~2+g>vy12Aa)F#S5BA(gMdbjA8GSFQlU)- z#$R?40rPSr_{K!3Qvo+dVdE&dylN>(>}Qvz*-)MW%7m<%_Ud5L)#E^_1e2%yr}6Xr z9W+^Y()^Hdz6Tj$!Jfmw7+L=)TD9BB!GSmZssI%TL@OYFq{GpGuSJeVVE$1%&=r;m ze~r-r9w7*0;NSQW0XcRt5P<1USy+tRE|H`k9GCU^may=@h5#5zGE-Y}Jr{oDt>T#U zLzkn>x5H99vw!w3I#eaJ)`yO4EP{K=2cbf7PqAngej-N+YlnsSnUD`Wt||R^&>ot{ zYHG-jT)avf88$Xq%hRDs0p{Ik{C?anBtp}@G!tv}OVY+z80F*(&wMmLJ>r4-$id<9 zJ>^&7daID~K)qqaqx2!HY>1ASAbbz>n~3c7U*-a4 z(g^we;hu*5pCJFAot@38*wZkahAjh|z>D9Pks*MRWcPyG;)jDi@%L(Ef=ujIw)3XK z)KA7iW4v?}FFDmTKD1d3Xs1j*1mvIZi~BzmR2Atj{;Fm|v#WPelsss#I1DQ*cPj}b zDZmSzF=GaOQD>o%D`43(($l+pukSN7G=x@i?wPr;Dk}k5r!@NZJydY=^3+wfgYa61 zwPw{AP$=HFPwClVkC%RbG;*bN5tE5^Mq|Cw(^;Tnd3dp-O4QQ(K(cYxFv^CYVJ(#h zm@?2>tBu=mcfl>BO>a*UO$sU0+^xA~{8PTfAAi2& zHTa%+d3hWfe?ka!b$JVU7D1`7s72}&1A}h+ZHte(bTu~O1<{d_L1#jhvgSIOI|Y5+ z;Gv_g#O&G3s$QVTBE1U(JGb&Bwz72QBi*AM4njiK#}WuRqB6@MDQpMDT6Do`-m)Jl z6T?ucG@4~n0LT$z@2gy(UBc|o%u&-N8o=!e z>G(980QD_WFX-7JzAD00X{4T6+*y!Ja%<9R?c1+KJRY4jwK(|XL}%1$nV;jl!r*w^ zyfs9GGb1=)M_SCSYR@L1-uePe*FsY0I#GV)6i;(YODz{aP#XLgti>4Y*kr4Syo|N# zQf&d;W5h4tXaX#;0NG5UVy?muh+`3VCdaMRYKFPF9*w4N{MWRgpRol9KvKetfw*gg z@5_BgJc8av)|K zv5%fp(|?~e`=ocNmFJZmn{@IN<#tN|^dW~}yh{ge@NVn`IKXJib|JdY95jtOiG8>e zwx#$SJ#Mql4LUc(Oa^)f(zy${;;p&&RT06xXi2b#OY~-tN@I5{M!FC*UliWa25QMa@6C1%X1dBE7O*!jFNcNlX}=_ z=854NnZYF1z-9t&ncj~(!yA`!t!H6Hp3Vxp&X~C)X>O3A6={il*%M)^jHF)x?4=gg z+af=kAG2m&n!Ty6(vB#^!*dDJOI+aHo(4&jxech!9SxKod^E$c&k>ul9{E+q0fDP7 zxC!*z{E)WqxyyiV`vem81EsQbI{+X@d`GzF#O8DrxkbgTjR6Rj^XU=B2B_}1Qp&mP zN#mr;yEG~%HJQ%AtddkYfGh$3r!P{O%a6tE)S|l818I)%_;2}KHz6t8l;eT&H6_dLIOe44 zBk`T2N~P@cF&kgs{7BE2aOL7 zc$oWh&NG#3lY!YmPov+L3I8?c-RpHMdHsWjo7Fkq_=Y5;dY6uZjn8TWlab49+@Ye|e2d`;D1_aT)6!!>h=;oq#A2Cna!=Ek3g zVTOcZDTP%Qv}UBX3wYPqZPyz+1E{oVdP;TQY_nT9?1P64_UP13m+2nsfyD(AF2e;!JmG%*_ zG+hVVtYx`fAWhSYeU2Cz9?m?3H>4RrNl~6>9u7n3^J7-*H0}F15gtuez#iSDRgY5U zau)#Khdg%KhmRmPHP-u2zW_5^xH88>Ojct_&kKQ1*vRGh>77H zc4%5b3w>(}KQ>P(f_Dhag+CUHI;cu`d5TazQ{iTj-(Ixb0}|vFUeC>s8L*qwIwey| z;p~Tm!e&S+GUer(&%@uGm{~vnE{thi>ohmwJ<&@)r%Vik-L{#dA6%i811C)U3i8Kg zx5_J1eh98<$!uVS267;yWoI%n+@VJ={9VQgF$!x64vatkD*PorIX>Y>$fL)7^J2P! z{{by%(y3VeOHJZ@F|A4DICUD96njjHT6h{ef?=!8_5>%eJ=4Cq6FW)70~ouKPn@FL z4h*<^68Ug+f#s0(n0B3izk<(cl=m&Ik`Es{!NddLpA{cTtOH8%jwTI4!%D4r3Y-t5 zh*t^|l>ATIRQNIimHz$glVi$or}M+9F^fX^5ltfBWkJZ@V&00+-6a{<&g}@TBSM0~ zNX}xQd@@qMvW2Pa8e8d%5t>$6(X8%tLL2I~gOk@=Rl}?djTtq(VY_n9v>o(sZ^c|w z8FrLshb<@a=;}(ROsQmoSaGHU(>;bvr5jJ^L6pz$eGwHLef#x3baj>Ezb<~ve(Aos z@~7`Dn*%O6_D_9o92%jag?f2bMj|T42z#(ISa8$x{`RRR8&`fj;J4fIkzsnY=lZbN z)@{Q{lMZt zCr@)_sW1m!gJ_SHu@$LH3H0NdHU6q% zxZnLqVM-!`gqi3$NLG!Szw6AV`(2ghXC1Ie-x@{ zZPPUFUga+{b-%cav-mD#1|)=?nVFdotu!<^mwiW#eDVp;z}loB)&vGSW?qtbouK|c z_EkH=SsgutD4aUQFq2J~fX9d9EH-Qlm>%jqMn}H0=oxn9!vitwL(@WlMb)b;%EYj> zC@0`91e5N+sq6Ad;vGR_`;GXP>xFqUN?$w%+v=ern@REE$KXfjSaNLXoVCm`+ez!a zpF{Da>2(zY*Koq^GzH*BFENlx4xk`S;=A`#Q(ED6cHWDgqi-*qqwy5 zR^UE8;bM-n92_4gcL{JNl3?o1*KgiH|4}aWVb<#hP%Z>Gwny^Se3yx4WtUW+M*MQ) z#&mOYva8u2-DqPD2oiJU9dYc;qRi{^k9<~g96L;`F)r}C7diMJl$Fa*)mc&u>IOZt z)@pgSmJe?A@-my+YQuXVJT!TDWZf_Q%i4T;Z4Nzg7!@{rJQ!~9{wFkhGRsLSwJb%> zcUooMP4^aMA*{=+yUFNdo8h>N~TtPuw^2kHX~0X34R+VG$(OD|1g-(-FV5 z%=3Qcz!RtV7_Y~UEMYH~G=bE=Fn#WP1a4$}jYh}k)SQX*zPC0>TFS#U)T$VDWRW(x zZ(d|2(En9KV!V>IBF7p1FkhYNViZ!>52hI>mwd$He^t(sjmGDCjFovqi#zpQ%9b=^ z+Ew$f=;_Zx@aQ<^W>3EsbdU%uLJG`>~rGc`Gag|N1CCN1^CV*s~mqhQAZ(=e9lJdWv_&?7* z{pbA6ziHzC+;#u)`I}$#>3>~PApi9L>ZSkHubBS%I~CAB=g(utQAVupK+y=?)A65r znV#`&|Ihi;JlIKpp9Zw}4;&9X;J^%C)}He?Y+-E2 zU=U|}Y>C_w7f-h)y0{QGM6cfxx|x_9w_ziZLAPSm1{Fu+?5rKF9PQ{3d@&gGXblXh y#9-JsI@sGte@lp4yD4%*9MRdCID6TqZ5!a;eL4r@)NLFcZLNuuCwndNCjK9Qh;Ix4 delta 23121 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 IB}Gq03N()_9RL6T diff --git a/service/src/main/java/uk/gov/hmcts/reform/ccd/model/CaseLocation.java b/service/src/main/java/uk/gov/hmcts/reform/ccd/model/CaseLocation.java index 8eb9850dcf3..20e2c614b8a 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/ccd/model/CaseLocation.java +++ b/service/src/main/java/uk/gov/hmcts/reform/ccd/model/CaseLocation.java @@ -1,10 +1,12 @@ package uk.gov.hmcts.reform.ccd.model; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @Data @Builder(toBuilder = true) +@AllArgsConstructor public class CaseLocation { private String baseLocation; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/config/AsyncConfiguration.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/config/AsyncConfiguration.java index 5e90d0c6314..db9df3834d1 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/config/AsyncConfiguration.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/config/AsyncConfiguration.java @@ -1,9 +1,9 @@ package uk.gov.hmcts.reform.fpl.config; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -20,10 +20,16 @@ @Slf4j @Configuration -@RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class AsyncConfiguration implements AsyncConfigurer { private final ApplicationContext context; + private final int corePoolSize; + + public AsyncConfiguration(@Autowired ApplicationContext context, + @Value("${fpl.core_pool_size:10}") int corePoolSize) { + this.context = context; + this.corePoolSize = corePoolSize; + } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { @@ -43,6 +49,7 @@ public void handleUncaughtException(Throwable throwable, Method method, Object.. public Executor getAsyncExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setTaskDecorator(new AsyncTaskDecorator(context)); + taskExecutor.setCorePoolSize(corePoolSize); return taskExecutor; } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageLocalAuthoritiesController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageLocalAuthoritiesController.java index cfb57e53bba..193653d4e7b 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageLocalAuthoritiesController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageLocalAuthoritiesController.java @@ -9,7 +9,6 @@ import uk.gov.hmcts.reform.ccd.client.model.AboutToStartOrSubmitCallbackResponse; import uk.gov.hmcts.reform.ccd.client.model.CallbackRequest; import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; -import uk.gov.hmcts.reform.ccd.model.CaseLocation; import uk.gov.hmcts.reform.ccd.model.Organisation; import uk.gov.hmcts.reform.fpl.enums.CaseRole; import uk.gov.hmcts.reform.fpl.enums.LocalAuthorityAction; @@ -183,7 +182,7 @@ public AboutToStartOrSubmitCallbackResponse handleAboutToSubmit(@RequestBody Cal caseDetails.getData().put("caseLocalAuthorityName", caseData.getCaseLocalAuthorityName()); caseDetails.getData().put("localAuthorities", caseData.getLocalAuthorities()); - updateDfjAreaCourtDetails(caseDetails, caseData.getCourt()); + updateCourtDetails(caseDetails, caseData.getCourt()); removeTemporaryFields(caseDetails); @@ -210,12 +209,6 @@ public AboutToStartOrSubmitCallbackResponse handleAboutToSubmit(@RequestBody Cal caseDetails.getData().put(PAST_COURT_LIST_KEY, caseData.getPastCourtList()); caseDetails.getData().put(COURT_KEY, courtTransferred); - // Add the caseManagementLocation for global search/challenged access - caseDetails.getData().put("caseManagementLocation", CaseLocation.builder() - .baseLocation(courtTransferred.getEpimmsId()) - .region(courtTransferred.getRegionId()) - .build()); - if (!isEmpty(courtTransferred) && RCJ_HIGH_COURT_CODE.equals(courtTransferred.getCode())) { // transferred to the high court -> turn off sendToCtsc caseDetails.getData().put("sendToCtsc", YesNo.NO.getValue()); @@ -224,7 +217,7 @@ public AboutToStartOrSubmitCallbackResponse handleAboutToSubmit(@RequestBody Cal // we were in the high court, now we're not -> sendToCtsc again caseDetails.getData().put("sendToCtsc", YesNo.YES.getValue()); } - updateDfjAreaCourtDetails(caseDetails, courtTransferred); + updateCourtDetails(caseDetails, courtTransferred); } @@ -255,10 +248,13 @@ public AboutToStartOrSubmitCallbackResponse handleTransferCourtWithoutTransferLA return respond(caseDetails, errors); } - private void updateDfjAreaCourtDetails(CaseDetails caseDetails, Court court) { + private void updateCourtDetails(CaseDetails caseDetails, Court court) { DfjAreaCourtMapping dfjArea = dfjAreaLookUpService.getDfjArea(court.getCode()); caseDetails.getData().keySet().removeAll(dfjAreaLookUpService.getAllCourtFields()); caseDetails.getData().put("dfjArea", dfjArea.getDfjArea()); caseDetails.getData().put(dfjArea.getCourtField(), court.getCode()); + + service.getCaseManagementLocation(court) + .ifPresent(caseLocation -> caseDetails.getData().put("caseManagementLocation", caseLocation)); } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java index 61a3de98578..7ec55b384f2 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java @@ -11,6 +11,7 @@ import uk.gov.hmcts.reform.ccd.client.model.CallbackRequest; import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; import uk.gov.hmcts.reform.fpl.controllers.CallbackController; +import uk.gov.hmcts.reform.fpl.model.CaseData; import uk.gov.hmcts.reform.fpl.service.CaseConverter; import uk.gov.hmcts.reform.fpl.service.MigrateCaseService; @@ -28,7 +29,8 @@ public class MigrateCaseController extends CallbackController { private final Map> migrations = Map.of( "DFPL-log", this::runLog, - "DFPL-2492", this::run2492 + "DFPL-2492", this::run2492, + "DFPL-2491", this::run2491 ); private final CaseConverter caseConverter; @@ -66,4 +68,10 @@ private void run2492(CaseDetails caseDetails) { caseDetails.getData().putAll(migrateCaseService.removeCharactersFromThresholdDetails(getCaseData(caseDetails), migrationId, thresholdDetailsStartIndex, thresholdDetailsEndIndex)); } + + private void run2491(CaseDetails caseDetails) { + final String migrationId = "DFPL-2491"; + final CaseData caseData = getCaseData(caseDetails); + caseDetails.getData().putAll(migrateCaseService.setCaseManagementLocation(caseData, migrationId)); + } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisImages.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisImages.java index 4c465552a8e..2de33a134b1 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisImages.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisImages.java @@ -11,7 +11,7 @@ public enum DocmosisImages { DRAFT_WATERMARK("[userImage:draft-watermark.png]", null), - COURT_SEAL("[userImage:familycourtseal.png]", "[userImage:familycourtseal-bilingual.png]"), + COURT_SEAL("[userImage:FL-PLW-familycourtsealV2.png]", "[userImage:FL-PLW-familycourtseal-welshV2.png]"), CREST("[userImage:crest.png]", null), HMCTS_LOGO_LARGE("[userImage:hmcts-logo-large.png]", null), HMCTS_LOGO_SMALL("[userImage:hmcts-logo-small.png]", null); diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java index f4c49026626..a22215c585c 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java @@ -537,7 +537,7 @@ public boolean isWelshLanguageRequested() { @JsonIgnore public SealType getSealType() { - return isWelshLanguageRequested() ? SealType.BILINGUAL : SealType.ENGLISH; + return isWelshLanguageRequested() ? SealType.WELSH : SealType.ENGLISH; } @JsonIgnore diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/document/SealType.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/document/SealType.java index 38119b560c2..782d1bc3de2 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/document/SealType.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/document/SealType.java @@ -6,8 +6,8 @@ @RequiredArgsConstructor @Getter public enum SealType { - ENGLISH("static_data/familycourtseal.png"), - BILINGUAL("static_data/familycourtseal-bilingual.png"), + ENGLISH("static_data/FL-PLW-familycourtsealV2.png"), + WELSH("static_data/FL-PLW-familycourtseal-welshV2.png"), HIGHCOURT_ENGLISH("static_data/highcourtseal.png"); private final String image; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java index a744ec3c0bf..d4b348cc6d5 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java @@ -60,6 +60,10 @@ public class ManageOrdersEventData { EPOType manageOrdersEpoType; String manageOrdersIncludePhrase; List manageOrdersMultiSelectListForC43; + String manageOrdersChildArrangementsLiveWithDetails; + String manageOrdersChildArrangementsContactWithDetails; + String manageOrdersSpecificIssueOrderDetails; + String manageOrdersProhibitedStepsOrderDetails; String manageOrdersRecitalsAndPreambles; String manageOrdersRecitalsAndPreamblesOptional; String manageOrdersIsByConsent; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java index 2c8cfcf6fdc..486a3e612da 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java @@ -188,7 +188,7 @@ public enum Order { IsFinalOrder.MAYBE, List.of( LINKED_TO_HEARING, LINK_APPLICATION, APPROVER, APPROVAL_DATE, WHICH_CHILDREN, ORDER_BY_CONSENT, - DETAILS, FURTHER_DIRECTIONS, CHILD_ARRANGEMENT_SPECIFIC_ISSUE_PROHIBITED_STEPS, CLOSE_CASE, + DETAILS, CHILD_ARRANGEMENT_SPECIFIC_ISSUE_PROHIBITED_STEPS, CLOSE_CASE, REVIEW_DRAFT_ORDER) ), C47A_APPOINTMENT_OF_A_CHILDRENS_GUARDIAN( diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java index 91f7402c107..e7625a5fc7d 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java @@ -71,7 +71,9 @@ public enum OrderQuestionBlock { List.of("manageOrdersDirections")), CHILD_ARRANGEMENT_SPECIFIC_ISSUE_PROHIBITED_STEPS("childArrangementSpecificIssueProhibitedSteps", OrderSection.ORDER_DETAILS, - List.of("manageOrdersMultiSelectListForC43", "manageOrdersRecitalsAndPreambles")), + List.of("manageOrdersMultiSelectListForC43", "manageOrdersRecitalsAndPreambles", + "manageOrdersChildArrangementsLiveWithDetails", "manageOrdersChildArrangementsContactWithDetails", + "manageOrdersSpecificIssueOrderDetails", "manageOrdersProhibitedStepsOrderDetails")), DISCHARGE_DETAILS("dischargeOfCareDetails", OrderSection.ORDER_DETAILS, List.of("manageOrdersCareOrderIssuedDate", "manageOrdersCareOrderIssuedCourt")), REVIEW_DRAFT_ORDER("previewOrder", OrderSection.REVIEW, diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java index 359b43c4124..37f8270b64d 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java @@ -78,6 +78,10 @@ public class GeneratedOrder implements RemovableOrder, AmendableOrder, Translata private String linkedApplicationId; private String markedFinal; private final DocumentReference notificationDocument; + private String childArrangementsLiveWithDetails; + private String childArrangementsContactWithDetails; + private String specificIssueOrderDetails; + private String prohibitedStepsOrderDetails; @JsonIgnore public boolean isRemovable() { diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/ManageLocalAuthoritiesService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/ManageLocalAuthoritiesService.java index d4eb02a68f8..5e9912b74db 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/ManageLocalAuthoritiesService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/ManageLocalAuthoritiesService.java @@ -5,6 +5,7 @@ import org.apache.commons.lang3.tuple.Pair; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.ccd.model.CaseLocation; import uk.gov.hmcts.reform.ccd.model.ChangeOrganisationRequest; import uk.gov.hmcts.reform.ccd.model.Organisation; import uk.gov.hmcts.reform.ccd.model.OrganisationPolicy; @@ -63,6 +64,7 @@ @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class ManageLocalAuthoritiesService { + public static final String FAMILY_COURT_SITTING_AT = "Family Court sitting at "; private final Time time; private final CourtService courtService; private final ValidateEmailService emailService; @@ -352,10 +354,8 @@ public Court transferCourtWithoutTransferLA(CaseData caseData) { .map(DynamicList::getValueCode) .flatMap(courtLookUpService::getCourtByCode); if (chosenCourt.isPresent()) { - boolean isHighCourt = chosenCourt.get().getCode().equals(RCJ_HIGH_COURT_CODE); - Court newCourt = chosenCourt.get().toBuilder() + Court newCourt = adjustCourtName(chosenCourt.get()).toBuilder() .dateTransferred(time.now()) - .name((isHighCourt ? "" : "Family Court sitting at ") + chosenCourt.get().getName()) .build(); caseData.setPastCourtList(buildPastCourtsList(caseData)); caseData.setCourt(newCourt); @@ -421,7 +421,8 @@ public Organisation transfer(CaseData caseData) { ofNullable(eventData.getCourtsToTransfer()) .map(DynamicList::getValueCode) - .flatMap(courtLookup::getCourtByCode) + .flatMap(courtLookUpService::getCourtByCode) + .map(this::adjustCourtName) .ifPresent(caseData::setCourt); caseData.setCaseLocalAuthority(localAuthorityIds.getLocalAuthorityCode(newDesignatedLocalAuthority.getId()) @@ -488,4 +489,27 @@ private String getLocalAuthorityToTransferCode(CaseData caseData) { return eventData.getLocalAuthoritiesToTransfer().getValueCode(); } + public Optional getCaseManagementLocation(Court court) { + String courtCode = court.getCode(); + Optional lookedUpCourt = courtLookUpService.getCourtByCode(courtCode); + + return lookedUpCourt.map(c -> CaseLocation.builder() + .baseLocation(c.getEpimmsId()) + .region(c.getRegionId()) + .build()); + } + + private Court adjustCourtName(Court court) { + boolean isHighCourt = court.getCode().equals(RCJ_HIGH_COURT_CODE); + boolean hasFamilyCourt = court.getName().contains("Family Court sitting at"); + + if (isHighCourt || hasFamilyCourt) { + return court; + } else { + return court.toBuilder() + .name(FAMILY_COURT_SITTING_AT + court.getName()) + .build(); + } + } + } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculator.java index e560adbb110..f583766db10 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculator.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculator.java @@ -30,7 +30,8 @@ public List calculate() { "hearingDetailsSectionSubHeader", "issuingDetailsSectionSubHeader", "childrenDetailsSectionSubHeader", - "orderDetailsSectionSubHeader" + "orderDetailsSectionSubHeader", + "manageOrdersChildArrangementsOrderTypes" )); return fields; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/C43ChildArrangementOrderDocmosisParameters.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/C43ChildArrangementOrderDocmosisParameters.java index 704f68015ff..3a9fb53f505 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/C43ChildArrangementOrderDocmosisParameters.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/C43ChildArrangementOrderDocmosisParameters.java @@ -14,6 +14,10 @@ public class C43ChildArrangementOrderDocmosisParameters extends DocmosisParamete String orderMessage; String orderByConsent; String recitalsOrPreamble; + String prohibitedStepsOrderDetails; + String specificIssueOrderDetails; + String childArrangementsContactWithDetails; + String childArrangementsLiveWithDetails; String orderDetails; String furtherDirections; String localAuthorityName; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGenerator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGenerator.java index 1e92e4bf105..054d0b62625 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGenerator.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGenerator.java @@ -15,9 +15,10 @@ import uk.gov.hmcts.reform.fpl.service.orders.generator.common.OrderMessageGenerator; import java.util.List; -import java.util.stream.Collectors; import static org.apache.commons.lang3.StringUtils.isEmpty; +import static uk.gov.hmcts.reform.fpl.enums.ChildArrangementsOrderType.CHILD_CONTACT; +import static uk.gov.hmcts.reform.fpl.enums.ChildArrangementsOrderType.CHILD_LIVE; @Component @RequiredArgsConstructor(onConstructor_ = {@Autowired}) @@ -78,6 +79,10 @@ public DocmosisParameters generate(CaseData caseData) { .builder() .orderTitle(c43TitleGenerator.getOrderTitle(eventData)) .recitalsOrPreamble(getOrderRecitalsAndPreambles(eventData)) + .prohibitedStepsOrderDetails(getProhibitedStepsOrderDetails(eventData)) + .specificIssueOrderDetails(getSpecificIssueOrderDetails(eventData)) + .childArrangementsContactWithDetails(getChildArrangementsContactWithDetails(eventData)) + .childArrangementsLiveWithDetails(getChildArrangementsLiveWithDetails(eventData)) .orderByConsent(orderMessageGenerator.getOrderByConsentMessage(eventData)) .orderDetails(buildOrderDetails(eventData)) .furtherDirections(getOrderDirections(eventData)) @@ -98,24 +103,29 @@ public DocmosisTemplates template() { } private String buildOrderDetails(ManageOrdersEventData eventData) { - StringBuilder stringBuilder = new StringBuilder(); - - stringBuilder.append("The Court orders"); + StringBuilder stringBuilder = new StringBuilder("The Court orders,"); if (isChildArrangementOrderSelected(eventData)) { - stringBuilder.append("\n\nThe Child Arrangement Order is for the child to "); - stringBuilder.append(eventData.getManageOrdersChildArrangementsOrderTypes().stream() - .map(type -> { - switch (type) { - case CHILD_LIVE: - return "live with"; - case CHILD_CONTACT: - return "have contact with"; - default: return type.toString(); - } - }) - .collect(Collectors.joining(" and "))); - stringBuilder.append("."); + stringBuilder.append("\n\nThe Child Arrangement Order is for the:"); + if (eventData.getManageOrdersChildArrangementsOrderTypes().contains(CHILD_LIVE)) { + stringBuilder.append("\n\nChild to live with\n\n").append( + eventData.getManageOrdersChildArrangementsLiveWithDetails()); + } + + if (eventData.getManageOrdersChildArrangementsOrderTypes().contains(CHILD_CONTACT)) { + stringBuilder.append("\n\nChild to have contact with\n\n").append( + eventData.getManageOrdersChildArrangementsContactWithDetails()); + } + } + + if (isSpecificIssueOrderSelected(eventData)) { + stringBuilder.append("\n\nSpecific Issue\n\n").append( + eventData.getManageOrdersSpecificIssueOrderDetails()); + } + + if (isProhibitedStepsOrderSelected(eventData)) { + stringBuilder.append("\n\nProhibited Steps\n\n").append( + eventData.getManageOrdersProhibitedStepsOrderDetails()); } return stringBuilder.toString(); @@ -125,6 +135,22 @@ private String getOrderRecitalsAndPreambles(ManageOrdersEventData eventData) { return eventData.getManageOrdersRecitalsAndPreambles(); } + private String getProhibitedStepsOrderDetails(ManageOrdersEventData eventData) { + return eventData.getManageOrdersProhibitedStepsOrderDetails(); + } + + private String getSpecificIssueOrderDetails(ManageOrdersEventData eventData) { + return eventData.getManageOrdersSpecificIssueOrderDetails(); + } + + private String getChildArrangementsContactWithDetails(ManageOrdersEventData eventData) { + return eventData.getManageOrdersChildArrangementsContactWithDetails(); + } + + private String getChildArrangementsLiveWithDetails(ManageOrdersEventData eventData) { + return eventData.getManageOrdersChildArrangementsLiveWithDetails(); + } + private String getOrderDirections(ManageOrdersEventData eventData) { String directions = eventData.getManageOrdersDirections(); String furtherDirections = eventData.getManageOrdersFurtherDirections(); @@ -144,6 +170,18 @@ private Boolean isChildArrangementOrderSelected(ManageOrdersEventData eventData) return orders.contains(C43OrderType.CHILD_ARRANGEMENT_ORDER); } + private Boolean isSpecificIssueOrderSelected(ManageOrdersEventData eventData) { + List orders = eventData.getManageOrdersMultiSelectListForC43(); + + return orders.contains(C43OrderType.SPECIFIC_ISSUE_ORDER); + } + + private Boolean isProhibitedStepsOrderSelected(ManageOrdersEventData eventData) { + List orders = eventData.getManageOrdersMultiSelectListForC43(); + + return orders.contains(C43OrderType.PROHIBITED_STEPS_ORDER); + } + private void addChildArrangementOrderWarningMessage( C43ChildArrangementOrderDocmosisParameters.C43ChildArrangementOrderDocmosisParametersBuilder c43DocmosisParameters) { diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/history/SealedOrderHistoryService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/history/SealedOrderHistoryService.java index f80f56fb828..c13617ec2a5 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/history/SealedOrderHistoryService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/history/SealedOrderHistoryService.java @@ -89,6 +89,11 @@ public Map generate(CaseData caseData) { .childrenDescription(getChildrenForOrder(selectedChildren, caseData)) .specialGuardians(appointedGuardianFormatter.getGuardiansNamesForTab(caseData)) .othersNotified(othersNotifiedGenerator.getOthersNotified(selectedOthers)) + .childArrangementsContactWithDetails( + manageOrdersEventData.getManageOrdersChildArrangementsContactWithDetails()) + .childArrangementsLiveWithDetails(manageOrdersEventData.getManageOrdersChildArrangementsLiveWithDetails()) + .specificIssueOrderDetails(manageOrdersEventData.getManageOrdersSpecificIssueOrderDetails()) + .prohibitedStepsOrderDetails(manageOrdersEventData.getManageOrdersProhibitedStepsOrderDetails()) .document(order) .translationRequirements(languageRequirementGenerator.translationRequirements(caseData)) .unsealedDocumentCopy(plainWordOrder); diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGenerator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGenerator.java index 3f503ea259a..4ca78fc8bdc 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGenerator.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGenerator.java @@ -24,7 +24,7 @@ public byte[] generate(CaseData caseData) { byte[] bytes = documentDownloadService.downloadDocument(documentReference.getBinaryUrl()); byte[] convertedPdfBytes = documentConversionService.convertToPdf(bytes, documentReference.getFilename()); - return documentSealingService.sealDocument(convertedPdfBytes, caseData.getCourt(), SealType.BILINGUAL); + return documentSealingService.sealDocument(convertedPdfBytes, caseData.getCourt(), SealType.WELSH); } } diff --git a/service/src/main/resources/static_data/FL-PLW-familycourtseal-welshV2.png b/service/src/main/resources/static_data/FL-PLW-familycourtseal-welshV2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1ebe462d4107006df890e1503a470b9878a2d0 GIT binary patch literal 10145 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 literal 0 HcmV?d00001 diff --git a/service/src/main/resources/static_data/FL-PLW-familycourtsealV2.png b/service/src/main/resources/static_data/FL-PLW-familycourtsealV2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5a2780338814b9ef25d076b697d43a8c22c496 GIT binary patch literal 33938 zcmeGEi8~Z}|38k;Vhm#&`_7ClN_MhL%-EHLB*{)pQMPQ6##qK~NQX)#w1}ioNHt?? zIw_RMK9(#YLy0!NFX#TeZ#loe;CEg3xlY%)a?EReE|2Hq`FKs5y`2>gN&*FeKzMAd z%^e{Sn9JrL4jA}}CL3P{_z!1@_0ez$1iNSR4^-Rb`dJ7B1Fp z&CQMSqIGuimCIwvo7n-T1%boi05Jn}{cB@mgV>ctcEEF!oPv>jGD%L+I(HWsaOx+t zBVk~0FsC;gdIC+`po$Ye5D za6$r9^IJCAK?4T;zxn=iC3q5-R|tzq;7DAfCalshD?EN(0&*5HJZ$$xvGD2;e#a+e z>|S2M!F=BKGj{>{PeFQldHrYl`AZLYAR64w%SZLE#!-(f6Od(Z`VEE7LoyVrIbJWG z+4J(QT*FfOX#>c^tGx`0^vKmnelckZD%B4@b>vnSQePB}he~P+&yrzFenc zo3%|k37po}$~2I&#&M*+^Yw<7lUahMXDeaS={IJC3UT{xUm1&y`XhLvJxfwAi1v|SO*rWH5h?B)x5mQyNxx?H>nCty;0?e+ zmY0{!tAvt|q_4sM9vwYjYbk|j5!h~CA#gAhos4k#jS&CwWp#Cjiw*uR(z?#-(;cOu z5Wi#d3kx<{lT3OdBb(rh=EQutOl>P+dukgpqmRWx9p&>TQ@}m4YybBi|FHxOsHmEo zOMS=~8NpTk?LDy6@rj8gb@qfHktB5ute7fw)^L(;(|8Y)+@UYW*CAklXxTU^Sa2nsge=jw=RqAC82Y>mG(fzYndjwc)p?;`b zuc8Lq+;cdRH)yDy|9mH(<3a8f-=j>*1oQqZHojHcC-b&tl4`}v&Q93{Og8xj$9CW8 zf^&(ef=y$mg2dOcMm~S#n2Nl?-+GtgsXh(-ot1XbEj)`&G-F(x92pXlnv-+T+PXOF z3n+JsIsbcn^8*APnmq@+%Z30Gppt}&FgF~jPMjT(pVPZ1hGQ|aH#v{oU*T8K4ws7Y zXZOM-Dv(;vQ|?-tAO3w0d03dAB0l{YVx1idnTQk0?TFiVZ$)qT9Eb@U8}kJO;9wl^ z-57q(i}trKHp}3UvBBcgkjo)w%=K|3g}hjTrZyz+Z+_nOSD&NnmpyZzlb=K>>SwuB znG2A#B=X#KT0;2vA8c83G5hM`=nKOhe-OPYh$GL>n^bAJ6A0dZk?W~Q>S?*&(|gKR zNV~pHbzaY@3%^9AYPd>glj+>+8ykFEqhJvAcWEF9Rvyr1U;qx77g?z}FW6*x}+ z{$)D!eJZ%e`m?b=R~KIlaLL}|wW1dzKy*WHjZh4)zl(QER;g-^s$DNd(GJOvpU9^Q zC4vCQjal2+FxmQ53~X`qxw^74<{>1xBglJqv7mrJ?|n}biJBh7T;Kf{u1{5zmA$T> zYC9|~A|#Y)_ZqAhzJ0yL5HQ3GH(vPBkc7IVwnn_~nWu8nkgB>T^&)DyLN#F4E?E$N zWw&Of!7HVoBqgzp8;M7Ygl57dpo|iQ%Fu*5!&WEm*?rmVoyuY^tc{KH;3NMRit*&% zKUaO#bX#5XK94?^4euN9`s~tlej|Qk{r49-Bu8tFU$6B_oDBD!G0UBhN@-)p8@rBM zoV}5m2?=zfy#N2t)@hJRcQz2o;ui&>?Z_b#S!s0Ii>j17pBoaRWiyLlqbE#+ni|+Wm z{_Fdfv=aiGNzZ8eVM4D$dhhWU?wSqdxx|~-%zrQL#p2F-EjL|szc4n}{Uum$%N1#` zx-*}ReeUsUQt)ZEVw=0>*tTovUfTNapWRASDJiM0zmHeGQkyx10A_!k5pIQjMlyPM z;|4UxCt8>Eip%dv5+h~e(k^M5E1FlM!mM(C(VOcgIk#+qd(;N%qh=u6j0$=R>K`jR z=Y*be9XjgdQ zMX7s>13vIy`{jZ9TWMf0q{1r5uyaz0@RPNQ5wJpqhZfv z`wM1&1*Lz8Zm2=h<2M@6l|txjcQEJyNN+Y~;6Z@P`>q&IjQ^#K7m?9Vlj9myuDuZ% zimJD?SE=Oq`Sa)4u##Ws+Il+SFqbK$7aG!Wdi2N2oYj+*Qj#$fT;P^)xK-aEy`q*s3AxuYDt`E1ZQS%ktJiv4a5BvJmR%P~7*4Wn@7 zBcL_?62US22cm7}9%uw@^B7VLyInuKRJ^2z7)du#lie0FZVy6dg|B_+LgK3~|LK8x$n=^Ot@8 zDm>|CuzF@>^OU*Qd?W5edzH8_KAgE=VazufeEp%;w>+MJKK~%|! z)=zrTm$DB-5AQUcJSQ}n42dT-AlZ5BLu27n)lmAR&RN%0qyZg=rK1R%t?)rfw z9*FMHGyVwi2+nmEq(vc{U*N_DWxCuloKMho$7hr1(kX}kauvodykT07q(RFgK%(Ij zm)xzajL&x48OhV#&Zl8T=yp5q<)tCk{=tfl{+C@}g2W`q^}a=&YRb3NCbNXq@_Uk5 zpQK9oV~)WdIuu?M**qRfI@&|_!kGd=O-Ms-Lf{-MO!d$MwbmkCb4f&7kZ+cqcs6XA zwmq5|KKjafM?{Vyxv%{n^Hl9p1ZdjeTebQ>QNrRKMUE1_xcOFt9hQLyxPLpl1ipVz*(#=Ze>MIXp0D|sW`}CK#H|g3 z0mfoM)8l+c^P0NIYoo%8PdgUHN_!g};E;}Mvi!;DGfi?q9yj!nZXSqiz01$b48%Ne-ci`MG6suwvttp1wIEGb zEaKYOqx9>BNbFrHHr>vjN?yCX^I4f!7OVQ#JPweBHT&9#v&0C6k5{gay_!i=8R~wt zntMdFIWSa5a%`Pkj|`V*Yr5O=$?4ZCZ(xs}_V!E?PjOcGc&LFJk8qzH{nU>5-mG3> z>=aDAw$S2O3+}AOtTIMmyBBzqo;PGEWyDlUltW@xaM$1+Oo$_Y$zg}G-eksA6PSXMw1?0zs$HgzGnC&lQvn;bEz@wIAF2)2KvbmPq_E@l$n=?STMSQ*ii*5uz+ zzZuy~ZVQd!NmQb001vERn<54r4 zCz1;(9*%s)2}hF9d%T|hxLDYT?sR_w(wnS-G?#1Tvl|GSi8Eo?c|cjL{a^PNNpj|r zE08C?>Q})rQTODn+il7i6i;7|RYL%NK?i(bV5VCudOG(?|Dbx`2Or&gb#OQA$GQ;wQaJkD9t=1m!YlX*j8SuiW z*S@fax4pVklr86)9q_pAF&R~SaChp^0%pouh{4}c?>|dbw`(4)z<(Q_IUE@cS(kSl zgS@?ry>*h_^k5UIgk@NqKX0;}&GE1^S^OTC6*T5w+k!Dw)VoBK>_6(LN7toq)DqXm z54!!$jGav_zk>aeTKf1K6UoXa-JZ)VQeaVVVY^cUAyP3(koXDta!5l&@*`5zim8PGgp-#sw;^d&p~%`VQyYn&xcYVD$E-7>a#xMTe7w7E~qWcF2zj zPh02M4Uj<6MzXPCa+2BE*w91AQ>AKJbIh96hiG zNW%`K^X{MTsv_=KFLvM{IVJTBuj-+c*;pw;<*yu>X$i}vr&vKUZ8gI_LYd0jx1okt z<6wUzVlHVZUus-Bd)TU!#0|-@*Rs?fQ%TtQ#4WXw%j%eeyvWw10M01mjR(17&X16K zz!~CPbq!Bx_dtK;!yWe^kRJoulXs z2&B7-%H7Yk43y5kM%z=e-F(qBZIsTP)Ba-87-<>EwGXM4N2r7NTFDYAfuo>c*dArk z_|v@d_qp&g5)#}Nv>C`O3&J{NnKmmV*JsumCHHcs5xWQ3eT$uXgqo!$CvC8Ol_=Wb zE=+LIj*0v%5ZopjFlj*=hIm69q$xb-xd*|n2o%QVdTrkpN7XSHyk%DM(6ZSeF(>ZP z=uGn^e%O{pfvaJ|UxN{L5vf+`j5~<2f%5pjOq#4Ep6Z9pz$S&rE6Y?6h+C!+HYd}u zeOLX0V)1YIiGvhsr?d2_q%5{=wm~tWU3i>}-2ale(Omb=2QR#Fys6ad4x|H~3G&@@ zP*F14sNB|g0wLb%G0+M8M+=aU=}Mh%G0o*695df%xq3#3+kJCXlI5=EF+S?CA;!~P zsKFk_>iaAaky3~W{#twsD)o7x%mPtopL4X_6I25>6{mG@cpPKSeeF!Xup?o$B2tJl@|Wq(MI<~=fY0x!NLWSo&Ixq=GVI|RF)%oK8<3}H z)9TRd4R!lZ@>1@n$+|o5LCvtUhVo4f@G{bL-IH34HzUNhe_}WO+6G=`kRYR~7}0@j z$Vj^_Vry+JHoUP1bq4`T#e;LD4?>Tl{Fb`q8z{T}w0X)7()F*YdWh7DrTyIaD#Vfy zik0xLo9ruO&)dZdyE%+utMV3@Typt)(Mk%DxD8%Yu=pz@B=w3?zmw>r>emufCTCl^ z9l<9#y0Y7E&f4Ruh7#sex`%~Yw&4-*F&QC?k?HKF@$8-m6zhQsZoh5rlN+V)D5az@ zQk;lH`NCZ`4U7#})!>cX={Bnu1}U=J)+~vy%Az7oa<#R~1)~{J4P&k~c9UPnKuJ_~ z%g|Bul-%P%0FZMp7>3CU#4yjCx#L@yui>c=X-&8d%1s0*7Mg8p?6~ofi^tI}?#_Me?GP3qDZ^U- z9g9=!o>~9lfak=^Ow%fZ0hN-|bSBv{ypwT(%&57@co|=tyr*Xytfb&*jSHN{56!>H zg^fdd8__W`p=Wj;7osAmgN}gFpjIq^y^MBsk#PGD{JQzf4>Gy?n@eADw@>}?e}!j? z9$qHayegPVIg`4&S#`o;Fvg6roTvy0tc?9@mM^j`p^9FBRwC}I>4HdqHlQ1}k#LFn zhD^<}?TgaG8!L%@=AX<;RLB~{+X|x5m{LB9o1*-l_muNefbfIY1{P9(ruuR3H*No7 z^Qj#hWt;n0*yr`RQZL4KL)XB6reF&=SifxEwi70Y>^xKwhxnz2iMoK2*sO2MX@Gqa z5D)+bz&HT_I9ytuA1uyTpy7?#8?92&5Z-^{>VK$~%{Gw9HE)W82640ZBqS_s61N5s ze~>W!vc28X8o_yVUv}KM5Mi_7)7;z)sBcWvEcF$yk8Q}AGrw44@G==ij|poCpRBQ4 zJ&}J&rtWdg_zY;M(6SEM+tY^lGq^x!gx1xC&Ks7HkoYt=heb(C zOJlzy9x9yDq4Qa6H8B?Wc@L9@q|HaP5+ZUXZ6K$dQ+jgWf@o``ub=t(elr_juWWR$KR)x|5oTBR6qNUTezj)RkHg;@yq~DGIcRLHM$`TE3G7 z;AyRlpI@2(Ug$s)uTHkGVB6K)TvF2g7u#XTKs5X0SKZ0ok6P7vTI#OC4c>JVufJ6; zR@oM|6!53Vn!m^_|HXM%)i?3$0=1$A^uW4dm&2+<#!PW_OrjNarx%Do#Qj0kL+Wt^ zahnQ%>X9Vx*HNVvEh%!_29u#(Tw>PA3-?uHACq$jd*tPc%h{@XPZ0=omq2=Pv6s$8 zs%yCQ_h=GyDmo=G5kA!&$g-3HBQo7>Dv#!rsZA-1DQpi%GPKKc)ajjf^iw#mixL9e ze0LwUggVnYn(tOtl9j#yAFKS547y?XL$j0fTCV&8d>X6Ltj2wg(o;WGGzlL5cQCPhmSzdTiq}uBA?n4h-t^|)e84|7_ z>nJ~dNqxseubErSsoF#OXSO?r813>X^;o&nJg<+mQFG%DuR^5ZaY(~8GqqfGw|bH@ z|LG6){QXLkm&2^T7mh&s2GpYWQs&fltlbsQ6Djb1eVVbmr~Bs|MP%Da3ef6KXNe3G za21>yeWf{S%589Jh2inz!js=kYr7rl*P4^LE?zuby)O%VANP>-KXLpq*V;j~S-3YtR%k+$P2)rW11Vvtp_Ws)R&ocm;$?S-t%2A*juSkr+i`2Nf-bvutSJhV zIVUl$npS2!wwiuJL2WxnZrWK_d;Q(ovjfFi=t-kn*$Xy<3cvIl50^l?@V}`G7S!} z9TdrUhXTVQ5D2hQ1`lER^ghCyi!RgiR#)=OV1JemV61_Tq$9rhwR?f%<~;g&@@tRz zCs>E;ful!nR^K7Ev}X}Bj_U;txwtqbJ@VMB@KE?;)0y1L2J$j<--lh0!IuAO4N)Mp zv#H8q@&(KN9JLi}FP~hA67oVYR>aF5B~~;a9+cJ(L5CH05G|~CL&`Y-OAO*F(`J}P zBQ-a{uQym-BekAYm{k_5-EJ%p65kP@*Fj)gPD{-*S%Nw+*58#6$~pVl$&#POUi_Wu zoFoLB)KzubBUQ6EeaKpR*v({Zn_nP}Xcx;FPYz{aXt>*`@Zer$3@85NL(tE>abh3v zvkDH)9G5Hlp>M&`0QOoaZtK|7D~_tn>T}T0|My6S9ps2vJz;2a)R%0SAMpK8lk;Sy zH6|Tinc-u}H+)MDe`P}ijV^ApS#o)-;qcq8_TL>6q!CHBC?TScZ6UjH$FkZL2RvHe z;7M^-Ox_tDLBD4qI)yd};;s@NZf;`1*#}cru2OOOC?fRFsDad_)!DMwAkt-vOwK=h z{``98vk6f4=H^sONKfBDk@%v0EDGUer6ea(lci8hj;ak4^lQxh#V7eMcPna}@&0KG zNL~E36Qn1C&$tTL+yz--2~C!ozuMEf1%*`DHoI>{60HO3ty1#Rh*tPyq7vgy5+K3& zPHgZ$??D&`+=7}r!C52`CdR5kdTnTx+YbYc6O{8VP0APWg4oxNliD{ep;zgfQV%s(w#Q$_lQSguoHC6hKfiwcS%Ps?I>YP*7G?Ez3moOtQI*FGpu*>Ha=;cr=J#RXfq*1_nbrC3%`sl^(v;dWr!Yjdf$~|_JEv- z^Ah8IE43)meg+$Y8I$F~N)6O8= zxNsFam6d6+e}&K;H17OYC<8bjqzY}IBMdWUr$`cfX>}0D3<{NI@$7;iNRpJYA^0P zg#ToG)>fzS204=C)k{+UsjxgBRC&ZWt4dn>50BV9KWV)2W3X7hH@JFwSz5!XvtKVkv;MKUY>(3Vq88A@MSZ zB}vp$z(}{M2RYfM6}?;ZiN)R*o<224_p-K-!S1fe^XmCYT^ zJ5}Y<18umbluXx(Mw7Wj^YZep7P(V92il7c73qfxIA4&wayiMu{L)bu0NOOv>9Po7 zF-Rcu-xt9d3HF~$f~;LW1+1kW)1)S~mlSLN$IgNMiPDDj6XIll&!qlc3D$D5d{dBTGw2n==7)WcglV zepz5S2u;3TDfPl{hA&yUdvSzkZfKa&fyYY z=D1Hz{dz)$6}(V#A$Rx-Ypex?yDX&(2{6W$nX#i{*UCW<(P$Jn#rnfEzz+CH0b-kS zFEztx7AA@CO}G@$D%GLyl=vMqeFYC47e0&&2xw^|h#t6e=VA3jf>7W4_s#ET=H>`u zg%vhqa*S|FL|q*fUVqf3-^s~o>_v$0$@6PW?62C>)kf~-=547B^FBgdFq*b1j!RNZ zj7EvGyv>Q^+lo}1i=eqq)3v$j7T-!qmdvph%FCB3tbLz>_KS|a;nG)4o48Y6F7D_c zjf)O>JNfd*j~}c?w4?hNGDJ5frs3PS$O}pbQ_8ZCe6k|K1^6;*>?Ot{Bqga?@GVGU zt=!8SIdw3+}D++o)|^cE7zwVZ%3edsv_QfYV&+ zU3q=)Kql-mtn!km@d4{!cA48`67yFd@W8R$7AkLB*oWAbl&Ycqvu|axvOWP zydn_K;H)@j^r!HBNZs8(71kS5+n16exAOdE zoaZ7geMS6ihmn8@SJVRGR` z!Ko_l+E0Q${)fVA9;B70r=JW9L-qc!#p7wCo$Bi9qI2x#I_I;%8B7*s>`2TZCm^=$ z9!!qFpO$R4va9~a51JSB5{rz?1Gd1Cfy-ddRn|v;RooFRas&U@b%hRg`6$_q|DAH-ju=(;JV2fBH-7+FDvf2%^Woj4yHU?RRRln zII5|y&-T!af9?dNlw?Zk-!L1I(j8Ed;@(0Bz!8NYbNj^C8cG?fJvp$G(Aoq1tQC1c zpM>yt*cfpDi1@oT?Etw@4L%M)cmPHSAQa)U{CS+7qUe zyJj_`p2-IbHi4*_TN4FRC(Xp0Q~YAvCnH8=eDneC&=C-2v5yt9?Zh1sG^FX+Yqz!N z*_rONKM(VtiKkKZzRd9X(p|^zz`D-*Qx9u^(Uetp0w(nuNb&wLNllGxfuhvHCm~Bc z0WMhX#?6)8B>~!dXF1FW4BX0oeNm^oSe*HjEM9##=ERjJmo>)aRlnQKw({ z4nkvq7#`$r+%a~|Ju4FiZT>=NIP<8OLC_evw7`!?e_Q^QVR~vAo|RSq2nn=+J;#Xh zVjiyw3yb{KCOy9{ z>*`)uP>><=2q@EaG&S4KuD`5vpQARO~D=815T9cI3!l-(W^$ zlFG6j`#HG4*(3&SWaRYXwc#&QZ|Jtxpx$+KINUP70GgEqmwWdYDc#}Hh%y-N=oQ8k zL%CRb>i|I5iH78Ot<@UDeeambb9hJxF{Y@<9rHv2Q(+1qW3q*LR^|bXJ#TzH-arU| zGtF23WM+g(DLk%Dyl}amw;n6g1e7K5KD-jmI!zDCZH^wba52|WQ4t^i4U&{8Ec}eL zN(^K~rL|*%v47HXTW=yO5z6keYDX*R#K^wV0sRnSg@s1W83L%y{^H0;1^RprSBumj z)wsdLhYwL<(q@*!Hf8&(s}kFW%2K(zPTK!Uw}LuDOw{99A*frYFSt9kwqcYuiF z#e$sJ$uSZH-f_q$X*N2haEC07Thz9AZbHfk818?l)V4Pe%WONJ_PY%VNW%RSsThr#^i;+^>DRTjZT7P$Ezh+^jP1 zc3&$ymsJW;^tZAiAZ53WE{5?m9>dydu@iFQHrppA08}Dk)?k25;nlIXzZ^1)u!#mU=KMFz6&% zUvk0O!_Vri_eG_t#-o*1R5Kc=x^g?Om&OIY;D8ohl89%Yolz@K_(Sgqsx?DWU5-AA zMFRJYjq>4@!MV7(k;|n5JvEHgPA?4Tew89yezti3zV}(o?@yhJp1~f^O+9F2E&a4p ze`Pm%eI7C(PCxLzs-8p|9~YSXGM$%q$olC@h!_dMB|`m_*1bMjydBwy(ZUf^^+SNf zRM2MbIQM^A0R3o=-){DmQPU!#1zx>mM(Hg$Oz-qS4@j^L(HGx90^JLXipaAl+uJ@V z8!UE^Nvv&c72anQ_KRQpXjRevAN=$n)31|nr$(b%%B|u%^w?#=S{>|{3EJis0+?yV=r7bf-{Wc?O&>md(4TBcHU}@FC`}`d zo}RJ|g5gW!ZE`&-EzreSf|_r$)bqBptAbZ6E&&TF&3d~-@iykjho?{XGC;*1cA|FL zF9a67E>{m_NOSB24nTo!h07WLqtMrO@z6J%FJAJllA9jEs!%-iyiuR~t!s zHL~{!@+Cc@a1Vkv4*-<8W>7bl>@G@Rt7~fd1qyBp^R^;)H-Ln*4%kvcBi2B8E)yWAHQ(&aCb1=s4%tiCYJV`=vnbfb1++21$}}k!KRT zVu;{}fwFn^#+w_bhiW;$c*I(Vvt9GSURj!5aNY^P4zIqUp`M=J=?~S=z>T2s)-=Yr zU%-Rz_m+t~Tkns6tIj~;)TC=(kYq6joA>DH@lI4M&?yW+H}uzs3NG7@nPu8#f@GR& z^%$V`p7-w^A517?XgN|>s5OSbq&lw|>u*B_Apdtb?OYrnJGu>-ND<#Fe=Z~`&Jj|6afdY6a)3ZgNQ3@;fWvMA^@@w zpZC%wcuaAKfKjlYYx<~9GE!)s6- zxgaswUmgRZH)R5ID1{*dyDom9M_|JuLxlc1sV6z=^k|7+n#$A^&oW;2(=CJ}bl_7z z;J1SYYE^iBtuRVmeSP;UDo&j|nes|VxM1!3cS5tdhe!O#kO3=(PSAaAqgQBh-Z+AxdQ=(dx&~e8h8p2a1Y?{WIzxp6OV}F-(=jkD9 zCkqY(bi_pafe`iLWE(fPA`mVn*F6AW91C^*8}wYj14jI>utKC4MAio|ogpD1B&R!@ zg1fC^1)wo&(#l$l+%yNEhJmJQ9kg=x=;#15Lwi=Tibe)c zK!+pvLw&Ak0H5k+{~>0#1$fc`CiHETo|D4%z6#jvqiiFE1*oq4dOA8l*=7Gws)t7N zn&~A2?!jCw1HeShzURgFa-VozlYvtJ2orbQ%Hs)X*l3~Tv`QX5ax7zh zIT1q&gS`QDez&D(Mn-!1_&Su$TrCNl>IXh{fU?YnU&*7lOd2S61W1{UK+$$R(+<07 z9EbD^wNDY{4!lmi?1;xh?#(Mn;y*vzVY4ciS#uW)2`@EtCIwEIsQE5IP7cchaUdxY z1_>i3n$F5M?&eEbgHeI{gG?x(QbRz648*N`6Q`cE$ZVTZ2Jp@#9h0=q*p_0E)<%D} zqik=bh0tiyP~Fd|m0fa=I|bp^Ps4)8O4{m0GEAKdnB9TF!8xx!TC^#0IT+E|pu*~0 znHd?eUw*tFs0$pQ7-wT+>oQD+{hBEcq!x);$$)3LP`dP2s<3A1Y6@?}mO2D%cqcGQ z%riqFNaBsp9~%wx+pdE&6dL+~AqNVa7%(KLz!;KFPPB8PzuLGI)PJ(&4EZcReckee zTewf+$mBig)_g0#9lH9C9a zGYhhfkrAMY{=RVTlR%SU>;0hUB4gAw-@%E+Y0$5el@+DLy<+<%M&$Sj9ufQXh=WJA z^_RJ1jq^0FvLnIfU9LinWu;5(2$3fi`uZa9`C{Nz5x=P zV^1PqgA_U~w@^%hvp%o*2n!!(>2ee>G)H-VKKn@#i`Ci8g&{w97Hm)Yp>qZblHnbJ z!DCa*>tTtuege69!ZMk3Gf>&?+<6z2i-m_Cfm05je$)RXV3k^h7>nv^ftEGI zfOk$E_Y#C2sgIrTJrfrJ`SaB`1&*1DyX76H*hWvJFjq#)Y%a*+;${}7Z{NRfmEur; z7dg3)2#^$*;qRSysglJYqiYttS2+g$wSFyl_hse zO44x(8Ap@NcFR?iyzT4D$jOKWkFLS!W4dy6&hL2zHv4bURy+?y*o~pNR4V?LciE;0 zbt{AoTj^6Fb2kQo@&L_0{#eA@-ww18I`ov5*>8D6fQ+CpKR>fU8?>nkgF43s_Hp#b zuY;xsAR#Irf^=c7hYSnbv;3Ep4x(Ofv9$c3W~P=;_R|#Q#Gr?*AEozwoAo_yDynRV3&2_v9n3rUzJ^Heu01$19)VxGg?89MxX>wr|4>?dw|(rO)#8Z-_9vy-6omRdQFgJKbm65A$jsC;5NL z57U)D_WR{CQ`jd5S!Tpf&B9IC2liE^=Z!~MwH&nQ1pnD`e}Soy#KK=Edky67&1$H_K!sRZMcK!&lJ~90$Jc*T_%L|m;No5&A#}_?zs7`GHf4hSuP`qMYY4a8%NCa? z5ZtpT(Mvv#VSj^CdrXei1)(VXJtE*Xhz7C%P;l%myFaZc0DvHXq1UY2SaEyG?wd&d zwN_U{w1g9ejS^poVr#$2SE&0oks428#q^2Vsc{g68Bf%C zWyop^bld>X9Q(!GLtKu$DKlqF#*o|817b8j>lW3^Y4eRsU%v1qhMU{KiUZ$0xN4U2 zNMIS%7pxJ!WoMJx!KiW$=6=Ja9yYM)h={sPN^K|LM6NY9y87sSe>q`{&Nd~vO`jUz z;KP5NQ>s>KXdD>mc17=^b-ZDznw<4orEPvc$N%&5%`$~Fjgs5d3@)0#9%BS}`0(rS zfrg!oV_ei1@RvsFJmSiXS1(?)egFCWMlvq$K5UA!hk8PrapOHRP&4G(7XTZ$40NRC zl9Zb+(<_4kxB$gpd2EkvSiP`tsar)-|BddxzT4x3=@xEU%@<oZHYdzJH9Rm$bh%no>=fH%3jOxJWqW|qE1L)P+7<=bKXDrZ4h0{uoV&C~Iu zz6_ynm#FGLEuMLz!wmRuon_S76CLZ7RMd;p&FmIi57TK@_TB6Xu@36I3c|EbN(=X9 z$3wB@+gfQ1U52gtdXFKBDJ~w95`X4<2L`$=wR7Q5pUtVdsU%Pwfx>=qQBt~9sHneu zra-nm<{In9e)4UL!NI}O_nNG~#TNcj=19%SXgT|qr|L@lgY@Z-AAJ@k=`ZZMQ*6K~ zgj|*3jnXD2iM;R-T8p{uB3%>GEhorYx=R$sRt=U~LbYg(z9)sa|6r_!?M-NqnD4qn zid3^*)`l-bT46qqB3k%=aR}EAFEz`RFm6|PUAxI?1)42H>~9cMYvGY6YhZ}MK-9Q9 z*8rlG<+=B#Y!CRC25mrrve}8q8?%OgFROe*iVE%eoQW89PMC3eeborr$C`b?H=`N0 zG_DvM8(aDNMt!|Y<bSLl_Ul{@bNg!Ejz1t;?(Zm z5tcFu9&Oofh%z*^`Zq6#3E*Bchm})aW%{8hzW%(sNPL%m{QQpXlPx^PA98VCwA!ut z#q-G5Cv^ynY)c?ZsZ3!$_lbI2X5-Qp`kLk~eYUNxPWGKAB{~@YLt7d@batm22rhoKz zA3FZ7?4`>|6}e4$c6$1Lj=QH$o>p3~im@dH%m}~pq?QfK&c)A;feAdF`=(RWJ3 z1*~okOSFj5fR?qAr*pn^nEq!Y{hvn0GrGuJ)>W4y$1;Hc_R$*R)DiYTL9c zt|`1HgV)t-!KYf!uVAF`cO55JZibMixH^v4mO^-F_m63T()bna%JbIIM|wcewI$sF z*)y6Hae_OJK;vZ zO75lvzQ8(DGgnLEejPc88T>icf~+*cXm;+p-K(Mp4zNaJS;@5Hqc)JJZ80UlRAeyf zS@a?&S@uzw6%>GGM<9O2X$F9LrfVZ75&$VJrIOR|gD4TnD}@5# zSFz3uZ`9O4AY;4D4c0)+oKS%JX`FcLN8VKp>YpEHV>JT_9h`ROG%)S*^5Qf>&UH{- zu%ot0uYWd+ONPjDBnQ{ZUNyxC6lZ0dR$biDsm#Fa%vDxaj@}f)`WAxg7zKsxwXE-c z#XyVfCNd_=s~D{W$)&yQN4!?9JhG7k(}93)U~rMuvn%mu_-Ujqe#Xb#qX4|6Lvf%` zrmm?V&r^?n1)x_TY*IrT zxseo>G4=YY*(b-&l5wAo?kUjodUa^!VTLy+v*9P88K~={Nt}WxE-tI^)jxwU*r5<0 zx?!?VGZ_oc)bpQ>o_AukS_0k|2o+08N?e`X;sC=}yZ#ZBPI(s&0SFheTSwYmeIGXsrwBK=lB1?8 z@$bgGv3zQT9Gy;w#zdYIVnSOhC#AUYo}TAr+Qox`RdSM4)J#%?q!HyQwu}x`L&+r@TUz!o6o3DCUhI}$&ED8Sa zLEusMpQRbFP*q?gGUEc^m8(_XD>NSyYhz$fEf@uzsdcU^;7hRp1j;)9F%=Z@;AVTP z+|7Q4fd*Lu=m?>E1Y|{{0I801w`F|X2e|Y0i1!-er1d~IiZUtSSml1p@ye; zrZK-Dt2K=0akKa=qNy}$0Ge`cO=&ffd1z4q$s-Lykr_QJB=g4`Iu44=-l zSP1xa;C#DNcm4VXY8{AiF;=%~jY&l2-#6)pD8}56B3-;k>M-+4kaCL4t=_V)vWFR# zuFdS3kbE%^0#VOm$S^}PEd`~J=l7krsrkH`XzG!W7-utO#-utUh%tb4teH?tYraJy z@@5rfo$Zm68N_FvKqh=ltGmT*IMThJ&2vU(aHb()|yd_1VaWU?B161ggU|r{Z z2fG`Dt<%4B)CIU-Kr!Qu1(sdTs->08iIoo7nGlGKg&k{2uP4GrZ53ourcCJ95@cp(a!hF%s&d8p2FwAT-)6eNVL6mM(TP+Gtaf&5>to*~P8IjM z!KzJm7FnW_-~%D*g2134d#hg{sJ!@LEH7%CIcF5Lkcms9_Pp%LOH|uK08=h1Z)Ml1 ziu63v4M%{cWb#2zu@;l?-N~v*^(lR zPhS-|$Dbb#e!sL&23)}VXVg_xcosqKaRCvS#U#g791Zr4v9> zv5p@SEi(7QD&Mi=r>0(?kxKbnzUvG4tCxAxb0~CI*8v;x)GC*lR@;Yo6&Ge$$s)!( zpSU0Jdhpfx>nR0skzVm(&f+Wvi3HY++3E-fx|R7pGBL7a*RU5AzUu$ zHwIY)b@rXFIzN*x)p{gLNGZP`&m)7Pu7!fw^#dM?$8~y)$z+9@ojv!CUxW%~j%iRU z=DtJVFm0>9X?uXDifn+AV96vFLti51;ihIley!b!WA_`22_=w>f6!X5_w3dcAP|Et zq$Yd_$D@kZQ|p8s3`suKD)TwrleIY$D|`McF}(3~LH<51Z|NxqGnYHq=`{H(E6*BS&K}*=!XS1|{sjnOqQC8@fwFfDyjW2JO|9 ziIChzy$0)paA~2sp|+@Py?@l2rv`+u-8k5lzUI-X%1YwK8!D1_{U#@mJ+$G?WF~Iz zfh4JCs&8<|poH%uT=q9O5W-dMK7Q=OhgYwhFDPGZsT+Rp)ZV>&*#N9@nQ}}{-Piy+ zrcZb{wLTUdi3L@4sAYrw$1^Ck2#0-5DAZG2vq-U`4Vyqom=%;|JG9Rm(Jhzg)?vqf?9%hTocXCP|1Ko1e$#ri>1)LJ+R9UBEn-8cnD;G zuMSQtwQd?{hsN!&Ui;#un^nfc_DVYYr zmJ|~LDDlzJ5ilIGh9;(pjo&_i?-V)vkyOFG1M|UwI>XEx<<4NgNFN0~_E0=8?(NN) zHO@a((`BL#AhT{u{2@T`5DruxD_CSGW=%YKQuL|H_Y6I=uVTTf6KdL0ETF z((CkNKv8_n%VjujKW%M?J=?H5?EDY}%SG?}vK3`J3ZZZ7Mvrl{vPt_Ax)twY25IZf z`kd=Vgs<&-fBrcogO`^

8p&kE!zBVCTQxP%}bC1Oo{l0|(&JCOv|l9dnJcNW*-E z5v;#A3W8J+N`$5bN-2{U%t%H%OY zGbb|tuE-1<+>^R|AZpzK!>YB<{ksAmG@L#yx)W%J01Bb`fZaGhplOxeUsy`3aMMa2m5nj~u;Wy^WPH@)+z&TVszK#80q1BIxUJhvNXxYXddTC@yZIp46xWOQ!LmT*p;?4;jE)gSc)Jmq3EtGEE!~86{wz`W}S3l zx;-fo01wx9;-qgv!rgZJEk!S8>Jg1v0~G_sdp?bg#E`}U1r;fqpas)B&Z~OhiD%XA zlmKDWP$>Z~Da%g1s~bw%I;k@%Mq{g#cj0kmW|A7@Z?S=|FQ6mqs;iI%=!Z}^hAMk# z6^BTW_v=|wL*06rqLg7IYnf#$(|$_NdvEwpLqh|{)E{9c8t@z_gB7Y>kJkGSaLsh2 zYzFgaK$aof^*v@tYi003kmNoK^#o+(c3zgIiFl6ZND5&4$gfO;S()!uoJlMG)$F(p zS&7TsjHM)!b~S)tAaZS#)&COrT! zrV+6FQNnhw8tPzMQK0Rxtlr3mY8Vo8OGUs>$DE-+dTipANu(QFuc2$&nDfY*D#3Vvh-PM$fVa=Qo;=x{Kylh=WG-MxD^=>zlx2M}+X0rj?m1jYOL z`Q_L_v_Z1r43}$JVgdPNNSA$qbi3a7VU6L;E(bP$02TgmBVe<#BW-L6v11p-9K_0W zNr1A;Od=rLHkxm)CbcKvy;!u2qU$S{EJ0bg`k9b*0w9CTs+P(y;>}Zla)gi!|5x?- z{sRK6BWYgv7zTq3qo8qY5ftjboRxdsTwQrnZvxJNXgP$5^w^s4t=NfZWEiyoU|@;x zFNPjK`+(yD|HiKA$aZFc$7L{SK_Pa(NRobJjLYZQ!KVKe4)sKm>AI5JIq)NICEKD0 zdJ$#59Jbk=`G-H}Xob+h2->BQ%l49w80sbRUEvo}tnlK15I-Gaey6mgpAJGp>tt0G z>6wRLahk=ey!ZnwmH@Jh9rN#tpY{dBKdO=m)1z0J?i&kIznF)PK+m4! zZ2j26X4pc{WAae|-uzV9^EtnQW3=eIbcx8S++(cdLxG*KwYT@Smq0uMjL&J)rcoER z6_|NK6*?VLuCi>twUr}W|fJtvH$(E zhR)xIM=89`*o~%zG#YAKMvcr<=^$8nc=0Ti*d>nv_2PnQtRq3wLCOnbucWLtZ^k_Y zgNWB603c0UHMZBQ8xi3L;41vj+o14p~@O8qW1Iu5? zvk6Uw4drMUo0xRCY+rQ3qrI*UFW4Lt6M8;EDRYjSwOi=-gB>yKsg^a9R?!83Rm6{x zpxIWuMcYcHJu^7LW@AKbeH?+1Eh@1Kl_qmh3oWS0doF_|Vpu4dLa|E<1{Sj2|1Jk` zj?ocLQS|uP^+-ULi&O!kmyjuua)IPwqf(^gRXmM+y*5cNm&QCc%yCc}JZQdt69X`w z8l)Qxhi?`-*2GLxR|b}rUj@VWHVFc41-P~fui?%tWQYTkeG!A8 zlaTYBZE{lWmhRdGV(~025gVMtg7O2#3CqQrfT;?x_B6*}jV)4}=hacZDn?VOBcET? zmY+=Ys@HDnKBTR7YIEk~!mu;??)FQAX3Z@Ki^t7fqlU4kg$3_SW8ACstq1I@Z&_t+ zEQP8U8$?R+wYIa<_6P!5!DpZjV9;C>?W1#9Yc-@&0${+@zI~wuptC})WfB>g2ESml zINa%MuVVXY*4Bm;ijldLDDZ8;SW2Wh0A~&I1G(=kxZyPl)t?5TFSBmWUiY6}uSPR` z(?JiwiqMkAp8w=Asd_FSEC*_VL0<7$SG6oN=7~${MxQcgp7AfX_r0-mqh79}9Crmn zn{YVz4#LBCcz1R~YJWIohwy+k2pA0_^H>`kNAV@<)=dF-sN8TXnIaEh<2~37f35xR zI0SFb;xHeN&6|KB%{3VlUx5j3xpD_ef93UXWIBPzfa;31y^iXU0rik?ix>X;vuKl7 zmrb3hyxLM8z-ZJ5yqg# zWZMw+e1-iy7z6ix44fV*%pkv_(nKj^g1BhJq+AIa8KfKvc1r+GVeFIW8DLTAvE@J? z0&r?HkAw{f=Fvxm6s-Ph`$7<_2$)h9%N*xMo9ZM19LuS1P+(;Ez{KJqci>cb3jRr< z;Bf$?IfLAu;RH@Gk9@`ut!1tl9)Z;&?m}xxtb$VnFfU!ByQAusa2;l#)YBebRw;ZRW=6a%VLm9>yg|AMt>xeNB>#=hW`f zd!R`TJHeXOJqyvRQ+|hW0Gw(7Rsr=sKfL)McPU_7pT=T;F)lCO0i}zBfrH#jVr#03 z+=k-TGN6Xa{oJ7K&ycn8G%n>bCyb#S@6jxuP;WUKDWY*C55&rI_%T@k8ksv|fgu2L zN2%9>MaplpOnGdM0~jogM?Jb(os+ZQ9Bz& z!F7Nvx=NSWRwIb&G*WU@kmt51nB8(pNDC>NK0r`7faM_qgu;gu6=i$UTkjMrc}EiFqW%ebssq z;o;0?ZL3N82+w<#{1=yFZ4rTYE6lq;=ZFF;*Ai_T@l_Say!%!1P1np;iyF6Qnz-&) zS{wct0Qv|cQwl0j0H24^w_xS<2@D4B zm}~uVO2h|C__1LU2c{5M3x6#XwUU+a^6;E|n!;U9(Ed^%h<=y(y|zAS!mL+slT0dx zyA=`&8X#^+ljmqY4}Vubqh{ViSkk(tDPC%iL~n!KGEmWU^Cq@YSebSfmUDy%xJ z4V^S)tN*M@oF}H#i)Kxpg2G+TiLndLp*s$?Iqpbs19dZH+?(i@4j+KbNeSoo z?W@Lz+X3wQ9Y%DkSM?|aoa2qhHVWXQyFq-QY_n{XNI$F;Kg*(4Xj-m4SAqSR82wH` zM`_hL$Fe}%5T*aVRpg{Hyy^aQGGk!`Ke}ENxHJ@dSjb!cwWEl2>(b7MYBdNTjJu_S zgw?EQq$zvGmAfPO&6y1Jg;(Gf^ph^FTS?znKC;NQ!kyR~C$O@IgDtUFx zPM=5BP&#W#CK1Gn(_Lxa3=)}YuG5JrU*7*FHf;0#p#!^CSIqkT>S)$m?@i^u9kgo* zzBa38@@w;mXiaTD-|`qt#T;YywS@`p`aa$<*)2{NRX&|N#WYl_)y=DAl{QJIf(R_#mcnkT|EvVz-cFy-Vao^%yj zpJyn=mwrxRrMR)N@%cj#{d}=BC;Y0=OB*xSz;l?29&!!cb+t03{L-32j^jnUtfJRljfQ?D%}3%VaCGlj%*EoHp3P>q zc)vQc$;NMal0B~GX+P)S{%fNrJa&H4G0z0e`%R(q*#rp5qSRRP6wQY>`AaRmukK+l zdI*lcgs?j!BLjSr+FJLLpU5#UzTj<9BNMojfE`E6O%ksY)I3Jtv@?p{+S#`YE^)H8 zk`0G|b%$dwGHni?8sR@e#eTBs9Ps4BfT)V0egPCV)u=4YKozm<;D_KZdjG9qz$c1# zhK?LE)cN-bFJ{UGhL$Wo^Tja;QPY_QL} z)SCV=r;tBK$a@YUVRH@pJ}Wm&C|C)H6V_}&*kTU%TIuF4$9;LhMJBRb?L1)H65y60 z!Q{I`@83g26Ynr7N<3(k}6@f3z?YqhF^#On%N&=n4#F zIhmz?v?}?+eLwF6P)0WFjVMDWNE}w=oOPgLL2GH3gRB9gP4PM2kQr0NTqdapet%>6 z+Wk1ZX#3saMD`-znuc|KaAQuEi=@_BA tKmu&e#q<}GW&;g{{MO|@KDob@;1HeMF!&Xxqgd$E4;&5{{si5)};Ud literal 0 HcmV?d00001 diff --git a/service/src/main/resources/static_data/familycourtseal-bilingual.png b/service/src/main/resources/static_data/familycourtseal-bilingual.png deleted file mode 100644 index cf8f83852394f2ba3fc420f60fd5082c45720fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29035 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

)jV7uD(GQwHgHey|= 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 orderWithExpectedMap() { Map childArrangementSpecificOrder = new HashMap<>(allQuestions); childArrangementSpecificOrder.put("approvalDate", "YES"); - childArrangementSpecificOrder.put("furtherDirections", "YES"); + childArrangementSpecificOrder.put("furtherDirections", "NO"); childArrangementSpecificOrder.put("orderDetails", "YES"); childArrangementSpecificOrder.put("whichChildren", "YES"); childArrangementSpecificOrder.put("childArrangementSpecificIssueProhibitedSteps", "YES"); diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGeneratorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGeneratorTest.java index 6b42f64922c..426b8f7db5e 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGeneratorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGeneratorTest.java @@ -23,6 +23,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.fpl.enums.C43OrderType.PROHIBITED_STEPS_ORDER; +import static uk.gov.hmcts.reform.fpl.enums.C43OrderType.SPECIFIC_ISSUE_ORDER; import static uk.gov.hmcts.reform.fpl.service.orders.generator.C43ChildArrangementOrderDocumentParameterGenerator.CONDITIONS_MESSAGE; import static uk.gov.hmcts.reform.fpl.service.orders.generator.C43ChildArrangementOrderDocumentParameterGenerator.NOTICE_MESSAGE; import static uk.gov.hmcts.reform.fpl.service.orders.generator.C43ChildArrangementOrderDocumentParameterGenerator.WARNING_MESSAGE; @@ -35,15 +37,16 @@ public class C43ChildArrangementOrderDocumentParameterGeneratorTest { private static final String LA_NAME = "Local Authority Name"; private static final String CONSENT = "By consent"; private static final String ORDER_HEADER = "Warning \n"; + private static final String PROHIBITED_STEPS_DETAIL = "Prohibited steps order detail"; + private static final String SPECIFIC_ISSUE_DETAIL = "Specific issue order detail"; + private static final String CONTACT_WITH_DETAIL = "Contact with order detail"; + private static final String LIVE_WITH_DETAIL = "Live with order detail"; private static final String RECITALS_AND_PREAMBLES = "Recitals and Preambles"; private static final String DIRECTIONS = "Directions"; private static final String FURTHER_DIRECTIONS = "Further directions"; private static final String ORDER_TITLE = "Title"; - private static final String CHILD_LIVE_TEXT = "The Child Arrangement Order is for the child to live with."; - private static final String CHILD_CONTACT_TEXT = - "The Child Arrangement Order is for the child to have contact with."; - private static final String BOTH_ARRANGEMENT_TEXT = - "The Child Arrangement Order is for the child to live with and have contact with."; + private static final String CHILD_LIVE_TEXT = "Child to live with"; + private static final String CHILD_CONTACT_TEXT = "Child to have contact with"; private static final ChildArrangementsOrderType CHILD_LIVE = ChildArrangementsOrderType.CHILD_LIVE; private static final ChildArrangementsOrderType CHILD_CONTACT = ChildArrangementsOrderType.CHILD_CONTACT; @@ -73,7 +76,7 @@ void accept() { @Test void shouldShowWarningWhenChildArrangementOrder() { List c43OrderTypes = List.of(C43OrderType.CHILD_ARRANGEMENT_ORDER, - C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); + SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); CaseData caseData = buildCaseData(c43OrderTypes, List.of(CHILD_LIVE)); @@ -92,9 +95,9 @@ void shouldShowWarningWhenChildArrangementOrder() { @Test void shouldNotShowWarningWhenNoChildArrangementOrder() { List c43OrderTypes = List.of( - C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); + SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); - CaseData caseData = buildCaseData(c43OrderTypes, null); + CaseData caseData = buildCaseData(c43OrderTypes, List.of()); when(laNameLookup.getLocalAuthorityName(LA_CODE)).thenReturn(LA_NAME); when(orderMessageGenerator.getOrderByConsentMessage(any())).thenReturn(CONSENT); @@ -108,7 +111,7 @@ void shouldNotShowWarningWhenNoChildArrangementOrder() { @Test void shouldContainCorrectTextWhenChildArrangementOrderTypeIsLiveWith() { List c43OrderTypes = List.of(C43OrderType.CHILD_ARRANGEMENT_ORDER, - C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); + SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); CaseData caseData = buildCaseData(c43OrderTypes, List.of(CHILD_LIVE)); @@ -124,7 +127,7 @@ void shouldContainCorrectTextWhenChildArrangementOrderTypeIsLiveWith() { @Test void shouldContainCorrectTextWhenChildArrangementOrderTypeIsContactWith() { List c43OrderTypes = List.of(C43OrderType.CHILD_ARRANGEMENT_ORDER, - C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); + SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); CaseData caseData = buildCaseData(c43OrderTypes, List.of(CHILD_CONTACT)); @@ -140,7 +143,7 @@ void shouldContainCorrectTextWhenChildArrangementOrderTypeIsContactWith() { @Test void shouldContainCorrectTextWhenBothArrangementOrderTypeSelected() { List c43OrderTypes = List.of(C43OrderType.CHILD_ARRANGEMENT_ORDER, - C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); + SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); CaseData caseData = buildCaseData(c43OrderTypes, List.of(CHILD_LIVE, CHILD_CONTACT)); @@ -150,7 +153,8 @@ void shouldContainCorrectTextWhenBothArrangementOrderTypeSelected() { DocmosisParameters generatedParameters = underTest.generate(caseData); - assertThat(generatedParameters.toString()).contains(BOTH_ARRANGEMENT_TEXT); + assertThat(generatedParameters.toString()).contains(CHILD_LIVE_TEXT); + assertThat(generatedParameters.toString()).contains(CHILD_CONTACT_TEXT); } @Test @@ -166,6 +170,14 @@ private CaseData buildCaseData(List c43OrderTypes, .manageOrdersType(Order.C43_CHILD_ARRANGEMENTS_SPECIFIC_ISSUE_PROHIBITED_STEPS_ORDER) .manageOrdersIsByConsent("No") .manageOrdersMultiSelectListForC43(c43OrderTypes) + .manageOrdersProhibitedStepsOrderDetails( + c43OrderTypes.contains(PROHIBITED_STEPS_ORDER) ? PROHIBITED_STEPS_DETAIL : null) + .manageOrdersSpecificIssueOrderDetails( + c43OrderTypes.contains(SPECIFIC_ISSUE_ORDER) ? SPECIFIC_ISSUE_DETAIL : null) + .manageOrdersChildArrangementsLiveWithDetails( + childArrOrderType.contains(CHILD_LIVE) ? LIVE_WITH_DETAIL : null) + .manageOrdersChildArrangementsContactWithDetails( + childArrOrderType.contains(CHILD_CONTACT) ? CONTACT_WITH_DETAIL : null) .manageOrdersRecitalsAndPreambles(RECITALS_AND_PREAMBLES) .manageOrdersDirections(DIRECTIONS) .manageOrdersFurtherDirections(FURTHER_DIRECTIONS) @@ -176,7 +188,8 @@ private CaseData buildCaseData(List c43OrderTypes, private C43ChildArrangementOrderDocmosisParameters.C43ChildArrangementOrderDocmosisParametersBuilder expectedCommonParameters() { - String orderDetails = "The Court orders"; + String orderDetails = String.format("The Court orders,\n\nSpecific Issue\n\n%s\n\nProhibited Steps\n\n%s", + SPECIFIC_ISSUE_DETAIL, PROHIBITED_STEPS_DETAIL); String directions = String.format("%s\n\n%s\n\n%s", DIRECTIONS, FURTHER_DIRECTIONS, CONDITIONS_MESSAGE); String noticeMessage = String.format(NOTICE_MESSAGE, PASSPORT_OFFICE_ADDRESS, PASSPORT_OFFICE_EMAIL); @@ -185,6 +198,8 @@ private CaseData buildCaseData(List c43OrderTypes, .orderTitle(ORDER_TITLE) .recitalsOrPreamble(RECITALS_AND_PREAMBLES) .orderByConsent(CONSENT) + .prohibitedStepsOrderDetails(PROHIBITED_STEPS_DETAIL) + .specificIssueOrderDetails(SPECIFIC_ISSUE_DETAIL) .orderDetails(orderDetails) .furtherDirections(directions) .localAuthorityName(LA_NAME) @@ -194,7 +209,9 @@ private CaseData buildCaseData(List c43OrderTypes, private C43ChildArrangementOrderDocmosisParameters.C43ChildArrangementOrderDocmosisParametersBuilder expectedCommonParametersChildArrangementOrder() { - String orderDetails = String.format("The Court orders\n\n%s", CHILD_LIVE_TEXT); + String orderDetails = String.format("The Court orders,\n\nThe Child Arrangement Order is for the:" + + "\n\nChild to live with\n\n%s\n\nSpecific Issue\n\n%s\n\nProhibited Steps\n\n%s", + LIVE_WITH_DETAIL, SPECIFIC_ISSUE_DETAIL, PROHIBITED_STEPS_DETAIL); String directions = String.format("%s\n\n%s\n\n%s", DIRECTIONS, FURTHER_DIRECTIONS, CONDITIONS_MESSAGE); String noticeMessage = String.format(NOTICE_MESSAGE, PASSPORT_OFFICE_ADDRESS, PASSPORT_OFFICE_EMAIL); @@ -202,6 +219,9 @@ private CaseData buildCaseData(List c43OrderTypes, return C43ChildArrangementOrderDocmosisParameters.builder() .orderTitle(ORDER_TITLE) .recitalsOrPreamble(RECITALS_AND_PREAMBLES) + .childArrangementsLiveWithDetails(LIVE_WITH_DETAIL) + .specificIssueOrderDetails(SPECIFIC_ISSUE_DETAIL) + .prohibitedStepsOrderDetails(PROHIBITED_STEPS_DETAIL) .orderByConsent(CONSENT) .orderDetails(orderDetails) .furtherDirections(directions) diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/DocmosisCommonElementDecoratorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/DocmosisCommonElementDecoratorTest.java index 07cc6672f4e..0476a1bf833 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/DocmosisCommonElementDecoratorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/DocmosisCommonElementDecoratorTest.java @@ -44,7 +44,7 @@ class DocmosisCommonElementDecoratorTest { private static final String CHILDREN_ACT = "Children act for order"; private static final String CREST = "[userImage:crest.png]"; private static final String WATERMARK = "[userImage:draft-watermark.png]"; - private static final String SEAL = "[userImage:familycourtseal.png]"; + private static final String SEAL = "[userImage:FL-PLW-familycourtsealV2.png]"; private static final LocalDate APPROVAL_DATE = LocalDate.of(2021, 4, 20); private static final String EXPECTED_APPROVAL_DATE = "20 April 2021"; private static final JudgeAndLegalAdvisor JUDGE = mock(JudgeAndLegalAdvisor.class); diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGeneratorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGeneratorTest.java index 670100ac498..14c94ad5085 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGeneratorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGeneratorTest.java @@ -39,7 +39,7 @@ void testProcessor() { when(documentDownloadService.downloadDocument(BINARY_URL)).thenReturn(UPLOADED_FILE_BYTES); when(documentConversionService.convertToPdf(UPLOADED_FILE_BYTES, FILENAME)).thenReturn(CONVERTED_PDF_FILE_BYTES); - when(documentSealingService.sealDocument(CONVERTED_PDF_FILE_BYTES, COURT, SealType.BILINGUAL)).thenReturn( + when(documentSealingService.sealDocument(CONVERTED_PDF_FILE_BYTES, COURT, SealType.WELSH)).thenReturn( CONVERTED_SEALED_PDF_FILE_BYTES); byte[] actual = underTest.generate(CaseData.builder() diff --git a/service/src/test/resources/documents/document-sealed.pdf b/service/src/test/resources/documents/document-sealed.pdf index 5a6c8d85a44682f4edc9172908396d9ef8fff869..aba927228f1857c932ec64ec83fd49c75d863487 100644 GIT binary patch delta 34249 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 z

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 hL0$x&) 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 delta 23121 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 IB}Gq03N()_9RL6T From 35aa22385dd859a10e930d4d6e1e7d1f28572adb Mon Sep 17 00:00:00 2001 From: "Chak Shing, Lo" Date: Wed, 28 Aug 2024 17:37:05 +0100 Subject: [PATCH 15/15] Revert "Push Master changes to cafcass api feature branch (#5554)" This reverts commit 3515ecfb8296d6833f212df0e2ab389a50638e23. --- .../AuthorisationCaseEvent-testing.json | 19 --- .../CareSupervision/court-admin.json | 28 ---- .../CareSupervision/gatekeeper.json | 28 ---- .../CareSupervision/judiciary.json | 28 ---- .../CareSupervision/system-update.json | 28 ---- .../caseDocuments/orderCollection.json | 148 ------------------ .../CareSupervision/StateChange.json | 9 -- .../manageOrders/5_orderDetailsSection.json | 80 ++-------- .../manageOrders/manageOrdersFields.json | 36 ----- .../CareSupervision/GeneratedOrder.json | 40 ----- .../FL-PLW-familycourtseal-welshV2.png | Bin 10145 -> 0 bytes .../templates/FL-PLW-familycourtsealV2.png | Bin 33938 -> 0 bytes .../templates/familycourtseal-bilingual.png | Bin 0 -> 29035 bytes docker/docmosis/templates/familycourtseal.png | Bin 0 -> 24018 bytes ...adTranslationsSubmittedControllerTest.java | 4 +- ...uthoritiesControllerAboutToSubmitTest.java | 45 +++--- .../resources/documents/document-sealed.pdf | Bin 50508 -> 39570 bytes .../hmcts/reform/ccd/model/CaseLocation.java | 2 - .../reform/fpl/config/AsyncConfiguration.java | 11 +- .../ManageLocalAuthoritiesController.java | 16 +- .../support/MigrateCaseController.java | 10 +- .../reform/fpl/enums/DocmosisImages.java | 2 +- .../gov/hmcts/reform/fpl/model/CaseData.java | 2 +- .../reform/fpl/model/document/SealType.java | 4 +- .../model/event/ManageOrdersEventData.java | 4 - .../hmcts/reform/fpl/model/order/Order.java | 2 +- .../fpl/model/order/OrderQuestionBlock.java | 4 +- .../model/order/generated/GeneratedOrder.java | 4 - .../ManageLocalAuthoritiesService.java | 32 +--- ...geOrderDocumentScopedFieldsCalculator.java | 3 +- ...ildArrangementOrderDocmosisParameters.java | 4 - ...gementOrderDocumentParameterGenerator.java | 72 ++------- .../history/SealedOrderHistoryService.java | 5 - .../TranslatedDocumentGenerator.java | 2 +- .../FL-PLW-familycourtseal-welshV2.png | Bin 10145 -> 0 bytes .../static_data/FL-PLW-familycourtsealV2.png | Bin 33938 -> 0 bytes .../static_data/familycourtseal-bilingual.png | Bin 0 -> 29035 bytes .../resources/static_data/familycourtseal.png | Bin 0 -> 27790 bytes .../hmcts/reform/fpl/model/CaseDataTest.java | 4 +- .../ManageLocalAuthoritiesServiceTest.java | 11 +- ...ingsTemplateDataGenerationServiceTest.java | 2 +- ...GatekeepingOrderGenerationServiceTest.java | 2 +- .../NoticeOfHearingGenerationServiceTest.java | 2 +- ...rdDirectionOrderGenerationServiceTest.java | 2 +- ...derDocumentScopedFieldsCalculatorTest.java | 5 - .../OrderShowHideQuestionsCalculatorTest.java | 2 +- ...ntOrderDocumentParameterGeneratorTest.java | 48 ++---- .../DocmosisCommonElementDecoratorTest.java | 2 +- .../TranslatedDocumentGeneratorTest.java | 2 +- .../resources/documents/document-sealed.pdf | Bin 50508 -> 39570 bytes 50 files changed, 102 insertions(+), 652 deletions(-) delete mode 100644 docker/docmosis/templates/FL-PLW-familycourtseal-welshV2.png delete mode 100644 docker/docmosis/templates/FL-PLW-familycourtsealV2.png create mode 100644 docker/docmosis/templates/familycourtseal-bilingual.png create mode 100644 docker/docmosis/templates/familycourtseal.png delete mode 100644 service/src/main/resources/static_data/FL-PLW-familycourtseal-welshV2.png delete mode 100644 service/src/main/resources/static_data/FL-PLW-familycourtsealV2.png create mode 100644 service/src/main/resources/static_data/familycourtseal-bilingual.png create mode 100644 service/src/main/resources/static_data/familycourtseal.png diff --git a/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent-testing.json b/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent-testing.json index b696f6b91c5..9e766e3e596 100644 --- a/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent-testing.json +++ b/ccd-definition/AuthorisationCaseEvent/CareSupervision/AuthorisationCaseEvent-testing.json @@ -97,24 +97,5 @@ "CRUD": "R" } ] - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseEventID": "populateCase-RETURNED", - "AccessControl": [ - { - "UserRoles": ["caseworker-publiclaw-systemupdate"], - "CRUD": "CR" - }, - { - "UserRoles": [ - "caseworker-publiclaw-gatekeeper", - "caseworker-publiclaw-courtadmin", - "caseworker-publiclaw-solicitor" - ], - "CRUD": "R" - } - ] } ] diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json index 52c02225867..a08eb175ed5 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/court-admin.json @@ -3667,34 +3667,6 @@ "UserRole": "caseworker-publiclaw-courtadmin", "CRUD": "CRUD" }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", - "UserRole": "caseworker-publiclaw-courtadmin", - "CRUD": "CRUD" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", - "UserRole": "caseworker-publiclaw-courtadmin", - "CRUD": "CRUD" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", - "UserRole": "caseworker-publiclaw-courtadmin", - "CRUD": "CRUD" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", - "UserRole": "caseworker-publiclaw-courtadmin", - "CRUD": "CRUD" - }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json b/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json index b1c3e3e814b..e1607b9d189 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/gatekeeper.json @@ -3681,34 +3681,6 @@ "UserRole": "caseworker-publiclaw-gatekeeper", "CRUD": "CRU" }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", - "UserRole": "caseworker-publiclaw-gatekeeper", - "CRUD": "CRUD" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", - "UserRole": "caseworker-publiclaw-gatekeeper", - "CRUD": "CRU" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", - "UserRole": "caseworker-publiclaw-gatekeeper", - "CRUD": "CRU" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", - "UserRole": "caseworker-publiclaw-gatekeeper", - "CRUD": "CRU" - }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json index f79957d5672..b79bb68863f 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/judiciary.json @@ -3947,34 +3947,6 @@ "UserRole": "caseworker-publiclaw-judiciary", "CRUD": "CRU" }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", - "UserRole": "caseworker-publiclaw-judiciary", - "CRUD": "CRU" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", - "UserRole": "caseworker-publiclaw-judiciary", - "CRUD": "CRU" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", - "UserRole": "caseworker-publiclaw-judiciary", - "CRUD": "CRU" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", - "UserRole": "caseworker-publiclaw-judiciary", - "CRUD": "CRU" - }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json index 2bbb00e3bb4..55d6c543fc5 100644 --- a/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json +++ b/ccd-definition/AuthorisationCaseField/CareSupervision/system-update.json @@ -2506,34 +2506,6 @@ "UserRole": "caseworker-publiclaw-systemupdate", "CRUD": "CRU" }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", - "UserRole": "caseworker-publiclaw-systemupdate", - "CRUD": "CRU" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", - "UserRole": "caseworker-publiclaw-systemupdate", - "CRUD": "CRU" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", - "UserRole": "caseworker-publiclaw-systemupdate", - "CRUD": "CRU" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", - "UserRole": "caseworker-publiclaw-systemupdate", - "CRUD": "CRU" - }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json b/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json index adf0cf64b55..10a7630f722 100644 --- a/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json +++ b/ccd-definition/AuthorisationComplexType/caseDocuments/orderCollection.json @@ -1183,153 +1183,5 @@ "CRUD": "R" } ] - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "orderCollection", - "ListElementCode": "childArrangementsLiveWithDetails", - "AccessControl": [ - { - "UserRoles": [ - "caseworker-publiclaw-courtadmin", - "caseworker-publiclaw-gatekeeper", - "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-systemupdate" - ], - "CRUD": "CRU" - }, - { - "UserRoles": [ - "[BARRISTER]", - "[CAFCASSSOLICITOR]", - "[EPSMANAGING]", - "[LABARRISTER]", - "[LAMANAGING]", - "[LASHARED]", - "[LASOLICITOR]", - "[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", - "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", - "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", - "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", - "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", - "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", - "caseworker-publiclaw-cafcass", - "caseworker-publiclaw-magistrate" - ], - "CRUD": "R" - } - ] - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "orderCollection", - "ListElementCode": "childArrangementsContactWithDetails", - "AccessControl": [ - { - "UserRoles": [ - "caseworker-publiclaw-courtadmin", - "caseworker-publiclaw-gatekeeper", - "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-systemupdate" - ], - "CRUD": "CRU" - }, - { - "UserRoles": [ - "[BARRISTER]", - "[CAFCASSSOLICITOR]", - "[EPSMANAGING]", - "[LABARRISTER]", - "[LAMANAGING]", - "[LASHARED]", - "[LASOLICITOR]", - "[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", - "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", - "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", - "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", - "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", - "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", - "caseworker-publiclaw-cafcass", - "caseworker-publiclaw-magistrate" - ], - "CRUD": "R" - } - ] - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "orderCollection", - "ListElementCode": "specificIssueOrderDetails", - "AccessControl": [ - { - "UserRoles": [ - "caseworker-publiclaw-courtadmin", - "caseworker-publiclaw-gatekeeper", - "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-systemupdate" - ], - "CRUD": "CRU" - }, - { - "UserRoles": [ - "[BARRISTER]", - "[CAFCASSSOLICITOR]", - "[EPSMANAGING]", - "[LABARRISTER]", - "[LAMANAGING]", - "[LASHARED]", - "[LASOLICITOR]", - "[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", - "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", - "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", - "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", - "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", - "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", - "caseworker-publiclaw-cafcass", - "caseworker-publiclaw-magistrate" - ], - "CRUD": "R" - } - ] - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseFieldID": "orderCollection", - "ListElementCode": "prohibitedStepsOrderDetails", - "AccessControl": [ - { - "UserRoles": [ - "caseworker-publiclaw-courtadmin", - "caseworker-publiclaw-gatekeeper", - "caseworker-publiclaw-judiciary", - "caseworker-publiclaw-systemupdate" - ], - "CRUD": "CRU" - }, - { - "UserRoles": [ - "[BARRISTER]", - "[CAFCASSSOLICITOR]", - "[EPSMANAGING]", - "[LABARRISTER]", - "[LAMANAGING]", - "[LASHARED]", - "[LASOLICITOR]", - "[SOLICITOR]", "[SOLICITORA]", "[SOLICITORB]", "[SOLICITORC]", "[SOLICITORD]", - "[SOLICITORE]", "[SOLICITORF]", "[SOLICITORG]", "[SOLICITORH]", "[SOLICITORI]", "[SOLICITORJ]", - "[CHILDSOLICITORA]", "[CHILDSOLICITORB]", "[CHILDSOLICITORC]", "[CHILDSOLICITORD]", - "[CHILDSOLICITORE]", "[CHILDSOLICITORF]", "[CHILDSOLICITORG]", "[CHILDSOLICITORH]", - "[CHILDSOLICITORI]", "[CHILDSOLICITORJ]", "[CHILDSOLICITORK]", "[CHILDSOLICITORL]", - "[CHILDSOLICITORM]", "[CHILDSOLICITORN]", "[CHILDSOLICITORO]", - "caseworker-publiclaw-cafcass", - "caseworker-publiclaw-magistrate" - ], - "CRUD": "R" - } - ] } ] diff --git a/ccd-definition/CaseEvent/CareSupervision/StateChange.json b/ccd-definition/CaseEvent/CareSupervision/StateChange.json index 37f914f0cc5..5188053d1cf 100644 --- a/ccd-definition/CaseEvent/CareSupervision/StateChange.json +++ b/ccd-definition/CaseEvent/CareSupervision/StateChange.json @@ -121,14 +121,5 @@ "PreConditionState(s)": "*", "PostConditionState": "PREPARE_FOR_HEARING", "SecurityClassification": "Public" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "ID": "populateCase-RETURNED", - "Name": "Populate - Returned", - "PreConditionState(s)": "*", - "PostConditionState": "RETURNED", - "SecurityClassification": "Public" } ] diff --git a/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json b/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json index 880359db8a8..131b702e132 100644 --- a/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json +++ b/ccd-definition/CaseEventToFields/CareSupervision/manageOrders/5_orderDetailsSection.json @@ -407,64 +407,12 @@ "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", - "CaseFieldID": "manageOrdersChildArrangementsLiveWithDetails", + "CaseFieldID": "manageOrdersRecitalsAndPreambles", "PageFieldDisplayOrder": 32, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, "PageColumnNumber": 1, - "FieldShowCondition": "manageOrdersChildArrangementsOrderTypes CONTAINS \"CHILD_LIVE\" AND manageOrdersMultiSelectListForC43 CONTAINS \"CHILD_ARRANGEMENT_ORDER\"", - "ShowSummaryChangeOption": "Y" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseEventID": "manageOrders", - "CaseFieldID": "manageOrdersChildArrangementsContactWithDetails", - "PageFieldDisplayOrder": 33, - "DisplayContext": "MANDATORY", - "PageID": "OrderDetails", - "PageDisplayOrder": 6, - "PageColumnNumber": 1, - "FieldShowCondition": "manageOrdersChildArrangementsOrderTypes CONTAINS \"CHILD_CONTACT\" AND manageOrdersMultiSelectListForC43 CONTAINS \"CHILD_ARRANGEMENT_ORDER\"", - "ShowSummaryChangeOption": "Y" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseEventID": "manageOrders", - "CaseFieldID": "manageOrdersSpecificIssueOrderDetails", - "PageFieldDisplayOrder": 34, - "DisplayContext": "MANDATORY", - "PageID": "OrderDetails", - "PageDisplayOrder": 6, - "PageColumnNumber": 1, - "FieldShowCondition": "manageOrdersMultiSelectListForC43 CONTAINS \"SPECIFIC_ISSUE_ORDER\"", - "ShowSummaryChangeOption": "Y" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseEventID": "manageOrders", - "CaseFieldID": "manageOrdersProhibitedStepsOrderDetails", - "PageFieldDisplayOrder": 35, - "DisplayContext": "MANDATORY", - "PageID": "OrderDetails", - "PageDisplayOrder": 6, - "PageColumnNumber": 1, - "FieldShowCondition": "manageOrdersMultiSelectListForC43 CONTAINS \"PROHIBITED_STEPS_ORDER\"", - "ShowSummaryChangeOption": "Y" - }, - { - "LiveFrom": "01/01/2017", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "CaseEventID": "manageOrders", - "CaseFieldID": "manageOrdersRecitalsAndPreambles", - "PageFieldDisplayOrder": 36, - "DisplayContext": "OPTIONAL", - "PageID": "OrderDetails", - "PageDisplayOrder": 6, - "PageColumnNumber": 1, "FieldShowCondition": "orderTempQuestions.childArrangementSpecificIssueProhibitedSteps=\"YES\"", "ShowSummaryChangeOption": "Y" }, @@ -473,12 +421,12 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersDirections", - "PageFieldDisplayOrder": 37, + "PageFieldDisplayOrder": 33, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, "PageColumnNumber": 1, - "FieldShowCondition": "orderTempQuestions.orderDetails=\"YES\" AND orderTempQuestions.childArrangementSpecificIssueProhibitedSteps=\"NO\"", + "FieldShowCondition": "orderTempQuestions.orderDetails=\"YES\"", "ShowSummaryChangeOption": "Y" }, { @@ -486,7 +434,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "additionalAppointedSpecialGuardians", - "PageFieldDisplayOrder": 38, + "PageFieldDisplayOrder": 34, "DisplayContext": "OPTIONAL", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -499,7 +447,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersFurtherDirections", - "PageFieldDisplayOrder": 39, + "PageFieldDisplayOrder": 35, "DisplayContext": "OPTIONAL", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -512,7 +460,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersEndDateTime", - "PageFieldDisplayOrder": 40, + "PageFieldDisplayOrder": 36, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -525,7 +473,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersEndDateTypeWithMonth", - "PageFieldDisplayOrder": 41, + "PageFieldDisplayOrder": 37, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -538,7 +486,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersSetMonthsEndDate", - "PageFieldDisplayOrder": 42, + "PageFieldDisplayOrder": 38, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -551,7 +499,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersEndDateTypeWithEndOfProceedings", - "PageFieldDisplayOrder": 43, + "PageFieldDisplayOrder": 39, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -564,7 +512,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersSetDateEndDate", - "PageFieldDisplayOrder": 44, + "PageFieldDisplayOrder": 40, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -577,7 +525,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersSetDateAndTimeEndDate", - "PageFieldDisplayOrder": 45, + "PageFieldDisplayOrder": 41, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -590,7 +538,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersUploadOrderFile", - "PageFieldDisplayOrder": 46, + "PageFieldDisplayOrder": 42, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -603,7 +551,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersNeedSealing", - "PageFieldDisplayOrder": 47, + "PageFieldDisplayOrder": 43, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, @@ -616,7 +564,7 @@ "CaseTypeID": "CARE_SUPERVISION_EPO", "CaseEventID": "manageOrders", "CaseFieldID": "manageOrdersIsFinalOrder", - "PageFieldDisplayOrder": 48, + "PageFieldDisplayOrder": 44, "DisplayContext": "MANDATORY", "PageID": "OrderDetails", "PageDisplayOrder": 6, diff --git a/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json b/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json index 50ca44ca610..4f8e60871b2 100644 --- a/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json +++ b/ccd-definition/CaseField/CareSupervision/manageOrders/manageOrdersFields.json @@ -186,42 +186,6 @@ "SecurityClassification": "PUBLIC", "Searchable": "N" }, - { - "LiveFrom": "01/01/2017", - "ID": "manageOrdersChildArrangementsLiveWithDetails", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "FieldType": "TextArea", - "Label": "Add details for child to live with order", - "SecurityClassification": "PUBLIC", - "Searchable": "N" - }, - { - "LiveFrom": "01/01/2017", - "ID": "manageOrdersChildArrangementsContactWithDetails", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "FieldType": "TextArea", - "Label": "Add details for child to have contact with order", - "SecurityClassification": "PUBLIC", - "Searchable": "N" - }, - { - "LiveFrom": "01/01/2017", - "ID": "manageOrdersSpecificIssueOrderDetails", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "FieldType": "TextArea", - "Label": "Add details for specific issue order", - "SecurityClassification": "PUBLIC", - "Searchable": "N" - }, - { - "LiveFrom": "01/01/2017", - "ID": "manageOrdersProhibitedStepsOrderDetails", - "CaseTypeID": "CARE_SUPERVISION_EPO", - "FieldType": "TextArea", - "Label": "Add details for prohibited steps order", - "SecurityClassification": "PUBLIC", - "Searchable": "N" - }, { "LiveFrom": "01/01/2017", "ID": "manageOrdersRecitalsAndPreambles", diff --git a/ccd-definition/ComplexTypes/CareSupervision/GeneratedOrder.json b/ccd-definition/ComplexTypes/CareSupervision/GeneratedOrder.json index 9cf7c693c4f..6469a32443f 100644 --- a/ccd-definition/ComplexTypes/CareSupervision/GeneratedOrder.json +++ b/ccd-definition/ComplexTypes/CareSupervision/GeneratedOrder.json @@ -50,46 +50,6 @@ "FieldShowCondition": "date!=\"*\"", "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" }, - { - "LiveFrom": "01/01/2017", - "ID": "GeneratedOrder", - "ListElementCode": "childArrangementsLiveWithDetails", - "FieldType": "TextArea", - "ElementLabel": "Child to live with order details (C43)", - "SecurityClassification": "Public", - "FieldShowCondition": "date!=\"*\"", - "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" - }, - { - "LiveFrom": "01/01/2017", - "ID": "GeneratedOrder", - "ListElementCode": "childArrangementsContactWithDetails", - "FieldType": "TextArea", - "ElementLabel": "Contact with child order details (C43)", - "SecurityClassification": "Public", - "FieldShowCondition": "date!=\"*\"", - "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" - }, - { - "LiveFrom": "01/01/2017", - "ID": "GeneratedOrder", - "ListElementCode": "specificIssueOrderDetails", - "FieldType": "TextArea", - "ElementLabel": "Specific issue order details (C43)", - "SecurityClassification": "Public", - "FieldShowCondition": "date!=\"*\"", - "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" - }, - { - "LiveFrom": "01/01/2017", - "ID": "GeneratedOrder", - "ListElementCode": "prohibitedStepsOrderDetails", - "FieldType": "TextArea", - "ElementLabel": "Prohibited steps order details (C43)", - "SecurityClassification": "Public", - "FieldShowCondition": "date!=\"*\"", - "Comment": "Order details should not be displayed in the tab view. When date is set, order has reached tab view stage" - }, { "LiveFrom": "01/01/2017", "ID": "GeneratedOrder", diff --git a/docker/docmosis/templates/FL-PLW-familycourtseal-welshV2.png b/docker/docmosis/templates/FL-PLW-familycourtseal-welshV2.png deleted file mode 100644 index fa1ebe462d4107006df890e1503a470b9878a2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10145 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 diff --git a/docker/docmosis/templates/FL-PLW-familycourtsealV2.png b/docker/docmosis/templates/FL-PLW-familycourtsealV2.png deleted file mode 100644 index bd5a2780338814b9ef25d076b697d43a8c22c496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33938 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 hL0$x&) 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 diff --git a/service/src/main/java/uk/gov/hmcts/reform/ccd/model/CaseLocation.java b/service/src/main/java/uk/gov/hmcts/reform/ccd/model/CaseLocation.java index 20e2c614b8a..8eb9850dcf3 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/ccd/model/CaseLocation.java +++ b/service/src/main/java/uk/gov/hmcts/reform/ccd/model/CaseLocation.java @@ -1,12 +1,10 @@ package uk.gov.hmcts.reform.ccd.model; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @Data @Builder(toBuilder = true) -@AllArgsConstructor public class CaseLocation { private String baseLocation; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/config/AsyncConfiguration.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/config/AsyncConfiguration.java index db9df3834d1..5e90d0c6314 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/config/AsyncConfiguration.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/config/AsyncConfiguration.java @@ -1,9 +1,9 @@ package uk.gov.hmcts.reform.fpl.config; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -20,16 +20,10 @@ @Slf4j @Configuration +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class AsyncConfiguration implements AsyncConfigurer { private final ApplicationContext context; - private final int corePoolSize; - - public AsyncConfiguration(@Autowired ApplicationContext context, - @Value("${fpl.core_pool_size:10}") int corePoolSize) { - this.context = context; - this.corePoolSize = corePoolSize; - } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { @@ -49,7 +43,6 @@ public void handleUncaughtException(Throwable throwable, Method method, Object.. public Executor getAsyncExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setTaskDecorator(new AsyncTaskDecorator(context)); - taskExecutor.setCorePoolSize(corePoolSize); return taskExecutor; } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageLocalAuthoritiesController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageLocalAuthoritiesController.java index 193653d4e7b..cfb57e53bba 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageLocalAuthoritiesController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/ManageLocalAuthoritiesController.java @@ -9,6 +9,7 @@ import uk.gov.hmcts.reform.ccd.client.model.AboutToStartOrSubmitCallbackResponse; import uk.gov.hmcts.reform.ccd.client.model.CallbackRequest; import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; +import uk.gov.hmcts.reform.ccd.model.CaseLocation; import uk.gov.hmcts.reform.ccd.model.Organisation; import uk.gov.hmcts.reform.fpl.enums.CaseRole; import uk.gov.hmcts.reform.fpl.enums.LocalAuthorityAction; @@ -182,7 +183,7 @@ public AboutToStartOrSubmitCallbackResponse handleAboutToSubmit(@RequestBody Cal caseDetails.getData().put("caseLocalAuthorityName", caseData.getCaseLocalAuthorityName()); caseDetails.getData().put("localAuthorities", caseData.getLocalAuthorities()); - updateCourtDetails(caseDetails, caseData.getCourt()); + updateDfjAreaCourtDetails(caseDetails, caseData.getCourt()); removeTemporaryFields(caseDetails); @@ -209,6 +210,12 @@ public AboutToStartOrSubmitCallbackResponse handleAboutToSubmit(@RequestBody Cal caseDetails.getData().put(PAST_COURT_LIST_KEY, caseData.getPastCourtList()); caseDetails.getData().put(COURT_KEY, courtTransferred); + // Add the caseManagementLocation for global search/challenged access + caseDetails.getData().put("caseManagementLocation", CaseLocation.builder() + .baseLocation(courtTransferred.getEpimmsId()) + .region(courtTransferred.getRegionId()) + .build()); + if (!isEmpty(courtTransferred) && RCJ_HIGH_COURT_CODE.equals(courtTransferred.getCode())) { // transferred to the high court -> turn off sendToCtsc caseDetails.getData().put("sendToCtsc", YesNo.NO.getValue()); @@ -217,7 +224,7 @@ public AboutToStartOrSubmitCallbackResponse handleAboutToSubmit(@RequestBody Cal // we were in the high court, now we're not -> sendToCtsc again caseDetails.getData().put("sendToCtsc", YesNo.YES.getValue()); } - updateCourtDetails(caseDetails, courtTransferred); + updateDfjAreaCourtDetails(caseDetails, courtTransferred); } @@ -248,13 +255,10 @@ public AboutToStartOrSubmitCallbackResponse handleTransferCourtWithoutTransferLA return respond(caseDetails, errors); } - private void updateCourtDetails(CaseDetails caseDetails, Court court) { + private void updateDfjAreaCourtDetails(CaseDetails caseDetails, Court court) { DfjAreaCourtMapping dfjArea = dfjAreaLookUpService.getDfjArea(court.getCode()); caseDetails.getData().keySet().removeAll(dfjAreaLookUpService.getAllCourtFields()); caseDetails.getData().put("dfjArea", dfjArea.getDfjArea()); caseDetails.getData().put(dfjArea.getCourtField(), court.getCode()); - - service.getCaseManagementLocation(court) - .ifPresent(caseLocation -> caseDetails.getData().put("caseManagementLocation", caseLocation)); } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java index 7ec55b384f2..61a3de98578 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java @@ -11,7 +11,6 @@ import uk.gov.hmcts.reform.ccd.client.model.CallbackRequest; import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; import uk.gov.hmcts.reform.fpl.controllers.CallbackController; -import uk.gov.hmcts.reform.fpl.model.CaseData; import uk.gov.hmcts.reform.fpl.service.CaseConverter; import uk.gov.hmcts.reform.fpl.service.MigrateCaseService; @@ -29,8 +28,7 @@ public class MigrateCaseController extends CallbackController { private final Map> migrations = Map.of( "DFPL-log", this::runLog, - "DFPL-2492", this::run2492, - "DFPL-2491", this::run2491 + "DFPL-2492", this::run2492 ); private final CaseConverter caseConverter; @@ -68,10 +66,4 @@ private void run2492(CaseDetails caseDetails) { caseDetails.getData().putAll(migrateCaseService.removeCharactersFromThresholdDetails(getCaseData(caseDetails), migrationId, thresholdDetailsStartIndex, thresholdDetailsEndIndex)); } - - private void run2491(CaseDetails caseDetails) { - final String migrationId = "DFPL-2491"; - final CaseData caseData = getCaseData(caseDetails); - caseDetails.getData().putAll(migrateCaseService.setCaseManagementLocation(caseData, migrationId)); - } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisImages.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisImages.java index 2de33a134b1..4c465552a8e 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisImages.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/enums/DocmosisImages.java @@ -11,7 +11,7 @@ public enum DocmosisImages { DRAFT_WATERMARK("[userImage:draft-watermark.png]", null), - COURT_SEAL("[userImage:FL-PLW-familycourtsealV2.png]", "[userImage:FL-PLW-familycourtseal-welshV2.png]"), + COURT_SEAL("[userImage:familycourtseal.png]", "[userImage:familycourtseal-bilingual.png]"), CREST("[userImage:crest.png]", null), HMCTS_LOGO_LARGE("[userImage:hmcts-logo-large.png]", null), HMCTS_LOGO_SMALL("[userImage:hmcts-logo-small.png]", null); diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java index a22215c585c..f4c49026626 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java @@ -537,7 +537,7 @@ public boolean isWelshLanguageRequested() { @JsonIgnore public SealType getSealType() { - return isWelshLanguageRequested() ? SealType.WELSH : SealType.ENGLISH; + return isWelshLanguageRequested() ? SealType.BILINGUAL : SealType.ENGLISH; } @JsonIgnore diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/document/SealType.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/document/SealType.java index 782d1bc3de2..38119b560c2 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/document/SealType.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/document/SealType.java @@ -6,8 +6,8 @@ @RequiredArgsConstructor @Getter public enum SealType { - ENGLISH("static_data/FL-PLW-familycourtsealV2.png"), - WELSH("static_data/FL-PLW-familycourtseal-welshV2.png"), + ENGLISH("static_data/familycourtseal.png"), + BILINGUAL("static_data/familycourtseal-bilingual.png"), HIGHCOURT_ENGLISH("static_data/highcourtseal.png"); private final String image; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java index d4b348cc6d5..a744ec3c0bf 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/event/ManageOrdersEventData.java @@ -60,10 +60,6 @@ public class ManageOrdersEventData { EPOType manageOrdersEpoType; String manageOrdersIncludePhrase; List manageOrdersMultiSelectListForC43; - String manageOrdersChildArrangementsLiveWithDetails; - String manageOrdersChildArrangementsContactWithDetails; - String manageOrdersSpecificIssueOrderDetails; - String manageOrdersProhibitedStepsOrderDetails; String manageOrdersRecitalsAndPreambles; String manageOrdersRecitalsAndPreamblesOptional; String manageOrdersIsByConsent; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java index 486a3e612da..2c8cfcf6fdc 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/Order.java @@ -188,7 +188,7 @@ public enum Order { IsFinalOrder.MAYBE, List.of( LINKED_TO_HEARING, LINK_APPLICATION, APPROVER, APPROVAL_DATE, WHICH_CHILDREN, ORDER_BY_CONSENT, - DETAILS, CHILD_ARRANGEMENT_SPECIFIC_ISSUE_PROHIBITED_STEPS, CLOSE_CASE, + DETAILS, FURTHER_DIRECTIONS, CHILD_ARRANGEMENT_SPECIFIC_ISSUE_PROHIBITED_STEPS, CLOSE_CASE, REVIEW_DRAFT_ORDER) ), C47A_APPOINTMENT_OF_A_CHILDRENS_GUARDIAN( diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java index e7625a5fc7d..91f7402c107 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/OrderQuestionBlock.java @@ -71,9 +71,7 @@ public enum OrderQuestionBlock { List.of("manageOrdersDirections")), CHILD_ARRANGEMENT_SPECIFIC_ISSUE_PROHIBITED_STEPS("childArrangementSpecificIssueProhibitedSteps", OrderSection.ORDER_DETAILS, - List.of("manageOrdersMultiSelectListForC43", "manageOrdersRecitalsAndPreambles", - "manageOrdersChildArrangementsLiveWithDetails", "manageOrdersChildArrangementsContactWithDetails", - "manageOrdersSpecificIssueOrderDetails", "manageOrdersProhibitedStepsOrderDetails")), + List.of("manageOrdersMultiSelectListForC43", "manageOrdersRecitalsAndPreambles")), DISCHARGE_DETAILS("dischargeOfCareDetails", OrderSection.ORDER_DETAILS, List.of("manageOrdersCareOrderIssuedDate", "manageOrdersCareOrderIssuedCourt")), REVIEW_DRAFT_ORDER("previewOrder", OrderSection.REVIEW, diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java index 37f8270b64d..359b43c4124 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/order/generated/GeneratedOrder.java @@ -78,10 +78,6 @@ public class GeneratedOrder implements RemovableOrder, AmendableOrder, Translata private String linkedApplicationId; private String markedFinal; private final DocumentReference notificationDocument; - private String childArrangementsLiveWithDetails; - private String childArrangementsContactWithDetails; - private String specificIssueOrderDetails; - private String prohibitedStepsOrderDetails; @JsonIgnore public boolean isRemovable() { diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/ManageLocalAuthoritiesService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/ManageLocalAuthoritiesService.java index 5e9912b74db..d4eb02a68f8 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/ManageLocalAuthoritiesService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/ManageLocalAuthoritiesService.java @@ -5,7 +5,6 @@ import org.apache.commons.lang3.tuple.Pair; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import uk.gov.hmcts.reform.ccd.model.CaseLocation; import uk.gov.hmcts.reform.ccd.model.ChangeOrganisationRequest; import uk.gov.hmcts.reform.ccd.model.Organisation; import uk.gov.hmcts.reform.ccd.model.OrganisationPolicy; @@ -64,7 +63,6 @@ @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class ManageLocalAuthoritiesService { - public static final String FAMILY_COURT_SITTING_AT = "Family Court sitting at "; private final Time time; private final CourtService courtService; private final ValidateEmailService emailService; @@ -354,8 +352,10 @@ public Court transferCourtWithoutTransferLA(CaseData caseData) { .map(DynamicList::getValueCode) .flatMap(courtLookUpService::getCourtByCode); if (chosenCourt.isPresent()) { - Court newCourt = adjustCourtName(chosenCourt.get()).toBuilder() + boolean isHighCourt = chosenCourt.get().getCode().equals(RCJ_HIGH_COURT_CODE); + Court newCourt = chosenCourt.get().toBuilder() .dateTransferred(time.now()) + .name((isHighCourt ? "" : "Family Court sitting at ") + chosenCourt.get().getName()) .build(); caseData.setPastCourtList(buildPastCourtsList(caseData)); caseData.setCourt(newCourt); @@ -421,8 +421,7 @@ public Organisation transfer(CaseData caseData) { ofNullable(eventData.getCourtsToTransfer()) .map(DynamicList::getValueCode) - .flatMap(courtLookUpService::getCourtByCode) - .map(this::adjustCourtName) + .flatMap(courtLookup::getCourtByCode) .ifPresent(caseData::setCourt); caseData.setCaseLocalAuthority(localAuthorityIds.getLocalAuthorityCode(newDesignatedLocalAuthority.getId()) @@ -489,27 +488,4 @@ private String getLocalAuthorityToTransferCode(CaseData caseData) { return eventData.getLocalAuthoritiesToTransfer().getValueCode(); } - public Optional getCaseManagementLocation(Court court) { - String courtCode = court.getCode(); - Optional lookedUpCourt = courtLookUpService.getCourtByCode(courtCode); - - return lookedUpCourt.map(c -> CaseLocation.builder() - .baseLocation(c.getEpimmsId()) - .region(c.getRegionId()) - .build()); - } - - private Court adjustCourtName(Court court) { - boolean isHighCourt = court.getCode().equals(RCJ_HIGH_COURT_CODE); - boolean hasFamilyCourt = court.getName().contains("Family Court sitting at"); - - if (isHighCourt || hasFamilyCourt) { - return court; - } else { - return court.toBuilder() - .name(FAMILY_COURT_SITTING_AT + court.getName()) - .build(); - } - } - } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculator.java index f583766db10..e560adbb110 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculator.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/ManageOrderDocumentScopedFieldsCalculator.java @@ -30,8 +30,7 @@ public List calculate() { "hearingDetailsSectionSubHeader", "issuingDetailsSectionSubHeader", "childrenDetailsSectionSubHeader", - "orderDetailsSectionSubHeader", - "manageOrdersChildArrangementsOrderTypes" + "orderDetailsSectionSubHeader" )); return fields; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/C43ChildArrangementOrderDocmosisParameters.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/C43ChildArrangementOrderDocmosisParameters.java index 3a9fb53f505..704f68015ff 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/C43ChildArrangementOrderDocmosisParameters.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/docmosis/C43ChildArrangementOrderDocmosisParameters.java @@ -14,10 +14,6 @@ public class C43ChildArrangementOrderDocmosisParameters extends DocmosisParamete String orderMessage; String orderByConsent; String recitalsOrPreamble; - String prohibitedStepsOrderDetails; - String specificIssueOrderDetails; - String childArrangementsContactWithDetails; - String childArrangementsLiveWithDetails; String orderDetails; String furtherDirections; String localAuthorityName; diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGenerator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGenerator.java index 054d0b62625..1e92e4bf105 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGenerator.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGenerator.java @@ -15,10 +15,9 @@ import uk.gov.hmcts.reform.fpl.service.orders.generator.common.OrderMessageGenerator; import java.util.List; +import java.util.stream.Collectors; import static org.apache.commons.lang3.StringUtils.isEmpty; -import static uk.gov.hmcts.reform.fpl.enums.ChildArrangementsOrderType.CHILD_CONTACT; -import static uk.gov.hmcts.reform.fpl.enums.ChildArrangementsOrderType.CHILD_LIVE; @Component @RequiredArgsConstructor(onConstructor_ = {@Autowired}) @@ -79,10 +78,6 @@ public DocmosisParameters generate(CaseData caseData) { .builder() .orderTitle(c43TitleGenerator.getOrderTitle(eventData)) .recitalsOrPreamble(getOrderRecitalsAndPreambles(eventData)) - .prohibitedStepsOrderDetails(getProhibitedStepsOrderDetails(eventData)) - .specificIssueOrderDetails(getSpecificIssueOrderDetails(eventData)) - .childArrangementsContactWithDetails(getChildArrangementsContactWithDetails(eventData)) - .childArrangementsLiveWithDetails(getChildArrangementsLiveWithDetails(eventData)) .orderByConsent(orderMessageGenerator.getOrderByConsentMessage(eventData)) .orderDetails(buildOrderDetails(eventData)) .furtherDirections(getOrderDirections(eventData)) @@ -103,29 +98,24 @@ public DocmosisTemplates template() { } private String buildOrderDetails(ManageOrdersEventData eventData) { - StringBuilder stringBuilder = new StringBuilder("The Court orders,"); + StringBuilder stringBuilder = new StringBuilder(); - if (isChildArrangementOrderSelected(eventData)) { - stringBuilder.append("\n\nThe Child Arrangement Order is for the:"); - if (eventData.getManageOrdersChildArrangementsOrderTypes().contains(CHILD_LIVE)) { - stringBuilder.append("\n\nChild to live with\n\n").append( - eventData.getManageOrdersChildArrangementsLiveWithDetails()); - } - - if (eventData.getManageOrdersChildArrangementsOrderTypes().contains(CHILD_CONTACT)) { - stringBuilder.append("\n\nChild to have contact with\n\n").append( - eventData.getManageOrdersChildArrangementsContactWithDetails()); - } - } - - if (isSpecificIssueOrderSelected(eventData)) { - stringBuilder.append("\n\nSpecific Issue\n\n").append( - eventData.getManageOrdersSpecificIssueOrderDetails()); - } + stringBuilder.append("The Court orders"); - if (isProhibitedStepsOrderSelected(eventData)) { - stringBuilder.append("\n\nProhibited Steps\n\n").append( - eventData.getManageOrdersProhibitedStepsOrderDetails()); + if (isChildArrangementOrderSelected(eventData)) { + stringBuilder.append("\n\nThe Child Arrangement Order is for the child to "); + stringBuilder.append(eventData.getManageOrdersChildArrangementsOrderTypes().stream() + .map(type -> { + switch (type) { + case CHILD_LIVE: + return "live with"; + case CHILD_CONTACT: + return "have contact with"; + default: return type.toString(); + } + }) + .collect(Collectors.joining(" and "))); + stringBuilder.append("."); } return stringBuilder.toString(); @@ -135,22 +125,6 @@ private String getOrderRecitalsAndPreambles(ManageOrdersEventData eventData) { return eventData.getManageOrdersRecitalsAndPreambles(); } - private String getProhibitedStepsOrderDetails(ManageOrdersEventData eventData) { - return eventData.getManageOrdersProhibitedStepsOrderDetails(); - } - - private String getSpecificIssueOrderDetails(ManageOrdersEventData eventData) { - return eventData.getManageOrdersSpecificIssueOrderDetails(); - } - - private String getChildArrangementsContactWithDetails(ManageOrdersEventData eventData) { - return eventData.getManageOrdersChildArrangementsContactWithDetails(); - } - - private String getChildArrangementsLiveWithDetails(ManageOrdersEventData eventData) { - return eventData.getManageOrdersChildArrangementsLiveWithDetails(); - } - private String getOrderDirections(ManageOrdersEventData eventData) { String directions = eventData.getManageOrdersDirections(); String furtherDirections = eventData.getManageOrdersFurtherDirections(); @@ -170,18 +144,6 @@ private Boolean isChildArrangementOrderSelected(ManageOrdersEventData eventData) return orders.contains(C43OrderType.CHILD_ARRANGEMENT_ORDER); } - private Boolean isSpecificIssueOrderSelected(ManageOrdersEventData eventData) { - List orders = eventData.getManageOrdersMultiSelectListForC43(); - - return orders.contains(C43OrderType.SPECIFIC_ISSUE_ORDER); - } - - private Boolean isProhibitedStepsOrderSelected(ManageOrdersEventData eventData) { - List orders = eventData.getManageOrdersMultiSelectListForC43(); - - return orders.contains(C43OrderType.PROHIBITED_STEPS_ORDER); - } - private void addChildArrangementOrderWarningMessage( C43ChildArrangementOrderDocmosisParameters.C43ChildArrangementOrderDocmosisParametersBuilder c43DocmosisParameters) { diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/history/SealedOrderHistoryService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/history/SealedOrderHistoryService.java index c13617ec2a5..f80f56fb828 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/history/SealedOrderHistoryService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/orders/history/SealedOrderHistoryService.java @@ -89,11 +89,6 @@ public Map generate(CaseData caseData) { .childrenDescription(getChildrenForOrder(selectedChildren, caseData)) .specialGuardians(appointedGuardianFormatter.getGuardiansNamesForTab(caseData)) .othersNotified(othersNotifiedGenerator.getOthersNotified(selectedOthers)) - .childArrangementsContactWithDetails( - manageOrdersEventData.getManageOrdersChildArrangementsContactWithDetails()) - .childArrangementsLiveWithDetails(manageOrdersEventData.getManageOrdersChildArrangementsLiveWithDetails()) - .specificIssueOrderDetails(manageOrdersEventData.getManageOrdersSpecificIssueOrderDetails()) - .prohibitedStepsOrderDetails(manageOrdersEventData.getManageOrdersProhibitedStepsOrderDetails()) .document(order) .translationRequirements(languageRequirementGenerator.translationRequirements(caseData)) .unsealedDocumentCopy(plainWordOrder); diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGenerator.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGenerator.java index 4ca78fc8bdc..3f503ea259a 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGenerator.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGenerator.java @@ -24,7 +24,7 @@ public byte[] generate(CaseData caseData) { byte[] bytes = documentDownloadService.downloadDocument(documentReference.getBinaryUrl()); byte[] convertedPdfBytes = documentConversionService.convertToPdf(bytes, documentReference.getFilename()); - return documentSealingService.sealDocument(convertedPdfBytes, caseData.getCourt(), SealType.WELSH); + return documentSealingService.sealDocument(convertedPdfBytes, caseData.getCourt(), SealType.BILINGUAL); } } diff --git a/service/src/main/resources/static_data/FL-PLW-familycourtseal-welshV2.png b/service/src/main/resources/static_data/FL-PLW-familycourtseal-welshV2.png deleted file mode 100644 index fa1ebe462d4107006df890e1503a470b9878a2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10145 zcmdUVRX~(&w>BNp9Yd#-beD8DA{|4+ASEK5l0zenbSWS$NY_v^bc2AjQWDZI|LFIA z-`@W|+lTvLW)9}LSKQAXYhBkBtE;Vo_k{Wh5)u-gnyR8c;&M+}x0sJJ*N+mx-FW8aWCM7LUFR<%R+wmVIc_8fh6PZRyK04Wg=P zIYob7PM+6LdXf>YKpc((t82jJdR#_;{oSuxCY~$?(q4quCNZ@bsoocxb)s( z{TTt*&v=FIBpY*Q(4IqjjW_tEIdw6k4A2=@@Zlr(2!I`m!C6^ z`OjlS|2H4Q6$`mrS%<372eAM`xO$Za_Zeb-Mi9vG?TvpB#=JZc1&D(9aCRp|w}ujh zbuN$H=w5wWo~^e0md}yk%L1Ve|%*XdX=1QXd{0FcEgO-IFg&HR2dCZ_i5ty(gK}Tr2 z=qpOlFl0Rt;(OTNbsx3vg_}6YFD|mTVV;-f?Tx4YSPX=+2gC2ybMX!qG>%@dF(tw| z%;ql=u^g7B%a}OFy5SG*MAUciW8ZGUp(I+tfHx;1xgxJf>tQ+k{owf7V9-76zei0z z-rFX|zPC%=N?sfL@V-N3Fe}=;{SA!Uw5~_!)#4;6m;S(Or-gBD%Z|kkpYP#VJF@Vb zB)`3UUucF_ZmHkWM?dfLvEg7LSq)Mimye~TS+ie#%AyW#2S^+yLy?*KvWbWqPDKk& zY47TIyT5;-iLmw5OoWMxQS5E6nxiiC346MkGcSw^bNNNY@n_!Lt;1inxUV?SInOBH zdI$OcPKC=pTo~Luc3!Qe<$!+mgq7%O%-J*6Q$#&hNYt7u@?PR$s-{uK znjlxwG10HmRM?+!F#&QeM>`MAyrBv1?SVG__JPmC8xI)3#%a#7EGYQv_J!(toYhb}yy zaIoO5d0{Sj)zj&rvkJHxZe_iKb{b#=mfO*jZCQBy*i<@|F{&{)=|}_5S#-Tti^6&9 zQK6j;e7vZTy$Q+S2xi9)H$Cga5s)!{=*5KfJU+nYxL!^lZSBpDq-~1x1i~N6{pUXJ z)~nF*_ebNUv9ZgKK3m1P8tC*)TIKrdD;?dw*p7hAR^%FSoC|c>YWfBw1-oIRWY(d=5B=0Nk_azI|1T)ao$B+8c|e4}N;L zg=f*^QA8!}RXXcHUP~0#^?TmTGimSL`hWK*zoe_IKCjE~kg~w^!0J*tBb&TI;W+%%Ov*JQ0{uyqkmt}^V))d-8Bx>(Qttx&{O77bu}6?+wfn%3>r7=S!SXB z6t2=2$<9+vRpLQE)8Xv=--}qK@IJFd9QB;WlRx7o60~&6c(i)BWy&k*eyG9i3t)EM z)MM6<7l@+7yA8QOZ=<{YTJj;-6ha$~OTE1=Y|!dE8ro2|W;+_wPz)sw@???ZgrF5t zMW+>Olw#j}uQAh?WK8uUkYZRHI2`af%T*&`Q-wtiTgrM37;3AHOq$mk@RI+Jf7t)|fGfH>a{c8vl1lK5|Ft z1+oe*U>DAb3MOE(bg%yO?rx*qYN68RL%^lU`ED$Uo)u?Ii}z5X^OX2$q2^P-=&-*r zhvaB-gCVd42u3Dg3wjEaJk_2~2S_@AJ8rCkcF5qzdf(-?Z9;k%2re2!)@6uTQl14n z2|NQ|40Ui@HmRaf5zxp$$7AL(2in!~l<8CMN?U4-Yt5r}MfS?!dsk0yEY0@F=F?i zwI($hmRUSLkK-tDO_?Gx3?) zO*s=ihjiKygN$?z``k>M5IMQQ{Rm|59D8u~RL6G02mP*&*|;St#l5$)Vy8Jykwx!g zFR)AIfH6_Qwqp*kQf1q5Ad`9Eo!j}@e9dDLELJr^jpY57!yBD}%IWp<1v_X;^~(zF zs7E&;F`2(vAslH?xr$l%8-nQw<-a_$*p@4D9?YU?CT?E&#^-))Zt&&Jk!EM1ROv-y zt$EiWoO7s`c}$EEreldTJ1p7ao>}ODBTVriC37WTkX)3UFZrhQPKqv_(OxZEza^dD zp7v-bt-6x(q-Uj|N>S(&Wsif`GlG0yFfa8*{j%(>Q#rxh(aM({V=*D_*(b9ZYo_ce zIcya+Pv2!K%|H^$FdF%0!+aOuD1HvBV$Lr9vU_w`M%Kp6f|aoxn4=j2<<%VCA+X%P z9%y8v2q@Kis(Q_&Qi7=(pY3O!K6k`O#G#Whe^l(8bleJAh1YJ7p=-^qNeB3MJrold zS9{nHeWbW7%h)L+A;^1?&SS4>Vz8UuSqvoIoycWpbij%jrp$R2>#zB}xj%Y`u`G!k zht3XiA46qdmtTaIS#(+KFz^EftJxqLA2GqnTv40zGNGF!GKO->i zY;%}$(r93LAJtF}$k~24xxbLUAcX9NN3pMXb!8<~}L|$*F>DUF++lG?s zzxb6r#e&1>uHq5^QSXy91u6RTk&L>&Ls3_;%U_ zSzA{zzN|39vDnSer^Rw1F>HX%gSpOjXgWayp`a~ve@dXkQ`EB}UD#fG$(sfgrd6jU zkeUu0Xx2_kt&$O9^fcsaXUtGZ?_!8Jjt%uq=I`*dg{;m+{1k{>AX<=c-PMG@q$-3k zzvi9SNEE0ztVeF?VOzuiumaRLlpWalXyn{f1lZV)9mr|4aDUxGP&qdLTdiF;jFv5!c11{}q>O2gk3fH; zf_I*H=3~QBvvqR8bK>i(k8L0l#0sU+EQ5 zDYdwk->Yq??ezTej@ka&@29K8RM z_)xdoQkrTs23@3AWD(2kRJ26{BUK)(=r<`fSTFA&ocBaAgyl()G7Y(=H_%*jp&$lt zY3u%jqbYflB4wr~iyb~9chEanUA~4*M4OU+OiDS?u}_Yq=ICJ12ipCUWWlKVy6SOP zO>#m)m|-q)Dm;54hEj0s?FJ^mh6@yRbj;Su@HEmA4E8>CVBKR+v!jYhnv>EZy;T^Q zP8z`%^B}Y$l=}rLuN!(Cgo$JeeSwOB ztNH~Ge6b(^5QK4I5!eNaOs$Gf^%yOJ9Z3PeF=$7<96MqpM*nG_qDlG9wIdB0*=?QB z&8xKzXFBkO%}LuH-BQ=@8u#p%C%AJgsnXA|tOW&dtQA01Fbx2?JeTrX;eb@COfqy? z42^hXg&6IbRToIY=O;^u0qQs3^&lo?Njs1INk&1hZPf|ha2%2TH;aU3z?r)F#3C|g zZ`^DpIiB#DcPy$l$ox!QR4?gKQPb?K2 zc*}iFoY7T073^l`mzgX`sI~d*LnU)q&7J8U#1tuK!}lGy_9@_ zuf&aW-~101uzX_FHp%us#`YbW4hN=1QP85F})&(TYoItgGJxI9{kR}nUXgcn92!Xpx2Tr5x**pE~Pui}V1 z4O=Utl&R1MFLrADy2{>6BfZ`MCeX>5R>&B)8=56bQwGfrO z^ZN<&o{-Lzi+RI^n1XUwCp0QVEXZb#tlc#S2)jXd7b&|q&HznGj*FW^B2)~3kA#e5k8d`1hRuCi&b*txZf$Z9hKq#pBH!mIdvQ8@n$}})# z?h~LW=X(>Ga`*HP`zlOzKV~Y%LS<3R37w0-E3pc{qjfA5DUGT&t}kx$|NU{P$vMpq z`AhRoBCTZU%_yZ^@{lEVQa?lliGjQSWf2jx8aOLPJzciVCH%H-iS!oz2`M46R<4Ma zKpCTeOV>ymyG9dUm2A0oJ|{BL!NO-zN#A2qWbGWGk=3t0V?s`oJ@vT4f^Y_vl* z+7)EGT|sx-aE4k2@W0}>Bf>&0B4iH20DM;MTSXM#H@?_th_;5Th{&Qb;Of;3*EFeu zu_a|oT{DZW_oj)KmX`3sXRFNer`q@~W9&iWcsXBMF6|0ZSvAy?pA%Y{OSk({n5~Fy z^IZTG7$IMtnJ0^~5&(XXcE(S%;xB-&D}QA0n6b&Pw78jl4T=%Z7j#S%l67BgWqgol zBSU>q4Ij9ng_#=H1K-_uhrokp>TOkKK3mED@b%wA*5}$xsj=+*isgSWUxUpW?}ZKm z*Ko*!CIksz%QGtH*i_SE2{RGAOeW9mZ437ZzMUyh$FomEX3mSiB*+nQTQ2>Lon4`N zo_awY=r9f2!?gFWT*nW7%3bc$r6Uv+ zWJq=VEf}BzlV|gVgirWW4=U7=N{->lUg4eskuleVG%yvkVP%+cSD+seR~;X#tinnnOC3&}H2y!H0xAt~hEcBa*HtI0cGHe?N#UdCKz&v*Ut@(b+xbZce+ zdg8Qu{H=WP6}*thZwNyj8fyt6}rrQWWvoUAfK17 zHfbym9Pdypms8TfjtyOMJY1}wRvFN<&HZu#xVc+;`pIGHbFr0at-1Kp9-;^D5^{Ds zC-YqH@kTq8SftJkFjJOeBL&)hScw%~<1-U+OC9(TFL-buErg*jTX$?j-rc5aA5=uFhZ}q5jG@D{$ zDAFkn6L0R%Co~M++a#K#2t2pO^&W^|qYHO{BW{5hB%b~#JVC3w<%QCvpPYykYy&=o z6=Dh_%xivPG)jq1U3$PdeoJbBHbEcM1{{nlgNYPo$5CE$bB$rVK3TIE=$pjscC?L& z=%~VyoWe}=I#}=SzV9+^c5xo3by3ZGe!*^mZngr(mqPVTE15$_;f2gpXsbc^_E+mm za8cSZV0|w>8O0h`27&OJJif~l$*HTWFI$HcgQ*0SgEi79hHxToMRqV|DjS{zX(l>G zOSC%Vj0%NRv1Th|Sq)HQ4$d#qyv2A+9r^_(Z=wUk;B#t&PMiDYng7kuBvk|MnHZhMHv_18x4ne2ju{U|AsQgFxQaOUWw zl29FopJ%9Js3YSrV%}YiK4(lmwf0Om4$AX!UC2RxxV@1b_c2nbO%gLe=?;s&MbxXA z$oE_?Yp*X8zp``?%;=30;z@Z{+y)@Ri4Xf4c=_I z2#gz9@;%}rFR;S&K>1C41;wd>LmRf>)hU?R-BkQc-^RKC-KahnK4>%eL<&_3M~>|m z(9Wk=4i#f~JtpBrbZ1=?rMoWq&!#9hvMTAU@cx{TVAMSp#idDH)>Z&AtxTYCq|?I4 zuYLyEb>N;<=PQN_qCE~4LJ^t;5}Wh5*KRi`;(()fxw=A`UCsSG;XUF zP0-HzFsJq#F;k?_8lq>vaDQ>5W%tCV1ZR;kN7Vyayxs}@3fvXt1ZYI61YmhTQ5;6I z76|sH8!)cYXFZ3x2Mg|6`*#k<_dSUV{q>g6_?UuaDCT9OJYpNo1ouOuoi?&}u0?vu z>|u{%nY>p=*^RoE)v*2Mh0m_D$qrBDNXVm_JAkRYv^^sOX$VUp*!JM-_aKfwH7mv zm+~YTY!wd{)sv!mT4`J*le+N{Nm4DF zeCf6_edaV@Z7J;ni(vOT%;I;ZQ(o(05ssVl9m95VST5BAX})XtZVDz^4yJ7;O$(_y z+DBd9E%`FyBI@!IAd@)^xmT*xFH`?I(K+PcLiXKbpnTcd+Zr?l+pNvY7YsDbZkvE#q!`tjbA$-Ou#>pL>+jOQ zaSpVbHs;Aa?hKsKhO|QbuCtXX-=)?P9E9~m@3q`UaQZ*YG~4giHGhfkYb3No9One? z-%=kL#tIXtgh!zW_`F-AtN*#ocXuI7H+Z5D0BdNxONCF!>WE1MghlQ#pFD=)^yp8b z#s9(Ss-nuZ_j~Uz^bMlsS0P+N?fi)`jl+*ReBoOCy~+^eL=7GqS1gw9p7|1$MADV> zfA%VoJF6ZguJQ~4jg&`WNM>MktKny)!zez&QPHkbJT*n!*}ThuJdqyhWoxfX+evyS zZU4InEJ*u)f@n&8el_&u=n))XYW&cul0@gFnS0jXPV{8&&l+7(&0D3b9d$$DRj%|M zx~b!uCU9M<&W0ZZMn`XV-5sYr(yZy^@xA4*3Jb+z1T1a-e!Y1E1u0{~^t+w*6&xI9 z5Jh46(HLdfI~nc=mpo089n69ywgy_)*Vs%|Z;lrkTlT21B#H=aKMwu3TI{sX#G1=ZBb}Q!7G7Y&%_%_T&=q7@tWuEJtn1Brn z9wN6*p*Y4RVAQl^5Gu1UJ0}9zx?0-(tqdaN!Gb3jwEJdcT;_`-==y$6gh)XuURlbh z(fG|pR^|gq0v$b(KnKIg^^23Obuoeu=4==_m zT1YocR@@_;8B+wF#2HONUY!FFRVFgxHKOI~#+>?>b`M@~(1D6UpE$GNHyr{h08fC%Gyryh0D+zuclJJ!FM20}+nBPc31wz${@{HKexN~R=x!gUj z1QPNJzH9ZlpA1oxBI>HO^(#CkL=n$7;r1h*cN9P@Dtb<75kU=kc0%r2azl+5>^j6U z@`S?G2y-L*clqz69qeXr>W77mZ@>o;Sw<&X#7h7r9`!$W8W@f=1SIGou>TT>z*i*H zecXmEF%E-r&8X;t?~zV?D{B}5D|p{;BU-X+zMljLyrIJ3@@P-NkKCt|$HIQjpwQ+@ z6T3(bKti~F`PdV(L_cbWc3Ym;}9b0@(@zg8_wP9d?{8zFvxRJ`>3#wsK$WO() z%j5Ui-)qAP@0&@PZ1(%O=*Ww*#l6dgh)ihaw0q;48K0iurZ@rgWU%sgdAKOj(6UV@ z+X?nA)VST%vF*Z+$K!Ddr)XkFK{LxIUx~yxb$u)B_b^*6bYz{ z=+}7E(jLb1jRE~!wF$hyzYRTq3%!gJPZG@OK(vf3Hfd(Ld2X`ICF-lVmB0TECDI*T=%4y3I1LU1(q%Aa;*36< zvc|i7-TnA-GXhrk?c;kc)*)_@-)!ReBnUJ~YN`E;-|>=TcUCiGdQQ4F6DZQ?1mE5UbKeyFxRt6(qsQV9VM%UC)wQRXlpb~kd zPR0|FLkoDf5;|-~B*vLO+5q_QNfviwV-m6&WB!DLE2+k)+*hIM760=69qV$)Rutaj zH&T_JKaiu1Ac%s;7qqDQgugGBT{{bbRA_L@mt(!>c)|J8rB(egT&oUGq|ay(cZC&I z4S|hGc^3OsyO}xPYUc3Cow@lNSUohxNS(!hG;Q0P|ayYmXmkgn>}`Vksm!E0AD}?jKmb=MN&x z!mP%nEMJpFKg5j$X?}~8Bl0TGwdz?q_}^GLx`^6*@?a?$b8=5C!?wLf=BQbA*zP#3 zu6rX5XK@(E(@0$kFs^xTtk`0Sf2POV-NMhV6K6lH=$_;{T-bJuXSaYN9c@!IllOdZ-v&`ivXuq;dH??Tg6gE0K;b98Tf>_4f6*^m*<4nI zz>9jP@A3u+M%yHL_u*$R5~(ST-DG4a99K;e#}9BsQuBp9o`B-#o<$h(Nuvl(0gzt zrJxPGE9mSOU;TS-`+%#%l%})(C|pkgjW#Y_k#wSe(S&~ta!%>-L&BOuOH)s#+ZqS7 zQYov(wvsdoqR}PaU+A)>l5cvmxQfeD9CSRwv^c&84GwKyYe1 zu=RFF9Zz)@$#mquJmg;o2{GyU5hp(LEE{v}(16XgR+Z!T0WG{Nf0^I( z>JnfF4vX}_<{+_|cwI=y$j~S#(#Lf^hNQ%^M7d$xhf;Aw+JkqM zux;7q$m*!ezl#DLvu$RfGZy%el0o-UHa4SD>21%a($Zmx2!wFt4O2VPLQk^?qB!di zV?t;&{v%u%k-6d%MT}>%6Yc+WJ;tP@IdS~Wel?+vPh|I0uYdNF#R@5+Mr(4O8--@c zSme?B@v{y6f0~a=iGKo0<*_xhM5tO&v)YH^)VbXuh1b7|6w1gOikZDH5pab1Gs=t_ zF4M|n=uN<3ii+J%nTepouwlspKD|gLuZ2KC@NLxzE|m@a<&NlmhOGy8;z+$X=H6yr zUal)rZ7f2%(PmWpN4t@}s)W$COj1Y&?1E>NHQ9?>ek^u%N*&_jEuO07F|)4+&Var( z3_?E$YjnKl$q^w-vM)kGx8u@ls;n|B3a|EAmpY>bgq%|iHQ${Ag2(v9$fx*ea=nrM z3RwiXu6Y(9!d^AcuH5>g;`r%pQh5?n5M+@$&j2Adc21V%YnJKAdjySlFH5Au#^3Nq zd_XZ?Ad0wZ-j^c;Nas}R^*TZ)JVV=yc@f^8+T$=`4<7ThRM|>O+A!)T6~j4mpR@`r zJEvXb2IRd{o38RDUK38$RnrPDq*7QW$524vi`Tgm*NH)knd`sI5_{`GZX@FJ%HvA( zd{j(P;h}L;dQNme0LEO^Q6)?@Y=YQ%*5$1TLQTNZ$Q%=Bv*j+cC3$IM72NMGjxn^E vm9sFU^?y^>^}m#+#ZdapXnna~f22p&sy+uXzvDni?~v4#v=wXRt;7ExOTt_c diff --git a/service/src/main/resources/static_data/FL-PLW-familycourtsealV2.png b/service/src/main/resources/static_data/FL-PLW-familycourtsealV2.png deleted file mode 100644 index bd5a2780338814b9ef25d076b697d43a8c22c496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33938 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 diff --git a/service/src/main/resources/static_data/familycourtseal-bilingual.png b/service/src/main/resources/static_data/familycourtseal-bilingual.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8f83852394f2ba3fc420f60fd5082c45720fbb GIT binary patch literal 29035 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 diff --git a/docker/docmosis/templates/familycourtseal-bilingual.png b/docker/docmosis/templates/familycourtseal-bilingual.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8f83852394f2ba3fc420f60fd5082c45720fbb GIT binary patch literal 29035 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 WORCESTER_LIST_ENTRY = Pair.of(WORCESTER.getName(), WORCESTER.getCode()); - private static final Pair WREXHAM_LIST_ENTRY = Pair.of(WREXHAM.getName(), WREXHAM.getCode()); @Autowired private Time time; @@ -285,7 +281,8 @@ void init() { @Test void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { - when(dfjAreaLookUpService.getDfjArea(WREXHAM.getCode())) + + when(dfjAreaLookUpService.getDfjArea(COURT_2.getCode())) .thenReturn(dfjAreaCourtMapping); final Colleague existingSocialWorker = Colleague.builder() @@ -308,8 +305,8 @@ void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER) .courtsToTransfer(dynamicLists.from(1, - WORCESTER_LIST_ENTRY, - WREXHAM_LIST_ENTRY)) + Pair.of(COURT_1.getName(), COURT_1.getCode()), + Pair.of(COURT_2.getName(), COURT_2.getCode()))) .localAuthorityToTransfer(newDesignatedLocalAuthority) .localAuthorityToTransferSolicitor(newDesignatedLocalAuthoritySolicitor) .build(); @@ -332,7 +329,6 @@ void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { .localAuthorityPolicy(organisationPolicy(LOCAL_AUTHORITY_1_ID, LOCAL_AUTHORITY_1_NAME, LASOLICITOR)) .localAuthoritiesEventData(eventData) .localAuthorities(wrapElements(designatedLocalAuthority, secondaryLocalAuthority)) - .caseManagementLocation(new CaseLocation("1111", "1")) .build(); final CaseData updatedCaseData = extractCaseData(postAboutToSubmitEvent(initialCaseData)); @@ -343,8 +339,7 @@ void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { assertThat(updatedCaseData.getSharedLocalAuthorityPolicy()).isNull(); assertThat(updatedCaseData.getCaseLocalAuthority()).isEqualTo(LOCAL_AUTHORITY_2_CODE); assertThat(updatedCaseData.getCaseLocalAuthorityName()).isEqualTo(newDesignatedLocalAuthority.getName()); - assertThat(updatedCaseData.getCourt()).extracting("code", "name") - .containsExactly(WREXHAM.getCode(), "Family Court sitting at Wrexham"); + assertThat(updatedCaseData.getCourt()).isEqualTo(COURT_2); assertThat(updatedCaseData.getLocalAuthorities()).extracting(Element::getValue).containsExactly( LocalAuthority.builder() .id(newDesignatedLocalAuthority.getId()) @@ -364,8 +359,6 @@ void shouldTransferCaseToSecondaryLocalAuthorityAndCourt() { .reference(existingSolicitor.getReference()) .build())) .build()); - assertThat(updatedCaseData.getCaseManagementLocation()) - .isEqualTo(new CaseLocation(WREXHAM.getEpimmsId(), WREXHAM.getRegionId())); } @Test @@ -422,14 +415,14 @@ class TransferToAnotherCourt { @Test void shouldTransferToOrdinaryCourt() { - when(dfjAreaLookUpService.getDfjArea(WREXHAM.getCode())) + when(dfjAreaLookUpService.getDfjArea("384")) .thenReturn(dfjAreaCourtMapping); final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER_COURT) .courtsToTransferWithoutTransferLA(dynamicLists.from(1, - WORCESTER_LIST_ENTRY, - WREXHAM_LIST_ENTRY)) + Pair.of("Worcester", "380"), + Pair.of("Wrexham", "384"))) .build(); final CaseData initialCaseData = CaseData.builder() @@ -443,7 +436,7 @@ void shouldTransferToOrdinaryCourt() { final CaseData updatedCaseData = extractCaseData(resp); Court currentCourt = updatedCaseData.getCourt(); - assertThat(currentCourt.getCode()).isEqualTo(WREXHAM.getCode()); + assertThat(currentCourt.getCode()).isEqualTo("384"); assertThat(currentCourt.getName()).isEqualTo("Family Court sitting at Wrexham"); assertThat(currentCourt.getDateTransferred()).isNotNull(); assertThat(updatedCaseData.getPastCourtList()).hasSize(1); @@ -457,19 +450,19 @@ void shouldTransferToOrdinaryCourt() { assertThat(updatedCaseData.getDfjArea()).isEqualTo(dfjAreaCourtMapping.getDfjArea()); assertThat(updatedCaseData.getCourtField()).isNull(); assertThat(resp.getData()).extracting("caseManagementLocation") - .extracting("baseLocation", "region").containsExactly(WREXHAM.getEpimmsId(), WREXHAM.getRegionId()); + .extracting("baseLocation", "region").containsExactly("637145", "7"); } @Test void shouldTransferToOrdinaryCourtAgain() { - when(dfjAreaLookUpService.getDfjArea(WREXHAM.getCode())) + when(dfjAreaLookUpService.getDfjArea("384")) .thenReturn(dfjAreaCourtMapping); final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER_COURT) .courtsToTransferWithoutTransferLA(dynamicLists.from(1, - WORCESTER_LIST_ENTRY, - WREXHAM_LIST_ENTRY)) + Pair.of("Worcester", "380"), + Pair.of("Wrexham", "384"))) .build(); final CaseData initialCaseData = CaseData.builder() @@ -495,7 +488,7 @@ void shouldTransferToOrdinaryCourtAgain() { final CaseData updatedCaseData = extractCaseData(postAboutToSubmitEvent(initialCaseData)); Court currentCourt = updatedCaseData.getCourt(); - assertThat(currentCourt.getCode()).isEqualTo(WREXHAM.getCode()); + assertThat(currentCourt.getCode()).isEqualTo("384"); assertThat(currentCourt.getName()).isEqualTo("Family Court sitting at Wrexham"); assertThat(currentCourt.getDateTransferred()).isNotNull(); assertThat(updatedCaseData.getPastCourtList()).hasSize(2); @@ -517,7 +510,7 @@ void shouldTransferToRcjHighCourt() { final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER_COURT) .courtsToTransferWithoutTransferLA(dynamicLists.from(1, - WORCESTER_LIST_ENTRY, + Pair.of("Worcester", "380"), Pair.of(RCJ_HIGH_COURT_NAME, RCJ_HIGH_COURT_CODE))) .build(); @@ -550,13 +543,13 @@ void shouldTransferToRcjHighCourt() { @Test void shouldTransferOutOfTheHighCourt() { - when(dfjAreaLookUpService.getDfjArea(WORCESTER.getCode())) + when(dfjAreaLookUpService.getDfjArea("380")) .thenReturn(dfjAreaCourtMapping); final LocalAuthoritiesEventData eventData = LocalAuthoritiesEventData.builder() .localAuthorityAction(TRANSFER_COURT) .courtsToTransferWithoutTransferLA(dynamicLists.from(0, - WORCESTER_LIST_ENTRY, + Pair.of("Worcester", "380"), Pair.of(RCJ_HIGH_COURT_NAME, RCJ_HIGH_COURT_CODE))) .build(); @@ -570,7 +563,7 @@ void shouldTransferOutOfTheHighCourt() { final CaseData updatedCaseData = extractCaseData(postAboutToSubmitEvent(initialCaseData)); - assertThat(updatedCaseData.getCourt().getCode()).isEqualTo(WORCESTER.getCode()); + assertThat(updatedCaseData.getCourt().getCode()).isEqualTo("380"); assertThat(updatedCaseData.getCourt().getName()).isEqualTo("Family Court sitting at Worcester"); assertThat(updatedCaseData.getCourt().getDateTransferred()).isNotNull(); assertThat(updatedCaseData.getPastCourtList()).hasSize(1); diff --git a/service/src/integrationTest/resources/documents/document-sealed.pdf b/service/src/integrationTest/resources/documents/document-sealed.pdf index aba927228f1857c932ec64ec83fd49c75d863487..5a6c8d85a44682f4edc9172908396d9ef8fff869 100644 GIT binary patch delta 23121 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 IB}Gq03N()_9RL6T delta 34249 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 z

)jV7uD(GQwHgHey|= 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 orderWithExpectedMap() { Map childArrangementSpecificOrder = new HashMap<>(allQuestions); childArrangementSpecificOrder.put("approvalDate", "YES"); - childArrangementSpecificOrder.put("furtherDirections", "NO"); + childArrangementSpecificOrder.put("furtherDirections", "YES"); childArrangementSpecificOrder.put("orderDetails", "YES"); childArrangementSpecificOrder.put("whichChildren", "YES"); childArrangementSpecificOrder.put("childArrangementSpecificIssueProhibitedSteps", "YES"); diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGeneratorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGeneratorTest.java index 426b8f7db5e..6b42f64922c 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGeneratorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/C43ChildArrangementOrderDocumentParameterGeneratorTest.java @@ -23,8 +23,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; -import static uk.gov.hmcts.reform.fpl.enums.C43OrderType.PROHIBITED_STEPS_ORDER; -import static uk.gov.hmcts.reform.fpl.enums.C43OrderType.SPECIFIC_ISSUE_ORDER; import static uk.gov.hmcts.reform.fpl.service.orders.generator.C43ChildArrangementOrderDocumentParameterGenerator.CONDITIONS_MESSAGE; import static uk.gov.hmcts.reform.fpl.service.orders.generator.C43ChildArrangementOrderDocumentParameterGenerator.NOTICE_MESSAGE; import static uk.gov.hmcts.reform.fpl.service.orders.generator.C43ChildArrangementOrderDocumentParameterGenerator.WARNING_MESSAGE; @@ -37,16 +35,15 @@ public class C43ChildArrangementOrderDocumentParameterGeneratorTest { private static final String LA_NAME = "Local Authority Name"; private static final String CONSENT = "By consent"; private static final String ORDER_HEADER = "Warning \n"; - private static final String PROHIBITED_STEPS_DETAIL = "Prohibited steps order detail"; - private static final String SPECIFIC_ISSUE_DETAIL = "Specific issue order detail"; - private static final String CONTACT_WITH_DETAIL = "Contact with order detail"; - private static final String LIVE_WITH_DETAIL = "Live with order detail"; private static final String RECITALS_AND_PREAMBLES = "Recitals and Preambles"; private static final String DIRECTIONS = "Directions"; private static final String FURTHER_DIRECTIONS = "Further directions"; private static final String ORDER_TITLE = "Title"; - private static final String CHILD_LIVE_TEXT = "Child to live with"; - private static final String CHILD_CONTACT_TEXT = "Child to have contact with"; + private static final String CHILD_LIVE_TEXT = "The Child Arrangement Order is for the child to live with."; + private static final String CHILD_CONTACT_TEXT = + "The Child Arrangement Order is for the child to have contact with."; + private static final String BOTH_ARRANGEMENT_TEXT = + "The Child Arrangement Order is for the child to live with and have contact with."; private static final ChildArrangementsOrderType CHILD_LIVE = ChildArrangementsOrderType.CHILD_LIVE; private static final ChildArrangementsOrderType CHILD_CONTACT = ChildArrangementsOrderType.CHILD_CONTACT; @@ -76,7 +73,7 @@ void accept() { @Test void shouldShowWarningWhenChildArrangementOrder() { List c43OrderTypes = List.of(C43OrderType.CHILD_ARRANGEMENT_ORDER, - SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); + C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); CaseData caseData = buildCaseData(c43OrderTypes, List.of(CHILD_LIVE)); @@ -95,9 +92,9 @@ void shouldShowWarningWhenChildArrangementOrder() { @Test void shouldNotShowWarningWhenNoChildArrangementOrder() { List c43OrderTypes = List.of( - SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); + C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); - CaseData caseData = buildCaseData(c43OrderTypes, List.of()); + CaseData caseData = buildCaseData(c43OrderTypes, null); when(laNameLookup.getLocalAuthorityName(LA_CODE)).thenReturn(LA_NAME); when(orderMessageGenerator.getOrderByConsentMessage(any())).thenReturn(CONSENT); @@ -111,7 +108,7 @@ void shouldNotShowWarningWhenNoChildArrangementOrder() { @Test void shouldContainCorrectTextWhenChildArrangementOrderTypeIsLiveWith() { List c43OrderTypes = List.of(C43OrderType.CHILD_ARRANGEMENT_ORDER, - SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); + C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); CaseData caseData = buildCaseData(c43OrderTypes, List.of(CHILD_LIVE)); @@ -127,7 +124,7 @@ void shouldContainCorrectTextWhenChildArrangementOrderTypeIsLiveWith() { @Test void shouldContainCorrectTextWhenChildArrangementOrderTypeIsContactWith() { List c43OrderTypes = List.of(C43OrderType.CHILD_ARRANGEMENT_ORDER, - SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); + C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); CaseData caseData = buildCaseData(c43OrderTypes, List.of(CHILD_CONTACT)); @@ -143,7 +140,7 @@ void shouldContainCorrectTextWhenChildArrangementOrderTypeIsContactWith() { @Test void shouldContainCorrectTextWhenBothArrangementOrderTypeSelected() { List c43OrderTypes = List.of(C43OrderType.CHILD_ARRANGEMENT_ORDER, - SPECIFIC_ISSUE_ORDER, PROHIBITED_STEPS_ORDER); + C43OrderType.SPECIFIC_ISSUE_ORDER, C43OrderType.PROHIBITED_STEPS_ORDER); CaseData caseData = buildCaseData(c43OrderTypes, List.of(CHILD_LIVE, CHILD_CONTACT)); @@ -153,8 +150,7 @@ void shouldContainCorrectTextWhenBothArrangementOrderTypeSelected() { DocmosisParameters generatedParameters = underTest.generate(caseData); - assertThat(generatedParameters.toString()).contains(CHILD_LIVE_TEXT); - assertThat(generatedParameters.toString()).contains(CHILD_CONTACT_TEXT); + assertThat(generatedParameters.toString()).contains(BOTH_ARRANGEMENT_TEXT); } @Test @@ -170,14 +166,6 @@ private CaseData buildCaseData(List c43OrderTypes, .manageOrdersType(Order.C43_CHILD_ARRANGEMENTS_SPECIFIC_ISSUE_PROHIBITED_STEPS_ORDER) .manageOrdersIsByConsent("No") .manageOrdersMultiSelectListForC43(c43OrderTypes) - .manageOrdersProhibitedStepsOrderDetails( - c43OrderTypes.contains(PROHIBITED_STEPS_ORDER) ? PROHIBITED_STEPS_DETAIL : null) - .manageOrdersSpecificIssueOrderDetails( - c43OrderTypes.contains(SPECIFIC_ISSUE_ORDER) ? SPECIFIC_ISSUE_DETAIL : null) - .manageOrdersChildArrangementsLiveWithDetails( - childArrOrderType.contains(CHILD_LIVE) ? LIVE_WITH_DETAIL : null) - .manageOrdersChildArrangementsContactWithDetails( - childArrOrderType.contains(CHILD_CONTACT) ? CONTACT_WITH_DETAIL : null) .manageOrdersRecitalsAndPreambles(RECITALS_AND_PREAMBLES) .manageOrdersDirections(DIRECTIONS) .manageOrdersFurtherDirections(FURTHER_DIRECTIONS) @@ -188,8 +176,7 @@ private CaseData buildCaseData(List c43OrderTypes, private C43ChildArrangementOrderDocmosisParameters.C43ChildArrangementOrderDocmosisParametersBuilder expectedCommonParameters() { - String orderDetails = String.format("The Court orders,\n\nSpecific Issue\n\n%s\n\nProhibited Steps\n\n%s", - SPECIFIC_ISSUE_DETAIL, PROHIBITED_STEPS_DETAIL); + String orderDetails = "The Court orders"; String directions = String.format("%s\n\n%s\n\n%s", DIRECTIONS, FURTHER_DIRECTIONS, CONDITIONS_MESSAGE); String noticeMessage = String.format(NOTICE_MESSAGE, PASSPORT_OFFICE_ADDRESS, PASSPORT_OFFICE_EMAIL); @@ -198,8 +185,6 @@ private CaseData buildCaseData(List c43OrderTypes, .orderTitle(ORDER_TITLE) .recitalsOrPreamble(RECITALS_AND_PREAMBLES) .orderByConsent(CONSENT) - .prohibitedStepsOrderDetails(PROHIBITED_STEPS_DETAIL) - .specificIssueOrderDetails(SPECIFIC_ISSUE_DETAIL) .orderDetails(orderDetails) .furtherDirections(directions) .localAuthorityName(LA_NAME) @@ -209,9 +194,7 @@ private CaseData buildCaseData(List c43OrderTypes, private C43ChildArrangementOrderDocmosisParameters.C43ChildArrangementOrderDocmosisParametersBuilder expectedCommonParametersChildArrangementOrder() { - String orderDetails = String.format("The Court orders,\n\nThe Child Arrangement Order is for the:" - + "\n\nChild to live with\n\n%s\n\nSpecific Issue\n\n%s\n\nProhibited Steps\n\n%s", - LIVE_WITH_DETAIL, SPECIFIC_ISSUE_DETAIL, PROHIBITED_STEPS_DETAIL); + String orderDetails = String.format("The Court orders\n\n%s", CHILD_LIVE_TEXT); String directions = String.format("%s\n\n%s\n\n%s", DIRECTIONS, FURTHER_DIRECTIONS, CONDITIONS_MESSAGE); String noticeMessage = String.format(NOTICE_MESSAGE, PASSPORT_OFFICE_ADDRESS, PASSPORT_OFFICE_EMAIL); @@ -219,9 +202,6 @@ private CaseData buildCaseData(List c43OrderTypes, return C43ChildArrangementOrderDocmosisParameters.builder() .orderTitle(ORDER_TITLE) .recitalsOrPreamble(RECITALS_AND_PREAMBLES) - .childArrangementsLiveWithDetails(LIVE_WITH_DETAIL) - .specificIssueOrderDetails(SPECIFIC_ISSUE_DETAIL) - .prohibitedStepsOrderDetails(PROHIBITED_STEPS_DETAIL) .orderByConsent(CONSENT) .orderDetails(orderDetails) .furtherDirections(directions) diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/DocmosisCommonElementDecoratorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/DocmosisCommonElementDecoratorTest.java index 0476a1bf833..07cc6672f4e 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/DocmosisCommonElementDecoratorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/orders/generator/DocmosisCommonElementDecoratorTest.java @@ -44,7 +44,7 @@ class DocmosisCommonElementDecoratorTest { private static final String CHILDREN_ACT = "Children act for order"; private static final String CREST = "[userImage:crest.png]"; private static final String WATERMARK = "[userImage:draft-watermark.png]"; - private static final String SEAL = "[userImage:FL-PLW-familycourtsealV2.png]"; + private static final String SEAL = "[userImage:familycourtseal.png]"; private static final LocalDate APPROVAL_DATE = LocalDate.of(2021, 4, 20); private static final String EXPECTED_APPROVAL_DATE = "20 April 2021"; private static final JudgeAndLegalAdvisor JUDGE = mock(JudgeAndLegalAdvisor.class); diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGeneratorTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGeneratorTest.java index 14c94ad5085..670100ac498 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGeneratorTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/translations/TranslatedDocumentGeneratorTest.java @@ -39,7 +39,7 @@ void testProcessor() { when(documentDownloadService.downloadDocument(BINARY_URL)).thenReturn(UPLOADED_FILE_BYTES); when(documentConversionService.convertToPdf(UPLOADED_FILE_BYTES, FILENAME)).thenReturn(CONVERTED_PDF_FILE_BYTES); - when(documentSealingService.sealDocument(CONVERTED_PDF_FILE_BYTES, COURT, SealType.WELSH)).thenReturn( + when(documentSealingService.sealDocument(CONVERTED_PDF_FILE_BYTES, COURT, SealType.BILINGUAL)).thenReturn( CONVERTED_SEALED_PDF_FILE_BYTES); byte[] actual = underTest.generate(CaseData.builder() diff --git a/service/src/test/resources/documents/document-sealed.pdf b/service/src/test/resources/documents/document-sealed.pdf index aba927228f1857c932ec64ec83fd49c75d863487..5a6c8d85a44682f4edc9172908396d9ef8fff869 100644 GIT binary patch delta 23121 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 IB}Gq03N()_9RL6T delta 34249 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 z

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 hL0$x&) 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