3204 Set a note for each reviewer's period
This commit is contained in:
parent
630018dd8c
commit
7ca3db6a39
core/src/main
java/se/su/dsv/scipro/reviewing
resources/db/migration
view/src/main/java/se/su/dsv/scipro/admin/pages
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user