Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== diff -u -ra949c337adc53b2df9207aa1de6e500281de7c20 -r9cadc392ac9854c077a9da549309831e2c3ae7cc --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision a949c337adc53b2df9207aa1de6e500281de7c20) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 9cadc392ac9854c077a9da549309831e2c3ae7cc) @@ -544,9 +544,10 @@ learningDesignDAO.update(design); - // if the weightings have been changed need to recalculate the marks - if ( gradebookService.isWeightedMarks(design) ) - gradebookService.recalculateTotalMarksForLesson(lesson.getLessonId()); + // Always recalculate marks as we can't tell if weightings have been changed/added/removed. + // This will override any Gradebook entered *lesson* marks, but will calculate based on + // Gradebook entered *activity* marks. + gradebookService.recalculateTotalMarksForLesson(lesson.getLessonId()); } } } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r23a6845aa6db9fc477a99de3d241d7e76da45360 -r9cadc392ac9854c077a9da549309831e2c3ae7cc --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 23a6845aa6db9fc477a99de3d241d7e76da45360) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 9cadc392ac9854c077a9da549309831e2c3ae7cc) @@ -1765,12 +1765,16 @@ gradebookUserLesson.getLearner().getUserId()); Double totalMark; - if (oldActivityMark == null || gradebookUserLesson.getMark() == null || useWeightings) { + if (oldActivityMark == null || gradebookUserLesson.getMark() == null) { totalMark = calculateLessonMark(useWeightings, userActivities, markedActivity); - } else { + } else if ( ! useWeightings ) { totalMark = gradebookUserLesson.getMark() - oldActivityMark; if ( markedActivity.getMark() != null ) totalMark += markedActivity.getMark(); + } else { + Double oldWeightedMark = getWeightedMark(true, markedActivity, oldActivityMark); + Double newWeighterMark = getWeightedMark(true, markedActivity, markedActivity.getMark()); + totalMark = gradebookUserLesson.getMark() - oldWeightedMark + newWeighterMark; } gradebookUserLesson.setMark(totalMark); @@ -1780,12 +1784,13 @@ private Double calculateLessonMark(boolean useWeightings, List userActivities, GradebookUserActivity markedActivity) { - Double totalMark = markedActivity != null ? getWeightedMark(useWeightings, markedActivity) : 0.0; + Double totalMark = markedActivity != null ? + getWeightedMark(useWeightings, markedActivity, markedActivity.getMark()) : 0.0; for ( GradebookUserActivity guact : userActivities ) { if ( markedActivity == null || guact.getUid() != markedActivity.getUid() ) { if ( useWeightings ) { - totalMark = totalMark + getWeightedMark(useWeightings, guact); + totalMark = totalMark + getWeightedMark(useWeightings, guact, guact.getMark()); } else { totalMark = totalMark + guact.getMark(); } @@ -1794,8 +1799,8 @@ return totalMark; } - private Double getWeightedMark( boolean useWeightings, GradebookUserActivity guact) { - Double rawMark = ( guact.getMark() != null ? guact.getMark() : 0.0); + private Double getWeightedMark( boolean useWeightings, GradebookUserActivity guact, Double inputRawMark) { + Double rawMark = inputRawMark != null ? inputRawMark : 0.0; if ( useWeightings ) { ToolActivity activity = guact.getActivity(); ActivityEvaluation eval = activity.getEvaluation();