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.Clock;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import se.su.dsv.scipro.misc.DaysService;
|
import se.su.dsv.scipro.misc.DaysService;
|
||||||
import se.su.dsv.scipro.report.OppositionReport;
|
import se.su.dsv.scipro.report.OppositionReport;
|
||||||
import se.su.dsv.scipro.report.OppositionReportService;
|
import se.su.dsv.scipro.report.OppositionReportService;
|
||||||
@ -107,6 +108,22 @@ public class FinalSeminarOppositionServiceImpl
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
OppositionReport report = oppositionReportService.findOrCreateReport(finalSeminarOpposition);
|
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;
|
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.report.OppositionReport;
|
||||||
import se.su.dsv.scipro.system.User;
|
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>
|
<strong>Final seminar file:</strong> <span wicket:id="thesisFile"></span>
|
||||||
</div>
|
</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">
|
<div wicket:id="fillOutReport">
|
||||||
<strong>Thesis summary</strong>
|
<strong>Thesis summary</strong>
|
||||||
|
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
package se.su.dsv.scipro.finalseminar;
|
package se.su.dsv.scipro.finalseminar;
|
||||||
|
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.util.Optional;
|
||||||
import org.apache.wicket.RestartResponseException;
|
import org.apache.wicket.RestartResponseException;
|
||||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
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.markup.html.form.TextArea;
|
||||||
import org.apache.wicket.model.IModel;
|
import org.apache.wicket.model.IModel;
|
||||||
import org.apache.wicket.model.LambdaModel;
|
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(
|
add(
|
||||||
new FillOutReportPanel<>(FILL_OUT_REPORT, report) {
|
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);
|
mockReport(bachelor);
|
||||||
long oppositionId = 4L;
|
long oppositionId = 4L;
|
||||||
Mockito.when(finalSeminarOppositionService.getOpposition(oppositionId)).thenReturn(
|
Mockito.when(finalSeminarOppositionService.getOpposition(oppositionId)).thenReturn(
|
||||||
new Opposition(user, mockReport(bachelor))
|
new Opposition(user, mockReport(bachelor), Optional.empty())
|
||||||
);
|
);
|
||||||
startPage(oppositionId);
|
startPage(oppositionId);
|
||||||
tester.assertDisabled(FILL_OUT_REPORT);
|
tester.assertDisabled(FILL_OUT_REPORT);
|
||||||
@ -158,7 +158,7 @@ public class OppositionReportPageTest extends SciProTest {
|
|||||||
long oppositionId = 4L;
|
long oppositionId = 4L;
|
||||||
setLoggedInAs(user);
|
setLoggedInAs(user);
|
||||||
Mockito.when(finalSeminarOppositionService.getOpposition(oppositionId)).thenReturn(
|
Mockito.when(finalSeminarOppositionService.getOpposition(oppositionId)).thenReturn(
|
||||||
new Opposition(user, mockReport(bachelor))
|
new Opposition(user, mockReport(bachelor), Optional.empty())
|
||||||
);
|
);
|
||||||
startPage(oppositionId);
|
startPage(oppositionId);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user