diff --git a/pom.xml b/pom.xml index bfb65fe5e83a4cbd5c45ae0c31ed1480fa0aa13f..7aba673c7aacb3772c80b20eefd76f4279b77ae1 100644 --- a/pom.xml +++ b/pom.xml @@ -70,6 +70,7 @@ <apache.log4j>2.12.1</apache.log4j> <io.jsonwebtoken>0.10.7</io.jsonwebtoken> <io.undertow>2.0.27.Final</io.undertow> + <!-- Override data-bind --> <jackson.version>2.9.10</jackson.version> <org.mysql.version>5.1.46</org.mysql.version> <org.postgresql.version>42.2.8</org.postgresql.version> @@ -2239,7 +2240,7 @@ <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> - <version>${jackson.version}.1</version> + <version>2.9.10.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java index 83505d887b5e0521d6bd0b2500b8b4766f4505ab..d2a5f1685a112e868523ae514b0520c782269c21 100644 --- a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java @@ -155,12 +155,12 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager { public List<AssessedBusinessGroup> getBusinessGroupStatistics(Identity coach, SearchAssessedIdentityParams params) { RepositoryEntry courseEntry = params.getEntry(); - StringBuilder sf = new StringBuilder(); + QueryBuilder sf = new QueryBuilder(); sf.append("select bgi.key, bgi.name, baseGroup.key,") .append(" avg(aentry.score) as scoreAverage,") + .append(" sum(case when aentry.score is not null then 1 else 0 end) as numOfScore,") .append(" sum(case when aentry.passed=true then 1 else 0 end) as numOfPassed,") .append(" sum(case when aentry.passed=false then 1 else 0 end) as numOfFailed,") - .append(" sum(case when (aentry.status is null or not(aentry.status='").append(AssessmentEntryStatus.notStarted.name()).append("') or aentry.passed is null) then 1 else 0 end) as numOfNotAttempted,") .append(" (select count(gmember.key) from bgroupmember as gmember") .append(" where gmember.group.key=baseGroup.key and gmember.role='").append(GroupRoles.participant.name()).append("'") .append(" ) as numOfParticipants") @@ -170,18 +170,14 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager { .append(" left join baseGroup.members as bmember on (bmember.role='").append(GroupRoles.participant.name()).append("')") .append(" left join assessmententry as aentry on (bmember.identity.key=aentry.identity.key and rel.entry.key = aentry.repositoryEntry.key)"); - boolean where = false; if(!params.isAdmin()) { - where = PersistenceHelper.appendAnd(sf, where); - sf.append(" bgi.key in (:groupKeys)"); + sf.and().append(" bgi.key in (:groupKeys)"); } if(params.getSubIdent() != null) { - where = PersistenceHelper.appendAnd(sf, where); - sf.append(" aentry.subIdent=:subIdent"); + sf.and().append(" aentry.subIdent=:subIdent"); } if(params.getReferenceEntry() != null) { - where = PersistenceHelper.appendAnd(sf, where); - sf.append(" aentry.referenceEntry.key=:referenceKey"); + sf.and().append(" aentry.referenceEntry.key=:referenceKey"); } sf.append(" group by bgi.key, bgi.name, baseGroup.key"); @@ -200,18 +196,17 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager { List<Object[]> results = stats.getResultList(); List<AssessedBusinessGroup> rows = new ArrayList<>(results.size()); + for(Object[] result:results) { Long key = (Long)result[0]; String name = (String)result[1]; double averageScore = result[3] == null ? 0.0d : ((Number)result[3]).doubleValue(); - int numOfPassed = result[4] == null ? 0 : ((Number)result[4]).intValue(); - int numOfFailed = result[5] == null ? 0 : ((Number)result[5]).intValue(); - int numOfNotAttempted = result[6] == null ? 0 : ((Number)result[6]).intValue(); + int numOfScores = result[4] == null ? 0 : ((Number)result[4]).intValue(); + int numOfPassed = result[5] == null ? 0 : ((Number)result[5]).intValue(); + int numOfFailed = result[6] == null ? 0 : ((Number)result[6]).intValue(); int numOfParticipants = result[7] == null ? 0 : ((Number)result[7]).intValue(); - - rows.add(new AssessedBusinessGroup(key, name, averageScore, - numOfPassed, numOfFailed, numOfNotAttempted, - numOfParticipants)); + rows.add(new AssessedBusinessGroup(key, name, averageScore, numOfScores > 0, + numOfPassed, numOfFailed, numOfParticipants)); } return rows; } diff --git a/src/main/java/org/olat/course/assessment/model/AssessedBusinessGroup.java b/src/main/java/org/olat/course/assessment/model/AssessedBusinessGroup.java index a83bb160bf48db5188372156bb2bbcc4ed5ddc03..fbaf2019d3ac3c12c4594ed9e8b1f5bd4d9fc065 100644 --- a/src/main/java/org/olat/course/assessment/model/AssessedBusinessGroup.java +++ b/src/main/java/org/olat/course/assessment/model/AssessedBusinessGroup.java @@ -35,18 +35,17 @@ public class AssessedBusinessGroup implements BusinessGroupRef { private int numOfParticipants; private int numOfPassed; private int numOfFailed; - private int numOfNotAttempted; private double averageScore; + private boolean hasScore; - public AssessedBusinessGroup(Long key, String name, double averageScore, - int numOfPassed, int numOfFailed, int numOfNotAttempted, - int numOfParticipants) { + public AssessedBusinessGroup(Long key, String name, double averageScore, boolean hasScore, + int numOfPassed, int numOfFailed, int numOfParticipants) { this.key = key; this.name = name; + this.hasScore = hasScore; this.averageScore = averageScore; this.numOfPassed = numOfPassed; this.numOfFailed = numOfFailed; - this.numOfNotAttempted = numOfNotAttempted; this.numOfParticipants = numOfParticipants; } @@ -75,8 +74,8 @@ public class AssessedBusinessGroup implements BusinessGroupRef { public int getNumOfFailed() { return numOfFailed; } - - public int getNumOfNotAttempted() { - return numOfNotAttempted; + + public boolean isHasScore() { + return hasScore; } } diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessedBusinessGroupCourseNodeListController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessedBusinessGroupCourseNodeListController.java index af0530f03f8de0b67abbee6e580824019ffd2ca0..64c4d1ddd137275aa239a0e6d68fd40486834cc6 100644 --- a/src/main/java/org/olat/course/assessment/ui/tool/AssessedBusinessGroupCourseNodeListController.java +++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessedBusinessGroupCourseNodeListController.java @@ -175,7 +175,7 @@ public class AssessedBusinessGroupCourseNodeListController extends FormBasicCont for(BusinessGroup group:groups) { if(!keys.contains(group.getKey())) { - rows.add(new AssessedBusinessGroup(group.getKey(), group.getName(), 0.0d, 0, 0, 0, 0)); + rows.add(new AssessedBusinessGroup(group.getKey(), group.getName(), 0.0d, false, 0, 0, 0)); } } diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessedBusinessGroupTableModel.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessedBusinessGroupTableModel.java index 953d86f9cca392e993623bd88f7e794a42ec4bb7..59dffc05263e0f4285a293014125e74074e51c07 100644 --- a/src/main/java/org/olat/course/assessment/ui/tool/AssessedBusinessGroupTableModel.java +++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessedBusinessGroupTableModel.java @@ -73,17 +73,9 @@ implements SortableFlexiTableDataModel<AssessedBusinessGroup> { val.setGreen(row.getNumOfPassed()); return val; } - case averageScore: { - if(row.getNumOfParticipants() == row.getNumOfNotAttempted()) { - return null; - } - if(row.getAverageScore() == 0.0) { - return null; - } - return row.getAverageScore(); - } + case averageScore: return row.isHasScore() ? row.getAverageScore() : null; + default: return "ERROR"; } - return null; } @Override