WIP: Allow supervisors to request improvements from final seminar opponents #78

Draft
ansv7779 wants to merge 24 commits from opponent-completion into develop
5 changed files with 70 additions and 4 deletions
Showing only changes of commit 54d5ef8752 - Show all commits

View File

@ -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();
}
}
}

View File

@ -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) {}
}

View File

@ -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>

View File

@ -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);
}
}

View File

@ -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);
}