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

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 11 Feb 2004 17:42:34 -0000


This is a MIME encoded message

--matthew1076521354
Content-Type: text/plain

matthew		Wed Feb 11 12:42:34 2004 EDT

  Modified files:              
    /loncom/interface/statistics	lonstudentassessment.pm 
  Log:
  Fix and cleanup excel output of scores summary and scores tries by being 
  explicit about which row we are in.
  
  
--matthew1076521354
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040211124234.txt"

Index: loncom/interface/statistics/lonstudentassessment.pm
diff -u loncom/interface/statistics/lonstudentassessment.pm:1.85 loncom/interface/statistics/lonstudentassessment.pm:1.86
--- loncom/interface/statistics/lonstudentassessment.pm:1.85	Wed Feb 11 11:02:37 2004
+++ loncom/interface/statistics/lonstudentassessment.pm	Wed Feb 11 12:42:34 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstudentassessment.pm,v 1.85 2004/02/11 16:02:37 matthew Exp $
+# $Id: lonstudentassessment.pm,v 1.86 2004/02/11 17:42:34 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1007,28 +1007,30 @@
         $rows_output++;
     }
     #
+    # Figure out the rows we need
+    my $sequence_name_row = $rows_output+1;
+    my $resource_name_row = $sequence_name_row+1;
+    my $maximum_data_row = $sequence_name_row+2;
+    my $first_data_row = $sequence_name_row+3;
+    #
     # Add the student headers
     $cols_output = 0;
     foreach my $field (&get_student_fields_to_show()) {
-        $excel_sheet->write($rows_output,$cols_output++,$field,
+        $excel_sheet->write($resource_name_row,$cols_output++,$field,
                             $format->{'bold'});
     }
-    my $row_offset = 0;
-    if ($data eq 'tries' || $data eq 'scores') {
-        $row_offset = -1;
-    }
     #
     # Add the remaining column headers
     my $total_formula_string = '=0';
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
-        $excel_sheet->write($rows_output+$row_offset,
+        $excel_sheet->write($sequence_name_row,,
                             $cols_output,$seq->{'title'},$format->{'h3'});
+        # Determine starting cell
+        $seq->{'Excel:startcell'}=
+            &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
+            ($maximum_data_row,$cols_output);
+        $seq->{'Excel:startcol'}=$cols_output;
         if ($data eq 'tries' || $data eq 'scores') {
-            # Determine starting cell
-            $seq->{'Excel:startcell'}=
-                &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-                ($rows_output,$cols_output);
-            $seq->{'Excel:startcol'}=$cols_output;
             # Put the names of the problems and parts into the sheet
             my $count = 0;
             foreach my $res (@{$seq->{'contents'}}) {
@@ -1040,13 +1042,13 @@
                 }
                 if (scalar(@{$res->{'parts'}}) > 1) {
                     foreach my $part (@{$res->{'parts'}}) {
-                        $excel_sheet->write($rows_output,
+                        $excel_sheet->write($resource_name_row,
                                             $cols_output++,
                                             $res->{'title'}.' part '.$part,
                                             $format->{'bold'});
                     }
                 } else {
-                    $excel_sheet->write($rows_output,
+                    $excel_sheet->write($resource_name_row,
                                         $cols_output++,
                                         $res->{'title'},$format->{'bold'});
                 }
@@ -1059,7 +1061,7 @@
             } else {
                 $seq->{'Excel:endcell'} = 
                     &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-                        ($rows_output,$cols_output-1);
+                            ($maximum_data_row,$cols_output-1);
                 $seq->{'Excel:endcol'} = $cols_output-1;
             }
             # Create the formula for summing up this sequence
@@ -1074,42 +1076,38 @@
         # Determine cell the score is held in
         $seq->{'Excel:scorecell'} = 
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-            ($rows_output,$cols_output);
+            ($maximum_data_row,$cols_output);
         $seq->{'Excel:scorecol'}=$cols_output;
         if ($data eq 'parts correct total') {
-            $excel_sheet->write($rows_output,$cols_output++,'parts correct',
+            $excel_sheet->write($resource_name_row,$cols_output++,
+                                'parts correct',
                                 $format->{'bold'});
         } else {
-            $excel_sheet->write($rows_output,$cols_output++,'score',
+            $excel_sheet->write($resource_name_row,$cols_output++,
+                                'score',
                                 $format->{'bold'});
         }
         #
         $total_formula_string.='+'.
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-            ($rows_output,$cols_output-1);
-        $excel_sheet->write($rows_output,$cols_output++,'maximum',
+            ($maximum_data_row,$cols_output-1);
+        $excel_sheet->write($resource_name_row,$cols_output++,
+                            'maximum',
                             $format->{'bold'});
     }
-    $excel_sheet->write($rows_output,$cols_output++,'Grand Total',
+    $excel_sheet->write($resource_name_row,$cols_output++,'Grand Total',
                         $format->{'bold'});
     $total_formula = $excel_sheet->store_formula($total_formula_string);
     #
-    # Bookkeeping
-    if ($data eq 'sum and total' || $data eq 'parts correct total') {
-        $rows_output += 2;
-    } else {
-        $rows_output += 1;
-    }
-    #
     # Output a row for MAX
     $cols_output = 0;
     foreach my $field (&get_student_fields_to_show()) {
         if ($field eq 'username' || $field eq 'fullname' || 
             $field eq 'id') {
-            $excel_sheet->write($rows_output,$cols_output++,'Maximum',
+            $excel_sheet->write($maximum_data_row,$cols_output++,'Maximum',
                                 $format->{'bold'});
         } else {
-            $excel_sheet->write($rows_output,$cols_output++,'');
+            $excel_sheet->write($maximum_data_row,$cols_output++,'');
         }
     }
     #
@@ -1119,7 +1117,7 @@
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         $total_cell_translation{$seq->{'Excel:scorecell'}} = 
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-                        ($rows_output,$seq->{'Excel:scorecol'});
+                        ($maximum_data_row,$seq->{'Excel:scorecol'});
         my $weight;
         my $max = 0;
         foreach my $resource (@{$seq->{'contents'}}) {
@@ -1135,42 +1133,42 @@
                     }
                 }
                 if ($data eq 'scores') {
-                    $excel_sheet->write($rows_output,$cols_output++,$weight);
+                    $excel_sheet->write($maximum_data_row,$cols_output++,$weight);
                 } elsif ($data eq 'tries') {
-                    $excel_sheet->write($rows_output,$cols_output++,'');
+                    $excel_sheet->write($maximum_data_row,$cols_output++,'');
                 }
                 $max += $weight;
             }
         } 
         if (! ($data eq 'sum only' || $data eq 'parts correct')) {
-            $excel_sheet->write($rows_output,$cols_output++,'');
+            $excel_sheet->write($maximum_data_row,$cols_output++,'');
         }
         #
         if ($data eq 'tries' || $data eq 'scores') {
             my %replaceCells;
             $replaceCells{$seq->{'Excel:startcell'}} = 
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-                ($rows_output,$seq->{'Excel:startcol'});
+                ($maximum_data_row,$seq->{'Excel:startcol'});
             $replaceCells{$seq->{'Excel:endcell'}} = 
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-                ($rows_output,$seq->{'Excel:endcol'});
-            $excel_sheet->repeat_formula($rows_output,$cols_output++,
+                ($maximum_data_row,$seq->{'Excel:endcol'});
+            $excel_sheet->repeat_formula($maximum_data_row,$cols_output++,
                                          $seq->{'Excel:sum'},undef,
                                          %replaceCells);
         } else {
-            $excel_sheet->write($rows_output,$cols_output++,
+            $excel_sheet->write($maximum_data_row,$cols_output++,
                                 $max);
         }
         $grand_total+=$max;
     }
     if ($data eq 'tries' || $data eq 'scores') {
-        $excel_sheet->repeat_formula($rows_output,$cols_output++,
+        $excel_sheet->repeat_formula($maximum_data_row,$cols_output++,
                                      $total_formula,undef,
                                      %total_cell_translation);
     } else {
-        $excel_sheet->write($rows_output,$cols_output++,$grand_total);
+        $excel_sheet->write($maximum_data_row,$cols_output++,$grand_total);
     }
-    $rows_output++;
+    $rows_output = $first_data_row;
     #
     # Let the user know what we are doing
     my $studentcount = scalar(@Apache::lonstatistics::Students); 

--matthew1076521354--