From eb7799f86d8cd3f3a1bb2ce7cd94e62bb1b6a588 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Thu, 26 Mar 2026 17:15:53 +0000 Subject: [PATCH 01/19] FPVTL-2345. --- .../models/dto/citizen/DocumentCategory.java | 4 ++++ .../hmcts/reform/prl/services/DgsService.java | 15 +++++++++++- .../services/document/DocumentGenService.java | 24 +++++++++++++------ src/main/resources/application.yaml | 1 + .../reform/prl/services/DgsServiceTest.java | 13 +++++++--- 5 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/models/dto/citizen/DocumentCategory.java b/src/main/java/uk/gov/hmcts/reform/prl/models/dto/citizen/DocumentCategory.java index 1b669561fac..f9e3685ba9a 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/models/dto/citizen/DocumentCategory.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/models/dto/citizen/DocumentCategory.java @@ -57,6 +57,10 @@ public static DocumentCategory getValue(String id) { return DocumentCategory.valueOf(id); } + public boolean isWitnessStatement() { + return WITNESS_STATEMENTS_APPLICANT.equals(this) || WITNESS_STATEMENTS_RESPONDENT.equals(this); + } + private static class Constants { public static final String ANY_OTHER_DOC = "anyOtherDoc"; public static final String ANY_OTHER_DOCUMENTS = "Any Other Documents"; diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java index 5c41515e818..fc47772b878 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java @@ -1,5 +1,6 @@ package uk.gov.hmcts.reform.prl.services; +import com.fasterxml.jackson.databind.ObjectMapper; import feign.FeignException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -18,10 +19,14 @@ import uk.gov.hmcts.reform.prl.models.dto.ccd.CaseDetails; import uk.gov.hmcts.reform.prl.models.dto.citizen.DocumentRequest; import uk.gov.hmcts.reform.prl.models.dto.citizen.GenerateAndUploadDocumentRequest; +import uk.gov.hmcts.reform.prl.services.citizen.CaseService; +import uk.gov.hmcts.reform.prl.utils.CaseUtils; +import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; +import static java.util.Objects.nonNull; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C100_CASE_TYPE; @Slf4j @@ -34,6 +39,8 @@ public class DgsService { private final AllegationOfHarmRevisedService allegationOfHarmService; private final HearingDataService hearingDataService; private final UserRoleService userRoleService; + private final CaseService caseService; + private final ObjectMapper objectMapper; private static final String CASE_DETAILS_STRING = "caseDetails"; private static final String ERROR_MESSAGE = "Error generating and storing document for case {}"; @@ -193,12 +200,18 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, String prlCitizenUploadTemplate) throws DocumentGenerationException { Map tempCaseDetails = new HashMap<>(); String caseId = documentRequest.getCaseId(); - + uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = caseService.getCase(authorisation, caseId); + CaseData caseDataFromCcd = nonNull(caseDetailsFromCcd) ? CaseUtils.getCaseData(caseDetailsFromCcd, objectMapper) : null; CaseDetails caseDetails = CaseDetails.builder() .caseId(caseId) .caseData(CaseData.builder() .id(Long.parseLong(caseId)) .citizenUploadedStatement(documentRequest.getFreeTextStatements()) + .applicantName(documentRequest.getPartyName()) + .applicantCaseName(nonNull(caseDataFromCcd) ? caseDataFromCcd.getApplicantCaseName() : null) + .issueDate(nonNull(caseDataFromCcd) ? caseDataFromCcd.getIssueDate() : null) + .familymanCaseNumber(nonNull(caseDataFromCcd) ? caseDataFromCcd.getFamilymanCaseNumber() : null) + .lastModifiedDate(LocalDateTime.now()) .build()) .build(); tempCaseDetails.put( diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java index 9415ce0132b..edecb8f3993 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java @@ -50,9 +50,9 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.Objects; import java.util.Optional; +import static java.util.Objects.nonNull; import static java.util.Optional.ofNullable; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C100_CASE_TYPE; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C1A_DRAFT_HINT; @@ -269,6 +269,8 @@ public class DocumentGenService { protected String privacyNoticeFilename; @Value("${document.templates.citizen.prl_citizen_upload_template}") protected String prlCitizenUploadTemplate; + @Value("${document.templates.citizen.prl_citizen_witness_statement_template}") + protected String prlCitizenWitnessStatementTemplate; @Value("${document.templates.citizen.prl_citizen_upload_filename}") protected String prlCitizenUploadFileName; @Value("${document.templates.fl401listonnotice.prl_fl404b_for_da_list_on_notice_template}") @@ -689,15 +691,15 @@ public Map generateC7DraftDocuments(String authorisation, CaseDa return updatedCaseData; } - private String getCitizenUploadedStatementFileName(DocumentRequest documentRequest) { + private String getCitizenUploadedStatementFileName(DocumentRequest documentRequest, DocumentCategory documentCategory) { StringBuilder fileNameBuilder = new StringBuilder(); if (null != documentRequest.getPartyName()) { fileNameBuilder.append(documentRequest.getPartyName().replace(EMPTY_SPACE_STRING, UNDERSCORE)); fileNameBuilder.append(UNDERSCORE); } - if (null != documentRequest.getCategoryId()) { - fileNameBuilder.append(DocumentCategory.getValue(documentRequest.getCategoryId()).getFileNamePrefix()); + if (nonNull(documentCategory)) { + fileNameBuilder.append(documentCategory.getFileNamePrefix()); fileNameBuilder.append(UNDERSCORE); } fileNameBuilder.append(dateTime.now().format(DateTimeFormatter.ofPattern("dd-MMM-yyyy-hh-mm-ss-a", Locale.UK))); @@ -1184,7 +1186,7 @@ private boolean isChildrenDetailsConfidentiality(CaseData caseData, if (typeOfApplicationOrders.isPresent() && typeOfApplicationOrders.get().getOrderType().contains( FL401OrderTypeEnum.occupationOrder) - && Objects.nonNull(caseData.getHome()) + && nonNull(caseData.getHome()) && YesOrNo.Yes.equals(caseData.getHome().getDoAnyChildrenLiveAtAddress())) { List childrenLiveAtAddresses = caseData.getHome().getChildren().stream().map(Element::getValue).toList(); @@ -1530,15 +1532,23 @@ public Document convertToPdf(String authorisation, Document document) { public DocumentResponse generateAndUploadDocument(String authorisation, DocumentRequest documentRequest) throws DocumentGenerationException { + String categoryId = documentRequest.getCategoryId(); + DocumentCategory documentCategory = nonNull(categoryId) ? DocumentCategory.getValue(categoryId) : null; + //generate file name - String fileName = getCitizenUploadedStatementFileName(documentRequest); + String fileName = getCitizenUploadedStatementFileName(documentRequest, documentCategory); log.info("fileName {}", fileName); + String citizenUploadTemplate = nonNull(documentCategory) && documentCategory.isWitnessStatement() + ? prlCitizenWitnessStatementTemplate : prlCitizenUploadTemplate; + + GeneratedDocumentInfo generatedDocumentInfo = dgsService.generateCitizenDocument( authorisation, documentRequest, - prlCitizenUploadTemplate + citizenUploadTemplate ); + log.info("generatedDocumentInfo {}", generatedDocumentInfo); if (null != generatedDocumentInfo) { return DocumentResponse.builder() diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 809271cc2a9..00dbb26a8f8 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -732,6 +732,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx prl_citizen_upload_filename: Citizen_Uploaded_Statement.pdf fl401listonnotice: diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index c1e6ab47076..4caeab9c4df 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -1,11 +1,11 @@ package uk.gov.hmcts.reform.prl.services; +import com.fasterxml.jackson.databind.ObjectMapper; import feign.FeignException; import org.junit.Before; import org.junit.Test; import org.junit.function.ThrowingRunnable; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; @@ -20,6 +20,7 @@ import uk.gov.hmcts.reform.prl.models.dto.ccd.ManageOrders; import uk.gov.hmcts.reform.prl.models.dto.citizen.DocumentRequest; import uk.gov.hmcts.reform.prl.models.dto.citizen.GenerateAndUploadDocumentRequest; +import uk.gov.hmcts.reform.prl.services.citizen.CaseService; import java.util.HashMap; import java.util.List; @@ -36,11 +37,16 @@ @RunWith(MockitoJUnitRunner.class) public class DgsServiceTest { - @InjectMocks private DgsService dgsService; @Mock private DgsApiClient dgsApiClient; + + @Mock + private CaseService caseService; + + private ObjectMapper objectMapper = new ObjectMapper(); + @Mock private UserRoleService userRoleService; @@ -63,7 +69,8 @@ public class DgsServiceTest { @Before public void setUp() { - + dgsService = new DgsService(dgsApiClient, allegationOfHarmRevisedService, hearingDataService, + userRoleService, caseService, objectMapper); caseData = CaseData.builder() .manageOrders(ManageOrders.builder() .ordersHearingDetails( From 3281411082ad6363191f0a13cf0cdbbecdfca132 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Thu, 26 Mar 2026 17:33:56 +0000 Subject: [PATCH 02/19] FPVTL-2345. --- src/integrationTest/resources/application.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/integrationTest/resources/application.yaml b/src/integrationTest/resources/application.yaml index af81e03e6f2..3caf61b691c 100644 --- a/src/integrationTest/resources/application.yaml +++ b/src/integrationTest/resources/application.yaml @@ -722,6 +722,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx prl_citizen_upload_filename: Citizen_Uploaded_Statement.pdf fl401listonnotice: From aefc708d6f89a14419fd1319cb264fc232950e5e Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Fri, 27 Mar 2026 10:47:13 +0000 Subject: [PATCH 03/19] FPVTL-2345. --- .../models/dto/citizen/DocumentCategory.java | 8 ++ .../hmcts/reform/prl/services/DgsService.java | 9 +- .../services/document/DocumentGenService.java | 3 +- .../reform/prl/services/DgsServiceTest.java | 118 +++++++++++------- .../document/DocumentGenServiceTest.java | 4 +- 5 files changed, 95 insertions(+), 47 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/models/dto/citizen/DocumentCategory.java b/src/main/java/uk/gov/hmcts/reform/prl/models/dto/citizen/DocumentCategory.java index f9e3685ba9a..786d7082bf9 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/models/dto/citizen/DocumentCategory.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/models/dto/citizen/DocumentCategory.java @@ -61,6 +61,14 @@ public boolean isWitnessStatement() { return WITNESS_STATEMENTS_APPLICANT.equals(this) || WITNESS_STATEMENTS_RESPONDENT.equals(this); } + public boolean isApplicantWitnessStatement() { + return WITNESS_STATEMENTS_APPLICANT.equals(this); + } + + public boolean isRespondentWitnessStatement() { + return WITNESS_STATEMENTS_RESPONDENT.equals(this); + } + private static class Constants { public static final String ANY_OTHER_DOC = "anyOtherDoc"; public static final String ANY_OTHER_DOCUMENTS = "Any Other Documents"; diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java index fc47772b878..fc2584268a8 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java @@ -17,6 +17,7 @@ import uk.gov.hmcts.reform.prl.models.dto.GeneratedDocumentInfo; import uk.gov.hmcts.reform.prl.models.dto.ccd.CaseData; import uk.gov.hmcts.reform.prl.models.dto.ccd.CaseDetails; +import uk.gov.hmcts.reform.prl.models.dto.citizen.DocumentCategory; import uk.gov.hmcts.reform.prl.models.dto.citizen.DocumentRequest; import uk.gov.hmcts.reform.prl.models.dto.citizen.GenerateAndUploadDocumentRequest; import uk.gov.hmcts.reform.prl.services.citizen.CaseService; @@ -197,7 +198,8 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, public GeneratedDocumentInfo generateCitizenDocument(String authorisation, DocumentRequest documentRequest, - String prlCitizenUploadTemplate) throws DocumentGenerationException { + String prlCitizenUploadTemplate, + DocumentCategory documentCategory) throws DocumentGenerationException { Map tempCaseDetails = new HashMap<>(); String caseId = documentRequest.getCaseId(); uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = caseService.getCase(authorisation, caseId); @@ -207,7 +209,10 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, .caseData(CaseData.builder() .id(Long.parseLong(caseId)) .citizenUploadedStatement(documentRequest.getFreeTextStatements()) - .applicantName(documentRequest.getPartyName()) + .applicantName(nonNull(documentCategory) && documentCategory.isApplicantWitnessStatement() + ? documentRequest.getPartyName() : "") + .respondentName(nonNull(documentCategory) && documentCategory.isRespondentWitnessStatement() + ? documentRequest.getPartyName() : "") .applicantCaseName(nonNull(caseDataFromCcd) ? caseDataFromCcd.getApplicantCaseName() : null) .issueDate(nonNull(caseDataFromCcd) ? caseDataFromCcd.getIssueDate() : null) .familymanCaseNumber(nonNull(caseDataFromCcd) ? caseDataFromCcd.getFamilymanCaseNumber() : null) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java index edecb8f3993..222b7d4b433 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java @@ -1546,7 +1546,8 @@ public DocumentResponse generateAndUploadDocument(String authorisation, GeneratedDocumentInfo generatedDocumentInfo = dgsService.generateCitizenDocument( authorisation, documentRequest, - citizenUploadTemplate + citizenUploadTemplate, + documentCategory ); log.info("generatedDocumentInfo {}", generatedDocumentInfo); diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index 4caeab9c4df..7ad6b251555 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -31,12 +31,15 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class DgsServiceTest { + public static final String AUTHORISATION = " "; + public static final String TEMPLATE = "template"; private DgsService dgsService; @Mock @@ -45,7 +48,8 @@ public class DgsServiceTest { @Mock private CaseService caseService; - private ObjectMapper objectMapper = new ObjectMapper(); + @Mock + private ObjectMapper objectMapper; @Mock private UserRoleService userRoleService; @@ -71,6 +75,7 @@ public class DgsServiceTest { public void setUp() { dgsService = new DgsService(dgsApiClient, allegationOfHarmRevisedService, hearingDataService, userRoleService, caseService, objectMapper); + caseData = CaseData.builder() .manageOrders(ManageOrders.builder() .ordersHearingDetails( @@ -108,10 +113,11 @@ public void setUp() { .restrictDocumentDetails("test details") .freeTextStatements("free text to generate document") .build(); + when(objectMapper.convertValue(any(), eq(CaseData.class))).thenReturn(caseData); } @Test - public void testToGenerateDocument() throws Exception { + public void testToGenerateDocument() { generatedDocumentInfo = GeneratedDocumentInfo.builder() .url("TestUrl") .binaryUrl("binaryUrl") @@ -125,7 +131,7 @@ public void testToGenerateDocument() throws Exception { } @Test - public void testToGenerateDocumentWithCaseData() throws Exception { + public void testToGenerateDocumentWithCaseData() { Map respondentDetails = new HashMap<>(); generatedDocumentInfo = GeneratedDocumentInfo.builder() .url("TestUrl") @@ -150,7 +156,7 @@ public void testToGenerateCoverLetterDocument() throws Exception { } @Test - public void testToGenerateDocumentWithCaseDataNoDataExpectedException() throws Exception { + public void testToGenerateDocumentWithCaseDataNoDataExpectedException() { dgsService.generateDocument(authToken,null, PRL_DRAFT_TEMPLATE, null); Throwable exception = assertThrows(Exception.class, () -> { throw new Exception("Error generating and storing document for case"); @@ -159,7 +165,7 @@ public void testToGenerateDocumentWithCaseDataNoDataExpectedException() throws E } @Test - public void testToGenerateDocumentWithNoDataExpectedException() throws Exception { + public void testToGenerateDocumentWithNoDataExpectedException() { Map dataMap = new HashMap<>(); Mockito.doNothing().when(hearingDataService).populatePartiesAndSolicitorsNames(caseData, dataMap); dgsService.generateDocument(authToken, caseDetails, PRL_DRAFT_TEMPLATE); @@ -170,7 +176,7 @@ public void testToGenerateDocumentWithNoDataExpectedException() throws Exception } @Test - public void testToGenerateWelshDocument() throws Exception { + public void testToGenerateWelshDocument() { generatedDocumentInfo = GeneratedDocumentInfo.builder() .url("TestUrl") .binaryUrl("binaryUrl") @@ -197,12 +203,12 @@ public void testToGenerateWelshDocumentWithCaseData() { @Test public void testgenerateCitizenDocument() throws Exception { - dgsService.generateCitizenDocument(" ", generateAndUploadDocumentRequest, " "); + dgsService.generateCitizenDocument(AUTHORISATION, generateAndUploadDocumentRequest, AUTHORISATION); assertEquals("test", generateAndUploadDocumentRequest.getValues().get("freeTextUploadStatements")); } @Test - public void testToGenerateDocumentWithEmptyHearingsData() throws Exception { + public void testToGenerateDocumentWithEmptyHearingsData() { CaseData caseData1 = CaseData.builder().manageOrders(ManageOrders.builder().build()).build(); CaseDetails caseDetails1 = CaseDetails.builder() .caseId("123") @@ -213,22 +219,42 @@ public void testToGenerateDocumentWithEmptyHearingsData() throws Exception { } @Test - public void testGenerateCitizenDocument() throws Exception { - //Given - generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") - .binaryUrl("binaryUrl") - .hashToken("testHashToken") + public void testGenerateCitizenDocument() { + // Given + setUpGenerateCitizenDocument(); + + // When + GeneratedDocumentInfo response = dgsService.generateCitizenDocument( + AUTHORISATION, documentRequest, + TEMPLATE, null + ); + + // Then + assertNotNull(response); + assertNotNull(response.getBinaryUrl()); + assertNotNull(response.getHashToken()); + } + + + + + @Test + public void testGenerateCitizenDocumentWithCaseDetailsRetrievedFromCcd() { + // Given + setUpGenerateCitizenDocument(); + uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = uk.gov.hmcts.reform.ccd.client.model.CaseDetails.builder() + .id(Long.parseLong(documentRequest.getCaseId())) .build(); - //When - doReturn(generatedDocumentInfo).when(dgsApiClient).generateDocument( - Mockito.anyString(), - Mockito.any(GenerateDocumentRequest.class) - ); - //Action - GeneratedDocumentInfo response = dgsService.generateCitizenDocument(" ", documentRequest, " "); + when(caseService.getCase(AUTHORISATION, documentRequest.getCaseId())).thenReturn(caseDetailsFromCcd); + + + // When + GeneratedDocumentInfo response = dgsService.generateCitizenDocument( + AUTHORISATION, documentRequest, + TEMPLATE, null + ); //Then assertNotNull(response); @@ -245,9 +271,8 @@ public void testGenerateCitizenDocumentThrowsFeignException() { .build(); when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); - assertExpectedException(() -> { - dgsService.generateCitizenDocument(" ", generateAndUploadDocumentRequest, " "); - }, DocumentGenerationException.class, null); + assertExpectedException(() -> dgsService.generateCitizenDocument(AUTHORISATION, generateAndUploadDocumentRequest, AUTHORISATION), + DocumentGenerationException.class, null); } @Test @@ -259,9 +284,8 @@ public void testGenerateCitizenDocumentCitizenUploadThrowsException() { .build(); when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); - assertExpectedException(() -> { - dgsService.generateCitizenDocument(" ", documentRequest, " "); - }, DocumentGenerationException.class, null); + assertExpectedException(() -> dgsService.generateCitizenDocument(AUTHORISATION, documentRequest, TEMPLATE, null), + DocumentGenerationException.class, null); } @@ -276,10 +300,8 @@ public void testToGenerateCoverLetterDocumentThrowsException() { .build(); when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); - assertExpectedException(() -> { - dgsService.generateCoverLetterDocument(authToken, dataMap, PRL_DRAFT_TEMPLATE, - "123"); - }, DocumentGenerationException.class, null); + assertExpectedException(() -> dgsService.generateCoverLetterDocument(authToken, dataMap, PRL_DRAFT_TEMPLATE, + "123"), DocumentGenerationException.class, null); } @@ -292,9 +314,8 @@ public void testToGenerateWelshDocumentThrowsException() { .build(); when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); - assertExpectedException(() -> { - dgsService.generateWelshDocument(authToken, caseDetails, PRL_DRAFT_TEMPLATE); - }, DocumentGenerationException.class, null); + assertExpectedException(() -> dgsService.generateWelshDocument(authToken, caseDetails, PRL_DRAFT_TEMPLATE), + DocumentGenerationException.class, null); } @Test @@ -308,9 +329,8 @@ public void testToGenerateDocumentThrowsException() { Mockito.doNothing().when(hearingDataService).populatePartiesAndSolicitorsNames(caseData, dataMap); when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); - assertExpectedException(() -> { - dgsService.generateDocument(authToken, caseDetails, PRL_DRAFT_TEMPLATE); - }, DocumentGenerationException.class, null); + assertExpectedException(() -> dgsService.generateDocument(authToken, caseDetails, PRL_DRAFT_TEMPLATE), + DocumentGenerationException.class, null); } @Test @@ -323,9 +343,8 @@ public void testToGenerateDocumentWithCaseDataThrowsRuntimeExcetion() { .build(); when(dgsApiClient.generateDocument(any(),any())).thenThrow(RuntimeException.class); - assertExpectedException(() -> { - dgsService.generateDocument(authToken, null, PRL_DRAFT_TEMPLATE,respondentDetails); - }, DocumentGenerationException.class, null); + assertExpectedException(() -> dgsService.generateDocument(authToken, null, PRL_DRAFT_TEMPLATE, respondentDetails), + DocumentGenerationException.class, null); } @@ -339,9 +358,8 @@ public void testToGenerateDocumentWithCaseDataThrowsExcetion() { .build(); when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); - assertExpectedException(() -> { - dgsService.generateDocument(authToken, null, PRL_DRAFT_TEMPLATE,respondentDetails); - }, DocumentGenerationException.class, null); + assertExpectedException(() -> dgsService.generateDocument(authToken, null, PRL_DRAFT_TEMPLATE, respondentDetails), + DocumentGenerationException.class, null); } @@ -351,5 +369,19 @@ protected void assertExpectedException(ThrowingRunnable me assertEquals(expectedMessage, exception.getMessage()); } + private void setUpGenerateCitizenDocument() { + generatedDocumentInfo = GeneratedDocumentInfo.builder() + .url("TestUrl") + .binaryUrl("binaryUrl") + .hashToken("testHashToken") + .build(); + + + doReturn(generatedDocumentInfo).when(dgsApiClient).generateDocument( + Mockito.anyString(), + Mockito.any(GenerateDocumentRequest.class) + ); + } + } diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java index 97b5b00c1c3..bf9e38d3165 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java @@ -52,6 +52,7 @@ import uk.gov.hmcts.reform.prl.models.dto.ccd.AllegationOfHarmRevised; import uk.gov.hmcts.reform.prl.models.dto.ccd.CaseData; import uk.gov.hmcts.reform.prl.models.dto.ccd.CaseDetails; +import uk.gov.hmcts.reform.prl.models.dto.citizen.DocumentCategory; import uk.gov.hmcts.reform.prl.models.dto.citizen.DocumentRequest; import uk.gov.hmcts.reform.prl.models.dto.citizen.GenerateAndUploadDocumentRequest; import uk.gov.hmcts.reform.prl.models.language.DocumentLanguage; @@ -2700,7 +2701,8 @@ public void testGenerateAndUploadDocument() { doReturn(generatedDocumentInfo).when(dgsService).generateCitizenDocument( Mockito.anyString(), Mockito.any(DocumentRequest.class), - Mockito.any() + Mockito.any(), + any(DocumentCategory.class) ); when(dateTime.now()).thenReturn(LocalDateTime.now()); From 364f2258354cd524950165ed389239c5813bc67b Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Fri, 27 Mar 2026 11:51:45 +0000 Subject: [PATCH 04/19] FPVTL-2345. --- .../hmcts/reform/prl/services/DgsService.java | 14 ++--- .../reform/prl/services/DgsServiceTest.java | 59 ++++++++++++------- .../document/DocumentGenServiceTest.java | 7 ++- 3 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java index fc2584268a8..73ea9468f52 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java @@ -55,9 +55,6 @@ public GeneratedDocumentInfo generateDocument(String authorisation, String caseI .builder().template(templateName).values(dataMap).build() ); - } catch (FeignException ex) { - log.error(ERROR_MESSAGE, caseId); - throw new DocumentGenerationException(ex.getMessage(), ex); } catch (Exception ex) { log.error(ERROR_MESSAGE, caseId); throw new DocumentGenerationException(ex.getMessage(), ex); @@ -101,8 +98,7 @@ public GeneratedDocumentInfo generateDocument(String authorisation, CaseDetails public GeneratedDocumentInfo generateWelshDocument(String authorisation, String caseId, String caseTypeOfApplication, String templateName, Map dataMap) { - Map welshDataMap = new HashMap<>(); - welshDataMap.putAll(dataMap); + Map welshDataMap = new HashMap<>(dataMap); welshDataMap.forEach((k, v) -> { if (v != null) { Object updatedWelshObj = WelshLangMapper.applyWelshTranslation(k, v, @@ -164,7 +160,7 @@ public GeneratedDocumentInfo generateWelshDocument(String authorisation, CaseDet public GeneratedDocumentInfo generateCitizenDocument(String authorisation, GenerateAndUploadDocumentRequest generateAndUploadDocumentRequest, - String templateName) throws Exception { + String templateName) { Map tempCaseDetails = new HashMap<>(); String freeTextUploadStatements = null; @@ -174,7 +170,7 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, } String caseId = generateAndUploadDocumentRequest.getValues().get("caseId"); CaseDetails caseDetails = CaseDetails.builder().caseId(caseId).state("ISSUE") - .caseData(CaseData.builder().id(Long.valueOf(caseId)) + .caseData(CaseData.builder().id(Long.parseLong(caseId)) .citizenUploadedStatement(freeTextUploadStatements).build()).build(); tempCaseDetails.put( CASE_DETAILS_STRING, @@ -182,7 +178,7 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, ); - GeneratedDocumentInfo generatedDocumentInfo = null; + GeneratedDocumentInfo generatedDocumentInfo; try { generatedDocumentInfo = dgsApiClient.generateDocument(authorisation, GenerateDocumentRequest @@ -224,7 +220,7 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, AppObjectMapper.getObjectMapper().convertValue(caseDetails, Map.class) ); - GeneratedDocumentInfo generatedDocumentInfo = null; + GeneratedDocumentInfo generatedDocumentInfo; try { generatedDocumentInfo = dgsApiClient.generateDocument( diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index 7ad6b251555..0a788ca40c7 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -18,6 +18,7 @@ import uk.gov.hmcts.reform.prl.models.dto.ccd.CaseDetails; import uk.gov.hmcts.reform.prl.models.dto.ccd.HearingData; import uk.gov.hmcts.reform.prl.models.dto.ccd.ManageOrders; +import uk.gov.hmcts.reform.prl.models.dto.citizen.DocumentCategory; import uk.gov.hmcts.reform.prl.models.dto.citizen.DocumentRequest; import uk.gov.hmcts.reform.prl.models.dto.citizen.GenerateAndUploadDocumentRequest; import uk.gov.hmcts.reform.prl.services.citizen.CaseService; @@ -38,8 +39,9 @@ @RunWith(MockitoJUnitRunner.class) public class DgsServiceTest { - public static final String AUTHORISATION = " "; - public static final String TEMPLATE = "template"; + private static final String AUTHORISATION = " "; + private static final String TEMPLATE = "template"; + public static final String TEST_URL = "TestUrl"; private DgsService dgsService; @Mock @@ -91,7 +93,7 @@ public void setUp() { .caseData(caseData) .build(); generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -119,7 +121,7 @@ public void setUp() { @Test public void testToGenerateDocument() { generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -134,7 +136,7 @@ public void testToGenerateDocument() { public void testToGenerateDocumentWithCaseData() { Map respondentDetails = new HashMap<>(); generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -147,7 +149,7 @@ public void testToGenerateCoverLetterDocument() throws Exception { Map dataMap = new HashMap<>(); dataMap.put("coverLetter", "test.pdf"); generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -178,7 +180,7 @@ public void testToGenerateDocumentWithNoDataExpectedException() { @Test public void testToGenerateWelshDocument() { generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -192,7 +194,7 @@ public void testToGenerateWelshDocumentWithCaseData() { Map respondentDetails = new HashMap<>(); respondentDetails.put("fullName", "test"); generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -202,9 +204,24 @@ public void testToGenerateWelshDocumentWithCaseData() { } @Test - public void testgenerateCitizenDocument() throws Exception { - dgsService.generateCitizenDocument(AUTHORISATION, generateAndUploadDocumentRequest, AUTHORISATION); - assertEquals("test", generateAndUploadDocumentRequest.getValues().get("freeTextUploadStatements")); + public void testgenerateCitizenDocument() { + Map values = new HashMap<>(); + values.put("caseId","123"); + GenerateAndUploadDocumentRequest generateAndUploadDocumentRequest = GenerateAndUploadDocumentRequest + .builder() + .values(values) + .build(); + + // when + GeneratedDocumentInfo result = dgsService.generateCitizenDocument( + AUTHORISATION, + generateAndUploadDocumentRequest, + AUTHORISATION + ); + + // then + assertNotNull(result); + assertEquals(TEST_URL, result.getUrl()); } @Test @@ -226,7 +243,7 @@ public void testGenerateCitizenDocument() { // When GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, - TEMPLATE, null + TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_APPLICANT ); // Then @@ -253,7 +270,7 @@ public void testGenerateCitizenDocumentWithCaseDetailsRetrievedFromCcd() { // When GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, - TEMPLATE, null + TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_RESPONDENT ); //Then @@ -265,7 +282,7 @@ public void testGenerateCitizenDocumentWithCaseDetailsRetrievedFromCcd() { @Test public void testGenerateCitizenDocumentThrowsFeignException() { generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -278,7 +295,7 @@ public void testGenerateCitizenDocumentThrowsFeignException() { @Test public void testGenerateCitizenDocumentCitizenUploadThrowsException() { generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -294,7 +311,7 @@ public void testToGenerateCoverLetterDocumentThrowsException() { Map dataMap = new HashMap<>(); dataMap.put("coverLetter", "test.pdf"); generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -308,7 +325,7 @@ public void testToGenerateCoverLetterDocumentThrowsException() { @Test public void testToGenerateWelshDocumentThrowsException() { generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -321,7 +338,7 @@ public void testToGenerateWelshDocumentThrowsException() { @Test public void testToGenerateDocumentThrowsException() { generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -337,7 +354,7 @@ public void testToGenerateDocumentThrowsException() { public void testToGenerateDocumentWithCaseDataThrowsRuntimeExcetion() { Map respondentDetails = new HashMap<>(); generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -352,7 +369,7 @@ public void testToGenerateDocumentWithCaseDataThrowsRuntimeExcetion() { public void testToGenerateDocumentWithCaseDataThrowsExcetion() { Map respondentDetails = new HashMap<>(); generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); @@ -371,7 +388,7 @@ protected void assertExpectedException(ThrowingRunnable me private void setUpGenerateCitizenDocument() { generatedDocumentInfo = GeneratedDocumentInfo.builder() - .url("TestUrl") + .url(TEST_URL) .binaryUrl("binaryUrl") .hashToken("testHashToken") .build(); diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java index bf9e38d3165..56e1907665e 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java @@ -431,7 +431,7 @@ public void generateDocsForC100TestFinalDoc() throws Exception { when(organisationService.getRespondentOrganisationDetails(any(CaseData.class))).thenReturn(c100CaseDataFinal); when(allegationOfHarmRevisedService.updateChildAbusesForDocmosis(Mockito.any(CaseData.class))).thenReturn( c100CaseDataFinal); - + c100CaseDataFinal.setState(State.JUDICIAL_REVIEW); Map stringObjectMap = documentGenService.createUpdatedCaseDataWithDocuments(AUTH_TOKEN, c100CaseDataFinal); verifyDocumentsUpdated(stringObjectMap, DOCUMENT_FIELD_C8_WELSH, DOCUMENT_FIELD_FINAL_WELSH, DOCUMENT_FIELD_C1A_WELSH, @@ -469,6 +469,7 @@ public void generateDocsForFL401TestWithOrganisation() throws Exception { when(organisationService.getRespondentOrganisationDetailsForFL401(Mockito.any(CaseData.class))).thenReturn( fl401CaseData); + fl401CaseData.setState(State.SUBMITTED_PAID); Map stringObjectMap = documentGenService.createUpdatedCaseDataWithDocuments(AUTH_TOKEN, fl401CaseData); verifyDocumentsUpdated(stringObjectMap, DOCUMENT_FIELD_C8_WELSH, DOCUMENT_FIELD_FINAL_WELSH, DOCUMENT_FIELD_C8, @@ -1095,8 +1096,12 @@ public void testDocsNullValueWhenWelshNotenglish() throws Exception { .thenReturn(caseData); when(organisationService.getRespondentOrganisationDetailsForFL401(Mockito.any(CaseData.class))) .thenReturn(caseData); + fl401CaseData.setState(State.PREPARE_FOR_HEARING_CONDUCT_HEARING); + // when documentGenService.createUpdatedCaseDataWithDocuments(AUTH_TOKEN, fl401CaseData); + + // then verify(dgsService).generateWelshDocument( Mockito.anyString(), any(CaseDetails.class), From 45616a5c548682f7c831f64db079d6a5af60e1ad Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Fri, 27 Mar 2026 12:04:31 +0000 Subject: [PATCH 05/19] FPVTL-2345. --- src/contractTest/resources/application.yaml | 1 + src/functionalTest/resources/application.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/src/contractTest/resources/application.yaml b/src/contractTest/resources/application.yaml index 9569e5b8369..de76b023251 100644 --- a/src/contractTest/resources/application.yaml +++ b/src/contractTest/resources/application.yaml @@ -544,6 +544,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx prl_citizen_upload_filename: Citizen_Uploaded_Statement.pdf fl401listonnotice: diff --git a/src/functionalTest/resources/application.yaml b/src/functionalTest/resources/application.yaml index 1075db64363..e05bbaa1673 100644 --- a/src/functionalTest/resources/application.yaml +++ b/src/functionalTest/resources/application.yaml @@ -577,6 +577,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx prl_citizen_upload_filename: Citizen_Uploaded_Statement.pdf fl401listonnotice: From 84721c5642430fa43323b28dbd36d155d82265e5 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Fri, 27 Mar 2026 12:18:49 +0000 Subject: [PATCH 06/19] FPVTL-2345. --- src/smokeTest/resources/application.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/smokeTest/resources/application.yaml b/src/smokeTest/resources/application.yaml index 879190c7376..acefee3ef13 100644 --- a/src/smokeTest/resources/application.yaml +++ b/src/smokeTest/resources/application.yaml @@ -567,6 +567,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: PRL-CA-GOR-ENG-Draft-An-Order.docx prl_citizen_upload_filename: Self_created.pdf fl401listonnotice: From 73f156bbe6ce41d9e6851b72754e580030aa8e73 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Fri, 27 Mar 2026 12:47:24 +0000 Subject: [PATCH 07/19] FPVTL-2345. --- .../gov/hmcts/reform/prl/services/DgsServiceTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index 0a788ca40c7..619a0b09b87 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -204,10 +204,10 @@ public void testToGenerateWelshDocumentWithCaseData() { } @Test - public void testgenerateCitizenDocument() { + public void testGenerateCitizenDocumentWithFreeTextUploadStatements() { Map values = new HashMap<>(); values.put("caseId","123"); - GenerateAndUploadDocumentRequest generateAndUploadDocumentRequest = GenerateAndUploadDocumentRequest + GenerateAndUploadDocumentRequest request = GenerateAndUploadDocumentRequest .builder() .values(values) .build(); @@ -215,8 +215,8 @@ public void testgenerateCitizenDocument() { // when GeneratedDocumentInfo result = dgsService.generateCitizenDocument( AUTHORISATION, - generateAndUploadDocumentRequest, - AUTHORISATION + request, + TEMPLATE ); // then @@ -288,7 +288,7 @@ public void testGenerateCitizenDocumentThrowsFeignException() { .build(); when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); - assertExpectedException(() -> dgsService.generateCitizenDocument(AUTHORISATION, generateAndUploadDocumentRequest, AUTHORISATION), + assertExpectedException(() -> dgsService.generateCitizenDocument(AUTHORISATION, generateAndUploadDocumentRequest, TEMPLATE), DocumentGenerationException.class, null); } From 50f9beeb4e077c4f65973fa5c64c26afa9ce4713 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Fri, 27 Mar 2026 15:10:19 +0000 Subject: [PATCH 08/19] FPVTL-2345. --- .../hmcts/reform/prl/services/DgsService.java | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java index 73ea9468f52..dc8c7bb9c27 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java @@ -23,6 +23,7 @@ import uk.gov.hmcts.reform.prl.services.citizen.CaseService; import uk.gov.hmcts.reform.prl.utils.CaseUtils; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; @@ -200,21 +201,41 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, String caseId = documentRequest.getCaseId(); uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = caseService.getCase(authorisation, caseId); CaseData caseDataFromCcd = nonNull(caseDetailsFromCcd) ? CaseUtils.getCaseData(caseDetailsFromCcd, objectMapper) : null; + boolean applicantWitnessStatement = false; + boolean respondentWitnessStatement = false; + String applicantCaseName = null; + LocalDate issueDate = null; + String familymanCaseNumber = null; + String courtName = null; + + if (nonNull(documentCategory)) { + applicantWitnessStatement = documentCategory.isApplicantWitnessStatement(); + respondentWitnessStatement = documentCategory.isRespondentWitnessStatement(); + } + + if (nonNull(caseDataFromCcd)) { + applicantCaseName = caseDataFromCcd.getApplicantCaseName(); + issueDate = caseDataFromCcd.getIssueDate(); + familymanCaseNumber = caseDataFromCcd.getFamilymanCaseNumber(); + courtName = caseDataFromCcd.getCourtName(); + } + CaseDetails caseDetails = CaseDetails.builder() .caseId(caseId) .caseData(CaseData.builder() .id(Long.parseLong(caseId)) .citizenUploadedStatement(documentRequest.getFreeTextStatements()) - .applicantName(nonNull(documentCategory) && documentCategory.isApplicantWitnessStatement() - ? documentRequest.getPartyName() : "") - .respondentName(nonNull(documentCategory) && documentCategory.isRespondentWitnessStatement() - ? documentRequest.getPartyName() : "") - .applicantCaseName(nonNull(caseDataFromCcd) ? caseDataFromCcd.getApplicantCaseName() : null) - .issueDate(nonNull(caseDataFromCcd) ? caseDataFromCcd.getIssueDate() : null) - .familymanCaseNumber(nonNull(caseDataFromCcd) ? caseDataFromCcd.getFamilymanCaseNumber() : null) + .applicantName(applicantWitnessStatement ? documentRequest.getPartyName() : "") + .respondentName(respondentWitnessStatement ? documentRequest.getPartyName() : "") + .applicantCaseName(applicantCaseName) + .issueDate(issueDate) + .familymanCaseNumber(familymanCaseNumber) + .courtName(courtName) + .giveDetails(documentRequest.getPartyName()) .lastModifiedDate(LocalDateTime.now()) .build()) .build(); + tempCaseDetails.put( CASE_DETAILS_STRING, AppObjectMapper.getObjectMapper().convertValue(caseDetails, Map.class) From 656b066b0ed3c7bbadd125b4fddf84f5eccd5255 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Fri, 27 Mar 2026 16:00:14 +0000 Subject: [PATCH 09/19] FPVTL-2345. --- .../uk/gov/hmcts/reform/prl/services/DgsService.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java index dc8c7bb9c27..25b6cc0470e 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java @@ -223,14 +223,13 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, CaseDetails caseDetails = CaseDetails.builder() .caseId(caseId) .caseData(CaseData.builder() + .courtName(courtName) .id(Long.parseLong(caseId)) - .citizenUploadedStatement(documentRequest.getFreeTextStatements()) - .applicantName(applicantWitnessStatement ? documentRequest.getPartyName() : "") - .respondentName(respondentWitnessStatement ? documentRequest.getPartyName() : "") - .applicantCaseName(applicantCaseName) .issueDate(issueDate) .familymanCaseNumber(familymanCaseNumber) - .courtName(courtName) + .applicantName(applicantWitnessStatement ? documentRequest.getPartyName() : "") + .respondentName(respondentWitnessStatement ? documentRequest.getPartyName() : "") + .citizenUploadedStatement(documentRequest.getFreeTextStatements()) .giveDetails(documentRequest.getPartyName()) .lastModifiedDate(LocalDateTime.now()) .build()) From 01e56b3a910bdcd5c9e55ad5531f8985f0c4d8d7 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Mon, 30 Mar 2026 15:09:14 +0100 Subject: [PATCH 10/19] FPVTL-2345. --- .../hmcts/reform/prl/services/DgsService.java | 64 ++++++- .../reform/prl/services/DgsServiceTest.java | 156 +++++++++++++++++- 2 files changed, 215 insertions(+), 5 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java index 25b6cc0470e..c097b26a8cb 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java @@ -13,6 +13,8 @@ import uk.gov.hmcts.reform.prl.framework.exceptions.DocumentGenerationException; import uk.gov.hmcts.reform.prl.mapper.AppObjectMapper; import uk.gov.hmcts.reform.prl.mapper.welshlang.WelshLangMapper; +import uk.gov.hmcts.reform.prl.models.Element; +import uk.gov.hmcts.reform.prl.models.complextypes.PartyDetails; import uk.gov.hmcts.reform.prl.models.dto.GenerateDocumentRequest; import uk.gov.hmcts.reform.prl.models.dto.GeneratedDocumentInfo; import uk.gov.hmcts.reform.prl.models.dto.ccd.CaseData; @@ -26,10 +28,13 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.HashMap; +import java.util.List; import java.util.Map; import static java.util.Objects.nonNull; +import static org.apache.commons.collections4.ListUtils.emptyIfNull; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C100_CASE_TYPE; +import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.FL401_CASE_TYPE; @Slf4j @Service @@ -37,6 +42,7 @@ @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class DgsService { + public static final String SPACE = " "; private final DgsApiClient dgsApiClient; private final AllegationOfHarmRevisedService allegationOfHarmService; private final HearingDataService hearingDataService; @@ -203,7 +209,6 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, CaseData caseDataFromCcd = nonNull(caseDetailsFromCcd) ? CaseUtils.getCaseData(caseDetailsFromCcd, objectMapper) : null; boolean applicantWitnessStatement = false; boolean respondentWitnessStatement = false; - String applicantCaseName = null; LocalDate issueDate = null; String familymanCaseNumber = null; String courtName = null; @@ -214,7 +219,6 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, } if (nonNull(caseDataFromCcd)) { - applicantCaseName = caseDataFromCcd.getApplicantCaseName(); issueDate = caseDataFromCcd.getIssueDate(); familymanCaseNumber = caseDataFromCcd.getFamilymanCaseNumber(); courtName = caseDataFromCcd.getCourtName(); @@ -227,8 +231,8 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, .id(Long.parseLong(caseId)) .issueDate(issueDate) .familymanCaseNumber(familymanCaseNumber) - .applicantName(applicantWitnessStatement ? documentRequest.getPartyName() : "") - .respondentName(respondentWitnessStatement ? documentRequest.getPartyName() : "") + .applicantName(getApplicantName(applicantWitnessStatement, respondentWitnessStatement, documentRequest, caseDataFromCcd)) + .respondentName(getRespondentName(respondentWitnessStatement, applicantWitnessStatement, documentRequest, caseDataFromCcd)) .citizenUploadedStatement(documentRequest.getFreeTextStatements()) .giveDetails(documentRequest.getPartyName()) .lastModifiedDate(LocalDateTime.now()) @@ -272,4 +276,56 @@ public GeneratedDocumentInfo generateCoverLetterDocument(String authorisation, M } return generatedDocumentInfo; } + + private String getApplicantName(boolean applicantWitnessStatement, boolean respondentWitnessStatement, + DocumentRequest documentRequest,CaseData caseDataFromCcd) { + String applicantName = null; + if (applicantWitnessStatement) { + applicantName = documentRequest.getPartyName(); + } else { + if (respondentWitnessStatement) { + String caseTypeOfApplication = caseDataFromCcd.getCaseTypeOfApplication(); + if (C100_CASE_TYPE.equalsIgnoreCase(caseTypeOfApplication)) { + List> applicantElements = emptyIfNull(caseDataFromCcd.getApplicants()); + List applicants = emptyIfNull(applicantElements.stream().map(Element::getValue).toList()); + applicantName = String.join( + ",", applicants.stream() + .map(partyDetails -> partyDetails.getFirstName() + SPACE + partyDetails.getLastName()).toList() + ); + } else if (FL401_CASE_TYPE.equalsIgnoreCase(caseTypeOfApplication)) { + PartyDetails applicantsFL401 = caseDataFromCcd.getApplicantsFL401(); + applicantName = nonNull(applicantsFL401) ? applicantsFL401.getFirstName() + SPACE + applicantsFL401.getLastName() : ""; + } + } else { + applicantName = ""; + } + } + return applicantName; + } + + private String getRespondentName(boolean respondentWitnessStatement, boolean applicantWitnessStatement, + DocumentRequest documentRequest,CaseData caseDataFromCcd) { + String respondentName = null; + if (respondentWitnessStatement) { + respondentName = documentRequest.getPartyName(); + } else { + if (applicantWitnessStatement) { + String caseTypeOfApplication = caseDataFromCcd.getCaseTypeOfApplication(); + if (C100_CASE_TYPE.equalsIgnoreCase(caseTypeOfApplication)) { + List> respondentElements = emptyIfNull(caseDataFromCcd.getRespondents()); + List respondents = emptyIfNull(respondentElements.stream().map(Element::getValue).toList()); + respondentName = String.join( + ",", respondents.stream() + .map(partyDetails -> partyDetails.getFirstName() + SPACE + partyDetails.getLastName()).toList() + ); + } else if (FL401_CASE_TYPE.equalsIgnoreCase(caseTypeOfApplication)) { + PartyDetails respondentFL401 = caseDataFromCcd.getRespondentsFL401(); + respondentName = nonNull(respondentFL401) ? respondentFL401.getFirstName() + SPACE + respondentFL401.getLastName() : ""; + } + } else { + respondentName = ""; + } + } + return respondentName; + } } diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index 619a0b09b87..de93ee90b42 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -12,6 +12,7 @@ import uk.gov.hmcts.reform.prl.clients.DgsApiClient; import uk.gov.hmcts.reform.prl.framework.exceptions.DocumentGenerationException; import uk.gov.hmcts.reform.prl.models.Element; +import uk.gov.hmcts.reform.prl.models.complextypes.PartyDetails; import uk.gov.hmcts.reform.prl.models.dto.GenerateDocumentRequest; import uk.gov.hmcts.reform.prl.models.dto.GeneratedDocumentInfo; import uk.gov.hmcts.reform.prl.models.dto.ccd.CaseData; @@ -35,6 +36,8 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C100_CASE_TYPE; +import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.FL401_CASE_TYPE; @RunWith(MockitoJUnitRunner.class) public class DgsServiceTest { @@ -236,9 +239,160 @@ public void testToGenerateDocumentWithEmptyHearingsData() { } @Test - public void testGenerateCitizenDocument() { + public void testGenerateRespondentWitnessStatementForC100() { // Given setUpGenerateCitizenDocument(); + documentRequest = DocumentRequest.builder() + .caseId("123") + .categoryId("WITNESS_STATEMENTS_RESPONDENT") + .partyName("appf appl") + .partyType("respondent") + .restrictDocumentDetails("test details") + .freeTextStatements("free text to generate document") + .build(); + + PartyDetails partyDetail = PartyDetails.builder() + .caseTypeOfApplication(C100_CASE_TYPE) + .firstName("firstNameValue") + .lastName("lastName") + .build(); + Element element = Element.builder().id(UUID.randomUUID()) + .value(partyDetail).build(); + CaseData data = CaseData.builder() + .caseTypeOfApplication(C100_CASE_TYPE) + .applicants(List.of(element)) + .build(); + uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = uk.gov.hmcts.reform.ccd.client.model.CaseDetails.builder() + .id(Long.parseLong(documentRequest.getCaseId())) + .data(objectMapper.convertValue(data, Map.class)) + .build(); + when(caseService.getCase(AUTHORISATION, documentRequest.getCaseId())).thenReturn(caseDetailsFromCcd); + + // When + GeneratedDocumentInfo response = dgsService.generateCitizenDocument( + AUTHORISATION, documentRequest, + TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_RESPONDENT + ); + + // Then + assertNotNull(response); + assertNotNull(response.getBinaryUrl()); + assertNotNull(response.getHashToken()); + } + + @Test + public void testGenerateRespondentWitnessStatementForFl401() { + // Given + setUpGenerateCitizenDocument(); + documentRequest = DocumentRequest.builder() + .caseId("123") + .categoryId("WITNESS_STATEMENTS_RESPONDENT") + .partyName("appf appl") + .partyType("respondent") + .restrictDocumentDetails("test details") + .freeTextStatements("free text to generate document") + .build(); + + PartyDetails partyDetail = PartyDetails.builder() + .caseTypeOfApplication(FL401_CASE_TYPE) + .firstName("firstNameValue") + .lastName("lastName") + .build(); + CaseData data = CaseData.builder() + .caseTypeOfApplication(FL401_CASE_TYPE) + .applicantsFL401(partyDetail) + .build(); + uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = uk.gov.hmcts.reform.ccd.client.model.CaseDetails.builder() + .id(Long.parseLong(documentRequest.getCaseId())) + .data(objectMapper.convertValue(data, Map.class)) + .build(); + when(caseService.getCase(AUTHORISATION, documentRequest.getCaseId())).thenReturn(caseDetailsFromCcd); + + // When + GeneratedDocumentInfo response = dgsService.generateCitizenDocument( + AUTHORISATION, documentRequest, + TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_RESPONDENT + ); + + // Then + assertNotNull(response); + assertNotNull(response.getBinaryUrl()); + assertNotNull(response.getHashToken()); + } + + + + + @Test + public void testGenerateApplicantWitnessStatementForC100() { + // Given + setUpGenerateCitizenDocument(); + documentRequest = DocumentRequest.builder() + .caseId("123") + .categoryId("WITNESS_STATEMENTS_APPLICANT") + .partyName("appf appl") + .partyType("applicant") + .restrictDocumentDetails("test details") + .freeTextStatements("free text to generate document") + .build(); + + PartyDetails partyDetail = PartyDetails.builder() + .caseTypeOfApplication(C100_CASE_TYPE) + .firstName("firstNameValue") + .lastName("lastName") + .build(); + Element element = Element.builder().id(UUID.randomUUID()) + .value(partyDetail).build(); + CaseData data = CaseData.builder() + .caseTypeOfApplication(C100_CASE_TYPE) + .respondents(List.of(element)) + .build(); + uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = uk.gov.hmcts.reform.ccd.client.model.CaseDetails.builder() + .id(Long.parseLong(documentRequest.getCaseId())) + .data(objectMapper.convertValue(data, Map.class)) + .build(); + when(caseService.getCase(AUTHORISATION, documentRequest.getCaseId())).thenReturn(caseDetailsFromCcd); + + // When + GeneratedDocumentInfo response = dgsService.generateCitizenDocument( + AUTHORISATION, documentRequest, + TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_APPLICANT + ); + + // Then + assertNotNull(response); + assertNotNull(response.getBinaryUrl()); + assertNotNull(response.getHashToken()); + } + + @Test + public void testGenerateApplicantWitnessStatementForFl401() { + // Given + setUpGenerateCitizenDocument(); + documentRequest = DocumentRequest.builder() + .caseId("123") + .categoryId("WITNESS_STATEMENTS_APPLICANT") + .partyName("appf appl") + .partyType("applicant") + .restrictDocumentDetails("test details") + .freeTextStatements("free text to generate document") + .build(); + + PartyDetails partyDetail = PartyDetails.builder() + .caseTypeOfApplication(FL401_CASE_TYPE) + .firstName("firstNameValue") + .lastName("lastName") + .build(); + + CaseData data = CaseData.builder() + .caseTypeOfApplication(FL401_CASE_TYPE) + .respondentsFL401(partyDetail) + .build(); + uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = uk.gov.hmcts.reform.ccd.client.model.CaseDetails.builder() + .id(Long.parseLong(documentRequest.getCaseId())) + .data(objectMapper.convertValue(data, Map.class)) + .build(); + when(caseService.getCase(AUTHORISATION, documentRequest.getCaseId())).thenReturn(caseDetailsFromCcd); // When GeneratedDocumentInfo response = dgsService.generateCitizenDocument( From a7fa566f08211135f45a8af0be3594c027897a4b Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Mon, 30 Mar 2026 16:29:28 +0100 Subject: [PATCH 11/19] FPVTL-2345. --- .../reform/prl/services/DgsServiceTest.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index de93ee90b42..70b06bb7b91 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -1,7 +1,12 @@ package uk.gov.hmcts.reform.prl.services; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; import feign.FeignException; +import org.jspecify.annotations.NonNull; import org.junit.Before; import org.junit.Test; import org.junit.function.ThrowingRunnable; @@ -9,6 +14,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; import uk.gov.hmcts.reform.prl.clients.DgsApiClient; import uk.gov.hmcts.reform.prl.framework.exceptions.DocumentGenerationException; import uk.gov.hmcts.reform.prl.models.Element; @@ -241,6 +247,7 @@ public void testToGenerateDocumentWithEmptyHearingsData() { @Test public void testGenerateRespondentWitnessStatementForC100() { // Given + ObjectMapper objectMapper = getObjectMapper(); setUpGenerateCitizenDocument(); documentRequest = DocumentRequest.builder() .caseId("123") @@ -280,9 +287,12 @@ public void testGenerateRespondentWitnessStatementForC100() { assertNotNull(response.getHashToken()); } + + @Test public void testGenerateRespondentWitnessStatementForFl401() { // Given + ObjectMapper objectMapper = getObjectMapper(); setUpGenerateCitizenDocument(); documentRequest = DocumentRequest.builder() .caseId("123") @@ -326,6 +336,7 @@ public void testGenerateRespondentWitnessStatementForFl401() { @Test public void testGenerateApplicantWitnessStatementForC100() { // Given + ObjectMapper objectMapper = getObjectMapper(); setUpGenerateCitizenDocument(); documentRequest = DocumentRequest.builder() .caseId("123") @@ -368,6 +379,7 @@ public void testGenerateApplicantWitnessStatementForC100() { @Test public void testGenerateApplicantWitnessStatementForFl401() { // Given + ObjectMapper objectMapper = getObjectMapper(); setUpGenerateCitizenDocument(); documentRequest = DocumentRequest.builder() .caseId("123") @@ -505,7 +517,7 @@ public void testToGenerateDocumentThrowsException() { } @Test - public void testToGenerateDocumentWithCaseDataThrowsRuntimeExcetion() { + public void testToGenerateDocumentWithCaseDataThrowsRuntimeException() { Map respondentDetails = new HashMap<>(); generatedDocumentInfo = GeneratedDocumentInfo.builder() .url(TEST_URL) @@ -555,4 +567,15 @@ private void setUpGenerateCitizenDocument() { } + private @NonNull ObjectMapper getObjectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.registerModule(new ParameterNamesModule()); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); + objectMapper.enable(SerializationFeature.INDENT_OUTPUT); + + ReflectionTestUtils.setField(dgsService, "objectMapper", objectMapper); + return objectMapper; + } } From 1b1d6812bc14963574025ba1ec119a77bb98a1b9 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Mon, 30 Mar 2026 18:03:44 +0100 Subject: [PATCH 12/19] FPVTL-2345. --- src/contractTest/resources/application.yaml | 1 + src/functionalTest/resources/application.yaml | 1 + src/integrationTest/resources/application.yaml | 1 + .../reform/prl/services/document/DocumentGenService.java | 9 ++++++--- src/main/resources/application.yaml | 1 + src/smokeTest/resources/application.yaml | 1 + .../prl/services/document/DocumentGenServiceTest.java | 1 + 7 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/contractTest/resources/application.yaml b/src/contractTest/resources/application.yaml index de76b023251..3a8c97e6904 100644 --- a/src/contractTest/resources/application.yaml +++ b/src/contractTest/resources/application.yaml @@ -544,6 +544,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_welsh_template: FL-PRL-GOR-WEL-Citizen-Witness-Statement.docx prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx prl_citizen_upload_filename: Citizen_Uploaded_Statement.pdf diff --git a/src/functionalTest/resources/application.yaml b/src/functionalTest/resources/application.yaml index e05bbaa1673..595452e30e6 100644 --- a/src/functionalTest/resources/application.yaml +++ b/src/functionalTest/resources/application.yaml @@ -577,6 +577,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_welsh_template: FL-PRL-GOR-WEL-Citizen-Witness-Statement.docx prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx prl_citizen_upload_filename: Citizen_Uploaded_Statement.pdf diff --git a/src/integrationTest/resources/application.yaml b/src/integrationTest/resources/application.yaml index 3caf61b691c..c95622d50b0 100644 --- a/src/integrationTest/resources/application.yaml +++ b/src/integrationTest/resources/application.yaml @@ -722,6 +722,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_welsh_template: FL-PRL-GOR-WEL-Citizen-Witness-Statement.docx prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx prl_citizen_upload_filename: Citizen_Uploaded_Statement.pdf diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java index 222b7d4b433..495cf68421b 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java @@ -271,6 +271,8 @@ public class DocumentGenService { protected String prlCitizenUploadTemplate; @Value("${document.templates.citizen.prl_citizen_witness_statement_template}") protected String prlCitizenWitnessStatementTemplate; + @Value("${document.templates.citizen.prl_citizen_witness_statement_welsh_template}") + protected String prlCitizenWitnessStatementWelshTemplate; @Value("${document.templates.citizen.prl_citizen_upload_filename}") protected String prlCitizenUploadFileName; @Value("${document.templates.fl401listonnotice.prl_fl404b_for_da_list_on_notice_template}") @@ -1539,14 +1541,15 @@ public DocumentResponse generateAndUploadDocument(String authorisation, String fileName = getCitizenUploadedStatementFileName(documentRequest, documentCategory); log.info("fileName {}", fileName); - String citizenUploadTemplate = nonNull(documentCategory) && documentCategory.isWitnessStatement() - ? prlCitizenWitnessStatementTemplate : prlCitizenUploadTemplate; + List citizenUploadTemplates = nonNull(documentCategory) && documentCategory.isWitnessStatement() + ? List.of(prlCitizenWitnessStatementTemplate, prlCitizenWitnessStatementWelshTemplate) + : List.of(prlCitizenUploadTemplate); GeneratedDocumentInfo generatedDocumentInfo = dgsService.generateCitizenDocument( authorisation, documentRequest, - citizenUploadTemplate, + citizenUploadTemplates.get(0), documentCategory ); diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 00dbb26a8f8..cd09d33e823 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -732,6 +732,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_welsh_template: FL-PRL-GOR-WEL-Citizen-Witness-Statement.docx prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx prl_citizen_upload_filename: Citizen_Uploaded_Statement.pdf diff --git a/src/smokeTest/resources/application.yaml b/src/smokeTest/resources/application.yaml index acefee3ef13..1a462d20fda 100644 --- a/src/smokeTest/resources/application.yaml +++ b/src/smokeTest/resources/application.yaml @@ -567,6 +567,7 @@ document: doc_send_reply_message_template: FL-PRL-LET-ENG-SEND-REPLY-MESSAGE.docx doc_send_reply_message_welsh_template: FL-PRL-LET-WEL-SEND-REPLY-MESSAGE.docx citizen: + prl_citizen_witness_statement_welsh_template: FL-PRL-GOR-WEL-Citizen-Witness-Statement.docx prl_citizen_witness_statement_template: FL-PRL-GOR-ENG-Citizen-Witness-Statement.docx prl_citizen_upload_template: PRL-CA-GOR-ENG-Draft-An-Order.docx prl_citizen_upload_filename: Self_created.pdf diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java index 56e1907665e..53c11f7cae3 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java @@ -2686,6 +2686,7 @@ protected void assertExpectedException(ThrowingRunnable me @Test public void testGenerateAndUploadDocument() { //Given + ReflectionTestUtils.setField(documentGenService, "prlCitizenUploadTemplate", "FL-PRL-GOR-ENG-Citizen-Uploaded-Statement.docx"); generatedDocumentInfo = GeneratedDocumentInfo.builder() .url("TestUrl") .binaryUrl("binaryUrl") From 187e16ef6e00bec3f4ac0038666b021151183c52 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Tue, 31 Mar 2026 12:04:16 +0100 Subject: [PATCH 13/19] FPVTL-2345. --- .../reform/prl/services/document/DocumentGenService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java index 495cf68421b..089b6cb31c2 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java @@ -1541,15 +1541,15 @@ public DocumentResponse generateAndUploadDocument(String authorisation, String fileName = getCitizenUploadedStatementFileName(documentRequest, documentCategory); log.info("fileName {}", fileName); - List citizenUploadTemplates = nonNull(documentCategory) && documentCategory.isWitnessStatement() - ? List.of(prlCitizenWitnessStatementTemplate, prlCitizenWitnessStatementWelshTemplate) - : List.of(prlCitizenUploadTemplate); + // use prlCitizenWitnessStatementWelshTemplate for welsh + String citizenUploadTemplate = nonNull(documentCategory) && documentCategory.isWitnessStatement() + ? prlCitizenWitnessStatementTemplate : prlCitizenUploadTemplate; GeneratedDocumentInfo generatedDocumentInfo = dgsService.generateCitizenDocument( authorisation, documentRequest, - citizenUploadTemplates.get(0), + citizenUploadTemplate, documentCategory ); From 646b094f4518a53cbd32169f9d814d74171e20de Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Tue, 31 Mar 2026 12:33:32 +0100 Subject: [PATCH 14/19] FPVTL-2345. --- .../reform/prl/services/DgsServiceTest.java | 100 ++++++++++-------- 1 file changed, 56 insertions(+), 44 deletions(-) diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index 70b06bb7b91..dbc725dd3d6 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -50,7 +50,17 @@ public class DgsServiceTest { private static final String AUTHORISATION = " "; private static final String TEMPLATE = "template"; - public static final String TEST_URL = "TestUrl"; + private static final String TEST_URL = "TestUrl"; + private static final String CASE_ID = "123"; + private static final String WITNESS_STATEMENTS_RESPONDENT = "WITNESS_STATEMENTS_RESPONDENT"; + private static final String RESPONDENT = "respondent"; + private static final String DOCUMENT_DETAILS = "test details"; + private static final String FREE_TEXT_STATEMENTS = "free text to generate document"; + private static final String PARTY_NAME = "appf appl"; + private static final String FIRST_NAME = "firstNameValue"; + private static final String LAST_NAME = "lastName"; + private static final String WITNESS_STATEMENTS_APPLICANT = "WITNESS_STATEMENTS_APPLICANT"; + private static final String PARTY_TYPE = "applicant"; private DgsService dgsService; @Mock @@ -98,7 +108,7 @@ public void setUp() { .build(); caseDetails = CaseDetails.builder() - .caseId("123") + .caseId(CASE_ID) .caseData(caseData) .build(); generatedDocumentInfo = GeneratedDocumentInfo.builder() @@ -107,7 +117,7 @@ public void setUp() { .hashToken("testHashToken") .build(); Map values = new HashMap<>(); - values.put("caseId","123"); + values.put("caseId", CASE_ID); values.put("freeTextUploadStatements","test"); generateAndUploadDocumentRequest = GenerateAndUploadDocumentRequest .builder() @@ -117,12 +127,12 @@ public void setUp() { .thenReturn(generatedDocumentInfo); documentRequest = DocumentRequest.builder() - .caseId("123") + .caseId(CASE_ID) .categoryId("POSITION_STATEMENTS") - .partyName("appf appl") - .partyType("applicant") - .restrictDocumentDetails("test details") - .freeTextStatements("free text to generate document") + .partyName(PARTY_NAME) + .partyType(PARTY_TYPE) + .restrictDocumentDetails(DOCUMENT_DETAILS) + .freeTextStatements(FREE_TEXT_STATEMENTS) .build(); when(objectMapper.convertValue(any(), eq(CaseData.class))).thenReturn(caseData); } @@ -163,7 +173,8 @@ public void testToGenerateCoverLetterDocument() throws Exception { .hashToken("testHashToken") .build(); assertNotNull(dgsService.generateCoverLetterDocument(authToken, dataMap, PRL_DRAFT_TEMPLATE, - "123")); + CASE_ID + )); } @Test @@ -215,7 +226,7 @@ public void testToGenerateWelshDocumentWithCaseData() { @Test public void testGenerateCitizenDocumentWithFreeTextUploadStatements() { Map values = new HashMap<>(); - values.put("caseId","123"); + values.put("caseId", CASE_ID); GenerateAndUploadDocumentRequest request = GenerateAndUploadDocumentRequest .builder() .values(values) @@ -237,7 +248,7 @@ public void testGenerateCitizenDocumentWithFreeTextUploadStatements() { public void testToGenerateDocumentWithEmptyHearingsData() { CaseData caseData1 = CaseData.builder().manageOrders(ManageOrders.builder().build()).build(); CaseDetails caseDetails1 = CaseDetails.builder() - .caseId("123") + .caseId(CASE_ID) .caseData(caseData1) .build(); @@ -250,18 +261,18 @@ public void testGenerateRespondentWitnessStatementForC100() { ObjectMapper objectMapper = getObjectMapper(); setUpGenerateCitizenDocument(); documentRequest = DocumentRequest.builder() - .caseId("123") - .categoryId("WITNESS_STATEMENTS_RESPONDENT") - .partyName("appf appl") - .partyType("respondent") - .restrictDocumentDetails("test details") - .freeTextStatements("free text to generate document") + .caseId(CASE_ID) + .categoryId(WITNESS_STATEMENTS_RESPONDENT) + .partyName(PARTY_NAME) + .partyType(RESPONDENT) + .restrictDocumentDetails(DOCUMENT_DETAILS) + .freeTextStatements(FREE_TEXT_STATEMENTS) .build(); PartyDetails partyDetail = PartyDetails.builder() .caseTypeOfApplication(C100_CASE_TYPE) - .firstName("firstNameValue") - .lastName("lastName") + .firstName(FIRST_NAME) + .lastName(LAST_NAME) .build(); Element element = Element.builder().id(UUID.randomUUID()) .value(partyDetail).build(); @@ -295,18 +306,18 @@ public void testGenerateRespondentWitnessStatementForFl401() { ObjectMapper objectMapper = getObjectMapper(); setUpGenerateCitizenDocument(); documentRequest = DocumentRequest.builder() - .caseId("123") - .categoryId("WITNESS_STATEMENTS_RESPONDENT") - .partyName("appf appl") - .partyType("respondent") - .restrictDocumentDetails("test details") - .freeTextStatements("free text to generate document") + .caseId(CASE_ID) + .categoryId(WITNESS_STATEMENTS_RESPONDENT) + .partyName(PARTY_NAME) + .partyType(RESPONDENT) + .restrictDocumentDetails(DOCUMENT_DETAILS) + .freeTextStatements(FREE_TEXT_STATEMENTS) .build(); PartyDetails partyDetail = PartyDetails.builder() .caseTypeOfApplication(FL401_CASE_TYPE) - .firstName("firstNameValue") - .lastName("lastName") + .firstName(FIRST_NAME) + .lastName(LAST_NAME) .build(); CaseData data = CaseData.builder() .caseTypeOfApplication(FL401_CASE_TYPE) @@ -339,18 +350,18 @@ public void testGenerateApplicantWitnessStatementForC100() { ObjectMapper objectMapper = getObjectMapper(); setUpGenerateCitizenDocument(); documentRequest = DocumentRequest.builder() - .caseId("123") - .categoryId("WITNESS_STATEMENTS_APPLICANT") - .partyName("appf appl") - .partyType("applicant") - .restrictDocumentDetails("test details") - .freeTextStatements("free text to generate document") + .caseId(CASE_ID) + .categoryId(WITNESS_STATEMENTS_APPLICANT) + .partyName(PARTY_NAME) + .partyType(PARTY_TYPE) + .restrictDocumentDetails(DOCUMENT_DETAILS) + .freeTextStatements(FREE_TEXT_STATEMENTS) .build(); PartyDetails partyDetail = PartyDetails.builder() .caseTypeOfApplication(C100_CASE_TYPE) - .firstName("firstNameValue") - .lastName("lastName") + .firstName(FIRST_NAME) + .lastName(LAST_NAME) .build(); Element element = Element.builder().id(UUID.randomUUID()) .value(partyDetail).build(); @@ -382,18 +393,18 @@ public void testGenerateApplicantWitnessStatementForFl401() { ObjectMapper objectMapper = getObjectMapper(); setUpGenerateCitizenDocument(); documentRequest = DocumentRequest.builder() - .caseId("123") - .categoryId("WITNESS_STATEMENTS_APPLICANT") - .partyName("appf appl") - .partyType("applicant") - .restrictDocumentDetails("test details") - .freeTextStatements("free text to generate document") + .caseId(CASE_ID) + .categoryId(WITNESS_STATEMENTS_APPLICANT) + .partyName(PARTY_NAME) + .partyType(PARTY_TYPE) + .restrictDocumentDetails(DOCUMENT_DETAILS) + .freeTextStatements(FREE_TEXT_STATEMENTS) .build(); PartyDetails partyDetail = PartyDetails.builder() .caseTypeOfApplication(FL401_CASE_TYPE) - .firstName("firstNameValue") - .lastName("lastName") + .firstName(FIRST_NAME) + .lastName(LAST_NAME) .build(); CaseData data = CaseData.builder() @@ -484,7 +495,8 @@ public void testToGenerateCoverLetterDocumentThrowsException() { when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); assertExpectedException(() -> dgsService.generateCoverLetterDocument(authToken, dataMap, PRL_DRAFT_TEMPLATE, - "123"), DocumentGenerationException.class, null); + CASE_ID + ), DocumentGenerationException.class, null); } From a4691a00b8b85dc60ce09be37226e97ed74fc571 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Tue, 31 Mar 2026 13:49:19 +0100 Subject: [PATCH 15/19] FPVTL-2345. --- src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java index c097b26a8cb..48dfbbe4e42 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java @@ -255,7 +255,7 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, ); } catch (Exception ex) { - log.error(ERROR_MESSAGE, caseId); + log.error(ERROR_MESSAGE, caseId, ex); throw new DocumentGenerationException(ex.getMessage(), ex); } return generatedDocumentInfo; From d8bcd7c724805a5e06868d3bf04e438bbeb27365 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Tue, 31 Mar 2026 16:54:47 +0100 Subject: [PATCH 16/19] FPVTL-2345. --- src/main/resources/application.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index cd09d33e823..666408fde03 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -23,7 +23,7 @@ prl: password: ${PRL_SYSTEM_UPDATE_PASSWORD:xxxxxx} document: generate: - uri: http://prl-dgs-aat.service.core-compute-aat.internal/health/liveness + uri: http://prl-dgs-pr-471.preview.platform.hmcts.net/health/liveness refdata: username: ${PRL_IDAM_REFDATA_USERNAME:xxxxxx} password: ${PRL_IDAM_REFDATA_PASSWORD:xxxxxx} From 9e7fea5d421ab5e0c5d13f95381dd63860528038 Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Wed, 1 Apr 2026 18:17:08 +0100 Subject: [PATCH 17/19] FPVTL-2345. --- ...CaseDocumentControllerIntegrationTest.java | 2 +- .../citizen/CaseDocumentController.java | 8 +- .../hmcts/reform/prl/services/DgsService.java | 97 +++++++++++-------- .../services/document/DocumentGenService.java | 27 +++--- src/main/resources/application.yaml | 4 +- .../citizen/CaseDocumentControllerTest.java | 3 +- .../reform/prl/services/DgsServiceTest.java | 22 ++--- .../document/DocumentGenServiceTest.java | 10 +- 8 files changed, 95 insertions(+), 78 deletions(-) diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerIntegrationTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerIntegrationTest.java index d20bf8a9f78..5a6b8ff19dc 100644 --- a/src/integrationTest/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerIntegrationTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerIntegrationTest.java @@ -363,7 +363,7 @@ public void testCitizenGenerateDocument() throws Exception { .document(Document.builder().documentFileName("test.pdf").build()) .build(); - when(documentGenService.generateAndUploadDocument(anyString(), any())).thenReturn(documentResponse); + when(documentGenService.generateAndUploadDocument(anyString(), any())).thenReturn(List.of(documentResponse)); String url = "/citizen-generate-document"; String jsonRequest = "{" diff --git a/src/main/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentController.java b/src/main/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentController.java index a9a93d3d413..c24cd57da0b 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentController.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentController.java @@ -419,16 +419,16 @@ public ResponseEntity citizenGenerateDocument(@RequestHeader(HttpHeaders throw (new RuntimeException(INVALID_CLIENT)); } - DocumentResponse documentResponse = null; + List documentResponses; try { - documentResponse = documentGenService.generateAndUploadDocument(authorisation, documentRequest); + documentResponses = documentGenService.generateAndUploadDocument(authorisation, documentRequest); } catch (DocumentGenerationException dge) { log.error("Exception in generating a document {}", dge.getMessage()); return ResponseEntity.internalServerError().body("Error in generating a document"); } - if (isNotEmpty(documentResponse)) { - return ResponseEntity.ok(documentResponse); + if (isNotEmpty(documentResponses)) { + return ResponseEntity.ok(documentResponses); } else { return ResponseEntity.internalServerError().body("Error in generating citizen document"); } diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java index 48dfbbe4e42..508a68a15e1 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/DgsService.java @@ -30,11 +30,16 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Function; import static java.util.Objects.nonNull; import static org.apache.commons.collections4.ListUtils.emptyIfNull; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C100_CASE_TYPE; +import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.CASE_DATA_ID; +import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.CASE_ID; +import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.COURT_NAME_FIELD; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.FL401_CASE_TYPE; +import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.ISSUE_DATE_FIELD; @Slf4j @Service @@ -42,7 +47,13 @@ @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class DgsService { - public static final String SPACE = " "; + private static final String SPACE = " "; + private static final String FAMILYMAN_CASE_NUMBER = "familymanCaseNumber"; + private static final String APPLICANT_NAME = "applicantName"; + private static final String RESPONDENT_NAME = "respondentName"; + private static final String CITIZEN_UPLOADED_STATEMENT = "citizenUploadedStatement"; + private static final String SIGNED_BY = "signedBy"; + private static final String SIGNED_DATE = "signedDate"; private final DgsApiClient dgsApiClient; private final AllegationOfHarmRevisedService allegationOfHarmService; private final HearingDataService hearingDataService; @@ -199,11 +210,11 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, return generatedDocumentInfo; } - public GeneratedDocumentInfo generateCitizenDocument(String authorisation, + public List generateCitizenDocument(String authorisation, DocumentRequest documentRequest, - String prlCitizenUploadTemplate, + List prlCitizenUploadTemplates, DocumentCategory documentCategory) throws DocumentGenerationException { - Map tempCaseDetails = new HashMap<>(); + String caseId = documentRequest.getCaseId(); uk.gov.hmcts.reform.ccd.client.model.CaseDetails caseDetailsFromCcd = caseService.getCase(authorisation, caseId); CaseData caseDataFromCcd = nonNull(caseDetailsFromCcd) ? CaseUtils.getCaseData(caseDetailsFromCcd, objectMapper) : null; @@ -224,46 +235,52 @@ public GeneratedDocumentInfo generateCitizenDocument(String authorisation, courtName = caseDataFromCcd.getCourtName(); } - CaseDetails caseDetails = CaseDetails.builder() - .caseId(caseId) - .caseData(CaseData.builder() - .courtName(courtName) - .id(Long.parseLong(caseId)) - .issueDate(issueDate) - .familymanCaseNumber(familymanCaseNumber) - .applicantName(getApplicantName(applicantWitnessStatement, respondentWitnessStatement, documentRequest, caseDataFromCcd)) - .respondentName(getRespondentName(respondentWitnessStatement, applicantWitnessStatement, documentRequest, caseDataFromCcd)) - .citizenUploadedStatement(documentRequest.getFreeTextStatements()) - .giveDetails(documentRequest.getPartyName()) - .lastModifiedDate(LocalDateTime.now()) - .build()) - .build(); - - tempCaseDetails.put( - CASE_DETAILS_STRING, - AppObjectMapper.getObjectMapper().convertValue(caseDetails, Map.class) - ); + Map caseDetails = new HashMap<>(); + caseDetails.put(CASE_ID, caseId); + caseDetails.put(COURT_NAME_FIELD, courtName); + caseDetails.put(CASE_DATA_ID, Long.parseLong(caseId)); + caseDetails.put(ISSUE_DATE_FIELD, issueDate); + caseDetails.put(FAMILYMAN_CASE_NUMBER, familymanCaseNumber); + caseDetails.put( + APPLICANT_NAME, + getApplicantName(applicantWitnessStatement, respondentWitnessStatement, documentRequest, caseDataFromCcd)); + caseDetails.put( + RESPONDENT_NAME, + getRespondentName(respondentWitnessStatement, applicantWitnessStatement, documentRequest, caseDataFromCcd)); + caseDetails.put(CITIZEN_UPLOADED_STATEMENT, documentRequest.getFreeTextStatements()); + caseDetails.put(SIGNED_BY, documentRequest.getPartyName()); + caseDetails.put(SIGNED_DATE, LocalDateTime.now()); + + + return emptyIfNull(prlCitizenUploadTemplates) + .stream() + .map(getGeneratedDocumentInfo(authorisation, caseDetails, caseId)) + .toList(); + } - GeneratedDocumentInfo generatedDocumentInfo; - try { - generatedDocumentInfo = - dgsApiClient.generateDocument( - authorisation, - GenerateDocumentRequest.builder() - .template(prlCitizenUploadTemplate) - .values(tempCaseDetails).build() - ); + private Function getGeneratedDocumentInfo(String authorisation, Map caseDetails, String caseId) { + return prlCitizenUploadTemplate -> { + GeneratedDocumentInfo generatedDocumentInfo; + try { + generatedDocumentInfo = + dgsApiClient.generateDocument( + authorisation, + GenerateDocumentRequest.builder() + .template(prlCitizenUploadTemplate) + .values(caseDetails).build() + ); - } catch (Exception ex) { - log.error(ERROR_MESSAGE, caseId, ex); - throw new DocumentGenerationException(ex.getMessage(), ex); - } - return generatedDocumentInfo; + } catch (Exception ex) { + log.error(ERROR_MESSAGE, caseId, ex); + throw new DocumentGenerationException(ex.getMessage(), ex); + } + return generatedDocumentInfo; + }; } public GeneratedDocumentInfo generateCoverLetterDocument(String authorisation, Map requestPayload, String templateName, String caseId) throws Exception { - GeneratedDocumentInfo generatedDocumentInfo = null; + GeneratedDocumentInfo generatedDocumentInfo; try { generatedDocumentInfo = dgsApiClient.generateDocument(authorisation, GenerateDocumentRequest @@ -289,7 +306,7 @@ private String getApplicantName(boolean applicantWitnessStatement, boolean respo List> applicantElements = emptyIfNull(caseDataFromCcd.getApplicants()); List applicants = emptyIfNull(applicantElements.stream().map(Element::getValue).toList()); applicantName = String.join( - ",", applicants.stream() + ", ", applicants.stream() .map(partyDetails -> partyDetails.getFirstName() + SPACE + partyDetails.getLastName()).toList() ); } else if (FL401_CASE_TYPE.equalsIgnoreCase(caseTypeOfApplication)) { @@ -315,7 +332,7 @@ private String getRespondentName(boolean respondentWitnessStatement, boolean app List> respondentElements = emptyIfNull(caseDataFromCcd.getRespondents()); List respondents = emptyIfNull(respondentElements.stream().map(Element::getValue).toList()); respondentName = String.join( - ",", respondents.stream() + ", ", respondents.stream() .map(partyDetails -> partyDetails.getFirstName() + SPACE + partyDetails.getLastName()).toList() ); } else if (FL401_CASE_TYPE.equalsIgnoreCase(caseTypeOfApplication)) { diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java index 089b6cb31c2..485d819b247 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java @@ -54,6 +54,7 @@ import static java.util.Objects.nonNull; import static java.util.Optional.ofNullable; +import static org.apache.commons.collections4.ListUtils.emptyIfNull; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C100_CASE_TYPE; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C1A_DRAFT_HINT; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C1A_FINAL_RESPONSE_DOCUMENT; @@ -1532,7 +1533,7 @@ public Document convertToPdf(String authorisation, Document document) { return document; } - public DocumentResponse generateAndUploadDocument(String authorisation, + public List generateAndUploadDocument(String authorisation, DocumentRequest documentRequest) throws DocumentGenerationException { String categoryId = documentRequest.getCategoryId(); DocumentCategory documentCategory = nonNull(categoryId) ? DocumentCategory.getValue(categoryId) : null; @@ -1541,27 +1542,27 @@ public DocumentResponse generateAndUploadDocument(String authorisation, String fileName = getCitizenUploadedStatementFileName(documentRequest, documentCategory); log.info("fileName {}", fileName); - // use prlCitizenWitnessStatementWelshTemplate for welsh - String citizenUploadTemplate = nonNull(documentCategory) && documentCategory.isWitnessStatement() - ? prlCitizenWitnessStatementTemplate : prlCitizenUploadTemplate; + List citizenUploadTemplates = nonNull(documentCategory) && documentCategory.isWitnessStatement() + ? List.of(prlCitizenWitnessStatementTemplate, prlCitizenWitnessStatementWelshTemplate) : List.of(prlCitizenUploadTemplate); - GeneratedDocumentInfo generatedDocumentInfo = dgsService.generateCitizenDocument( + + List generatedDocumentInfos = dgsService.generateCitizenDocument( authorisation, documentRequest, - citizenUploadTemplate, + citizenUploadTemplates, documentCategory ); - log.info("generatedDocumentInfo {}", generatedDocumentInfo); - if (null != generatedDocumentInfo) { - return DocumentResponse.builder() + log.info("generatedDocumentInfo {}", generatedDocumentInfos); + + return emptyIfNull(generatedDocumentInfos) + .stream() + .map(generatedDocumentInfo -> DocumentResponse.builder() .status(SUCCESS) .document(generateDocumentField(fileName, generatedDocumentInfo)) - .build(); - } - - return null; + .build()) + .toList(); } } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 666408fde03..b6ca3ad89c7 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -23,7 +23,7 @@ prl: password: ${PRL_SYSTEM_UPDATE_PASSWORD:xxxxxx} document: generate: - uri: http://prl-dgs-pr-471.preview.platform.hmcts.net/health/liveness + uri: https://prl-dgs-pr-471.preview.platform.hmcts.net/health/liveness refdata: username: ${PRL_IDAM_REFDATA_USERNAME:xxxxxx} password: ${PRL_IDAM_REFDATA_PASSWORD:xxxxxx} @@ -465,7 +465,7 @@ case_document_am: url: ${CCD_CASE_DOCS_AM_API:http://ccd-case-document-am-api-aat.service.core-compute-aat.internal} prl-dgs-api: - url: ${PRL_DGS_API_URL:http://prl-dgs-aat.service.core-compute-aat.internal} + url: https://prl-dgs-pr-471.preview.platform.hmcts.net courtfinder: api: diff --git a/src/test/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerTest.java b/src/test/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerTest.java index 34aa01fc337..ca1928b44da 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerTest.java @@ -564,7 +564,7 @@ void testGenerateDocument() throws DocumentGenerationException { when(documentGenService.generateAndUploadDocument( AUTH_TOKEN, documentRequest - )).thenReturn(mockDocumentResponse); + )).thenReturn(List.of(mockDocumentResponse)); //Action ResponseEntity response = caseDocumentController.citizenGenerateDocument( @@ -575,7 +575,6 @@ void testGenerateDocument() throws DocumentGenerationException { //Then assertEquals(OK, response.getStatusCode()); - assertEquals(DocumentResponse.class, response.getBody().getClass()); assertNotNull(response.getBody()); } diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index dbc725dd3d6..78a7f4c8d0e 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -289,8 +289,8 @@ public void testGenerateRespondentWitnessStatementForC100() { // When GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, - TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_RESPONDENT - ); + List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_RESPONDENT + ).get(0); // Then assertNotNull(response); @@ -332,8 +332,8 @@ public void testGenerateRespondentWitnessStatementForFl401() { // When GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, - TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_RESPONDENT - ); + List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_RESPONDENT + ).get(0); // Then assertNotNull(response); @@ -378,8 +378,8 @@ public void testGenerateApplicantWitnessStatementForC100() { // When GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, - TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_APPLICANT - ); + List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_APPLICANT + ).get(0); // Then assertNotNull(response); @@ -420,8 +420,8 @@ public void testGenerateApplicantWitnessStatementForFl401() { // When GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, - TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_APPLICANT - ); + List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_APPLICANT + ).get(0); // Then assertNotNull(response); @@ -447,8 +447,8 @@ public void testGenerateCitizenDocumentWithCaseDetailsRetrievedFromCcd() { // When GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, - TEMPLATE, DocumentCategory.WITNESS_STATEMENTS_RESPONDENT - ); + List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_RESPONDENT + ).get(0); //Then assertNotNull(response); @@ -478,7 +478,7 @@ public void testGenerateCitizenDocumentCitizenUploadThrowsException() { .build(); when(dgsApiClient.generateDocument(any(),any())).thenThrow(FeignException.class); - assertExpectedException(() -> dgsService.generateCitizenDocument(AUTHORISATION, documentRequest, TEMPLATE, null), + assertExpectedException(() -> dgsService.generateCitizenDocument(AUTHORISATION, documentRequest, List.of(TEMPLATE), null), DocumentGenerationException.class, null); } diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java index 53c11f7cae3..01f51e1c66d 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenServiceTest.java @@ -2704,7 +2704,7 @@ public void testGenerateAndUploadDocument() { .build(); //When - doReturn(generatedDocumentInfo).when(dgsService).generateCitizenDocument( + doReturn(List.of(generatedDocumentInfo)).when(dgsService).generateCitizenDocument( Mockito.anyString(), Mockito.any(DocumentRequest.class), Mockito.any(), @@ -2713,12 +2713,12 @@ public void testGenerateAndUploadDocument() { when(dateTime.now()).thenReturn(LocalDateTime.now()); //Action - DocumentResponse documentResponse = documentGenService.generateAndUploadDocument(AUTH_TOKEN, documentRequest); + List documentResponses = documentGenService.generateAndUploadDocument(AUTH_TOKEN, documentRequest); //Then - assertNotNull(documentResponse); - assertNotNull(documentResponse.getDocument()); - assertEquals(SUCCESS, documentResponse.getStatus()); + assertNotNull(documentResponses); + assertNotNull(documentResponses.get(0).getDocument()); + assertEquals(SUCCESS, documentResponses.get(0).getStatus()); } @Test From f85ea6a2b39f874fa5a8e0a766ae4b95d0d0f93a Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Thu, 2 Apr 2026 07:58:21 +0100 Subject: [PATCH 18/19] FPVTL-2345. --- ...CaseDocumentControllerIntegrationTest.java | 54 ++++++++----------- .../citizen/CaseDocumentController.java | 12 ++--- .../services/document/DocumentGenService.java | 41 +++++++++----- .../citizen/CaseDocumentControllerTest.java | 6 --- .../reform/prl/services/DgsServiceTest.java | 8 +-- 5 files changed, 58 insertions(+), 63 deletions(-) diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerIntegrationTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerIntegrationTest.java index 5a6b8ff19dc..001bbbaeb0f 100644 --- a/src/integrationTest/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerIntegrationTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerIntegrationTest.java @@ -9,12 +9,12 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.web.context.WebApplicationContext; @@ -69,34 +69,35 @@ public class CaseDocumentControllerIntegrationTest { @Autowired private WebApplicationContext webApplicationContext; - @MockBean - DocumentGenService documentGenService; + @MockitoBean + private DocumentGenService documentGenService; - @MockBean - UploadDocumentService uploadService; + @MockitoBean + private UploadDocumentService uploadService; - @MockBean - AuthorisationService authorisationService; + @MockitoBean + private AuthorisationService authorisationService; - @MockBean - CoreCaseDataApi coreCaseDataApi; - @MockBean - IdamClient idamClient; + @MockitoBean + private CoreCaseDataApi coreCaseDataApi; - @MockBean - CaseService caseService; + @MockitoBean + private IdamClient idamClient; - @MockBean - EmailService emailService; + @MockitoBean + private CaseService caseService; - @MockBean - CitizenDocumentService citizenDocumentService; + @MockitoBean + private EmailService emailService; - @MockBean - UserInfo userInfo; + @MockitoBean + private CitizenDocumentService citizenDocumentService; + + @MockitoBean + private UserInfo userInfo; @Autowired - ObjectMapper objectMapper; + private ObjectMapper objectMapper; @Before public void setUp() { @@ -139,10 +140,6 @@ public void testDeleteCitizenStatementDocument() throws Exception { public void testGenerateCitizenStatementDocument() throws Exception { when(authorisationService.isAuthorized(anyString(), anyString())).thenReturn(true); - Map map = new HashMap<>(); - map.put("caseId", "123"); - map.put("citizenUploadedDocumentList", List.of(element(UploadedDocuments.builder().build()))); - map.put("partyId", "7663081e-778d-4317-b278-7642b740d317"); String caseDetails = ResourceLoader.loadJson("requests/c100-respondent-solicitor-c1adraft-generate.json"); @@ -243,15 +240,6 @@ public void testUploadCitizenStatementDocument() throws Exception { "test content".getBytes() ); - String jsonRequest = "{" - + "\"caseId\": \"123\"," - + "\"documentType\": \"statement\"," - + "\"partyName\": \"John Doe\"," - + "\"partyId\": \"7663081e-778d-4317-b278-7642b740d317\"," - + "\"isApplicant\": \"true\"," - + "\"documentRequestedByCourt\": \"YES\"" - + "}"; - mockMvc.perform( multipart(url) .file(file) diff --git a/src/main/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentController.java b/src/main/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentController.java index c24cd57da0b..bce43eb8839 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentController.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentController.java @@ -206,12 +206,12 @@ private void sendEmailToCitizen(CaseData tempCaseData, String name, String email emailService.send( email, EmailTemplateNames.DOCUMENT_UPLOADED, - buildUploadDocuemntEmail(tempCaseData, name, dashboardUrl), + buildUploadDocumentEmail(tempCaseData, name, dashboardUrl), LanguagePreference.english ); } - private EmailTemplateVars buildUploadDocuemntEmail(CaseData caseData, String name, String link) { + private EmailTemplateVars buildUploadDocumentEmail(CaseData caseData, String name, String link) { return UploadDocumentEmail.builder() .caseReference(String.valueOf(caseData.getId())) .caseName(caseData.getApplicantCaseName()) @@ -225,7 +225,7 @@ private EmailTemplateVars buildUploadDocuemntEmail(CaseData caseData, String nam @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Uploaded Successfully"), @ApiResponse(responseCode = "400", description = "Bad Request while uploading the document"), - @ApiResponse(responseCode = "401", description = "Provided Authroization token is missing or invalid"), + @ApiResponse(responseCode = "401", description = "Provided authorization token is missing or invalid"), @ApiResponse(responseCode = "500", description = "Internal Server Error") }) public ResponseEntity uploadCitizenStatementDocument(@RequestHeader(HttpHeaders.AUTHORIZATION) String authorisation, @@ -317,9 +317,9 @@ public String deleteCitizenStatementDocument(@RequestBody DeleteDocumentRequest CaseData tempCaseData = CaseUtils.getCaseData(caseDetails, objectMapper); if (deleteDocumentRequest.getValues() != null && deleteDocumentRequest.getValues().containsKey("documentId")) { - final String documenIdToBeDeleted = deleteDocumentRequest.getValues().get("documentId"); + final String documentIdToBeDeleted = deleteDocumentRequest.getValues().get("documentId"); tempUploadedDocumentsList = tempCaseData.getCitizenUploadedDocumentList(); - uploadedDocumentsList = tempUploadedDocumentsList.stream().filter(element -> !documenIdToBeDeleted.equalsIgnoreCase( + uploadedDocumentsList = tempUploadedDocumentsList.stream().filter(element -> !documentIdToBeDeleted.equalsIgnoreCase( element.getId().toString())) .toList(); } @@ -344,7 +344,7 @@ public String deleteCitizenStatementDocument(@RequestBody DeleteDocumentRequest @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Uploaded Successfully"), @ApiResponse(responseCode = "400", description = "Bad Request while uploading the document"), - @ApiResponse(responseCode = "401", description = "Provided Authroization token is missing or invalid"), + @ApiResponse(responseCode = "401", description = "Provided Authorization token is missing or invalid"), @ApiResponse(responseCode = "500", description = "Internal Server Error") }) public ResponseEntity uploadCitizenDocument(@RequestHeader(HttpHeaders.AUTHORIZATION) String authorisation, diff --git a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java index 485d819b247..9a78fdb33a3 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/services/document/DocumentGenService.java @@ -3,6 +3,7 @@ import feign.FeignException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -45,16 +46,18 @@ import java.io.IOException; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Optional; +import java.util.function.IntFunction; +import java.util.stream.IntStream; import static java.util.Objects.nonNull; import static java.util.Optional.ofNullable; -import static org.apache.commons.collections4.ListUtils.emptyIfNull; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C100_CASE_TYPE; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C1A_DRAFT_HINT; import static uk.gov.hmcts.reform.prl.constants.PrlAppsConstants.C1A_FINAL_RESPONSE_DOCUMENT; @@ -565,7 +568,6 @@ private static boolean isAohPresent(CaseData caseData) { } public Map generateDraftDocumentsForC100CaseResubmission(String authorisation, CaseData caseData) throws Exception { - Map updatedCaseData = new HashMap<>(); DocumentLanguage documentLanguage = documentLanguageService.docGenerateLang(caseData); boolean isConfidentialInformationPresentForC100 = isConfidentialInformationPresentForC100(caseData); boolean isC1aPresentForC100 = C100_CASE_TYPE.equalsIgnoreCase(caseData.getCaseTypeOfApplication()) @@ -574,7 +576,7 @@ public Map generateDraftDocumentsForC100CaseResubmission(String || (caseData.getAllegationOfHarmRevised() != null && YesOrNo.Yes.equals(caseData.getAllegationOfHarmRevised().getNewAllegationsOfHarmYesNo())); - updatedCaseData.putAll(generateC100DraftDocuments(authorisation, caseData)); + Map updatedCaseData = new HashMap<>(generateC100DraftDocuments(authorisation, caseData)); generateDraftEngC1aAndC8DocumentsForResubmission( authorisation, caseData, @@ -694,7 +696,7 @@ public Map generateC7DraftDocuments(String authorisation, CaseDa return updatedCaseData; } - private String getCitizenUploadedStatementFileName(DocumentRequest documentRequest, DocumentCategory documentCategory) { + private String getCitizenUploadedStatementFileName(DocumentRequest documentRequest, DocumentCategory documentCategory, String language) { StringBuilder fileNameBuilder = new StringBuilder(); if (null != documentRequest.getPartyName()) { @@ -705,6 +707,8 @@ private String getCitizenUploadedStatementFileName(DocumentRequest documentReque fileNameBuilder.append(documentCategory.getFileNamePrefix()); fileNameBuilder.append(UNDERSCORE); } + fileNameBuilder.append(language); + fileNameBuilder.append(UNDERSCORE); fileNameBuilder.append(dateTime.now().format(DateTimeFormatter.ofPattern("dd-MMM-yyyy-hh-mm-ss-a", Locale.UK))); fileNameBuilder.append(UNDERSCORE); fileNameBuilder.append(SUBMITTED_PDF); @@ -1538,10 +1542,6 @@ public List generateAndUploadDocument(String authorisation, String categoryId = documentRequest.getCategoryId(); DocumentCategory documentCategory = nonNull(categoryId) ? DocumentCategory.getValue(categoryId) : null; - //generate file name - String fileName = getCitizenUploadedStatementFileName(documentRequest, documentCategory); - log.info("fileName {}", fileName); - List citizenUploadTemplates = nonNull(documentCategory) && documentCategory.isWitnessStatement() ? List.of(prlCitizenWitnessStatementTemplate, prlCitizenWitnessStatementWelshTemplate) : List.of(prlCitizenUploadTemplate); @@ -1556,13 +1556,26 @@ public List generateAndUploadDocument(String authorisation, log.info("generatedDocumentInfo {}", generatedDocumentInfos); - return emptyIfNull(generatedDocumentInfos) - .stream() - .map(generatedDocumentInfo -> DocumentResponse.builder() + List languages = List.of("ENG", "WELSH"); + List documentResponses = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(generatedDocumentInfos)) { + documentResponses = IntStream.range(0, generatedDocumentInfos.size()) + .mapToObj(buildDocumentResponse(documentRequest, documentCategory, languages, generatedDocumentInfos)) + .toList(); + } + return documentResponses; + } + + private IntFunction buildDocumentResponse(DocumentRequest documentRequest, DocumentCategory documentCategory, + List languages, List generatedDocumentInfos) { + return i -> { + String fileName = getCitizenUploadedStatementFileName(documentRequest, documentCategory, languages.get(i)); + log.info("fileName {}", fileName); + return DocumentResponse.builder() .status(SUCCESS) - .document(generateDocumentField(fileName, generatedDocumentInfo)) - .build()) - .toList(); + .document(generateDocumentField(fileName, generatedDocumentInfos.get(i))) + .build(); + }; } } diff --git a/src/test/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerTest.java b/src/test/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerTest.java index ca1928b44da..d9e94564d81 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/controllers/citizen/CaseDocumentControllerTest.java @@ -325,12 +325,6 @@ void testGenerateCitizenStatementDocumentt() throws Exception { @Test void testUploadCitizenStatementDocument() { - HashMap map = new HashMap<>(); - map.put("caseId", "1656350492135029"); - map.put("state", "AWAITING_SUBMISSION_TO_HMCTS"); - map.put("documentType", "test"); - map.put("partyName", "test"); - map.put("partyId", "test"); Document document = Document.builder().documentUrl("") .documentFileName("test") .build(); diff --git a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java index 78a7f4c8d0e..2e45c4c9052 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/services/DgsServiceTest.java @@ -290,7 +290,7 @@ public void testGenerateRespondentWitnessStatementForC100() { GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_RESPONDENT - ).get(0); + ).getFirst(); // Then assertNotNull(response); @@ -379,7 +379,7 @@ public void testGenerateApplicantWitnessStatementForC100() { GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_APPLICANT - ).get(0); + ).getFirst(); // Then assertNotNull(response); @@ -421,7 +421,7 @@ public void testGenerateApplicantWitnessStatementForFl401() { GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_APPLICANT - ).get(0); + ).getFirst(); // Then assertNotNull(response); @@ -448,7 +448,7 @@ public void testGenerateCitizenDocumentWithCaseDetailsRetrievedFromCcd() { GeneratedDocumentInfo response = dgsService.generateCitizenDocument( AUTHORISATION, documentRequest, List.of(TEMPLATE), DocumentCategory.WITNESS_STATEMENTS_RESPONDENT - ).get(0); + ).getFirst(); //Then assertNotNull(response); From 4ba4a92705601d9db2217a2ddf7aed2f3d8506ce Mon Sep 17 00:00:00 2001 From: Yogesh Dhonde Date: Thu, 2 Apr 2026 10:35:14 +0100 Subject: [PATCH 19/19] FPVTL-2345. --- src/main/resources/application.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index b6ca3ad89c7..cd09d33e823 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -23,7 +23,7 @@ prl: password: ${PRL_SYSTEM_UPDATE_PASSWORD:xxxxxx} document: generate: - uri: https://prl-dgs-pr-471.preview.platform.hmcts.net/health/liveness + uri: http://prl-dgs-aat.service.core-compute-aat.internal/health/liveness refdata: username: ${PRL_IDAM_REFDATA_USERNAME:xxxxxx} password: ${PRL_IDAM_REFDATA_PASSWORD:xxxxxx} @@ -465,7 +465,7 @@ case_document_am: url: ${CCD_CASE_DOCS_AM_API:http://ccd-case-document-am-api-aat.service.core-compute-aat.internal} prl-dgs-api: - url: https://prl-dgs-pr-471.preview.platform.hmcts.net + url: ${PRL_DGS_API_URL:http://prl-dgs-aat.service.core-compute-aat.internal} courtfinder: api: