3147 Send the correct examination date if an author performs their required final seminar participations after uploading the final thesis.
This commit is contained in:
parent
0d95489908
commit
30984192bb
@ -9,6 +9,9 @@ import se.su.dsv.scipro.components.ConfirmationLink;
|
||||
import se.su.dsv.scipro.daisyExternal.http.DaisyAPI;
|
||||
import se.su.dsv.scipro.file.FileDescription;
|
||||
import se.su.dsv.scipro.file.FileService;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminar;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarParticipation;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarService;
|
||||
import se.su.dsv.scipro.finalthesis.FinalThesis;
|
||||
import se.su.dsv.scipro.finalthesis.FinalThesisService;
|
||||
import se.su.dsv.scipro.io.dto.ResearchAreaWithID;
|
||||
@ -33,10 +36,15 @@ import se.su.dsv.scipro.util.Either;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Calendar;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class SendToExaminer extends GenericPanel<Project> {
|
||||
@Inject
|
||||
@ -55,6 +63,8 @@ public class SendToExaminer extends GenericPanel<Project> {
|
||||
ReflectionService reflectionService;
|
||||
@Inject
|
||||
RoughDraftApprovalService roughDraftApprovalService;
|
||||
@Inject
|
||||
FinalSeminarService finalSeminarService;
|
||||
|
||||
private IModel<Boolean> needsSending;
|
||||
|
||||
@ -185,7 +195,7 @@ public class SendToExaminer extends GenericPanel<Project> {
|
||||
GradeCalculator gradeCalculator = gradeCalculatorService.getSupervisorCalculator(project);
|
||||
SupervisorGradingReport supervisorGradingReport = gradingReportService.getSupervisorGradingReport(getModelObject(), author);
|
||||
GradingReport.Grade grade = gradeCalculator.getGrade(supervisorGradingReport);
|
||||
LocalDate authorSubmissionDate = finalThesis.getUploadDate();
|
||||
LocalDate examinationDate = getExaminationDate(author, project, finalThesis);
|
||||
Either<ReportGradeError, Void> reported =
|
||||
gradingService.reportGrade(
|
||||
token,
|
||||
@ -193,7 +203,7 @@ public class SendToExaminer extends GenericPanel<Project> {
|
||||
author.getIdentifier(),
|
||||
examination.id(),
|
||||
grade.name(),
|
||||
authorSubmissionDate);
|
||||
examinationDate);
|
||||
|
||||
if (!reported.isRight()) {
|
||||
getSession().error("Failed to send " + author.getFullName() + " for examining");
|
||||
@ -209,6 +219,27 @@ public class SendToExaminer extends GenericPanel<Project> {
|
||||
}
|
||||
}
|
||||
|
||||
private LocalDate getExaminationDate(User author, Project project, FinalThesis finalThesis) {
|
||||
var oppositions = finalSeminarService.findUserOpposing(project, author);
|
||||
var participations = finalSeminarService.findUserParticipating(project, author);
|
||||
|
||||
Optional<LocalDate> seminarDate = Stream.concat(oppositions.stream(), participations.stream())
|
||||
.filter(FinalSeminarParticipation::isApproved)
|
||||
.map(FinalSeminarParticipation::getFinalSeminar)
|
||||
.map(FinalSeminar::getDateCreated)
|
||||
.max(Comparator.naturalOrder())
|
||||
.map(Date::toInstant)
|
||||
.map(instant -> instant.atZone(ZoneId.systemDefault()))
|
||||
.map(ZonedDateTime::toLocalDate);
|
||||
|
||||
if (seminarDate.isPresent() && seminarDate.get().isAfter(finalThesis.getUploadDate())) {
|
||||
return seminarDate.get();
|
||||
}
|
||||
else {
|
||||
return finalThesis.getUploadDate();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean sendProjectLevelComponentsToExaminer(Project project, String token, FinalThesis finalThesis) {
|
||||
sendTitlesToDaisy(project, finalThesis);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user