Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java,v diff -u -r1.18 -r1.19 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 27 Sep 2013 17:16:31 -0000 1.18 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 15 Nov 2013 10:04:44 -0000 1.19 @@ -190,10 +190,31 @@ void storeUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions, boolean isAutosave); + /** + * Return the latest result (it can be unfinished). + * + * @param assessmentUid + * @param userId + * @return + */ AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId); + /** + * Return the latest result (only finished ones). + * + * @param assessmentUid + * @param userId + * @return + */ AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId); + /** + * Return number of finished results. I.e. don't count the last not-yet-finished result (it can be autosave one). + * + * @param assessmentUid + * @param userId + * @return + */ int getAssessmentResultCount(Long assessmentUid, Long userId); List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java,v diff -u -r1.31 -r1.32 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java 31 Oct 2013 12:02:59 -0000 1.31 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java 15 Nov 2013 10:04:43 -0000 1.32 @@ -326,9 +326,7 @@ sessionMap.put(AssessmentConstants.ATTR_ASSESSMENT, assessment); // loadupLastAttempt for display purpose - if (dbResultCount > 0) { - loadupLastAttempt(sessionMap); - } + loadupLastAttempt(sessionMap); //check if need to display results page if ((dbResultCount > 0) && finishedLock) { @@ -716,16 +714,22 @@ } private void loadupLastAttempt(SessionMap sessionMap){ + IAssessmentService service = getAssessmentService(); + ArrayList> pagedQuestions = (ArrayList>) sessionMap .get(AssessmentConstants.ATTR_PAGED_QUESTIONS); Long assessmentUid = ((Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT)).getUid(); Long userId = ((AssessmentUser) sessionMap.get(AssessmentConstants.ATTR_USER)).getUserId(); - IAssessmentService service = getAssessmentService(); - AssessmentResult result = service.getLastAssessmentResult(assessmentUid,userId); + //get the latest result (it can be unfinished one) + AssessmentResult lastResult = service.getLastAssessmentResult(assessmentUid,userId); + //if there is no results yet - no action required + if (lastResult == null) { + return; + } for(LinkedHashSet questionsForOnePage : pagedQuestions) { for (AssessmentQuestion question : questionsForOnePage) { - for (AssessmentQuestionResult questionResult : result.getQuestionResults()) { + for (AssessmentQuestionResult questionResult : lastResult.getQuestionResults()) { if (question.getUid().equals(questionResult.getAssessmentQuestion().getUid())) { question.setAnswerBoolean(questionResult.getAnswerBoolean()); question.setAnswerFloat(questionResult.getAnswerFloat());