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

matthew lon-capa-cvs@mail.lon-capa.org
Tue, 18 May 2004 17:43:36 -0000


matthew		Tue May 18 13:43:36 2004 EDT

  Modified files:              
    /loncom/interface/statistics	lonstudentassessment.pm 
  Log:
  Bug 2193: Chart Excel needs maximum possible total for each student.
  
  
Index: loncom/interface/statistics/lonstudentassessment.pm
diff -u loncom/interface/statistics/lonstudentassessment.pm:1.100 loncom/interface/statistics/lonstudentassessment.pm:1.101
--- loncom/interface/statistics/lonstudentassessment.pm:1.100	Thu Apr  1 13:49:39 2004
+++ loncom/interface/statistics/lonstudentassessment.pm	Tue May 18 13:43:36 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstudentassessment.pm,v 1.100 2004/04/01 18:49:39 matthew Exp $
+# $Id: lonstudentassessment.pm,v 1.101 2004/05/18 17:43:36 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -476,6 +476,7 @@
        sequence_sum => 1,
        sequence_max => 1,
        grand_total => 1,
+       grand_maximum => 1,
        summary_table => 1,
        maximum_row => 1,
        shortdesc => 'Total Score and Maximum Possible for each '.
@@ -493,6 +494,7 @@
        sequence_sum => 1,
        sequence_max => 1,
        grand_total => 1,
+       grand_maximum => 1,
        summary_table => 1,
        maximum_row => 1,
        shortdesc => 'Score on each Problem Part',
@@ -509,6 +511,7 @@
        sequence_sum => 0,
        sequence_max => 0,
        grand_total => 0,
+       grand_maximum => 0,
        summary_table => 0,
        maximum_row => 0,
        shortdesc => 'Number of Tries before success on each Problem Part',
@@ -524,6 +527,7 @@
        sequence_sum => 1,
        sequence_max => 1,
        grand_total => 1,
+       grand_maximum => 1,
        summary_table => 1,
        maximum_row => 0,
        shortdesc => 'Number of Problem Parts completed successfully.',
@@ -888,6 +892,7 @@
 my $request_aborted;
 
 my $total_formula;
+my $maximum_formula;
 
 sub excel_initialize {
     my ($r) = @_;
@@ -900,6 +905,7 @@
     undef (%prog_state);
     undef ($request_aborted);
     undef ($total_formula);
+    undef ($maximum_formula);
     #
     my $total_columns = scalar(&get_student_fields_to_show());
     my $num_students = scalar(@Apache::lonstatistics::Students);
@@ -1048,6 +1054,7 @@
     #
     # Add the remaining column headers
     my $total_formula_string = '=0';
+    my $maximum_formula_string = '=0';
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         $excel_sheet->write($sequence_name_row,,
                             $cols_output,$seq->{'title'},$format->{'bold'});
@@ -1125,16 +1132,30 @@
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
             ($first_data_row,$cols_output-1);
         if ($chosen_output->{'sequence_max'}) {
-            $excel_sheet->write($resource_name_row,$cols_output++,
+            $excel_sheet->write($resource_name_row,$cols_output,
                                 'maximum',
                                 $format->{'bold'});
+            $seq->{'Excel:maxcell'} = 
+                &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
+                ($first_data_row,$cols_output);
+            $seq->{'Excel:maxcol'}=$cols_output;
+            $maximum_formula_string.='+'.
+                &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
+                ($first_data_row,$cols_output);
+            $cols_output++;
+
         }
     }
     if ($chosen_output->{'grand_total'}) {
         $excel_sheet->write($resource_name_row,$cols_output++,'Total',
                             $format->{'bold'});
     }
+    if ($chosen_output->{'grand_maximum'}) {
+        $excel_sheet->write($resource_name_row,$cols_output++,'Max. Total',
+                            $format->{'bold'});
+    }
     $total_formula = $excel_sheet->store_formula($total_formula_string);
+    $maximum_formula = $excel_sheet->store_formula($maximum_formula_string);
     ##############################################
     # Output a row for MAX, if appropriate
     ##############################################
@@ -1152,11 +1173,15 @@
         #
         # Add the maximums for each sequence or assessment
         my %total_cell_translation;
+        my %maximum_cell_translation;
         foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
             $cols_output=$seq->{'Excel:startcol'};
             $total_cell_translation{$seq->{'Excel:scorecell'}} = 
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                 ($maximum_data_row,$seq->{'Excel:scorecol'});
+            $maximum_cell_translation{$seq->{'Excel:maxcell'}} = 
+                &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
+                ($maximum_data_row,$seq->{'Excel:maxcol'});
             my $weight;
             my $max = 0;
             foreach my $resource (@{$seq->{'contents'}}) {
@@ -1205,6 +1230,11 @@
                                          $total_formula,undef,
                                          %total_cell_translation);
         }
+        if ($chosen_output->{'grand_maximum'}) {
+            $excel_sheet->repeat_formula($maximum_data_row,$cols_output++,
+                                         $maximum_formula,undef,
+                                         %total_cell_translation);
+        }
     } # End of MAXIMUM row output  if ($chosen_output->{'maximum_row'}) {
     $rows_output = $first_data_row;
     ##############################################
@@ -1306,6 +1336,7 @@
     #
     # Write out sequence scores and totals data
     my %total_cell_translation;
+    my %maximum_cell_translation;
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         $cols_output = $seq->{'Excel:startcol'};
         # Keep track of cells to translate in total cell
@@ -1379,6 +1410,11 @@
                                      $total_formula,undef,
                                      %total_cell_translation);
     }
+    if ($chosen_output->{'grand_maximum'}) {
+        $excel_sheet->repeat_formula($rows_output,$cols_output++,
+                                     $maximum_formula,undef,
+                                     %total_cell_translation);
+    }
     #
     # Bookkeeping
     $rows_output++; 
@@ -1526,6 +1562,10 @@
         $sequence_row.= '"",';
         $resource_row.= '"Total",';
     } 
+    if ($chosen_output->{'grand_maximum'}) {
+        $sequence_row.= '"",';
+        $resource_row.= '"Maximum",';
+    } 
     chomp($sequence_row);
     chomp($resource_row);
     print $outputfile $sequence_row."\n";
@@ -1557,6 +1597,7 @@
     #
     # Output performance data
     my $total = 0;
+    my $maximum = 0;
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         my ($performance,$performance_length,$score,$seq_max,$rawdata);
         if ($chosen_output->{'tries'}){
@@ -1590,9 +1631,13 @@
             $Str .= '"'.$seq_max.'",';
         }
         $total+=$score;
+        $maximum += $seq_max;
     }
     if ($chosen_output->{'grand_total'}) {
         $Str .= '"'.$total.'",';
+    }
+    if ($chosen_output->{'grand_maximum'}) {
+        $Str .= '"'.$maximum.'",';
     }
     chop($Str);
     $Str .= "\n";