Skip to content
Open
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package uk.gov.hmcts.reform.pcs.ccd.accesscontrol;

public final class CaseworkerRoles {

public static final UserRole[] CASEWORKER_ROLES = {
UserRole.HEARING_CENTRE_TEAM_LEADER,
UserRole.HEARING_CENTRE_ADMIN,
};

private CaseworkerRoles() {
}
}
19 changes: 16 additions & 3 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 @@ -31,12 +31,13 @@
import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.InternalTabAccess;
import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.PartyVisibleTabAccess;
import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.RasValidationAccess;
import uk.gov.hmcts.reform.pcs.ccd.domain.caseworker.EnterGenAppRequest;
import uk.gov.hmcts.reform.pcs.ccd.domain.dashboard.DashboardData;
import uk.gov.hmcts.reform.pcs.ccd.domain.documentupload.DocumentUploadDetails;
import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder;
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 All @@ -48,17 +49,17 @@
import uk.gov.hmcts.reform.pcs.ccd.domain.grounds.SecureOrFlexiblePossessionGrounds;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.PossessionClaimResponse;
import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails;
import uk.gov.hmcts.reform.pcs.ccd.domain.tabs.parties.CasePartiesTab;
import uk.gov.hmcts.reform.pcs.ccd.domain.tabs.details.CaseDetailsTab;
import uk.gov.hmcts.reform.pcs.ccd.domain.tabs.parties.CasePartiesTab;
import uk.gov.hmcts.reform.pcs.ccd.domain.tabs.summary.SummaryTab;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.ASBQuestionsDetailsWales;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.EstateManagementGroundsWales;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.GroundsForPossessionWales;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.GroundsReasonsWales;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.OccupationLicenceDetailsWales;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.PeriodicContractTermsWales;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.WalesDocuments;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.SecureContractGroundsForPossessionWales;
import uk.gov.hmcts.reform.pcs.ccd.domain.wales.WalesDocuments;
import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringList;
import uk.gov.hmcts.reform.pcs.postcodecourt.model.LegislativeCountry;

Expand Down Expand Up @@ -622,6 +623,18 @@ public class PCSCase {
)
private CitizenGenAppRequest citizenGenAppRequest;

@CCD(
searchable = false
)
@JsonUnwrapped(prefix = "enter_genapp_")
private EnterGenAppRequest enterGenAppRequest;

@CCD(label = "Which party made the application?",
searchable = false,
typeOverride = DynamicRadioList
)
private DynamicList partyRadioList;

@CCD(
label = "Search Criteria",
access = {GlobalSearchAccess.class}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package uk.gov.hmcts.reform.pcs.ccd.domain.caseworker;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
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.FieldType;
import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo;

import java.time.LocalDate;

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public class EnterGenAppRequest {

@CCD(label = "What date was the application received?")
private LocalDate dateReceived;

@CCD(label = "Which type of application has the applicant made?")
private EnterGenAppType applicationTypeOption;

@CCD(
label = "Which categories apply?",
typeOverride = FieldType.TextArea
)
private String somethingElseDetails;

@CCD(label = "Is there a hearing for this case in the next 14 days?")
private VerticalYesNo within14Days;

@CCD(label = "Has the applicant included a Help With Fees reference number on their application")
private VerticalYesNo appliedForHwf;

@CCD(
label = "Enter their Help with Fees reference number",
max = 60
)
private String hwfReference;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package uk.gov.hmcts.reform.pcs.ccd.domain.caseworker;

import lombok.AllArgsConstructor;
import lombok.Getter;
import uk.gov.hmcts.ccd.sdk.api.HasLabel;
import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppType;

@Getter
@AllArgsConstructor
public enum EnterGenAppType implements HasLabel {

ADJOURN("Adjourn"),
SET_ASIDE("Set aside"),
SOMETHING_ELSE("Something else");

private final String label;

public GenAppType getStandardGenAppType() {
return GenAppType.valueOf(name());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity;
import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -119,6 +120,10 @@ public class GenAppEntity {

private LocalDateTime applicationSubmittedDate;

private LocalDate applicationReceivedDate;

private String somethingElseDetails;

@OneToOne(cascade = ALL, orphanRemoval = true)
@JoinColumn(name = "submission_document_id")
private DocumentEntity submissionDocument;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@ public enum EventId {
addCaseNote,
createFlags,
amendFlags,
claimIssuePayment
claimIssuePayment,
enterGenApp
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package uk.gov.hmcts.reform.pcs.ccd.event.caseworker.entergenapp;

import lombok.RequiredArgsConstructor;
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.Event;
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.DynamicList;
import uk.gov.hmcts.ccd.sdk.type.DynamicListElement;
import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.UserRole;
import uk.gov.hmcts.reform.pcs.ccd.common.PageBuilder;
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.VerticalYesNo;
import uk.gov.hmcts.reform.pcs.ccd.domain.genapp.GenAppState;
import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity;
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.entity.party.PartyRole;
import uk.gov.hmcts.reform.pcs.ccd.page.caseworker.entergenapp.ApplicationDetails;
import uk.gov.hmcts.reform.pcs.ccd.page.caseworker.entergenapp.ApplicationFee;
import uk.gov.hmcts.reform.pcs.ccd.page.caseworker.entergenapp.HearingDate;
import uk.gov.hmcts.reform.pcs.ccd.service.PcsCaseService;
import uk.gov.hmcts.reform.pcs.ccd.service.genapp.GenAppService;
import uk.gov.hmcts.reform.pcs.ccd.service.party.PartyService;

import java.util.List;

import static uk.gov.hmcts.reform.pcs.ccd.accesscontrol.CaseworkerRoles.CASEWORKER_ROLES;
import static uk.gov.hmcts.reform.pcs.ccd.accesscontrol.JudicialHistoryRoles.JUDICIAL_HISTORY_ROLES;
import static uk.gov.hmcts.reform.pcs.ccd.event.EventId.enterGenApp;

@Component
@RequiredArgsConstructor
public class EnterGenApp implements CCDConfig<PCSCase, State, UserRole> {

private final PcsCaseService pcsCaseService;
private final PartyService partyService;
private final ApplicationDetails applicationDetails;
private final GenAppService genAppService;

@Override
public void configureDecentralised(DecentralisedConfigBuilder<PCSCase, State, UserRole> configBuilder) {
Event.EventBuilder<PCSCase, UserRole, State> eventBuilder = configBuilder
.decentralisedEvent(enterGenApp.name(), this::submit, this::start)
.forStates(State.CASE_ISSUED)
.name("Enter a general application")
.grant(Permission.CRU, CASEWORKER_ROLES)
.grantHistoryOnly(JUDICIAL_HISTORY_ROLES);

new PageBuilder(eventBuilder)
.add(applicationDetails)
.add(new HearingDate())
.add(new ApplicationFee());
}

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

PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(eventPayload.caseReference());
ClaimEntity mainClaim = pcsCaseEntity.getClaims().getFirst();

caseData.setPartyRadioList(buildApplicantPartyList(mainClaim));

return caseData;
}

private DynamicList buildApplicantPartyList(ClaimEntity mainClaim) {
List<DynamicListElement> listItems = mainClaim.getClaimParties().stream()
.filter(claimPartyEntity -> claimPartyEntity.getRole() == PartyRole.CLAIMANT
|| claimPartyEntity.getRole() == PartyRole.DEFENDANT)
.map(claimPartyEntity -> DynamicListElement.builder()
.code(claimPartyEntity.getParty().getId())
.label("%s - %s".formatted(
buildPartyDisplayName(claimPartyEntity.getParty()),
partyService.getPartyLabel(mainClaim, claimPartyEntity.getParty().getId())
))
.build())
.toList();

return DynamicList.builder().listItems(listItems).build();
}

private String buildPartyDisplayName(PartyEntity partyEntity) {
if (partyEntity.getNameKnown() == VerticalYesNo.NO) {
return "Person unknown";
}
return partyService.getPartyName(partyEntity);
}

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

PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference);
PartyEntity applicantParty = partyService.getPartyEntityByEntityId(
caseData.getPartyRadioList().getValueCode(), caseReference);

genAppService.createGenAppEntity(
caseData.getEnterGenAppRequest(), pcsCaseEntity, applicantParty, GenAppState.GEN_APP_ISSUED);

return SubmitResponse.<State>builder().build();
Comment thread
scottstewart-sl marked this conversation as resolved.
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package uk.gov.hmcts.reform.pcs.ccd.page.caseworker.entergenapp;

import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import uk.gov.hmcts.ccd.sdk.api.CaseDetails;
import uk.gov.hmcts.ccd.sdk.api.callback.AboutToStartOrSubmitResponse;
import uk.gov.hmcts.reform.pcs.ccd.common.CcdPageConfiguration;
import uk.gov.hmcts.reform.pcs.ccd.common.PageBuilder;
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.caseworker.EnterGenAppRequest;
import uk.gov.hmcts.reform.pcs.ccd.domain.caseworker.EnterGenAppType;
import uk.gov.hmcts.reform.pcs.ccd.service.TextAreaValidationService;

import java.util.List;

import static uk.gov.hmcts.reform.pcs.ccd.ShowConditions.fieldEquals;

@AllArgsConstructor
@Component
public class ApplicationDetails implements CcdPageConfiguration {

private static final String SOMETHING_ELSE_DETAILS_LABEL = "Which categories apply";

private final TextAreaValidationService textAreaValidationService;

@Override
public void addTo(PageBuilder pageBuilder) {
pageBuilder
.page("applicationDetails", this::midEvent)
.pageLabel("Application details")
.label("applicationDetails-lineSeparator", "---")
.mandatory(PCSCase::getPartyRadioList)
.complex(PCSCase::getEnterGenAppRequest)
.mandatory(EnterGenAppRequest::getDateReceived)
.mandatory(EnterGenAppRequest::getApplicationTypeOption)
.mandatory(
EnterGenAppRequest::getSomethingElseDetails,
fieldEquals("enter_genapp_ApplicationTypeOption", EnterGenAppType.SOMETHING_ELSE)
)
.done();
}

private AboutToStartOrSubmitResponse<PCSCase, State> midEvent(CaseDetails<PCSCase, State> details,
CaseDetails<PCSCase, State> detailsBefore) {
PCSCase caseData = details.getData();

List<String> validationErrors = validateSomethingElseDetails(caseData);

return textAreaValidationService.createValidationResponse(caseData, validationErrors);
}

private List<String> validateSomethingElseDetails(PCSCase caseData) {
EnterGenAppRequest enterGenAppRequest = caseData.getEnterGenAppRequest();
if (enterGenAppRequest == null
|| enterGenAppRequest.getApplicationTypeOption() != EnterGenAppType.SOMETHING_ELSE) {
return List.of();
}

return textAreaValidationService.validateSingleTextArea(
enterGenAppRequest.getSomethingElseDetails(),
SOMETHING_ELSE_DETAILS_LABEL,
TextAreaValidationService.MEDIUM_TEXT_LIMIT
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package uk.gov.hmcts.reform.pcs.ccd.page.caseworker.entergenapp;

import uk.gov.hmcts.reform.pcs.ccd.common.CcdPageConfiguration;
import uk.gov.hmcts.reform.pcs.ccd.common.PageBuilder;

public class ApplicationFee implements CcdPageConfiguration {

@Override
public void addTo(PageBuilder pageBuilder) {
pageBuilder
.page("applicationFee")
.pageLabel("Application fee")
.label("applicationFee-lineSeparator", "---")
.label("applicationFee-placeholder", "Application fee details(placeholder)");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package uk.gov.hmcts.reform.pcs.ccd.page.caseworker.entergenapp;

import uk.gov.hmcts.reform.pcs.ccd.common.CcdPageConfiguration;
import uk.gov.hmcts.reform.pcs.ccd.common.PageBuilder;
import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase;
import uk.gov.hmcts.reform.pcs.ccd.domain.caseworker.EnterGenAppRequest;
import uk.gov.hmcts.reform.pcs.ccd.domain.caseworker.EnterGenAppType;

import static uk.gov.hmcts.reform.pcs.ccd.ShowConditions.fieldEquals;

public class HearingDate implements CcdPageConfiguration {

@Override
public void addTo(PageBuilder pageBuilder) {
pageBuilder
.page("hearingDate")
.pageLabel("Hearing date")
.showCondition(fieldEquals("enter_genapp_ApplicationTypeOption", EnterGenAppType.ADJOURN))
.label("hearingDate-lineSeparator", "---")
.complex(PCSCase::getEnterGenAppRequest)
.mandatory(EnterGenAppRequest::getWithin14Days)
.done();
}

}
Loading
Loading