Index: assignment-api/api/src/java/org/sakaiproject/assignment/api/AssignmentPeerAssessmentService.java =================================================================== --- assignment-api/api/src/java/org/sakaiproject/assignment/api/AssignmentPeerAssessmentService.java (revision 134422) +++ assignment-api/api/src/java/org/sakaiproject/assignment/api/AssignmentPeerAssessmentService.java (revision 134423) @@ -24,5 +24,10 @@ public List getPeerAssessmentItems(Collection submissionsIds); - public void updateScore(String submissionId); + /** + * returns true if the score was updated and saved + * @param submissionId + * @return + */ + public boolean updateScore(String submissionId); } Index: assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java =================================================================== --- assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java (revision 134422) +++ assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java (revision 134423) @@ -5018,7 +5018,20 @@ assignmentPeerAssessmentService.savePeerAssessmentItem(item); if(item.getScore() != null){ //item was part of the calculation, re-calculate - assignmentPeerAssessmentService.updateScore(submissionId); + boolean saved = assignmentPeerAssessmentService.updateScore(submissionId); + if(saved){ + //we need to make sure the GB is updated correctly (or removed) + String assignmentId = item.getAssignmentId(); + if(assignmentId != null){ + Assignment a = getAssignment(assignmentId, "saveReviewGradeForm", state); + if(a != null){ + String aReference = a.getReference(); + String associateGradebookAssignment = StringUtils.trimToNull(a.getProperties().getProperty(AssignmentService.PROP_ASSIGNMENT_ASSOCIATE_GRADEBOOK_ASSIGNMENT)); + // update grade in gradebook + integrateGradebook(state, aReference, associateGradebookAssignment, null, null, null, -1, null, submissionId, "update", -1); + } + } + } } state.setAttribute(GRADE_SUBMISSION_DONE, Boolean.TRUE); state.setAttribute(PEER_ASSESSMENT_REMOVED_STATUS, item.isRemoved()); @@ -10126,7 +10139,20 @@ assignmentPeerAssessmentService.savePeerAssessmentItem(item); if(scoreChanged){ //need to re-calcuate the overall score: - assignmentPeerAssessmentService.updateScore(submissionId); + boolean saved = assignmentPeerAssessmentService.updateScore(submissionId); + if(saved){ + //we need to make sure the GB is updated correctly (or removed) + String assignmentId = (String) state.getAttribute(VIEW_ASSIGNMENT_ID); + if(assignmentId != null){ + Assignment a = getAssignment(assignmentId, "saveReviewGradeForm", state); + if(a != null){ + String aReference = a.getReference(); + String associateGradebookAssignment = StringUtils.trimToNull(a.getProperties().getProperty(AssignmentService.PROP_ASSIGNMENT_ASSOCIATE_GRADEBOOK_ASSIGNMENT)); + // update grade in gradebook + integrateGradebook(state, aReference, associateGradebookAssignment, null, null, null, -1, null, submissionId, "update", -1); + } + } + } } state.setAttribute(GRADE_SUBMISSION_DONE, Boolean.TRUE); if("submit".equals(gradeOption)){ Index: assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/AssignmentPeerAssessmentServiceImpl.java =================================================================== --- assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/AssignmentPeerAssessmentServiceImpl.java (revision 134422) +++ assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/AssignmentPeerAssessmentServiceImpl.java (revision 134423) @@ -370,7 +370,8 @@ } } - public void updateScore(String submissionId){ + public boolean updateScore(String submissionId){ + boolean saved = false; SecurityAdvisor sa = new SecurityAdvisor() { public SecurityAdvice isAllowed(String userId, String function, String reference) { @@ -410,16 +411,31 @@ }else{ totalScore = null; } - AssignmentSubmissionEdit edit = assignmentService.editSubmission(submissionId); String totleScoreStr = null; if(totalScore != null){ totleScoreStr = totalScore.toString(); } - edit.setGrade(totleScoreStr); - edit.setGraded(true); - edit.setGradedBy(AssignmentPeerAssessmentService.class.getName()); - edit.setGradeReleased(false); - assignmentService.commitEdit(edit); + boolean changed = false; + if((totleScoreStr == null || "".equals(totleScoreStr)) && (submission.getGrade() == null || "".equals(submission.getGrade()))){ + //scores are both null, nothing changed + }else if((totleScoreStr != null && !"".equals(totleScoreStr)) && (submission.getGrade() == null || "".equals(submission.getGrade()))){ + //one score changed, update + changed = true; + }else if((totleScoreStr == null || "".equals(totleScoreStr)) && (submission.getGrade() != null && !"".equals(submission.getGrade()))){ + //one score changed, update + changed = true; + }else if(!totleScoreStr.equals(submission.getGrade())){ + changed = true; + } + if(changed){ + AssignmentSubmissionEdit edit = assignmentService.editSubmission(submissionId); + edit.setGrade(totleScoreStr); + edit.setGraded(true); + edit.setGradedBy(AssignmentPeerAssessmentService.class.getName()); + edit.setGradeReleased(false); + assignmentService.commitEdit(edit); + saved = true; + } } } } catch (IdUnusedException e) { @@ -435,7 +451,7 @@ securityService.popAdvisor(sa); } } - + return saved; } public void setScheduledInvocationManager(