[LON-CAPA-cvs] cvs: loncom /interface lonquickgrades.pm

www www@source.lon-capa.org
Wed, 01 Jun 2011 20:32:30 -0000


www		Wed Jun  1 20:32:30 2011 EDT

  Modified files:              
    /loncom/interface	lonquickgrades.pm 
  Log:
  Calculations working now. Next step: optimization
  
  
Index: loncom/interface/lonquickgrades.pm
diff -u loncom/interface/lonquickgrades.pm:1.95 loncom/interface/lonquickgrades.pm:1.96
--- loncom/interface/lonquickgrades.pm:1.95	Sat May 28 16:55:49 2011
+++ loncom/interface/lonquickgrades.pm	Wed Jun  1 20:32:30 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Quick Student Grades Display
 #
-# $Id: lonquickgrades.pm,v 1.95 2011/05/28 16:55:49 www Exp $
+# $Id: lonquickgrades.pm,v 1.96 2011/06/01 20:32:30 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -588,8 +588,10 @@
 
 sub output_category_table {
     my ($r,$cangrade,$navmaps,%categories)=@_;
-    my $sum=0;
-    my $total=0;
+    
+    my $totalweight=0;
+    my $totalpoints=0;
+
     $r->print(&Apache::loncommon::start_data_table());
 #
     &output_category_table_header($r,$cangrade);
@@ -600,14 +602,18 @@
     my $maxpos=$#order;
     for (my $i=0;$i<=$maxpos;$i++) {
         my ($correct,$possible,$type,$weight)=&output_and_calc_category($r,$cangrade,$navmaps,$order[$i],$i,$maxpos,\%performance,1,%categories);
-        $sum+=$correct*$weight;
-        $total+=$weight;
+        unless ($possible) { next; }
+        $totalpoints+=$weight*$correct/$possible;
+        $totalweight+=$weight;
     }
 #
-    &bottom_line_category($r,$cangrade,$sum,$total);
+    my $perc=0;
+    if ($totalweight) { $perc=100.*$totalpoints/$totalweight; }
+
+    &bottom_line_category($r,$cangrade,$perc);
 #
     $r->print(&Apache::loncommon::end_data_table());
-    return $sum;
+    return $perc;
 }
 
 sub output_category_table_header {
@@ -681,7 +687,7 @@
         if ($possible>0) { push(@individual,"$possible:$correct"); }
         if ($output) {
            $r->print('<li>');
-           $r->print(&Apache::lonnet::gettitle($contentid).' ('.$correct.'/'.$possible.')');
+           $r->print(&Apache::lonnet::gettitle($contentid).' ('.&numberout($correct).'/'.&numberout($possible).')');
            if ($cangrade) {
               $r->print(' <a href="javascript:storecmd(\'delcont_'.$id.'______'.$contentid.'\');">'.&mt('Delete').'</a>');
            }
@@ -693,7 +699,7 @@
        if ($cangrade) {
            $r->print('<br />'.&Apache::loncommon::selectresource_link('quickform','addcont_'.$id,&mt('Add Problem or Folder')).'<br />');
        }
-       $r->print('<p>'.&mt('Total raw points: [_1]/[_2]',$totalcorrect,$totalpossible).'</p>');
+       $r->print('<p><b>'.&mt('Total raw points: [_1]/[_2]',&numberout($totalcorrect),&numberout($totalpossible)).'</b></p>');
        $r->print('</td>'); 
     }
 # Total
@@ -718,7 +724,7 @@
        $totalpossible=1.*$categories{$id.'_total'};
     }
     if ($output) {
-       $r->print('<p>'.&mt('Adjusted raw points: [_1]/[_2]',$totalcorrect,$totalpossible).'</p>');
+       $r->print('<p><b>'.&mt('Adjusted raw points: [_1]/[_2]',&numberout($totalcorrect),&numberout($totalpossible)).'</b></p>');
     }
 
 
@@ -762,7 +768,7 @@
     if ($output) { 
         $r->print('</ul>'); 
         if ($cangrade) { $r->print('<br />'.&new_calc_rule_form($id)); }
-        $r->print('<p>'.&mt('Calculated points: [_1]/[_2]',$totalcorrect,$totalpossible).'</p>');
+        $r->print('<p><b>'.&mt('Calculated points: [_1]/[_2]',&numberout($totalcorrect),&numberout($totalpossible)).'</b></p>');
         $r->print('</td>'); 
     }
 #
@@ -795,17 +801,17 @@
         }
     }
     if ($output) {
-        $r->print('<p>');
+        $r->print('<p><b>');
         if ($type eq 'percent') {
             my $perc='---';
             if ($totalpossible) {
                 $perc=100.*$totalcorrect/$totalpossible;
             }
-            $r->print(&mt('[_1] percent',$perc));
+            $r->print(&mt('[_1] percent',&numberout($perc)));
         } else {
-            $r->print(&mt('[_1]/[_2] points',$totalcorrect,$totalpossible));
+            $r->print(&mt('[_1]/[_2] points',&numberout($totalcorrect),&numberout($totalpossible)));
         }
-        $r->print('</p>');
+        $r->print('</b></p>');
     }
     if ($output) { $r->print('</td>'); }
 
@@ -857,14 +863,21 @@
 #
 
 sub bottom_line_category {
-    my ($r,$cangrade,$sum,$total)=@_;
+    my ($r,$cangrade,$perc)=@_;
     $r->print(&Apache::loncommon::start_data_table_row());
     if ($cangrade) {
         $r->print('<td colspan="3"><a href="javascript:storecmd(\'createnewcat\');">'.&mt('Create New Category').'</a></td>');
     }
-    $r->print('<td colspan="6">'.&mt('Current:').$sum.'<br />'.&mt('Total:').$total.'<br /></td>');
+    $r->print('<td colspan="6"><b>'.&mt('Total: [_1] percent',&numberout($perc)).'</b></td>');
 }
 
+sub numberout {
+    my ($number)=@_;
+    my $printout=sprintf("%.3f", $number);
+    $printout=~s/0+$//;
+    $printout=~s/\.$//;
+    return $printout;
+}
 #
 # Make one new category
 #