Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -rf45a5d1838441e0a57b623a6765d88736cf9f323 -r5399cd4e0375727fe77dc38498848d465889e715 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision f45a5d1838441e0a57b623a6765d88736cf9f323) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 5399cd4e0375727fe77dc38498848d465889e715) @@ -67,6 +67,7 @@ import org.lamsfoundation.lams.learningdesign.FloatingActivity; import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.Grouping; +import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.OptionsActivity; import org.lamsfoundation.lams.learningdesign.ParallelActivity; @@ -141,7 +142,6 @@ private static String RELEASE_MARKS_EMAIL_TEMPLATE_CONTENT = null; private static final DateFormat RELEASE_MARKS_EMAIL_DATE_FORMAT = new SimpleDateFormat(DateUtil.PRETTY_FORMAT); - private static final String RELEASE_MARKS_EMAIL_PAGE_TITLE_PLACEHOLDER = "[PAGE_TITLE_PLACEHOLDER]"; private static final String RELEASE_MARKS_EMAIL_TOP_HEADER_PLACEHOLDER = "[TOP_HEADER_PLACEHOLDER]"; private static final String RELEASE_MARKS_EMAIL_CONTENT_START_PLACEHOLDER = "[CONTENT_START_PLACEHOLDER]"; @@ -158,6 +158,11 @@ private static final String RELEASE_MARKS_EMAIL_ACTIVITY_PROGRESS_ICON_PLACEHOLDER = "[ACTIVITY_PROGRESS_ICON_PLACEHOLDER]"; private static final String RELEASE_MARKS_EMAIL_ACTIVITY_GRADE_PLACEHOLDER = "[ACTIVITY_GRADE_PLACEHOLDER]"; + // **LKC** added the following 3 constants + public static final String IRA_TOOL_SIGNATURE = "lamc11"; + public static final String TRA_TOOL_SIGNATURE = "lascrt11"; + public static final String AE_TOOL_SIGNATURE = "laasse10"; + // Services private ILamsCoreToolService toolService; private IGradebookDAO gradebookDAO; @@ -366,10 +371,12 @@ Set groups = grouping.getGroups(); if (groups != null) { + // *LKC* modified the following paragraph + List groupGradebookActivityDTOs = new ArrayList<>(); for (Group group : groups) { GBActivityGridRowDTO activityDTO = getGradebookActivityDTO(activity, lesson, group.getGroupName(), group.getGroupId(), escapeTitles); - gradebookActivityDTOs.add(activityDTO); + groupGradebookActivityDTOs.add(activityDTO); } } @@ -1171,7 +1178,6 @@ } else if (activityDTO.getStatus().contains("cog")) { icon = "⚙"; } - placeholderStart = activityRowContent.indexOf(RELEASE_MARKS_EMAIL_ACTIVITY_PROGRESS_ICON_PLACEHOLDER); placeholderEnd = placeholderStart + RELEASE_MARKS_EMAIL_ACTIVITY_PROGRESS_ICON_PLACEHOLDER.length(); activityRowContent.replace(placeholderStart, placeholderEnd, icon); @@ -1193,7 +1199,6 @@ return content.toString(); } - @SuppressWarnings("unchecked") @Override public void sendReleaseMarksEmails(long lessonId, Collection recipientIDs, IEventNotificationService eventNotificationService) { @@ -1901,6 +1906,7 @@ return sheets; } + // *LKC* has customized this method @Override public List exportSelectedLessonsGradebook(Integer userId, Integer organisationId, String[] lessonIds, boolean simplified) { @@ -1981,16 +1987,13 @@ String lessonName = isWeightedLessonMap.get(lesson.getLessonId()) ? new StringBuilder(lesson.getLessonName()).append(" ").append(weightedMessage).toString() : lesson.getLessonName(); - - List lessonActivities = lessonActivitiesMap.get(lesson.getLessonId()); - int numberActivities = lessonActivities.size(); - lessonsNames.addEmptyCells(numberActivities); lessonsNames.addCell(lessonName, true); - lessonsNames.addEmptyCells(9 + (numberActivities * 2)); + lessonsNames.addEmptyCells(8); } - - lessonsNames.addCell("", ExcelCell.BORDER_STYLE_LEFT_THIN); - lessonsNames.addCell(getMessage("label.overall.totals"), true); + lessonsNames.addCell("Totals", true); + lessonsNames.addEmptyCells(5); + lessonsNames.addCell(getMessage("label.overall.totals"), true, ExcelCell.BORDER_STYLE_LEFT_THIN); + lessonsNames.addCell(""); lessonsNames.addCell("", ExcelCell.BORDER_STYLE_RIGHT_THICK); } @@ -2013,35 +2016,34 @@ headerRow.addCell("%", false, ExcelCell.BORDER_STYLE_RIGHT_THICK).setAlignment(ExcelCell.ALIGN_CENTER); } else { //create Selected Lessons Header Full - for (Lesson lesson : selectedLessons) { - boolean isWeighted = isWeightedLessonMap.get(lesson.getLessonId()); - headerRow.addCell(getMessage("gradebook.export.last.name")); - headerRow.addCell(getMessage("gradebook.export.first.name")); - headerRow.addCell(getMessage("gradebook.export.login")); - headerRow.addCell(getMessage("label.group")); - headerRow.addCell(getMessage("gradebook.columntitle.startDate")); - headerRow.addCell(getMessage("gradebook.columntitle.completeDate")); + headerRow.addCell(getMessage("gradebook.export.last.name")); + headerRow.addCell(getMessage("gradebook.export.first.name")); + headerRow.addCell(getMessage("gradebook.export.login")); + headerRow.addCell(getMessage("label.group")); - List activities = lessonActivitiesMap.get(lesson.getLessonId()); - for (Activity activity : activities) { - String activityName = activity.getTitle(); - if (isWeighted && activity.isToolActivity()) { - ActivityEvaluation eval = ((ToolActivity) activity).getEvaluation(); - activityName += " " + getMessage("gradebook.export.weight", - new Object[] { eval == null || eval.getWeight() == null ? 0 : eval.getWeight() }); - } + for (Lesson lesson : selectedLessons) { + headerRow.addCell("IRA", true); + headerRow.addCell("Max"); - headerRow.addCell(activityName, true); - headerRow.addCell(getMessage("label.max.possible")); - } + headerRow.addCell("tRA", true); + headerRow.addCell("Max"); - headerRow.addCell(getMessage("label.total.actuals"), true, ExcelCell.BORDER_STYLE_LEFT_THIN); + headerRow.addCell("AE", true); + headerRow.addCell("Max"); + + headerRow.addCell("Scored", true, ExcelCell.BORDER_STYLE_LEFT_THIN); headerRow.addCell(getMessage("label.max.mark")); headerRow.addCell("%", ExcelCell.BORDER_STYLE_RIGHT_THICK); } - headerRow.addEmptyCells(2); + headerRow.addCell("IRA", true); + headerRow.addCell("Max", true); + headerRow.addCell("tRA", true); + headerRow.addCell("Max", true); + headerRow.addCell("AE", true); + headerRow.addCell("Max", true); + headerRow.addCell(getMessage("label.actuals"), true, ExcelCell.BORDER_STYLE_LEFT_THIN); headerRow.addCell(getMessage("label.max"), true); headerRow.addCell("%", true, ExcelCell.BORDER_STYLE_RIGHT_THICK); @@ -2050,77 +2052,82 @@ // Actual data rows---------------------- for (User learner : allLearners) { + Double overallIra = 0d; + Double overallIraMax = 0d; + Double overallTra = 0d; + Double overallTraMax = 0d; + Double overallAe = 0d; + Double overallAeMax = 0d; + Double overallTotal = 0d; Double overallMaxMark = 0d; ExcelRow userRow = sheet.initRow(); - if (simplified) { - addUsernameCells(learner, userRow); - } + // *LKC* Modified the next paragraph - for (Lesson lesson : selectedLessons) { + addUsernameCells(learner, userRow); - Double lessonTotal = 0d; - Double lessonMaxMark = 0d; - List activities = lessonActivitiesMap.get(lesson.getLessonId()); - Boolean weighted = isWeightedLessonMap.get(lesson.getLessonId()); + if (!simplified && !selectedLessons.isEmpty()) { + Lesson lesson = selectedLessons.iterator().next(); - if (!simplified) { - addUsernameCells(learner, userRow); + String groupName = ""; + Set lessonAllActivities = new TreeSet<>(); + Activity firstActivity = activityDAO + .getActivityByActivityId(lesson.getLearningDesign().getFirstActivity().getActivityId()); + lessonAllActivities.add(firstActivity); + lessonAllActivities.addAll(lesson.getLearningDesign().getActivities()); + for (Activity activity : lessonAllActivities) { + // getUserGroupName - // check if learner is participating in this lesson - if (!lesson.getAllLearners().contains(learner)) { - userRow.addEmptyCells(3 + (activities.size() * 2)); - userRow.addCell("", ExcelCell.BORDER_STYLE_LEFT_THIN); - userRow.addCell(""); - userRow.addCell("", ExcelCell.BORDER_STYLE_RIGHT_THICK); - continue; - } - - // group name - String groupName = ""; - for (Group group : lesson.getLessonClass().getGroups()) { - if (group.hasLearner(learner)) { + if (activity.isGroupingActivity()) { + GroupingActivity groupingActivity = (GroupingActivity) activity; + if (groupingActivity.getCreateGrouping() != null) { + Group group = groupingActivity.getCreateGrouping().getGroupBy(learner); groupName = group.getGroupName(); break; } } - userRow.addCell(groupName); + } + userRow.addCell(groupName); + } - //start and complete dates - LearnerProgress learnerProgress = null; - for (LearnerProgress learnerProgressIter : learnerProgresses) { - if (learnerProgressIter.getUser().getUserId().equals(learner.getUserId()) - && learnerProgressIter.getLesson().getLessonId().equals(lesson.getLessonId())) { - learnerProgress = learnerProgressIter; - } - } - String startDate = (learnerProgress == null || learnerProgress.getStartDate() == null) ? "" - : FileUtil.EXPORT_TO_SPREADSHEET_TITLE_DATE_FORMAT - .format(learnerProgress.getStartDate()); - userRow.addCell(startDate); - String finishDate = (learnerProgress == null || learnerProgress.getFinishDate() == null) ? "" - : FileUtil.EXPORT_TO_SPREADSHEET_TITLE_DATE_FORMAT - .format(learnerProgress.getFinishDate()); - userRow.addCell(finishDate); + for (Lesson lesson : selectedLessons) { + + List activities = lessonActivitiesMap.get(lesson.getLessonId()); + Boolean weighted = isWeightedLessonMap.get(lesson.getLessonId()); + + // check if learner is participating in this lesson + if (!lesson.getAllLearners().contains(learner)) { + userRow.addEmptyCells(6); + userRow.addCell("", ExcelCell.BORDER_STYLE_LEFT_THIN); + userRow.addCell(""); + userRow.addCell("", ExcelCell.BORDER_STYLE_RIGHT_THICK); + continue; } + // marks and total marks inside one lesson + Double iraMark = 0d; + Long iraTotalMark = 0l; + Double traMark = 0d; + Long traTotalMark = 0l; + Double aeMark = 0d; + Long aeTotalMark = 0l; for (ToolActivity activity : activities) { + + // marks Map userToGradebookUserActivityMap = activityTouserToGradebookUserActivityMap .get(activity.getActivityId()); GradebookUserActivity gradebookUserActivity = userToGradebookUserActivityMap .get(learner.getUserId()); + // total possible mark Long rawActivityTotalMarks = 0l; if (activityToTotalMarkMap.get(activity.getActivityId()) != null) { rawActivityTotalMarks = activityToTotalMarkMap.get(activity.getActivityId()); } - Integer weight = weighted ? 0 : null; - - if (activity.getEvaluation() != null && activity.getEvaluation().getWeight() != null) { - weight = activity.getEvaluation().getWeight(); - } - + Integer weight = weighted && activity.getEvaluation() != null + && activity.getEvaluation().getWeight() != null ? activity.getEvaluation().getWeight() + : null; Long weightedActivityTotalMarks = weight != null ? weight : rawActivityTotalMarks; Double mark = 0d; @@ -2129,42 +2136,58 @@ if (weight != null) { mark = doWeightedMarkCalc(mark, activity, weight, rawActivityTotalMarks); } - if (!simplified) { - userRow.addCell(mark); - } - } else { - if (!simplified) { - userRow.addCell(""); - } } - if (!simplified) { - if (weightedActivityTotalMarks > 0) { - userRow.addCell(weightedActivityTotalMarks); - } else { - userRow.addCell(""); - } + if (GradebookService.IRA_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + iraMark += mark; + iraTotalMark += weightedActivityTotalMarks; } - lessonTotal += mark; - overallTotal += mark; - lessonMaxMark += weightedActivityTotalMarks; - overallMaxMark += weightedActivityTotalMarks; + if (GradebookService.TRA_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + traMark += mark; + traTotalMark += weightedActivityTotalMarks; + } + + if (GradebookService.AE_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + aeMark += mark; + aeTotalMark += weightedActivityTotalMarks; + } } + // lesson's total, max mark and percentage + Double lessonTotal = iraMark + traMark + aeMark; + Double lessonMaxMark = (double) (iraTotalMark + traTotalMark + aeTotalMark); + if (simplified) { if (weighted) { - userRow.addPercentageCell(lessonTotal / 100.0, false, ExcelCell.BORDER_STYLE_LEFT_THIN); + userRow.addPercentageCell(lessonTotal / 100.0, true, ExcelCell.BORDER_STYLE_LEFT_THIN); } else { userRow.addCell(lessonTotal, ExcelCell.BORDER_STYLE_LEFT_THIN); } } else { + userRow.addCell(iraMark); + userRow.addCell(iraTotalMark); + userRow.addCell(traMark); + userRow.addCell(traTotalMark); + userRow.addCell(aeMark); + userRow.addCell(aeTotalMark); + userRow.addCell(lessonTotal, ExcelCell.BORDER_STYLE_LEFT_THIN); userRow.addCell(lessonMaxMark); Double percentage = (lessonMaxMark != 0) ? lessonTotal / lessonMaxMark : 0d; userRow.addPercentageCell(percentage, false, ExcelCell.BORDER_STYLE_RIGHT_THICK); } + + overallIra += iraMark; + overallIraMax += iraTotalMark; + overallTra += traMark; + overallTraMax += traTotalMark; + overallAe += aeMark; + overallAeMax += aeTotalMark; + + overallTotal += lessonTotal; + overallMaxMark += lessonMaxMark; } Double percentage = (overallMaxMark != 0) ? overallTotal / overallMaxMark : 0d; @@ -2173,7 +2196,13 @@ userRow.addCell(overallMaxMark); userRow.addPercentageCell(percentage, false, ExcelCell.BORDER_STYLE_RIGHT_THICK); } else { - userRow.addEmptyCells(2); + userRow.addCell(overallIra); + userRow.addCell(overallIraMax); + userRow.addCell(overallTra); + userRow.addCell(overallTraMax); + userRow.addCell(overallAe); + userRow.addCell(overallAeMax); + userRow.addCell(overallTotal, ExcelCell.BORDER_STYLE_LEFT_THIN); userRow.addCell(overallMaxMark); userRow.addPercentageCell(percentage, true, ExcelCell.BORDER_STYLE_RIGHT_THICK); @@ -2183,13 +2212,360 @@ return sheets; } + // *LKC* added this method + @Override + public List exportSelectedLessonsSeparateSheetGradebook(Integer userId, Integer organisationId, + String[] lessonIds) { + List sheets = new LinkedList<>(); + ExcelSheet sheet = new ExcelSheet(getMessage("gradebook.exportcourse.course.summary")); + sheets.add(sheet); + + Organisation organisation = (Organisation) userService.findById(Organisation.class, organisationId); + + User user = (User) userService.findById(User.class, userId); + Set selectedLessons = new TreeSet<>(new LessonComparator()); + Map isWeightedLessonMap = new HashMap<>(); + + // Don't include lesson in list if the user doesnt have permission + Integer organisationToCheckPermission = (organisation.getOrganisationType().getOrganisationTypeId() + .equals(OrganisationType.COURSE_TYPE)) ? organisation.getOrganisationId() + : organisation.getParentOrganisation().getOrganisationId(); + boolean isGroupManager = userService.isUserInRole(userId, organisationToCheckPermission, Role.GROUP_MANAGER); + + // collect users from all lessons + Set allLearners = new LinkedHashSet<>(); + Map> lessonActivitiesMap = new HashMap<>(); + List allActivities = new ArrayList<>(); + + for (String lessonIdStr : lessonIds) { + Long lessonId = Long.parseLong(lessonIdStr); + Lesson lesson = lessonService.getLesson(lessonId); + + if (!(lesson.getLessonClass().isStaffMember(user) || isGroupManager)) { + continue; + } + + selectedLessons.add(lesson); + + allLearners.addAll(lesson.getAllLearners()); + + List lessonActivities = getLessonActivitiesForLesson(lesson); + Set lessonToolActivities = new TreeSet<>(); + for (Activity activity : lessonActivities) { + if (activity.isToolActivity()) { + lessonToolActivities.add((ToolActivity) activity); + } + } + lessonActivitiesMap.put(lesson.getLessonId(), lessonToolActivities); + allActivities.addAll(lessonToolActivities); + + boolean isWeightedMarks = toolService.isWeightedMarks(lesson.getLearningDesign()); + isWeightedLessonMap.put(lesson.getLessonId(), isWeightedMarks); + + } + + if (!selectedLessons.isEmpty()) { + + Map activityToTotalMarkMap = getActivityToTotalMarkMap(allActivities); + + Map> activityTouserToGradebookUserActivityMap = new HashMap<>(); + for (ToolActivity activity : allActivities) { + Map userToGradebookUserActivityMap = getUserToGradebookUserActivityMap( + activity, null); + activityTouserToGradebookUserActivityMap.put(activity.getActivityId(), userToGradebookUserActivityMap); + } + + // courseSummaryPage---------------------- + ExcelRow firstLevelHeader = sheet.initRow(); + firstLevelHeader.addEmptyCell(); + firstLevelHeader.addCell("Totals", true); + firstLevelHeader.addEmptyCells(7); + firstLevelHeader.addCell("", ExcelCell.BORDER_STYLE_LEFT_THIN); + firstLevelHeader.addCell(getMessage("label.overall.totals"), true); + firstLevelHeader.addCell("", ExcelCell.BORDER_STYLE_RIGHT_THICK); + + ExcelRow secondLevelHeader = sheet.initRow(); + secondLevelHeader.addCell(getMessage("gradebook.export.last.name")); + secondLevelHeader.addCell(getMessage("gradebook.export.first.name")); + secondLevelHeader.addCell("User name"); + secondLevelHeader.addCell("IRA", true); + secondLevelHeader.addCell("Max", true); + secondLevelHeader.addCell("tRA", true); + secondLevelHeader.addCell("Max", true); + secondLevelHeader.addCell("AE", true); + secondLevelHeader.addCell("Max", true); + secondLevelHeader.addCell(getMessage("label.actuals"), true, ExcelCell.BORDER_STYLE_LEFT_THIN); + secondLevelHeader.addCell(getMessage("label.max"), true); + secondLevelHeader.addCell("%", true, ExcelCell.BORDER_STYLE_RIGHT_THICK); + + // Actual data rows---------------------- + for (User learner : allLearners) { + + Double overallIra = 0d; + Double overallIraMax = 0d; + Double overallTra = 0d; + Double overallTraMax = 0d; + Double overallAe = 0d; + Double overallAeMax = 0d; + Double overallTotal = 0d; + Double overallMaxMark = 0d; + ExcelRow userRow = sheet.initRow(); + + String lastName = (learner.getLastName() == null) ? learner.getLogin().toUpperCase() + : learner.getLastName().toUpperCase(); + userRow.addCell(lastName); + String firstName = (learner.getFirstName() == null) ? "" : learner.getFirstName().toUpperCase(); + userRow.addCell(firstName); + String login = learner.getLogin(); + login = (login.startsWith("ntumed_")) ? login.substring(7) : login; + userRow.addCell(login); + + for (Lesson lesson : selectedLessons) { + + Boolean weighted = isWeightedLessonMap.get(lesson.getLessonId()); + + // check if learner is participating in this lesson + if (!lesson.getAllLearners().contains(learner)) { + continue; + } + + // marks and total marks inside one lesson + double iraMark = 0d; + long iraTotalMark = 0l; + double traMark = 0d; + long traTotalMark = 0l; + double aeMark = 0d; + long aeTotalMark = 0l; + Set activities = lessonActivitiesMap.get(lesson.getLessonId()); + for (ToolActivity activity : activities) { + + // marks + Map userToGradebookUserActivityMap = activityTouserToGradebookUserActivityMap + .get(activity.getActivityId()); + GradebookUserActivity gradebookUserActivity = userToGradebookUserActivityMap + .get(learner.getUserId()); + + // total possible mark + Long rawActivityTotalMarks = 0l; + if (activityToTotalMarkMap.get(activity.getActivityId()) != null) { + rawActivityTotalMarks = activityToTotalMarkMap.get(activity.getActivityId()); + } + Integer weight = weighted && activity.getEvaluation() != null + && activity.getEvaluation().getWeight() != null ? activity.getEvaluation().getWeight() + : null; + Long weightedActivityTotalMarks = weight != null ? weight : rawActivityTotalMarks; + + Double mark = 0d; + if (gradebookUserActivity != null) { + mark = gradebookUserActivity.getMark(); + if (weight != null) { + mark = doWeightedMarkCalc(mark, activity, weight, rawActivityTotalMarks); + } + } + + if (GradebookService.IRA_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + iraMark += mark; + iraTotalMark += weightedActivityTotalMarks; + } + + if (GradebookService.TRA_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + traMark += mark; + traTotalMark += weightedActivityTotalMarks; + } + + if (GradebookService.AE_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + aeMark += mark; + aeTotalMark += weightedActivityTotalMarks; + } + } + + // lesson's total, max mark and percentage + double lessonTotal = iraMark + traMark + aeMark; + double lessonMaxMark = (double) (iraTotalMark + traTotalMark + aeTotalMark); + + overallIra += iraMark; + overallIraMax += iraTotalMark; + overallTra += traMark; + overallTraMax += traTotalMark; + overallAe += aeMark; + overallAeMax += aeTotalMark; + + overallTotal += lessonTotal; + overallMaxMark += lessonMaxMark; + } + + userRow.addCell(overallIra); + userRow.addCell(overallIraMax); + userRow.addCell(overallTra); + userRow.addCell(overallTraMax); + userRow.addCell(overallAe); + userRow.addCell(overallAeMax); + + userRow.addCell(overallTotal, ExcelCell.BORDER_STYLE_LEFT_THIN); + userRow.addCell(overallMaxMark); + Double percentage = (overallMaxMark != 0) ? overallTotal / overallMaxMark : 0d; + userRow.addPercentageCell(percentage, true, ExcelCell.BORDER_STYLE_RIGHT_THICK); + } + + // Actual lesson pages---------------------- + + Set lessonNamesInUse = new LinkedHashSet<>(); + for (Lesson lesson : selectedLessons) { + + //come up with unique sheet name + String sheetName = lesson.getLessonName(); + while (lessonNamesInUse.contains(sheetName)) { + sheetName += " "; + } + lessonNamesInUse.add(sheetName); + sheet = new ExcelSheet(sheetName); + sheets.add(sheet); + + Boolean weighted = isWeightedLessonMap.get(lesson.getLessonId()); + + sheet.addEmptyRow(); + + ExcelRow header = sheet.initRow(); + header.addCell(getMessage("gradebook.export.last.name")); + header.addCell(getMessage("gradebook.export.first.name")); + header.addCell("User name"); + header.addCell(getMessage("label.group")); + + header.addCell("IRA", true); + header.addCell("Max"); + + header.addCell("tRA", true); + header.addCell("Max"); + + header.addCell("AE", true); + header.addCell("Max"); + + header.addCell("Scored", true, ExcelCell.BORDER_STYLE_LEFT_THIN); + header.addCell(getMessage("label.max.mark")); + header.addCell("%", ExcelCell.BORDER_STYLE_RIGHT_THICK); + + for (User learner : allLearners) { + ExcelRow userRow = sheet.initRow(); + + Set activities = lessonActivitiesMap.get(lesson.getLessonId()); + + String lastName = (learner.getLastName() == null) ? learner.getLogin().toUpperCase() + : learner.getLastName().toUpperCase(); + userRow.addCell(lastName); + String firstName = (learner.getFirstName() == null) ? "" : learner.getFirstName().toUpperCase(); + userRow.addCell(firstName); + String login = learner.getLogin(); + login = (login.startsWith("ntumed_")) ? login.substring(7) : login; + userRow.addCell(login); + + // check if learner is participating in this lesson + if (!lesson.getAllLearners().contains(learner)) { + userRow.addEmptyCells(7); + userRow.addCell("", ExcelCell.BORDER_STYLE_LEFT_THIN); + userRow.addCell(""); + userRow.addCell("", ExcelCell.BORDER_STYLE_RIGHT_THICK); + continue; + } + + String groupName = ""; + Set lessonAllActivities = new TreeSet<>(); + Activity firstActivity = activityDAO + .getActivityByActivityId(lesson.getLearningDesign().getFirstActivity().getActivityId()); + lessonAllActivities.add(firstActivity); + lessonAllActivities.addAll(lesson.getLearningDesign().getActivities()); + for (Activity activity : lessonAllActivities) { + // getUserGroupName + + if (activity.isGroupingActivity()) { + GroupingActivity groupingActivity = (GroupingActivity) activity; + if (groupingActivity.getCreateGrouping() != null) { + Group group = groupingActivity.getCreateGrouping().getGroupBy(learner); + groupName = group.getGroupName(); + break; + } + } + } + userRow.addCell(groupName); + + // marks and total marks inside one lesson + Double iraMark = 0d; + Long iraTotalMark = 0l; + Double traMark = 0d; + Long traTotalMark = 0l; + Double aeMark = 0d; + Long aeTotalMark = 0l; + for (ToolActivity activity : activities) { + + // marks + Map userToGradebookUserActivityMap = activityTouserToGradebookUserActivityMap + .get(activity.getActivityId()); + GradebookUserActivity gradebookUserActivity = userToGradebookUserActivityMap + .get(learner.getUserId()); + + // total possible mark + Long rawActivityTotalMarks = 0l; + if (activityToTotalMarkMap.get(activity.getActivityId()) != null) { + rawActivityTotalMarks = activityToTotalMarkMap.get(activity.getActivityId()); + } + Integer weight = weighted && activity.getEvaluation() != null + && activity.getEvaluation().getWeight() != null ? activity.getEvaluation().getWeight() + : null; + Long weightedActivityTotalMarks = weight != null ? weight : rawActivityTotalMarks; + + if (gradebookUserActivity != null) { + Double mark = gradebookUserActivity.getMark(); + if (weight != null) { + mark = doWeightedMarkCalc(mark, activity, weight, rawActivityTotalMarks); + } + + if (GradebookService.IRA_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + iraMark += mark; + iraTotalMark += weightedActivityTotalMarks; + } + + if (GradebookService.TRA_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + traMark += mark; + traTotalMark += weightedActivityTotalMarks; + } + + if (GradebookService.AE_TOOL_SIGNATURE.equals(activity.getTool().getToolSignature())) { + aeMark += mark; + aeTotalMark += weightedActivityTotalMarks; + } + } + } + + userRow.addCell(iraMark); + userRow.addCell(iraTotalMark); + userRow.addCell(traMark); + userRow.addCell(traTotalMark); + userRow.addCell(aeMark); + userRow.addCell(aeTotalMark); + + // lesson's total, max mark and percentage + Double lessonTotal = iraMark + traMark + aeMark; + Double lessonMaxMark = (double) (iraTotalMark + traTotalMark + aeTotalMark); + userRow.addCell(lessonTotal, ExcelCell.BORDER_STYLE_LEFT_THIN); + userRow.addCell(lessonMaxMark); + Double percentage = (lessonMaxMark != 0) ? lessonTotal / lessonMaxMark : 0d; + userRow.addPercentageCell(percentage, false, ExcelCell.BORDER_STYLE_RIGHT_THICK); + } + } + } + + return sheets; + } + + // *LKC* has customized this method private void addUsernameCells(User learner, ExcelRow userRow) { //first, last names and login String lastName = (learner.getLastName() == null) ? "" : learner.getLastName().toUpperCase(); userRow.addCell(lastName); String firstName = (learner.getFirstName() == null) ? "" : learner.getFirstName().toUpperCase(); userRow.addCell(firstName); - userRow.addCell(learner.getLogin()); + String login = learner.getLogin(); + login = (login.startsWith("ntumed_")) ? login.substring(7) : login; + userRow.addCell(login); } @Override Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java =================================================================== diff -u -r1f334c44b5fb73e7999b8e0497e41441537e6b5d -r5399cd4e0375727fe77dc38498848d465889e715 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java (.../IGradebookFullService.java) (revision 1f334c44b5fb73e7999b8e0497e41441537e6b5d) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java (.../IGradebookFullService.java) (revision 5399cd4e0375727fe77dc38498848d465889e715) @@ -313,4 +313,17 @@ /** Get a summary of the weightings */ List getWeights(LearningDesign design); + + /** + * *LKC* added this method + * + * Export selected lessons with each lesson located in separated page + * + * @param userId + * @param organisationId + * @param lessonIds + * @return + */ + List exportSelectedLessonsSeparateSheetGradebook(Integer userId, Integer organisationId, + String[] lessonIds); } \ No newline at end of file Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java =================================================================== diff -u -rb52caf63d3119c1e91ff4638bde3e14981e508e1 -r5399cd4e0375727fe77dc38498848d465889e715 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java (.../GradebookMonitoringController.java) (revision b52caf63d3119c1e91ff4638bde3e14981e508e1) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java (.../GradebookMonitoringController.java) (revision 5399cd4e0375727fe77dc38498848d465889e715) @@ -449,14 +449,21 @@ boolean simplified = WebUtil.readBooleanParam(request, "simplified", false); + // *LKC* added the following line + boolean isEachLessonSeparateSheet = WebUtil.readBooleanParam(request, "isEachLessonSeparateSheet"); + Organisation organisation = (Organisation) userManagementService.findById(Organisation.class, organisationID); String[] lessonIds = request.getParameterValues(AttributeNames.PARAM_LESSON_ID); if (log.isDebugEnabled()) { log.debug("Exporting to a spreadsheet lessons " + Arrays.toString(lessonIds) + " from course: " + organisationID); } - List sheets = gradebookService.exportSelectedLessonsGradebook(user.getUserID(), organisationID, - lessonIds, simplified); + // *LKC* customized the following line + List sheets = (isEachLessonSeparateSheet) + ? gradebookService.exportSelectedLessonsSeparateSheetGradebook(user.getUserID(), organisationID, + lessonIds) + : gradebookService.exportSelectedLessonsGradebook(user.getUserID(), organisationID, lessonIds, + simplified); String fileName = organisation.getName().replaceAll(" ", "_") + ".xlsx"; fileName = FileUtil.encodeFilenameForDownload(request, fileName); Index: lams_gradebook/web/gradebookCourseMonitor.jsp =================================================================== diff -u -r9dcc3e2d26b504f92d919f53f0d45dd4093a82a2 -r5399cd4e0375727fe77dc38498848d465889e715 --- lams_gradebook/web/gradebookCourseMonitor.jsp (.../gradebookCourseMonitor.jsp) (revision 9dcc3e2d26b504f92d919f53f0d45dd4093a82a2) +++ lams_gradebook/web/gradebookCourseMonitor.jsp (.../gradebookCourseMonitor.jsp) (revision 5399cd4e0375727fe77dc38498848d465889e715) @@ -362,17 +362,33 @@ for (var i=0; i
+ " id="export-selected-lessons-button" />
+