From 2f5dbe56920715fba81bd1eec2d075bcef8da6bb Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Tue, 19 Mar 2019 21:02:39 +0100 Subject: [PATCH] OO-3978: recalculate the passed value with manual scoring and cut value --- .../java/org/olat/ims/qti21/QTI21StatisticsManager.java | 2 +- .../ims/qti21/manager/QTI21StatisticsManagerImpl.java | 7 ++++++- .../ui/statistics/QTI21StatisticResourceResult.java | 9 ++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/olat/ims/qti21/QTI21StatisticsManager.java b/src/main/java/org/olat/ims/qti21/QTI21StatisticsManager.java index e60bd2e7755..fc9af0c7403 100644 --- a/src/main/java/org/olat/ims/qti21/QTI21StatisticsManager.java +++ b/src/main/java/org/olat/ims/qti21/QTI21StatisticsManager.java @@ -66,7 +66,7 @@ public interface QTI21StatisticsManager { * @param resSubPath * @return */ - public StatisticAssessment getAssessmentStatistics(QTI21StatisticSearchParams searchParams); + public StatisticAssessment getAssessmentStatistics(QTI21StatisticSearchParams searchParams, Double cutValue); public StatisticsItem getAssessmentItemStatistics(String itemRefIdent, double maxScore, QTI21StatisticSearchParams searchParams); diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java index 195aa68057b..6fc8aaed6b7 100644 --- a/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java +++ b/src/main/java/org/olat/ims/qti21/manager/QTI21StatisticsManagerImpl.java @@ -166,7 +166,7 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager { } @Override - public StatisticAssessment getAssessmentStatistics(QTI21StatisticSearchParams searchParams) { + public StatisticAssessment getAssessmentStatistics(QTI21StatisticSearchParams searchParams, Double cutValue) { StringBuilder sb = new StringBuilder(); sb.append("select asession.score, asession.manualScore, asession.passed, asession.duration from qtiassessmenttestsession asession "); decorateRSet(sb, searchParams, true); @@ -188,6 +188,8 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager { double minDuration = Double.MAX_VALUE; double maxDuration = 0d; + BigDecimal cutBigValue = cutValue == null ? null : BigDecimal.valueOf(cutValue.doubleValue()); + int dataPos = 0; boolean hasScore = false; for(Object[] rawData:rawDatas) { @@ -208,6 +210,9 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager { } Boolean passed = (Boolean)rawData[pos++]; + if(cutBigValue != null && score != null) { + passed = score.compareTo(cutBigValue) >= 0; + } if(passed != null) { if(passed.booleanValue()) { numOfPassed++; diff --git a/src/main/java/org/olat/ims/qti21/ui/statistics/QTI21StatisticResourceResult.java b/src/main/java/org/olat/ims/qti21/ui/statistics/QTI21StatisticResourceResult.java index 080b614f0cd..f28262382cd 100644 --- a/src/main/java/org/olat/ims/qti21/ui/statistics/QTI21StatisticResourceResult.java +++ b/src/main/java/org/olat/ims/qti21/ui/statistics/QTI21StatisticResourceResult.java @@ -46,6 +46,7 @@ import org.olat.ims.qti21.QTI21Service; import org.olat.ims.qti21.QTI21StatisticsManager; import org.olat.ims.qti21.model.QTI21QuestionType; import org.olat.ims.qti21.model.QTI21StatisticSearchParams; +import org.olat.ims.qti21.model.xml.QtiNodesExtractor; import org.olat.repository.RepositoryEntry; import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem; @@ -136,11 +137,17 @@ public class QTI21StatisticResourceResult implements StatisticResourceResult { public StatisticAssessment getQTIStatisticAssessment() { if(statisticAssessment == null) { - statisticAssessment = qtiStatisticsManager.getAssessmentStatistics(searchParams); + Double cutValue = getCutValue(); + statisticAssessment = qtiStatisticsManager.getAssessmentStatistics(searchParams, cutValue); } return statisticAssessment; } + public Double getCutValue() { + AssessmentTest assessmentTest = resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful(); + return QtiNodesExtractor.extractCutValue(assessmentTest); + } + public File getAssessmentItemFile(AssessmentItemRef itemRef) { URI itemUri = resolvedAssessmentTest.getSystemIdByItemRefMap().get(itemRef); return new File(itemUri); -- GitLab