Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dfr 3543 ct judiciary upload multiple attachments function #2109

Open
wants to merge 40 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
b9f0934
Add additionalDocuments property to DraftDirectionOrder
hamzahtahirhmcts Jan 24, 2025
28c152d
Add collection for additional documents
hamzahtahirhmcts Jan 24, 2025
a0e3dc0
convert controller point to AboutToSubmit Handler for the judge order…
hamzahtahirhmcts Jan 24, 2025
d40a618
Categorise additional documents into POST_HEARING_DRAFT_ORDER
hamzahtahirhmcts Jan 24, 2025
3a453ca
Method to conver additional docs to PDF
hamzahtahirhmcts Jan 27, 2025
f2c1217
Check that the additional docs collection is not empty
hamzahtahirhmcts Jan 27, 2025
12f885e
Check that the additional docs are not empty
hamzahtahirhmcts Jan 27, 2025
641c06d
Add unit tests for new JudgeDraftOrderAboutToSubmitHandler
hamzahtahirhmcts Jan 27, 2025
2ce3f9b
Improve unit tests
hamzahtahirhmcts Jan 27, 2025
8182671
checkstyle fix
hamzahtahirhmcts Jan 27, 2025
b699ad0
checkstyle fix
hamzahtahirhmcts Jan 27, 2025
853cb50
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
so99y Jan 28, 2025
619aa8d
Ensure we use the same data through mapper
hamzahtahirhmcts Jan 28, 2025
fd5dcc6
improve tests and mocks
hamzahtahirhmcts Jan 28, 2025
31101b8
Merge remote-tracking branch 'origin/DFR-3543-CT-Judiciary---Upload-M…
hamzahtahirhmcts Jan 28, 2025
aca3a62
Use DocumentCollection instead
hamzahtahirhmcts Jan 28, 2025
14e1507
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
hamzahtahirhmcts Jan 28, 2025
43c776d
Add unit tests for UploadedDraftOrderCategoriser
hamzahtahirhmcts Jan 28, 2025
4aa9275
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
hamzahtahirhmcts Jan 28, 2025
fbfa587
Add additionalDocuments to DirectionOrder
hamzahtahirhmcts Jan 29, 2025
f199cea
Merge remote-tracking branch 'origin/DFR-3543-CT-Judiciary---Upload-M…
hamzahtahirhmcts Jan 29, 2025
dd4fa07
Store additional documents in uploadHearingOrder
hamzahtahirhmcts Jan 29, 2025
9613211
Store additional documents in finalOrderCollection
hamzahtahirhmcts Jan 29, 2025
d184776
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
hamzahtahirhmcts Jan 29, 2025
ddd87cc
Convert additional documents to PDF first.
hamzahtahirhmcts Jan 30, 2025
8eed7de
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
hamzahtahirhmcts Jan 30, 2025
44d9c44
remove redundant call to moveCollection
hamzahtahirhmcts Jan 30, 2025
a1dee5f
make a variable for judgeApprovedHearingOrder
hamzahtahirhmcts Jan 30, 2025
cce9d1d
remove assert for no additional documents
hamzahtahirhmcts Jan 30, 2025
5eeb2b1
validate draftDirectionOrderCollection is not empty
hamzahtahirhmcts Jan 30, 2025
ddb10ed
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
hamzahtahirhmcts Jan 30, 2025
4a9de4b
capitalise variable
hamzahtahirhmcts Jan 30, 2025
dc9eb9c
use CollectionUtils instead
hamzahtahirhmcts Jan 30, 2025
d095cc7
Remove Injectmocks annotation
hamzahtahirhmcts Jan 30, 2025
005b717
remove eq()
hamzahtahirhmcts Jan 30, 2025
78c8329
remove redundant api call to HearingOrderController.storeHearingOrder
hamzahtahirhmcts Jan 30, 2025
0bf3d72
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
jthmcts Jan 31, 2025
bcfd339
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
hamzahtahirhmcts Feb 3, 2025
9eb689c
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
so99y Feb 4, 2025
501783f
Merge branch 'master' into DFR-3543-CT-Judiciary---Upload-Multiple-At…
hamzahtahirhmcts Feb 6, 2025
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package uk.gov.hmcts.reform.finrem.caseorchestration.handler;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import uk.gov.hmcts.reform.ccd.client.model.CaseDetails;
import uk.gov.hmcts.reform.finrem.caseorchestration.ccd.callback.CallbackType;
import uk.gov.hmcts.reform.finrem.caseorchestration.controllers.GenericAboutToStartOrSubmitCallbackResponse;
import uk.gov.hmcts.reform.finrem.caseorchestration.mapper.FinremCaseDetailsMapper;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.EventType;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.CaseDocument;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.CaseType;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.DraftDirectionOrderCollection;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.FinremCaseData;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.FinremCaseDetails;
import uk.gov.hmcts.reform.finrem.caseorchestration.service.ContestedOrderApprovedLetterService;
import uk.gov.hmcts.reform.finrem.caseorchestration.service.GenericDocumentService;
import uk.gov.hmcts.reform.finrem.caseorchestration.service.HearingOrderService;
import uk.gov.hmcts.reform.finrem.caseorchestration.service.documentcatergory.UploadedDraftOrderCategoriser;

import java.util.List;

@Slf4j
@Service
public class JudgeDraftOrderAboutToSubmitHandler extends FinremCallbackHandler {

private final HearingOrderService hearingOrderService;
private final GenericDocumentService genericDocumentService;
private final ContestedOrderApprovedLetterService contestedOrderApprovedLetterService;
private final UploadedDraftOrderCategoriser uploadedDraftOrderCategoriser;

public JudgeDraftOrderAboutToSubmitHandler(FinremCaseDetailsMapper finremCaseDetailsMapper, HearingOrderService hearingOrderService,
GenericDocumentService genericDocumentService,
ContestedOrderApprovedLetterService contestedOrderApprovedLetterService,
UploadedDraftOrderCategoriser uploadedDraftOrderCategoriser) {
super(finremCaseDetailsMapper);
this.hearingOrderService = hearingOrderService;
this.genericDocumentService = genericDocumentService;
this.contestedOrderApprovedLetterService = contestedOrderApprovedLetterService;
this.uploadedDraftOrderCategoriser = uploadedDraftOrderCategoriser;
}

@Override
public boolean canHandle(CallbackType callbackType, CaseType caseType, EventType eventType) {
return CallbackType.ABOUT_TO_SUBMIT.equals(callbackType)
&& CaseType.CONTESTED.equals(caseType)
&& EventType.JUDGE_DRAFT_ORDER.equals(eventType);
}

@Override
public GenericAboutToStartOrSubmitCallbackResponse<FinremCaseData> handle(FinremCallbackRequest callbackRequest,
String userAuthorisation) {

FinremCaseDetails finremCaseDetails = callbackRequest.getCaseDetails();
String caseId = String.valueOf(finremCaseDetails.getId());
log.info("Invoking contested event {} about to submit callback for Case ID: {}",
callbackRequest.getEventType(), caseId);
validateCaseData(callbackRequest);
convertAdditionalDocumentsToPdf(finremCaseDetails, userAuthorisation);
CaseDetails caseDetails = finremCaseDetailsMapper.mapToCaseDetails(finremCaseDetails);

hearingOrderService.convertToPdfAndStampAndStoreLatestDraftHearingOrder(caseDetails, userAuthorisation);
contestedOrderApprovedLetterService.generateAndStoreContestedOrderApprovedLetter(caseDetails, userAuthorisation);
FinremCaseDetails finremCaseDetailsUpdated = finremCaseDetailsMapper.mapToFinremCaseDetails(caseDetails);
uploadedDraftOrderCategoriser.categorise(finremCaseDetailsUpdated.getData());

return GenericAboutToStartOrSubmitCallbackResponse.<FinremCaseData>builder()
.data(finremCaseDetailsUpdated.getData()).build();
}

private void convertAdditionalDocumentsToPdf(FinremCaseDetails caseDetails, String authorisation) {
FinremCaseData caseData = caseDetails.getData();
List<DraftDirectionOrderCollection> directionOrderCollection = caseData.getDraftDirectionWrapper().getDraftDirectionOrderCollection();

directionOrderCollection.stream().map(order -> order.getValue().getAdditionalDocuments())
.filter(CollectionUtils::isNotEmpty).forEach(additionalDocs -> additionalDocs.forEach(additionalDoc -> {
CaseDocument documentPdf = genericDocumentService.convertDocumentIfNotPdfAlready(
additionalDoc.getValue(), authorisation,
String.valueOf(caseDetails.getId()));

additionalDoc.setValue(documentPdf);
}));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import uk.gov.hmcts.reform.finrem.caseorchestration.ccd.callback.CallbackType;
import uk.gov.hmcts.reform.finrem.caseorchestration.controllers.GenericAboutToStartOrSubmitCallbackResponse;
import uk.gov.hmcts.reform.finrem.caseorchestration.mapper.FinremCaseDetailsMapper;
Expand All @@ -22,6 +23,9 @@ public class JudgeDraftOrderMidHandler extends FinremCallbackHandler {

private final BulkPrintDocumentService service;

private static final String NO_ORDERS_IN_COLLECTION
= "No orders have been uploaded. Please upload an order.";

public JudgeDraftOrderMidHandler(FinremCaseDetailsMapper finremCaseDetailsMapper,
BulkPrintDocumentService service) {
super(finremCaseDetailsMapper);
Expand All @@ -43,10 +47,16 @@ public GenericAboutToStartOrSubmitCallbackResponse<FinremCaseData> handle(Finrem
log.info("Invoking contested event {} mid callback for Case ID: {}",
EventType.JUDGE_DRAFT_ORDER, caseId);
FinremCaseData caseData = caseDetails.getData();

DraftDirectionWrapper draftDirectionWrapper = caseData.getDraftDirectionWrapper();
List<DraftDirectionOrderCollection> draftDirectionOrderCollection = draftDirectionWrapper.getDraftDirectionOrderCollection();

List<String> errors = new ArrayList<>();
if (ObjectUtils.isEmpty(draftDirectionOrderCollection)) {
jthmcts marked this conversation as resolved.
Show resolved Hide resolved
jthmcts marked this conversation as resolved.
Show resolved Hide resolved
errors.add(NO_ORDERS_IN_COLLECTION);
return GenericAboutToStartOrSubmitCallbackResponse.<FinremCaseData>builder()
.data(caseData).errors(errors).build();
}

FinremCaseDetails caseDetailsBefore = callbackRequest.getCaseDetailsBefore();
FinremCaseData beforeCaseData = caseDetailsBefore.getData();
DraftDirectionWrapper draftDirectionWrapperBefore = beforeCaseData.getDraftDirectionWrapper();
Expand All @@ -59,7 +69,6 @@ public GenericAboutToStartOrSubmitCallbackResponse<FinremCaseData> handle(Finrem
}
}

List<String> errors = new ArrayList<>();
draftDirectionOrderCollection.forEach(doc ->
service.validateEncryptionOnUploadedDocument(doc.getValue().getUploadDraftDocument(),
caseId, errors, userAuthorisation)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
Expand All @@ -26,4 +27,6 @@ public class DirectionOrder implements HasCaseDocument {
YesOrNo isOrderStamped;
@JsonProperty("originalDocument")
CaseDocument originalDocument;
@JsonProperty("additionalDocuments")
private List<DocumentCollection> additionalDocuments;
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
@Builder
Expand All @@ -21,4 +23,7 @@ public class DraftDirectionOrder implements HasCaseDocument {

@JsonProperty("uploadDraftDocument")
CaseDocument uploadDraftDocument;

@JsonProperty("additionalDocuments")
private List<DocumentCollection> additionalDocuments;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.CollectionElement;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.DirectionOrder;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.DirectionOrderCollection;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.DocumentCollection;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.DraftDirectionOrder;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.DraftDirectionOrderCollection;
import uk.gov.hmcts.reform.finrem.caseorchestration.model.ccd.FinremCaseData;
Expand Down Expand Up @@ -52,14 +53,16 @@ public void convertToPdfAndStampAndStoreLatestDraftHearingOrder(CaseDetails case

if (judgeApprovedHearingOrder.isPresent()) {
String caseId = caseDetails.getId().toString();
DraftDirectionOrder order = judgeApprovedHearingOrder.get();
CaseDocument latestDraftDirectionOrderDocument = genericDocumentService.convertDocumentIfNotPdfAlready(
judgeApprovedHearingOrder.get().getUploadDraftDocument(),
order.getUploadDraftDocument(),
authorisationToken, caseId);
CaseDocument stampedHearingOrder = genericDocumentService.stampDocument(latestDraftDirectionOrderDocument,
authorisationToken, documentHelper.getStampType(caseDetails.getData()), caseId);
updateCaseDataForLatestDraftHearingOrder(caseData, stampedHearingOrder);
updateCaseDataForLatestHearingOrderCollection(caseData, stampedHearingOrder, authorisationToken);
appendDocumentToHearingOrderCollection(caseDetails, stampedHearingOrder);
List<DocumentCollection> additionalDocs = order.getAdditionalDocuments();
updateCaseDataForLatestHearingOrderCollection(caseData, stampedHearingOrder, authorisationToken, additionalDocs);
appendDocumentToHearingOrderCollection(caseDetails, stampedHearingOrder, additionalDocs);
} else {
throw new InvalidCaseDataException(BAD_REQUEST.value(), "Missing data from callbackRequest.");
}
Expand Down Expand Up @@ -135,6 +138,7 @@ public Optional<DraftDirectionOrder> draftDirectionOrderCollectionTail(CaseDetai
genericDocumentService.convertDocumentIfNotPdfAlready(
draftOrder.getUploadDraftDocument(),
authorisationToken, caseId))
.additionalDocuments(draftOrder.getAdditionalDocuments())
.build());

}
Expand All @@ -152,14 +156,14 @@ private Optional<DraftDirectionOrder> getJudgeApprovedHearingOrder(CaseDetails c
: draftDirectionOrderCollectionTail;
}

private void appendDocumentToHearingOrderCollection(CaseDetails caseDetails, CaseDocument document) {
private void appendDocumentToHearingOrderCollection(CaseDetails caseDetails, CaseDocument document, List<DocumentCollection> additionalDocs) {
Map<String, Object> caseData = caseDetails.getData();

List<CollectionElement<DirectionOrder>> directionOrders = Optional.ofNullable(caseData.get(HEARING_ORDER_COLLECTION))
.map(this::convertToListOfDirectionOrder)
.orElse(new ArrayList<>());

DirectionOrder newDirectionOrder = DirectionOrder.builder().uploadDraftDocument(document).build();
DirectionOrder newDirectionOrder = DirectionOrder.builder().uploadDraftDocument(document).additionalDocuments(additionalDocs).build();
directionOrders.add(CollectionElement.<DirectionOrder>builder().value(newDirectionOrder).build());

caseData.put(HEARING_ORDER_COLLECTION, directionOrders);
Expand All @@ -171,13 +175,15 @@ private void updateCaseDataForLatestDraftHearingOrder(Map<String, Object> caseDa

public void updateCaseDataForLatestHearingOrderCollection(Map<String, Object> caseData,
CaseDocument stampedHearingOrder,
String authorisationToken) {
String authorisationToken,
List<DocumentCollection> additionalDocs) {
List<DirectionOrderCollection> finalOrderCollection = documentHelper.getFinalOrderCollection(caseData);
List<DirectionOrderCollection> finalDatedCollection = orderDateService.addCreatedDateInFinalOrder(finalOrderCollection, authorisationToken);
if (!documentHelper.checkIfOrderAlreadyInFinalOrderCollection(finalDatedCollection, stampedHearingOrder)) {
DirectionOrderCollection latestOrder = DirectionOrderCollection.builder()
.value(DirectionOrder.builder()
.uploadDraftDocument(stampedHearingOrder)
.additionalDocuments(additionalDocs)
.orderDateTime(LocalDateTime.now())
.isOrderStamped(YesOrNo.YES)
.build())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ private void categoriseOrders(List<DraftDirectionOrderCollection> orderCollectio
private void setCategoryIfAbsent(DraftDirectionOrder order, DocumentCategory category) {
if (order != null && order.getUploadDraftDocument() != null && order.getUploadDraftDocument().getCategoryId() == null) {
order.getUploadDraftDocument().setCategoryId(category.getDocumentCategoryId());

Optional.ofNullable(order.getAdditionalDocuments())
.ifPresent(additionalDocuments -> additionalDocuments.forEach(document ->
document.getValue().setCategoryId(category.getDocumentCategoryId())
));
hamzahtahirhmcts marked this conversation as resolved.
Show resolved Hide resolved
}
}
}
Expand Down
Loading