Filter survey statistics by supervisor
This commit is contained in:
parent
c0902a8cad
commit
9223f53f42
core/src/main/java/se/su/dsv/scipro/survey
view/src/main/java/se/su/dsv/scipro/admin/pages
@ -26,5 +26,7 @@ public interface SurveyService {
|
||||
|
||||
void setAvailability(boolean availability);
|
||||
|
||||
SurveyStatistics getStatistics();
|
||||
record Filter(User supervisor) {}
|
||||
|
||||
SurveyStatistics getStatistics(Filter filter);
|
||||
}
|
||||
|
@ -147,8 +147,11 @@ public class SurveyServiceImpl implements SurveyService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SurveyStatistics getStatistics() {
|
||||
List<Survey> surveys = surveyRepository.findAll();
|
||||
public SurveyStatistics getStatistics(Filter filter) {
|
||||
List<Survey> surveys = surveyRepository.findAll()
|
||||
.stream()
|
||||
.filter(applyFilter(filter))
|
||||
.toList();
|
||||
List<Question> questions = getQuestions();
|
||||
Map<Question, List<SurveyAnswer>> m = surveys.stream()
|
||||
.map(Survey::getAnswers)
|
||||
@ -196,6 +199,15 @@ public class SurveyServiceImpl implements SurveyService {
|
||||
return new SurveyStatistics(surveys.size(), questionStatistics);
|
||||
}
|
||||
|
||||
private Predicate<? super Survey> applyFilter(Filter filter) {
|
||||
return survey -> {
|
||||
if (filter.supervisor() != null && !Objects.equals(filter.supervisor(), survey.getProject().getHeadSupervisor())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
}
|
||||
|
||||
private Survey generateSurvey(final Project project, final User author) {
|
||||
final Survey survey = new Survey();
|
||||
final List<Question> questions = getQuestions();
|
||||
|
@ -2,6 +2,18 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
|
||||
<body>
|
||||
<wicket:extend>
|
||||
|
||||
<div class="card bg-light mb-3">
|
||||
<form class="card-body p-2" wicket:id="filter">
|
||||
<div class="mb-3 col-md-2">
|
||||
<label class="col-form-label">Supervisor</label>
|
||||
<select class="form-select" wicket:id="supervisor"></select>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div wicket:id="statistics">
|
||||
|
||||
<p class="mb-3">
|
||||
Respondents: <strong wicket:id="respondents"></strong>
|
||||
</p>
|
||||
@ -39,6 +51,8 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<wicket:fragment wicket:id="answers">
|
||||
<ul>
|
||||
<li wicket:id="answers">
|
||||
|
@ -4,17 +4,22 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.ajax.markup.html.AjaxLink;
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.form.Form;
|
||||
import org.apache.wicket.markup.html.list.ListItem;
|
||||
import org.apache.wicket.markup.html.list.ListView;
|
||||
import org.apache.wicket.markup.html.panel.Fragment;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.LoadableDetachableModel;
|
||||
import se.su.dsv.scipro.components.EmployeeAutoComplete;
|
||||
import se.su.dsv.scipro.components.LargeModalWindow;
|
||||
import se.su.dsv.scipro.components.ModalWindowPlus;
|
||||
import se.su.dsv.scipro.data.DetachableServiceModel;
|
||||
import se.su.dsv.scipro.data.PolyModel;
|
||||
import se.su.dsv.scipro.statistics.AbstractAdminStatisticsPage;
|
||||
import se.su.dsv.scipro.survey.SurveyService;
|
||||
import se.su.dsv.scipro.survey.SurveyStatistics;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
import se.su.dsv.scipro.system.UserService;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
@ -23,14 +28,24 @@ public class AdminSurveyStatisticsPage extends AbstractAdminStatisticsPage {
|
||||
@Inject
|
||||
SurveyService surveyService;
|
||||
|
||||
private final WebMarkupContainer statisticsContainer;
|
||||
|
||||
public AdminSurveyStatisticsPage() {
|
||||
super();
|
||||
|
||||
IModel<SurveyStatistics> statistics = LoadableDetachableModel.of(surveyService::getStatistics);
|
||||
FilterForm filterForm = new FilterForm("filter");
|
||||
add(filterForm);
|
||||
|
||||
add(new Label("respondents", statistics.map(SurveyStatistics::respondents)));
|
||||
IModel<SurveyStatistics> statistics = LoadableDetachableModel.of(() ->
|
||||
surveyService.getStatistics(filterForm.getFilter()));
|
||||
|
||||
add(new ListView<>("questions", statistics.map(SurveyStatistics::questions)) {
|
||||
this.statisticsContainer = new WebMarkupContainer("statistics");
|
||||
this.statisticsContainer.setOutputMarkupPlaceholderTag(true);
|
||||
add(statisticsContainer);
|
||||
|
||||
this.statisticsContainer.add(new Label("respondents", statistics.map(SurveyStatistics::respondents)));
|
||||
|
||||
this.statisticsContainer.add(new ListView<>("questions", statistics.map(SurveyStatistics::questions)) {
|
||||
@Override
|
||||
protected void populateItem(ListItem<SurveyStatistics.Question> item) {
|
||||
item.add(new Label("question", item.getModel().map(SurveyStatistics.Question::text)));
|
||||
@ -108,6 +123,29 @@ public class AdminSurveyStatisticsPage extends AbstractAdminStatisticsPage {
|
||||
}
|
||||
}
|
||||
|
||||
private class FilterForm extends Form<Object> {
|
||||
@Inject
|
||||
UserService userService;
|
||||
|
||||
private IModel<User> supervisorModel;
|
||||
|
||||
public FilterForm(String id) {
|
||||
super(id);
|
||||
|
||||
supervisorModel = new DetachableServiceModel<>(userService);
|
||||
add(new EmployeeAutoComplete("supervisor", supervisorModel) {
|
||||
@Override
|
||||
protected void action(AjaxRequestTarget target, User object) {
|
||||
target.add(statisticsContainer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public SurveyService.Filter getFilter() {
|
||||
return new SurveyService.Filter(supervisorModel.getObject());
|
||||
}
|
||||
}
|
||||
|
||||
private class FreeTextPanel extends WebMarkupContainer {
|
||||
public FreeTextPanel(String id, IModel<SurveyStatistics.Question.Text> model) {
|
||||
super(id, model);
|
||||
|
Loading…
x
Reference in New Issue
Block a user