View | Details | Raw Unified | Return to bug 11679
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt (+3 lines)
Lines 820-825 canned reports and writing custom SQL reports.</p> Link Here
820
<select name="format" id="format">
820
<select name="format" id="format">
821
<option value="csv">Comma separated text</option>
821
<option value="csv">Comma separated text</option>
822
<option value="tab">Tab separated text</option>
822
<option value="tab">Tab separated text</option>
823
[% IF csv2ods_is_installed %]
824
  <option value="ods">Open Document Spreadsheet</option>
825
[% END %]
823
</select>
826
</select>
824
<input type="hidden" name="sql" value="[% sql |html %]" />
827
<input type="hidden" name="sql" value="[% sql |html %]" />
825
<input type="hidden" name="phase" value="Export" />
828
<input type="hidden" name="phase" value="Export" />
(-)a/reports/guided_reports.pl (-4 / +33 lines)
Lines 21-26 Link Here
21
use CGI qw/-utf8/;
21
use CGI qw/-utf8/;
22
use Text::CSV;
22
use Text::CSV;
23
use URI::Escape;
23
use URI::Escape;
24
use File::Temp;
24
use C4::Reports::Guided;
25
use C4::Reports::Guided;
25
use C4::Auth qw/:DEFAULT get_session/;
26
use C4::Auth qw/:DEFAULT get_session/;
26
use C4::Output;
27
use C4::Output;
Lines 761-766 elsif ($phase eq 'Run this report'){ Link Here
761
    else {
762
    else {
762
        push @errors, { no_sql_for_id => $report_id };
763
        push @errors, { no_sql_for_id => $report_id };
763
    }
764
    }
765
    my $csv2ods_cmd = qx|which csv2ods|;
766
    chomp $csv2ods_cmd;
767
    my $csv2ods_is_installed =
768
        ( not $csv2ods_cmd or not -f $csv2ods_cmd )
769
            ? 0
770
            : 1;
771
    $template->param( csv2ods_is_installed => $csv2ods_is_installed );
764
}
772
}
765
773
766
elsif ($phase eq 'Export'){
774
elsif ($phase eq 'Export'){
Lines 780-799 elsif ($phase eq 'Export'){ Link Here
780
                print join("\t", @$row), "\n";
788
                print join("\t", @$row), "\n";
781
            }
789
            }
782
        } else {
790
        } else {
783
            my $csv = Text::CSV->new({binary => 1});
791
            my $delimiter = C4::Context->preference('delimiter') || ',';
792
            my $csv_content = q||;
793
            my $csv = Text::CSV->new({binary => 1, sep_char => $delimiter});
784
            $csv or die "Text::CSV->new({binary => 1}) FAILED: " . Text::CSV->error_diag();
794
            $csv or die "Text::CSV->new({binary => 1}) FAILED: " . Text::CSV->error_diag();
785
            if ($csv->combine(header_cell_values($sth))) {
795
            if ($csv->combine(header_cell_values($sth))) {
786
                print $csv->string(), "\n";
796
                $csv_content .= $csv->string(). "\n";
787
            } else {
797
            } else {
788
                push @$q_errors, { combine => 'HEADER ROW: ' . $csv->error_diag() } ;
798
                push @$q_errors, { combine => 'HEADER ROW: ' . $csv->error_diag() } ;
789
            }
799
            }
790
            while (my $row = $sth->fetchrow_arrayref()) {
800
            while (my $row = $sth->fetchrow_arrayref()) {
791
                if ($csv->combine(@$row)) {
801
                if ($csv->combine(@$row)) {
792
                    print $csv->string(), "\n"; 
802
                    $csv_content .= $csv->string(). "\n";
793
                } else {
803
                } else {
794
                    push @$q_errors, { combine => $csv->error_diag() } ;
804
                    push @$q_errors, { combine => $csv->error_diag() } ;
795
                }
805
                }
796
            }
806
            }
807
            if ( $format eq 'csv' ) {
808
                print $csv_content;
809
            }
810
            elsif ( $format eq 'ods' ) {
811
                my $csv_fh = File::Temp->new();
812
                my $ods_fh = File::Temp->new();
813
                print $csv_fh $csv_content;
814
                my $csv_filepath = $csv_fh->filename;
815
                my $ods_filepath = $ods_fh->filename;
816
817
                my $csv2ods_cmd = qx|which csv2ods|;
818
                chomp $csv2ods_cmd;
819
                qx|
820
                    $csv2ods_cmd -i $csv_filepath -o $ods_filepath -d '$delimiter'
821
                |;
822
                qx|cp $ods_filepath /tmp/pouet.ods|;
823
                qx|cp $csv_filepath /tmp/pouet.csv|;
824
                print $_ while <$ods_fh>;
825
                close $csv_fh;
826
            }
797
        }
827
        }
798
        foreach my $err (@$q_errors, @errors) {
828
        foreach my $err (@$q_errors, @errors) {
799
            print "# ERROR: " . (map {$_ . ": " . $err->{$_}} keys %$err) . "\n";
829
            print "# ERROR: " . (map {$_ . ": " . $err->{$_}} keys %$err) . "\n";
800
- 

Return to bug 11679