3298 Filter projects by reviewer
This commit is contained in:
parent
0acf5f2bad
commit
bf572189d3
core/src/main/java/se/su/dsv/scipro/project
view/src/main/java/se/su/dsv/scipro/datatables/project
@ -42,6 +42,7 @@ public interface ProjectService extends GenericService<Project, Long>, FilteredS
|
||||
private Collection<ProjectType> projectTypes;
|
||||
private String titleContains;
|
||||
private User supervisor;
|
||||
private User reviewer;
|
||||
private boolean filterSupervisor = true;
|
||||
private Collection<ProjectTeamMemberRoles> roles;
|
||||
private User authorUser;
|
||||
@ -157,6 +158,14 @@ public interface ProjectService extends GenericService<Project, Long>, FilteredS
|
||||
this.redStateTime = redStateTime;
|
||||
}
|
||||
|
||||
public User getReviewer() {
|
||||
return reviewer;
|
||||
}
|
||||
|
||||
public void setReviewer(User reviewer) {
|
||||
this.reviewer = reviewer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (o == this) return true;
|
||||
@ -166,6 +175,7 @@ public interface ProjectService extends GenericService<Project, Long>, FilteredS
|
||||
&& Objects.equals(this.getProjectTypes(), other.getProjectTypes())
|
||||
&& Objects.equals(this.getTitleContains(), other.getTitleContains())
|
||||
&& Objects.equals(this.getSupervisor(), other.getSupervisor())
|
||||
&& Objects.equals(this.getReviewer(), other.getReviewer())
|
||||
&& this.isFilterSupervisor() == other.isFilterSupervisor()
|
||||
&& Objects.equals(this.getRoles(), other.getRoles())
|
||||
&& Objects.equals(this.getAuthorUser(), other.getAuthorUser())
|
||||
@ -187,6 +197,7 @@ public interface ProjectService extends GenericService<Project, Long>, FilteredS
|
||||
return Objects.hash(this.getProjectTypes(),
|
||||
this.getTitleContains(),
|
||||
this.getSupervisor(),
|
||||
this.getReviewer(),
|
||||
this.isFilterSupervisor(),
|
||||
this.getRoles(),
|
||||
this.getAuthorUser(),
|
||||
@ -201,7 +212,7 @@ public interface ProjectService extends GenericService<Project, Long>, FilteredS
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ProjectService.Filter(projectTypes=" + this.getProjectTypes() + ", titleContains=" + this.getTitleContains() + ", supervisor=" + this.getSupervisor() + ", filterSupervisor=" + this.isFilterSupervisor() + ", roles=" + this.getRoles() + ", authorUser=" + this.getAuthorUser() + ", createdAfter=" + this.getCreatedAfter() + ", createdBefore=" + this.getCreatedBefore() + ", statuses=" + this.getStatuses() + ", filterExternal=" + this.isFilterExternal() + ", noReviewer=" + this.isNoReviewer() + ", unit=" + this.getUnit() + ", redStateTime=" + this.getRedStateTime() + ")";
|
||||
return "ProjectService.Filter(projectTypes=" + this.getProjectTypes() + ", titleContains=" + this.getTitleContains() + ", supervisor=" + this.getSupervisor() + ", reviewer=" + this.getReviewer() + ", filterSupervisor=" + this.isFilterSupervisor() + ", roles=" + this.getRoles() + ", authorUser=" + this.getAuthorUser() + ", createdAfter=" + this.getCreatedAfter() + ", createdBefore=" + this.getCreatedBefore() + ", statuses=" + this.getStatuses() + ", filterExternal=" + this.isFilterExternal() + ", noReviewer=" + this.isNoReviewer() + ", unit=" + this.getUnit() + ", redStateTime=" + this.getRedStateTime() + ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -204,6 +204,9 @@ public class ProjectServiceImpl extends AbstractServiceImpl<Project, Long> imple
|
||||
if (rolesBb.hasValue()) {
|
||||
predicate.and(rolesBb);
|
||||
}
|
||||
if (filter.getReviewer() != null) {
|
||||
predicate.and(QProject.project.reviewers.any().eq(filter.getReviewer()));
|
||||
}
|
||||
|
||||
if (filter.getTitleContains() != null && filter.getTitleContains().length() >= MIN_TITLE_LENGTH) {
|
||||
predicate.and(titleContains(filter.getTitleContains()));
|
||||
|
@ -39,7 +39,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 col-lg-2">
|
||||
<strong>Reviewer</strong>
|
||||
<div class="mb-3">
|
||||
<label wicket:for="reviewerFilter" class="col-form-label">Reviewer</label>
|
||||
<select class="w-100" wicket:id="reviewerFilter"></select>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" wicket:id="noReviewer">
|
||||
<label class="form-check-label" wicket:for="noReviewer">
|
||||
|
@ -44,6 +44,7 @@ public abstract class ProjectFilterPanel extends Panel {
|
||||
addDateFilter(model);
|
||||
addRedStateFilter(model);
|
||||
addSupervisorFilter(model);
|
||||
addReviewerFilter(model);
|
||||
addProjectTitleFilter(model);
|
||||
addAuthorFilter(model);
|
||||
addProjectTypeFilter(model);
|
||||
@ -83,6 +84,15 @@ public abstract class ProjectFilterPanel extends Panel {
|
||||
});
|
||||
}
|
||||
|
||||
private void addReviewerFilter(final IModel<ProjectService.Filter> filter) {
|
||||
add(new EmployeeAutoComplete("reviewerFilter", LambdaModel.of(filter, ProjectService.Filter::getReviewer, ProjectService.Filter::setReviewer)) {
|
||||
@Override
|
||||
protected void action(AjaxRequestTarget target, User newSelection) {
|
||||
filterUpdated(target);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void addProjectTitleFilter(final IModel<ProjectService.Filter> model) {
|
||||
TextField<String> titleField = new TextField<>("titleFilter", new Model<>());
|
||||
titleField.add(new AjaxFormComponentUpdatingBehavior("keyup") {
|
||||
|
Loading…
x
Reference in New Issue
Block a user