Skip to content

Commit

Permalink
CIV-16297 Hearing date for order after hearing template (#6026)
Browse files Browse the repository at this point in the history
* CIV-16297 Hearing date for order after hearing template

* format hearing date for template

* pointing back to master

* adding new camunda image path

---------

Co-authored-by: vasudevganesanhmcts <100689363+vasudevganesanhmcts@users.noreply.github.com>
Co-authored-by: Madhan Mahadevan <madhan.mahadevan@hmcts.net>
  • Loading branch information
3 people authored Jan 30, 2025
1 parent 30bb5e0 commit 32e8a72
Show file tree
Hide file tree
Showing 9 changed files with 288 additions and 9 deletions.
Binary file modified docker/docmosis/templates/CV-UNS-DEC-ENG-01286.docx
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderAppeal;
import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderFurtherHearing;
import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderRepresentation;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDate;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDateType;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderMade;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderMadeOnDetails;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderMadeOnDetailsOrderWithoutNotice;
Expand Down Expand Up @@ -90,6 +92,9 @@
import static uk.gov.hmcts.reform.civil.enums.finalorders.FinalOrderRepresentationList.CLAIMANT_AND_DEFENDANT;
import static uk.gov.hmcts.reform.civil.enums.finalorders.FinalOrderToggle.SHOW;
import static uk.gov.hmcts.reform.civil.model.common.DynamicList.fromList;
import static uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDateType.DATE_RANGE;
import static uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDateType.SINGLE_DATE;
import static uk.gov.hmcts.reform.civil.service.docmosis.caseprogression.JudgeOrderDownloadGenerator.BLANK_TEMPLATE_TO_BE_USED_AFTER_A_HEARING;
import static uk.gov.hmcts.reform.civil.utils.ElementUtils.element;

@Service
Expand Down Expand Up @@ -141,6 +146,10 @@ public class GenerateDirectionOrderCallbackHandler extends CallbackHandler {
+ " Standard Direction Order (SDO) otherwise use Not suitable for SDO.";
public static final String NOT_ALLOWED_FOR_TRACK = "The Make an order event is not available for Small Claims and Fast Track cases until the track has"
+ " been allocated. You must use the Standard Direction Order (SDO) to proceed.";
public static final String FUTURE_SINGLE_DATE_ERROR = "The date in Order made may not be later than the established date";
public static final String FUTURE_DATE_FROM_ERROR = "The date in Order made 'Date from' may not be later than the established date";
public static final String FUTURE_DATE_TO_ERROR = "The date in Order made 'Date to' may not be later than the established date";
public static final String DATE_FROM_AFTER_DATE_TO_ERROR = "The date in Order made 'Date from' may not be later than the 'Date to'";
private String defendantTwoPartyName;
private String claimantTwoPartyName;
public static final String APPEAL_NOTICE_DATE = "Appeal notice date";
Expand All @@ -163,6 +172,7 @@ protected Map<String, Callback> callbacks() {
callbackKey(MID, "populate-form-values"), this::populateFormValues,
callbackKey(MID, "create-download-template-document"), this::generateTemplate,
callbackKey(MID, "validate-and-generate-document"), this::validateFormAndGeneratePreviewDocument,
callbackKey(MID, "hearing-date-order"), this::addingHearingDateToTemplate,
callbackKey(ABOUT_TO_SUBMIT), this::addGeneratedDocumentToCollection,
callbackKey(SUBMITTED), this::buildConfirmation
);
Expand Down Expand Up @@ -224,7 +234,9 @@ private CallbackResponse nullPreviousSelections(CaseData.CaseDataBuilder<?, ?> c
caseDataBuilder.finalOrderTrackAllocation(null)
.finalOrderAllocateToTrack(null)
.finalOrderIntermediateTrackComplexityBand(null)
.finalOrderDownloadTemplateOptions(null);
.finalOrderDownloadTemplateOptions(null)
.orderAfterHearingDate(null)
.showOrderAfterHearingDatePage(null);

return AboutToStartOrSubmitCallbackResponse.builder()
.data(caseDataBuilder.build().toMap(objectMapper))
Expand All @@ -235,6 +247,30 @@ private CallbackResponse generateTemplate(CallbackParams callbackParams) {
CaseData caseData = callbackParams.getCaseData();
CaseData.CaseDataBuilder<?, ?> caseDataBuilder = caseData.toBuilder();

if (!BLANK_TEMPLATE_TO_BE_USED_AFTER_A_HEARING.equals(caseData.getFinalOrderDownloadTemplateOptions().getValue().getLabel())) {
CaseDocument documentDownload = judgeOrderDownloadGenerator.generate(caseData, callbackParams.getParams().get(BEARER_TOKEN).toString());
caseDataBuilder.finalOrderDownloadTemplateDocument(documentDownload);
caseDataBuilder.showOrderAfterHearingDatePage(NO);
} else {
caseDataBuilder.showOrderAfterHearingDatePage(YES);
}

return AboutToStartOrSubmitCallbackResponse.builder()
.data(caseDataBuilder.build().toMap(objectMapper))
.build();
}

private CallbackResponse addingHearingDateToTemplate(CallbackParams callbackParams) {
CaseData caseData = callbackParams.getCaseData();
CaseData.CaseDataBuilder<?, ?> caseDataBuilder = caseData.toBuilder();
List<String> errors = validateOrderAfterHearingDates(caseData);

if (!errors.isEmpty()) {
return AboutToStartOrSubmitCallbackResponse.builder()
.errors(errors)
.build();
}

CaseDocument documentDownload = judgeOrderDownloadGenerator.generate(caseData, callbackParams.getParams().get(BEARER_TOKEN).toString());
caseDataBuilder.finalOrderDownloadTemplateDocument(documentDownload);

Expand Down Expand Up @@ -752,4 +788,27 @@ private String getDocumentFilename(CaseData caseData, CaseDocument document, Str
}
return updatedFileName.append(".").append(ext).toString();
}

private List<String> validateOrderAfterHearingDates(CaseData caseData) {
List<String> errors = new ArrayList<>();
LocalDate now = LocalDate.now();
OrderAfterHearingDate orderAfterHearingDate = caseData.getOrderAfterHearingDate();
OrderAfterHearingDateType dateType = orderAfterHearingDate.getDateType();

if (dateType.equals(SINGLE_DATE) && orderAfterHearingDate.getDate().isAfter(now)) {
errors.add(FUTURE_SINGLE_DATE_ERROR);
}
if (dateType.equals(DATE_RANGE)) {
if (orderAfterHearingDate.getFromDate().isAfter(now)) {
errors.add(FUTURE_DATE_FROM_ERROR);
}
if (orderAfterHearingDate.getToDate().isAfter(now)) {
errors.add(FUTURE_DATE_TO_ERROR);
}
if (orderAfterHearingDate.getFromDate().isAfter(orderAfterHearingDate.getToDate())) {
errors.add(DATE_FROM_AFTER_DATE_TO_ERROR);
}
}
return errors;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderFurtherHearing;
import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderRecitalsRecorded;
import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderRepresentation;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDate;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderMade;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderMadeOnDetails;
import uk.gov.hmcts.reform.civil.model.finalorders.OrderMadeOnDetailsOrderWithoutNotice;
Expand Down Expand Up @@ -178,6 +179,8 @@ public class CaseDataCaseProgression extends CaseDataCaseSdo implements Mappable
private CaseDocument finalOrderDownloadTemplateDocument;
private Document uploadOrderDocumentFromTemplate;
private String finalOrderTrackToggle;
private OrderAfterHearingDate orderAfterHearingDate;
private YesOrNo showOrderAfterHearingDatePage;

// judge final freeform orders
private final FinalOrderSelection finalOrderSelection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,5 @@ public class JudgeFinalOrderForm implements MappableObject {
private final YesOrNo claimTrack;
private final String trackAndComplexityBandText;
private final String dateNowPlus7;
private final String orderAfterHearingDate;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package uk.gov.hmcts.reform.civil.model.finalorders;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;

@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class OrderAfterHearingDate {

private OrderAfterHearingDateType dateType;
private LocalDate date;
private LocalDate fromDate;
private LocalDate toDate;
private String bespokeDates;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package uk.gov.hmcts.reform.civil.model.finalorders;

public enum OrderAfterHearingDateType {
SINGLE_DATE,
DATE_RANGE,
BESPOKE_RANGE
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

import static java.lang.String.format;
import static java.util.Objects.nonNull;
Expand Down Expand Up @@ -49,6 +50,8 @@ public class JudgeOrderDownloadGenerator extends JudgeFinalOrderGenerator implem
public static final String INTERMEDIATE_NO_BAND_WITH_REASON = "This case is allocated to the Intermediate Track and is not allocated a complexity band because %s.";
public static final String INTERMEDIATE_WITH_BAND_NO_REASON = "This case is allocated to the Intermediate Track and is allocated to complexity band %s.";
public static final String INTERMEDIATE_WITH_BAND_WITH_REASON = "This case is allocated to the Intermediate Track and is allocated to complexity band %s because %s.";
public static final String ORDER_AFTER_HEARING_ON = "This order is made following a hearing on %s.";
public static final String ORDER_AFTER_HEARING_BETWEEN = "This order is made following a hearing between %s and %s.";
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d MMMM yyyy");

public JudgeOrderDownloadGenerator(DocumentManagementService documentManagementService, DocumentGeneratorService documentGeneratorService,
Expand Down Expand Up @@ -103,7 +106,9 @@ public JudgeFinalOrderForm getDownloadTemplate(CaseData caseData, String authori
}

public JudgeFinalOrderForm getBlankAfterHearing(CaseData caseData, String authorisation) {
return getBaseTemplateData(caseData, authorisation).build();
return getBaseTemplateData(caseData, authorisation)
.orderAfterHearingDate(getOrderAfterHearingDateText(caseData))
.build();
}

public JudgeFinalOrderForm getBlankBeforeHearing(CaseData caseData, String authorisation) {
Expand Down Expand Up @@ -182,4 +187,13 @@ public String getComplexityBand(CaseData caseData) {
return null;
}

private String getOrderAfterHearingDateText(CaseData caseData) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM yyyy", Locale.ENGLISH);
return switch (caseData.getOrderAfterHearingDate().getDateType()) {
case SINGLE_DATE -> format(ORDER_AFTER_HEARING_ON, caseData.getOrderAfterHearingDate().getDate().format(formatter));
case DATE_RANGE -> format(ORDER_AFTER_HEARING_BETWEEN, caseData.getOrderAfterHearingDate().getFromDate().format(formatter),
caseData.getOrderAfterHearingDate().getToDate().format(formatter));
case BESPOKE_RANGE -> format(ORDER_AFTER_HEARING_ON, caseData.getOrderAfterHearingDate().getBespokeDates());
};
}
}
Loading

0 comments on commit 32e8a72

Please sign in to comment.