Index: lams_tool_assessment/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r83fc3f4fbaa1c8985a2ecdaa48627c489b515a66 -rf299a43b38f1c06f1c9a0810b3ae6205b10e0269 --- lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 83fc3f4fbaa1c8985a2ecdaa48627c489b515a66) +++ lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision f299a43b38f1c06f1c9a0810b3ae6205b10e0269) @@ -200,6 +200,7 @@ label.export.summary.by.user = Summary by learner lable.export.summary.by.question = Summary by question label.export.user.id = User name +label.export.overall.summary = Overall summary label.authoring.basic.allow.learners.rich.editor = Allow learners to use rich text editor label.authoring.advance.allow.students.right.answers = Indicate choice(s) that have been answered correctly. label.authoring.advance.allow.students.wrong.answers = Indicate choice(s) that have been answered incorrectly. Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== diff -u -r5aabc63ac1eb20bb16e7b586981129b3208323e3 -rf299a43b38f1c06f1c9a0810b3ae6205b10e0269 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision 5aabc63ac1eb20bb16e7b586981129b3208323e3) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision f299a43b38f1c06f1c9a0810b3ae6205b10e0269) @@ -209,9 +209,7 @@ Query q = getSession().createQuery(LAST_ASSESSMENT_RESULT_GRADE, Float.class); q.setParameter("userId", userId); q.setParameter("assessmentUid", assessmentUid); - Float lastTotalScore = q.uniqueResult(); - - return lastTotalScore == null ? 0 : lastTotalScore; + return q.uniqueResult(); } @Override Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java =================================================================== diff -u -r6cda19702eb2790fece3c55bddb223147417af5d -rf299a43b38f1c06f1c9a0810b3ae6205b10e0269 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision 6cda19702eb2790fece3c55bddb223147417af5d) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision f299a43b38f1c06f1c9a0810b3ae6205b10e0269) @@ -150,15 +150,17 @@ String firstName = (String) element[1]; String lastName = (String) element[2]; String login = (String) element[3]; - float grade = element[4] == null ? 0 : ((Number) element[4]).floatValue(); - String portraitId = (String) element[5]; + boolean resultSubmitted = element[4] != null; + float grade = resultSubmitted ? ((Number) element[4]).floatValue() : 0; + String portraitId = (String) element[5]; AssessmentUserDTO userDto = new AssessmentUserDTO(); userDto.setUserId(userId); userDto.setFirstName(firstName); userDto.setLastName(lastName); userDto.setLogin(login); userDto.setGrade(grade); + userDto.setResultSubmitted(resultSubmitted); userDto.setPortraitId(portraitId); userDtos.add(userDto); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java =================================================================== diff -u -r365a2c22199a5fe2b1e55e18cbf4b6d2596f202b -rf299a43b38f1c06f1c9a0810b3ae6205b10e0269 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java (.../AssessmentUserDTO.java) (revision 365a2c22199a5fe2b1e55e18cbf4b6d2596f202b) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java (.../AssessmentUserDTO.java) (revision f299a43b38f1c06f1c9a0810b3ae6205b10e0269) @@ -28,6 +28,7 @@ private String lastName; private String login; private float grade; + private boolean resultSubmitted; private Long questionResultUid; private String portraitId; @@ -64,6 +65,14 @@ this.grade = grade; } + public boolean isResultSubmitted() { + return resultSubmitted; + } + + public void setResultSubmitted(boolean resultSubmitted) { + this.resultSubmitted = resultSubmitted; + } + public Long getUserId() { return userId; } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -rcf0eebcaab1317079c30cb1d4e056ba9dd4ec048 -rf299a43b38f1c06f1c9a0810b3ae6205b10e0269 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision cf0eebcaab1317079c30cb1d4e056ba9dd4ec048) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision f299a43b38f1c06f1c9a0810b3ae6205b10e0269) @@ -1648,64 +1648,92 @@ } @Override - public List exportSummary(Assessment assessment, List sessionDtos) { + public List exportSummary(Assessment assessment, long toolContentId) { List sheets = new LinkedList<>(); // -------------- First tab: Summary ---------------------------------------------------- ExcelSheet summarySheet = new ExcelSheet(getMessage("label.export.summary")); sheets.add(summarySheet); - if (sessionDtos != null) { - for (GradeStatsDTO sessionDTO : sessionDtos) { - Long sessionId = sessionDTO.getSessionId(); + GradeStatsDTO overallDTO = getStatsDtoForActivity(toolContentId); - summarySheet.addEmptyRow(); + summarySheet.addEmptyRow(); + ExcelRow overallSummaryRow = summarySheet.initRow(); + overallSummaryRow.addCell(getMessage("label.export.overall.summary"), true); + summarySheet.addEmptyRow(); - ExcelRow sessionTitleRow = summarySheet.initRow(); - sessionTitleRow.addCell(sessionDTO.getSessionName(), true); + overallSummaryRow = summarySheet.initRow(); + overallSummaryRow.addCell(getMessage("label.number.learners"), true); + overallSummaryRow.addCell(overallDTO.getCount()); - List userDtos = new ArrayList<>(); - // in case of UseSelectLeaderToolOuput - display only one user - if (assessment.isUseSelectLeaderToolOuput()) { + overallSummaryRow = summarySheet.initRow(); + overallSummaryRow.addCell(getMessage("label.lowest.mark"), true); + overallSummaryRow.addCell(overallDTO.getMin() == null ? 0 : overallDTO.getMin()); - AssessmentSession session = getSessionBySessionId(sessionId); - AssessmentUser groupLeader = session.getGroupLeader(); + overallSummaryRow = summarySheet.initRow(); + overallSummaryRow.addCell(getMessage("label.highest.mark"), true); + overallSummaryRow.addCell(overallDTO.getMax() == null ? 0 : overallDTO.getMax()); - if (groupLeader != null) { + overallSummaryRow = summarySheet.initRow(); + overallSummaryRow.addCell(getMessage("label.average.mark") + ":", true); + overallSummaryRow.addCell(overallDTO.getAverage() == null ? 0 : overallDTO.getAverage()); - float assessmentResult = getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); + overallSummaryRow = summarySheet.initRow(); + overallSummaryRow.addCell(getMessage("label.median.mark"), true); + overallSummaryRow.addCell(overallDTO.getMedian() == null ? 0 : overallDTO.getMedian()); - AssessmentUserDTO userDto = new AssessmentUserDTO(); - userDto.setFirstName(groupLeader.getFirstName()); - userDto.setLastName(groupLeader.getLastName()); - userDto.setGrade(assessmentResult); - userDtos.add(userDto); - } + overallSummaryRow = summarySheet.initRow(); + overallSummaryRow.addCell(getMessage("label.modes.mark"), true); + overallSummaryRow.addCell(overallDTO.getModesString()); + summarySheet.addEmptyRow(); + summarySheet.addEmptyRow(); - } else { - int countSessionUsers = getCountUsersBySession(sessionId, null); + List sessionDtos = getSessionDtos(toolContentId, true); + for (GradeStatsDTO sessionDTO : sessionDtos) { + Long sessionId = sessionDTO.getSessionId(); - // Get the user list from the db - userDtos = getPagedUsersBySession(sessionId, 0, countSessionUsers, "userName", "ASC", ""); - } + summarySheet.addEmptyRow(); - float minGrade = -9999999; - float maxGrade = 0; - for (AssessmentUserDTO userDto : userDtos) { - float grade = userDto.getGrade(); - if (grade < minGrade || minGrade == -9999999) { - minGrade = grade; - } - if (grade > maxGrade) { - maxGrade = grade; - } + ExcelRow sessionTitleRow = summarySheet.initRow(); + sessionTitleRow.addCell(sessionDTO.getSessionName(), true); + + List userDtos = new ArrayList<>(); + // in case of UseSelectLeaderToolOuput - display only one user + if (assessment.isUseSelectLeaderToolOuput()) { + + AssessmentSession session = getSessionBySessionId(sessionId); + AssessmentUser groupLeader = session.getGroupLeader(); + + if (groupLeader != null) { + + Float assessmentResult = getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); + + AssessmentUserDTO userDto = new AssessmentUserDTO(); + userDto.setLogin(groupLeader.getLoginName()); + userDto.setFirstName(groupLeader.getFirstName()); + userDto.setLastName(groupLeader.getLastName()); + userDto.setGrade(assessmentResult == null ? 0 : assessmentResult); + userDto.setResultSubmitted(assessmentResult != null); + userDtos.add(userDto); } - if (minGrade == -9999999) { - minGrade = 0; - } + summarySheet.addEmptyRow(); + ExcelRow minMaxRow = summarySheet.initRow(); + minMaxRow.addCell(getMessage("label.number.learners"), true); + minMaxRow.addCell(userDtos.size()); + + } else { + int countSessionUsers = getCountUsersBySession(sessionId, null); + + // Get the user list from the db + userDtos = getPagedUsersBySession(sessionId, 0, countSessionUsers, "userName", "ASC", ""); + + float minGrade = sessionDTO.getMin() == null ? 0 : sessionDTO.getMin(); + float maxGrade = sessionDTO.getMax() == null ? 0 : sessionDTO.getMax(); + LinkedHashMap markSummary = getMarksSummaryForSession(userDtos, minGrade, maxGrade, 10); + // work out total marks so we can do percentages. need as float for the correct divisions int totalNumEntries = 0; for (Map.Entry entry : markSummary.entrySet()) { @@ -1720,11 +1748,23 @@ minMaxRow = summarySheet.initRow(); minMaxRow.addCell(getMessage("label.lowest.mark"), true); - minMaxRow.addCell((double) minGrade); + minMaxRow.addCell(minGrade); minMaxRow = summarySheet.initRow(); minMaxRow.addCell(getMessage("label.highest.mark"), true); - minMaxRow.addCell((double) maxGrade); + minMaxRow.addCell(maxGrade); + + minMaxRow = summarySheet.initRow(); + minMaxRow.addCell(getMessage("label.average.mark") + ":", true); + minMaxRow.addCell(sessionDTO.getAverage() == null ? 0 : sessionDTO.getAverage()); + + minMaxRow = summarySheet.initRow(); + minMaxRow.addCell(getMessage("label.median.mark"), true); + minMaxRow.addCell(sessionDTO.getMedian() == null ? 0 : sessionDTO.getMedian()); + + minMaxRow = summarySheet.initRow(); + minMaxRow.addCell(getMessage("label.modes.mark"), true); + minMaxRow.addCell(sessionDTO.getModesString()); summarySheet.addEmptyRow(); ExcelRow binSummaryRow = summarySheet.initRow(); @@ -1739,24 +1779,24 @@ binSummaryRow.addCell(entry.getValue()); binSummaryRow.addCell(Math.round(entry.getValue() / totalNumEntriesAsFloat * 100)); } - summarySheet.addEmptyRow(); - summarySheet.addEmptyRow(); + } - ExcelRow summaryTitleRow = summarySheet.initRow(); - summaryTitleRow.addCell(getMessage("label.export.user.id"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryTitleRow.addCell(getMessage("label.monitoring.summary.user.name"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryTitleRow.addCell(getMessage("label.monitoring.summary.total"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summarySheet.addEmptyRow(); + summarySheet.addEmptyRow(); - for (AssessmentUserDTO userDto : userDtos) { - ExcelRow userResultRow = summarySheet.initRow(); - userResultRow.addCell(userDto.getLogin()); - userResultRow.addCell(userDto.getFirstName() + " " + userDto.getLastName()); - userResultRow.addCell(userDto.getGrade()); - } - summarySheet.addEmptyRow(); + ExcelRow summaryTitleRow = summarySheet.initRow(); + summaryTitleRow.addCell(getMessage("label.export.user.id"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summaryTitleRow.addCell(getMessage("label.monitoring.summary.user.name"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summaryTitleRow.addCell(getMessage("label.monitoring.summary.total"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); + for (AssessmentUserDTO userDto : userDtos) { + ExcelRow userResultRow = summarySheet.initRow(); + userResultRow.addCell(userDto.getLogin()); + userResultRow.addCell(userDto.getFirstName() + " " + userDto.getLastName()); + userResultRow.addCell(userDto.getGrade()); } + summarySheet.addEmptyRow(); } // ------------------------------------------------------------------ Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r7b189d6353baf83e0218dd064ef543d53b555a99 -rf299a43b38f1c06f1c9a0810b3ae6205b10e0269 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 7b189d6353baf83e0218dd064ef543d53b555a99) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision f299a43b38f1c06f1c9a0810b3ae6205b10e0269) @@ -450,12 +450,8 @@ /** * Prepares data for Summary excel export - * - * @param assessment - * @param sessionDtos - * @return */ - List exportSummary(Assessment assessment, List sessionDtos); + List exportSummary(Assessment assessment, long toolContentId); /** * Gets the basic statistics for the grades for the Leaders when an Assessment is done using Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java =================================================================== diff -u -rcf0eebcaab1317079c30cb1d4e056ba9dd4ec048 -rf299a43b38f1c06f1c9a0810b3ae6205b10e0269 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision cf0eebcaab1317079c30cb1d4e056ba9dd4ec048) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision f299a43b38f1c06f1c9a0810b3ae6205b10e0269) @@ -448,14 +448,14 @@ if (groupLeader != null) { - float assessmentResult = service.getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); + Float assessmentResult = service.getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); String portraitId = service.getPortraitId(groupLeader.getUserId()); AssessmentUserDTO userDto = new AssessmentUserDTO(); userDto.setUserId(groupLeader.getUserId()); userDto.setFirstName(groupLeader.getFirstName()); userDto.setLastName(groupLeader.getLastName()); - userDto.setGrade(assessmentResult); + userDto.setGrade(assessmentResult == null ? 0 : assessmentResult); userDto.setPortraitId(portraitId); userDtos.add(userDto); countSessionUsers = 1; @@ -783,28 +783,23 @@ public void exportSummary(HttpServletRequest request, HttpServletResponse response) throws IOException { String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); String fileName = null; - Long contentId = null; - List sessionDtos; if (sessionMapID != null) { SessionMap sessionMap = (SessionMap) request.getSession() .getAttribute(sessionMapID); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); contentId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_CONTENT_ID); - sessionDtos = (List) sessionMap.get("sessionDtos"); - } else { contentId = WebUtil.readLongParam(request, "toolContentID"); fileName = WebUtil.readStrParam(request, "fileName"); - sessionDtos = service.getSessionDtos(contentId, true); } Assessment assessment = service.getAssessmentByContentId(contentId); if (assessment == null) { return; } - List sheets = service.exportSummary(assessment, sessionDtos); + List sheets = service.exportSummary(assessment, contentId); // Setting the filename if it wasn't passed in the request if (fileName == null) {