blob: 8540dcf06ee15582479566a2e4bba3d9109b2292 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
<%doc>
Excel spreadsheet view.
</%doc>
<%init>
my %opt = @_;
my $group_info = $m->comp('core', %opt);
# minor false laziness with search-xls.html
my $override = '';
$override = 'XLSX' if grep { $_->num_rows >= 65536 }
@{ $group_info->{groups} };
my $format = $FS::CurrentUser::CurrentUser->spreadsheet_format($override);
my $filename = $opt{'name'} || PL($opt{'name_singular'});
$filename .= $format->{extension};
http_header('Content-Type' => $format->{mime_type} );
http_header('Content-Disposition' => qq!attachment;filename="$filename"! );
$HTML::Mason::Commands::r->headers_out->{'Cache-control'} = 'max-age=0';
my $data = '';
my $XLS = new IO::Scalar \$data;
my $workbook = $format->{class}->new($XLS)
or die "Error opening Excel file: $!";
my $title = $opt{'title'};
$title =~ s/[\[\]\:\*\?\/\/]//g;
$title = substr($title, 0, 31);
for (my $curr_group = 0; $curr_group < $group_info->{num}; $curr_group++) {
my $group = $group_info->{groups}[$curr_group];
my $query = $group_info->{queries}[$curr_group];
my $footer = $group_info->{group_footers}[$curr_group];
my $label = $group_info->{group_labels}[$curr_group];
# run the query
my @rows = $query->qsearch;
#warn Dumper(\@rows); #DEBUG
# pass arrayrefs to write_row to write multiple rows
$opt{footer} = [ List::MoreUtils::pairwise { [ $a, $b ] }
@$footer,
@{$group_info->{total_footer}}
];
$m->comp('/search/elements/search-xls.html:worksheet',
workbook => $workbook,
title => $label,
header => $opt{header},
opt => \%opt,
rows => \@rows,
);
}
$workbook->close();
$m->clear_buffer();
$m->print($data);
</%init>
|