Allows admins to manage grading report templates #14
@ -1,17 +1,42 @@
|
||||
package se.su.dsv.scipro.report;
|
||||
|
||||
import jakarta.persistence.Basic;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.EnumType;
|
||||
import jakarta.persistence.Enumerated;
|
||||
import jakarta.persistence.MappedSuperclass;
|
||||
|
||||
@MappedSuperclass
|
||||
public abstract class AbstractGradingCriterion extends AbstractCriterion {
|
||||
|
||||
public enum Flag {
|
||||
/**
|
||||
* Criterion marked with this flag will extra functionality related
|
||||
* to the authors submitted reflection. It should only be used on
|
||||
* individual criteria.
|
||||
*/
|
||||
REFLECTION,
|
||||
/**
|
||||
* Criterion marked with this flag will extra functionality related
|
||||
* to the authors performed opposition. For example, it will have its
|
||||
* points and feedback filled in when the seminar supervisor assesses
|
||||
* their opposition and submitted report. It should only be used on
|
||||
* individual criteria.
|
||||
*/
|
||||
OPPOSITION
|
||||
}
|
||||
|
||||
@Basic(optional = false)
|
||||
protected int pointsRequiredToPass;
|
||||
|
||||
@Basic
|
||||
private boolean fx = true;
|
||||
|
||||
@Basic
|
||||
@Column(name = "flag")
|
||||
@Enumerated(EnumType.STRING)
|
||||
private Flag flag;
|
||||
|
||||
protected AbstractGradingCriterion() {
|
||||
|
||||
}
|
||||
@ -21,6 +46,17 @@ public abstract class AbstractGradingCriterion extends AbstractCriterion {
|
||||
this.pointsRequiredToPass = pointsRequiredToPass;
|
||||
}
|
||||
|
||||
protected AbstractGradingCriterion(
|
||||
String title,
|
||||
String titleEn,
|
||||
Integer sortOrder,
|
||||
int pointsRequiredToPass,
|
||||
Flag flag)
|
||||
{
|
||||
this(title, titleEn, sortOrder, pointsRequiredToPass);
|
||||
this.flag = flag;
|
||||
}
|
||||
|
||||
public abstract boolean isProjectCriterion();
|
||||
|
||||
public abstract boolean isIndividualCriterion();
|
||||
@ -35,6 +71,14 @@ public abstract class AbstractGradingCriterion extends AbstractCriterion {
|
||||
return this.fx;
|
||||
}
|
||||
|
||||
public Flag getFlag() {
|
||||
return flag;
|
||||
}
|
||||
|
||||
public void setFlag(Flag flag) {
|
||||
this.flag = flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (o == this) return true;
|
||||
|
@ -30,7 +30,7 @@ public abstract class GradingCriterion extends AbstractGradingCriterion {
|
||||
}
|
||||
|
||||
GradingCriterion(GradingReport gradingReport, GradingCriterionTemplate gradingCriterionTemplate) {
|
||||
super(gradingCriterionTemplate.getTitle(), gradingCriterionTemplate.getTitleEn(), gradingCriterionTemplate.getSortOrder(), gradingCriterionTemplate.getPointsRequiredToPass());
|
||||
super(gradingCriterionTemplate.getTitle(), gradingCriterionTemplate.getTitleEn(), gradingCriterionTemplate.getSortOrder(), gradingCriterionTemplate.getPointsRequiredToPass(), gradingCriterionTemplate.getFlag());
|
||||
this.gradingReport = gradingReport;
|
||||
for (GradingCriterionPointTemplate pointTemplate : gradingCriterionTemplate.getGradingCriterionPointTemplates()) {
|
||||
gradingCriterionPoints.add(new GradingCriterionPoint(
|
||||
|
@ -69,13 +69,23 @@ public class GradingReportTemplate extends DomainObject {
|
||||
}
|
||||
|
||||
public GradingCriterionTemplate addProjectCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates) {
|
||||
return addProjectCriterion(title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates, null);
|
||||
}
|
||||
|
||||
public GradingCriterionTemplate addProjectCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates, AbstractGradingCriterion.Flag flag) {
|
||||
GradingCriterionTemplate gradingCriterionTemplate = new ProjectGradingCriterionTemplate(this, criteria.size(), title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates);
|
||||
gradingCriterionTemplate.setFlag(flag);
|
||||
criteria.add(gradingCriterionTemplate);
|
||||
return gradingCriterionTemplate;
|
||||
}
|
||||
|
||||
public GradingCriterionTemplate addIndividualCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates) {
|
||||
return addIndividualCriterion(title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates, null);
|
||||
}
|
||||
|
||||
public GradingCriterionTemplate addIndividualCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates, AbstractGradingCriterion.Flag flag) {
|
||||
GradingCriterionTemplate gradingCriterionTemplate = new IndividualGradingCriterionTemplate(this, criteria.size(), title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates);
|
||||
gradingCriterionTemplate.setFlag(flag);
|
||||
criteria.add(gradingCriterionTemplate);
|
||||
return gradingCriterionTemplate;
|
||||
}
|
||||
|
@ -75,20 +75,27 @@ public class GradingReportTemplateRepoImpl extends GenericRepo<GradingReportTemp
|
||||
.stream()
|
||||
.map(this::toPointTemplate)
|
||||
.toList();
|
||||
AbstractGradingCriterion.Flag flag = criteria.flag() == null ? null : switch (criteria.flag()) {
|
||||
case OPPOSITION -> AbstractGradingCriterion.Flag.OPPOSITION;
|
||||
case REFLECTION -> AbstractGradingCriterion.Flag.REFLECTION;
|
||||
//case null -> null; sigh java 17
|
||||
};
|
||||
switch (criteria.type()) {
|
||||
case THESIS -> {
|
||||
gradingReportTemplate.addProjectCriterion(
|
||||
criteria.title().swedish(),
|
||||
criteria.title().english(),
|
||||
criteria.minimumPointsRequiredToPass(),
|
||||
pointTemplates);
|
||||
pointTemplates,
|
||||
flag);
|
||||
}
|
||||
case INDIVIDUAL -> {
|
||||
gradingReportTemplate.addIndividualCriterion(
|
||||
criteria.title().swedish(),
|
||||
criteria.title().english(),
|
||||
criteria.minimumPointsRequiredToPass(),
|
||||
pointTemplates);
|
||||
pointTemplates,
|
||||
flag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,4 @@
|
||||
ALTER TABLE `grading_criterion_template`
|
||||
ADD COLUMN `flag` VARCHAR(64);
|
||||
ALTER TABLE `GradingCriterion`
|
||||
ADD COLUMN `flag` VARCHAR(64);
|
@ -85,6 +85,10 @@ class EditingGradingTemplate implements Serializable {
|
||||
Point editingPoint = new Point(point);
|
||||
this.points.add(editingPoint);
|
||||
}
|
||||
this.flag = criteria.getFlag() == null ? null : switch (criteria.getFlag()) {
|
||||
case OPPOSITION -> Flag.OPPOSITION;
|
||||
case REFLECTION -> Flag.REFLECTION;
|
||||
};
|
||||
}
|
||||
|
||||
private Criteria() {}
|
||||
|
@ -10,3 +10,4 @@ Type.PROJECT=Once per thesis
|
||||
Type.INDIVIDUAL=Individually for each author
|
||||
minimum.Required=You must set the minimum number of points for each grade
|
||||
grade.Required=You must set the letter for each grade
|
||||
flag.nullValid=None
|
||||
|
@ -121,7 +121,7 @@ public class CriteriaPanel extends GenericPanel<SupervisorGradingReport> {
|
||||
grading.add(pf);
|
||||
grading.add(new Label("pfCriteria", item.getModel().combineWith(language, (gc, lang) -> gc.getGradingCriterionPoints().get(1).getDescription(lang))));
|
||||
|
||||
if (item.getModelObject().getTitle().startsWith("Ö1 ")) {
|
||||
if (item.getModelObject().getFlag() == AbstractGradingCriterion.Flag.OPPOSITION) {
|
||||
grading.setEnabled(false);
|
||||
}
|
||||
item.add(new AjaxConfirmationLink<>("enable", "Are you sure you want to grade this criteria? It is usually filled in by the seminar supervisor") {
|
||||
@ -194,7 +194,7 @@ public class CriteriaPanel extends GenericPanel<SupervisorGradingReport> {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
final boolean isOppositionCriteria = gradingCriterion.getObject().getTitle().startsWith("Ö1 ");
|
||||
final boolean isOppositionCriteria = gradingCriterion.getObject().getFlag() == AbstractGradingCriterion.Flag.OPPOSITION;
|
||||
setVisibilityAllowed(isOppositionCriteria && isEnabledInHierarchy());
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user