Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
ff2713b
added event seperate to additionalDocumenets
fudge88 May 21, 2026
bdb562a
fixed test
fudge88 May 21, 2026
f7e4d12
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 May 22, 2026
54d5961
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 May 22, 2026
4a0f4a0
ccd label
fudge88 May 22, 2026
e1ef3af
annotation fix
fudge88 May 22, 2026
c162f70
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 May 26, 2026
7555997
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 May 26, 2026
6a9df4b
merged master - gen apps
fudge88 May 26, 2026
ce5c129
Merge branch 'HDPI-6159-upload-additional-doc-event' of github.com:hm…
fudge88 May 26, 2026
df1917d
docmuemnt name service from 1839, refactored start call back, genappi…
fudge88 May 26, 2026
0c68703
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 May 26, 2026
86e251e
uuid to string type
fudge88 May 26, 2026
14690ca
checkstyle fix
fudge88 May 26, 2026
77fc89d
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 May 26, 2026
9250628
supress sonar warnings fixed test
fudge88 May 26, 2026
dc98d33
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 May 26, 2026
24e3f4e
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
mazzopardi2 May 28, 2026
cb3e905
merge conflict
fudge88 May 29, 2026
ef04149
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
marianadpereira May 29, 2026
56d4053
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
mazzopardi2 Jun 2, 2026
89d559c
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 3, 2026
710e3e1
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 3, 2026
f063659
null guard
fudge88 Jun 3, 2026
068b18a
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 3, 2026
b04166e
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 4, 2026
609ade5
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 4, 2026
68e1800
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 5, 2026
39b8665
updated appsubmitteddate
fudge88 Jun 5, 2026
0db0494
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 8, 2026
e6d3660
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 8, 2026
7ccf6c9
Merge branches 'HDPI-6159-upload-additional-doc-event' and 'HDPI-6159…
fudge88 Jun 8, 2026
b449ba4
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 8, 2026
b739797
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 8, 2026
60b34a1
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 8, 2026
9216b92
trigger CI
fudge88 Jun 8, 2026
45ad8a8
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 9, 2026
5968c0e
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 9, 2026
5d3f414
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
lovelin-07 Jun 9, 2026
41eda3b
Trigger preview redeploy
mazzopardi2 Jun 10, 2026
c3da421
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
mazzopardi2 Jun 10, 2026
493676e
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 10, 2026
e69087f
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 10, 2026
96b257a
HDPI-7064 - document id needs to be set where applicable
guygrewal77 Jun 10, 2026
621438d
HDPI-7064 - Sonar Qube fix to return empty list instead of null.
guygrewal77 Jun 10, 2026
f8c9307
Merge branch 'master' into HDPI-7064-document-id-null-bug
guygrewal77 Jun 10, 2026
0342f46
HDPI-7064 - Unit test fix
guygrewal77 Jun 10, 2026
30f85c4
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
mazzopardi2 Jun 10, 2026
3e11055
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 10, 2026
156dd70
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 12, 2026
d1a8353
Merge branch 'master' into HDPI-7064-document-id-null-bug
guygrewal77 Jun 12, 2026
20c0d2d
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 12, 2026
0284a86
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 12, 2026
fad4622
Merge branch 'HDPI-7064-document-id-null-bug' into HDPI-6159-upload-a…
fudge88 Jun 12, 2026
a264029
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 12, 2026
4ae3742
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 15, 2026
cda8a35
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
Rupali754 Jun 15, 2026
a418b7d
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 15, 2026
6ac8dcb
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
Rupali754 Jun 16, 2026
db4b0ba
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
adusumillipraveen Jun 16, 2026
3f81072
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 17, 2026
ba4f1d9
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 18, 2026
faccdf1
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 18, 2026
798b20b
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
Rupali754 Jun 19, 2026
233d7c6
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
lovelin-07 Jun 19, 2026
7a3e859
test commit
fudge88 Jun 19, 2026
5c2b0ab
updated vars to genapps new vars
fudge88 Jun 19, 2026
f679115
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 22, 2026
bf7202f
Hdpi 7026 without notice doc upload flow for dashboard (#1945)
fudge88 Jun 22, 2026
d4508ae
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 22, 2026
c670ed8
Merge branch 'master' into HDPI-6159-upload-additional-doc-event
fudge88 Jun 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.CitizenGenAppRequest;
import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GeneralApplication;
import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.XuiGenAppRequest;
import uk.gov.hmcts.reform.pcs.ccd.domain.documentupload.DocumentUploadDetails;
import uk.gov.hmcts.reform.pcs.ccd.domain.grounds.AssuredNoArrearsPossessionGrounds;
import uk.gov.hmcts.reform.pcs.ccd.domain.grounds.AssuredRentArrearsPossessionGrounds;
import uk.gov.hmcts.reform.pcs.ccd.domain.grounds.ClaimGroundSummary;
Expand Down Expand Up @@ -463,6 +464,15 @@ public class PCSCase {
@JsonUnwrapped(prefix = "walesDocs_")
private WalesDocuments requiredDocumentsWales;

@CCD(
access = DefendantAccess.class,
searchable = false
)
private List<ListValue<UploadedDocument>> uploadedAdditionalDocuments;

@JsonUnwrapped
private DocumentUploadDetails documentUploadDetails;

@CCD(
label = "Are you planning to make an application at the same time as your claim?",
hint = "After you’ve submitted your claim, there will be instructions on how to make an application"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package uk.gov.hmcts.reform.pcs.ccd.domain.documentupload;

import uk.gov.hmcts.ccd.sdk.api.HasLabel;

public enum DocumentUploadCategory implements HasLabel {

ADJOURN_HEARING_APPLICATION,
SUSPEND_EVICTION_APPLICATION,
SET_ASIDE_ORDER_APPLICATION,
GENERAL_APPLICATION;

@Override
public String getLabel() {
return name();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package uk.gov.hmcts.reform.pcs.ccd.domain.documentupload;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import uk.gov.hmcts.ccd.sdk.api.CCD;
import uk.gov.hmcts.ccd.sdk.type.ListValue;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.DefendantAccess;

import java.util.List;

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(Include.NON_NULL)
public class DocumentUploadDetails {

@CCD(
access = {DefendantAccess.class},
searchable = false
)
private YesOrNo showRelatedApplicationsPage;

@CCD(
access = {DefendantAccess.class},
searchable = false
)
private List<ListValue<RelatedApplicationOption>> relatedApplicationOptions;

@CCD(
access = {DefendantAccess.class},
searchable = false
)
private String selectedRelatedApplicationId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package uk.gov.hmcts.reform.pcs.ccd.domain.documentupload;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(Include.NON_NULL)
public class RelatedApplicationOption {

private String genAppId;
private DocumentUploadCategory category;
private LocalDateTime submittedDate;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package uk.gov.hmcts.reform.pcs.ccd.event;

@SuppressWarnings("java:S115") // constant names match the camelCase CCD event IDs registered via .name()
public enum EventId {

createPossessionClaim,
Expand All @@ -13,6 +14,7 @@ public enum EventId {
maintainCaseLink,
dashboardView,
confirmEviction,
uploadDocuments,
addCaseNote,
createFlags,
amendFlags,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
package uk.gov.hmcts.reform.pcs.ccd.event.citizen;

import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import uk.gov.hmcts.ccd.sdk.api.CCDConfig;
import uk.gov.hmcts.ccd.sdk.api.DecentralisedConfigBuilder;
import uk.gov.hmcts.ccd.sdk.api.EventPayload;
import uk.gov.hmcts.ccd.sdk.api.Permission;
import uk.gov.hmcts.ccd.sdk.api.callback.SubmitResponse;
import uk.gov.hmcts.ccd.sdk.type.ListValue;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.ShowConditions;
import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.UserRole;
import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase;
import uk.gov.hmcts.reform.pcs.ccd.domain.State;
import uk.gov.hmcts.reform.pcs.ccd.domain.documentupload.DocumentUploadCategory;
import uk.gov.hmcts.reform.pcs.ccd.domain.documentupload.DocumentUploadDetails;
import uk.gov.hmcts.reform.pcs.ccd.domain.documentupload.RelatedApplicationOption;
import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppType;
import uk.gov.hmcts.reform.pcs.ccd.entity.GenAppEntity;
import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity;
import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity;
import uk.gov.hmcts.reform.pcs.ccd.service.PcsCaseService;
import uk.gov.hmcts.reform.pcs.ccd.service.document.DocumentService;
import uk.gov.hmcts.reform.pcs.ccd.service.genapp.GenAppVisibilityService;
import uk.gov.hmcts.reform.pcs.ccd.service.party.PartyService;
import uk.gov.hmcts.reform.pcs.security.SecurityContextService;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

import static uk.gov.hmcts.reform.pcs.ccd.event.EventId.uploadDocuments;

@Slf4j
@Component
@AllArgsConstructor
public class UploadDocuments implements CCDConfig<PCSCase, State, UserRole> {

private final PcsCaseService pcsCaseService;
private final PartyService partyService;
private final SecurityContextService securityContextService;
private final DocumentService documentService;
private final GenAppVisibilityService genAppVisibilityService;

@Override
public void configureDecentralised(DecentralisedConfigBuilder<PCSCase, State, UserRole> configBuilder) {
configBuilder
.decentralisedEvent(uploadDocuments.name(), this::submit, this::start)
.forStates(State.CASE_ISSUED)
.name("Upload additional documents")
.showCondition(ShowConditions.NEVER_SHOW)
.grant(Permission.CRU, UserRole.DEFENDANT);
}

private PCSCase start(EventPayload<PCSCase, State> eventPayload) {
long caseReference = eventPayload.caseReference();
PCSCase caseData = eventPayload.caseData();

if (caseData.getDocumentUploadDetails() == null) {
caseData.setDocumentUploadDetails(new DocumentUploadDetails());
}

PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference);
UUID currentUserId = securityContextService.getCurrentUserId();

List<ListValue<RelatedApplicationOption>> options =
visibleGenAppsForUser(pcsCaseEntity, currentUserId).stream()
.map(this::toOption)
.filter(Objects::nonNull)
.toList();

caseData.getDocumentUploadDetails().setRelatedApplicationOptions(new ArrayList<>(options));

caseData.getDocumentUploadDetails().setShowRelatedApplicationsPage(
options.isEmpty() ? YesOrNo.NO : YesOrNo.YES);

return caseData;
}

private List<GenAppEntity> visibleGenAppsForUser(PcsCaseEntity pcsCaseEntity, UUID currentUserId) {
return genAppVisibilityService.getVisibleGenAppsToUser(pcsCaseEntity.getGenApps(), currentUserId);
}

private ListValue<RelatedApplicationOption> toOption(GenAppEntity genApp) {
DocumentUploadCategory category = mapGenAppTypeToCategory(genApp.getType());
if (category == null) {
return null;
Comment thread
fudge88 marked this conversation as resolved.
}
RelatedApplicationOption option = RelatedApplicationOption.builder()
.genAppId(genApp.getId().toString())
.category(category)
.submittedDate(genApp.getApplicationSubmittedDate())
.build();
return ListValue.<RelatedApplicationOption>builder()
.id(genApp.getId().toString())
.value(option)
.build();
}

private DocumentUploadCategory mapGenAppTypeToCategory(GenAppType type) {
if (type == null) {
return null;
Comment thread
fudge88 marked this conversation as resolved.
}
return switch (type) {
case ADJOURN -> DocumentUploadCategory.ADJOURN_HEARING_APPLICATION;
case SET_ASIDE -> DocumentUploadCategory.SET_ASIDE_ORDER_APPLICATION;
case SOMETHING_ELSE -> DocumentUploadCategory.GENERAL_APPLICATION;
};
}

private SubmitResponse<State> submit(EventPayload<PCSCase, State> eventPayload) {
long caseReference = eventPayload.caseReference();
PCSCase caseData = eventPayload.caseData();

PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference);
UUID currentUserId = securityContextService.getCurrentUserId();
PartyEntity uploadingParty = partyService.getPartyEntityByIdamId(currentUserId, caseReference);
GenAppEntity selectedGenApp = resolveSelectedGenApp(caseData, pcsCaseEntity, currentUserId);

documentService.linkAdditionalDocumentsToCase(
caseData.getUploadedAdditionalDocuments(),
pcsCaseEntity,
uploadingParty,
selectedGenApp
);

return SubmitResponse.<State>builder().build();
}

private GenAppEntity resolveSelectedGenApp(PCSCase caseData, PcsCaseEntity pcsCaseEntity, UUID currentUserId) {
DocumentUploadDetails details = caseData.getDocumentUploadDetails();
if (details == null || details.getSelectedRelatedApplicationId() == null) {
return null;
Comment thread
fudge88 marked this conversation as resolved.
}
UUID selectedId;
try {
selectedId = UUID.fromString(details.getSelectedRelatedApplicationId());
} catch (IllegalArgumentException e) {
return null;
}
return visibleGenAppsForUser(pcsCaseEntity, currentUserId).stream()
.filter(genApp -> selectedId.equals(genApp.getId()))
.findFirst()
.orElse(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,27 @@ public String appendGenAppPostfix(String originalFilename,
return filename;
}

public String appendPartyPostfix(String originalFilename,
ClaimEntity mainClaim,
UUID applicantPartyId) {

if (originalFilename == null) {
return null;
}

String baseName = FilenameUtils.getBaseName(originalFilename);
String extension = FilenameUtils.getExtension(originalFilename);

String partyLabel = getPartyLabel(mainClaim, applicantPartyId);
String filename = (partyLabel != null) ? "%s - %s".formatted(baseName, partyLabel) : baseName;

if (!extension.isBlank()) {
filename += "." + extension;
}

return filename;
}

private static String getPartyLabel(ClaimEntity mainClaim, UUID partyId) {
ClaimPartyEntity applicantClaimParty = getClaimParty(mainClaim, partyId);

Expand Down
Loading
Loading