3257 förtydliga datum för inskickandet av uppsatsen till examinator
This commit is contained in:
parent
8fb22115cb
commit
7420970e4b
core/src/main
java/se/su/dsv/scipro/report
resources/db/migration
view/src/main/java/se/su/dsv/scipro
@ -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) {
|
||||
|
2
core/src/main/resources/db/migration/V385__grading_report_date_submitted_to_examiner.sql
Normal file
2
core/src/main/resources/db/migration/V385__grading_report_date_submitted_to_examiner.sql
Normal file
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user