--- loncom/interface/statistics/lonstudentassessment.pm	2005/01/05 20:01:46	1.108
+++ loncom/interface/statistics/lonstudentassessment.pm	2005/02/11 21:25:53	1.111
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstudentassessment.pm,v 1.108 2005/01/05 20:01:46 matthew Exp $
+# $Id: lonstudentassessment.pm,v 1.111 2005/02/11 21:25:53 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -358,7 +358,7 @@ sub CreateInterface {
         &mt('Clear Caches').'" />';
     $Str .= ' 'x5;
     $Str .= 
-        &mt('Status [_1]',
+        &mt('Status[_1]',
             '<input type="text" name="stats_status" size="60" value="" />');
     $Str .= '<br />';
     return $Str;
@@ -519,6 +519,7 @@ my @OutputDataOptions =
        maximum_row => 0,
        shortdesc => 'Number of Tries before success on each Problem Part',
        longdesc =>'The number of tries before success on each problem part.',
+       non_html_notes => 'negative values indicate an incorrect problem',
        },
      { name  =>'Parts Correct',
        base  =>'tries',
@@ -954,6 +955,7 @@ sub excel_initialize {
     # Determine rows 
     my $header_row = $rows_output++;
     my $description_row = $rows_output++;
+    my $notes_row = $rows_output++;
     $rows_output++;        # blank row
     my $summary_header_row;
     if ($chosen_output->{'summary_table'}) {
@@ -1028,7 +1030,13 @@ sub excel_initialize {
     $cols_output = 0;
     $excel_sheet->write($description_row,$cols_output++,
                         $chosen_output->{'shortdesc'},
-                        $format->{'h3'});
+                        $format->{'b'});
+    #
+    $cols_output = 0;
+    $excel_sheet->write($notes_row,$cols_output++,
+                        $chosen_output->{'non_html_notes'},
+                        $format->{'i'});
+    
     ##############################################
     # Output headings for the raw data
     ##############################################
@@ -1196,16 +1204,15 @@ sub excel_initialize {
             #
             if ($chosen_output->{'sequence_sum'} && 
                 $chosen_output->{'every_problem'}) {
-                my %replaceCells;
-                $replaceCells{$seq->{'Excel:startcell'}} = 
-                    &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-                    ($maximum_data_row,$seq->{'Excel:startcol'});
-                $replaceCells{$seq->{'Excel:endcell'}} = 
-                    &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
-                    ($maximum_data_row,$seq->{'Excel:endcol'});
+		my %replaceCells=
+		    ('^'.$seq->{'Excel:startcell'}.':'.
+		         $seq->{'Excel:endcell'}.'$' =>
+		     &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell($maximum_data_row,$seq->{'Excel:startcol'}).':'.
+		     &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell($maximum_data_row,$seq->{'Excel:endcol'}));
                 $excel_sheet->repeat_formula($maximum_data_row,$cols_output++,
                                              $seq->{'Excel:sum'},undef,
-                                             %replaceCells);
+					     %replaceCells);
+			
             } elsif ($chosen_output->{'sequence_sum'}) {
                 $excel_sheet->write($maximum_data_row,$cols_output++,$max);
             }
@@ -1375,23 +1382,16 @@ sub excel_outputstudent {
         if ($chosen_output->{'sequence_sum'} && 
             $chosen_output->{'every_problem'}) {
             # 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
-            if (scalar(keys(%replaceCells)) == 1) {
-                $excel_sheet->repeat_formula($rows_output,$cols_output++,
-                                             $seq->{'Excel:sum'},undef,
-                                             %replaceCells,%replaceCells);
-            } else {
-                $excel_sheet->repeat_formula($rows_output,$cols_output++,
-                                             $seq->{'Excel:sum'},undef,
-                                             %replaceCells);
-            }
+            my %replaceCells=
+		('^'.$seq->{'Excel:startcell'}.':'.$seq->{'Excel:endcell'}.'$'
+		 => 
+		 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell($rows_output,$seq->{'Excel:startcol'}).':'.
+		 &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);
         } elsif ($chosen_output->{'sequence_sum'}) {
             if ($score eq ' ') {
                 $cols_output++;
@@ -1516,6 +1516,12 @@ END
     print $outputfile '"'.&Apache::loncommon::csv_translate($description).'",'.
         '"'.&Apache::loncommon::csv_translate(scalar(localtime(time))).'"'.
             "\n";
+    foreach my $item ('shortdesc','non_html_notes') {
+        next if (! exists($chosen_output->{$item}));
+        print $outputfile 
+            '"'.&Apache::loncommon::csv_translate($chosen_output->{$item}).'"'.
+            "\n";
+    }
     #
     # Print out the headings
     my $sequence_row = '';
@@ -1773,10 +1779,16 @@ sub StudentTriesOnSequence {
                 }
             }
             #
-            if (! defined($tries) || $symbol eq '.') {
-                $tries = $symbol;
+            if (! defined($tries)) {
+                $tries = 0;
+            }
+            if ($status =~ /^(incorrect|ungraded)/) {
+                # Bug 3390: show '-' for tries on incorrect problems 
+                # (csv & excel only)
+                push(@TriesData,-$tries);
+            } else {
+                push (@TriesData,$tries);
             }
-            push (@TriesData,$tries);
             #
             if ( ($links eq 'yes' && $symbol ne ' ') ||
                  ($links eq 'all')) {
@@ -1881,7 +1893,7 @@ sub StudentPerformanceOnSequence {
                     $max -= $weight; # Do not count 'excused' problems.
                 }
                 $hasdata = 1;
-            } else {
+            } elsif (!exists($resource_data->{'resource.'.$part.'.awarded'})){
                 # Unsolved.  Did they try?
                 if (exists($resource_data->{'resource.'.$part.'.tries'})){
                     $symbol = '.';