From 8d478876b5ad1548a715c2868261b1e79840a90c Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 7 Dec 2015 13:16:42 +0100 Subject: [PATCH] OO-1593: assessment entry for structure course element --- .../manager/AssessmentToolManagerImpl.java | 46 +++++++++++-------- .../ui/tool/_i18n/LocalStrings_de.properties | 4 +- .../course/run/scoring/ScoreAccounting.java | 4 +- 3 files changed, 32 insertions(+), 22 deletions(-) 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 822d2be3041..d2122885023 100644 --- a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java @@ -72,7 +72,7 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager { entry.setNumOfAssessedIdentities(numOfAssessedIdentites); //retrive statistcis about efficicency statements - efficiencyStatementsStatistics(coach, params, entry); + assessmentEntryStatistics(coach, params, entry); //retrieve statistcs in user course infos userCourseInfosStatistics(coach, params, entry); @@ -125,28 +125,35 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager { } } - private void efficiencyStatementsStatistics(Identity coach, SearchAssessedIdentityParams params, CourseStatistics entry) { + private void assessmentEntryStatistics(Identity coach, SearchAssessedIdentityParams params, CourseStatistics entry) { RepositoryEntry courseEntry = params.getEntry(); try { StringBuilder sf = new StringBuilder(); - sf.append("select avg(statement.score) as scoreAverage, ") - .append(" sum(case when statement.passed=true then 1 else 0 end) as numOfPassed,") - .append(" sum(case when statement.passed=false then 1 else 0 end) as numOfFailed,") - .append(" sum(case when statement.passed is null then 1 else 0 end) as numOfNotAttempted,") - .append(" sum(statement.key) as numOfStatements,") + sf.append("select avg(aentry.score) as scoreAverage, ") + .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.passed is null then 1 else 0 end) as numOfNotAttempted,") + .append(" sum(aentry.key) as numOfStatements,") .append(" v.key as repoKey") - .append(" from effstatementrepo as statement ") - .append(" inner join statement.repositoryEntry v") - .append(" where v.key=:repoEntryKey and (statement.identity in "); + .append(" from assessmententry aentry ") + .append(" inner join aentry.repositoryEntry v ") + .append(" where v.key=:repoEntryKey and aentry.status is not null and not(aentry.status='").append(AssessmentEntryStatus.notStarted.name()).append("')"); + if(params.getReferenceEntry() != null) { + sf.append(" and aentry.referenceEntry.key=:referenceKey"); + } + if(params.getSubIdent() != null) { + sf.append(" and aentry.subIdent=:subIdent"); + } + sf.append(" and (aentry.identity in"); if(params.isAdmin()) { sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant") .append(" where rel.entry.key=:repoEntryKey and rel.group=participant.group") .append(" and participant.role='").append(GroupRoles.participant.name()).append("'") .append(" )"); if(params.isNonMembers()) { - sf.append(" or not exists (select membership.identity from repoentrytogroup as rel, bgroupmember as membership") - .append(" where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=statement.identity") - .append(" )"); + sf.append(" or aentry.identity not in (select membership.identity from repoentrytogroup as rel, bgroupmember as membership") + .append(" where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=aentry.identity") + .append(" )"); } } else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) { sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach") @@ -156,14 +163,19 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager { .append(" )"); } sf.append(" ) group by v.key"); - - + TypedQuery<Object[]> stats = dbInstance.getCurrentEntityManager() .createQuery(sf.toString(), Object[].class) .setParameter("repoEntryKey", courseEntry.getKey()); if(!params.isAdmin()) { stats.setParameter("identityKey", coach.getKey()); } + if(params.getReferenceEntry() != null) { + stats.setParameter("referenceKey", params.getReferenceEntry()); + } + if(params.getSubIdent() != null) { + stats.setParameter("subIdent", params.getSubIdent()); + } List<Object[]> results = stats.getResultList(); if(results != null && results.size() > 0) { @@ -229,9 +241,7 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager { Long identityKey = appendUserSearchByKey(sb, params.getSearchString()); String[] searchArr = appendUserSearchFull(sb, params.getSearchString()); - - System.out.println(sb.toString()); - + TypedQuery<T> query = dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), classResult) .setParameter("repoEntryKey", params.getEntry().getKey()); diff --git a/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_de.properties index d09e35b22f2..3c1e85ad5c9 100644 --- a/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/assessment/ui/tool/_i18n/LocalStrings_de.properties @@ -19,8 +19,8 @@ assessment.status.done=Bewertet assessment.tool.overview=Ubersicht assessment.tool.numOfAssessedIdentities={0} bewertete Benutzer assessment.tool.numOfAssessedGroups={0} Gruppe(n) -assessment.tool.numOfPassed={0} bestandend -assessment.tool.numOfFailed={0} nicht bestandend +assessment.tool.numOfPassed={0} bestanden +assessment.tool.numOfFailed={0} nicht bestanden table.entries=Entries waiting.review=Pending reviews no.certificate=Kein Zertifikat vorhanden diff --git a/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java b/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java index 049c4020224..b4928a3723e 100644 --- a/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java +++ b/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java @@ -181,10 +181,10 @@ public class ScoreAccounting { Boolean passed = null; AssessmentEntryStatus assessmentStatus = AssessmentEntryStatus.inProgress; ConditionInterpreter ci = userCourseEnvironment.getConditionInterpreter(); - if (scoreExpressionStr != null) { + if (cNode.hasScoreConfigured() && scoreExpressionStr != null) { score = new Float(ci.evaluateCalculation(scoreExpressionStr)); } - if (passedExpressionStr != null) { + if (cNode.hasPassedConfigured() && passedExpressionStr != null) { boolean hasPassed = ci.evaluateCondition(passedExpressionStr); if(hasPassed) { passed = Boolean.TRUE; -- GitLab