3257 förtydliga datum för inskickandet av uppsatsen till examinator

This commit is contained in:
Wayne Westmoreland 2024-03-21 12:45:06 +01:00
parent 8fb22115cb
commit 7420970e4b
7 changed files with 58 additions and 2 deletions

@ -6,6 +6,7 @@ import se.su.dsv.scipro.system.ProjectType;
import se.su.dsv.scipro.system.User;
import jakarta.persistence.*;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -29,6 +30,10 @@ public abstract class GradingReport extends Report {
@OneToMany(mappedBy = "gradingReport", cascade = {CascadeType.ALL})
private List<GradingCriterion> gradingCriteria = new ArrayList<>();
@Basic
@Column(name = "date_submitted_to_examiner")
private Instant dateSubmittedToExaminer;
protected GradingReport() {
// JPA
}
@ -37,6 +42,7 @@ public abstract class GradingReport extends Report {
public void submit() {
super.submit();
setState(State.FINALIZED);
setDateSubmittedToExaminer(Instant.now());
}
public Project getProject() {
@ -51,6 +57,14 @@ public abstract class GradingReport extends Report {
gradingCriteria.add(criterion);
}
public Instant getDateSubmittedToExaminer(){
return this.dateSubmittedToExaminer;
}
public void setDateSubmittedToExaminer(Instant dateSubmittedToExaminer) {
this.dateSubmittedToExaminer = dateSubmittedToExaminer;
}
public State getState() {
return state;
}

@ -7,6 +7,7 @@ import se.su.dsv.scipro.system.GenericService;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.util.Either;
import java.time.Instant;
import java.util.List;
public interface GradingReportService extends GenericService<GradingReport, Long> {
@ -24,4 +25,6 @@ public interface GradingReportService extends GenericService<GradingReport, Long
GradingBasis getGradingBasis(Project project);
GradingBasis updateGradingBasis(Project project, GradingBasis gradingBasis);
Instant getDateSentToExaminer(Project project);
}

@ -16,6 +16,7 @@ import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import java.time.Clock;
import java.time.Instant;
import java.util.*;
@Named
@ -92,6 +93,16 @@ public class GradingReportServiceImpl extends AbstractServiceImpl<GradingReport,
return getGradingBasis(project);
}
@Override
public Instant getDateSentToExaminer(Project project) {
return getSupervisorGradingReports(project)
.stream()
.map(SupervisorGradingReport::getDateSubmittedToExaminer)
.filter(Objects::nonNull)
.max(Comparator.naturalOrder())
.orElse(null);
}
private GradingBasis.Assessment toAssessment(
Language language,
GradingCriterion gc) {

@ -0,0 +1,2 @@
alter table GradingReport
add date_submitted_to_examiner datetime null;

@ -80,6 +80,7 @@ import se.su.dsv.scipro.util.AdditionalExceptionLogger;
import javax.inject.Inject;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class SciProApplication extends LifecycleManagedWebApplication {
@ -106,6 +107,12 @@ public class SciProApplication extends LifecycleManagedWebApplication {
return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
}
});
converterLocator.set(ZonedDateTime.class, new LocalDateTimeConverter() {
@Override
protected DateTimeFormatter getDateTimeFormatter() {
return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
}
});
return converterLocator;
}

@ -4,7 +4,11 @@
<wicket:panel>
<strong>Status:</strong> <span wicket:id="status"></span>
<br>
<span wicket:id="approvedDate"></span><br>
Approved by supervisor: <span wicket:id="approvedDate"></span><br>
<wicket:enclosure>
Submitted to examiner: <span wicket:id="submittedToExaminerTimestamp"></span><br>
</wicket:enclosure>
<br>
</wicket:panel>
</body>
</html>

@ -3,6 +3,7 @@ package se.su.dsv.scipro.finalthesis;
import org.apache.wicket.feedback.FencedFeedbackPanel;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.EnumLabel;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.EnumChoiceRenderer;
import org.apache.wicket.markup.html.form.Form;
@ -19,6 +20,7 @@ import se.su.dsv.scipro.finalseminar.FinalSeminarService;
import se.su.dsv.scipro.forum.pages.ProjectForumBasePage;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.reflection.ReflectionService;
import se.su.dsv.scipro.report.GradingReportService;
import se.su.dsv.scipro.security.auth.ProjectModuleComponent;
import se.su.dsv.scipro.session.SciProSession;
import se.su.dsv.scipro.system.ProjectModule;
@ -26,6 +28,8 @@ import se.su.dsv.scipro.util.PageParameterKeys;
import javax.inject.Inject;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.List;
import static se.su.dsv.scipro.finalthesis.FinalThesis.Status;
@ -40,6 +44,7 @@ public class FinalThesisPanel extends GenericPanel<Project> {
public static final String APPROVED_PANEL = "approvedPanel";
public static final String APPROVED_DATE = "approvedDate";
public static final String NO_DECISION_PANEL = "noDecisionPanel";
public static final String SUBMITTED_TO_EXAMINER_TIMESTAMP = "submittedToExaminerTimestamp";
@Inject
private FinalThesisService finalThesisService;
@ -49,6 +54,8 @@ public class FinalThesisPanel extends GenericPanel<Project> {
private PublishingConsentService publishingConsentService;
@Inject
private ReflectionService reflectionService;
@Inject
private GradingReportService gradingReportService;
public FinalThesisPanel(String id, IModel<Project> project) {
super(id, project);
@ -96,9 +103,17 @@ public class FinalThesisPanel extends GenericPanel<Project> {
private class ApprovedPanel extends Panel {
public ApprovedPanel(String id) {
super(id);
add(new EnumLabel<>("status", getModel().map(Project::getProjectStatus)));
add(new DateLabel(APPROVED_DATE, getFinalThesis().map(FinalThesis::getDateApproved)));
IModel<ZonedDateTime> submittedToExaminerTimestamp = LoadableDetachableModel.of(() -> gradingReportService.getDateSentToExaminer(getModelObject()))
.map(instant -> instant.atZone(ZoneId.systemDefault()));
add(new Label(SUBMITTED_TO_EXAMINER_TIMESTAMP, submittedToExaminerTimestamp) {
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(submittedToExaminerTimestamp.getObject() != null);
}
});
}
@Override