[freeside-commits] branch master updated. d9f0a98539cd8dd957ea9a4b5d77fbb739d43d2e

Ivan ivan at 420.am
Wed Mar 9 11:17:04 PST 2016


The branch, master has been updated
       via  d9f0a98539cd8dd957ea9a4b5d77fbb739d43d2e (commit)
      from  796780078517c26803a7689ccd80931381de23ea (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 d9f0a98539cd8dd957ea9a4b5d77fbb739d43d2e
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Mar 9 11:17:03 2016 -0800

    package filters in a large package list, RT#39822

diff --git a/httemplate/elements/select-cust_location.html b/httemplate/elements/select-cust_location.html
new file mode 100644
index 0000000..29563c5
--- /dev/null
+++ b/httemplate/elements/select-cust_location.html
@@ -0,0 +1,65 @@
+<SELECT NAME     = "locationnum"
+        ID       = "locationnum"
+%     if ( $opt{onchange} ) {
+        onchange = "<% $opt{onchange} %>"
+%     }
+    >
+
+% #false laziness w/select-table.html
+% my @pre_options  = $opt{pre_options}  ? @{ $opt{pre_options} } : ();
+% while ( @pre_options ) { 
+%   my $pre_opt   = shift(@pre_options);
+%   my $pre_label = shift(@pre_options);
+%   my $selected = #$opt{'all_selected'}
+%                  # || ( ref($locationnum) && $locationnum->{$pre_opt} )
+%                  # ||
+%                       ( $locationnum eq $pre_opt );
+    <OPTION VALUE="<% $pre_opt %>"
+            <% $selected ? 'SELECTED' : '' %>
+    ><% $pre_label %>
+% } 
+
+% if ( $cust_main ) {
+%   my $selected = ( $locationnum == $cust_main->ship_locationnum );
+    <OPTION VALUE="<% $cust_main->ship_locationnum %>"
+            <% $selected ? 'SELECTED' : '' %>
+    ><% $opt{'empty_label'} || '(default service address)' |h %>
+% }
+
+% if ( $opt{'is_optional'} ) {
+  <OPTION VALUE="-2" <% $locationnum == -2 ? 'SELECTED' : ''%>><% $opt{'optional_label'} || '(not required)' |h %>
+% }
+
+% foreach my $loc ( @{ $opt{cust_location} } ) {
+%   # don't show the ship_location redundantly
+%   next if $cust_main && $cust_main->ship_locationnum == $loc->locationnum;
+    <OPTION VALUE="<% $loc->locationnum %>"
+            <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %>
+    ><% $loc->line( cust_main      => $cust_main,
+                    countrydefault => $countrydefault,
+                  )
+     |h %>
+% }
+
+% if ( $addnew ) {
+    <OPTION VALUE="-1"
+            <% $locationnum == -1 ? 'SELECTED' : '' %>
+    >Add new location
+% }
+
+</SELECT>
+<%init>
+
+my $conf = new FS::Conf;
+my $countrydefault = $conf->config('countrydefault') || 'US';
+
+my %opt = @_;
+my $cust_main     = $opt{'cust_main'};
+my $locationnum   = $opt{'curr_value'};
+
+$opt{'cust_location'} ||= [ $cust_main ? $cust_main->cust_location : () ];
+
+my $addnew = exists($opt{addnew}) ? $opt{addnew}
+                                  : $cust_main ? 1 : ( $locationnum>0 ? 0 : 1 );
+
+</%init>
diff --git a/httemplate/elements/select-table.html b/httemplate/elements/select-table.html
index d7ec015..6fb6b38 100644
--- a/httemplate/elements/select-table.html
+++ b/httemplate/elements/select-table.html
@@ -159,7 +159,7 @@ my $key = $opt{'value_col'} || $dbdef_table->primary_key;
 
 my $name_col = $opt{'name_col'};
 
-my $value = $opt{'curr_value'} || $opt{'value'};
+my $value = exists($opt{'curr_value'}) ? $opt{'curr_value'} : $opt{'value'};
 $value = [ split(/\s*,\s*/, $value) ] if $opt{'multiple'} && $value =~ /,/;
 
 #my $addl_from = $opt{'addl_from'} || '';
diff --git a/httemplate/elements/tr-select-cust_location.html b/httemplate/elements/tr-select-cust_location.html
index 7a5b43b..3078f2c 100644
--- a/httemplate/elements/tr-select-cust_location.html
+++ b/httemplate/elements/tr-select-cust_location.html
@@ -183,33 +183,14 @@ Example:
 <TR>
   <<%$th%> ALIGN="right"><% $opt{'label'} || emt('Service location') %></<%$th%>>
   <TD COLSPAN=7>
-    <SELECT NAME     = "locationnum"
-            ID       = "locationnum"
-            onchange = "locationnum_changed(this);"
-    >
-% if ( $cust_main ) {
-      <OPTION VALUE="<% $cust_main->ship_locationnum %>"><% $opt{'empty_label'} || '(default service address)' |h %>
-% }
-% if ( $opt{'is_optional'} ) {
-    <OPTION VALUE="-2" <% $locationnum == -2 ? 'SELECTED' : ''%>><% $opt{'optional_label'} || '(not required)' |h %>
-% }
-%
-%     foreach my $loc ( @cust_location ) {
-%       # don't show the ship_location redundantly
-%       next if $cust_main && $cust_main->ship_locationnum == $loc->locationnum;
-        <OPTION VALUE="<% $loc->locationnum %>"
-                <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %>
-        ><% $loc->line( cust_main      => $cust_main,
-                        countrydefault => $countrydefault,
-                      )
-         |h %>
-%     }
-%     if ( $addnew ) {
-        <OPTION VALUE="-1"
-                <% $locationnum == -1 ? 'SELECTED' : '' %>
-        >Add new location
-%     }
-    </SELECT>
+
+    <& /elements/select-cust_location.html,
+         %opt,
+         'curr_value'    => $locationnum,
+         'cust_location' => \@cust_location,
+         'onchange'      => 'locationnum_changed(this);',
+    &>
+
   </TD>
 </TR>
 
diff --git a/httemplate/view/cust_main/packages.html b/httemplate/view/cust_main/packages.html
index ddd92b3..9add4b2 100755
--- a/httemplate/view/cust_main/packages.html
+++ b/httemplate/view/cust_main/packages.html
@@ -44,6 +44,7 @@ table.hiddenrows {
 }
 
 </STYLE>
+
 % # activate rolldown buttons for hidden package blocks
 <SCRIPT TYPE="text/javascript">
 function toggle_rolldown() {
@@ -79,10 +80,71 @@ for (var i = 0; i < all_buttons.length; i++) {
 if ( el ) el.scrollIntoView(true);
 </&>
 </SCRIPT>
+
 <TABLE>
   <TR>
     <TD ALIGN="left" VALIGN="top">
 
+% my $br = 0;
+
+% if ( $total_pkgs > $maxrecords ) {
+
+%   if ( 1 ) { #FS::pkg_class->num_pkg_class ) {
+      <% $br++ ? ' | ' : '' %>
+      Class: <& /elements/select-cust-pkg_class.html,
+                  curr_value  => scalar($cgi->param('classnum')),
+                  onchange    => 'classnum_changed(this);',
+                  pre_options => [ '-1' => 'all',
+                                    '0' => '(none)',
+                                 ],
+             &>
+%   }
+
+    <% $br++ ? ' | ' : '' %>
+    Status: <& /elements/select-cust_pkg-status.html,
+                 curr_value => scalar($cgi->param('status')),
+                 onchange   => 'status_changed(this);',
+            &>
+
+%   if ( 1 ) { #$cust_main->num_cust_location ) {
+      <% $br++ ? ' | ' : '' %>
+      Location: <& /elements/select-cust_location.html,
+                     cust_main   => $cust_main,
+                     curr_value  => scalar($cgi->param('locationnum')),
+                     addnew      => 0,
+                     onchange    => 'locationnum_changed(this);',
+                     pre_options => [ '-1' => 'all', ],
+                &>
+%   }
+
+  <SCRIPT TYPE="text/javascript">
+
+    function classnum_changed(what) {
+%     my $classnum = $cgi->param('classnum');
+%     $cgi->delete('classnum');
+      window.location = '<% $cgi->self_url %>;classnum=' + what.options[what.selectedIndex].value;
+%     $cgi->param('classnum', $classnum);
+    }
+
+    function status_changed(what) {
+%     my $status = $cgi->param('status');
+%     $cgi->delete('status');
+      window.location = '<% $cgi->self_url %>;status=' + what.options[what.selectedIndex].value;
+%     $cgi->param('status', $status);
+    }
+
+    function locationnum_changed(what) {
+%     my $locationnum = $cgi->param('locationnum');
+%     $cgi->delete('locationnum');
+      window.location = '<% $cgi->self_url %>;locationnum=' + what.options[what.selectedIndex].value;
+%     $cgi->param('locationnum', $locationnum);
+    }
+    
+  </SCRIPT>
+
+% }
+
+<% $br++ ? ' | ' : '' %>
 % if ( $cust_main->num_cancelled_pkgs ) {
 %     if ( $cgi->param('showcancelledpackages') eq '0' #see if it was set by me
 %          || ( $conf->exists('hidecancelledpackages')
@@ -92,24 +154,25 @@ if ( el ) el.scrollIntoView(true);
 %     {
 %       my $prev = $cgi->param('showcancelledpackages');
 %       $cgi->param('showcancelledpackages', 1);
-  ( <a href="<% $cgi->self_url %>"><% mt('show') |h %> 
+  <a href="<% $cgi->self_url %>"><% mt('show') |h %> 
 %       $cgi->param('showcancelledpackages', $prev);
 %   } else {
 %       $cgi->param('showcancelledpackages', 0);
-  ( <a href="<% $cgi->self_url %>"><% mt('hide') |h %> 
+  <a href="<% $cgi->self_url %>"><% mt('hide') |h %> 
 %       $cgi->param('showcancelledpackages', 1);
 %   } 
 
- <% mt('cancelled packages') |h %></a> )
+ <% mt('cancelled packages') |h %></a>
 % } 
 
+<% $br++ ? ' | ' : '' %>
 % if ( $cgi->param('showoldpackages') ) {
 %   $cgi->param('showoldpackages', 0);
-    ( <a href="<% $cgi->self_url %>"><% mt('hide old packages') |h %></a> )
+    <a href="<% $cgi->self_url %>"><% mt('hide old packages') |h %></a>
 %   $cgi->param('showoldpackages', 1);
 % } else {
 %   $cgi->param('showoldpackages', 1);
-    ( <a href="<% $cgi->self_url %>"><% mt('show old packages') |h %></a> )
+    <a href="<% $cgi->self_url %>"><% mt('show old packages') |h %></a>
 %   $cgi->param('showoldpackages', 0);
 % }
 
@@ -218,6 +281,27 @@ unless ( $cgi->param('showoldpackages') ) {
   )";
 }
 
+if ( $cgi->param('classnum') =~ /^(\d+)$/ ) {
+  my $classnum = $1;
+  if ( $classnum == 0 ) {
+    $extra_sql .= " AND part_pkg.classnum IS NULL ";
+  } else {
+    $extra_sql .= " AND part_pkg.classnum = $classnum ";
+  }
+}
+
+if ( $cgi->param('status') =~ /^([\w ]+)$/ ) {
+  my $status = $1;
+  $extra_sql .= ' AND '. FS::cust_pkg->status_sql. " = '$status' ";
+}
+
+if ( $cgi->param('locationnum') =~ /^(\d+)$/ ) {
+  my $locationnum = $1;
+  $extra_sql .= " AND cust_pkg.locationnum = $locationnum ";
+}
+
+my $total_pkgs = $cust_main->all_pkgs;
+
 my $num_method = $hide_cancelled ? 'ncancelled_pkgs' : 'all_pkgs';
 my $num_pkgs = $cust_main->$num_method({ 
   'addl_from' => $addl_from,

-----------------------------------------------------------------------

Summary of changes:
 httemplate/elements/select-cust_location.html    |   65 +++++++++++++++
 httemplate/elements/select-table.html            |    2 +-
 httemplate/elements/tr-select-cust_location.html |   35 ++------
 httemplate/view/cust_main/packages.html          |   94 ++++++++++++++++++++--
 4 files changed, 163 insertions(+), 33 deletions(-)
 create mode 100644 httemplate/elements/select-cust_location.html




More information about the freeside-commits mailing list