3321 PO Show the review period while assigning reviewers.

This commit is contained in:
Andreas Svanberg 2024-02-05 12:43:58 +01:00
parent 14d2dcbba0
commit 8385c1292b
6 changed files with 34 additions and 9 deletions

@ -0,0 +1,7 @@
package se.su.dsv.scipro.reviewing;
import java.time.Year;
public record ReviewPeriod(Year year, Part part) {
public enum Part { SPRING, AUTUMN }
}

@ -13,6 +13,7 @@ import java.util.List;
* @param unavailable reviewers that are not available
*/
public record ReviewerCandidates(
ReviewPeriod period,
List<Candidate> good,
List<Candidate> wrongResearchArea,
List<Candidate> wrongLanguage,

@ -174,7 +174,11 @@ class ReviewerCapacityServiceImpl implements ReviewerCapacityService, ReviewerAs
}
}
return new ReviewerCandidates(good, wrongResearchArea, wrongLanguage, busy, unavailable);
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);
return new ReviewerCandidates(reviewPeriod, good, wrongResearchArea, wrongLanguage, busy, unavailable);
}
private int getPeriodTarget(ReviewerTarget reviewerTarget, LocalDate date) {

@ -36,6 +36,8 @@
<div class="card-body">
<h4 class="card-title" wicket:id="name"></h4>
<span wicket:id="assigned"></span> / <span wicket:id="target"></span>
(assigned / target)
Period: <span wicket:id="period_part"></span> <span wicket:id="period_year"></span>
<div>
Research areas:
<ul>
@ -128,6 +130,8 @@
<div class="card-body">
<h4 class="card-title" wicket:id="user"></h4>
<span wicket:id="assigned"></span> / <span wicket:id="target"></span>
(assigned / target)
Period: <span wicket:id="period_part"></span> <span wicket:id="period_year"></span>
<p wicket:id="note"></p>
<div>
Research areas:

@ -21,6 +21,7 @@ import se.su.dsv.scipro.profile.UserLinkPanel;
import se.su.dsv.scipro.profile.UserProfileImage;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.project.ProjectService;
import se.su.dsv.scipro.reviewing.ReviewPeriod;
import se.su.dsv.scipro.reviewing.ReviewerAssignmentService;
import se.su.dsv.scipro.reviewing.ReviewerCandidates;
import se.su.dsv.scipro.system.Language;
@ -88,18 +89,20 @@ public class AdminAssignReviewerPage extends AbstractAdminProjectPage {
reviewerCandidates = LoadableDetachableModel.of(() ->
reviewerAssignmentService.getCandidatesToReview(projectModel.getObject(), LocalDate.now(clock)));
add(new CurrentReviewerCard("current_reviewer", projectModel.map(Project::getReviewer)));
IModel<ReviewPeriod> period = reviewerCandidates.map(ReviewerCandidates::period);
add(new CurrentReviewerCard("current_reviewer", projectModel.map(Project::getReviewer), period));
add(new AutoHidingListView<>("good_candidates", reviewerCandidates.map(ReviewerCandidates::good)) {
@Override
protected void populateItem(ListItem<ReviewerCandidates.Candidate> item) {
item.add(new ReviewerCard("details", item.getModel()));
item.add(new ReviewerCard("details", item.getModel(), period));
}
});
add(new AutoHidingListView<>("wrong_research_area", reviewerCandidates.map(ReviewerCandidates::wrongResearchArea)) {
@Override
protected void populateItem(ListItem<ReviewerCandidates.Candidate> item) {
item.add(new ReviewerCard("details", item.getModel()));
item.add(new ReviewerCard("details", item.getModel(), period));
}
});
add(new WebMarkupContainer("no_language_set") {
@ -112,25 +115,25 @@ public class AdminAssignReviewerPage extends AbstractAdminProjectPage {
add(new AutoHidingListView<>("wrong_language", reviewerCandidates.map(ReviewerCandidates::wrongLanguage)) {
@Override
protected void populateItem(ListItem<ReviewerCandidates.Candidate> item) {
item.add(new ReviewerCard("details", item.getModel()));
item.add(new ReviewerCard("details", item.getModel(), period));
}
});
add(new AutoHidingListView<>("busy_candidates", reviewerCandidates.map(ReviewerCandidates::busy)) {
@Override
protected void populateItem(ListItem<ReviewerCandidates.Candidate> item) {
item.add(new ReviewerCard("details", item.getModel()));
item.add(new ReviewerCard("details", item.getModel(), period));
}
});
add(new AutoHidingListView<>("unavailable_candidates", reviewerCandidates.map(ReviewerCandidates::unavailable)) {
@Override
protected void populateItem(ListItem<ReviewerCandidates.Candidate> item) {
item.add(new ReviewerCard("details", item.getModel()));
item.add(new ReviewerCard("details", item.getModel(), period));
}
});
}
private class CurrentReviewerCard extends GenericWebMarkupContainer<User> {
public CurrentReviewerCard(String id, IModel<User> reviewer) {
public CurrentReviewerCard(String id, IModel<User> reviewer, IModel<ReviewPeriod> period) {
super(id, reviewer);
IModel<ReviewerAssignmentService.CurrentTarget> currentTarget = LoadableDetachableModel.of(() ->
@ -138,6 +141,8 @@ public class AdminAssignReviewerPage extends AbstractAdminProjectPage {
add(new Label("assigned", currentTarget.map(ReviewerAssignmentService.CurrentTarget::assigned)));
add(new Label("target", currentTarget.map(ReviewerAssignmentService.CurrentTarget::target)));
add(new Label("period_year", period.map(ReviewPeriod::year)));
add(new EnumLabel<>("period_part", period.map(ReviewPeriod::part)));
add(new UserProfileImage("image", reviewer, UserProfileImage.Size.MEDIUM));
add(new UserLabel("name", reviewer));
@ -177,13 +182,15 @@ public class AdminAssignReviewerPage extends AbstractAdminProjectPage {
}
private class ReviewerCard extends Fragment {
public ReviewerCard(String id, IModel<ReviewerCandidates.Candidate> candidate) {
public ReviewerCard(String id, IModel<ReviewerCandidates.Candidate> candidate, IModel<ReviewPeriod> period) {
super(id, "reviewer_details", AvailableReviewersPanel.this, candidate);
IModel<User> reviewer = candidate.map(ReviewerCandidates.Candidate::reviewer);
add(new UserProfileImage("image", reviewer, UserProfileImage.Size.MEDIUM));
add(new UserLabel("user", reviewer));
add(new Label("target", candidate.map(ReviewerCandidates.Candidate::target)));
add(new Label("assigned", candidate.map(ReviewerCandidates.Candidate::assigned)));
add(new Label("period_year", period.map(ReviewPeriod::year)));
add(new EnumLabel<>("period_part", period.map(ReviewPeriod::part)));
add(new Label("note", candidate.map(ReviewerCandidates.Candidate::note)));
add(new ListView<>("research_areas", reviewer.map(User::getResearchAreas).map(ArrayList::new)) {
@Override

@ -6,3 +6,5 @@ warning_no_review_request=No request for review has been sent for this project y
error_reviewer_is_supervisor=The selected reviewer is the supervisor of the project
error_reviewer_is_not_reviewer=The selected reviewer does not have the reviewer role
reviewer_unassigned=Reviewer un-assigned
Part.SPRING = Spring
Part.AUTUMN = Autumn