Bug 12622: Fix export report as ods

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>
This commit is contained in:
Jonathan Druart 2014-07-22 12:15:35 +02:00 committed by Tomas Cohen Arazi
parent 9c138fbfb1
commit 0e936ce220

View file

@ -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);