Diff for /loncom/interface/statistics/lonstudentassessment.pm between versions 1.77 and 1.84

version 1.77, 2003/12/08 19:37:07 version 1.84, 2004/02/10 16:47:25
Line 785  sub StudentAverageTotal { Line 785  sub StudentAverageTotal {
         $total_ave += $ave;          $total_ave += $ave;
         my $max = $Statistics->{$seq->{'symb'}}->{'max'};          my $max = $Statistics->{$seq->{'symb'}}->{'max'};
         $total_max += $max;          $total_max += $max;
         if ($ave == 0) {          $ave = sprintf("%.2f",$ave);
             $ave = "0.00";  
         }  
         $ave .= ' ';  
         $max .= '   ';  
         $Str .= '<tr><td>'.$seq->{'title'}.'</td>'.          $Str .= '<tr><td>'.$seq->{'title'}.'</td>'.
             '<td align="right">'.$ave.'</td>'.              '<td align="right">'.$ave.'&nbsp;</td>'.
                 '<td align="right">'.$max.'</td></tr>'."\n";              '<td align="right">'.$max.'&nbsp;'.'</td></tr>'."\n";
     }      }
     $total_ave = int(100*$total_ave)/100; # only two digit      $total_ave = sprintf('%.2f',$total_ave); # only two digit
     $Str .= "</table>\n";      $Str .= "</table>\n";
     $Str .= '<table border=2 cellspacing="1">'."\n";      $Str .= '<table border=2 cellspacing="1">'."\n";
     $Str .= '<tr><th>Number of Students</th><th>Average</th>'.      $Str .= '<tr><th>Number of Students</th><th>Average</th>'.
         "<th>Maximum</th></tr>\n";          "<th>Maximum</th></tr>\n";
     $Str .= '<tr><td>'.($num_students-$nodata_count).'</td>'.      $Str .= '<tr>'.
         '<td>'.$total_ave.'</td><td>'.$total_max.'</td>';          '<td align="right">'.($num_students-$nodata_count).'</td>'.
           '<td align="right">'.$total_ave.'&nbsp;'.'</td>'.
           '<td align="right">'.$total_max.'&nbsp;'.'</td>';
     $Str .= "</table>\n";      $Str .= "</table>\n";
     return $Str;      return $Str;
 }  }
Line 909  You may consider reducing the number of Line 907  You may consider reducing the number of
 have selected.    have selected.  
 </p><p>  </p><p>
 LON-CAPA can produce <b>CSV</b> files of this data or Excel files of the  LON-CAPA can produce <b>CSV</b> files of this data or Excel files of the
 summary data (<b>Scores Sum</b> or <b>Scores Sum & Totals</b>).  <b>Scores Summary</b> data.
 </p>  </p>
 END  END
        $request_aborted = 1;         $request_aborted = 1;
Line 1016  END Line 1014  END
                 ($rows_output,$cols_output);                  ($rows_output,$cols_output);
             $seq->{'Excel:startcol'}=$cols_output;              $seq->{'Excel:startcol'}=$cols_output;
             # Put the names of the problems and parts into the sheet              # Put the names of the problems and parts into the sheet
               my $count = 0;
             foreach my $res (@{$seq->{'contents'}}) {              foreach my $res (@{$seq->{'contents'}}) {
                 next if ($res->{'type'} ne 'assessment');                  if ($res->{'type'} ne 'assessment'  || 
                       ! exists($res->{'parts'})       ||
                       ref($res->{'parts'}) ne 'ARRAY' ||
                       scalar(@{$res->{'parts'}}) < 1) {
                       next;
                   }
                 if (scalar(@{$res->{'parts'}}) > 1) {                  if (scalar(@{$res->{'parts'}}) > 1) {
                     foreach my $part (@{$res->{'parts'}}) {                      foreach my $part (@{$res->{'parts'}}) {
                         $excel_sheet->write($rows_output,                          $excel_sheet->write($rows_output,
Line 1029  END Line 1033  END
                                         $cols_output++,                                          $cols_output++,
                                         $res->{'title'});                                          $res->{'title'});
                 }                  }
                   $count++;
             }              }
             # Determine ending cell              # Determine ending cell
             $seq->{'Excel:endcell'} =               if ($count == 1) {
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell                  $seq->{'Excel:endcell'} = $seq->{'Excel:startcell'};
                                              ($rows_output,$cols_output-1);                  $seq->{'Excel:endcol'}  = $seq->{'Excel:startcol'};
             $seq->{'Excel:endcol'}=$cols_output-1;              } else {
             # Determine cell the score is held in                  $seq->{'Excel:endcell'} = 
             $seq->{'Excel:scorecell'} =                       &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell                          ($rows_output,$cols_output-1);
                                              ($rows_output,$cols_output);                  $seq->{'Excel:endcol'} = $cols_output-1;
             $seq->{'Excel:scorecol'}=$cols_output;              }
             $excel_sheet->write($rows_output,$cols_output++,'score');  
             # Create the formula for summing up this sequence              # Create the formula for summing up this sequence
               if (! exists($seq->{'Excel:endcell'}) ||
                   ! defined($seq->{'Excel:endcell'})) {
                   $seq->{'Excel:endcell'} = $seq->{'Excel:startcell'};
               }
             $seq->{'Excel:sum'}= $excel_sheet->store_formula              $seq->{'Excel:sum'}= $excel_sheet->store_formula
                                         ('=SUM('.$seq->{'Excel:startcell'}.                                          ('=SUM('.$seq->{'Excel:startcell'}.
                                              ':'.$seq->{'Excel:endcell'}.')');                                               ':'.$seq->{'Excel:endcell'}.')');
             #          }
             $total_formula_string.='+'.          # Determine cell the score is held in
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell          $seq->{'Excel:scorecell'} = 
                                         ($rows_output,$cols_output-1);              &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
             $excel_sheet->write($rows_output,$cols_output++,'maximum');              ($rows_output,$cols_output);
         } elsif ($data eq 'sum and total') {          $seq->{'Excel:scorecol'}=$cols_output;
             $excel_sheet->write($rows_output+1,$cols_output,'score');          if ($data eq 'parts correct total') {
             $total_formula_string.='+'.              $excel_sheet->write($rows_output,$cols_output++,'parts correct');
                 &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');  
             $cols_output += 2;  
         } else {          } else {
             $cols_output++;              $excel_sheet->write($rows_output,$cols_output++,'score');
         }          }
           #
           $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,'Grand Total');      $excel_sheet->write($rows_output,$cols_output++,'Grand Total');
     $total_formula = $excel_sheet->store_formula($total_formula_string);      $total_formula = $excel_sheet->store_formula($total_formula_string);
     #      #
     # Bookkeeping      # Bookkeeping
Line 1091  END Line 1093  END
     #      #
     # Add the maximums for each sequence or assessment      # Add the maximums for each sequence or assessment
     my %total_cell_translation;      my %total_cell_translation;
       my $grand_total = 0;
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         $total_cell_translation{$seq->{'Excel:scorecell'}} =           $total_cell_translation{$seq->{'Excel:scorecell'}} = 
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell              &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
Line 1120  END Line 1123  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++,'');
         }          }
         my %replaceCells;          #
         $replaceCells{$seq->{'Excel:startcell'}} =           if ($data eq 'tries' || $data eq 'scores') {
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell              my %replaceCells;
                                    ($rows_output,$seq->{'Excel:startcol'});              $replaceCells{$seq->{'Excel:startcell'}} = 
         $replaceCells{$seq->{'Excel:endcell'}} =                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell                  ($rows_output,$seq->{'Excel:startcol'});
                                    ($rows_output,$seq->{'Excel:endcol'});              $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);
           } else {
               $excel_sheet->write($rows_output,$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($rows_output,$cols_output++,
                                      $seq->{'Excel:sum'},undef,                                       $total_formula,undef,
                                      %replaceCells);                                       %total_cell_translation);
       } else {
           $excel_sheet->write($rows_output,$cols_output++,$grand_total);
     }      }
     $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 1207  sub excel_outputstudent { Line 1221  sub excel_outputstudent {
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell                  &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                             ($rows_output,$seq->{'Excel:endcol'});                              ($rows_output,$seq->{'Excel:endcol'});
             # The undef is for the format              # The undef is for the format
             $excel_sheet->repeat_formula($rows_output,$cols_output++,              if (scalar(keys(%replaceCells)) == 1) {
                                          $seq->{'Excel:sum'},undef,                  $excel_sheet->repeat_formula($rows_output,$cols_output++,
                                          %replaceCells);                                               $seq->{'Excel:sum'},undef,
                                                %replaceCells,%replaceCells);
               } else {
                   $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' || 
Line 1491  sub StudentTriesOnSequence { Line 1511  sub StudentTriesOnSequence {
             $performance_length++;              $performance_length++;
             my $symbol = ' '; # default to space              my $symbol = ' '; # default to space
             #              #
               my $awarded = 0;
               if (exists($resource_data->{'resource.'.$partnum.'.awarded'})) {
                   $awarded = $resource_data->{'resource.'.$partnum.'.awarded'};
                   $awarded = 0 if (! $awarded);
               }
               #
               my $status = '';
             if (exists($resource_data->{'resource.'.$partnum.'.solved'})) {              if (exists($resource_data->{'resource.'.$partnum.'.solved'})) {
                 my $status = $resource_data->{'resource.'.$partnum.'.solved'};                  $status = $resource_data->{'resource.'.$partnum.'.solved'};
                 if ($status eq 'correct_by_override') {              }
                     $symbol = '+';              #
                     $sum++;              my $tries = 0;
                 } elsif ($status eq 'incorrect_by_override') {              if(exists($resource_data->{'resource.'.$partnum.'.tries'})) {
                     $symbol = '-';                  $tries = $resource_data->{'resource.'.$partnum.'.tries'};
                 } elsif ($status eq 'ungraded_attempted') {              }
                     $symbol = '#';              #
                 } elsif ($status eq 'incorrect_attempted')  {              if ($awarded > 0) {
                     $symbol = '.';                  # The student has gotten the problem correct to some degree
                 } elsif ($status eq 'excused') {                  if ($status eq 'excused') {
                     $symbol = 'x';                      $symbol = 'x';
                     $max--;                      $max--;
                 } elsif (($status eq 'correct_by_scantron' ||                  } elsif ($status eq 'correct_by_override') {
                           $status eq 'correct_by_student') &&                      $symbol = '+';
                     exists($resource_data->{'resource.'.$partnum.'.tries'})){                      $sum++;
                     $tries = $resource_data->{'resource.'.$partnum.'.tries'};                  } elsif ($tries > 0) {
                     if ($tries > 9) {                      if ($tries > 9) {
                         $symbol = '*';                          $symbol = '*';
                     } elsif ($tries > 0) {  
                         $symbol = $tries;  
                     } else {                      } else {
                         $symbol = ' ';                          $symbol = $tries;
                     }                      }
                     $sum++;                      $sum++;
                 } elsif (exists($resource_data->{'resource.'.  
                                                      $partnum.'.tries'})){  
                     $symbol = '.';  
                 } else {                  } else {
                     $symbol = ' ';                      $symbol = '+';
                       $sum++;
                 }                  }
             } else {              } else {
                 # Unsolved.  Did they try?                  # The student has the problem incorrect or it is ungraded
                 if (exists($resource_data->{'resource.'.$partnum.'.tries'})){                  if ($status eq 'excused') {
                       $symbol = 'x';
                       $max--;
                   } elsif ($status eq 'incorrect_by_override') {
                       $symbol = '-';
                   } elsif ($status eq 'ungraded_attempted') {
                       $symbol = '#';
                   } elsif ($status eq 'incorrect_attempted' ||
                            $tries > 0)  {
                     $symbol = '.';                      $symbol = '.';
                 } else {                  } else {
                     $symbol = ' ';                      # Problem is wrong and has not been attempted.
                       $symbol=' ';
                 }                  }
             }              }
             #              #

Removed from v.1.77  
changed lines
  Added in v.1.84


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