Bug 12622: Fix export report as ods
authorJonathan Druart <jonathan.druart@biblibre.com>
Tue, 22 Jul 2014 10:15:35 +0000 (12:15 +0200)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Tue, 29 Jul 2014 14:29:16 +0000 (11:29 -0300)
Bug 11679 introduces an ods export for reports.

It looks quite buggy:
1/ You get a Perl error if the report has no results
2/ The ods file contains 1 lines less than the total results.

Test plan:
After applying this patch, try to export a report which has no results
and verify you get an ods file with headers only.
Try to export a report which has a least 1 result and verify the
generated ods has the right number of lines.

Signed-off-by: Robert Higgins <robert.higgins@catalyst.net.nz>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Fixes the reported problem, passes all tests and QA script.
Added the sign-off line for Robert.

Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
reports/guided_reports.pl

index b6cb822..ad72b44 100755 (executable)
@@ -814,8 +814,10 @@ elsif ($phase eq 'Export'){
                 my $table = $doc->getTable(0);
                 my @headers = header_cell_values( $sth );
                 my $rows = $sth->fetchall_arrayref();
-                my ( $nb_rows, $nb_cols ) = ( scalar(@$rows), scalar(@{$rows->[0]}) );
-                $doc->expandTable( $table, $nb_rows, $nb_cols );
+                my ( $nb_rows, $nb_cols ) = ( 0, 0 );
+                $nb_rows = @$rows;
+                $nb_cols = @headers;
+                $doc->expandTable( $table, $nb_rows + 1, $nb_cols );
 
                 my $row = $doc->getRow( $table, 0 );
                 my $j = 0;
@@ -823,13 +825,14 @@ elsif ($phase eq 'Export'){
                     $doc->cellValue( $row, $j, $header );
                     $j++;
                 }
-                for ( my $i = 1; $i < $nb_rows +1 ; $i++ ) {
+                my $i = 1;
+                for ( @$rows ) {
                     $row = $doc->getRow( $table, $i );
                     for ( my $j = 0 ; $j < $nb_cols ; $j++ ) {
-                        # FIXME Bug 11944
                         my $value = Encode::encode( 'UTF8', $rows->[$i - 1][$j] );
                         $doc->cellValue( $row, $j, $value );
                     }
+                    $i++;
                 }
                 $doc->save();
                 binmode(STDOUT);