Diff for /loncom/interface/statistics/lonstudentassessment.pm between versions 1.75 and 1.76

version 1.75, 2003/11/20 20:21:17 version 1.76, 2003/12/05 21:04:34
Line 56  use Apache::loncoursedata; Line 56  use Apache::loncoursedata;
 use Apache::lonnet; # for logging porpoises  use Apache::lonnet; # for logging porpoises
 use Apache::lonlocal;  use Apache::lonlocal;
 use Spreadsheet::WriteExcel;  use Spreadsheet::WriteExcel;
   use Spreadsheet::WriteExcel::Utility();
   
 #######################################################  #######################################################
 #######################################################  #######################################################
Line 859  my $cols_output; Line 860  my $cols_output;
 my %prog_state; # progress window state  my %prog_state; # progress window state
 my $request_aborted;  my $request_aborted;
   
   my $total_formula;
   
 sub excel_initialize {  sub excel_initialize {
     my ($r) = @_;      my ($r) = @_;
     #      #
Line 869  sub excel_initialize { Line 872  sub excel_initialize {
     undef ($cols_output);      undef ($cols_output);
     undef (%prog_state);      undef (%prog_state);
     undef ($request_aborted);      undef ($request_aborted);
       undef ($total_formula);
     #      #
     my $total_columns = scalar(&get_student_fields_to_show());      my $total_columns = scalar(&get_student_fields_to_show());
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
Line 1000  END Line 1004  END
     }      }
     #      #
     # Add the remaining column headers      # Add the remaining column headers
       my $total_formula_string = '=0';
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         $excel_sheet->write($rows_output+$row_offset,          $excel_sheet->write($rows_output+$row_offset,
                             $cols_output,$seq->{'title'});                              $cols_output,$seq->{'title'});
         if ($data eq 'tries' || $data eq 'scores') {          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
             foreach my $res (@{$seq->{'contents'}}) {              foreach my $res (@{$seq->{'contents'}}) {
                 next if ($res->{'type'} ne 'assessment');                  next if ($res->{'type'} ne 'assessment');
                 if (scalar(@{$res->{'parts'}}) > 1) {                  if (scalar(@{$res->{'parts'}}) > 1) {
Line 1018  END Line 1029  END
                                         $res->{'title'});                                          $res->{'title'});
                 }                  }
             }              }
               # Determine ending cell
               $seq->{'Excel:endcell'} = 
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                                                ($rows_output,$cols_output-1);
               $seq->{'Excel:endcol'}=$cols_output-1;
               # Determine cell the score is held in
               $seq->{'Excel:scorecell'} = 
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                                                ($rows_output,$cols_output);
               $seq->{'Excel:scorecol'}=$cols_output;
             $excel_sheet->write($rows_output,$cols_output++,'score');              $excel_sheet->write($rows_output,$cols_output++,'score');
               # Create the formula for summing up this sequence
               $seq->{'Excel:sum'}= $excel_sheet->store_formula
                                           ('=SUM('.$seq->{'Excel:startcell'}.
                                                ':'.$seq->{'Excel:endcell'}.')');
               #
               $total_formula_string.='+'.
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                                           ($rows_output,$cols_output-1);
             $excel_sheet->write($rows_output,$cols_output++,'maximum');              $excel_sheet->write($rows_output,$cols_output++,'maximum');
         } elsif ($data eq 'sum and total' || $data eq 'parts correct total') {          } elsif ($data eq 'sum and total') {
             $excel_sheet->write($rows_output+1,$cols_output,'score');              $excel_sheet->write($rows_output+1,$cols_output,'score');
               $total_formula_string.='+'.
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                                           ($rows_output+1,$cols_output);
               $excel_sheet->write($rows_output+1,$cols_output+1,'maximum');
               $cols_output += 2;
           } elsif ($data eq 'parts correct total') {
               $excel_sheet->write($rows_output+1,$cols_output,'parts correct');
               $total_formula_string.='+'.
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                                           ($rows_output+1,$cols_output);
             $excel_sheet->write($rows_output+1,$cols_output+1,'maximum');              $excel_sheet->write($rows_output+1,$cols_output+1,'maximum');
             $cols_output += 2;              $cols_output += 2;
         } else {          } else {
             $cols_output++;              $cols_output++;
         }          }
     }      }
       $excel_sheet->write($rows_output,$cols_output,'Grand Total');
       $total_formula = $excel_sheet->store_formula($total_formula_string);
     #      #
     # Bookkeeping      # Bookkeeping
     if ($data eq 'sum and total' || $data eq 'parts correct total') {      if ($data eq 'sum and total' || $data eq 'parts correct total') {
Line 1048  END Line 1089  END
     }      }
     #      #
     # Add the maximums for each sequence or assessment      # Add the maximums for each sequence or assessment
       my %total_cell_translation;
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      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'});
         my $weight;          my $weight;
         my $max = 0;          my $max = 0;
         foreach my $resource (@{$seq->{'contents'}}) {          foreach my $resource (@{$seq->{'contents'}}) {
Line 1074  END Line 1119  END
         if (! ($data eq 'sum only' || $data eq 'parts correct')) {          if (! ($data eq 'sum only' || $data eq 'parts correct')) {
             $excel_sheet->write($rows_output,$cols_output++,'');              $excel_sheet->write($rows_output,$cols_output++,'');
         }          }
         $excel_sheet->write($rows_output,$cols_output++,$max);          my %replaceCells;
     }          $replaceCells{$seq->{'Excel:startcell'}} = 
               &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                                      ($rows_output,$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++,
                                        $seq->{'Excel:sum'},undef,
                                        %replaceCells);
       }
       $excel_sheet->repeat_formula($rows_output,$cols_output++,
                                    $total_formula,undef,
                                    %total_cell_translation);
     $rows_output++;      $rows_output++;
     #      #
     # Let the user know what we are doing      # Let the user know what we are doing
Line 1119  sub excel_outputstudent { Line 1176  sub excel_outputstudent {
     }      }
     #      #
     # Write out sequence scores and totals data      # Write out sequence scores and totals data
       my %total_cell_translation;
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
           # Keep track of cells to translate in total cell
           $total_cell_translation{$seq->{'Excel:scorecell'}} = 
               &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                           ($rows_output,$seq->{'Excel:scorecol'});
           #
         my ($performance,$performance_length,$score,$seq_max,$rawdata);          my ($performance,$performance_length,$score,$seq_max,$rawdata);
         if ($base eq 'tries') {          if ($base eq 'tries') {
             ($performance,$performance_length,$score,$seq_max,$rawdata) =              ($performance,$performance_length,$score,$seq_max,$rawdata) =
Line 1134  sub excel_outputstudent { Line 1197  sub excel_outputstudent {
             foreach my $value (@$rawdata) {              foreach my $value (@$rawdata) {
                 $excel_sheet->write($rows_output,$cols_output++,$value);                  $excel_sheet->write($rows_output,$cols_output++,$value);
             }              }
             $excel_sheet->write($rows_output,$cols_output++,$score);              # Write a formula for the sum of this sequence
               my %replaceCells;
               $replaceCells{$seq->{'Excel:startcell'}} = 
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                               ($rows_output,$seq->{'Excel:startcol'});
               $replaceCells{$seq->{'Excel:endcell'}} = 
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                               ($rows_output,$seq->{'Excel:endcol'});
               # The undef is for the format
               $excel_sheet->repeat_formula($rows_output,$cols_output++,
                                            $seq->{'Excel:sum'},undef,
                                            %replaceCells);
               #
             $excel_sheet->write($rows_output,$cols_output++,$seq_max);              $excel_sheet->write($rows_output,$cols_output++,$seq_max);
         } elsif ($data eq 'sum and total' || $data eq 'sum only' ||           } elsif ($data eq 'sum and total' || $data eq 'sum only' || 
             $data eq 'parts correct' || $data eq 'parts correct total') {              $data eq 'parts correct' || $data eq 'parts correct total') {
Line 1145  sub excel_outputstudent { Line 1220  sub excel_outputstudent {
         }          }
     }      }
     #      #
       $excel_sheet->repeat_formula($rows_output,$cols_output++,
                                    $total_formula,undef,
                                    %total_cell_translation);
   
       #
     # Bookkeeping      # Bookkeeping
     $rows_output++;       $rows_output++; 
     $cols_output=0;      $cols_output=0;

Removed from v.1.75  
changed lines
  Added in v.1.76


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>