3321 PO Sort reviewer candidates

This commit is contained in:
Andreas Svanberg 2024-02-05 14:38:07 +01:00
parent 7720a7e8a2
commit dc616e48fe
2 changed files with 20 additions and 0 deletions
core/src/main/java/se/su/dsv/scipro/reviewing

@ -21,5 +21,8 @@ public record ReviewerCandidates(
List<Candidate> unavailable)
{
public record Candidate(User reviewer, int target, int assigned, String note) {
public int remainingTargets() {
return target - assigned;
}
}
}

@ -174,6 +174,23 @@ class ReviewerCapacityServiceImpl implements ReviewerCapacityService, ReviewerAs
}
}
Comparator<ReviewerCandidates.Candidate> byLastName = Comparator.comparing(
ReviewerCandidates.Candidate::reviewer,
Comparator.comparing(User::getLastName));
Comparator<ReviewerCandidates.Candidate> byNumberOfResearchAreas = Comparator.comparing(
candidate -> candidate.reviewer().getResearchAreas().size());
Comparator<ReviewerCandidates.Candidate> byRemainingTargets = Comparator.comparing(
ReviewerCandidates.Candidate::remainingTargets);
good.sort(byRemainingTargets.reversed()
.thenComparing(byNumberOfResearchAreas)
.thenComparing(byLastName));
wrongResearchArea.sort(byRemainingTargets.reversed()
.thenComparing(byLastName));
busy.sort(byLastName);
unavailable.sort(byLastName);
wrongLanguage.sort(byLastName);
ReviewPeriod reviewPeriod = !date.isAfter(endOfSpring(date.getYear()))
? new ReviewPeriod(Year.of(date.getYear()), ReviewPeriod.Part.SPRING)
: new ReviewPeriod(Year.of(date.getYear()), ReviewPeriod.Part.AUTUMN);