[freeside-commits] branch master updated. 8ce2c1f11378b22966ec536f11898b4708a40237

Mark Wells mark at 420.am
Fri Jul 13 15:33:58 PDT 2012


The branch, master has been updated
       via  8ce2c1f11378b22966ec536f11898b4708a40237 (commit)
       via  15db7ad6e6ea2e57784368eec80e4aae54358f77 (commit)
      from  0ad946f751d3a953c8a41eea1d30ad362ba38ace (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 8ce2c1f11378b22966ec536f11898b4708a40237
Author: Mark Wells <mark at freeside.biz>
Date:   Fri Jul 13 15:33:43 2012 -0700

    XLSX format for spreadsheet download, #17971

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index b4ce0ba..f081c17 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -5204,6 +5204,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 e26a4b7..51edd97 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 5d5cc12..4d72c2e 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 bd6bb86..932cf1a 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 8e56355..9ebf2f1 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 15db7ad6e6ea2e57784368eec80e4aae54358f77
Author: Mark Wells <mark at freeside.biz>
Date:   Fri Jul 13 15:33:02 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