From 9e31b8f54ea24b0a2c113df118bc8d7b411e72ff Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Mon, 3 Aug 2020 18:21:42 +0200 Subject: [PATCH] OO-4825: overwrite assessment date if needed --- .../olat/course/nodes/IQTESTCourseNode.java | 2 +- .../iq/QTI21AssessmentRunController.java | 2 +- ...mentTestSessionInvalidationController.java | 3 +-- ...mentTestSessionRevalidationController.java | 4 ++-- .../ui/QTI21AssessmentDetailsController.java | 2 +- .../olat/modules/grading/GradingService.java | 4 ++-- .../grading/manager/GradingServiceImpl.java | 24 ++++++++++++------- .../ConfirmReopenAssignmentController.java | 2 +- .../grading/manager/GradingServiceTest.java | 24 +++++++++---------- 9 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java index 3e84ac85927..f5fe972cbf7 100644 --- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java +++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java @@ -609,7 +609,7 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements QT if(IQEditController.CORRECTION_GRADING.equals(correctionMode)) { AssessmentEntry assessmentEntry = courseAssessmentService.getAssessmentEntry(this, assessedUserCourseEnv); RepositoryEntry testEntry = IQEditController.getIQReference(getModuleConfiguration(), false); - CoreSpringFactory.getImpl(GradingService.class).assignGrader(testEntry, assessmentEntry, true); + CoreSpringFactory.getImpl(GradingService.class).assignGrader(testEntry, assessmentEntry, session.getFinishTime(), true); } } diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java index 545c138e664..30cd64ebe7d 100644 --- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java +++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java @@ -1054,7 +1054,7 @@ public class QTI21AssessmentRunController extends BasicController implements Gen if(IQEditController.CORRECTION_GRADING.equals(correctionMode)) { AssessmentEntry assessmentEntry = courseAssessmentService.getAssessmentEntry(courseNode, userCourseEnv); - gradingService.assignGrader(testEntry, assessmentEntry, true); + gradingService.assignGrader(testEntry, assessmentEntry, new Date(), true); } assessmentNotificationsHandler.markPublisherNews(getIdentity(), userCourseEnv.getCourseEnvironment().getCourseResourceableId()); diff --git a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java index 5c5e9474a29..c1f58294736 100644 --- a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java +++ b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java @@ -201,7 +201,6 @@ public class ConfirmAssessmentTestSessionInvalidationController extends FormBasi qtiService.updateAssessmentEntry(promotedSession, updateEntryResults); } else { courseNode.promoteAssessmentTestSession(promotedSession, assessedUserCourseEnv, updateEntryResults, getIdentity(), Role.coach); - } } @@ -211,7 +210,7 @@ public class ConfirmAssessmentTestSessionInvalidationController extends FormBasi || assignmentStatus == GradingAssignmentStatus.inProcess || assignmentStatus == GradingAssignmentStatus.done) { if(promotedSession != null) { - gradingService.reopenAssignment(runningAssignment); + gradingService.reopenAssignment(runningAssignment, promotedSession.getFinishTime()); } else { gradingService.deactivateAssignment(runningAssignment); } diff --git a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java index 66c26f88e3b..b70af02e289 100644 --- a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java +++ b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java @@ -183,14 +183,14 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi if(assignmentStatus == GradingAssignmentStatus.assigned || assignmentStatus == GradingAssignmentStatus.inProcess || assignmentStatus == GradingAssignmentStatus.done) { - gradingService.reopenAssignment(runningAssignment); + gradingService.reopenAssignment(runningAssignment, session.getFinishTime()); } else if(assignmentStatus == GradingAssignmentStatus.deactivated || assignmentStatus == GradingAssignmentStatus.unassigned) { dbInstance.commit();// if the assessment was updated before AssessmentEntry assessmentEntry = gradingService .loadFullAssessmentEntry(runningAssignment.getAssessmentEntry()); RepositoryEntry referenceEntry = session.getTestEntry(); - gradingService.assignGrader(referenceEntry, assessmentEntry, true); + gradingService.assignGrader(referenceEntry, assessmentEntry, session.getFinishTime(), true); } } } diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java index 4bc1d1ca486..bfe631325f1 100644 --- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java +++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java @@ -567,7 +567,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController { private void doPullSession(UserRequest ureq, AssessmentTestSession session) { //reload it to prevent lazy loading issues session = qtiService.getAssessmentTestSession(session.getKey()); - qtiService.pullSession(session, getSignatureOptions(session), getIdentity()); + session = qtiService.pullSession(session, getSignatureOptions(session), getIdentity()); if(courseNode != null) { courseNode.pullAssessmentTestSession(session, assessedUserCourseEnv, getIdentity(), Role.coach); } diff --git a/src/main/java/org/olat/modules/grading/GradingService.java b/src/main/java/org/olat/modules/grading/GradingService.java index 2745f3d5392..dba6bcb7bcc 100644 --- a/src/main/java/org/olat/modules/grading/GradingService.java +++ b/src/main/java/org/olat/modules/grading/GradingService.java @@ -149,7 +149,7 @@ public interface GradingService { public List<GradingAssignmentWithInfos> getGradingAssignmentsWithInfos(GradingAssignmentSearchParameters searchParams); - public void assignGrader(RepositoryEntry referenceEntry, AssessmentEntry assessmentEntry, boolean updateAssessmentDate); + public GradingAssignment assignGrader(RepositoryEntry referenceEntry, AssessmentEntry assessmentEntry, Date AssessmentDate, boolean updateAssessmentDate); public GradingAssignment extendAssignmentDeadline(GradingAssignment assignment, Date newDeadline); @@ -169,7 +169,7 @@ public interface GradingService { */ public GradingAssignment assignmentDone(GradingAssignment assignment, Long metadatatime, Boolean visibleToUser); - public GradingAssignment reopenAssignment(GradingAssignment assignment); + public GradingAssignment reopenAssignment(GradingAssignment assignment, Date assessmentDate); public void updateDeadline(RepositoryEntry referenceEntry, RepositoryEntryGradingConfiguration configuration); diff --git a/src/main/java/org/olat/modules/grading/manager/GradingServiceImpl.java b/src/main/java/org/olat/modules/grading/manager/GradingServiceImpl.java index 818da3c2b0a..eea7d33bb3d 100644 --- a/src/main/java/org/olat/modules/grading/manager/GradingServiceImpl.java +++ b/src/main/java/org/olat/modules/grading/manager/GradingServiceImpl.java @@ -771,14 +771,18 @@ public class GradingServiceImpl implements GradingService, UserDataDeletable, Re } @Override - public void assignGrader(RepositoryEntry referenceEntry, AssessmentEntry assessmentEntry, boolean updateAssessmentDate) { + public GradingAssignment assignGrader(RepositoryEntry referenceEntry, AssessmentEntry assessmentEntry, Date assessmentDate, boolean updateAssessmentDate) { + if(assessmentDate == null) { + assessmentDate = new Date(); + } + GradingAssignment assignment = gradingAssignmentDao.getGradingAssignment(referenceEntry, assessmentEntry); if(assignment != null && assignment.getGrader() != null) { if(updateAssessmentDate) { - assignment.setAssessmentDate(new Date()); - gradingAssignmentDao.updateAssignment(assignment); + assignment.setAssessmentDate(assessmentDate); + assignment = gradingAssignmentDao.updateAssignment(assignment); } - return; + return assignment; } GraderToIdentity choosedGrader = selectGrader(referenceEntry); @@ -793,13 +797,13 @@ public class GradingServiceImpl implements GradingService, UserDataDeletable, Re if(assignment == null) { assignment = gradingAssignmentDao.createGradingAssignment(choosedGrader, referenceEntry, assessmentEntry, new Date(), deadLine); } else { - assignment.setAssessmentDate(new Date()); + assignment.setAssessmentDate(assessmentDate); assignment.setDeadline(deadLine); if(choosedGrader == null) { assignment.setAssignmentStatus(GradingAssignmentStatus.unassigned); } else { assignment.setAssignmentStatus(GradingAssignmentStatus.assigned); - assignment.setAssignmentDate(new Date()); + assignment.setAssignmentDate(assessmentDate); assignment.setGrader(choosedGrader); } assignment = gradingAssignmentDao.updateAssignment(assignment); @@ -811,9 +815,10 @@ public class GradingServiceImpl implements GradingService, UserDataDeletable, Re sendGraderAsssignmentNotification(choosedGrader, referenceEntry, assignment, config); } assignment.setAssignmentNotificationDate(new Date()); - gradingAssignmentDao.updateAssignment(assignment); + assignment = gradingAssignmentDao.updateAssignment(assignment); dbInstance.commit(); } + return assignment; } protected GraderToIdentity selectGrader(RepositoryEntry referenceEntry) { @@ -1005,9 +1010,12 @@ public class GradingServiceImpl implements GradingService, UserDataDeletable, Re } @Override - public GradingAssignment reopenAssignment(GradingAssignment assignment) { + public GradingAssignment reopenAssignment(GradingAssignment assignment, Date assessmentDate) { assignment = gradingAssignmentDao.loadByKey(assignment.getKey()); assignment.setAssignmentStatus(GradingAssignmentStatus.assigned); + if(assessmentDate != null) { + assignment.setAssessmentDate(assessmentDate); + } assignment.setClosingDate(null); assignment = gradingAssignmentDao.updateAssignment(assignment); log.info(Tracing.M_AUDIT, "Assignment reopened {}", assignment.getKey()); diff --git a/src/main/java/org/olat/modules/grading/ui/confirmation/ConfirmReopenAssignmentController.java b/src/main/java/org/olat/modules/grading/ui/confirmation/ConfirmReopenAssignmentController.java index 5f0637f8251..9f4cb4c4eaf 100644 --- a/src/main/java/org/olat/modules/grading/ui/confirmation/ConfirmReopenAssignmentController.java +++ b/src/main/java/org/olat/modules/grading/ui/confirmation/ConfirmReopenAssignmentController.java @@ -81,7 +81,7 @@ public class ConfirmReopenAssignmentController extends FormBasicController { @Override protected void formOK(UserRequest ureq) { - gradingService.reopenAssignment(assignment); + gradingService.reopenAssignment(assignment, null); fireEvent(ureq, Event.DONE_EVENT); } diff --git a/src/test/java/org/olat/modules/grading/manager/GradingServiceTest.java b/src/test/java/org/olat/modules/grading/manager/GradingServiceTest.java index 902da445aa5..2353cea886d 100644 --- a/src/test/java/org/olat/modules/grading/manager/GradingServiceTest.java +++ b/src/test/java/org/olat/modules/grading/manager/GradingServiceTest.java @@ -188,7 +188,7 @@ public class GradingServiceTest extends OlatTestCase { //first assignment for(int i=0; i<numOfAssessmentEntries; i++) { - gradingService.assignGrader(entry, assessmentEntries.get(i), true); + gradingService.assignGrader(entry, assessmentEntries.get(i), new Date(), true); } List<GradingAssignment> assignmentsGrader1 = gradingAssignmentDao.getGradingAssignments(graderRelation1); @@ -231,7 +231,7 @@ public class GradingServiceTest extends OlatTestCase { //first assignment for(int i=0; i<numOfAssessmentEntries; i++) { - gradingService.assignGrader(entry, assessmentEntries.get(i), true); + gradingService.assignGrader(entry, assessmentEntries.get(i), new Date(), true); } List<GradingAssignment> assignmentsGrader1 = gradingAssignmentDao.getGradingAssignments(graderRelation1); @@ -272,7 +272,7 @@ public class GradingServiceTest extends OlatTestCase { //first assignment for(int i=0; i<numOfAssessmentEntries; i++) { - gradingService.assignGrader(entry, assessmentEntries.get(i), true); + gradingService.assignGrader(entry, assessmentEntries.get(i), new Date(), true); } List<GradingAssignment> assignmentsGrader1 = gradingAssignmentDao.getGradingAssignments(graderRelation1); @@ -302,7 +302,7 @@ public class GradingServiceTest extends OlatTestCase { absenceLeaveDao.createAbsenceLeave(grader, addDaysToNow(-12), addDaysToNow(-1), entry.getOlatResource(), null); dbInstance.commitAndCloseSession(); - gradingService.assignGrader(entry, assessment, true); + gradingService.assignGrader(entry, assessment, null, true); dbInstance.commitAndCloseSession(); List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation); @@ -325,7 +325,7 @@ public class GradingServiceTest extends OlatTestCase { OresHelper.createOLATResourceableInstance("Holydays", 28l), null); dbInstance.commitAndCloseSession(); - gradingService.assignGrader(entry, assessment, true); + gradingService.assignGrader(entry, assessment, null, true); dbInstance.commitAndCloseSession(); List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation); @@ -348,7 +348,7 @@ public class GradingServiceTest extends OlatTestCase { entry.getOlatResource(), "1200013"); dbInstance.commitAndCloseSession(); - gradingService.assignGrader(entry, assessment, true); + gradingService.assignGrader(entry, assessment, new Date(), true); dbInstance.commitAndCloseSession(); List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation); @@ -371,7 +371,7 @@ public class GradingServiceTest extends OlatTestCase { entry.getOlatResource(), null); dbInstance.commitAndCloseSession(); - gradingService.assignGrader(entry, assessment, true); + gradingService.assignGrader(entry, assessment, new Date(), true); dbInstance.commitAndCloseSession(); List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation); @@ -402,7 +402,7 @@ public class GradingServiceTest extends OlatTestCase { entry.getOlatResource(), null); dbInstance.commitAndCloseSession(); - gradingService.assignGrader(entry, assessment, true); + gradingService.assignGrader(entry, assessment, new Date(), true); dbInstance.commitAndCloseSession(); List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation); @@ -430,7 +430,7 @@ public class GradingServiceTest extends OlatTestCase { entry.getOlatResource(), "1200012"); dbInstance.commitAndCloseSession(); - gradingService.assignGrader(entry, assessment, true); + gradingService.assignGrader(entry, assessment, new Date(), true); dbInstance.commitAndCloseSession(); List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation); @@ -743,7 +743,7 @@ public class GradingServiceTest extends OlatTestCase { Assert.assertNotNull(graderRelation2); for(AssessmentEntry assessmentEntry:assessmentEntries) { - gradingService.assignGrader(entry, assessmentEntry, true); + gradingService.assignGrader(entry, assessmentEntry, new Date(), true); } dbInstance.commit(); @@ -780,7 +780,7 @@ public class GradingServiceTest extends OlatTestCase { Assert.assertNotNull(graderRelation1); for(AssessmentEntry assessmentEntry:assessmentEntries) { - gradingService.assignGrader(entry, assessmentEntry, true); + gradingService.assignGrader(entry, assessmentEntry, new Date(), true); } dbInstance.commit(); @@ -807,7 +807,7 @@ public class GradingServiceTest extends OlatTestCase { GraderToIdentity graderRelation = gradedToIdentityDao.createRelation(entry, grader); dbInstance.commit(); - gradingService.assignGrader(entry, assessment, true); + gradingService.assignGrader(entry, assessment, new Date(), true); dbInstance.commit(); // check assignments -- GitLab