Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java,v diff -u -r1.49 -r1.50 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 5 Sep 2014 21:30:05 -0000 1.49 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 29 Oct 2014 21:33:17 -0000 1.50 @@ -618,6 +618,10 @@ if (mark > maxMark) { mark = maxMark; + + // in case options have negative grades (<0), their total mark can't be less than -maxMark + } else if (mark < -maxMark) { + mark = -maxMark; } // calculate penalty @@ -628,22 +632,22 @@ int numberWrongAnswers = assessmentQuestionResultDao.getNumberWrongAnswersDoneBefore(assessmentUid, userId, question.getUid()); - // calculate penalty itdelf + // calculate penalty itself float penalty = question.getPenaltyFactor() * numberWrongAnswers; mark -= penalty; if (penalty > maxMark) { penalty = maxMark; } questionAnswer.setPenalty(penalty); + + //don't let penalty make mark less than 0 + if (mark < 0) { + mark = 0; + } } - - if (mark < 0) { - mark = 0; - } - + questionAnswer.setMark(mark); questionAnswer.setMaxMark(maxMark); - } return mark;