[freeside-commits] freeside/httemplate/graph/elements monthly.html, 1.3, 1.3.2.1
Jeff Finucane,420,,
jeff at wavetail.420.am
Fri Jun 22 10:27:48 PDT 2007
Update of /home/cvs/cvsroot/freeside/httemplate/graph/elements
In directory wavetail:/tmp/cvs-serv4630
Modified Files:
Tag: FREESIDE_1_7_BRANCH
monthly.html
Log Message:
add csv and excel export to sales reports (1426)
Index: monthly.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/graph/elements/monthly.html,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -d -r1.3 -r1.3.2.1
--- monthly.html 23 Aug 2006 22:25:38 -0000 1.3
+++ monthly.html 22 Jun 2007 17:27:46 -0000 1.3.2.1
@@ -29,6 +29,8 @@
% }
% }
%
+% my @mon = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
+%
% my $report = new FS::Report::Table::Monthly (
%
% #'items' => $opt{'items'},
@@ -51,7 +53,101 @@
% );
% my $data = $report->data;
%
-% if ( $cgi->param('_type') =~ /^(png)$/ ) {
+% if ( $cgi->param('_type') =~ /^(csv)$/ ) {
+%
+% #http_header('Content-Type' => 'text/comma-separated-values' ); #IE chokes
+% http_header('Content-Type' => 'text/plain' );
+%
+% my $csv = new Text::CSV_XS { 'always_quote' => 1,
+% 'eol' => "\n", #"\015\012", #"\012"
+% };
+%
+% $csv->combine(map { my $m=$_; $m =~ s/^(\d+)\//$mon[$1-1] /; $m; }
+% ('', @{$data->{label}}, $opt{'nototal'} ? () : 'Total')
+% );
+%
+<% $csv->string %>
+
+% my @bottom_total = ();
+% foreach ( @{ $data->{'items'} } ) {
+%
+% my $col = 0;
+% my $total = 0;
+% $csv->combine(
+% shift( @{ $data->{'item_labels'} } ),
+% map { $total += $_; $bottom_total[$col++] += $_; sprintf("%.2f", $_); }
+% ( @{ shift( @{$data->{data}} ) } ),
+% ( $opt{'nototal'} ? () : sprintf("%.2f", $total) ),
+% );
+% unless ( $opt{'nototal'} ) {
+% $bottom_total[$col++] += $total;
+% }
+%
+<% $csv->string %>
+
+% }
+%
+% if ( $opt{'bottom_total'} ) {
+% $csv->combine(
+% 'Total',
+% map { sprintf("%.2f", $_) } @bottom_total,
+% );
+%
+<% $csv->string %>
+
+% }
+%
+% } elsif ( $cgi->param('_type') =~ /(\.xls)$/ ) {
+%
+% #http_header('Content-Type' => 'application/excel' ); #eww
+% http_header('Content-Type' => 'application/vnd.ms-excel' );
+% #http_header('Content-Type' => 'application/msexcel' ); #alas
+%
+% my $output = '';
+% my $XLS = new IO::Scalar \$output;
+% my $workbook = Spreadsheet::WriteExcel->new($XLS)
+% or die "Error opening .xls file: $!";
+%
+% my $worksheet = $workbook->add_worksheet(substr($opt{'title'},0,31));
+%
+% my($r,$c) = (0,0);
+%
+% foreach ('', @{$data->{label}}, ($opt{'nototal'} ? () : 'Total') ) {
+% my $header = $_;
+% $header =~ s/^(\d+)\//$mon[$1-1] /;
+% $worksheet->write($r, $c++, $header)
+% }
+%
+% my @bottom_total = ();
+% foreach ( @{ $data->{'items'} } ) {
+% $r++;
+% $c = 0;
+% my $total = 0;
+% $worksheet->write( $r, $c++, shift( @{ $data->{'item_labels'} } ) );
+% foreach ( @{ shift( @{$data->{data}} ) } ) {
+% $total += $_;
+% $bottom_total[$c] += $_;
+% $worksheet->write($r, $c++, sprintf("%.2f", $_) );
+% }
+% unless ( $opt{'nototal'} ) {
+% $bottom_total[$c] += $total;
+% $worksheet->write($r, $c++, sprintf("%.2f", $total) );
+% }
+% }
+%
+% $c = 0;
+% if ( $opt{'bottom_total'} ) {
+% $r++;
+% $worksheet->write($r, $c++, 'Total');
+% $worksheet->write($r, $c++, sprintf("%.2f", $_)) foreach @bottom_total;
+% }
+%
+% $workbook->close();# or die "Error creating .xls file: $!";
+%
+% http_header('Content-Length' => length($output) );
+%
+<% $output %>
+% } elsif ( $cgi->param('_type') =~ /^(png)$/ ) {
%
% #my $chart = Chart::LinesPoints->new(1024,480);
% #my $chart = Chart::LinesPoints->new(768,480);
@@ -100,16 +196,23 @@
%
% } else {
%
-% my @mon = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
-%
-%
<% include('/elements/header.html', $opt{'title'} ) %>
% $cgi->param('_type', 'png');
<IMG SRC="<% $cgi->self_url %>" WIDTH="976" HEIGHT="384">
-<BR>
+<P ALIGN="right">
-<% table('e8e8e8') %>
+% unless ( $opt{'disable_download'} ) {
+% $cgi->param('_type', "monthly.xls" );
+ Download full results
+ as <A HREF="<% $cgi->self_url %>">Excel spreadsheet</A>
+% $cgi->param('_type', 'csv');
+ as <A HREF="<% $cgi->self_url %>">CSV file</A></P>
+% $cgi->param('_type', "html" );
+% }
+%
+</P>
+<% include('/elements/table.html', 'e8e8e8') %>
<TR>
More information about the freeside-commits
mailing list