[freeside-commits] branch FREESIDE_2_3_BRANCH updated. 7d3df502cdb301418ea0659e39c48bd940591d4c
Mark Wells
mark at 420.am
Fri Jul 13 15:35:36 PDT 2012
The branch, FREESIDE_2_3_BRANCH has been updated
via 7d3df502cdb301418ea0659e39c48bd940591d4c (commit)
via e5b69b895a09ab1e1904ffb06d910956ca7a7e4e (commit)
from f5239a8e377e11c508bd918eaae3579b0535ceaa (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 7d3df502cdb301418ea0659e39c48bd940591d4c
Author: Mark Wells <mark at freeside.biz>
Date: Fri Jul 13 15:35:18 2012 -0700
XLSX format for spreadsheet download, #17971
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 2645a42..81e1b7d 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -5097,6 +5097,17 @@ and customer address. Include units.',
'description' => 'If set, automatically log users out of the backoffice after this many minutes.',
'type' => 'text',
},
+
+ {
+ 'key' => 'spreadsheet_format',
+ 'section' => 'UI',
+ 'description' => 'Default format for spreadsheet download.',
+ 'type' => 'select',
+ 'select_hash' => [
+ 'XLS' => 'XLS (Excel 97/2000/XP)',
+ 'XLSX' => 'XLSX (Excel 2007+)',
+ ],
+ },
{ key => "apacheroot", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
{ key => "apachemachine", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm
index 5ab9534..7d81fb6 100644
--- a/FS/FS/Mason.pm
+++ b/FS/FS/Mason.pm
@@ -91,6 +91,9 @@ if ( -e $addl_handler_use_file ) {
use Text::CSV_XS;
use Spreadsheet::WriteExcel;
use Spreadsheet::WriteExcel::Utility;
+ use Excel::Writer::XLSX;
+ use Excel::Writer::XLSX::Utility;
+
use Business::CreditCard 0.30; #for mask-aware cardtype()
use NetAddr::IP;
use Net::Ping;
diff --git a/FS/FS/access_user.pm b/FS/FS/access_user.pm
index 075733a..c5ce1af 100644
--- a/FS/FS/access_user.pm
+++ b/FS/FS/access_user.pm
@@ -511,6 +511,38 @@ sub default_customer_view {
}
+=item spreadsheet_format
+
+Returns a hashref of this user's Excel spreadsheet download settings:
+'extension' (xls or xlsx), 'class' (Spreadsheet::WriteExcel or
+Excel::Writer::XLSX), and 'mime_type'.
+
+=cut
+
+my %formats = (
+ XLS => {
+ extension => '.xls',
+ class => 'Spreadsheet::WriteExcel',
+ mime_type => 'application/vnd.ms-excel',
+ },
+ XLSX => {
+ extension => '.xlsx',
+ class => 'Excel::Writer::XLSX',
+ mime_type => # it's on wikipedia, it must be true
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ }
+);
+
+sub spreadsheet_format {
+ my $self = shift;
+
+ my $f = $self->option('spreadsheet_format')
+ || $conf->config('spreadsheet_format')
+ || 'XLS';
+
+ $formats{$f};
+}
+
=item is_system_user
Returns true if this user has the name of a known system account. These
diff --git a/httemplate/pref/pref-process.html b/httemplate/pref/pref-process.html
index e45b76e..283fc09 100644
--- a/httemplate/pref/pref-process.html
+++ b/httemplate/pref/pref-process.html
@@ -48,7 +48,8 @@ unless ( $error ) { # if ($access_user) {
my %param = $access_user->options;
#XXX autogen
- my @paramlist = qw( locale menu_position default_customer_view mobile_menu
+ my @paramlist = qw( locale menu_position default_customer_view
+ spreadsheet_format mobile_menu
disable_html_editor disable_enter_submit_onetimecharge
email_address
snom-ip snom-username snom-password
diff --git a/httemplate/pref/pref.html b/httemplate/pref/pref.html
index d3fcbdf..ca19035 100644
--- a/httemplate/pref/pref.html
+++ b/httemplate/pref/pref.html
@@ -75,6 +75,21 @@ Interface
</SELECT>
</TD>
</TR>
+
+ <TR>
+ <TH ALIGN="right">Spreadsheet download format: </TH>
+ <TD COLSPAN=2>
+ <SELECT NAME="spreadsheet_format">
+% my $xls = $curuser->option('spreadsheet_format') eq 'XLS';
+% my $xlsx = $curuser->option('spreadsheet_format') eq 'XLSX';
+ <OPTION VALUE=""></OPTION>
+ <OPTION VALUE="XLS"<% $xls ? 'SELECTED' : '' %>>XLS (Excel 97/2000/XP)
+ </OPTION>
+ <OPTION VALUE="XLSX"<% $xlsx ? 'SELECTED' : ''%>>XLSX (Excel 2007+)
+ </OPTION>
+ </SELECT>
+ </TD>
+ </TR>
<TR>
<TH ALIGN="right" COLSPAN=1>Disable HTML editor for customer notes: </TH>
diff --git a/httemplate/search/elements/search-xls.html b/httemplate/search/elements/search-xls.html
index a3a8226..c862dfb 100644
--- a/httemplate/search/elements/search-xls.html
+++ b/httemplate/search/elements/search-xls.html
@@ -7,14 +7,17 @@ my $header = $args{'header'};
my $rows = $args{'rows'};
my %opt = %{ $args{'opt'} };
+my $format = $FS::CurrentUser::CurrentUser->spreadsheet_format;
+my $filename = $opt{'name'} || PL($opt{'name_singular'});
+$filename .= $format->{extension};
+
#http_header('Content-Type' => 'application/excel' ); #eww
#http_header('Content-Type' => 'application/msexcel' ); #alas
#http_header('Content-Type' => 'application/x-msexcel' ); #?
#http://support.microsoft.com/kb/199841
-http_header('Content-Type' => 'application/vnd.ms-excel' );
-http_header('Content-Disposition' =>
- 'attachment;filename="'.($opt{'name'} || PL($opt{'name_singular'}) ).'.xls"');
+http_header('Content-Type' => $format->{mime_type} );
+http_header('Content-Disposition' => qq!attachment;filename="$filename"! );
#http://support.microsoft.com/kb/812935
#http://support.microsoft.com/kb/323308
@@ -22,8 +25,8 @@ $HTML::Mason::Commands::r->headers_out->{'Cache-control'} = 'max-age=0';
my $data = '';
my $XLS = new IO::Scalar \$data;
-my $workbook = Spreadsheet::WriteExcel->new($XLS)
- or die "Error opening .xls file: $!";
+my $workbook = $format->{class}->new($XLS)
+ or die "Error opening Excel file: $!";
my $worksheet = $workbook->add_worksheet(substr($opt{'title'},0,31));
commit e5b69b895a09ab1e1904ffb06d910956ca7a7e4e
Author: Mark Wells <mark at freeside.biz>
Date: Fri Jul 13 15:35:15 2012 -0700
sales by ad source report: filter by status, #17971
diff --git a/httemplate/elements/select-cust_pkg-status.html b/httemplate/elements/select-cust_pkg-status.html
index ec37eaf..2114c07 100644
--- a/httemplate/elements/select-cust_pkg-status.html
+++ b/httemplate/elements/select-cust_pkg-status.html
@@ -3,7 +3,9 @@
<% $onchange %>
>
+% if ( !$opt{'disable_empty'} ) {
<OPTION VALUE="">all
+% }
% foreach my $option ( @{ $opt{'statuses'} } ) {
diff --git a/httemplate/search/cust_bill_pkg_referral.html b/httemplate/search/cust_bill_pkg_referral.html
index 1bb6b91..3cb434c 100644
--- a/httemplate/search/cust_bill_pkg_referral.html
+++ b/httemplate/search/cust_bill_pkg_referral.html
@@ -135,8 +135,15 @@ my @where = ( $agentnums_sql,
"cust_bill._date <= $ending",
);
-if ( $cgi->param('status') =~ /^([a-z]+)$/ ) {
- push @where, FS::cust_pkg->cust_status_sql . " = '$1'";
+my @status_where;
+foreach my $status ($cgi->param('status')) {
+ if ( $status =~ /^([- a-z]+)$/ ) { #"one-time charge"
+ push @status_where, "'$status'";
+ }
+}
+if ( @status_where ) {
+ push @where, '('. FS::cust_pkg->status_sql.
+ ') IN (' . join(',', @status_where) .')';
}
if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
diff --git a/httemplate/search/report_cust_bill_pkg_referral.html b/httemplate/search/report_cust_bill_pkg_referral.html
index 1fbb13d..ff2caa1 100644
--- a/httemplate/search/report_cust_bill_pkg_referral.html
+++ b/httemplate/search/report_cust_bill_pkg_referral.html
@@ -12,6 +12,12 @@
'empty_label' => 'all',
&>
+<& /elements/tr-select-cust_pkg-status.html,
+ 'label' => 'Package status',
+ 'multiple' => 1,
+ 'disable_empty' => 1,
+&>
+
<& /elements/tr-select-pkg_class.html,
'pre_options' => [ '' => 'all', '0' => '(empty class)' ],
'disable_empty' => 1,
-----------------------------------------------------------------------
Summary of changes:
FS/FS/Conf.pm | 11 +++++++
FS/FS/Mason.pm | 3 ++
FS/FS/access_user.pm | 32 ++++++++++++++++++++
httemplate/elements/select-cust_pkg-status.html | 2 +
httemplate/pref/pref-process.html | 3 +-
httemplate/pref/pref.html | 15 +++++++++
httemplate/search/cust_bill_pkg_referral.html | 11 +++++-
httemplate/search/elements/search-xls.html | 13 +++++---
.../search/report_cust_bill_pkg_referral.html | 6 ++++
9 files changed, 88 insertions(+), 8 deletions(-)
More information about the freeside-commits
mailing list