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
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@
<material.version>17.0.75</material.version>
<json-transformer.version>1.0.6</json-transformer.version>
<access.control.version>6.4.1</access.control.version>
<referencedata.version>17.104.136</referencedata.version>
<referencedata.version>17.104.137</referencedata.version>
<listing.version>17.104.3</listing.version>
<hearing.version>17.104.176</hearing.version>
<hearing.version>17.104.180</hearing.version>
<usersgroups.version>17.104.50</usersgroups.version>
<defence.version>17.104.102</defence.version>
<referencedata.offence.version>17.104.48</referencedata.offence.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,24 +51,7 @@
import static uk.gov.moj.cpp.progression.aggregate.rules.RetentionPolicyPriorityHelper.getRetentionPolicyByPriority;
import static uk.gov.moj.cpp.progression.aggregate.transformers.ProsecutionCaseTransformer.toUpdatedProsecutionCase;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.CourtApplicationHelper.isAddressMatches;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getAllDefendantsOffences;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getCivilOffence;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getDefendant;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getDefendantEmail;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getDefendantJudicialResultsOfDefendantsAssociatedToTheCase;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getDefendantPostcode;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getExparteValueFromRefDataOffenceJsonObject;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getMasterDefendant;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getUpdatedDefendantsForOnlinePlea;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.getUpdatedOffence;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.hasNewAmendment;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.hearingCaseDefendantsProceedingsConcluded;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.isConcluded;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.isProceedingConcludedEventTriggered;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.offenceWithSexualOffenceReportingRestrictionAndExparteValue;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.sendEmailNotificationToDefendant;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.updateOrderIndexAndExparteValue;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.updatedDefendantsWithProceedingConcludedState;
import static uk.gov.moj.cpp.progression.domain.aggregate.utils.DefendantHelper.*;
import static uk.gov.moj.cpp.progression.domain.constant.CaseStatusEnum.ACTIVE;
import static uk.gov.moj.cpp.progression.domain.constant.CaseStatusEnum.INACTIVE;
import static uk.gov.moj.cpp.progression.domain.constant.LegalAidStatusEnum.GRANTED;
Expand Down Expand Up @@ -1741,14 +1724,14 @@ public Stream<Object> updateCase(final ProsecutionCase prosecutionCase, final Li
defendantListForProceedingsConcludedEventTrigger.add(updatedDefendant);
}
});

if (isNotEmpty(defendantListForProceedingsConcludedEventTrigger)) {
// LAA suppression of false proceedings concluded
if (isNotEmpty(defendantListForProceedingsConcludedEventTrigger) && isAllDefendantProceedingConcludedLaa(prosecutionCase, defendantListForProceedingsConcludedEventTrigger)) {
final UUID resultedHearingId = hearingId != null ? hearingId : latestHearingId;
streamBuilder.add(laaDefendantProceedingConcludedChanged()
.withDefendants(defendantListForProceedingsConcludedEventTrigger)
.withHearingId(resultedHearingId)
.withProsecutionCaseId(prosecutionCase.getId())
.build());
streamBuilder.add(laaDefendantProceedingConcludedChanged()
.withDefendants(defendantListForProceedingsConcludedEventTrigger)//listOfDefendantsWithLaaRepresentation)
.withHearingId(resultedHearingId)
.withProsecutionCaseId(prosecutionCase.getId())
.build());
}

final String updatedCaseStatus = getUpdatedCaseStatus(prosecutionCase);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import uk.gov.justice.progression.courts.DeletedOffences;
import uk.gov.justice.progression.courts.OffencesForDefendantChanged;
import uk.gov.justice.progression.courts.UpdatedOffences;
import uk.gov.moj.cpp.progression.domain.constant.LegalAidStatusEnum;
import uk.gov.moj.cpp.progression.events.CustodialEstablishment;
import uk.gov.moj.cpp.progression.events.MatchedDefendants;
import uk.gov.moj.cpp.progression.plea.json.schemas.PleadOnline;
Expand All @@ -52,6 +53,7 @@
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
Expand Down Expand Up @@ -87,19 +89,46 @@ public static boolean hearingCaseDefendantsProceedingsConcluded(final Prosecutio
.allMatch(defendant -> TRUE.equals(defendant.getProceedingsConcluded()));
}

public static boolean isAllDefendantProceedingConcludedLaa(final ProsecutionCase prosecutionCase, final List<Defendant> updatedDefendants) {
return isAllDefendantProceedingConcludedCommon(prosecutionCase, updatedDefendants, DefendantHelper::isConcludedForLaa);
}

public static boolean isAllDefendantProceedingConcluded(final ProsecutionCase prosecutionCase, final List<Defendant> updatedDefendants) {
return prosecutionCase.getDefendants().stream().map(defendant -> {
return isAllDefendantProceedingConcludedCommon(prosecutionCase, updatedDefendants, DefendantHelper::isConcluded);
}

private static boolean isAllDefendantProceedingConcludedCommon(final ProsecutionCase prosecutionCase, final List<Defendant> updatedDefendants, Predicate<Offence> concludedTarget) {

List<Defendant> defs = prosecutionCase.getDefendants();

boolean result = defs.stream().map(defendant -> {
final List<Offence> updatedOffences = new ArrayList<>();
final boolean proceedingConcluded = defendant.getOffences().stream()
.map(offence -> getUpdatedOffence(updatedOffences, offence, isConcluded(offence)))
.map(Offence::getProceedingsConcluded)
.collect(toList()).stream().allMatch(finalCategory -> finalCategory.equals(Boolean.TRUE));
final List<Offence> offs = defendant.getOffences();


final List<Boolean> proConcludedList = offs.stream()
.map(offence -> {
return getUpdatedOffence(updatedOffences, offence, concludedTarget.test(offence));
})
.map(Offence::getProceedingsConcluded)
.collect(toList());

final boolean proceedingConcluded = proConcludedList.stream().allMatch(
finalCategory -> finalCategory != null && finalCategory.equals(Boolean.TRUE));

final Defendant updatedDefendant = getDefendant(defendant, updatedOffences, proceedingConcluded);
updatedDefendants.add(updatedDefendant);

return proceedingConcluded;
}).collect(toList()).stream().allMatch(proceedingConcluded -> proceedingConcluded.equals(TRUE));
}).collect(toList()).stream().allMatch(proceedingConcluded -> proceedingConcluded == true);

return result;
}

public static List<Defendant> getDefendantsWithLaaRepresentation(final List<Defendant> defendants) {
return defendants.stream()
.filter(defendant -> LegalAidStatusEnum.GRANTED.equals(defendant.getLegalAidStatus()))
.collect(toList());
}

public static List<Defendant> getUpdatedDefendants(final ProsecutionCase prosecutionCase) {
Expand Down Expand Up @@ -272,6 +301,11 @@ private static boolean isAnyChangeInProceedingConcludedFromPreviousState(List<Of
return isChanged;
}

public static boolean isConcludedForLaa(final Offence offence) {
return Boolean.TRUE.equals(offence.getProceedingsConcluded())
&& isConcluded(offence);
}

public static boolean isConcluded(final Offence offence) {
return isNotEmpty(offence.getJudicialResults()) && offence.getJudicialResults().stream()
.anyMatch(judicialResult -> judicialResult.getCategory().equals(JudicialResultCategory.FINAL));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,7 @@
import static org.hamcrest.Matchers.hasItems;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.instanceOf;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.when;
import static uk.gov.justice.core.courts.CourtCentre.courtCentre;
import static uk.gov.justice.core.courts.Defendant.defendant;
Expand Down Expand Up @@ -242,18 +237,7 @@
import java.io.StringReader;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.*;
import java.util.stream.Stream;


Expand All @@ -277,7 +261,6 @@

@ExtendWith(MockitoExtension.class)
class CaseAggregateTest {

private static final String CASE_ID = randomUUID().toString();
private static final String DEFENDANT_ID = randomUUID().toString();
private static final String COURT_CENTRE_NAME = "Warwick Justice Centre";
Expand Down Expand Up @@ -3384,7 +3367,7 @@ public void shouldUpdateCaseStatusAsReadyForReviewWhenOneApplicationIsResultedAn
}

@Test
public void shouldUpdateProceedingConcludedWithLAAWhenCaseIsUpdatedWithReshare(){
public void shouldNotUpdateProceedingConcludedWithLAAWhenCaseIsUpdatedWithReshare(){
final UUID hearingId = randomUUID();
final UUID caseId = randomUUID();
final UUID defendantId = randomUUID();
Expand Down Expand Up @@ -3471,14 +3454,12 @@ public void shouldUpdateProceedingConcludedWithLAAWhenCaseIsUpdatedWithReshare()

eventList = this.caseAggregate.updateCase(updatedProsecutionCase,emptyList(), courtCentre, hearingId, List.of(HearingDay.hearingDay().withSittingDay(ZonedDateTime.now()).build()), hearingType, CROWN, Boolean.FALSE, emptyList() );

LaaDefendantProceedingConcludedChanged laaDefendantProceedingConcludedChanged = (LaaDefendantProceedingConcludedChanged)eventList.filter(o->o.getClass().getName().endsWith("LaaDefendantProceedingConcludedChanged")).findFirst().get();

assertThat(laaDefendantProceedingConcludedChanged.getDefendants().get(0).getProceedingsConcluded(), is(false));
assertThat(laaDefendantProceedingConcludedChanged.getDefendants().get(0).getOffences().get(0).getProceedingsConcluded(), is(true));
assertThat(laaDefendantProceedingConcludedChanged.getDefendants().get(0).getOffences().get(1).getProceedingsConcluded(), is(false));



try {
LaaDefendantProceedingConcludedChanged laaDefendantProceedingConcludedChanged = (LaaDefendantProceedingConcludedChanged) eventList.filter(o -> o.getClass().getName().endsWith("LaaDefendantProceedingConcludedChanged")).findFirst().get();
assert(false);
} catch (NoSuchElementException e) {
// expect not to find it
}

}

Expand Down
Loading
Loading