Skip to content
Snippets Groups Projects
Commit 77b3628c authored by srosse's avatar srosse
Browse files

OO-4825: update precisely the assessment ID of assessment entry

parent 12a376e6
No related branches found
No related tags found
No related merge requests found
......@@ -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,
......
......@@ -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
......
......@@ -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;
}
......
......@@ -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);
......
......@@ -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));
}
}
......@@ -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) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment