Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -rf40ffa09645d09c905a57a7d5b005be7d8554fbf -rc908ebed08eb519235a7b4e2866e58b630962efa --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision f40ffa09645d09c905a57a7d5b005be7d8554fbf) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision c908ebed08eb519235a7b4e2866e58b630962efa) @@ -740,10 +740,8 @@ //collect users from all lessons Set allLearners = new LinkedHashSet(); - Map> lessonUsers = new HashMap>(); for (Lesson lesson : lessons) { Set dbLessonUsers = lesson.getAllLearners(); - lessonUsers.put(lesson.getLessonId(), dbLessonUsers); allLearners.addAll(dbLessonUsers); } @@ -778,7 +776,7 @@ for (User learner : allLearners) { // Fetching the user data - List userRows = getGBUserRowsForUser(learner, lessons, lessonUsers); + List userRows = getGBUserRowsForUser(learner, lessons, organisationId); i = 0; ExcelCell[] userDataRow = new ExcelCell[numberOfCellsInARow]; userDataRow[i++] = new ExcelCell(learner.getLastName(), false); @@ -831,21 +829,44 @@ * @param lessons * @return */ - private List getGBUserRowsForUser(User learner, List lessons, Map> lessonUsers) { + private List getGBUserRowsForUser(User learner, List lessons, Integer organisationId) { List gradebookUserDTOs = new LinkedList(); + Map lessonLearnerProgressMap = getLessonLearnerProgressMap(learner, organisationId); + Map gradebookUserLessonMap = getGradebookUserLessonMap(learner, organisationId); + for (Lesson lesson : lessons) { - GBUserGridRowDTO gradebookUserDTO; + GBUserGridRowDTO gradebookUserDTO = new GBUserGridRowDTO(); + gradebookUserDTO.setId(learner.getUserId().toString()); + gradebookUserDTO.setRowName(learner.getLastName() + " " + learner.getFirstName()); + gradebookUserDTO.setFirstName(learner.getFirstName()); + gradebookUserDTO.setLastName(learner.getLastName()); //check if learner is participating in this lesson - if (lessonUsers.get(lesson.getLessonId()).contains(learner)) { - gradebookUserDTO = populateGradebookUserDTO(learner, lesson); + if (lesson.getAllLearners().contains(learner)) { + // Setting the status and time taken for the user's lesson + LearnerProgress learnerProgress = lessonLearnerProgressMap.get(lesson.getLessonId()); + gradebookUserDTO.setStatus(getLessonStatusStr(learnerProgress)); + + // set current activity if available + if ((learnerProgress != null) && (learnerProgress.getCurrentActivity() != null)) { + gradebookUserDTO.setCurrentActivity(learnerProgress.getCurrentActivity().getTitle()); + } + + // calculate time taken + if (learnerProgress != null) { + if (learnerProgress.getStartDate() != null && learnerProgress.getFinishDate() != null) { + gradebookUserDTO.setTimeTaken(learnerProgress.getFinishDate().getTime() + - learnerProgress.getStartDate().getTime()); + } + } + + GradebookUserLesson gradebookUserLesson = gradebookUserLessonMap.get(lesson.getLessonId()); + if (gradebookUserLesson != null) { + gradebookUserDTO.setMark(gradebookUserLesson.getMark()); + gradebookUserDTO.setFeedback(gradebookUserLesson.getFeedback()); + } } else { - gradebookUserDTO = new GBUserGridRowDTO(); - gradebookUserDTO.setId(learner.getUserId().toString()); - gradebookUserDTO.setRowName(learner.getLastName() + " " + learner.getFirstName()); - gradebookUserDTO.setFirstName(learner.getFirstName()); - gradebookUserDTO.setLastName(learner.getLastName()); gradebookUserDTO.setStatus("n/a"); } @@ -1264,6 +1285,45 @@ } } + @SuppressWarnings("unchecked") + private Map getLessonLearnerProgressMap(User user, Integer organisationId) { + + if (user != null) { + String query = "select lp from LearnerProgress lp where lp.user.userId=? and (lp.lesson.organisation.organisationId=? or lp.lesson.organisation.parentOrganisation.organisationId=?)"; + List learnerProgressList = baseDAO.find(query, new Object[] { user.getUserId(), + organisationId, organisationId }); + + if (learnerProgressList != null && learnerProgressList.size() > 0) { + Map map = new HashMap(); + for (LearnerProgress learnerProgress : learnerProgressList) { + map.put(learnerProgress.getLesson().getLessonId(), learnerProgress); + } + return map; + } + } + + return new HashMap(); + } + + @SuppressWarnings("unchecked") + private Map getGradebookUserLessonMap(User user, Integer organisationId) { + + if (user != null) { + String query = "select ul from GradebookUserLesson ul where ul.learner.userId=? and (ul.lesson.organisation.organisationId=? or ul.lesson.organisation.parentOrganisation.organisationId=?)"; + List gradebookUserLessons = baseDAO.find(query, new Object[] { user.getUserId(), organisationId, organisationId }); + + if (gradebookUserLessons != null && gradebookUserLessons.size() > 0) { + Map map = new HashMap(); + for (GradebookUserLesson gradebookUserLesson : gradebookUserLessons) { + map.put(gradebookUserLesson.getLesson().getLessonId(), gradebookUserLesson); + } + return map; + } + } + + return new HashMap(); + } + public String getMessage(String key) { return messageService.getMessage(key); } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java =================================================================== diff -u -rfb9b47215dd9680e3bc2cc45fecb0458a51b88f8 -rc908ebed08eb519235a7b4e2866e58b630962efa --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java (.../GradebookMonitoringAction.java) (revision fb9b47215dd9680e3bc2cc45fecb0458a51b88f8) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java (.../GradebookMonitoringAction.java) (revision c908ebed08eb519235a7b4e2866e58b630962efa) @@ -307,7 +307,7 @@ Lesson lesson = lessonService.getLesson(lessonID); if (lesson != null) { - String fileName = lesson.getLessonName().replaceAll(" ", "_") + ".xls"; + String fileName = lesson.getLessonName().replaceAll(" ", "_") + ".xlsx"; response.setContentType("application/x-download"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName);