2984 PO 5) Show criteria that did not meet minimum requirements when filling in the grading basis

This commit is contained in:
Andreas Svanberg 2023-10-02 12:17:44 +02:00
parent b2c8d94d2f
commit bf8e31dc28
2 changed files with 26 additions and 0 deletions
view/src/main/java/se/su/dsv/scipro/grading

@ -51,6 +51,15 @@
</p>
<textarea class="form-control" rows="10" wicket:id="overall_motivation"></textarea>
</div>
<wicket:enclosure child="grading_basis_requirements_not_met">
<h4 class="mt-3">Criterion not met</h4>
<ul>
<li wicket:id="grading_basis_requirements_not_met">
<span wicket:id="title">[U1 title]</span>
<span wicket:id="given_points"></span>/<span wicket:id="required_points"></span>
</li>
</ul>
</wicket:enclosure>
<wicket:enclosure child="save">
<div class="position-sticky bottom-0 bg-white py-3 d-flex">
<button class="btn btn-success me-3" wicket:id="save">

@ -17,12 +17,14 @@ import org.apache.wicket.model.LambdaModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import se.su.dsv.scipro.components.AutoHidingListView;
import se.su.dsv.scipro.components.BootstrapRadioChoice;
import se.su.dsv.scipro.components.ScrollSneakBehavior;
import se.su.dsv.scipro.grading.GradingBasis.Assessment;
import se.su.dsv.scipro.grading.GradingBasis.Criterion;
import se.su.dsv.scipro.grading.GradingBasis.Criterion.Requirement;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.report.GradingCriterion;
import se.su.dsv.scipro.report.GradingReportService;
import javax.inject.Inject;
@ -91,6 +93,21 @@ public class GradingBasisPanel extends GenericPanel<Project> {
criterion.setReuseItems(true);
add(criterion);
IModel<List<Assessment>> criteriaNotMet = gradingBasis.map(GradingBasis::criteria).map(criteria -> criteria.stream()
.filter(assessment -> Objects.requireNonNullElse(
assessment.getPoints(),
0) < assessment.criterion().minimumPoints())
.toList());
add(new AutoHidingListView<>("grading_basis_requirements_not_met", criteriaNotMet) {
@Override
protected void populateItem(ListItem<Assessment> item) {
IModel<Criterion> criterion = item.getModel().map(Assessment::criterion);
item.add(new Label("title", criterion.map(Criterion::title)));
item.add(new Label("given_points", item.getModel().map(Assessment::getPoints).orElse(0)));
item.add(new Label("required_points", criterion.map(Criterion::minimumPoints)));
}
});
IModel<String> overallMotivation = LambdaModel.of(gradingBasis,
GradingBasis::getOverallMotivation,
GradingBasis::setOverallMotivation);