3321 PO Show the review period while assigning reviewers.
This commit is contained in:
parent
14d2dcbba0
commit
8385c1292b
core/src/main/java/se/su/dsv/scipro/reviewing
view/src/main/java/se/su/dsv/scipro/admin/pages
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user