diff --git a/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateUpdate.java b/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateUpdate.java index 357ea9a04e..12f431c10e 100644 --- a/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateUpdate.java +++ b/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateUpdate.java @@ -36,12 +36,19 @@ public record GradingReportTemplateUpdate( } } - public record Criteria(LocalizedString title, @Nullable Flag flag, List<Requirement> requirements) + public record Criteria( + LocalizedString title, + Type type, + int minimumPointsRequiredToPass, + @Nullable Flag flag, + List<Requirement> requirements) { + public enum Type {THESIS, INDIVIDUAL} public enum Flag {OPPOSITION, REFLECTION} public Criteria { Objects.requireNonNull(title, "Title must not be null"); + Objects.requireNonNull(type, "Type must not be null"); Objects.requireNonNull(requirements, "Requirements must not be null"); } diff --git a/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplate.java b/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplate.java index 0bd1da6bfb..d6eaf522a0 100644 --- a/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplate.java +++ b/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplate.java @@ -25,7 +25,7 @@ public class GradingReportTemplate extends DomainObject { @OneToOne(optional = false) private ProjectType projectType; - @OneToMany(mappedBy = "gradingReportTemplate", cascade = {CascadeType.ALL}) + @OneToMany(mappedBy = "gradingReportTemplate", cascade = {CascadeType.ALL}, orphanRemoval = true) private Collection<GradingCriterionTemplate> criteria = new HashSet<>(); @Temporal(TemporalType.DATE) diff --git a/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplateRepoImpl.java b/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplateRepoImpl.java index 6da82c20d6..eaa91cf59b 100644 --- a/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplateRepoImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplateRepoImpl.java @@ -65,6 +65,40 @@ public class GradingReportTemplateRepoImpl extends GenericRepo<GradingReportTemp @Transactional public GradingReportTemplate updateTemplate(long templateId, GradingReportTemplateUpdate update) { GradingReportTemplate gradingReportTemplate = findOne(templateId); - return gradingReportTemplate; + gradingReportTemplate.setValidFrom(update.validFrom()); + + gradingReportTemplate.getCriteria().clear(); + for (var criteria : update.criteria()) { + final List<GradingCriterionPointTemplate> pointTemplates = criteria.requirements() + .stream() + .map(this::toPointTemplate) + .toList(); + switch (criteria.type()) { + case THESIS -> { + gradingReportTemplate.addProjectCriterion( + criteria.title().swedish(), + criteria.title().english(), + criteria.minimumPointsRequiredToPass(), + pointTemplates); + } + case INDIVIDUAL -> { + gradingReportTemplate.addIndividualCriterion( + criteria.title().swedish(), + criteria.title().english(), + criteria.minimumPointsRequiredToPass(), + pointTemplates); + } + } + } + + return save(gradingReportTemplate); + } + + private GradingCriterionPointTemplate toPointTemplate(GradingReportTemplateUpdate.Criteria.Requirement requirement) { + return new GradingCriterionPointTemplate.Builder() + .point(requirement.points()) + .description(requirement.description().swedish()) + .descriptionEn(requirement.description().english()) + .build(); } } \ No newline at end of file diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateEditPage.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateEditPage.java index d9ab2a9ab7..bd8f8e65d4 100644 --- a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateEditPage.java +++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateEditPage.java @@ -97,6 +97,11 @@ public class AdminGradingTemplateEditPage extends AbstractAdminProjectPage imple } return new GradingReportTemplateUpdate.Criteria( new LocalizedString(criteria.getTitleEn(), criteria.getTitleSv()), + switch (criteria.getType()) { + case PROJECT -> GradingReportTemplateUpdate.Criteria.Type.THESIS; + case INDIVIDUAL -> GradingReportTemplateUpdate.Criteria.Type.INDIVIDUAL; + }, + criteria.getPointsRequiredToPass(), getFlag(criteria), requirements); }