Index: lams_monitoring/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r8ad6317cfff329136f05042200f2af81cbee110f -r7c12721027454f10b087240a31a83612efa41057 --- lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 8ad6317cfff329136f05042200f2af81cbee110f) +++ lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 7c12721027454f10b087240a31a83612efa41057) @@ -417,15 +417,13 @@ label.gates = Gates label.ira = iRAT label.tra = tRAT -label.ira.mark = iRAT mark -label.ira.mark.average = iRAT mark average label.ira.correct.count = iRAT correct answer count label.ira.correct.count.average = iRAT correct answer count average label.average = Average -label.tra.mark = tRAT mark label.tra.correct.count = tRAT correct answer count label.highest = Highest label.lowest = Lowest +label.ira.tra.delta = Increase iRAT vs tRAT label.summary = Summary label.burning.questions = Burning Qs label.forum = Forum Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/TblGroupDTO.java =================================================================== diff -u -r8ad6317cfff329136f05042200f2af81cbee110f -r7c12721027454f10b087240a31a83612efa41057 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/TblGroupDTO.java (.../TblGroupDTO.java) (revision 8ad6317cfff329136f05042200f2af81cbee110f) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/TblGroupDTO.java (.../TblGroupDTO.java) (revision 7c12721027454f10b087240a31a83612efa41057) @@ -16,8 +16,8 @@ private TblUserDTO groupLeader; - private Double traScore; - private int traCorrectAnswerCount; + private Integer traCorrectAnswerCount; + private Long correctAnswerCountPercentDelta; /** * Get the DTO for this group. Does not include the GroupBranchActivities as they will be in a separate array for @@ -81,41 +81,55 @@ this.groupLeader = groupLeader; } - public void setTraScore(Double traScore) { - this.traScore = traScore; + public Integer getTraCorrectAnswerCount() { + return traCorrectAnswerCount; } - public Double getTraScore() { - return traScore; + public void setTraCorrectAnswerCount(Integer traCorrectAnswerCount) { + this.traCorrectAnswerCount = traCorrectAnswerCount; } - public int getTraCorrectAnswerCount() { - return traCorrectAnswerCount; + public Long getCorrectAnswerCountPercentDelta() { + return correctAnswerCountPercentDelta; } - public void setTraCorrectAnswerCount(int traCorrectAnswerCount) { - this.traCorrectAnswerCount = traCorrectAnswerCount; + public void setCorrectAnswerCountPercentDelta(Long correctAnswerCountPercentDelta) { + this.correctAnswerCountPercentDelta = correctAnswerCountPercentDelta; } - public Double getIraScoreAverage() { - OptionalDouble result = userList.stream().filter(u -> u.getIraScore() != null) - .mapToDouble(TblUserDTO::getIraScore).average(); + public Double getIraCorrectAnswerCountAverage() { + OptionalDouble result = userList.stream().filter(u -> u.getIraCorrectAnswerCount() != null) + .mapToDouble(TblUserDTO::getIraCorrectAnswerCount).average(); return result.isPresent() ? result.getAsDouble() : null; } - public Double getIraCorrectAnswerCountAverage() { - OptionalDouble result = userList.stream().filter(u -> u.getIraScore() != null) - .mapToDouble(TblUserDTO::getIraCorrectAnswerCount).average(); + public Double getIraHighestCorrectAnswerCount() { + OptionalDouble result = userList.stream().filter(u -> u.getIraCorrectAnswerCount() != null) + .mapToDouble(TblUserDTO::getIraCorrectAnswerCount).max(); return result.isPresent() ? result.getAsDouble() : null; } - public double getIraHighestScore() { - return userList.stream().filter(u -> u.getIraScore() != null).mapToDouble(TblUserDTO::getIraScore).max() - .orElse(0); + public Double getIraLowestCorrectAnswerCount() { + OptionalDouble result = userList.stream().filter(u -> u.getIraCorrectAnswerCount() != null) + .mapToDouble(TblUserDTO::getIraCorrectAnswerCount).min(); + return result.isPresent() ? result.getAsDouble() : null; } - public double getIraLowestScore() { - return userList.stream().filter(u -> u.getIraScore() != null).mapToDouble(TblUserDTO::getIraScore).min() - .orElse(0); + public Integer getCorrectAnswerCountPercentDeltaAverage() { + OptionalDouble result = userList.stream().filter(u -> u.getCorrectAnswerCountPercentDelta() != null) + .mapToDouble(TblUserDTO::getCorrectAnswerCountPercentDelta).average(); + return result.isPresent() ? Double.valueOf(result.getAsDouble()).intValue() : null; } + + public Double getHighestCorrectAnswerCountPercentDelta() { + OptionalDouble result = userList.stream().filter(u -> u.getCorrectAnswerCountPercentDelta() != null) + .mapToDouble(TblUserDTO::getCorrectAnswerCountPercentDelta).max(); + return result.isPresent() ? result.getAsDouble() : null; + } + + public Double getLowestCorrectAnswerCountPercentDelta() { + OptionalDouble result = userList.stream().filter(u -> u.getCorrectAnswerCountPercentDelta() != null) + .mapToDouble(TblUserDTO::getCorrectAnswerCountPercentDelta).min(); + return result.isPresent() ? result.getAsDouble() : null; + } } \ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/TblUserDTO.java =================================================================== diff -u -r64bfad846c475db43b1b303e0df03735f39d34ce -r7c12721027454f10b087240a31a83612efa41057 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/TblUserDTO.java (.../TblUserDTO.java) (revision 64bfad846c475db43b1b303e0df03735f39d34ce) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/TblUserDTO.java (.../TblUserDTO.java) (revision 7c12721027454f10b087240a31a83612efa41057) @@ -5,8 +5,8 @@ public class TblUserDTO extends UserDTO { private boolean groupLeader; - private Double iraScore; - private int iraCorrectAnswerCount; + private Integer iraCorrectAnswerCount; + private Integer traCorrectAnswerCount; public TblUserDTO(UserDTO userDto) { super(userDto.getUserID(), userDto.getFirstName(), userDto.getLastName(), userDto.getLocaleCountry(), @@ -22,19 +22,21 @@ return groupLeader; } - public void setIraScore(Double iraScore) { - this.iraScore = iraScore; + public Integer getIraCorrectAnswerCount() { + return iraCorrectAnswerCount; } - public Double getIraScore() { - return iraScore; + public void setIraCorrectAnswerCount(Integer iraCorrectAnswerCount) { + this.iraCorrectAnswerCount = iraCorrectAnswerCount; } - public int getIraCorrectAnswerCount() { - return iraCorrectAnswerCount; + public void setTraCorrectAnswerCount(Integer traCorrectAnswerCount) { + this.traCorrectAnswerCount = traCorrectAnswerCount; } - public void setIraCorrectAnswerCount(int iraCorrectAnswerCount) { - this.iraCorrectAnswerCount = iraCorrectAnswerCount; + public Integer getCorrectAnswerCountPercentDelta() { + return iraCorrectAnswerCount == null || traCorrectAnswerCount == null ? null + : (traCorrectAnswerCount - iraCorrectAnswerCount) * 100 / iraCorrectAnswerCount; } + } \ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringController.java =================================================================== diff -u -r8ad6317cfff329136f05042200f2af81cbee110f -r7c12721027454f10b087240a31a83612efa41057 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringController.java (.../TblMonitoringController.java) (revision 8ad6317cfff329136f05042200f2af81cbee110f) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringController.java (.../TblMonitoringController.java) (revision 7c12721027454f10b087240a31a83612efa41057) @@ -2,15 +2,13 @@ import java.util.ArrayList; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; -import org.lamsfoundation.lams.gradebook.GradebookUserActivity; import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ActivityOrderComparator; @@ -116,16 +114,6 @@ ? activityDAO.find(ToolActivity.class, traToolActivityId).getToolContentId() : null; - //get all mcq and assessment scores - List iraGradebookUserActivities = new LinkedList<>(); - List traGradebookUserActivities = new LinkedList<>(); - if (isIraAvailable) { - iraGradebookUserActivities = gradebookService.getGradebookUserActivities(iraToolActivityId); - } - if (isTraAvailable) { - traGradebookUserActivities = gradebookService.getGradebookUserActivities(traToolActivityId); - } - Set leaderUserIds = null; if (leaderselectionToolActivityId != null) { leaderUserIds = lamsToolService.getLeaderUserId(leaderselectionToolActivityId); @@ -144,111 +132,115 @@ TblGroupDTO groupDto = new TblGroupDTO(group); groupDtos.add(groupDto); - if (group.getUsers() != null) { - for (User user : group.getUsers()) { - TblUserDTO userDto = new TblUserDTO(user.getUserDTO()); - groupDto.getUserList().add(userDto); + if (group.getUsers() == null) { + continue; + } - //set up all user leaders - if (leaderUserIds.contains(user.getUserId().longValue())) { - userDto.setGroupLeader(true); - groupDto.setGroupLeader(userDto); - } + for (User user : group.getUsers()) { + TblUserDTO userDto = new TblUserDTO(user.getUserDTO()); + groupDto.getUserList().add(userDto); - if (isIraAvailable) { - // find according iraGradebookUserActivity - for (GradebookUserActivity iraGradebookUserActivity : iraGradebookUserActivities) { - if (iraGradebookUserActivity.getLearner().getUserId().equals(user.getUserId())) { - userDto.setIraScore(iraGradebookUserActivity.getMark()); + //set up all user leaders + if (leaderUserIds.contains(user.getUserId().longValue())) { + userDto.setGroupLeader(true); + groupDto.setGroupLeader(userDto); + } - break; - } - } - - Integer correctAnswerCount = commonAssessmentService.countCorrectAnswers(iraToolContentId, - user.getUserId()); - if (correctAnswerCount != null) { - userDto.setIraCorrectAnswerCount(correctAnswerCount); - } - } + Integer correctAnswerCount = commonAssessmentService.countCorrectAnswers(iraToolContentId, + user.getUserId()); + if (correctAnswerCount != null) { + userDto.setIraCorrectAnswerCount(correctAnswerCount); } + } - if (isTraAvailable && groupDto.getGroupLeader() != null) { - //find according traGradebookUserActivity - for (GradebookUserActivity traGradebookUserActivity : traGradebookUserActivities) { - if (traGradebookUserActivity.getLearner().getUserId() - .equals(groupDto.getGroupLeader().getUserID())) { - groupDto.setTraScore(traGradebookUserActivity.getMark()); + if (isTraAvailable && groupDto.getGroupLeader() != null) { + Integer correctAnswerCount = commonScratchieService.countCorrectAnswers(traToolContentId, + groupDto.getGroupLeader().getUserID()); + if (correctAnswerCount != null) { + groupDto.setTraCorrectAnswerCount(correctAnswerCount); - break; - } + for (TblUserDTO userDto : groupDto.getUserList()) { + userDto.setTraCorrectAnswerCount(correctAnswerCount); } - - Integer correctAnswerCount = commonScratchieService.countCorrectAnswers(traToolContentId, - groupDto.getGroupLeader().getUserID()); - if (correctAnswerCount != null) { - groupDto.setTraCorrectAnswerCount(correctAnswerCount); - } } } } + request.setAttribute("groupDtos", groupDtos); - double highestIraScoreAverage = 0; - double lowestIraScoreAverage = Double.MAX_VALUE; - double highestTraScore = 0; - double lowestTraScore = Double.MAX_VALUE; + double highestIraCorrectAnswerCountAverage = 0; + double lowestIraCorrectAnswerCountAverage = Double.MAX_VALUE; + int highestTraCorrectAnswerCount = 0; + int lowestTraCorrectAnswerCount = Integer.MAX_VALUE; + long highestСorrectAnswerCountDelta = Long.MIN_VALUE; + long lowestСorrectAnswerCountDelta = Long.MAX_VALUE; int iraGroupsCount = 0; int traGroupsCount = 0; - int iraCorrectAnswerCountAverageSum = 0; + int deltaCount = 0; + double iraCorrectAnswerCountAverageSum = 0; int traCorrectAnswerSum = 0; - double iraAverageScoreSum = 0; - double traScoreSum = 0; + int deltaSum = 0; for (TblGroupDTO group : groupDtos) { - Double iraScoreAverage = group.getIraScoreAverage(); - Double traScore = group.getTraScore(); - - if (iraScoreAverage != null) { - iraAverageScoreSum += iraScoreAverage; + Double iraCorrectAnswerCountAverage = group.getIraCorrectAnswerCountAverage(); + if (iraCorrectAnswerCountAverage != null) { iraCorrectAnswerCountAverageSum += group.getIraCorrectAnswerCountAverage(); iraGroupsCount++; - if (iraScoreAverage > highestIraScoreAverage) { - highestIraScoreAverage = iraScoreAverage; - } else if (iraScoreAverage < lowestIraScoreAverage) { - lowestIraScoreAverage = iraScoreAverage; + if (iraCorrectAnswerCountAverage > highestIraCorrectAnswerCountAverage) { + highestIraCorrectAnswerCountAverage = iraCorrectAnswerCountAverage; + } else if (iraCorrectAnswerCountAverage < lowestIraCorrectAnswerCountAverage) { + lowestIraCorrectAnswerCountAverage = iraCorrectAnswerCountAverage; } } - if (traScore != null) { - traScoreSum += traScore; + Integer traCorrectAnswerCount = group.getTraCorrectAnswerCount(); + + if (traCorrectAnswerCount != null) { traCorrectAnswerSum += group.getTraCorrectAnswerCount(); traGroupsCount++; - if (traScore > highestTraScore) { - highestTraScore = traScore; - } else if (traScore < lowestTraScore) { - lowestTraScore = traScore; + if (traCorrectAnswerCount > highestTraCorrectAnswerCount) { + highestTraCorrectAnswerCount = traCorrectAnswerSum; + } else if (traCorrectAnswerSum < lowestTraCorrectAnswerCount) { + lowestTraCorrectAnswerCount = traCorrectAnswerSum; } + + if (iraCorrectAnswerCountAverage != null) { + long correctAnswerCountPercentDelta = Math + .round((traCorrectAnswerCount - iraCorrectAnswerCountAverage) * 100 + / iraCorrectAnswerCountAverage); + group.setCorrectAnswerCountPercentDelta(correctAnswerCountPercentDelta); + deltaSum += correctAnswerCountPercentDelta; + deltaCount++; + + if (correctAnswerCountPercentDelta > highestСorrectAnswerCountDelta) { + highestСorrectAnswerCountDelta = correctAnswerCountPercentDelta; + } else if (correctAnswerCountPercentDelta < lowestСorrectAnswerCountDelta) { + lowestСorrectAnswerCountDelta = correctAnswerCountPercentDelta; + } + } } + } if (iraGroupsCount > 1) { - request.setAttribute("highestIraScoreAverage", highestIraScoreAverage); - request.setAttribute("lowestIraScoreAverage", highestIraScoreAverage <= 0 ? 0 : lowestIraScoreAverage); - - request.setAttribute("averageIraScoreAverage", iraAverageScoreSum / iraGroupsCount); + request.setAttribute("highestIraCorrectAnswerCountAverage", highestIraCorrectAnswerCountAverage); + request.setAttribute("lowestIraCorrectAnswerCountAverage", lowestIraCorrectAnswerCountAverage); request.setAttribute("averageIraCorrectAnswerCountAverage", iraCorrectAnswerCountAverageSum / iraGroupsCount); } if (traGroupsCount > 1) { - request.setAttribute("highestTraScore", highestTraScore); - request.setAttribute("lowestTraScore", highestTraScore <= 0 ? 0 : lowestTraScore); + request.setAttribute("highestTraCorrectAnswerCount", highestTraCorrectAnswerCount); + request.setAttribute("lowestTraCorrectAnswerCount", lowestTraCorrectAnswerCount); + request.setAttribute("averageTraCorrectAnswerCount", (double) traCorrectAnswerSum / traGroupsCount); + } - request.setAttribute("averageTraScore", traScoreSum / traGroupsCount); - request.setAttribute("averageTraCorrectAnswerCount", traCorrectAnswerSum / traGroupsCount); + if (deltaCount > 1) { + request.setAttribute("highestCorrectAnswerCountDelta", highestСorrectAnswerCountDelta); + request.setAttribute("lowestCorrectAnswerCountDelta", lowestСorrectAnswerCountDelta); + request.setAttribute("averageCorrectAnswerCountDelta", (double) deltaSum / deltaCount); } return "tblmonitor/teams"; Index: lams_monitoring/web/tblmonitor/teams.jsp =================================================================== diff -u -r8ad6317cfff329136f05042200f2af81cbee110f -r7c12721027454f10b087240a31a83612efa41057 --- lams_monitoring/web/tblmonitor/teams.jsp (.../teams.jsp) (revision 8ad6317cfff329136f05042200f2af81cbee110f) +++ lams_monitoring/web/tblmonitor/teams.jsp (.../teams.jsp) (revision 7c12721027454f10b087240a31a83612efa41057) @@ -96,8 +96,8 @@ $('#ira-user-name-label').html(userName); //populate user score - var userScore = link.data('ira-score'); - $('#ira-user-score').html(userScore); + var userScore = link.data('ira-correct-answer-count'); + $('#ira-correct-answer-count').html(userScore); //load modal dialog content using Ajax var url = "${isIraMcqAvailable}" == "true" ? "tool/lamc11/tblmonitoring/getModalDialogForTeamsTab.do" : "tool/laasse10/tblmonitoring/getModalDialogForTeamsTab.do"; @@ -126,8 +126,8 @@ $('#tra-user-name-label').html(userName); //populate user score - var userScore = link.data('tra-score'); - $('#tra-user-score').html(userScore); + var userScore = link.data('tra-correct-answer-count'); + $('#tra-correct-answer-count').html(userScore); //load modal dialog content using Ajax $('#tra-modal .modal-body').load( @@ -199,26 +199,26 @@ - - - - - - - - + + + + + + + + @@ -233,66 +233,87 @@ - + + + - + + + + + - - - - - + - + - - ${groupDto.traScore} - - ${groupDto.traCorrectAnswerCount} + + + - + + + ${groupDto.traCorrectAnswerCount} + + - + - + + + + + + + - + + + ${groupDto.correctAnswerCountPercentDelta}% + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - @@ -306,17 +327,6 @@ - - - - - - - - - - - - @@ -329,6 +339,21 @@ + + + + + + - + + + % + + + + + + @@ -352,28 +377,10 @@
- -

: - - - - - - - ${groupDto.traScore} - - - - ${groupDto.traScore} - - - -

: - + - @@ -382,7 +389,7 @@ + data-tra-correct-answer-count="${groupDto.traCorrectAnswerCount}"> ${groupDto.traCorrectAnswerCount} @@ -400,25 +407,32 @@ - - - - + + + + + + + + + - - + + + + - + font-weight-bold" data-portrait="${userDto.portraitUuid}" data-fullname="${userDto.lastName}, ${userDto.firstName}"> ${userDto.lastName}, ${userDto.firstName} @@ -428,60 +442,75 @@ - + - - - ${userDto.iraScore} - + + - - - - - - - - - - + data-ira-correct-answer-count="${userDto.iraCorrectAnswerCount}"> ${userDto.iraCorrectAnswerCount} - - - - - + - + - + - + + + + + + + + - + + + ${userDto.correctAnswerCountPercentDelta}% + + + + + + + + + + + + + + + + + + - + + + - + % @@ -495,11 +524,11 @@
- +
@@ -593,7 +622,7 @@ - : + :