xowf::test_item::grading::Grading method grading_dict (public)

 <instance of xowf::test_item::grading::Grading[i]> grading_dict \
    achieved_points

Defined in packages/xowf/tcl/grading-procs.tcl

Important dict members of "achieved_points": - achievedPoints: points that the student has achieved in her exam - achievablePoints: points that the student could have achieved so far - totalPoints: points that the student can achieve when finishing the exam achieved_points: {achievedPoints 4.0 achievablePoints 4 totalPoints 4} percentage_mapping: {50.0 60.0 70.0 80.0} While "achievedPoints" and "achievablePoints" are calculated by iterating over the submitted values, "totalPoints" contains the sum of points of all questions of the exam, no matter if these were answered or not.

Parameters:
achieved_points

Partial Call Graph (max 5 caller/called nodes):
%3 xo::show_stack xo::show_stack xowf::test_item::grading::Grading instproc grading_dict xowf::test_item::grading::Grading instproc grading_dict xowf::test_item::grading::Grading instproc grading_dict->xo::show_stack

Testcases:
No testcase defined.
Source code:
if {![dict exists $achieved_points achievablePoints] && [dict exists $achieved_points totalPoints]} {
  ns_log warning "test_item::grading legacy call, use 'achievablePoints' instead of 'totalPoints'"
  dict set achieved_points achievablePoints [dict get $achieved_points totalPoints]
}
#
# When the "achievedPoints" member is set to empty, and "details" are
# provided, the caller can request a new calculation based on
# the "details" member.
#
if {[dict get $achieved_points achievedPoints] eq ""
    && [dict exists $achieved_points details]
  } {
  set achievablePoints 0
  set achievedPoints 0
  #ns_log notice "RECALC in grading_dict "
  foreach detail [dict get $achieved_points details] {
    #ns_log notice "RECALC in grading_dict '$detail'"
    set achievedPoints   [expr {$achievedPoints   + [dict get $detail achieved]}]
    set achievablePoints [expr {$achievablePoints + [dict get $detail achievable]}]
  }
  dict set achieved_points achievedPoints $achievedPoints
  dict set achieved_points achievablePoints $achievablePoints
}

foreach key {
  achievedPoints
  achievablePoints
  totalPoints
} {
  if {![dict exists $achieved_points $key]} {
    ns_log warning "test_item::grading dict without $key: $achieved_points"
    ::xo::show_stack
    dict set achieved_points $key 0
  }
}
#
# Format all values with two comma precision. The values
# achievedPointsRounded and "percentageRounded" are rounded to
# the custom precision.
#
dict with achieved_points {
  dict set achieved_points achievedPointsRounded [format %.${:precision}$achievedPoints]
  set achievedPoints [format %.2f $achievedPoints]
  set percentage  [format %.2f [expr {$totalPoints > 0 ? ($achievedPoints*100.0/$totalPoints) : 0}]]
  dict set achieved_points percentage $percentage
  dict set achieved_points percentageRounded [format %.${:precision}$percentage]
}
#ns_log notice "R=$achieved_points"
return $achieved_points
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: