3204 Set a note for each reviewer's period

This commit is contained in:
Andreas Svanberg 2023-12-08 12:32:51 +01:00
parent 630018dd8c
commit 7ca3db6a39
6 changed files with 71 additions and 8 deletions

@ -16,4 +16,8 @@ public interface ReviewerCapacityService {
List<User> getActiveReviewersOnUnit(Unit unit);
int getTarget(User reviewerObject, DateRange dateRange);
String getNote(User reviewer, DateRange dateRange);
void setNote(User reviewer, DateRange dateRange, String note);
}

@ -1,6 +1,7 @@
package se.su.dsv.scipro.reviewing;
import com.google.common.eventbus.EventBus;
import com.google.inject.persist.Transactional;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.project.ProjectService;
import se.su.dsv.scipro.project.ReviewerAssignedEvent;
@ -87,6 +88,32 @@ class ReviewerCapacityServiceImpl implements ReviewerCapacityService, ReviewerAs
.orElse(0);
}
@Override
public String getNote(User reviewer, DateRange dateRange) {
return reviewerTargetRepository.getExactReviewTarget(reviewer, dateRange)
.map(ReviewerTarget::getNote)
.orElse("");
}
@Override
@Transactional
public void setNote(User reviewer, DateRange dateRange, String note) {
Optional<ReviewerTarget> currentTarget = reviewerTargetRepository.getExactReviewTarget(reviewer, dateRange);
if (currentTarget.isPresent()) {
ReviewerTarget targetToUpdate = currentTarget.get();
targetToUpdate.setNote(note);
reviewerTargetRepository.save(targetToUpdate);
}
else {
ReviewerTarget reviewerTarget = new ReviewerTarget();
reviewerTarget.setReviewer(reviewer);
reviewerTarget.setFromDate(dateRange.from());
reviewerTarget.setToDate(dateRange.to());
reviewerTarget.setNote(note);
reviewerTargetRepository.save(reviewerTarget);
}
}
private Optional<ReviewerTarget> getTarget(User reviewer, LocalDate date) {
return reviewerTargetRepository.getReviewerTargets(reviewer, date)
.stream()

@ -33,6 +33,9 @@ public class ReviewerTarget extends DomainObject {
@Column(name = "to_date", nullable = false)
private java.time.LocalDate toDate;
@Column(name = "note")
private String note;
@Override
public Long getId() {
return id;
@ -74,9 +77,17 @@ public class ReviewerTarget extends DomainObject {
this.toDate = toDate;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
@Override
public String toString() {
return "ReviewerTarget{" + "id=" + id + ", reviewer=" + reviewer + ", target=" + target + ", fromDate=" + fromDate + ", toDate=" + toDate + '}';
return "ReviewerTarget{" + "id=" + id + ", reviewer=" + reviewer + ", target=" + target + ", fromDate=" + fromDate + ", toDate=" + toDate + ", note=" + note + '}';
}
@Override
@ -86,11 +97,12 @@ public class ReviewerTarget extends DomainObject {
&& Objects.equals(id, that.id)
&& Objects.equals(reviewer, that.reviewer)
&& Objects.equals(fromDate, that.fromDate)
&& Objects.equals(toDate, that.toDate);
&& Objects.equals(toDate, that.toDate)
&& Objects.equals(note, that.note);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), id, reviewer, target, fromDate, toDate);
return Objects.hash(super.hashCode(), id, reviewer, target, fromDate, toDate, note);
}
}

@ -0,0 +1,2 @@
ALTER TABLE `reviewer_target`
ADD COLUMN `note` TEXT NULL;

@ -80,13 +80,16 @@
</div>
<div class="row" wicket:id="expanded">
<div class="col">
<div class="card-body">
<form class="card-body" wicket:id="form">
<div class="mb-3">
<label class="form-label">Note</label>
<textarea class="form-control">A very long note. Lorem ipsum dolor sit amet.</textarea>
<label class="form-label" wicket:for="note">Note</label>
<textarea class="form-control" wicket:id="note">[A very long note. Lorem ipsum dolor sit amet.]</textarea>
</div>
<button class="btn btn-sm btn-success">Set note</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-sm btn-success">Set note</button>
</div>
<div wicket:id="feedback"></div>
</form>
</div>
<div class="col-auto">
<div class="card-body">

@ -12,6 +12,7 @@ import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.LambdaChoiceRenderer;
import org.apache.wicket.markup.html.form.NumberTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
@ -201,6 +202,20 @@ public class AdminReviewerCapacityManagementPage extends AbstractAdminProjectPag
private class ExpandedInformation extends WebMarkupContainer {
public ExpandedInformation(String id, IModel<User> reviewer) {
super(id, reviewer);
IModel<String> note = LoadableDetachableModel.of(() ->
reviewerCapacityService.getNote(reviewer.getObject(), selectedPeriod.getObject().toDateRange()));
Form<User> noteForm = new Form<>("form", reviewer) {
@Override
protected void onSubmit() {
reviewerCapacityService.setNote(reviewer.getObject(), selectedPeriod.getObject().toDateRange(), note.getObject());
success("Note updated");
}
};
add(noteForm);
noteForm.add(new TextArea<>("note", note));
noteForm.add(new FencedFeedbackPanel("feedback", noteForm));
}
}
}