WIP: Allow supervisors to request improvements from final seminar opponents #78
@ -8,6 +8,7 @@ import jakarta.transaction.Transactional;
|
||||
import java.time.Clock;
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import se.su.dsv.scipro.misc.DaysService;
|
||||
import se.su.dsv.scipro.report.OppositionReport;
|
||||
import se.su.dsv.scipro.report.OppositionReportService;
|
||||
@ -107,6 +108,22 @@ public class FinalSeminarOppositionServiceImpl
|
||||
return null;
|
||||
}
|
||||
OppositionReport report = oppositionReportService.findOrCreateReport(finalSeminarOpposition);
|
||||
return new Opposition(finalSeminarOpposition.getUser(), report);
|
||||
Optional<Opposition.ImprovementsNeeded> improvements = getImprovementsNeeded(finalSeminarOpposition);
|
||||
return new Opposition(finalSeminarOpposition.getUser(), report, improvements);
|
||||
}
|
||||
|
||||
private Optional<Opposition.ImprovementsNeeded> getImprovementsNeeded(
|
||||
FinalSeminarOpposition finalSeminarOpposition
|
||||
) {
|
||||
if (finalSeminarOpposition.getSupervisorCommentForImprovements() != null) {
|
||||
return Optional.of(
|
||||
new Opposition.ImprovementsNeeded(
|
||||
finalSeminarOpposition.getSupervisorCommentForImprovements(),
|
||||
finalSeminarOpposition.getImprovementsRequestedAt()
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,10 @@
|
||||
package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Optional;
|
||||
import se.su.dsv.scipro.report.OppositionReport;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
|
||||
public record Opposition(User user, OppositionReport report) {}
|
||||
public record Opposition(User user, OppositionReport report, Optional<ImprovementsNeeded> improvementsNeeded) {
|
||||
record ImprovementsNeeded(String comment, Instant deadline) {}
|
||||
}
|
||||
|
@ -20,6 +20,17 @@
|
||||
<strong>Final seminar file:</strong> <span wicket:id="thesisFile"></span>
|
||||
</div>
|
||||
|
||||
<wicket:enclosure child="improvements_requested_comment">
|
||||
<div class="alert alert-info">
|
||||
<p>
|
||||
The supervisor has requested improvements to your opposition report.
|
||||
You have until <span wicket:id="improvements_requested_deadline"></span>
|
||||
to make the requested changes. See below for the comments from the supervisor.
|
||||
</p>
|
||||
<p class="mb-0" wicket:id="improvements_requested_comment"></p>
|
||||
</div>
|
||||
</wicket:enclosure>
|
||||
|
||||
<div wicket:id="fillOutReport">
|
||||
<strong>Thesis summary</strong>
|
||||
|
||||
|
@ -1,8 +1,11 @@
|
||||
package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import java.time.ZoneId;
|
||||
import java.util.Optional;
|
||||
import org.apache.wicket.RestartResponseException;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.form.TextArea;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.LambdaModel;
|
||||
@ -52,6 +55,33 @@ public class OppositionReportPage extends AbstractProjectDetailsPage implements
|
||||
)
|
||||
);
|
||||
|
||||
IModel<Opposition.ImprovementsNeeded> improvements = opposition
|
||||
.map(Opposition::improvementsNeeded)
|
||||
.map(OppositionReportPage::orNull);
|
||||
add(
|
||||
new Label("improvements_requested_comment", improvements.map(Opposition.ImprovementsNeeded::comment)) {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
setVisible(!getDefaultModelObjectAsString().isBlank());
|
||||
}
|
||||
}
|
||||
);
|
||||
add(
|
||||
new Label(
|
||||
"improvements_requested_deadline",
|
||||
improvements
|
||||
.map(Opposition.ImprovementsNeeded::deadline)
|
||||
.map(deadline -> deadline.atZone(ZoneId.systemDefault()))
|
||||
) {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
setVisible(getDefaultModelObject() != null);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
add(
|
||||
new FillOutReportPanel<>(FILL_OUT_REPORT, report) {
|
||||
{
|
||||
@ -78,4 +108,8 @@ public class OppositionReportPage extends AbstractProjectDetailsPage implements
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private static <A> A orNull(Optional<A> optional) {
|
||||
return optional.orElse(null);
|
||||
}
|
||||
}
|
||||
|
@ -104,7 +104,7 @@ public class OppositionReportPageTest extends SciProTest {
|
||||
mockReport(bachelor);
|
||||
long oppositionId = 4L;
|
||||
Mockito.when(finalSeminarOppositionService.getOpposition(oppositionId)).thenReturn(
|
||||
new Opposition(user, mockReport(bachelor))
|
||||
new Opposition(user, mockReport(bachelor), Optional.empty())
|
||||
);
|
||||
startPage(oppositionId);
|
||||
tester.assertDisabled(FILL_OUT_REPORT);
|
||||
@ -158,7 +158,7 @@ public class OppositionReportPageTest extends SciProTest {
|
||||
long oppositionId = 4L;
|
||||
setLoggedInAs(user);
|
||||
Mockito.when(finalSeminarOppositionService.getOpposition(oppositionId)).thenReturn(
|
||||
new Opposition(user, mockReport(bachelor))
|
||||
new Opposition(user, mockReport(bachelor), Optional.empty())
|
||||
);
|
||||
startPage(oppositionId);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user