Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r39f26ae59d9865f852b62d5f1759b4c9fe6efb24 -rcee1956b172ada2068423f32efe823a24b600ffb --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 39f26ae59d9865f852b62d5f1759b4c9fe6efb24) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision cee1956b172ada2068423f32efe823a24b600ffb) @@ -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;