3204 Include the number of performed reviews in the target history

This commit is contained in:
Andreas Svanberg 2024-01-17 12:39:47 +01:00
parent e5e59f4cbd
commit 2a0eb66b2f
4 changed files with 48 additions and 18 deletions

@ -26,5 +26,7 @@ public interface ReviewerCapacityService {
* @param year the year to get the targets up to, but not including
* @return the entire history for the given reviewer up to the given year
*/
List<Target> getTargetHistory(User reviewer, Year year);
List<TargetHistory> getTargetHistory(User reviewer, Year year);
record TargetHistory(Year year, int springTarget, int autumnTarget, int completedInSpring, int completedInAutumn) {}
}

@ -93,15 +93,22 @@ class ReviewerCapacityServiceImpl implements ReviewerCapacityService, ReviewerAs
}
@Override
public List<Target> getTargetHistory(User reviewer, Year year) {
public List<TargetHistory> getTargetHistory(User reviewer, Year year) {
return reviewerTargetRepository.getReviewerTargetsBeforeYear(reviewer, year)
.stream()
.map(reviewerTarget -> new Target(
Year.of(reviewerTarget.getYear()),
reviewerTarget.getSpring(),
reviewerTarget.getAutumn(),
reviewerTarget.getNote()))
.sorted(Comparator.comparing(Target::year).reversed())
.map(reviewerTarget -> {
int completedInSpring = decisionRepository.countDecisions(reviewer,
startOfSpring(reviewerTarget.getYear()), endOfSpring(reviewerTarget.getYear()));
int completedInAutumn = decisionRepository.countDecisions(reviewer,
startOfAutumn(reviewerTarget.getYear()), endOfAutumn(reviewerTarget));
return new TargetHistory(
Year.of(reviewerTarget.getYear()),
reviewerTarget.getSpring(),
reviewerTarget.getAutumn(),
completedInSpring,
completedInAutumn);
})
.sorted(Comparator.comparing(TargetHistory::year).reversed())
.toList();
}
@ -170,10 +177,28 @@ class ReviewerCapacityServiceImpl implements ReviewerCapacityService, ReviewerAs
private int countAssignedReviews(User reviewer, LocalDate fromDate) {
if (fromDate.getMonthValue() <= Month.JUNE.getValue()) {
return decisionRepository.countDecisions(reviewer, LocalDate.of(fromDate.getYear(), Month.JANUARY, 1), LocalDate.of(fromDate.getYear(), Month.JUNE, 30));
return decisionRepository.countDecisions(reviewer,
startOfSpring(fromDate.getYear()), endOfSpring(fromDate.getYear()));
}
else {
return decisionRepository.countDecisions(reviewer, LocalDate.of(fromDate.getYear(), Month.JULY, 1), LocalDate.of(fromDate.getYear(), Month.DECEMBER, 31));
return decisionRepository.countDecisions(reviewer,
startOfAutumn(fromDate.getYear()), LocalDate.of(fromDate.getYear(), Month.DECEMBER, 31));
}
}
private static LocalDate endOfAutumn(ReviewerTarget reviewerTarget) {
return LocalDate.of(reviewerTarget.getYear(), Month.DECEMBER, 31);
}
private static LocalDate startOfAutumn(int year) {
return endOfSpring(year).plusDays(1);
}
private static LocalDate endOfSpring(int year) {
return LocalDate.of(year, Month.JUNE, 30);
}
private static LocalDate startOfSpring(int year) {
return LocalDate.of(year, Month.JANUARY, 1);
}
}

@ -97,9 +97,9 @@
<wicket:container wicket:id="history">
<dt wicket:id="year">[2024]</dt>
<dd>
Spring: <span wicket:id="spring">[2]</span>
Spring target: <span wicket:id="spring">[2]</span>, completed: <span wicket:id="completed_in_spring">[1]</span>
<br>
Autumn: <span wicket:id="autumn">[2]</span>
Autumn target: <span wicket:id="autumn">[2]</span>, completed: <span wicket:id="completed_in_autumn">[1]</span>
</dd>
</wicket:container>
</dl>

@ -22,6 +22,7 @@ import se.su.dsv.scipro.profile.UserLabel;
import se.su.dsv.scipro.profile.UserProfileImage;
import se.su.dsv.scipro.reviewing.ReviewerCapacityService;
import se.su.dsv.scipro.reviewing.ReviewerCapacityService.Target;
import se.su.dsv.scipro.reviewing.ReviewerCapacityService.TargetHistory;
import se.su.dsv.scipro.springdata.services.UnitService;
import se.su.dsv.scipro.system.Unit;
import se.su.dsv.scipro.system.User;
@ -144,13 +145,15 @@ public class AdminReviewerCapacityManagementPage extends AbstractAdminProjectPag
add(expandToggle);
expanded.add(new AssignTargetForm("form", reviewer));
IModel<List<Target>> history = LoadableDetachableModel.of(() -> reviewerCapacityService.getTargetHistory(reviewer.getObject(), selectedPeriod.getObject()));
ListView<Target> historyComponent = new ListView<>("history", history) {
IModel<List<TargetHistory>> history = LoadableDetachableModel.of(() -> reviewerCapacityService.getTargetHistory(reviewer.getObject(), selectedPeriod.getObject()));
ListView<TargetHistory> historyComponent = new ListView<>("history", history) {
@Override
protected void populateItem(ListItem<Target> item) {
item.add(new Label("year", item.getModel().map(Target::year)));
item.add(new Label("spring", item.getModel().map(Target::spring)));
item.add(new Label("autumn", item.getModel().map(Target::autumn)));
protected void populateItem(ListItem<TargetHistory> item) {
item.add(new Label("year", item.getModel().map(TargetHistory::year)));
item.add(new Label("spring", item.getModel().map(TargetHistory::springTarget)));
item.add(new Label("autumn", item.getModel().map(TargetHistory::autumnTarget)));
item.add(new Label("completed_in_spring", item.getModel().map(TargetHistory::completedInSpring)));
item.add(new Label("completed_in_autumn", item.getModel().map(TargetHistory::completedInAutumn)));
}
};
historyComponent.setViewSize(3);