Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -rc500d9384f365fe8b4c2997a799c44f92e8c26e9 -r1ff334fdba2d806fe1146d236b0913840813e9c5 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision c500d9384f365fe8b4c2997a799c44f92e8c26e9) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 1ff334fdba2d806fe1146d236b0913840813e9c5) @@ -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;