Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Expand Up @@ -19,6 +19,9 @@
"summonsApprovalRequired": {
"description": "Indicates that the summons approval process is required to be initiated",
"type": "boolean"
},
"applicationSource": {
"$ref": "http://moj.gov.uk/cpp/progression/enum-def.json#/definitions/applicationSource"
}
},
"required": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
import static uk.gov.justice.core.courts.ProsecutingAuthority.prosecutingAuthority;
import static uk.gov.justice.services.core.annotation.Component.COMMAND_HANDLER;
import static uk.gov.justice.services.messaging.JsonEnvelope.envelopeFrom;
import static uk.gov.moj.cpp.progression.domain.constant.CaseStatusEnum.CLOSED;
import static uk.gov.moj.cpp.progression.domain.constant.CaseStatusEnum.INACTIVE;
import static uk.gov.moj.cpp.progression.enums.ApplicationSource.MH;
import static uk.gov.moj.cpp.progression.enums.ApplicationSource.UNKNOWN;

import uk.gov.justice.core.courts.AddBreachApplication;
import uk.gov.justice.core.courts.AddCourtApplicationToCase;
Expand Down Expand Up @@ -63,6 +67,7 @@
import uk.gov.justice.services.messaging.Metadata;
import uk.gov.moj.cpp.progression.aggregate.ApplicationAggregate;
import uk.gov.moj.cpp.progression.aggregate.HearingAggregate;
import uk.gov.moj.cpp.progression.enums.ApplicationSource;
import uk.gov.moj.cpp.progression.service.ApplicationDetailsEnrichmentService;
import uk.gov.moj.cpp.progression.service.ProsecutionCaseQueryService;
import uk.gov.moj.cpp.progression.service.RefDataService;
Expand Down Expand Up @@ -349,7 +354,7 @@ private InitiateCourtApplicationProceedings rebuildInitiateCourtApplicationProce
final boolean applicationReferredToNewHearing, final Envelope<InitiateCourtApplicationProceedings> envelope) {
final boolean summonsApprovalRequired = isSummonsApprovalRequired(initiateCourtProceedingsForApplication.getBoxHearing(), initiateCourtProceedingsForApplication.getCourtApplication());
final InitiateCourtApplicationProceedings.Builder initiateCourtProceedingsForApplicationBuilder = InitiateCourtApplicationProceedings.initiateCourtApplicationProceedings()
.withCourtApplication(rebuildCourtApplication(initiateCourtProceedingsForApplication.getCourtApplication(), envelope))
.withCourtApplication(rebuildCourtApplication(initiateCourtProceedingsForApplication.getCourtApplication(), initiateCourtProceedingsForApplication.getApplicationSource(), envelope))
.withSummonsApprovalRequired(summonsApprovalRequired)
.withIsAmended(initiateCourtProceedingsForApplication.getIsAmended())
.withOldApplicationId(initiateCourtProceedingsForApplication.getOldApplicationId())
Expand Down Expand Up @@ -384,13 +389,13 @@ private EditCourtApplicationProceedings rebuildEditCourtApplicationProceedings(f
final boolean summonsApprovalRequired = isSummonsApprovalRequired(editCourtApplicationProceedings.getBoxHearing(), editCourtApplicationProceedings.getCourtApplication());
final EditCourtApplicationProceedings.Builder editCourtProceedingsForApplicationBuilder = EditCourtApplicationProceedings.editCourtApplicationProceedings()
.withValuesFrom(editCourtApplicationProceedings)
.withCourtApplication(rebuildCourtApplication(editCourtApplicationProceedings.getCourtApplication(), envelope))
.withCourtApplication(rebuildCourtApplication(editCourtApplicationProceedings.getCourtApplication(), UNKNOWN, envelope))
.withSummonsApprovalRequired(summonsApprovalRequired);

return editCourtProceedingsForApplicationBuilder.build();
}

private CourtApplication rebuildCourtApplication(final CourtApplication courtApplication, final Envelope<?> envelope) {
private CourtApplication rebuildCourtApplication(final CourtApplication courtApplication, final ApplicationSource applicationSource, final Envelope<?> envelope) {

final LaaReference laaReference = getLaaApplnReference(courtApplication, envelope);

Expand All @@ -404,7 +409,7 @@ private CourtApplication rebuildCourtApplication(final CourtApplication courtApp
final JsonEnvelope jsonEnvelope = envelopeFrom(envelope.metadata(), JsonValue.NULL);

updateClonedCourtApplicationParties(courtApplicationBuilder, courtApplication, jsonEnvelope);
updateClonedOffenceApplicationCases(courtApplicationBuilder, courtApplication);
updateClonedOffenceApplicationCases(courtApplicationBuilder, courtApplication, applicationSource);
updateClonedOffenceCourtOrder(courtApplicationBuilder, courtApplication);


Expand Down Expand Up @@ -446,7 +451,7 @@ private boolean hasActivationCode(CourtApplicationType type) {
return StringUtils.isNotEmpty(type.getResentencingActivationCode());
}

private void updateClonedOffenceApplicationCases(final CourtApplication.Builder courtApplicationBuilder, final CourtApplication courtApplication) {
private void updateClonedOffenceApplicationCases(final CourtApplication.Builder courtApplicationBuilder, final CourtApplication courtApplication, final ApplicationSource applicationSource) {
if (isNull(courtApplication.getCourtApplicationCases())) {
return;
}
Expand All @@ -461,17 +466,31 @@ private void updateClonedOffenceApplicationCases(final CourtApplication.Builder
final String resentencingActivationCode = courtApplication.getType().getResentencingActivationCode();

final List<CourtApplicationCase> courtApplicationCases = courtApplication.getCourtApplicationCases().stream()
.map(courtApplicationCase -> courtApplicationCase()
.withValuesFrom(courtApplicationCase)
.withOffences(ofNullable(courtApplicationCase.getOffences()).map(Collection::stream).orElseGet(Stream::empty)
.map(courtApplicationOffence -> updateOffence(courtApplication.getType(), courtApplicationOffence, wordingPattern, resentencingActivationCode))
.collect(collectingAndThen(toList(), getListOrNull())))
.build())
.collect(toList());
.map(courtApplicationCase -> {
if (ignoreCaseOffences(courtApplicationCase.getCaseStatus(), applicationSource)) {
return courtApplicationCase()
.withValuesFrom(courtApplicationCase)
.withOffences(null)
.build();
} else {
return courtApplicationCase()
.withValuesFrom(courtApplicationCase)
.withOffences(ofNullable(courtApplicationCase.getOffences()).stream().flatMap(Collection::stream)
.map(courtApplicationOffence -> updateOffence(courtApplication.getType(), courtApplicationOffence, wordingPattern, resentencingActivationCode))
.collect(collectingAndThen(toList(), getListOrNull())))
.build();
}
}).collect(toList());

courtApplicationBuilder.withCourtApplicationCases(courtApplicationCases);
}

private boolean ignoreCaseOffences(final String caseStatus, final ApplicationSource applicationSource) {
final boolean activeCase = nonNull(caseStatus) && !(INACTIVE.name().equalsIgnoreCase(caseStatus) || CLOSED.name().equalsIgnoreCase(caseStatus));

return activeCase && MH == applicationSource;
}

private <T> UnaryOperator<List<T>> getListOrNull() {
return list -> list.isEmpty() ? null : list;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
"description": "Indicates that the summons approval process is required to be initiated",
"type": "boolean"
},
"applicationSource": {
"$ref": "http://moj.gov.uk/cpp/progression/enum-def.json#/definitions/applicationSource"
},
"isAmended": {
"type": "boolean"
},
Expand Down
Loading
Loading