Skip to content
Snippets Groups Projects
Commit 2f5dbe56 authored by srosse's avatar srosse
Browse files

OO-3978: recalculate the passed value with manual scoring and cut value

parent 4a8b05ed
No related branches found
No related tags found
No related merge requests found
...@@ -66,7 +66,7 @@ public interface QTI21StatisticsManager { ...@@ -66,7 +66,7 @@ public interface QTI21StatisticsManager {
* @param resSubPath * @param resSubPath
* @return * @return
*/ */
public StatisticAssessment getAssessmentStatistics(QTI21StatisticSearchParams searchParams); public StatisticAssessment getAssessmentStatistics(QTI21StatisticSearchParams searchParams, Double cutValue);
public StatisticsItem getAssessmentItemStatistics(String itemRefIdent, double maxScore, QTI21StatisticSearchParams searchParams); public StatisticsItem getAssessmentItemStatistics(String itemRefIdent, double maxScore, QTI21StatisticSearchParams searchParams);
......
...@@ -166,7 +166,7 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager { ...@@ -166,7 +166,7 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager {
} }
@Override @Override
public StatisticAssessment getAssessmentStatistics(QTI21StatisticSearchParams searchParams) { public StatisticAssessment getAssessmentStatistics(QTI21StatisticSearchParams searchParams, Double cutValue) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("select asession.score, asession.manualScore, asession.passed, asession.duration from qtiassessmenttestsession asession "); sb.append("select asession.score, asession.manualScore, asession.passed, asession.duration from qtiassessmenttestsession asession ");
decorateRSet(sb, searchParams, true); decorateRSet(sb, searchParams, true);
...@@ -188,6 +188,8 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager { ...@@ -188,6 +188,8 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager {
double minDuration = Double.MAX_VALUE; double minDuration = Double.MAX_VALUE;
double maxDuration = 0d; double maxDuration = 0d;
BigDecimal cutBigValue = cutValue == null ? null : BigDecimal.valueOf(cutValue.doubleValue());
int dataPos = 0; int dataPos = 0;
boolean hasScore = false; boolean hasScore = false;
for(Object[] rawData:rawDatas) { for(Object[] rawData:rawDatas) {
...@@ -208,6 +210,9 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager { ...@@ -208,6 +210,9 @@ public class QTI21StatisticsManagerImpl implements QTI21StatisticsManager {
} }
Boolean passed = (Boolean)rawData[pos++]; Boolean passed = (Boolean)rawData[pos++];
if(cutBigValue != null && score != null) {
passed = score.compareTo(cutBigValue) >= 0;
}
if(passed != null) { if(passed != null) {
if(passed.booleanValue()) { if(passed.booleanValue()) {
numOfPassed++; numOfPassed++;
......
...@@ -46,6 +46,7 @@ import org.olat.ims.qti21.QTI21Service; ...@@ -46,6 +46,7 @@ import org.olat.ims.qti21.QTI21Service;
import org.olat.ims.qti21.QTI21StatisticsManager; import org.olat.ims.qti21.QTI21StatisticsManager;
import org.olat.ims.qti21.model.QTI21QuestionType; import org.olat.ims.qti21.model.QTI21QuestionType;
import org.olat.ims.qti21.model.QTI21StatisticSearchParams; import org.olat.ims.qti21.model.QTI21StatisticSearchParams;
import org.olat.ims.qti21.model.xml.QtiNodesExtractor;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem; import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem;
...@@ -136,11 +137,17 @@ public class QTI21StatisticResourceResult implements StatisticResourceResult { ...@@ -136,11 +137,17 @@ public class QTI21StatisticResourceResult implements StatisticResourceResult {
public StatisticAssessment getQTIStatisticAssessment() { public StatisticAssessment getQTIStatisticAssessment() {
if(statisticAssessment == null) { if(statisticAssessment == null) {
statisticAssessment = qtiStatisticsManager.getAssessmentStatistics(searchParams); Double cutValue = getCutValue();
statisticAssessment = qtiStatisticsManager.getAssessmentStatistics(searchParams, cutValue);
} }
return statisticAssessment; return statisticAssessment;
} }
public Double getCutValue() {
AssessmentTest assessmentTest = resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful();
return QtiNodesExtractor.extractCutValue(assessmentTest);
}
public File getAssessmentItemFile(AssessmentItemRef itemRef) { public File getAssessmentItemFile(AssessmentItemRef itemRef) {
URI itemUri = resolvedAssessmentTest.getSystemIdByItemRefMap().get(itemRef); URI itemUri = resolvedAssessmentTest.getSystemIdByItemRefMap().get(itemRef);
return new File(itemUri); return new File(itemUri);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment