Allow supervisors to request improvements from final seminar opponents #78

Merged
niat8586 merged 41 commits from opponent-completion into develop 2025-03-05 10:05:38 +01:00
6 changed files with 26 additions and 11 deletions
Showing only changes of commit 236f6a0ad3 - Show all commits

View File

@ -172,13 +172,13 @@ public class Notifications {
@Subscribe @Subscribe
public void oppositionReportImprovementsRequested(OppositionReportImprovementsRequestedEvent event) { public void oppositionReportImprovementsRequested(OppositionReportImprovementsRequestedEvent event) {
Member recipient = new Member(event.opposition().getUser(), Member.Type.AUTHOR); Member recipient = new Member(event.opposition().getUser(), Member.Type.OPPONENT);
Set<Member> recipients = Set.of(recipient); Set<Member> recipients = Set.of(recipient);
NotificationSource source = new NotificationSource(); NotificationSource source = new NotificationSource();
source.setMessage(event.supervisorComment()); source.setMessage(event.supervisorComment());
notificationController.notifyCustomProject( notificationController.notifyCustomSeminar(
event.opposition().getProject(), event.opposition().getFinalSeminar(),
ProjectEvent.Event.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED, SeminarEvent.Event.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED,
source, source,
recipients recipients
); );

View File

@ -51,7 +51,6 @@ public class ProjectEvent extends NotificationEvent {
PARTICIPATION_FAILED, PARTICIPATION_FAILED,
REFLECTION_IMPROVEMENTS_REQUESTED, REFLECTION_IMPROVEMENTS_REQUESTED,
REFLECTION_IMPROVEMENTS_SUBMITTED, REFLECTION_IMPROVEMENTS_SUBMITTED,
OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED,
} }
@Basic @Basic

View File

@ -27,6 +27,7 @@ public class SeminarEvent extends NotificationEvent {
THESIS_UPLOAD_REMIND, THESIS_UPLOAD_REMIND,
CANCELLED, CANCELLED,
OPPOSITION_REPORT_SUBMITTED, OPPOSITION_REPORT_SUBMITTED,
OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED,
} }
@Basic @Basic

View File

@ -79,10 +79,6 @@ PROJECT.FIRST_MEETING.body = Date: {0}\n\nDescription:\n{2}
PROJECT.OPPOSITION_FAILED.title = Your opposition on {1} did not meet the minimum requirements. PROJECT.OPPOSITION_FAILED.title = Your opposition on {1} did not meet the minimum requirements.
PROJECT.OPPOSITION_FAILED.body = Your opposition did not meet the minimum requirements set, and you will have to \ PROJECT.OPPOSITION_FAILED.body = Your opposition did not meet the minimum requirements set, and you will have to \
oppose on a different final seminar to pass this step.\n\nFeedback from the seminar supervisor: {2} oppose on a different final seminar to pass this step.\n\nFeedback from the seminar supervisor: {2}
PROJECT.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED.title = Opposition report improvements requested
PROJECT.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED.body = The supervisor has deemed that the opposition report submitted \
does not meet the minimum requirements and has requested improvements. Please log into SciPro and submit a new \
opposition report. Their comments can be seen below:\n\n{0}
PROJECT.PARTICIPATION_APPROVED.title = Active participation on {1} has been approved. PROJECT.PARTICIPATION_APPROVED.title = Active participation on {1} has been approved.
PROJECT.PARTICIPATION_APPROVED.body = Your active participation on {0} has been approved, but you still have to complete \ PROJECT.PARTICIPATION_APPROVED.body = Your active participation on {0} has been approved, but you still have to complete \
{2} more active participation to meet the minimum requirements for your thesis project. {2} more active participation to meet the minimum requirements for your thesis project.
@ -146,6 +142,10 @@ FINAL_SEMINAR.CANCELLED.title = Final seminar for project {1} was cancelled
FINAL_SEMINAR.CANCELLED.body = The final seminar for project {0} was cancelled, supervisor must select a new date for the final seminar. FINAL_SEMINAR.CANCELLED.body = The final seminar for project {0} was cancelled, supervisor must select a new date for the final seminar.
FINAL_SEMINAR.OPPOSITION_REPORT_SUBMITTED.title=Opposition report submitted by {1} for the seminar on project {0} FINAL_SEMINAR.OPPOSITION_REPORT_SUBMITTED.title=Opposition report submitted by {1} for the seminar on project {0}
FINAL_SEMINAR.OPPOSITION_REPORT_SUBMITTED.body=The opposition report from {0} has been submitted. FINAL_SEMINAR.OPPOSITION_REPORT_SUBMITTED.body=The opposition report from {0} has been submitted.
FINAL_SEMINAR.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED.title = Opposition report improvements requested
FINAL_SEMINAR.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED.body = The supervisor has deemed that the opposition report submitted \
does not meet the minimum requirements and has requested improvements. Please log into SciPro and submit a new \
opposition report. Their comments can be seen below:\n\n{0}
FINAL_SEMINAR.compilationSuffix = , project: {0} FINAL_SEMINAR.compilationSuffix = , project: {0}
PEER.REVIEW_COMPLETED.title = Peer review completed PEER.REVIEW_COMPLETED.title = Peer review completed

View File

@ -10,6 +10,8 @@ import org.apache.wicket.util.string.StringValueConversionException;
import se.su.dsv.scipro.activityplan.ProjectActivityPlanPage; import se.su.dsv.scipro.activityplan.ProjectActivityPlanPage;
import se.su.dsv.scipro.activityplan.SupervisorActivityPlanPage; import se.su.dsv.scipro.activityplan.SupervisorActivityPlanPage;
import se.su.dsv.scipro.finalseminar.FinalSeminar; import se.su.dsv.scipro.finalseminar.FinalSeminar;
import se.su.dsv.scipro.finalseminar.FinalSeminarOpposition;
import se.su.dsv.scipro.finalseminar.OppositionReportPage;
import se.su.dsv.scipro.finalseminar.ProjectFinalSeminarDetailsPage; import se.su.dsv.scipro.finalseminar.ProjectFinalSeminarDetailsPage;
import se.su.dsv.scipro.finalseminar.ProjectFinalSeminarPage; import se.su.dsv.scipro.finalseminar.ProjectFinalSeminarPage;
import se.su.dsv.scipro.finalseminar.ProjectOppositionPage; import se.su.dsv.scipro.finalseminar.ProjectOppositionPage;
@ -180,7 +182,7 @@ public class NotificationLandingPage extends WebPage {
case FIRST_MEETING: case FIRST_MEETING:
defaultSplit.accept(ProjectFirstMeetingPage.class, SupervisorFirstMeetingPage.class); defaultSplit.accept(ProjectFirstMeetingPage.class, SupervisorFirstMeetingPage.class);
break; break;
case OPPOSITION_FAILED, OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED: case OPPOSITION_FAILED:
defaultSplit.accept(ProjectOppositionPage.class, SupervisorProjectDetailsPage.class); defaultSplit.accept(ProjectOppositionPage.class, SupervisorProjectDetailsPage.class);
break; break;
default: default:
@ -217,6 +219,19 @@ public class NotificationLandingPage extends WebPage {
} else if ( } else if (
seminar.getActiveParticipants().contains(currentUser) || seminar.getOpponents().contains(currentUser) seminar.getActiveParticipants().contains(currentUser) || seminar.getOpponents().contains(currentUser)
) { ) {
if (seminarEvent.getEvent() == SeminarEvent.Event.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED) {
Optional<FinalSeminarOpposition> opposition = seminar
.getOppositions()
.stream()
.filter(op -> op.getUser().equals(currentUser))
.findFirst();
if (opposition.isPresent()) {
final PageParameters oppPP = new PageParameters();
oppPP.set("oid", opposition.get().getId());
setResponsePage(OppositionReportPage.class, oppPP);
return;
}
}
setResponsePage(ProjectFinalSeminarDetailsPage.class, pp); setResponsePage(ProjectFinalSeminarDetailsPage.class, pp);
} }
} }

View File

@ -63,7 +63,6 @@ ProjectEvent.SUPERVISOR_GRADING_INITIAL_ASSESSMENT_DONE = The supervisor finishe
ProjectEvent.EXPORTED_SUCCESS = Idea was successfully exported to a thesis course in Daisy and a project in SciPro. ProjectEvent.EXPORTED_SUCCESS = Idea was successfully exported to a thesis course in Daisy and a project in SciPro.
ProjectEvent.FIRST_MEETING = First meeting created. (with date, time, place/room/communication method specified by supervisor) ProjectEvent.FIRST_MEETING = First meeting created. (with date, time, place/room/communication method specified by supervisor)
ProjectEvent.OPPOSITION_FAILED = An author fails their opposition. ProjectEvent.OPPOSITION_FAILED = An author fails their opposition.
ProjectEvent.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED = Opposition report improvements requested.
ProjectEvent.PARTICIPATION_APPROVED = An author's active participation is approved. ProjectEvent.PARTICIPATION_APPROVED = An author's active participation is approved.
ProjectEvent.PARTICIPATION_FAILED = An author fails their active participation. ProjectEvent.PARTICIPATION_FAILED = An author fails their active participation.
ProjectEvent.REFLECTION_IMPROVEMENTS_REQUESTED = Reflection improvements requested. ProjectEvent.REFLECTION_IMPROVEMENTS_REQUESTED = Reflection improvements requested.
@ -85,6 +84,7 @@ SeminarEvent.THESIS_DELETED = Final seminar thesis deleted.
SeminarEvent.THESIS_UPLOAD_REMIND = Authors reminded to upload final seminar thesis. SeminarEvent.THESIS_UPLOAD_REMIND = Authors reminded to upload final seminar thesis.
SeminarEvent.CANCELLED = Final seminar cancelled. SeminarEvent.CANCELLED = Final seminar cancelled.
SeminarEvent.OPPOSITION_REPORT_SUBMITTED = Opposition report submitted. SeminarEvent.OPPOSITION_REPORT_SUBMITTED = Opposition report submitted.
SeminarEvent.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED = Opposition report improvements requested.
IdeaEvent.STATUS_CHANGE = Idea status changed. IdeaEvent.STATUS_CHANGE = Idea status changed.
IdeaEvent.PARTNER_ACCEPT = Partner (author) accepted partnering idea. IdeaEvent.PARTNER_ACCEPT = Partner (author) accepted partnering idea.