Index: samigo-app/src/webapp/jsf/author/item/multipleChoice.jsp =================================================================== --- samigo-app/src/webapp/jsf/author/item/multipleChoice.jsp (revision 309154) +++ samigo-app/src/webapp/jsf/author/item/multipleChoice.jsp (working copy) @@ -139,6 +139,7 @@ rendered="#{itemauthor.currentItem.itemType == 2}"> @@ -151,22 +152,34 @@
+ rendered="#{(itemauthor.currentItem.itemType==1 &&(itemauthor.currentItem.partialCreditFlag=='false'||itemauthor.currentItem.partialCreditEnabled==false)) + || (itemauthor.currentItem.itemType==2 && itemauthor.currentItem.mcmsPartialCredit=='false')}"> Index: samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java =================================================================== --- samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java (revision 309154) +++ samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java (working copy) @@ -937,6 +937,7 @@ //since the itr goes through each answer (multiple answers for a signle mc question), keep track //of its total score by itemId -> autoScore[]{user's score, total possible} Map mcmcAllOrNothingCheck = new HashMap(); + Map countMcmcAllItemGradings = new HashMap(); //get item information to check if it's MCMS and Not Partial Credit Long itemType2 = -1l; String mcmsPartialCredit = ""; @@ -977,6 +978,10 @@ accumulatedScore += accumulatedScoreArr[0]; } mcmcAllOrNothingCheck.put(itemId, new Double[]{accumulatedScore, item.getScore()}); + int count = 0; + if(countMcmcAllItemGradings.containsKey(itemId)) + count = ((Integer)countMcmcAllItemGradings.get(itemId)).intValue(); + countMcmcAllItemGradings.put(itemId, new Integer(++count)); } } @@ -1034,13 +1039,28 @@ // that means the user didn't answer all of the correct answers only. // We need to set their score to 0 for all ItemGrading items for(Entry entry : mcmcAllOrNothingCheck.entrySet()){ - if(!(MathUtils.equalsIncludingNaN(entry.getValue()[0], entry.getValue()[1], 0.0001))){ + if(Double.compare(entry.getValue()[0], entry.getValue()[1]) != 0){ //reset all scores to 0 since the user didn't get all correct answers iter = itemGradingSet.iterator(); while(iter.hasNext()){ ItemGradingData itemGrading = iter.next(); - if(itemGrading.getPublishedItemId().equals(entry.getKey())){ - itemGrading.setAutoScore(Double.valueOf(0)); + Long itemId2 = entry.getKey(); + if(itemGrading.getPublishedItemId().equals(itemId2)){ + AnswerIfc answer = (AnswerIfc) publishedAnswerHash.get(itemGrading.getPublishedAnswerId()); + if (answer == null) { + itemGrading.setAutoScore(Double.valueOf(0)); + log.error("unable to retrieve answerIfc for: " + itemId2); + continue; + } + if(!countMcmcAllItemGradings.containsKey(itemId2)){ + itemGrading.setAutoScore(Double.valueOf(0)); + log.error("unable to retrieve itemGrading's counter for: " + itemId2); + continue; + } + double discount = (Math.abs(answer.getDiscount().doubleValue()) * ((double) -1)); + int count = ((Integer)countMcmcAllItemGradings.get(itemId2)).intValue(); + double itemGrDisc = discount/count; + itemGrading.setAutoScore(Double.valueOf(itemGrDisc)); } } } Index: samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/AssessmentService.java =================================================================== --- samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/AssessmentService.java (revision 309154) +++ samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/AssessmentService.java (working copy) @@ -60,6 +60,7 @@ import org.sakaiproject.tool.assessment.data.ifc.assessment.AttachmentIfc; import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemAttachmentIfc; import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemDataIfc; +import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemMetaDataIfc; import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemTextAttachmentIfc; import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemTextIfc; import org.sakaiproject.tool.assessment.data.ifc.assessment.SectionAttachmentIfc; @@ -475,10 +476,10 @@ if (hasRandomPartScore) item.setScore(score); long itemTypeId = item.getTypeId().longValue(); + String mcmsPartialCredit = item.getItemMetaDataByLabel(ItemMetaDataIfc.MCMS_PARTIAL_CREDIT); if (hasRandomPartDiscount && (itemTypeId == TypeFacade.MULTIPLE_CHOICE - .longValue() || itemTypeId == TypeFacade.TRUE_FALSE - .longValue())) + .longValue() || itemTypeId == TypeFacade.TRUE_FALSE.longValue() || (itemTypeId == TypeFacade.MULTIPLE_CORRECT.longValue()&&"false".equals(mcmsPartialCredit)))) item.setDiscount(discount); ItemDataIfc data = item.getData(); Set itemTextSet = data.getItemTextSet(); @@ -502,7 +503,7 @@ answer.setScore(score); if (hasRandomPartDiscount && (itemTypeId == TypeFacade.MULTIPLE_CHOICE.longValue() || - itemTypeId == TypeFacade.TRUE_FALSE.longValue())) + itemTypeId == TypeFacade.TRUE_FALSE.longValue() || (itemTypeId == TypeFacade.MULTIPLE_CORRECT.longValue() && "false".equals(mcmsPartialCredit)))) answer.setDiscount(discount); } }