From 77b3628c26540b475cc906dba0cfde17f2b93d33 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Mon, 3 Aug 2020 15:25:44 +0200 Subject: [PATCH] OO-4825: update precisely the assessment ID of assessment entry --- .../olat/course/nodes/IQTESTCourseNode.java | 26 ++++++++----- .../java/org/olat/ims/qti21/QTI21Service.java | 2 +- .../ims/qti21/manager/QTI21ServiceImpl.java | 38 ++++++++++--------- ...mentTestSessionInvalidationController.java | 16 ++++---- ...mentTestSessionRevalidationController.java | 17 +++++---- .../ui/QTI21AssessmentDetailsController.java | 2 +- 6 files changed, 56 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java index 616e4144fdb..6a1d40f1589 100644 --- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java +++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java @@ -834,16 +834,22 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements Pe updateUserScoreEvaluation(sceval, assessedUserCourseenv, coachingIdentity, true, by); } - public void promoteAssessmentTestSession(AssessmentTestSession testSession, UserCourseEnvironment assessedUserCourseEnv, Identity coachingIdentity, Role by) { - AssessmentTest assessmentTest = loadAssessmentTest(testSession.getTestEntry()); - Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest); - - BigDecimal finalScore = testSession.getFinalScore(); - Float score = finalScore == null ? null : finalScore.floatValue(); - Boolean passed = testSession.getPassed(); - if(testSession.getManualScore() != null && finalScore != null && cutValue != null) { - boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0; - passed = Boolean.valueOf(calculated); + public void promoteAssessmentTestSession(AssessmentTestSession testSession, UserCourseEnvironment assessedUserCourseEnv, + boolean updateScoring, Identity coachingIdentity, Role by) { + + Float score = null; + Boolean passed = null; + if(updateScoring) { + AssessmentTest assessmentTest = loadAssessmentTest(testSession.getTestEntry()); + Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest); + + BigDecimal finalScore = testSession.getFinalScore(); + score = finalScore == null ? null : finalScore.floatValue(); + passed = testSession.getPassed(); + if(testSession.getManualScore() != null && finalScore != null && cutValue != null) { + boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0; + passed = Boolean.valueOf(calculated); + } } ScoreEvaluation sceval = new ScoreEvaluation(score, passed, null, null, Boolean.TRUE, diff --git a/src/main/java/org/olat/ims/qti21/QTI21Service.java b/src/main/java/org/olat/ims/qti21/QTI21Service.java index e2d4d6b97d2..680befaf23b 100644 --- a/src/main/java/org/olat/ims/qti21/QTI21Service.java +++ b/src/main/java/org/olat/ims/qti21/QTI21Service.java @@ -444,7 +444,7 @@ public interface QTI21Service { * @param candidateSession The assessment test tession. * @return The updated assessment entry */ - public AssessmentEntry updateAssessmentEntry(AssessmentTestSession candidateSession); + public AssessmentEntry updateAssessmentEntry(AssessmentTestSession candidateSession, boolean updateScoring); /** * Sign the assessment result. Be careful, the file must not be changed diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java index d671087fe59..1e7995ec19d 100644 --- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java +++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java @@ -1218,29 +1218,33 @@ public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, Initia } @Override - public AssessmentEntry updateAssessmentEntry(AssessmentTestSession candidateSession) { + public AssessmentEntry updateAssessmentEntry(AssessmentTestSession candidateSession, boolean pushScoring) { Identity assessedIdentity = candidateSession.getIdentity(); RepositoryEntry testEntry = candidateSession.getTestEntry(); - - File unzippedDirRoot = FileResourceManager.getInstance().unzipFileResource(testEntry.getOlatResource()); - ResolvedAssessmentTest resolvedAssessmentTest = loadAndResolveAssessmentTest(unzippedDirRoot, false, false); - AssessmentTest assessmentTest = resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful(); - + AssessmentEntry assessmentEntry = assessmentEntryDao.loadAssessmentEntry(assessedIdentity, testEntry, null, testEntry); - BigDecimal finalScore = candidateSession.getFinalScore(); - assessmentEntry.setScore(finalScore); assessmentEntry.setAssessmentId(candidateSession.getKey()); - - Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest); - Boolean passed = assessmentEntry.getPassed(); - if(candidateSession.getManualScore() != null && finalScore != null && cutValue != null) { - boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0; - passed = Boolean.valueOf(calculated); - } else if(candidateSession.getPassed() != null) { - passed = candidateSession.getPassed(); + if(pushScoring) { + File unzippedDirRoot = FileResourceManager.getInstance().unzipFileResource(testEntry.getOlatResource()); + ResolvedAssessmentTest resolvedAssessmentTest = loadAndResolveAssessmentTest(unzippedDirRoot, false, false); + AssessmentTest assessmentTest = resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful(); + + BigDecimal finalScore = candidateSession.getFinalScore(); + assessmentEntry.setScore(finalScore); + + Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest); + + Boolean passed = assessmentEntry.getPassed(); + if(candidateSession.getManualScore() != null && finalScore != null && cutValue != null) { + boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0; + passed = Boolean.valueOf(calculated); + } else if(candidateSession.getPassed() != null) { + passed = candidateSession.getPassed(); + } + assessmentEntry.setPassed(passed); } - assessmentEntry.setPassed(passed); + assessmentEntry = assessmentEntryDao.updateAssessmentEntry(assessmentEntry); return assessmentEntry; } 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 3df008b319e..a420ed10a5d 100644 --- a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java +++ b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java @@ -156,14 +156,14 @@ public class ConfirmAssessmentTestSessionInvalidationController extends FormBasi session.setCancelled(true); session = qtiService.updateAssessmentTestSession(session); dbInstance.commit(); - if(updateEntryResults) { - AssessmentTestSession promotedSession = getNextLastSession(); - if(promotedSession != null) { - if(courseNode == null) { - qtiService.updateAssessmentEntry(promotedSession); - } else { - courseNode.promoteAssessmentTestSession(promotedSession, assessedUserCourseEnv, getIdentity(), Role.coach); - } + + AssessmentTestSession promotedSession = getNextLastSession(); + // choose to update or not: assessment of the assessment entry, push the score to the assessment entry + if(promotedSession != null) { + if(courseNode == null) { + qtiService.updateAssessmentEntry(promotedSession, updateEntryResults); + } else { + courseNode.promoteAssessmentTestSession(promotedSession, assessedUserCourseEnv, updateEntryResults, getIdentity(), Role.coach); } } fireEvent(ureq, Event.CHANGED_EVENT); 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 863b4a72bdb..fa2f35a2083 100644 --- a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java +++ b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java @@ -75,7 +75,7 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi this.courseNode = courseNode; this.assessedUserCourseEnv = assessedUserCourseEnv; assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity(); - canUpdateAssessmentEntry = canBeNextLastSession(); + canUpdateAssessmentEntry = isNextLastSession(session); initForm(ureq); } @@ -85,7 +85,7 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi this.session = session; this.testEntry = testEntry; this.assessedIdentity = assessedIdentity; - canUpdateAssessmentEntry = canBeNextLastSession(); + canUpdateAssessmentEntry = isNextLastSession(session); initForm(ureq); } @@ -133,17 +133,18 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi session.setCancelled(false); session = qtiService.updateAssessmentTestSession(session); dbInstance.commit(); - if(updateEntryResults) { + + if(canUpdateAssessmentEntry) { if(courseNode == null) { - qtiService.updateAssessmentEntry(session); + qtiService.updateAssessmentEntry(session, updateEntryResults); } else { - courseNode.promoteAssessmentTestSession(session, assessedUserCourseEnv, getIdentity(), Role.coach); + courseNode.promoteAssessmentTestSession(session, assessedUserCourseEnv, updateEntryResults, getIdentity(), Role.coach); } } fireEvent(ureq, Event.CHANGED_EVENT); } - private boolean canBeNextLastSession() { + private boolean isNextLastSession(AssessmentTestSession testSession) { List<AssessmentTestSession> sessions; if(courseNode == null) { sessions = qtiService.getAssessmentTestSessions(testEntry, null, assessedIdentity, true); @@ -155,8 +156,8 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi return true; } - sessions.add(session); + sessions.add(testSession); Collections.sort(sessions, new AssessmentTestSessionComparator(false)); - return session.equals(sessions.get(0)); + return testSession.equals(sessions.get(0)); } } 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 4027ebb0bab..517fef906a1 100644 --- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java +++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java @@ -477,7 +477,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController { } private void doUpdateEntry(AssessmentTestSession session) { - qtiService.updateAssessmentEntry(session); + qtiService.updateAssessmentEntry(session, true); } private void doResetData(UserRequest ureq) { -- GitLab