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

Draft
ansv7779 wants to merge 18 commits from opponent-completion into develop
7 changed files with 33 additions and 1 deletions
Showing only changes of commit 88ced02a2d - Show all commits

View File

@ -98,6 +98,8 @@ public class FinalSeminarOppositionServiceImpl
opposition.setImprovementsRequestedAt(now); opposition.setImprovementsRequestedAt(now);
opposition.setSupervisorCommentForImprovements(supervisorComment); opposition.setSupervisorCommentForImprovements(supervisorComment);
eventBus.post(new OppositionReportImprovementsRequestedEvent(opposition, supervisorComment, deadline));
return deadline; return deadline;
} }

View File

@ -0,0 +1,9 @@
package se.su.dsv.scipro.finalseminar;
import java.time.Instant;
public record OppositionReportImprovementsRequestedEvent(
FinalSeminarOpposition opposition,
String supervisorComment,
Instant deadline
) {}

View File

@ -12,6 +12,7 @@ import se.su.dsv.scipro.finalseminar.FinalSeminarDeletedEvent;
import se.su.dsv.scipro.finalseminar.FinalSeminarThesisDeletedEvent; import se.su.dsv.scipro.finalseminar.FinalSeminarThesisDeletedEvent;
import se.su.dsv.scipro.finalseminar.FinalSeminarThesisUploadedEvent; import se.su.dsv.scipro.finalseminar.FinalSeminarThesisUploadedEvent;
import se.su.dsv.scipro.finalseminar.OppositionFailedEvent; import se.su.dsv.scipro.finalseminar.OppositionFailedEvent;
import se.su.dsv.scipro.finalseminar.OppositionReportImprovementsRequestedEvent;
import se.su.dsv.scipro.finalseminar.ParticipationFailedEvent; import se.su.dsv.scipro.finalseminar.ParticipationFailedEvent;
import se.su.dsv.scipro.notifications.dataobject.NotificationSource; import se.su.dsv.scipro.notifications.dataobject.NotificationSource;
import se.su.dsv.scipro.notifications.dataobject.PeerEvent; import se.su.dsv.scipro.notifications.dataobject.PeerEvent;
@ -168,6 +169,20 @@ public class Notifications {
); );
} }
@Subscribe
public void oppositionReportImprovementsRequested(OppositionReportImprovementsRequestedEvent event) {
Member recipient = new Member(event.opposition().getUser(), Member.Type.AUTHOR);
Set<Member> recipients = Set.of(recipient);
NotificationSource source = new NotificationSource();
source.setMessage(event.supervisorComment());
notificationController.notifyCustomProject(
event.opposition().getProject(),
ProjectEvent.Event.OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED,
source,
recipients
);
}
@Subscribe @Subscribe
public void reviewersChanged(ReviewerAssignedEvent event) { public void reviewersChanged(ReviewerAssignedEvent event) {
notificationController.notifyProject( notificationController.notifyProject(

View File

@ -51,6 +51,7 @@ 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

@ -79,6 +79,10 @@ 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.

View File

@ -180,7 +180,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: case OPPOSITION_FAILED, OPPOSITION_REPORT_IMPROVEMENTS_REQUESTED:
defaultSplit.accept(ProjectOppositionPage.class, SupervisorProjectDetailsPage.class); defaultSplit.accept(ProjectOppositionPage.class, SupervisorProjectDetailsPage.class);
break; break;
default: default:

View File

@ -63,6 +63,7 @@ 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.