Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r52dd63e24e52ed79e408faafa56a4677885f76d1 -rf59c54692eae777e0f10c71f59c1f104280a320b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 52dd63e24e52ed79e408faafa56a4677885f76d1) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision f59c54692eae777e0f10c71f59c1f104280a320b) @@ -232,7 +232,8 @@ } @Override - public List getGBActivityRowsForLesson(Long lessonId, TimeZone userTimezone, boolean escapeTitles) { + public List getGBActivityRowsForLesson(Long lessonId, TimeZone userTimezone, + boolean escapeTitles) { GradebookService.logger.debug("Getting gradebook data for lesson: " + lessonId); Lesson lesson = lessonService.getLesson(lessonId); @@ -1744,9 +1745,9 @@ ToolActivity activity = toolSession.getToolActivity(); GradebookUserActivity gradebookUserActivity = getGradebookUserActivity(activity.getActivityId(), userID); if (gradebookUserActivity != null) { - // act as if the mark was updated to 0 so lesson mark calculates correctly + // set mark to null so lesson mark recalculates correctly Double oldActivityMark = gradebookUserActivity.getMark(); - gradebookUserActivity.setMark(0D); + gradebookUserActivity.setMark(null); Lesson lesson = (Lesson) activity.getLearningDesign().getLessons().iterator().next(); boolean isWeightedMarks = toolService.isWeightedMarks(lesson.getLearningDesign()); GradebookUserLesson gradebookUserLesson = getGradebookUserLesson(lesson.getLessonId(), userID); @@ -1917,11 +1918,16 @@ */ private void aggregateTotalMarkForLesson(boolean useWeightings, GradebookUserLesson gradebookUserLesson, GradebookUserActivity markedActivity, Double oldActivityMark) { - List userActivities = gradebookDAO.getGradebookUserActivitiesForLesson( gradebookUserLesson.getLesson().getLessonId(), gradebookUserLesson.getLearner().getUserId()); + // if there is only one marked activity and it is being deleted, remove whole lesson mark + if (markedActivity.getMark() == null && userActivities.size() == 1 + && userActivities.get(0).getUid() == markedActivity.getUid()) { + gradebookDAO.delete(gradebookUserLesson); + return; + } - Double totalMark; + Double totalMark = null; if (oldActivityMark == null || gradebookUserLesson.getMark() == null) { totalMark = calculateLessonMark(useWeightings, userActivities, markedActivity); } else if (!useWeightings) { @@ -1931,7 +1937,8 @@ } } else { Double oldWeightedMark = getWeightedMark(true, markedActivity, oldActivityMark); - Double newWeighterMark = getWeightedMark(true, markedActivity, markedActivity.getMark()); + Double newWeighterMark = markedActivity.getMark() == null ? 0 + : getWeightedMark(true, markedActivity, markedActivity.getMark()); totalMark = gradebookUserLesson.getMark() - oldWeightedMark + newWeighterMark; }