diff --git a/src/main/java/org/olat/course/nodes/iq/ExtraTimeInfos.java b/src/main/java/org/olat/course/nodes/iq/ExtraTimeInfos.java index aebc107d4a362e7014fa3bee99792cac513d4e4b..f78754cb3ba43a35c0dd4c9b02d991606618e4e9 100644 --- a/src/main/java/org/olat/course/nodes/iq/ExtraTimeInfos.java +++ b/src/main/java/org/olat/course/nodes/iq/ExtraTimeInfos.java @@ -31,10 +31,16 @@ public class ExtraTimeInfos implements Comparable<ExtraTimeInfos> { private final Integer extraTimeInSeconds; private final Date start; + private final Double completion; - public ExtraTimeInfos(Integer extraTimeInSeconds, Date start) { + public ExtraTimeInfos(Integer extraTimeInSeconds, Date start, Double completion) { this.extraTimeInSeconds = extraTimeInSeconds; this.start = start; + this.completion = completion; + } + + public Double getCompletion() { + return completion; } public Integer getExtraTimeInSeconds() { diff --git a/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java b/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java index 9d947d602d9f07b2d43efce4151fd11e71834b04..71f066698a74fa6c2e3d24140bfb7a9e9e1d5cae 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java @@ -254,12 +254,20 @@ public class IQIdentityListCourseNodeController extends IdentityListCourseNodeCo @Override protected void loadModel(UserRequest ureq) { super.loadModel(ureq); - - if(((IQTESTCourseNode)courseNode).hasQTI21TimeLimit(getReferencedRepositoryEntry())) { - Map<Long,ExtraTimeInfos> extraTimeInfos = getExtraTimes(); - List<AssessedIdentityElementRow> rows = usersTableModel.getObjects(); - for(AssessedIdentityElementRow row:rows) { - row.setDetails(extraTimeInfos.get(row.getIdentityKey())); + + RepositoryEntry testEntry = getReferencedRepositoryEntry(); + boolean timeLimit = ((IQTESTCourseNode)courseNode).hasQTI21TimeLimit(testEntry); + Map<Long,ExtraTimeInfos> extraTimeInfos = getExtraTimes(); + List<AssessedIdentityElementRow> rows = usersTableModel.getObjects(); + for(AssessedIdentityElementRow row:rows) { + ExtraTimeInfos infos = extraTimeInfos.get(row.getIdentityKey()); + if(infos != null) { + if(timeLimit) { + row.setDetails(infos); + } + if(infos.getCompletion() != null) { + row.getCurrentCompletion().setCompletion(infos.getCompletion()); + } } } @@ -285,12 +293,19 @@ public class IQIdentityListCourseNodeController extends IdentityListCourseNodeCo for(AssessmentTestSession session:sessions) { Long identityKey = session.getIdentity().getKey(); if(currentIdentityKey == null || !currentIdentityKey.equals(identityKey)) { - if(session.getFinishTime() == null && session.getExtraTime() != null) { - Integer extraTimeInSeconds = session.getExtraTime(); - Date start = session.getCreationDate(); - ExtraTimeInfos infos = new ExtraTimeInfos(extraTimeInSeconds, start); - identityToExtraTime.put(identityKey, infos); + Date start = null; + Double completion = null; + Integer extraTimeInSeconds = null; + if(session.getFinishTime() == null && session.getTerminationTime() == null) { + start = session.getCreationDate(); + extraTimeInSeconds = session.getExtraTime(); + if(session.getNumOfQuestions() != null && session.getNumOfQuestions().intValue() > 0 && session.getNumOfAnsweredQuestions() != null) { + completion = session.getNumOfAnsweredQuestions().doubleValue() / session.getNumOfQuestions().doubleValue(); + } } + + ExtraTimeInfos infos = new ExtraTimeInfos(extraTimeInSeconds, start, completion); + identityToExtraTime.put(identityKey, infos); currentIdentityKey = identityKey; } }